{"version":3,"sources":["webpack:///../../../src/components/VPagination/VPagination.ts","webpack:///./src/views/Shop.vue","webpack:///./src/components/Product.vue","webpack:///./src/components/Variant.vue","webpack:///./src/components/Variant.vue?6fc9","webpack:///./src/components/Variant.vue?3157","webpack:///./src/components/Variant.vue?4cf5","webpack:///./src/components/Product.vue?a3e2","webpack:///./src/components/Product.vue?fc31","webpack:///./src/components/Product.vue?62e1","webpack:///../../../src/mixins/picker-button/index.ts","webpack:///../../../src/components/VDatePicker/VDatePickerTitle.ts","webpack:///../../../src/mixins/localable/index.ts","webpack:///../../../../src/components/VDatePicker/util/pad.ts","webpack:///../../../../src/components/VDatePicker/util/createNativeLocaleFormatter.ts","webpack:///../../../../src/components/VDatePicker/util/monthChange.ts","webpack:///../../../src/components/VDatePicker/VDatePickerHeader.ts","webpack:///../../../../src/components/VDatePicker/util/eventHelpers.ts","webpack:///../../../../src/components/VDatePicker/util/sanitizeDateString.ts","webpack:///../../../../src/components/VDatePicker/util/isDateAllowed.ts","webpack:///../../../../src/components/VDatePicker/mixins/date-picker-table.ts","webpack:///../../src/util/dateTimeUtils.ts","webpack:///../../../src/components/VDatePicker/VDatePickerDateTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerMonthTable.ts","webpack:///../../../src/components/VDatePicker/VDatePickerYears.ts","webpack:///../../../src/components/VPicker/VPicker.ts","webpack:///../../../src/components/VPicker/index.ts","webpack:///../../../src/mixins/picker/index.ts","webpack:///../../../../src/components/VCalendar/util/timestamp.ts","webpack:///../../../src/components/VDatePicker/VDatePicker.ts","webpack:///./src/components/Sale.vue","webpack:///./node_modules/zrender/lib/core/vector.js","webpack:///./node_modules/zrender/lib/mixin/Draggable.js","webpack:///./node_modules/zrender/lib/core/Eventful.js","webpack:///./node_modules/zrender/lib/core/fourPointsTransform.js","webpack:///./node_modules/zrender/lib/core/dom.js","webpack:///./node_modules/zrender/lib/core/event.js","webpack:///./node_modules/zrender/lib/core/GestureMgr.js","webpack:///./node_modules/zrender/lib/core/matrix.js","webpack:///./node_modules/zrender/lib/core/Point.js","webpack:///./node_modules/zrender/lib/core/BoundingRect.js","webpack:///./node_modules/zrender/lib/Handler.js","webpack:///./node_modules/zrender/lib/core/timsort.js","webpack:///./node_modules/zrender/lib/graphic/constants.js","webpack:///./node_modules/zrender/lib/Storage.js","webpack:///./node_modules/zrender/lib/animation/requestAnimationFrame.js","webpack:///./node_modules/zrender/lib/animation/easing.js","webpack:///./node_modules/zrender/lib/core/curve.js","webpack:///./node_modules/zrender/lib/animation/cubicEasing.js","webpack:///./node_modules/zrender/lib/animation/Clip.js","webpack:///./node_modules/zrender/lib/animation/Animator.js","webpack:///./node_modules/zrender/lib/animation/Animation.js","webpack:///./node_modules/zrender/lib/dom/HandlerProxy.js","webpack:///./node_modules/zrender/lib/config.js","webpack:///./node_modules/zrender/lib/core/Transformable.js","webpack:///./node_modules/zrender/lib/contain/text.js","webpack:///./node_modules/zrender/lib/Element.js","webpack:///./node_modules/zrender/lib/graphic/Group.js","webpack:///./node_modules/zrender/lib/zrender.js","webpack:///./node_modules/echarts/lib/util/number.js","webpack:///./node_modules/echarts/lib/util/model.js","webpack:///./node_modules/echarts/lib/util/clazz.js","webpack:///./node_modules/echarts/lib/model/mixin/makeStyleMapper.js","webpack:///./node_modules/echarts/lib/model/mixin/areaStyle.js","webpack:///./node_modules/zrender/lib/graphic/helper/image.js","webpack:///./node_modules/zrender/lib/graphic/helper/parseText.js","webpack:///./node_modules/zrender/lib/graphic/Displayable.js","webpack:///./node_modules/zrender/lib/core/bbox.js","webpack:///./node_modules/zrender/lib/core/PathProxy.js","webpack:///./node_modules/zrender/lib/contain/line.js","webpack:///./node_modules/zrender/lib/contain/cubic.js","webpack:///./node_modules/zrender/lib/contain/quadratic.js","webpack:///./node_modules/zrender/lib/contain/util.js","webpack:///./node_modules/zrender/lib/contain/arc.js","webpack:///./node_modules/zrender/lib/contain/windingLine.js","webpack:///./node_modules/zrender/lib/contain/path.js","webpack:///./node_modules/zrender/lib/graphic/Path.js","webpack:///./node_modules/zrender/lib/graphic/TSpan.js","webpack:///./node_modules/zrender/lib/graphic/Image.js","webpack:///./node_modules/zrender/lib/graphic/helper/roundRect.js","webpack:///./node_modules/zrender/lib/graphic/helper/subPixelOptimize.js","webpack:///./node_modules/zrender/lib/graphic/shape/Rect.js","webpack:///./node_modules/zrender/lib/graphic/Text.js","webpack:///./node_modules/echarts/lib/util/innerStore.js","webpack:///./node_modules/echarts/lib/util/states.js","webpack:///./node_modules/echarts/lib/animation/basicTransition.js","webpack:///./node_modules/echarts/lib/label/labelStyle.js","webpack:///./node_modules/echarts/lib/model/mixin/textStyle.js","webpack:///./node_modules/echarts/lib/model/mixin/lineStyle.js","webpack:///./node_modules/echarts/lib/model/mixin/itemStyle.js","webpack:///./node_modules/echarts/lib/model/Model.js","webpack:///./node_modules/echarts/lib/util/component.js","webpack:///./node_modules/echarts/lib/i18n/langEN.js","webpack:///./node_modules/echarts/lib/i18n/langZH.js","webpack:///./node_modules/echarts/lib/core/locale.js","webpack:///./node_modules/echarts/lib/util/time.js","webpack:///./node_modules/echarts/lib/util/format.js","webpack:///./node_modules/echarts/lib/util/layout.js","webpack:///./node_modules/echarts/lib/model/Component.js","webpack:///./node_modules/echarts/lib/model/globalDefault.js","webpack:///./node_modules/echarts/lib/util/types.js","webpack:///./node_modules/echarts/lib/data/helper/sourceHelper.js","webpack:///./node_modules/echarts/lib/model/internalComponentCreator.js","webpack:///./node_modules/echarts/lib/model/mixin/palette.js","webpack:///./node_modules/echarts/lib/util/log.js","webpack:///./node_modules/echarts/lib/model/Global.js","webpack:///./node_modules/echarts/lib/core/ExtensionAPI.js","webpack:///./node_modules/echarts/lib/core/CoordinateSystem.js","webpack:///./node_modules/echarts/lib/model/OptionManager.js","webpack:///./node_modules/echarts/lib/preprocessor/helper/compatStyle.js","webpack:///./node_modules/echarts/lib/preprocessor/backwardCompat.js","webpack:///./node_modules/echarts/lib/processor/dataStack.js","webpack:///./node_modules/echarts/lib/data/Source.js","webpack:///./node_modules/echarts/lib/data/helper/dataProvider.js","webpack:///./node_modules/echarts/lib/model/mixin/dataFormat.js","webpack:///./node_modules/echarts/lib/core/task.js","webpack:///./node_modules/echarts/lib/data/helper/dataValueHelper.js","webpack:///./node_modules/echarts/lib/data/helper/transform.js","webpack:///./node_modules/echarts/lib/data/DataStore.js","webpack:///./node_modules/echarts/lib/data/helper/sourceManager.js","webpack:///./node_modules/echarts/lib/component/tooltip/tooltipMarkup.js","webpack:///./node_modules/echarts/lib/component/tooltip/seriesFormatTooltip.js","webpack:///./node_modules/echarts/lib/model/Series.js","webpack:///./node_modules/echarts/lib/view/Component.js","webpack:///./node_modules/echarts/lib/chart/helper/createRenderPlanner.js","webpack:///./node_modules/zrender/lib/tool/transformPath.js","webpack:///./node_modules/zrender/lib/tool/path.js","webpack:///./node_modules/zrender/lib/graphic/shape/Circle.js","webpack:///./node_modules/zrender/lib/graphic/shape/Ellipse.js","webpack:///./node_modules/zrender/lib/graphic/helper/roundSector.js","webpack:///./node_modules/zrender/lib/graphic/shape/Sector.js","webpack:///./node_modules/zrender/lib/graphic/shape/Ring.js","webpack:///./node_modules/zrender/lib/graphic/helper/smoothBezier.js","webpack:///./node_modules/zrender/lib/graphic/helper/poly.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polygon.js","webpack:///./node_modules/zrender/lib/graphic/shape/Polyline.js","webpack:///./node_modules/zrender/lib/graphic/shape/Line.js","webpack:///./node_modules/zrender/lib/graphic/shape/BezierCurve.js","webpack:///./node_modules/zrender/lib/graphic/shape/Arc.js","webpack:///./node_modules/zrender/lib/graphic/CompoundPath.js","webpack:///./node_modules/zrender/lib/graphic/Gradient.js","webpack:///./node_modules/zrender/lib/graphic/LinearGradient.js","webpack:///./node_modules/zrender/lib/graphic/RadialGradient.js","webpack:///./node_modules/zrender/lib/core/OrientedBoundingRect.js","webpack:///./node_modules/zrender/lib/graphic/IncrementalDisplayable.js","webpack:///./node_modules/echarts/lib/util/graphic.js","webpack:///./node_modules/echarts/lib/view/Chart.js","webpack:///./node_modules/echarts/lib/util/throttle.js","webpack:///./node_modules/echarts/lib/visual/style.js","webpack:///./node_modules/echarts/lib/loading/default.js","webpack:///./node_modules/echarts/lib/core/Scheduler.js","webpack:///./node_modules/echarts/lib/theme/light.js","webpack:///./node_modules/echarts/lib/theme/dark.js","webpack:///./node_modules/echarts/lib/util/ECEventProcessor.js","webpack:///./node_modules/echarts/lib/visual/symbol.js","webpack:///./node_modules/echarts/lib/visual/helper.js","webpack:///./node_modules/echarts/lib/legacy/dataSelectAction.js","webpack:///./node_modules/echarts/lib/util/event.js","webpack:///./node_modules/zrender/lib/core/WeakMap.js","webpack:///./node_modules/echarts/lib/util/symbol.js","webpack:///./node_modules/zrender/lib/canvas/helper.js","webpack:///./node_modules/zrender/lib/canvas/dashStyle.js","webpack:///./node_modules/zrender/lib/canvas/graphic.js","webpack:///./node_modules/echarts/lib/util/decal.js","webpack:///./node_modules/echarts/lib/visual/decal.js","webpack:///./node_modules/echarts/lib/core/lifecycle.js","webpack:///./node_modules/echarts/lib/core/impl.js","webpack:///./node_modules/echarts/lib/core/echarts.js","webpack:///./node_modules/echarts/lib/extension.js","webpack:///./node_modules/zrender/lib/canvas/Layer.js","webpack:///./node_modules/zrender/lib/canvas/Painter.js","webpack:///./node_modules/echarts/lib/renderer/installCanvasRenderer.js","webpack:///./node_modules/echarts/lib/data/DataDiffer.js","webpack:///./node_modules/echarts/lib/data/helper/dimensionHelper.js","webpack:///./node_modules/echarts/lib/data/SeriesDimensionDefine.js","webpack:///./node_modules/echarts/lib/data/helper/SeriesDataSchema.js","webpack:///./node_modules/echarts/lib/data/SeriesData.js","webpack:///./node_modules/echarts/lib/data/helper/createDimensions.js","webpack:///./node_modules/echarts/lib/model/referHelper.js","webpack:///./node_modules/echarts/lib/data/helper/dataStackHelper.js","webpack:///./node_modules/echarts/lib/chart/helper/createSeriesData.js","webpack:///./node_modules/echarts/lib/chart/line/LineSeries.js","webpack:///./node_modules/echarts/lib/chart/helper/labelHelper.js","webpack:///./node_modules/echarts/lib/chart/helper/Symbol.js","webpack:///./node_modules/echarts/lib/chart/helper/SymbolDraw.js","webpack:///./node_modules/echarts/lib/chart/line/helper.js","webpack:///./node_modules/echarts/lib/util/vendor.js","webpack:///./node_modules/echarts/lib/chart/line/lineAnimationDiff.js","webpack:///./node_modules/echarts/lib/chart/line/poly.js","webpack:///./node_modules/echarts/lib/chart/helper/createClipPathFromCoordSys.js","webpack:///./node_modules/echarts/lib/coord/CoordinateSystem.js","webpack:///./node_modules/echarts/lib/chart/line/LineView.js","webpack:///./node_modules/echarts/lib/layout/points.js","webpack:///./node_modules/echarts/lib/processor/dataSample.js","webpack:///./node_modules/echarts/lib/chart/line/install.js","webpack:///./node_modules/echarts/lib/component/title/install.js","webpack:///./node_modules/echarts/lib/component/axisPointer/modelHelper.js","webpack:///./node_modules/echarts/lib/component/axis/AxisView.js","webpack:///./node_modules/echarts/lib/component/axisPointer/BaseAxisPointer.js","webpack:///./node_modules/echarts/lib/scale/Scale.js","webpack:///./node_modules/echarts/lib/data/OrdinalMeta.js","webpack:///./node_modules/echarts/lib/scale/helper.js","webpack:///./node_modules/echarts/lib/scale/Ordinal.js","webpack:///./node_modules/echarts/lib/scale/Interval.js","webpack:///./node_modules/echarts/lib/layout/barGrid.js","webpack:///./node_modules/echarts/lib/scale/Time.js","webpack:///./node_modules/echarts/lib/scale/Log.js","webpack:///./node_modules/echarts/lib/coord/scaleRawExtentInfo.js","webpack:///./node_modules/echarts/lib/coord/axisHelper.js","webpack:///./node_modules/echarts/lib/label/labelLayoutHelper.js","webpack:///./node_modules/echarts/lib/component/axis/AxisBuilder.js","webpack:///./node_modules/echarts/lib/component/axisPointer/viewHelper.js","webpack:///./node_modules/echarts/lib/coord/cartesian/cartesianAxisHelper.js","webpack:///./node_modules/echarts/lib/component/axisPointer/CartesianAxisPointer.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerModel.js","webpack:///./node_modules/echarts/lib/component/axisPointer/globalListener.js","webpack:///./node_modules/echarts/lib/component/axisPointer/AxisPointerView.js","webpack:///./node_modules/echarts/lib/component/axisPointer/findPointFromSeries.js","webpack:///./node_modules/echarts/lib/component/axisPointer/axisTrigger.js","webpack:///./node_modules/echarts/lib/component/axisPointer/install.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipModel.js","webpack:///./node_modules/echarts/lib/component/tooltip/helper.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipHTMLContent.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipRichContent.js","webpack:///./node_modules/echarts/lib/component/tooltip/TooltipView.js","webpack:///./node_modules/echarts/lib/component/tooltip/install.js","webpack:///./node_modules/echarts/lib/component/legend/LegendModel.js","webpack:///./node_modules/echarts/lib/component/helper/listComponent.js","webpack:///./node_modules/echarts/lib/component/legend/LegendView.js","webpack:///./node_modules/echarts/lib/component/legend/legendFilter.js","webpack:///./node_modules/echarts/lib/component/legend/legendAction.js","webpack:///./node_modules/echarts/lib/component/legend/installLegendPlain.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendModel.js","webpack:///./node_modules/echarts/lib/component/legend/ScrollableLegendView.js","webpack:///./node_modules/echarts/lib/component/legend/scrollableLegendAction.js","webpack:///./node_modules/echarts/lib/component/legend/installLegendScroll.js","webpack:///./node_modules/echarts/lib/component/legend/install.js","webpack:///./node_modules/echarts/lib/coord/cartesian/GridModel.js","webpack:///./node_modules/echarts/lib/coord/axisModelCommonMixin.js","webpack:///./node_modules/echarts/lib/coord/cartesian/AxisModel.js","webpack:///./node_modules/echarts/lib/coord/axisDefault.js","webpack:///./node_modules/echarts/lib/coord/axisCommonTypes.js","webpack:///./node_modules/echarts/lib/coord/axisModelCreator.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Cartesian2D.js","webpack:///./node_modules/echarts/lib/coord/axisTickLabelBuilder.js","webpack:///./node_modules/echarts/lib/coord/Axis.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Axis2D.js","webpack:///./node_modules/echarts/lib/coord/axisAlignTicks.js","webpack:///./node_modules/echarts/lib/coord/cartesian/Grid.js","webpack:///./node_modules/echarts/lib/component/axis/axisSplitHelper.js","webpack:///./node_modules/echarts/lib/component/axis/CartesianAxisView.js","webpack:///./node_modules/echarts/lib/component/grid/installSimple.js","webpack:///./node_modules/echarts/lib/component/grid/install.js","webpack:///./node_modules/echarts/lib/component/dataZoom/helper.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/DataZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SelectZoomView.js","webpack:///./node_modules/echarts/lib/component/helper/sliderMove.js","webpack:///./node_modules/echarts/lib/component/dataZoom/AxisProxy.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomProcessor.js","webpack:///./node_modules/echarts/lib/component/dataZoom/dataZoomAction.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installCommon.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomSelect.js","webpack:///./node_modules/echarts/lib/component/toolbox/featureManager.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxModel.js","webpack:///./node_modules/echarts/lib/component/toolbox/ToolboxView.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/SaveAsImage.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/MagicType.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/history.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/Restore.js","webpack:///./node_modules/echarts/lib/component/helper/interactionMutex.js","webpack:///./node_modules/echarts/lib/component/helper/BrushController.js","webpack:///./node_modules/echarts/lib/component/helper/cursorHelper.js","webpack:///./node_modules/echarts/lib/component/helper/brushHelper.js","webpack:///./node_modules/echarts/lib/component/helper/BrushTargetManager.js","webpack:///./node_modules/echarts/lib/component/toolbox/feature/DataZoom.js","webpack:///./node_modules/echarts/lib/component/toolbox/install.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomModel.js","webpack:///./node_modules/echarts/lib/component/helper/RoamController.js","webpack:///./node_modules/echarts/lib/component/dataZoom/roams.js","webpack:///./node_modules/echarts/lib/component/dataZoom/InsideZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomInside.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomModel.js","webpack:///./node_modules/echarts/lib/component/dataZoom/SliderZoomView.js","webpack:///./node_modules/echarts/lib/component/dataZoom/installDataZoomSlider.js","webpack:///./node_modules/echarts/lib/component/dataZoom/install.js","webpack:///./node_modules/vue-demi/lib/index.mjs","webpack:///./node_modules/resize-detector/esm/index.js","webpack:///./node_modules/vue-echarts/dist/index.esm.min.js","webpack:///./src/components/Sale.vue?73b9","webpack:///./src/components/Sale.vue?0f50","webpack:///./src/components/Sale.vue?b285","webpack:///./node_modules/echarts/lib/chart/pie/pieLayout.js","webpack:///./node_modules/echarts/lib/processor/dataFilter.js","webpack:///./node_modules/echarts/lib/label/labelGuideHelper.js","webpack:///./node_modules/echarts/lib/chart/pie/labelLayout.js","webpack:///./node_modules/echarts/lib/chart/helper/sectorHelper.js","webpack:///./node_modules/echarts/lib/chart/pie/PieView.js","webpack:///./node_modules/echarts/lib/chart/helper/createSeriesDataSimply.js","webpack:///./node_modules/echarts/lib/visual/LegendVisualProvider.js","webpack:///./node_modules/echarts/lib/chart/pie/PieSeries.js","webpack:///./node_modules/echarts/lib/processor/negativeDataFilter.js","webpack:///./node_modules/echarts/lib/chart/pie/install.js","webpack:///./src/views/Shop.vue?1fdd","webpack:///./src/views/Shop.vue?8bda","webpack:///./src/views/Shop.vue?9bff","webpack:///./node_modules/zrender/lib/core/env.js","webpack:///./node_modules/zrender/lib/tool/color.js","webpack:///./src/components/Sale.vue?684e","webpack:///./node_modules/zrender/lib/core/util.js","webpack:///./src/views/Shop.vue?0a7e","webpack:///./node_modules/zrender/lib/core/platform.js","webpack:///./node_modules/zrender/lib/svg/helper.js","webpack:///./node_modules/zrender/lib/core/LRU.js"],"names":["mixins","Colorable","Intersectable","onVisible","Themeable","extend","name","directives","Resize","props","circle","Boolean","disabled","length","type","Number","default","validator","val","nextIcon","String","prevIcon","totalVisible","value","pageAriaLabel","currentPageAriaLabel","previousAriaLabel","nextAriaLabel","wrapperAriaLabel","data","maxButtons","selected","computed","classes","this","themeClasses","items","parseInt","maxLength","Math","min","max","range","even","left","floor","right","start","end","watch","init","mounted","methods","$nextTick","onResize","setTimeout","width","$el","parentElement","clientWidth","window","innerWidth","next","e","preventDefault","$emit","previous","from","to","i","push","genIcon","h","icon","fn","label","staticClass","class","attrs","on","click","VIcon","genItem","color","isCurrentPage","ariaLabel","setBackgroundColor","$vuetify","lang","t","toString","genItems","map","index","key","isNaN","genList","children","modifiers","quiet","render","rtl","role","_vm","_s","staticStyle","authenticated","shop","customer","_c","_e","scraping","sessions","products","productParams","model","callback","expression","contacts","staticRenderFns","_v","rawName","product","variants","snackbarColor","scopedSlots","snackbar","snackbarText","title","domProps","Variant","Vue","__decorate","Prop","required","Component","component","Product","constructor","show","loading","prices","v","parseFloat","price","variantSkus","sku","some","test","search","$store","state","apiClient","linkImageSearch","_id","error","console","log","imageSearch","location","href","externalId","startImageSearch","urls","images","sourceUrl","url","sourceId","success","Error","err","components","genPickerButton","prop","content","readonly","active","event","stopPropagation","kebabCase","$createElement","trim","undefined","Array","isArray","PickerButton","date","selectingYear","year","yearIcon","isReversing","computedTransition","prev","genYearIcon","dark","getYearBtn","genTitleText","innerHTML","genTitleDate","locale","currentLocale","current","padStart","string","targetLength","padString","repeat","slice","n","createNativeLocaleFormatter","options","substrOptions","makeIsoString","dateString","month","split","pad","join","intlFormatter","Intl","DateTimeFormat","format","Date","substr","sign","Localable","Function","prevAriaLabel","formatter","timeZone","newVal","oldVal","genBtn","change","ariaLabelId","calculateChange","VBtn","light","monthChange","genHeader","header","setTextColor","$slots","transition","createItemTypeNativeListeners","instance","itemTypeSuffix","Object","keys","$listeners","reduce","eventName","endsWith","createItemTypeListeners","isDateAllowed","allowedFn","Touch","allowedDates","events","eventColor","scrollable","tableDate","wheelThrottle","displayedMonth","displayedYear","throttle","wheel","genButtonClasses","isAllowed","isFloating","isSelected","isCurrent","genButtonEvents","mouseEventType","mergeListeners","genButton","isOtherMonth","setColor","genEvents","getEventColors","arrayize","eventData","eventColors","includes","filter","isValidScroll","calculateTableDate","deltaY","sanitizeType","sanitizeDateString","touch","genTable","touchDirective","offsetX","sort","indexOf","createUTCDate","day","UTC","isFinite","getUTCFullYear","setUTCFullYear","firstWeekOffset","firstDayOfWeek","firstDayOfYear","firstWeekDayInFirstWeek","firstWeekDayOfYear","getUTCDay","dayOfYear","isLeapYear","weeksInYear","weekOffset","weekOffsetNext","daysInYear","weekNumber","localeFirstDayOfYear","week","ceil","DatePickerTable","showAdjacentMonths","showWeek","weekdayFormat","weekdayFormatter","weekday","weekDays","first","createRange","delta","genTHead","days","unshift","genTR","weekDaysBeforeFirstDayOfTheMonth","firstDayOfTheMonth","weekDay","getWeekNumber","dayInMonth","genWeekNumber","genTBody","daysInMonth","getDate","rows","prevMonthYear","prevMonth","firstDayFromPreviousMonth","nextMonthYear","nextMonth","nextMonthDay","cols","fill","row","tds","_","col","defaultColor","activeItem","getElementsByClassName","scrollTop","offsetTop","offsetHeight","scrollHeight","genYearItem","formatted","genYearItems","selectedYear","getFullYear","maxYear","minYear","ref","Elevatable","flat","fullWidth","landscape","noTitle","computedTitleColor","defaultTitleColor","isDark","genTitle","genBodyTransition","genBody","style","convertToUnit","genActions","actions","elevationClasses","VPicker","headerColor","genPickerTitle","genPickerBody","genPickerActionsSlot","$scopedSlots","save","cancel","genPicker","body","slot","elevation","DAYS_IN_MONTH","DAYS_IN_MONTH_LEAP","Picker","dayFormat","headerDateFormat","monthFormat","multiple","nextMonthAriaLabel","nextYearAriaLabel","pickerDate","prevMonthAriaLabel","prevYearAriaLabel","reactive","showCurrent","selectedItemsText","titleDateFormat","yearFormat","now","activePicker","toUpperCase","inputDay","inputMonth","inputYear","multipleValue","wrapInArray","getMonth","isMultiple","lastValue","selectedMonths","inputDate","tableMonth","tableYear","minMonth","maxMonth","formatters","titleDate","defaultTitleMultipleDateFormatter","defaultTitleDateFormatter","dates","titleFormats","titleDateFormatter","landscapeFormatter","replace","match","nonDigit","digit","newValue","oldValue","checkMultipleProp","setInputDate","output","created","emitInput","newInput","concat","x","valueType","expected","consoleWarn","yearClick","monthClick","dateClick","VDatePickerTitle","genTableHeader","VDatePickerHeader","toggle","input","genDateTable","VDatePickerDateTable","genMonthTable","VDatePickerMonthTable","genYears","VDatePickerYears","array","$event","modal","$$v","updateDateFilter","$refs","salesChartOptions","y","clone","add","out","v1","v2","sub","sqrt","lenSquare","s","normalize","d","distanceSquare","distSquare","lerp","applyTransform","m","Param","target","topTarget","Draggable","handler","_dragStart","_drag","_dragEnd","prototype","draggingTarget","draggable","parent","__hostTarget","_draggingTarget","dragging","_x","_y","offsetY","dispatchToElement","dx","dy","drift","dropTarget","findHover","lastDropTarget","_dropTarget","Eventful","eventProcessors","_$eventProcessor","query","context","_$handlers","_h","eventProcessor","normalizeQuery","wrap","ctx","callAtLast","zrEventfulCallAtLast","lastIndex","lastWrap","splice","isSilent","off","eventType","newList","l","trigger","args","_i","arguments","argLen","len","hItem","call","apply","afterTrigger","triggerWithContext","LN2","determinant","rank","rowStart","rowMask","colMask","detCache","cacheKey","fullRank","hasOwnProperty","colStart","round","subRowMask","subRowStart","sum","j","colLocalIdx","colTag","buildTransformer","src","dest","mA","det","vh","srcPointX","srcPointY","pk","EVENT_SAVED_PROP","_calcOut","transformLocalCoord","elFrom","elTarget","inX","inY","transformCoordWithViewport","el","inverse","getBoundingClientRect","env","domSupported","isCanvasEl","saved","markers","prepareCoordMarkers","transformer","preparePointerTransformer","propLR","propTB","marker","document","createElement","stl","idxLR","idxTB","cssText","appendChild","transformerName","oldSrcCoords","srcCoords","destCoords","oldCoordTheSame","rect","ii","top","offsetLeft","nodeName","replaceReg","replaceMap","'","encodeHTML","source","str","c","MOUSE_EVENT_REG","firefoxNotSupportOffsetXY","browser","firefox","version","clientToLocal","calculate","calculateZrXY","layerX","zrX","zrY","layerY","ex","clientX","ey","clientY","box","getNativeEvent","normalizeEvent","isTouch","targetTouches","changedTouches","wheelDelta","getWheelDeltaMayPolyfill","zrDelta","detail","button","which","rawWheelDelta","deltaX","abs","addEventListener","opt","removeEventListener","stop","cancelBubble","isMiddleOrRightButtonOnMouseUpDown","GestureMgr","_track","recognize","root","_doTrack","_recognize","clear","touches","trackItem","points","pos","recognizers","gestureInfo","pointPair","pinch","tracks","trackLen","pinchEnd","pinchPre","pinchScale","pinchCenter","pinchX","pinchY","identity","m1","m2","out0","out1","out2","out3","out4","out5","a","rad","pivot","aa","ac","atx","ab","ad","aty","st","sin","ct","cos","vx","vy","Point","copy","other","set","equal","scale","scalar","scaleAndAdd","dot","distance","negate","transform","toArray","fromArray","p","p2","p0","p1","onet","lt","rb","lb","rt","BoundingRect","height","union","calculateTransform","b","sx","sy","intersect","mtv","create","ax0","ax1","ay0","ay1","bx0","bx1","by0","by1","overlap","dMin","Infinity","dMax","d0","d1","d2","d3","contain","plain","isZero","tx","ty","maxX","maxY","SILENT","makeEventPacket","eveType","targetInfo","gestureEvent","zrByTouch","stopEvent","_super","EmptyProxy","_this","dispose","setCursor","HoveredResult","handlerNames","Handler","storage","painter","proxy","painterRoot","pointerSize","_hovered","_pointerSize","setHandlerProxy","_draggingMgr","util","mousemove","isOutside","isOutsideBoundary","lastHovered","lastHoveredTarget","__zr","hovered","hoveredTarget","cursor","mouseout","eventControl","zrEventControl","resize","dispatch","eventArgs","setCursorStyle","cursorStyle","silent","eventKey","eventPacket","eachOtherLayer","layer","exclude","list","getDisplayList","setHoverTarget","candidates","targetSizeHalf","pointerRect","ignore","ignoreCoarsePointer","getBoundingRect","rStep","thetaStep","PI","PI2","r","theta","x1","y1","processGesture","stage","_gestureMgr","gestureMgr","dom","res","isHover","displayable","rectHover","ignoreClip","clipPath","getClipPath","hostEl","hoverCheckResult","handlerInstance","getWidth","getHeight","_downEl","_downPoint","_upEl","DEFAULT_MIN_MERGE","DEFAULT_MIN_GALLOPING","minRunLength","makeAscendingRun","lo","hi","compare","runHi","reverseRun","binaryInsertionSort","mid","gallopLeft","hint","lastOffset","maxOffset","offset","tmp","gallopRight","TimSort","runStart","runLength","minGallop","stackSize","pushRun","_runStart","_runLength","mergeRuns","mergeAt","forceMergeRuns","start1","length1","start2","length2","k","mergeLow","mergeHigh","cursor1","cursor2","count1","count2","exit","_minGallop","customCursor","customDest","remaining","ts","minRun","force","REDRAW_BIT","STYLE_CHANGED_BIT","SHAPE_CHANGED_BIT","invalidZErrorLogged","logInvalidZError","warn","shapeCompareFunc","zlevel","z","z2","requestAnimationFrame","Storage","_roots","_displayList","_displayListLen","displayableSortFunc","traverse","cb","update","includeIgnore","displayList","updateDisplayList","roots","_updateAndAddDisplayable","clipPaths","beforeUpdate","afterUpdate","userSetClipPath","currentClipPath","parentClipPath","updateTransform","childrenRef","child","__dirty","disp","__clipPaths","decalEl","getDecalElement","textGuide","getTextGuideLine","textEl","getTextContent","addRoot","delRoot","idx","delAllRoots","getRoots","hasGlobalWindow","bind","msRequestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","func","easingFuncs","linear","quadraticIn","quadraticOut","quadraticInOut","cubicIn","cubicOut","cubicInOut","quarticIn","quarticOut","quarticInOut","quinticIn","quinticOut","quinticInOut","sinusoidalIn","sinusoidalOut","sinusoidalInOut","exponentialIn","pow","exponentialOut","exponentialInOut","circularIn","circularOut","circularInOut","elasticIn","asin","elasticOut","elasticInOut","backIn","backOut","backInOut","bounceIn","bounceOut","bounceInOut","mathPow","mathSqrt","EPSILON","EPSILON_NUMERIC","THREE_SQRT","ONE_THIRD","_v0","_v1","_v2","isAroundZero","isNotAroundZero","p3","cubicDerivativeAt","cubicRootAt","A","B","C","t1","disc","K","t2","discSqrt","Y1","Y2","T","acos","ASqrt","t3","extrema","cubicSubdivide","p01","p12","p23","p012","p123","p0123","cubicProjectPoint","x0","y0","x2","y2","x3","y3","interval","_t","cubicLength","iteration","px","py","step","quadraticDerivativeAt","quadraticRootAt","divider","quadraticSubdivide","quadraticProjectPoint","quadraticLength","regexp","createCubicEasingFunc","cubicEasingStr","cubic","exec","a_1","b_1","c_1","d_1","roots_1","Clip","opts","_inited","_startTime","_pausedTime","_paused","_life","life","_delay","delay","loop","onframe","ondestroy","onrestart","easing","setEasing","globalTime","deltaTime","elapsedTime","percent","easingFunc","schedule","remainder","pause","resume","arraySlice","interpolateNumber","interpolate1DArray","interpolate2DArray","len2","add1DArray","add2DArray","fillColorStops","val0","val1","len0","len1","shorterArr","shorterLen","last","fillArray","arrDim","arr0","arr1","arr0Len","arr1Len","isPreviousLarger","cloneValue","ret","rgba2String","rgba","guessArrayDim","VALUE_TYPE_NUMBER","VALUE_TYPE_1D_ARRAY","VALUE_TYPE_2D_ARRAY","VALUE_TYPE_COLOR","VALUE_TYPE_LINEAR_GRADIENT","VALUE_TYPE_RADIAL_GRADIENT","VALUE_TYPE_UNKOWN","isGradientValueType","valType","isArrayValueType","tmpRgba","Track","propName","keyframes","discrete","_invalid","_needsSort","_lastFr","_lastFrP","isFinished","_finished","setFinished","_additiveTrack","needsAnimate","getAdditiveTrack","addKeyframe","time","rawValue","arrayDim","colorArray","parsedGradient","colorStops","colorStop","kf","prepare","maxTime","additiveTrack","kfs","kfsLen","lastKf","isDiscrete","isArr","isGradient","startValue","additiveValue","frameIdx","frame","nextFrame","isAdditive","valueKey","kfsNum","isValueColor","lastFrame","mathMin","w","targetArr","_additiveValue","nextVal_1","isLinearGradient_1","nextColorStop","global","_addToTarget","Animator","allowDiscreteAnimation","additiveTo","_tracks","_trackKeys","_maxTime","_started","_clip","_target","_loop","_additiveAnimators","_allowDiscrete","getMaxTime","getDelay","getLoop","getTarget","changeTarget","when","whenWithKeys","propNames","track","initialValue","_getAdditiveTrack","addtiveTrackKfs","lastFinalKf","isPaused","duration","_force","_doneCallback","_setTracksFinished","doneList","_doneCbs","_abortedCallback","animation","abortedList","_abortedCbs","removeClip","tracksKeys","trackName","additiveAnimators","getTrack","self","clip","stillHasAdditiveAnimator","onframeList","_onframeCbs","addClip","forwardToLast","during","done","aborted","getClip","getTracks","stopTracks","allAborted","saveTo","trackKeys","firstOrLast","__changeFinalValue","finalProps","pop","getTime","Animation","_running","_time","_pauseStart","_head","_tail","addAnimator","animator","removeAnimator","notTriggerFrameAndStageUpdate","nextClip","finished","_startLoop","animate","TOUCH_CLICK_DELAY","globalEventSupported","localNativeListenerNames","mouseHandlerNames","touchHandlerNames","pointerEventNameMap","pointerdown","pointerup","pointermove","pointerout","pointerHandlerNames","nm","mouse","pointer","globalNativeListenerNames","wheelEventSupported","isPointerFromTouch","pointerType","setTouchTimer","scope","touching","touchTimer","clearTimeout","markTouch","normalizeGlobalEvent","isLocalEl","elTmp","isLocal","nodeType","domBelongToZr","parentNode","FakeGlobalEvent","stopImmediatePropagation","currentTarget","localDOMHandlers","mousedown","__mayPointerCapture","downPoint","__togglePointerCapture","mouseup","element","toElement","relatedTarget","__pointerCapturing","mousewheel","touchstart","__lastTouchMoment","touchmove","touchend","globalDOMHandlers","pointerCaptureReleasing","mountLocalDOMEventListeners","domHandlers","pointerEventsSupported","nativeEventName","mountSingleDOMEventListener","touchEventsSupported","mountGlobalDOMEventListeners","mount","nativeEventListener","capture","listener","listenerOpts","domTarget","unmountDOMEventListeners","DOMHandlerScope","HandlerDomProxy","_localHandlerScope","_globalHandlerScope","isPointerCapturing","globalHandlerScope","devicePixelRatio","screen","deviceXDPI","logicalXDPI","DARK_MODE_THRESHOLD","DARK_LABEL_COLOR","LIGHT_LABEL_COLOR","LIGHTER_LABEL_COLOR","mIdentity","scaleTmp","tmpTransform","originTransform","Transformable","getLocalTransform","setPosition","arr","setScale","scaleX","scaleY","setSkew","skewX","skewY","setOrigin","originX","originY","needLocalTransform","rotation","parentTransform","_resolveGlobalScaleRatio","invTransform","globalScaleRatio","getGlobalScale","relX","relY","getComputedTransform","transformNode","ancestors","setLocalTransform","atan2","shearX","decomposeTransform","ox","oy","transformCoordToLocal","transformCoordToGlobal","getLineScale","copyTransform","ax","anchorX","ay","anchorY","tan","initDefaultProps","proto","TRANSFORMABLE_PROPS","textWidthCache","text","font","cacheOfFont","LRU","get","platform","measureText","put","innerGetBoundingRect","textAlign","textBaseline","getLineHeight","adjustTextX","adjustTextY","textLines","uniondRect","verticalAlign","parsePercent","maxValue","lastIndexOf","calculateTextPosition","textPosition","position","halfHeight","textVerticalAlign","align","PRESERVED_NORMAL_STATE","PRIMARY_STATES_KEYS","DEFAULT_ANIMATABLE_MAP","obj","tmpTextPosCalcRes","tmpBoundingRect","Element","id","animators","currentStates","states","_init","attr","markRedraw","updateInnerText","forceUpdate","_textContent","textConfig","local","innerTransformable","textStyleChanged","innerOrigin","layoutRect","textOrigin","origin","relOriginX","relOriginY","textOffset","isInside","inside","innerTextDefaultStyle","_innerTextDefaultStyle","textFill","textStroke","autoStroke","canBeInsideText","insideFill","insideStroke","getInsideTextFill","getInsideTextStroke","outsideFill","outsideStroke","getOutsideFill","getOutsideStroke","stroke","setDefaultTextStyle","dirtyStyle","isDarkMode","backgroundColor","getBackgroundColor","colorArr","alpha","attrKV","setTextConfig","setTextContent","setClipPath","extra","hide","keyOrObj","keysArr","saveCurrentToNormalState","toState","_innerSaveToNormal","normalState","_normalState","fromStateTransition","__fromStateTransition","targetName","_savePrimaryToNormal","primaryKeys","hasState","getState","ensureState","clearStates","noAnimation","useState","stateName","keepCurrentStates","forceUseHoverLayer","toNormalState","hasStates","animationCfg","stateTransition","stateProxy","useHoverLayer","hoverLayer","_toggleHoverLayerFlag","_applyStateObj","__inHover","textContent","_textGuide","_updateAnimationTargets","useStates","stateObjects","notChange","stateObj","lastStateObj","mergedState","_mergeStates","ancestor","removeState","replaceState","oldState","newState","forceAdd","newStateExists","toggleState","enable","mergedTextConfig","needsRestoreToNormal","transitionTarget","hasTransition","propNeedsTransition","_transitionState","_attachComponent","componentEl","zr","addSelfToZr","_detachComponent","removeSelfFromZr","_clipPath","removeClipPath","previousTextContent","removeTextContent","cfg","removeTextConfig","setTextGuideLine","guideLine","removeTextGuideLine","refreshHover","refresh","dirty","inHover","updateDuringAnimation","wakeUp","stopAnimation","leftAnimators","animateTo","animationProps","animateFrom","getPaintRect","elProto","isGroup","createLegacyProperty","privateKey","xKey","yKey","enhanceArray","defineProperty","animatable","reverse","animateToShallow","finishCount","doneHappened","cfgDone","cfgAborted","doneCb","abortedCb","copyArrShallow","is2DArray","copyValue","sourceArr","isValueSame","val2","is1DArraySame","topKey","animateObj","targetKeys","additive","setToFinal","animateAll","existsAnimators","animationKeys","innerKey","targetVal","keyLen","revertedSource","reversedTarget","sourceClone","Group","_children","childAt","childOfName","childCount","_doAdd","addBefore","nextSibling","oldChild","newChild","replaceAt","old","remove","removeAll","eachChild","stopped","includeChildren","tmpRect","tmpMat","invisible","childRect","painterCtors","instances","delInstance","totalLum","ZRender","_sleepAfterStill","_stillFrameAccum","_needsRefresh","_needsRefreshHover","_darkMode","rendererType","renderer","useDirtyRect","ssrMode","ssr","ssrOnly","handlerProxy","node","worker","HandlerProxy","getViewportRoot","useCoarsePointer","usePointerSize","defaultPointerSize","_flush","_disposed","configLayer","zLevel","config","_backgroundColor","setDarkMode","darkMode","refreshImmediately","fromInside","flush","triggerRendered","refreshHoverImmediately","setSleepAfterStill","stillFramesCount","getType","clearAnimation","eventHandler","registerPainter","Ctor","registerSSRDataGetter","getter","RADIAN_EPSILON","ROUND_SUPPORTED_PRECISION_MAX","_trim","linearMap","domain","clamp","r0","r1","subDomain","subRange","all","NaN","precision","returnStr","toFixed","asc","getPrecision","getPrecisionSafe","toLowerCase","eIndex","exp","significandPartLen","dotIndex","decimalPartLen","getPixelPrecision","dataExtent","pixelExtent","LN10","dataQuantity","sizeQuantity","getPercentSeats","valueList","acc","digits","votesPerQuota","targetSeats","seats","votes","currentSum","NEGATIVE_INFINITY","maxId","seat","addSafe","maxPrecision","remRadian","radian","pi2","isRadianAroundZero","TIME_REG","hour","substring","quantity","quantityExponent","nice","nf","exponent","exp10","f","numericToNumber","valFloat","isNumeric","getRandomIdBase","random","getGreatestCommonDividor","getLeastCommonMultiple","DUMMY_COMPONENT_NAME_PREFIX","INTERNAL_COMPONENT_ID_PREFIX","normalizeToArray","defaultEmphasis","subOpts","emphasis","subOptName","TEXT_STYLE_OPTIONS","getDataItemValue","dataItem","isDataItemOption","mappingToExists","existings","newCmptOptions","mode","isNormalMergeMode","isReplaceMergeMode","isReplaceAllMode","existingIdIdxMap","cmptOption","result","prepareResult","mappingById","mappingByName","mappingByIndex","mappingInReplaceAllMode","makeIdAndName","existing","isComponentIdInternal","newOption","keyInfo","brandNew","optionId","makeComparableKey","existingIdx","resultItem","keyExistAndEqual","nextIdx","mapResult","idMap","item","idNum","obj1","obj2","key1","convertOptionIdName","key2","idOrName","defaultValue","isNameSpecified","componentModel","makeInternalComponentId","idSuffix","setComponentTypeToKeyInfo","mappingResult","mainType","componentModelCtor","subType","determineSubType","newCmptOption","existComponent","queryDataIndex","payload","dataIndexInside","dataIndex","indexOfRawIndex","indexOfName","makeInner","innerUniqueIndex","hostObj","parseFinder","ecModel","finderInput","_a","preParseFinder","mainTypeSpecified","queryOptionMap","others","defaultMainType","each","queryOption","queryResult","queryReferringComponents","useDefault","enableAll","enableNone","models","finder","parsedKey","queryType","includeMainTypes","SINGLE_REFERRING","MULTIPLE_REFERRING","userOption","indexOption","idOption","nameOption","specified","firstCmpt","getComponent","queryComponents","setAttribute","getAttribute","getTooltipRenderMode","renderModeOption","interpolateRawValues","sourceValue","targetValue","isAutoPrecision","interpolated","leftArr","rightArr","length_1","info","getDimensionInfo","leftVal","rightVal","TYPE_DELIMITER","IS_CONTAINER","IS_EXTENDED_CLASS","parseClassType","componentType","main","typeArr","checkClassType","isExtendedClass","clz","enableClassExtend","rootClz","mandatoryMethods","$constructor","ExtendedClass","superClass","isESClass","class_1","superCall","superApply","mountExtend","SubClz","SupperClz","classBase","enableClassCheck","classAttr","isInstance","methodName","enableClassManagement","makeContainer","componentTypeInfo","container","registerClass","componentFullType","getClass","throwWhenNotFound","getClassesByMainType","o","hasClass","getAllClassMainTypes","types","hasSubTypes","makeStyleMapper","properties","ignoreParent","excludes","getShallow","AREA_STYLE_KEY_MAP","getAreaStyle","AreaStyleMixin","globalImageCache","findExistImage","newImageOrSrc","cachedImgObj","image","createOrUpdateImage","onload","cbPayload","__zrImageSrc","pendingWrap","isImageReady","pending","loadImage","imageOnLoad","__cachedImgObj","onerror","STYLE_REG","truncateText","containerWidth","ellipsis","prepareTruncateOptions","truncateSingleLine","preparedOpts","maxIterations","minChar","cnCharWidth","ascCharWidth","placeholder","contentWidth","ellipsisWidth","textLine","lineWidth","subLength","estimateLength","charCode","charCodeAt","parsePlainText","lines","overflow","padding","truncate","calculatedLineHeight","lineHeight","bgColorDrawn","truncateLineOverflow","lineOverflow","wrapText","contentHeight","lineCount","truncateMinChar","outerHeight","outerWidth","RichTextToken","RichTextLine","tokens","RichTextContentBlock","parseRichText","contentBlock","topWidth","topHeight","wrapInfo","accumWidth","breakAll","matchedIndex","pushTokens","pendingList","calculatedHeight","calculatedWidth","stlPadding","truncateLine","finishLine","line","outer","token","tokenStyle","styleName","rich","textPadding","paddingH","tokenHeight","innerHeight","styleTokenWidth","tokenWidthNotSpecified","charAt","percentWidth","textBackgroundColor","bgImg","remainTruncWidth","block","strLines","linesWidths","isEmptyStr","newLine","tokenPadding","tokenPaddingH","outerWidth_1","isLineHolder","tokensLen","isAlphabeticLetter","ch","code","breakCharMap","isWordBreakChar","isBreakAll","lastAccumWidth","currentWord","currentWordWidth","chWidth","inWord","STYLE_MAGIC_KEY","DEFAULT_COMMON_STYLE","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","opacity","blend","DEFAULT_COMMON_ANIMATION_PROPS","PRIMARY_STATES_KEYS_IN_HOVER_LAYER","Displayable","useStyle","beforeBrush","afterBrush","innerBeforeBrush","innerAfterBrush","shouldBePainted","viewWidth","viewHeight","considerClipPath","considerAncestors","culling","isDisplayableCulled","isZeroArea","parent_1","rectContain","coord","_paintRect","elRect","shadowSize","tolerance","dirtyRectTolerance","setPrevPaintRect","paintRect","_prevPaintRect","getPrevPaintRect","animateStyle","targetKey","setStyle","notRedraw","_rect","styleChanged","styleUpdated","createStyle","__hoverStyle","isStyleObject","_mergeStyle","targetStyle","sourceStyle","changedKeys","getAnimationStyleProps","statesKeys","mergedStyle","dispProto","incremental","mathSin","mathCos","extremity","fromLine","xDim","yDim","fromCubic","cubicExtrema","cubicAt","fromQuadratic","quadraticExtremum","quadraticAt","fromArc","rx","ry","startAngle","endAngle","anticlockwise","vec2Min","vec2Max","diff","angle","M","L","Q","Z","R","tmpOutX","tmpOutY","mathAbs","hasTypedArray","Float32Array","tmpAngles","modPI2","normalizeArcAngles","angles","newStartAngle","newEndAngle","PathProxy","notSaveData","dpr","_xi","_yi","_x0","_y0","_len","_saveData","increaseVersion","_version","getVersion","segmentIgnoreThreshold","_ux","_uy","setDPR","setContext","_ctx","getContext","beginPath","reset","_pathSegLen","_pathLen","moveTo","_drawPendingPt","addData","lineTo","exceedUnit","_pendingPtDist","_pendingPtX","_pendingPtY","bezierCurveTo","quadraticCurveTo","arc","cx","cy","arcTo","radius","closePath","toStatic","setData","appendPath","path","appendSize","appendPathData","cmd","g","_expandData","newData","MAX_VALUE","xi","yi","isFirst","_calculateLength","ux","uy","pathSegLen","pathTotalLen","segCount","rebuildPath","displayedLength","pendingPtX","pendingPtY","drawPart","accumLength","pendingPtDist","psi","isEllipse","breakBuild","ellipse","newProxy","CMD","containStroke","_l","_b","normalizeRadian","windingLine","dir","x_","isAroundEqual","swapExtrema","windingCubic","nRoots","nExtrema","y0_","y1_","unit","windingQuadratic","y_","windingArc","dTheta","tmp_1","containPath","isStroke","pathProxy","DEFAULT_PATH_STYLE","strokePercent","fillOpacity","strokeOpacity","lineDashOffset","lineCap","miterLimit","strokeNoScale","strokeFirst","DEFAULT_PATH_ANIMATION_PROPS","pathCopyParams","Path","decal","_decalEl","buildPath","shape","decalElStyle","getDefaultShape","defaultStyle","getDefaultStyle","hasFill","pathFill","fillLum","isDarkLabel","shapeCfg","inBatch","pathUpdated","getUpdatedPathProxy","createPathProxy","hasStroke","needsUpdateRect","firstInvoke","rectStroke","_rectStroke","lineScale","strokeContainThreshold","localPos","dirtyShape","animateShape","setShape","shapeChanged","targetShape","targetShapePrimaryProps","shapeKeys","mergedShape","defaultProps","Sub","pathProto","subPixelOptimize","autoBatch","DEFAULT_TSPAN_STYLE","TSpan","setBoundingRect","tspanProto","DEFAULT_IMAGE_STYLE","DEFAULT_IMAGE_ANIMATION_PROPS","sWidth","sHeight","isImageLike","ZRImage","_getSize","dim","size","imageSource","__image","otherDim","otherDimSize","r2","r3","r4","total","subPixelOptimizeLine","outputShape","inputShape","subPixelOptimizeRect","originWidth","originHeight","positiveOrNegative","doubledPosition","RectShape","subPixelOptimizeOutputShape","Rect","optimizedShape","DEFAULT_RICH_TEXT_COLOR","DEFAULT_STROKE_LINE_WIDTH","DEFAULT_TEXT_ANIMATION_PROPS","fontSize","textShadowColor","textShadowBlur","textShadowOffsetX","textShadowOffsetY","borderColor","borderWidth","borderRadius","ZRText","_defaultStyle","_updateSubTexts","_childCursor","normalizeTextStyle","_updateRichTexts","_updatePlainTexts","defaultTextStyle","sourceRich","targetRich","_mergeRich","richNames","richName","_getOrCreateChild","textFont","getStyleText","needDrawBg","needDrawBackground","baseX","baseY","textX","textY","boxX","boxY","_renderBackground","getTextXForPadding","defaultLineWidth","useDefaultFill","getFill","getStroke","hasShadow","fixedBoundingRect","subElStyle","lineDash","setSeparateFont","xLeft","lineTop","xRight","tokenCount","remainedWidth","leftIndex","lineXLeft","lineXRight","rightIndex","_placeToken","parentBgColorDrawn","textWidth","textHeight","topStyle","rectEl","imgEl","textBorderWidth","textBorderColor","isImageBg","isPlainOrGradientBg","textBorderRadius","rectShape","rectStyle","imgStyle","borderDash","borderDashOffset","commonStyle","makeFont","hasSeparateFont","fontStyle","fontWeight","parseFontSize","fontFamily","VALID_TEXT_ALIGN","center","VALID_TEXT_VERTICAL_ALIGN","bottom","middle","FONT_PARTS","fontProp","normalizeStyle","getECData","setCommonECData","seriesIndex","dataType","dataIdx","ecData","ssrType","childECData","_highlightNextDigit","_highlightKeyMap","getSavedStates","getComponentStates","HOVER_STATE_NORMAL","HOVER_STATE_BLUR","HOVER_STATE_EMPHASIS","SPECIAL_STATES","DISPLAY_STATES","Z2_EMPHASIS_LIFT","Z2_SELECT_LIFT","HIGHLIGHT_ACTION_TYPE","DOWNPLAY_ACTION_TYPE","SELECT_ACTION_TYPE","UNSELECT_ACTION_TYPE","TOGGLE_SELECT_ACTION_TYPE","hasFillOrStroke","fillOrStroke","doChangeHoverState","hoverStateEnum","onHoverStateChange","hoverState","singleEnterEmphasis","singleLeaveEmphasis","singleEnterBlur","singleLeaveBlur","singleEnterSelect","singleLeaveSelect","updateElementState","updater","commonParam","traverseUpdateState","setStatesFlag","getFromStateStyle","toStateName","fromState","createEmphasisDefaultState","targetStates","hasSelect","cloned","store","fromFill","selectFill","normalFill","fromStroke","selectStroke","normalStroke","emphasisStyle","z2EmphasisLift","createSelectDefaultState","z2SelectLift","createBlurDefaultState","hasBlur","currentOpacity","blurStyle","elementStateProxy","setDefaultStateProxy","enterEmphasisWhenMouseOver","shouldSilent","__highByOuter","leaveEmphasisWhenMouseOut","enterEmphasis","highlightDigit","leaveEmphasis","enterBlur","leaveBlur","enterSelect","leaveSelect","__highDownSilentOnTouch","allLeaveBlur","api","getModel","leaveBlurredSeries","allComponentViews","eachComponent","componentStates","isSeries","view","getViewOfSeriesModel","getViewOfComponentModel","isBlured","group","toggleBlurSeries","blurSeries","targetSeriesIndex","focus","blurScope","leaveBlurOfIndices","dataIndices","itemEl","getItemGraphicEl","targetSeriesModel","getSeriesByIndex","targetCoordSys","coordinateSystem","master","blurredSeries","eachSeries","seriesModel","sameSeries","coordSys","sameCoordSys","getData","dataTypes","blurComponent","componentMainType","componentIndex","focusBlurEnabled","blurSeriesFromHighlightPayload","count","focus_1","findComponentHighDownDispatchers","focusSelf","dispatchers","findHighDownDispatchers","handleGlobalMouseOverForHighDown","dispatcher","componentHighDownName","handleGlobalMouseOutForHighDown","toggleSelectionFromPayload","isSelectChangePayload","updateSeriesElementSelection","allData","getAllData","eachItemGraphicEl","getAllSelectedIndices","getSelectedDataIndices","enableHoverEmphasis","setAsHighDownDispatcher","enableHoverFocus","disableHoverEmphasis","toggleHoverEmphasis","isDisabled","OTHER_STATES","defaultStyleGetterMap","itemStyle","lineStyle","areaStyle","setStatesStylesFromModel","itemModel","styleType","asDispatcher","disable","extendedEl","highDownSilentOnTouch","__highDownDispatcher","isHighDownDispatcher","getHighlightDigit","highlightKey","payloadType","isHighDownPayload","savePathStates","selectState","select","transitionStore","getAnimationConfig","animationType","animatableModel","extraOpts","extraDelayParams","animationPayload","updatePayload","getUpdatePayload","animationEnabled","isAnimationEnabled","isUpdate","animateOrSetProps","removeOpt","isFrom","isRemove","animationConfig","getAnimationDelayParams","animationDelay","animationEasing","animateConfig","updateProps","initProps","isElementRemoved","removeElement","fadeOutDisplayable","removeElementWithFadeOut","doRemove","saveOldStyle","oldStyle","EMPTY_OBJ","setLabelText","labelTexts","oldStates","normal","getLabelText","stateModels","interpolatedValue","baseText","labelFetcher","labelDataIndex","labelDimIndex","normalModel","getFormattedLabel","defaultText","statesText","stateModel","setLabelStyle","targetEl","labelStatesModels","stateSpecified","isSetOnText","needsCreateText","labelStatesTexts","showNormal","normalStyle","createTextStyle","createTextConfig","stateShow","targetElEmphasisState","enableTextSetter","labelInner","getLabelStatesModels","labelName","statesModels","textStyleModel","specifiedTextStyle","isNotNormal","isAttached","textStyle","setTextStyleCommon","labelPosition","labelRotate","labelDistance","labelOffset","defaultOutsidePosition","inheritColor","richResult","globalTextStyle","option","richItemNames","getRichItemNames","name_1","richTextStyle","setTokenTextStyle","margin","richItemNameMap","richKeys","richKey","parentModel","TEXT_PROPS_WITH_GLOBAL","TEXT_PROPS_SELF","TEXT_PROPS_BOX","isBlock","inRich","fillColor","strokeColor","textBorderType","textBorderDashOffset","defaultOpacity","baseline","disableBox","borderType","getFont","gTextStyleModel","PATH_COLOR","textStyleParams","tmpText","TextStyleMixin","getTextColor","isEmphasis","getTextRect","LINE_STYLE_KEY_MAP","getLineStyle","LineStyleMixin","ITEM_STYLE_KEY_MAP","getItemStyle","ItemStyleMixin","Model","rest","mergeOption","_doGet","parsePath","hasPath","pathFinal","resolveParentPath","isEmpty","restoreData","pathArr","base","getUID","enableSubTypeDefaulter","subTypeDefaulters","registerSubTypeDefaulter","defaulter","componentTypeMain","enableTopologicalTravel","entity","dependencyGetter","makeDepndencyGraph","fullNameList","graph","noEntryList","thisItem","createDependencyGraphItem","originalDeps","availableDeps","getAvailableDependencies","entryCount","dependentName","predecessor","thatItem","successor","dep","topologicalTravel","targetNameList","targetNameSet","currComponentType","currVertex","isInTargetNameSet","removeEdgeAndAdd","removeEdge","errMsg","succComponentType","inheritDefaultOption","superOption","subOption","monthAbbr","dayOfWeek","dayOfWeekAbbr","legend","selector","toolbox","brush","polygon","lineX","lineY","keep","dataView","dataZoom","zoom","back","magicType","bar","stack","tiled","restore","saveAsImage","series","typeNames","pie","scatter","effectScatter","radar","tree","treemap","boxplot","candlestick","heatmap","parallel","sankey","funnel","gauge","pictorialBar","themeRiver","sunburst","custom","chart","aria","general","withTitle","withoutTitle","single","prefix","withName","withoutName","separator","partialData","LOCALE_ZH","LOCALE_EN","DEFAULT_LOCALE","localeStorage","localeModels","SYSTEM_LANG","langStr","documentElement","navigator","language","browserLanguage","registerLocale","localeObj","createLocaleObject","getLocaleModel","getDefaultLocaleModel","langEN","langZH","ONE_SECOND","ONE_MINUTE","ONE_HOUR","ONE_DAY","ONE_YEAR","defaultLeveledFormatter","minute","second","millisecond","none","fullDayFormatter","fullLeveledFormatter","primaryTimeUnits","timeUnits","getPrimaryTimeUnit","timeUnit","isPrimaryTimeUnit","getDefaultFormatPrecisionOfInterval","template","isUTC","fullYearGetterName","monthGetterName","q","dateGetterName","H","hoursGetterName","minutesGetterName","secondsGetterName","S","millisecondsGetterName","localeModel","timeModel","leveledFormat","tick","level","defaults","mergedFormatter","inherit","getUnitFromValue","targetId","levelId","isSecond","isMinute","isHour","isDay","isMonth","isYear","getUnitValue","fullYearSetterName","monthSetterName","dateSetterName","hoursSetterName","minutesSetterName","secondsSetterName","millisecondsSetterName","addCommas","parts","toCamelCase","upperCaseFirst","group1","normalizeCssArray","makeValueReadable","useUTC","USER_READABLE_DEFUALT_TIME_PATTERN","stringToUserReadable","isNumberUserReadable","num","isTypeTime","isValueDate","numericResult","TPL_VAR_ALIAS","wrapVar","varName","seriesIdx","formatTpl","tpl","paramsList","encode","seriesLen","$vars","alias","getTooltipMarker","inOpt","extraCssText","renderMode","markerId","convertToColorString","windowOpen","link","blank","open","opener","LOCATION_PARAMS","HV_NAMES","boxLayout","orient","gap","maxWidth","maxHeight","currentLineMaxSize","nextX","nextY","nextChild","nextChildRect","moveX","newline","moveY","getLayoutRect","positionInfo","containerRect","containerHeight","verticalMargin","horizontalMargin","aspect","positionElement","hv","boundingMode","fetchLayoutMode","ins","layoutMode","mergeLayoutParam","targetOption","ignoreSize","hResult","merge","vResult","names","hvIdx","newParams","newValueCount","merged","mergedValueCount","enoughParamNumber","hasProp","hasValue","getLayoutParams","copyLayoutParams","ComponentModel","uid","mergeDefaultAndTheme","inputPositionParams","themeModel","getTheme","getDefaultOption","optionUpdated","newCptOption","isInit","ctor","defaultOption","fields","optList","getReferringComponents","indexKey","idKey","getBoxLayoutParams","boxLayoutModel","getZLevelKey","setZLevel","protoInitialize","getDependencies","deps","dependencies","decalColor","colorBy","gradientColor","decals","dashArrayX","dashArrayY","symbolSize","symbol","blendMode","stateAnimation","animationDuration","animationDurationUpdate","animationEasingUpdate","animationThreshold","progressiveThreshold","progressive","hoverLayerThreshold","VISUAL_DIMENSIONS","SOURCE_FORMAT_ORIGINAL","SOURCE_FORMAT_ARRAY_ROWS","SOURCE_FORMAT_OBJECT_ROWS","SOURCE_FORMAT_KEYED_COLUMNS","SOURCE_FORMAT_TYPED_ARRAY","SOURCE_FORMAT_UNKNOWN","SERIES_LAYOUT_BY_COLUMN","SERIES_LAYOUT_BY_ROW","BE_ORDINAL","Must","Might","Not","innerGlobalModel","resetSourceDefaulter","datasetMap","makeSeriesEncodeForAxisCoordSys","coordDimensions","datasetModel","querySeriesUpstreamDatasetModel","baseCategoryDimIndex","categoryWayValueDimStart","encodeItemName","encodeSeriesName","seriesLayoutBy","coordDimInfoLoose","coordDimIdx","coordDimInfo","getDataDimCountOnCoordDim","datasetRecord","categoryWayDim","valueWayDim","pushDim","dimIdxArr","idxFrom","idxCount","dimsDef","coordDimName","itemName","seriesName","makeSeriesEncodeForNameBased","dimCount","potentialNameDimIndex","sourceFormat","dimensionsDefine","idxResult","idxRes0","idxRes1","guessRecords","guessResult","doGuessOrdinal","startIndex","isPureNumber","fulfilled","nameDimIndex","thisData","queryDatasetUpstreamDatasetModels","guessOrdinal","dimIndex","dimName","dimType","maxLoop","dimDefItem","dataArrayRows","sample","detectValue","dataObjectRows","dataKeyedColumns","dataOriginal","beStr","internalOptionCreatorMap","registerInternalOptionCreator","creator","concatInternalOptions","newCmptOptionList","internalOptionCreator","internalOptions","innerColor","PaletteMixin","getColorFromPalette","requestNum","defaultPalette","layeredPalette","getFromPalette","clearColorPalette","clearPalette","getNearestPalette","palettes","requestColorNum","paletteNum","that","inner","scopeFields","paletteIdx","paletteNameMap","palette","pickedPaletteItem","reCreateSeriesIndices","assertSeriesInitialized","initBase","deprecateLog","throwError","msg","OPTION_INNER_KEY","OPTION_INNER_VALUE","GlobalModel","theme","optionManager","_theme","_locale","_optionManager","setOption","optionPreprocessorFuncs","innerOpt","normalizeSetOptionInput","_resetOption","resetOption","optionChanged","baseOption","mountOption","_mergeOption","timelineOption","getTimelineOption","mediaOptions","getMediaOption","mediaOption","componentsMap","_componentsMap","componentsCount","_componentsCount","newCmptTypes","newCmptTypeMap","replaceMergeMainTypeMap","visitComponent","oldCmptList","mergeMode","tooltipExists","optionsByMainType","cmptsByMainType","cmptsCountByMainType","isSeriesType","ComponentModelClass","extraOpt","__requireNewView","componentOption","mainTypeInReplaceMerge","_seriesIndices","getOption","optInMainType","realLen","metNonInner","setUpdatePayload","_payload","cmpt","condition","cmpts","queryByIdOrName","filterBySubType","findComponents","queryCond","getQueryCond","doFilter","indexAttr","idAttr","nameAttr","ctxForAll_1","cbForAll_1","getSeriesByName","nameStr","oneSeries","getSeriesByType","getSeries","getSeriesCount","rawSeriesIndex","eachRawSeries","eachSeriesByType","eachRawSeriesByType","isSeriesFiltered","_seriesIndicesMap","getCurrentSeriesIndices","filterSeries","newSeriesIndices","seriesRawIdx","componentTypes","isNotTargetSeries","internalField","seriesIndices","airaOption","enabled","mergeTheme","globalDefault","seriesId","notMergeColorLayer","colorLayer","themeItem","keyMap_1","idOrNameItem","idName","idName_1","replaceMerge","Global","availableMethods","ExtensionAPI","ecInstance","coordinateSystemCreators","CoordinateSystemManager","_coordinateSystems","coordinateSystems","getCoordinateSystems","register","CoordinateSystem","QUERY_REG","OptionManager","_timelineOptions","_mediaList","_currentMediaIndices","_api","rawOption","dataset","optionBackup","_optionBackup","newParsedOption","parseRawOption","_newBaseOption","timelineOptions","mediaList","mediaDefault","isRecreate","_mediaDefault","timelineModel","getCurrentIndex","ecWidth","ecHeight","indices","applyMediaQuery","indicesEquals","isNew","declaredBaseOption","timelineOnRoot","timeline","timelineOptionsOnRoot","mediaOnRoot","media","hasMedia","hasTimeline","doPreprocess","preProcess","singleMedia","realMap","aspectratio","applicable","matched","operator","realAttr","real","expect","indices1","indices2","isObject","POSSIBLE_STYLES","compatEC2ItemStyle","itemStyleOpt","normalItemStyleOpt","emphasisItemStyleOpt","convertNormalEmphasis","optType","useExtend","normalOpt","emphasisOpt","removeEC3NormalStatus","compatTextStyle","labelOptSingle","textPropName","compatEC3CommonStyles","processSeries","seriesOpt","markPoint","markLine","markArea","nodes","edgeData","links","edges","categories","mpData","mlData","breadcrumb","levels","leaves","toArr","toObj","globalCompatStyle","isTheme","axes","axisName","axisOpt","axisPointer","parallelOpt","parallelAxisDefault","calendar","calendarOpt","radarOpt","nameGap","axisNameGap","geo","geoOpt","regions","regionObj","timelineOpt","toolboxOpt","feature","featureOpt","tooltip","overwrite","compatLayoutProperties","LAYOUT_PROPERTIES","COMPATITABLE_COMPONENTS","BAR_ITEM_STYLE_MAP","compatBarItemStyle","oldName","newName","compatPieLabel","alignTo","edgeDistance","compatSunburstState","downplay","blur","compatGraphFocus","focusNodeAdjacency","traverseTree","globalBackwardCompat","seriesType","clipOverflow","clockWise","clockwise","hoverOffset","scaleSize","pointerColor","backgroundStyle","highlightPolicy","mapType","mapLocation","hoverAnimation","dataRange","visualMap","componentName","dataStack","stackInfoMap","stackInfoList","stackInfo","stackResultDimension","getCalculationInfo","stackedOverDimension","stackedDimension","stackedByDimension","isStackedByIndex","setCalculationInfo","calculateStack","targetStackInfo","idxInStack","resultVal","resultNaN","dims","targetData","stackStrategy","modify","v0","byValue","stackedDataRawIndex","getRawIndex","stackedOver","rawIndexOf","getByRawIndex","providerMethods","mountMethods","SourceImpl","dimensionsDetectedCount","metaRawOption","isSourceInstance","createSource","sourceData","thisMetaRawOption","detectSourceFormat","determined","determineSourceDimensions","sourceHeader","dimensions","createSourceFromSeriesDataOption","cloneSourceShallow","normalizeDimensionsOption","arrayRowsTravelFirst","objectRowsCollectDimensions","colArr","value0","firstIndex","nameMap","rawItem","displayName","exist","shouldRetrieveDataByName","DefaultDataProvider","sourceParam","dimSize","_source","_data","_offset","_dimSize","getSource","getItem","appendData","clean","pure","persistent","provider","getMethodMapKey","getItemForTypedArray","countForTypedArray","fillStorage","fillStorageForTypedArray","rawItemGetter","getRawSourceItemGetter","rawCounter","getRawSourceDataCounter","extent","dimExtent","appendDataSimply","newCol","oldCol","getItemSimply","rawData","rawSourceItemGetterMap","method","countSimply","rawSourceDataCounterMap","getRawValueSimply","property","rawSourceValueGetterMap","getRawSourceValueGetter","retrieveRawValue","getRawDataItem","getStore","getDimensionIndex","getDimensionProperty","DIMENSION_LABEL_REG","DataFormatMixin","getDataParams","getRawValue","rawDataIndex","getName","itemOpt","getItemVisual","userOutput","componentSubType","dimensionNames","fullDimensions","status","extendParams","params","getItemModel","dimensionIndex","dimStr","dimLoose","formatTooltip","multipleSeries","normalizeTooltipFormatResult","markupText","markupFragment","frag","createTask","define","Task","_reset","_plan","plan","_count","_onDirty","onDirty","_dirty","perform","performArgs","planResult","upTask","_upstream","skip","outputData","__pipeline","currentTask","forceFirstProgress","lastModBy","normalizeModBy","_modBy","lastModDataCount","_modDataCount","modBy","modDataCount","_doReset","_dueEnd","_outputDueEnd","_progress","_dueIndex","progress","_doProgress","outputDueEnd","_settedOutputEnd","unfinished","iterator","_callingProgress","downstream","_downstream","pipe","downTask","getUpstream","getDownstream","setOutputEnd","winCount","it","sStep","sCount","modNext","sequentialNext","parseDataValue","ORDER_COMPARISON_OP_MAP","lval","rval","lte","gt","gte","FilterOrderComparator","op","_opFn","_rvalFloat","evaluate","SortOrderComparator","order","incomparable","isDesc","_resultLT","_incomparable","lvalFloat","rvalFloat","lvalNotNumeric","rvalNotNumeric","lvalIsStr","rvalIsStr","FilterEqualityComparator","isEq","_rval","_isEQ","_rvalTypeof","eqResult","lvalTypeof","ExternalSource","getRawData","cloneRawData","cloneAllDimensionInfo","retrieveValue","retrieveValueFromItem","convertValue","rawVal","dimInfo","createExternalSource","internalSource","externalTransform","extSource","sourceHeaderCount","dimsByName","dimDef","dimDefExt","errMsg_1","__isBuiltIn","rawValueGetter","upstream","isSupportedSourceFormat","externalTransformMap","registerExternalTransform","typeParsed","isBuiltIn","applyDataTransform","rawTransOption","sourceList","infoForPrint","pipedTransOption","pipeLen","transOption","applySingleDataTransform","upSourceList","pipeIndex","transType","extUpSourceList","upSource","resultList","upstreamList","resultIndex","resultMetaRawOption","firstUpSource","defaultDimValueGetters","UNDEFINED","CtorUint32Array","Uint32Array","CtorUint16Array","Uint16Array","CtorInt32Array","Int32Array","CtorFloat64Array","Float64Array","dataCtors","getIndicesCtor","rawCount","getInitialExtent","cloneChunk","originalChunk","prepareStore","dimIdx","append","DataCtor","oldStore","oldLen","newStore","DataStore","_chunks","_rawExtent","_extent","_rawCount","_calcDimNameToIdx","initData","inputDimensions","dimValueGetter","_provider","_indices","_getRawIdxIdentity","defaultGetter","defaultDimValueGetter","_dimValueGetter","_dimensions","_initDataFromProvider","getProvider","ensureCalculationDimension","calcDimNameToIdx","calcDimIdx","collectOrdinalMeta","ordinalMeta","chunk","rawExtents","ordinalOffset","dimRawExtent","parseAndCollect","getOrdinalMeta","appendValues","values","minFillLen","chunks","dimLen","rawExtent","emptyDataItem","sourceIdx","arrayRows","dimNames","dimStorage","dimStore","getValues","dimArr","rawIdx","getSum","dimData","getMedian","dimDataArray","sortedDimDataArray","rawIndex","indicesOfNearest","maxDistance","nearestIndices","minDist","minDiff","nearestIndicesLen","dist","getIndices","newIndices","thisCount","buffer","dim0","_updateGetRawIdx","selectRange","originalCount","storeArr","quickFinished","dimStorage2","min2","max2","dimk","_updateDims","targetChunks","tmpRetValue","dataCount","retValue","rawExtentOnDim","lttbDownSample","valueDimension","rate","maxArea","area","nextRawIndex","targetStorage","sampledIndex","frameSize","currentRawIndex","nextFrameStart","nextFrameEnd","avgX","avgY","frameStart","frameEnd","pointAX","pointAY","firstNaNIndex","countNaN","_getRawIdx","downSample","dimension","sampleValue","sampleIndex","frameValues","sampleFrameIdx","getDataExtent","initialExtent","currEnd","useRaw","clonedDims","ignoreIndices","clonedDimsMap","_copyCommonProps","_cloneIndices","getDimValueSimply","objectRows","keyedColumns","original","typedArray","SourceManager","sourceHost","_sourceList","_storeList","_upstreamSignList","_versionSignBase","_sourceHost","_setLocalSource","upstreamSignList","_getVersionSign","prepareSource","_isDirty","_createSource","resultSourceList","upSourceMgrList","_getUpstreamSourceManagers","hasUpstream","upSourceMgr","newMetaRawOption","_getSourceMetaRawOption","upMetaRawOption","needsCreateSource","_applyTransform","upMgrList","transformOption","fromTransformResult","doThrow","upMgr","datasetIndex","upSrcMgr","sourceIndex","getSharedDataStore","seriesDimRequest","schema","makeStoreSchema","_innerGetDataStore","hash","storeDims","seriesSource","sourceReadKey","storeList","cachedStoreMap","cachedStore","getSourceManager","TOOLTIP_LINE_HEIGHT_CSS","getTooltipTextStyle","nameFontColor","nameFontSize","nameFontWeight","valueFontColor","valueFontSize","valueFontWeight","nameStyle","valueStyle","HTML_GAPS","RICH_TEXT_GAPS","createTooltipMarkup","isSectionFragment","getBuilder","buildSection","buildNameValue","getBlockGapLevel","gapLevel_1","subBlockLen","blocks","hasInnerGap_1","noHeader","subBlock","subGapLevel","fragment","topMarginForOuterGap","toolTipTextStyle","gaps","getGap","subMarkupTextList","subBlocks","orderMode","sortBlocks","orderMap","valueAsc","valueDesc","comparator_1","sortParam","valueFormatter","subMarkupText","html","richText","wrapBlockHTML","displayableHeader","wrapInlineNameRichText","noName","noValue","noMarker","markerType","valueTypeOption","markerStr","markupStyleCreator","makeTooltipMarker","markerColor","readableName","readableValueList","valueAlignRight","valueCloseToMarker","wrapInlineValueRichText","wrapInlineNameHTML","wrapInlineValueHTML","buildTooltipMarkup","builder","gapLevel","encodedContent","topGap","clearfix","marginCSS","leftHasMarker","marginCss","alignRight","paddingStr","alignCSS","wrapRichTextStyle","styles","paddingLeft","retrieveVisualColorForTooltipMarker","visualDrawType","getPaddingFromTooltipModel","TooltipMarkupStyleCreator","richTextStyles","_nextStyleNameId","_generateStyleName","colorStr","finalStl","defaultSeriesFormatTooltip","inlineValue","inlineValueType","tooltipDims","mapDimensionsAll","tooltipDimLen","isValueArr","formatArrResult","formatTooltipArrayValue","inlineValues","inlineValueTypes","seriesNameSpecified","inlineName","isValueMultipleLine","dimItem","setEachItem","otherDims","getSelectionKey","getId","SERIES_UNIVERSAL_TRANSITION_PROP","SeriesModel","_selectedDataIndicesMap","dataTask","dataTaskCount","dataTaskReset","sourceManager","getInitialData","wrapData","dataBeforeProcessed","autoSeriesName","_initSelectedMapFromData","themeSubType","fillDataTextStyle","newSeriesOption","task","getCurrentTask","getLinkedData","mainData","getLinkedDataAll","getEncode","getColorBy","isColorBySeries","getBaseAxis","coordDimToDataDim","coordDim","getProgressive","getProgressiveThreshold","innerDataIndices","_innerSelect","unselect","selectedMap","selectedMode","nameOrId","toggleSelect","tmpArr","selectedDataIndicesMap","nameOrIds","isUniversalTransitionEnabled","universalTransitionOpt","universalTransition","lastDataIndex","hasItemOption","ignoreStyleOnData","hasSymbolVisual","defaultSymbol","visualStyleAccessPath","getSeriesAutoName","dataDims","nameArr","dataDim","cloneShallow","dataTaskProgress","param","CHANGABLE_METHODS","DOWNSAMPLE_METHODS","wrapMethod","onDataChange","scheduler","pipeline","getPipeline","agentStubMap","Series","ComponentView","updateView","updateLayout","updateVisual","seriesModels","isBlur","eachRendered","createRenderPlanner","pipelineContext","originalLarge","large","originalProgressive","progressiveRender","mathAtan2","transformPath","nPoint","p_1","vMag","vRatio","u","vAngle","processArc","fa","fs","psiDeg","xp","yp","lambda","cxp","cyp","commandReg","numberReg","createPathProxyFromString","prevCmd","cpx","cpy","subpathX","subpathY","cmdList","cmdText","cmdStr","pLen","ctlPtx","ctlPty","pathData","SVGPath","isPathProxy","createPathOptions","innerOpts","createFromString","extendFromString","defaultOpts","mergePath","pathEls","pathList","pathEl","pathBundle","CircleShape","Circle","EllipseShape","Ellipse","mathACos","mathATan2","dx10","dy10","dx32","dy32","computeCornerTangents","cr","x01","y01","x11","y11","x10","y10","x00","y00","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","normalizeCornerRadius","innerRadius","hasRadius","hasInnerRadius","mod","icrStart","icrEnd","ocrStart","ocrEnd","ocrs","ocre","icrs","icre","ocrMax","icrMax","limitedOcrMax","limitedIcrMax","xre","yre","xirs","yirs","xrs","yrs","xire","yire","hasArc","cornerRadius","halfRd","it_1","crStart","crEnd","ct0","ct1","SectorShape","Sector","RingShape","Ring","smoothBezier","smooth","isLoop","constraint","prevPoint","nextPoint","cps","point","cp0","cp1","shift","controlPoints","smoothConstraint","cp2","PolygonShape","Polygon","PolylineShape","Polyline","LineShape","Line","pointAt","BezierCurveShape","cpx1","cpy1","someVectorAt","isTangent","cpx2","cpy2","BezierCurve","tangentAt","ArcShape","Arc","unitX","unitY","CompoundPath","_updatePathDirty","paths","dirtyPath","Gradient","addColorStop","LinearGradient","globalCoord","RadialGradient","extent2","OrientedBoundingRect","_corners","_axes","_origin","fromBoundingRect","corners","overlapped","noMtv","_intersectCheckOneSide","minTv","maxTv","axis","_getProjMinMaxOnAxis","dist0","dist1","proj","proj_1","IncrementalDisplayable","notClear","_displayables","_temporaryDisplayables","_cursor","getCursor","clearDisplaybles","clearTemporalDisplayables","addDisplayable","notPersistent","addDisplayables","displayables","getDisplayables","getTemporalDisplayables","eachPendingDisplayable","_customShapeMap","extendShape","extendPathFromString","extendPath","registerShape","ShapeClass","getShapeClass","makePath","layout","centerGraphic","resizePath","makeImage","imageUrl","zrImg","img","boundingRect","pathRect","getTransform","mat","invert","transformDirection","direction","hBase","vBase","vertex","isNotGroup","isPath","groupTransition","g1","g2","elMap1","getElMap","anid","oldEl","newProp","getAnimatableProps","elMap","clipPointsByRect","clipRectByRect","targetRect","createIcon","iconStr","linePolygonIntersect","a1x","a1y","a2x","a2y","lineLineIntersect","b1x","b1y","b2x","b2y","mx","my","nx","ny","nmCrossProduct","crossProduct2d","nearZero","b1a1x","b1a1y","setTooltipConfig","itemTooltipOption","itemTooltipOptionObj","formatterParams","formatterParamsExtra","tooltipConfig","traverseElement","traverseElements","els","renderPlanner","ChartView","renderTask","renderTaskPlan","renderTaskReset","highlight","toggleHighlight","markUpdateMethod","updateMethod","elSetState","progressMethodMap","incrementalPrepareRender","incrementalRender","Chart","ORIGIN_METHOD","RATE","THROTTLE_TYPE","debounce","currCall","debounceNextCall","lastCall","lastExec","timer","cbArgs","thisDelay","thisDebounce","debounceDelay","createOrUpdate","fnAttr","throttleType","originFn","lastThrottleType","lastRate","defaultStyleMappers","defaultColorKey","getStyleMapper","stylePath","styleMapper","visualStyleMapper","getDefaultColorKey","colorKey","seriesStyleTask","createOnAllSeries","performRawSeries","styleModel","getStyle","globalStyle","decalOption","setVisual","colorCallback","hasAutoColor","colorPalette","dataEach","dataParams","setItemVisual","sharedModel","dataStyleTask","getVisual","existsStyle","ensureUniqueItemVisual","dataColorPaletteTask","overallReset","paletteScopeGroupByType","colorScope","dataAll","idxMap","fromPalette","defaultLoading","textColor","maskColor","showSpinner","spinnerRadius","mask","labelRect","Scheduler","dataProcessorHandlers","visualHandlers","_stageTaskMap","_dataProcessorHandlers","_visualHandlers","_allHandlers","taskRecord","overallTask","getPerformArgs","_pipelineMap","pCtx","progressiveEnabled","__idxInPipeline","blockIndex","pipelineId","updateStreamModes","dataLen","threshold","restorePipelines","pipelineMap","head","tail","preventIncremental","_pipe","prepareStageTasks","stageTaskMap","record","_createSeriesStageTask","_createOverallStageTask","prepareView","__block","performDataProcessorTasks","_performStageTasks","performVisualTasks","stageHandlers","needSetDirty","setDirty","dirtyMap","stageHandler","visualType","stageHandlerRecord","seriesTaskMap","overallNeedDirty_1","stub","performArgs_1","performSeriesTasks","oldSeriesTaskMap","newSeriesTaskMap","getTargetSeries","seriesTaskPlan","seriesTaskReset","seriesTaskCount","useClearVisual","isVisual","isLayout","overallTaskReset","oldAgentStubMap","newAgentStubMap","overallProgress","shouldOverallTaskDirty","createStub","stubReset","stubOnDirty","agent","wrapStageHandler","detectSeriseType","stubProgress","clearAllVisual","resetDefines","makeSeriesTaskProgress","singleSeriesTaskProgress","resetDefineIdx","resetDefine","legacyFunc","ecModelMock","apiMock","mockMethods","Clz","cond","colorAll","contrastColor","axisCommon","axisLine","splitLine","splitArea","minorSplitLine","crossStyle","subtextStyle","iconStyle","brushStyle","handleStyle","moveHandleStyle","fillerColor","dataBackground","selectedDataBackground","controlStyle","dayLabel","monthLabel","yearLabel","timeAxis","logAxis","valueAxis","categoryAxis","axisLabel","color0","borderColor0","ECEventProcessor","cptQuery","dataQuery","otherQuery","condCptType","suffixes_1","dataKeys_1","reserved","propSuffix","suffixPos","eventInfo","packedEvent","check","filterForExposedEvent","host","propOnHost","SYMBOL_PROPS_WITH_CB","SYMBOL_PROPS","seriesSymbolTask","legendIcon","symbolOptions","symbolOptionsCb","hasCallback","symbolPropName","symbolKeepAspect","symbolPropsCb","dataSymbolTask","getItemVisualFromData","getVisualFromData","createLegacyDataSelectAction","ecRegisterAction","getSeriesIndices","eventsMap","dispatchAction","handleSeriesLegacySelectEvents","eventPostfix","ecIns","legacyEventName","fromActionPayload","handleLegacySelectEvents","messageCenter","isFromClick","fromAction","findEventDispatcher","returnFirstMatch","found","wmUniqueIndex","supportDefineProperty","WeakMap","_guard","enumerable","configurable","has","TypeError","Triangle","Diamond","Pin","tanX","tanY","cpLen","cpLen2","Arrow","symbolCtors","roundRect","square","diamond","pin","arrow","triangle","symbolShapeMakers","symbolBuildProxies","SymbolClz","symbolType","inBundle","proxySymbol","symbolPathSetColor","symbolStyle","__isEmptyBrush","createSymbol","keepAspect","symbolPath","normalizeSymbolSize","normalizeSymbolOffset","symbolOffset","isSafeNum","createLinearGradient","canvasGradient","createRadialGradient","getCanvasGradient","isClipPathChanged","prevClipPaths","parseInt10","getSize","whIdx","wh","cwh","plt","prb","defaultView","getComputedStyle","normalizeLineDash","lineType","getLineDash","lineScale_1","pathProxyForDraw","styleHasStroke","isValidStrokeFillStyle","strokeOrFill","styleHasFill","doFillPath","originalGlobalAlpha","globalAlpha","doStrokePath","createCanvasPattern","pattern","canvasPattern","createPattern","DOMMatrix","setTransform","matrix","translateSelf","rotateSelf","scaleSelf","brushPath","strokePart","firstDraw","dirtyFlag","hasFillGradient","hasStrokeGradient","hasFillPattern","hasStrokePattern","fillGradient","strokeGradient","fillPattern","strokePattern","__canvasFillGradient","__canvasStrokeGradient","__canvasFillPattern","__canvasStrokePattern","fillStyle","strokeStyle","setLineDash","needsRebuild","brushImage","drawImage","brushText","strokeText","fillText","SHADOW_NUMBER_PROPS","STROKE_PROPS","bindCommonProps","prevStyle","forceSetAll","flushPathDrawn","globalCompositeOperation","bindPathAndTextCommonStyle","prevEl","newLineWidth","bindImageStyle","setContextTransform","updateClipStatus","allClipped","isTransformChanged","m0","DRAW_TYPE_PATH","DRAW_TYPE_IMAGE","DRAW_TYPE_TEXT","DRAW_TYPE_INCREMENTAL","canPathBatch","batchFill","batchStroke","brushSingle","isLast","__isRendered","prevElClipPaths","forceSetTransform","forceSetStyle","canBatchPath","lastDrawType","brushIncremental","temporalDisplayables","innerScope","i_1","len_1","decalMap","decalCache","decalKeys","createOrUpdatePatternFromDecal","decalObject","getDevicePixelRatio","getZr","isSVG","oldPattern","decalOpt","maxTileWidth","maxTileHeight","setPatternnSource","isValidKey","cache","svgElement","normalizeDashArrayX","normalizeDashArrayY","symbolArray","normalizeSymbolArray","lineBlockLengthsX","getLineBlockLengthX","lineBlockLengthY","getLineBlockLengthY","canvas","createCanvas","svgRoot","tag","pSize","getPatternSize","xlen","symbolRepeats","brushDecal","clearRect","fillRect","ySum","yId","yIdTotal","xId0","symbolYId","xId1","xId1Total","xSum","top_1","symbolXId","brushSymbol","symbolVNode","renderOneToVNode","svgWidth","svgHeight","isAllString","dash","dashValue","isAllNumber","dashValue_1","blockLength","decalVisual","hasItemVisual","lifecycle","implsStore","registerImpl","impl","getImpl","TEST_FRAME_REMAIN_TIME","PRIORITY_PROCESSOR_SERIES_FILTER","PRIORITY_PROCESSOR_DATASTACK","PRIORITY_PROCESSOR_FILTER","PRIORITY_PROCESSOR_DEFAULT","PRIORITY_PROCESSOR_STATISTIC","PRIORITY_VISUAL_LAYOUT","PRIORITY_VISUAL_PROGRESSIVE_LAYOUT","PRIORITY_VISUAL_GLOBAL","PRIORITY_VISUAL_CHART","PRIORITY_VISUAL_COMPONENT","PRIORITY_VISUAL_CHART_DATA_CUSTOM","PRIORITY_VISUAL_POST_CHART_LAYOUT","PRIORITY_VISUAL_BRUSH","PRIORITY_VISUAL_ARIA","PRIORITY_VISUAL_DECAL","PRIORITY","PROCESSOR","FILTER","SERIES_FILTER","STATISTIC","VISUAL","LAYOUT","PROGRESSIVE_LAYOUT","GLOBAL","CHART","POST_CHART_LAYOUT","COMPONENT","BRUSH","CHART_ITEM","ARIA","DECAL","IN_MAIN_PROCESS_KEY","PENDING_UPDATE","STATUS_NEEDS_UPDATE_KEY","ACTION_REG","CONNECT_STATUS_KEY","CONNECT_STATUS_PENDING","CONNECT_STATUS_UPDATING","CONNECT_STATUS_UPDATED","createRegisterEventWithLowercaseECharts","isDisposed","toLowercaseNameAndCallEventful","disposedWarning","createRegisterEventWithLowercaseMessageCenter","updateDirectly","updateMethods","doConvertPixel","doDispatchAction","flushPendingActions","triggerUpdatedEvent","bindRenderedEvent","bindMouseEvent","renderComponents","renderSeries","createExtensionAPI","enableConnect","markStatusToUpdate","applyChangedStates","MessageCenter","messageCenterProto","ECharts","_chartsViews","_chartsMap","_componentsViews","_pendingActions","themeStorage","_dom","defaultRenderer","defaultCoarsePointer","defaultUseDirtyRect","hashMap","_zr","_ssr","_throttledZrFlush","_coordSysMgr","prioritySortFunc","__prio","visualFuncs","dataProcessorFuncs","_scheduler","_messageCenter","_initEvents","_onframe","updateParams","remainTime","_model","startTime","getDom","isSSR","notMerge","lazyUpdate","transitionOpt","seriesTransition","setTheme","getRenderedCanvas","renderToCanvas","pixelRatio","renderToSVGString","renderToString","useViewBox","getSvgDataURL","svgSupported","toDataURL","getDataURL","excludeComponents","excludesComponentViews","__viewId","getConnectedDataURL","isSvg","groupId","mathMax","MAX_NUMBER","connectedGroups","left_1","right_1","bottom_1","canvasList_1","dpr_1","getSvgDom","targetCanvas","zr_1","content_1","getSvgRoot","connectedBackgroundColor","convertToPixel","convertFromPixel","containPixel","findResult","containPoint","parsedFinder","MOUSE_EVENT_NAMES","eveName","isGlobalOut","dataModel","eventActionMap","actionType","DOM_ATTRIBUTE_KEY","_loadingFX","needPrepare","showLoading","hideLoading","loadingEffects","makeActionFromEvent","eventObj","weChat","updateLabelLayout","updatedSeries","allocateZlevels","componentZLevels","seriesZLevels","hasSeparateZLevel","zlevelKey","lastSeriesZLevel_1","lastSeriesKey_1","zLevels","applyElementStates","newStates","updateHoverLayerStatus","elCount","preventUsingHoverLayer","chartView","__alive","updateBlend","updateZ","preventAutoZ","doUpdateZ","maxZ2","labelLine","textGuideLineConfig","showAbove","prevStates","updateStates","stateAnimationModel","enableAnimation","isComponent","viewList","viewMap","doPrepare","requireNewView","viewId","classType","Clazz","__id","__model","__ecComponentInfo","excludeSeriesIdMap","excludeSeriesId","modelId","isExcluded","notBlur","callView","prepareAndUpdate","coordSysMgr","componentDirtyList","componentView","seriesDirtyMap","coordSysList","chartsMap","escapeConnect","actionWrap","actionInfo","cptTypeTmp","cptType","payloads","batched","batch","eventObjBatch","isSelectChange","isHighDown","batchItem","action","newObj","pendingActions","dirtyList","getComponentByElement","modelInfo","updateConnectedChartsStatus","charts","otherChart","action_1","otherCharts_1","echartsProto","one","wrapped","args2","idBase","isClient","existInstance","getInstanceByDom","registerTheme","registerPreprocessor","preprocessorFunc","registerProcessor","priority","processor","normalizeRegister","registerPostInit","postInitFunc","registerUpdateLifecycle","registerPostUpdate","postUpdateFunc","registerAction","registerCoordinateSystem","coordSysCreator","registerLayout","layoutTask","registerVisual","visualTask","registeredTasks","targetList","defaultPriority","__raw","registerLoading","loadingFx","mapName","geoJson","specialAreas","registerMap","registerTransform","extensions","extensionRegisters","registerComponentModel","registerComponentView","ComponentViewClass","registerSeriesModel","SeriesModelClass","registerChartView","ChartViewClass","painterType","PainterCtor","use","ext","singleExt","install","createDom","newDom","newDomStyle","Layer","motionBlur","lastFrameAlpha","virtual","maxRepaintRectCount","__firstTimePaint","__used","__drawIndex","__startIndex","__endIndex","__prevStartIndex","__prevEndIndex","domStyle","onselectstart","getElementCount","initContext","setUnpainted","createBackBuffer","domBack","ctxBack","createRepaintRects","prevList","hasIntersections","mergedRepaintRects","full","pendingRect","addRectToMergePool","isMerged","minDeltaArea","bestRectToMergeIdx","mergedRect","pendingRect_1","aArea","bArea","pendingArea","deltaArea","shouldPaint","prevRect","curRect","_paintRects","debugGetPaintRects","clearAll","clearColor","repaintRects","haveMotionBLur","doClear","clearColorGradientOrPattern","shouldCache","__width","__height","__canvasGradient","HOVER_LAYER_ZLEVEL","CANVAS_ZLEVEL","EL_AFTER_INCREMENTAL_INC","INCREMENTAL_INC","isLayerValid","__builtin__","createRoot","domRoot","CanvasPainter","_zlevelList","_prevDisplayList","_layers","_layerConfig","_needsManuallyCompositing","singleCanvas","_opts","_singleCanvas","rootStyle","zlevelList","layers","rootCanvas","_width","_height","mainLayer","_domRoot","isSingleCanvas","getViewportRootOffset","viewportRoot","paintAll","_redrawId","_paintList","_paintHoverList","_hoverlayer","getLayer","getHoverLayer","paintOne","redrawId","_updateLayerStatus","_doPaintList","needsRefreshHover","_compositeManually","eachLayer","self_1","eachBuiltinLayer","layerList","zi","_loop_1","this_1","useTimer","firstEl","repaint","repaintRect","_doPaintEl","dTime","wxa","draw","currentLayer","insertLayer","layersMap","prevLayer","prevDom","insertBefore","firstChild","getLayers","updatePrevLayer","prevZlevel","incrementalLayerCount","_clearLayer","layerConfig","_zlevel","delLayer","removeChild","display","clearLayer","imageLayer","width_1","height_1","registers","dataIndexMapValueLength","valNumOrArrLengthMoreThan2","defaultKeyGetter","DataDiffer","oldArr","newArr","oldKeyGetter","newKeyGetter","diffMode","_old","_new","_oldKeyGetter","_newKeyGetter","_diffModeMultiple","_add","_update","updateManyToOne","_updateManyToOne","updateOneToMany","_updateOneToMany","updateManyToMany","_updateManyToMany","_remove","execute","_executeOneToOne","newDataIndexMap","oldDataKeyArr","newDataKeyArr","_initIndexMap","oldKey","newIdxMapVal","newIdxMapValLen","newIdx","_performRestAdd","_executeMultiple","oldDataIndexMap","oldIdxMapVal","oldIdxMapValLen","newKey","idxMapValLen","keyArr","keyGetterName","cbModeMultiple","idxMapVal","DimensionUserOuput","dimRequest","_encode","_schema","_getFullDimensionNames","_cachedDimNames","makeOutputDimensionNames","summarizeDimensions","summary","notExtraCoordDimMap","defaultedLabel","defaultedTooltip","userOutputEncode","coordDimIndex","getOrCreateEncodeArr","isExtraCoord","mayLabelDimType","defaultTooltip","encodeArr","dataDimsOnCoord","encodeFirstDimNotExtra","dataDimIndicesOnCoord","storeDimIndex","encodeLabel","encodeTooltip","getDimensionTypeByAxis","axisType","SeriesDimensionDefine","dimTypeShort","float","int","ordinal","number","SeriesDataSchema","_dimOmitted","dimensionOmitted","_fullDimCount","fullDimensionCount","_updateDimOmitted","isDimensionOmitted","_dimNameMap","ensureSourceDimNameMap","getSourceDimensionIndex","getSourceDimension","willRetrieveDataByName","makeHashStrict","shouldOmitUnusedDimensions","dimHash","fullDimIdx","seriesDimIdx","seriesDimDef","sourceDimDef","isCalculationCoord","appendCalculationDimension","isSeriesDataSchema","createDimNameMap","dataDimNameMap","dimDefItemRaw","userDimName","innerSource","dimNameMap","prepareInvertedIndex","getIdNameFromStore","normalizeDimensions","transferProperties","cloneListForMapAndSample","makeIdFromName","ID_PREFIX","INDEX_NOT_FOUND","TRANSFERABLE_PROPERTIES","CLONE_PROPERTIES","SeriesData","dimensionsInput","hostModel","_nameList","_idList","_visual","_layout","_itemVisuals","_itemLayouts","_graphicEls","_approximateExtent","_calculationInfo","TRANSFERABLE_METHODS","assignStoreDimIdx","dimensionInfos","invertedIndicesMap","needsHasOwn","emptyObj","dimInfoInput","dimensionInfo","dimensionName","createInvertedIndices","_nameDimIdx","itemId","_idDimIdx","_dimInfos","_initGetDimensionInfo","_invertedIndicesMap","dimIdxToName_1","_dimIdxToName","getDimension","_recognizeDimIndex","_getDimInfo","_getStoreDimIndex","getDimensionsOnCoord","_dimSummary","mapDimension","dimensionsSummary","_store","nameList","_nameRepeatCount","_doInit","shouldMakeIdFromName","_shouldMakeIdFromName","_updateOrdinalMeta","idList","isFormatOriginal","sharedDataItem","getApproximateExtent","setApproximateExtent","_getCategory","invertedIndices","fCtx","dimIndices","filterSelf","innerRange","mapArray","ctxCompat","otherList","thisList","visual","kvObj","itemVisual","itemVisuals","setLayout","getLayout","getItemLayout","setItemLayout","clearItemLayouts","setItemGraphicEl","injectFunction","originalMethod","__wrappedMethods","nameDimIdx","idDimIdx","nameRepeatCount","nmCnt","prepareSeriesDataSchema","sysDims","coordDimNameMap","getDimCount","dimensionsCount","omitUnusedDimensions","canOmitUnusedDimensions","isUsingSourceDimensionsDef","encodeDef","encodeDefine","encodeDefaulter","encodeDefMap","indicesMap","getResultItem","dataDimsRaw","validDataDims","resultDimIdxOrName","resultDimIdx","applyDim","availDimIdx","sysDimItemRaw","sysDimItemDimsDef","sysDimItemOtherDims","sysDimItem","sysDimItemDimsDefItem","generateCoord","generateCoordCount","fromZero","ifNoNameFillWithCoordName","item0","item1","genCoordDimName","removeDuplication","duplicationMap","dimOriginalName","optDimCount","hasKey","CoordSysInfo","coordSysName","coordSysDims","axisMap","categoryAxisMap","getCoordSysInfoBySeries","fetch","fetchers","cartesian2d","xAxisModel","yAxisModel","firstCategoryDimIndex","singleAxis","singleAxisModel","polar","polarModel","radiusAxisModel","findAxisModel","angleAxisModel","parallelModel","parallelAxisIndex","axisIndex","axisModel","axisDim","enableDataStack","dimensionDefineList","byIndex","stackedCoordDimension","isLegacyDimensionsInput","stackedByDimInfo","stackedDimInfo","mayStack","stackedDimCoordDim_1","stackedDimType","stackedDimCoordIndex_1","stackedOverDimensionDefine","stackResultDimensionDefine","isDimensionStacked","stackedDim","getStackedDimension","targetDim","getCoordSysDimDefs","coordSysInfo","coordSysDimDefs","registeredCoordSys","getDimensionsInfo","injectOrdinalMeta","dimInfoList","hasNameEncode","categoryAxisModel","createSeriesData","sourceRaw","isOriginalSource","useEncodeDefaulter","createDimensionOptions","stackCalculationInfo","isNeedCompleteOrdinalData","sampleItem","firstDataNotNull","LineSeriesModel","getLegendIcon","itemHeight","itemWidth","visualRotate","symbolRotate","iconRotate","legendHoverLink","endLabel","valueAnimation","smoothMonotone","showSymbol","showAllSymbol","connectNulls","sampling","divideShape","triggerLineEvent","LineSeries","getDefaultLabel","labelDims","vals","getDefaultInterpolatedLabel","Symbol","seriesScope","updateData","_createSymbol","driftSymbol","_symbolType","stopSymbolAnimation","toLastFrame","getSymbolType","getSymbolPath","setZ","setDraggable","hasCursorOption","getSymbolSize","disableAnimation","_updateCommon","_sizeX","_sizeY","emphasisItemStyle","blurItemStyle","selectItemStyle","emphasisDisabled","hoverScale","emphasisModel","visualColor","pathStyle","symbolInnerColor","liftZ","z2Origin","_z2","useNameLabel","getLabelDefaultText","emphasisState","scaleRatio","setSymbolScale","fadeOut","animationOpt","fadeLabel","symbolNeedsDraw","isIgnore","clipShape","normalizeUpdateOpt","makeSeriesScope","SymbolDraw","SymbolCtor","_SymbolCtor","_progressiveEls","oldData","symbolUpdateOpt","getSymbolPoint","symbolEl","oldIdx","newSymbolType","oldSymbolType","_getSymbolPoint","incrementalPrepareUpdate","_seriesScope","incrementalUpdate","taskParams","updateIncrementalAndHover","prepareDataCoordInfo","valueOrigin","baseAxis","getOtherAxis","valueStart","getValueStart","baseAxisDim","valueAxisDim","valueDim","baseDim","baseDataOffset","stacked","stackResultDim","dataDimsForPoint","getExtent","getStackedOnPoint","dataCoordInfo","stackedData","dataToPoint","supportFloat32Array","Float32ArrayCtor","createFloat32Array","arg","diffData","diffResult","idx1","lineAnimationDiff","oldStackedOnPoints","newStackedOnPoints","oldCoordSys","newCoordSys","oldValueOrigin","newValueOrigin","currPoints","nextPoints","currStackedPoints","nextStackedPoints","sortedIndices","rawIndices","newDataOldCoordInfo","oldPoints","newPoints","diffItem","pointAdded","oldIdx2","newIdx2","currentX","currentY","newDataDimsForPoint","oldPt","stackedOnPoint","sortedCurrPoints","sortedNextPoints","sortedCurrStackedPoints","sortedNextStackedPoints","sortedStatus","i2","idx2","stackedOnCurrent","stackedOnNext","isPointNull","drawSegment","segLen","allLen","prevX","prevY","cpx0","cpy0","tmpK","ratioNextSeg","nextCpx0","nextCpy0","lenPrevSeg","lenNextSeg","dir_1","dir_2","ECPolylineShape","ECPolyline","getPointOn","xOrY","isDimX","nRoot","t_1","ECPolygonShape","ECPolygon","stackedOnPoints","stackedOnSmooth","createGridClipPath","cartesian","hasAnimation","getArea","isHorizontal","isAxisInversed","duringCb","createPolarClipPath","sectorArea","isRadial","isCoordinateSystemType","isPointsSame","points1","points2","bboxFromPoints","minX","minY","getBoundingDiff","min1","max1","getSmooth","getStackedOnPoints","pt","turnPointsIntoStep","stepTurnAt","baseIndex","stepPoints","stepPt","nextPt","filteredPoints","stepPt2","clipColorStops","maxSize","prevOutOfRangeColorStop","prevInRangeColorStop","newColorStops","lerpStop","stop0","stop1","clippedCoord","coord0","stop_1","getVisualGradient","visualMetaList","visualMeta","getAxis","stops","toGlobalCoord","dataToCoord","stopLen","outerColors","colorStopsInRange","inRangeStopLen","tinyExtent","minCoord","maxCoord","coordSpan","gradient","getIsIgnoreFunc","isAuto","getAxesByScale","canShowAllSymbolForCategory","categoryDataDim","labelMap","getViewLabels","labelItem","ordinalNumber","getRawOrdinalNumber","tickValue","axisExtent","availSize","getLastIndexNotNull","getPointAtIndex","getIndexRange","prevIndex","nextIndex","anyStateShowEndLabel","createLineClipPath","lineView","endLabelModel_1","valueAnimation_1","data_1","labelAnimationRecord_1","lastFrameIndex","clipRect","_endLabelOnDuring","_endLabel","originalX","originalY","expandSize","getEndLabelStateSpecified","endLabelModel","isBaseInversed","LineView","lineGroup","symbolDraw","_symbolDraw","_lineGroup","lineStyleModel","areaStyleModel","isCoordSysPolar","prevCoordSys","_coordSys","polyline","_polyline","_polygon","isAreaChart","isIgnoreFunc","__temp","clipShapeForSymbol","_clipShapeForSymbol","_step","_newPolygon","_initOrUpdateEndLabel","oldClipPath","newClipPath","_stackedOnPoints","_points","_doUpdateAnimation","_initSymbolLabelAnimation","_newPolyline","lineJoin","emphasisLineStyle","stackedOnSeries","changePolyState","_changePolyState","_valueOrigin","packEventData","symbolLabel","isHorizontalOrRadial","isAxisInverse","seriesDuration","seriesDelay","seriesDelayValue","polarClip","pointToCoord","gridClip","ratio","disableLabelAnimation","data_2","animationRecord","distanceX","distanceY","dataIndexRange","endValue","__points","updatedDataInfo","diffStatus","ptIdx","pointsLayout","forceStoreInTypedArray","useTypedArray","dimIdx0","dimIdx1","tmpIn","tmpOut","samplers","average","minmax","turningPointAbsoluteValue","turningPointOriginalValue","originalValue","absoluteValue","nearest","indexSampler","dataSample","sampler","TitleModel","subtext","subtarget","itemGap","TitleView","titleModel","subtextStyleModel","textRect","subText","subTextEl","sublink","triggerEvent","groupRect","layoutOption","alignStyle","collect","axesInfo","seriesInvolved","coordSysAxesInfo","coordSysMap","collectAxesInfo","collectSeriesInfo","globalTooltipModel","globalAxisPointerModel","linksOption","linkGroups","axisPointerEnabled","coordSysKey","makeKey","axesInfoInCoordSys","coordSysModel","baseTooltipModel","getAxes","saveTooltipAxisInfo","getTooltipAxes","triggerAxis","cross","tooltipAxes","baseAxes","otherAxes","fromTooltip","triggerTooltip","axisPointerModel","axisPointerShow","isHandleTrigger","makeAxisPointerModel","snap","triggerEmphasis","axisKey","involveSeries","axisInfo","useHandle","linkGroup","groupIndex","getLinkGroupIndex","mapper","tooltipAxisPointerModel","volatileOption","field","labelOption","tooltipAxisPointerLabelShow","seriesTooltipTrigger","seriesTooltipShow","seriesDataCount","linkOption","checkPropInLink","linkPropValue","axisPropValue","fixValue","getAxisInfo","parse","isBlank","getAxisPointerModel","axisPointerClazz","AxisView","axisPointerClass","_doUpdateAxisPointerClass","updateAxisPointer","_axisPointer","_disposeAxisPointer","forceRender","getAxisPointerClass","registerAxisPointerClass","clazz","BaseAxisPointer","_dragging","_axisModel","_axisPointerModel","_lastValue","_lastStatus","_group","handle","_handle","elOption","makeElOption","graphicKey","_lastGraphicKey","moveAnimation","_moveAnimation","determineAnimation","doUpdateProps","updatePointerEl","updateLabelEl","createPointerEl","createLabelEl","updateMandatoryProps","_renderHandle","isCategoryAxis","useSnap","getBandWidth","pointerOption","pointerEl","labelEl","updateLabelShowHide","updateHandleTransform","handleModel","onmousemove","onmousedown","_onHandleDragMove","ondragend","_onHandleDragEnd","handleSize","_moveHandleToValue","getHandleTransProps","getHandleTransform","trans","_payloadInfo","lastProp","_doDispatchAxisPointer","payloadInfo","cursorPoint","tooltipOption","buildLabel","xy","xDimIndex","animationModel","propsEqual","lastProps","newProps","equals_1","Scale","setting","_setting","getSetting","unionExtent","unionExtentFromData","setExtent","thisExtent","isInExtentRange","_isBlank","setBlank","uidBase","OrdinalMeta","_needCollect","needCollect","_deduplication","deduplication","createByAxisModel","dedplication","getOrdinal","category","_getOrCreateMap","_map","isIntervalOrLogScale","intervalScaleNiceTicks","splitNumber","minInterval","maxInterval","span","intervalPrecision","getIntervalPrecision","niceTickExtent","fixExtent","increaseInterval","OrdinalScale","_ordinalMeta","_getTickNumber","getTicks","ticks","getMinorTicks","setSortInfo","infoOrdinalNumbers","ordinalNumbers","ordinalsByTick","_ordinalNumbersByTick","ticksByOrdinal","_ticksByOrdinalNumber","tickNum","allCategoryLen","unusedOrdinal","ticksByOrdinalNumber","tickNumber","ordinalNumbersByTick","getLabel","cateogry","calcNiceTicks","calcNiceExtent","Ordinal","roundNumber","IntervalScale","_interval","_intervalPrecision","getInterval","setInterval","_niceExtent","expandToNicedExtent","safeLimit","lastNiceTick","minorTicks","nextTick","prevTick","minorTicksGroup","minorInterval","minorTick","dataNum","fixMax","fixMin","setNiceExtent","Interval","STACK_PREFIX","getSeriesStackId","getAxisKey","prepareLayoutBarSeries","isOnCartesian","getValueAxesMinGaps","barSeries","axisValues","cnt","axisMinGaps","valuesInAxis","makeColumnLayout","seriesInfoList","bandWidth","minGap","extentSpan","scaleSpan","barWidth","barMaxWidth","barMinWidth","isInLargeMode","barGap","barCategoryGap","stackId","doCalBarWidthAndOffset","columnsMap","seriesInfo","columnsOnAxis","autoWidthCount","categoryGap","stacks","minWidth","categoryGapPercent","columnCount","barGapPercent","autoWidth","column","finalWidth","lastColumn","widthSum","retrieveColumnLayout","barWidthAndOffset","bisect","TimeScale","settings","_minLevelUnit","labelFormatter","innerTicks","getIntervalTicks","_approxInterval","approxTickNum","scaleIntervalsLen","scaleIntervals","isUnitValueSame","valueA","valueB","dateA","dateB","isSame","isSameYear","isSameMonth","isSameDay","isSameHour","isSameMinute","isSameSecond","isSameMilliSecond","getDateInterval","approxInterval","getMonthInterval","APPROX_ONE_MONTH","getHourInterval","getMinutesAndSecondsInterval","isMinutes","getMillisecondsInterval","getFirstTimestampOfUnit","unitName","outDate","bottomUnitName","unitNames","iter","addTicksInSpan","minTimestamp","maxTimestamp","getMethodName","setMethodName","isDate","dateTime","notAdd","addLevelTicks","lastLevelTicks","levelTicks","newAddedTicks","isFirstLevel","startTick","endTick","getterName","setterName","levelsTicks","currentLevelTicks","tickCount","lastLevelTickCount","primaryTimeUnit","nextPrimaryTimeUnit","levelTicksRemoveDuplicated","targetTickNum","levelsTicksInExtent","maxLevel","Time","scaleProto","roundingErrorFix","mathFloor","mathCeil","mathLog","LogScale","_originalScale","originalScale","originalExtent","powVal","_fixMin","fixRoundingError","_fixMax","niceExtent","originalVal","Log","ScaleRawExtentInfo","_prepareParams","_dataMin","_dataMax","isOrdinal","_isOrdinal","_needCrossZero","getNeedCrossZero","modelMinRaw","_modelMinRaw","_modelMinNum","parseAxisModelMinMax","modelMaxRaw","_modelMaxRaw","_modelMaxNum","_axisDataLen","getCategories","boundaryGap","boundaryGapArr","_boundaryGapInner","dataMin","dataMax","axisDataLen","boundaryGapInner","minFixed","maxFixed","determinedMin","_determinedMin","determinedMax","_determinedMax","modifyDataMinMax","minMaxName","DATA_MIN_MAX_ATTR","setDeterminedMinMax","DETERMINED_MIN_MAX_ATTR","freeze","frozen","ensureScaleRawExtentInfo","rawExtentInfo","minMax","getScaleExtent","scaleType","rawExtentResult","barSeriesModels","isBaseAxisAndHasBarSeries_1","adjustedScale","adjustScaleForOverflow","axisLength","barsOnCurrentAxis","minOverflow","maxOverflow","totalOverFlow","oldRange","oldRangePercentOfNew","overflowBuffer","niceScaleExtent","inModel","extentInfo","isIntervalOrTime","createScaleByModel","ifAxisCrossZero","makeLabelFormatter","getLabelModel","categoryTickStart","getAxisRawValue","estimateLabelUnionRect","realNumberScaleTicks","categoryScaleExtent","axisLabelModel","unrotatedSingleRect","singleRect","rotateTextRect","rotate","rotateRadians","beforeWidth","beforeHeight","afterWidth","afterHeight","rotatedRect","getOptionCategoryInterval","shouldShowAllLabels","getDataDimensionsOnAxis","dataDimMap","unionAxisExtentFromData","seriesExtent","prepareLayoutList","defaultAttr","localRect","isAxisAligned","minMargin","globalRect","obb","computedLayoutOption","axisAligned","shiftLayout","xyDim","sizeDim","minBound","maxBound","balanceShift","lastPos","adjusted","shifts","totalShifts","shiftList","maxGap","updateMinMaxGap","squeezeGaps","takeBoundsGap","squeezeWhenBailout","gapThisBound","gapOtherBound","moveDir","moveFromMaxGap","remained","maxSqeezePercent","totalGaps","prevItemRect","squeezePercent","movement","moveForEachLabel","shiftLayoutOnY","topBound","bottomBound","hideOverlap","labelList","displayedLabels","hideEl","existsTextCfg","labelGuideIgnore","AxisBuilder","nameDirection","tickDirection","labelDirection","handleAutoShown","transformGroup","_transformGroup","hasBuilder","builders","getGroup","innerTextLayout","axisRotation","textRotation","rotationDiff","makeAxisEventDataBase","isLabelSilent","tooltipOpt","shown","pt1","pt2","arrows","arrowSize","arrowOffset","symbolWidth_1","symbolHeight_1","axisTickLabel","ticksEls","buildAxisMajorTicks","labelEls","buildAxisLabel","fixMinMaxLabelShow","buildAxisMinorTicks","labelLayout","axisNameAvailableWidth","nameLocation","gapSignal","isNameLocationCenter","nameRotation","endTextLayout","truncateOpt","nameTruncateMaxWidth","__fullText","targetType","textRotate","onLeft","tickEls","showMinLabel","showMaxLabel","firstLabel","nextLabel","lastLabel","prevLabel","firstTick","lastTick","ignoreEl","isTwoLabelOverlapped","firstRect","nextRect","mRotationBack","createTicks","ticksCoords","tickTransform","tickEndCoord","tickLineStyle","anidPrefix","tickCoord","tickEl","tickModel","getTicksCoords","minorTickModel","minorTicksCoords","getMinorTicksCoords","minorTickLineStyle","minorTicksEls","axisLabelShow","labelModel","labelMargin","labels","labelRotation","rawCategoryData","formattedLabel","rawLabel","itemLabelModel","rawCategoryItem","alignMin","alignMax","verticalAlignMin","verticalAlignMax","tickIndex","buildElStyle","axisPointerType","buildLabelElOption","labelPos","getValueLabel","paddings","confineInContainer","bgColor","seriesDataIndices","params_1","axisDimension","seriesData","idxItem","getTransformedPosition","layoutInfo","buildCartesianSingleLabelElOption","textLayout","makeLineShape","makeRectShape","gridModel","grid","otherAxisOnZeroOf","getAxesOnZeroOf","rawAxisPosition","axisPosition","getRect","rectBound","onZero","axisOffset","posBound","onZeroCoord","dirMap","labelInside","isCartesian2DSeries","findAxisModels","axisModelMap","CartesianAxisPointer","otherExtent","getCartesian","getGlobalExtent","pixelValue","elStyle","pointerShapeBuilder","currPosition","cursorOtherValue","tooltipOptions","getAxisDimIndex","shadow","AxisPointerModel","shadowStyle","records","initGlobalListeners","useHandler","dis","makeDispatchAction","dispatchTooltipFinally","pendings","initialized","doEnter","onLeave","actuallyPayload","showLen","showTip","hideLen","hideTip","currTrigger","unregister","AxisPointerView","triggerOn","findPointFromSeries","getTooltipPosition","isStacked","axisTrigger","illegalPoint","isIllegalPoint","inputAxesInfo","shouldHide","outputPayload","showValueMap","dataByCoordSys","updaters","showPointer","showTooltip","coordSysContainsPoint","inputAxisInfo","findInputAxisInfo","pointToData","processOnAxis","linkTriggers","tarAxisInfo","tarKey","srcAxisInfo","srcKey","srcValItem","makeMapperParam","updateModelActually","dispatchTooltipActually","dispatchHighDownActually","noSnap","outputFinder","containData","buildPayloadsBySeries","payloadBatch","snapToValue","seriesNestestValue","getAxisTooltipData","nestestValue","coordSysItem","coordSysId","coordSysIndex","coordSysType","coordSysMainType","dataByAxis","axisId","valueLabelOpt","outputAxesInfo","valItem","highDownKey","lastHighlights","newHighlights","toHighlight","toDownplay","TooltipModel","showContent","alwaysShowContent","displayMode","confine","showDelay","hideDelay","transitionDuration","enterable","shouldTooltipConfine","tooltipModel","confineOption","testStyle","styleProps","TRANSFORM_VENDOR","TRANSITION_VENDOR","toCSSVendorPrefix","styleVendor","styleProp","currentStyle","CSS_TRANSITION_VENDOR","CSS_TRANSFORM_VENDOR","gCssText","transform3dSupported","mirrorPos","assembleArrow","arrowPosition","rotateDeg","arrowPos","positionStyle","transformStyle","rotateRadian","arrowWH","rotatedWH","SQRT2","borderStyle","styleCss","assembleTransition","onlyFade","transitionCurve","transitionOption","transitionText","transformSupported","assembleTransform","is3d","translate","assembleFont","assembleCssText","enableTransition","boxShadow","borderName","camelCase","makeStyleCoord","zrPainter","zrViewportRoot","viewportRootOffset","TooltipHTMLContent","_show","_styleCoord","_enterable","_alwaysShowContent","_firstShow","_longHide","appendTo","querySelector","_container","onmouseenter","_hideTimeout","_inContent","onmouseleave","hideLater","_hideDelay","_moveIfResized","className","nearPointColor","_longHideTimeout","styleCoord","setContent","childNodes","arrowEl","setEnterable","offsetWidth","style_1","transforms","ratioX","ratioY","visibility","willChange","isShow","TooltipRichContent","bounding","shadowOuterSize","calcShadowOuterSize","mathMaxWith0","proxyRect","TooltipView","_renderMode","_tooltipContent","_tooltipModel","_ecModel","tooltipContent","_initGlobalListener","_keepShow","_tryShow","_hide","_lastX","_lastY","_refreshUpdateTimeout","manuallyShowTip","_lastDataByCoordSys","_ticket","cmptRef","findComponentReference","positionDefault","_manuallyAxisShowTip","pointInfo","manuallyHideTip","tooltipCascadedModel","buildTooltipModel","_showAxisTooltip","seriesDispatcher_1","cmptDispatcher_1","_showSeriesItemTooltip","_showComponentItemTooltip","_showOrMove","_showTimout","singleTooltipModel","cbParamsList","articleMarkup","markupTextArrLegacy","itemCoordSys","axisItem","axisValue","axisValueLabel","axisSectionMarkup","cbParams","seriesTooltipResult","positionExpr","builtMarkupText","blockBreak","allMarkupText","_updateContentNotChangedOnAxis","_updatePosition","_showTooltipContent","tooltipTrigger","asyncTicket","tooltipModelCascade","subTooltipModel","defaultHtml","nearPoint","_getNearestPoint","params0","isTimeAxis","cbTicket","tooltipDataParams","contentSize","vAlign","viewSize","boxLayoutPosition","calcTooltipPosition","refixTooltipPosition","isCenterAlign","confineTooltipPosition","lastCoordSys","lastCbParamsList","_cbParamsList","contentNotChanged","lastItemCoordSys","indexCoordSys","lastDataByAxis","thisItemCoordSys","thisDataByAxis","lastItem","indexAxis","lastIndices","lastIdxItem","newIdxItem","lastCbParams","modelCascade","defaultTooltipOption","resultModel","gapH","gapV","domWidth","domHeight","rectWidth","rectHeight","subEl","getDefaultSelectorOptions","LegendModel","_updateSelector","_updateData","legendData","hasSelected","potentialData","availableNames","isPotential","legendVisualProvider","getAllNames","_availableNames","legendNameMap","unSelect","toggleSelected","allSelect","inverseSelect","getOrient","inactiveColor","inactiveBorderColor","inactiveBorderWidth","borderCap","borderJoin","borderMiterLimit","inactiveWidth","cap","dashOffset","selectorLabel","selectorPosition","selectorItemGap","selectorButtonGap","boxLayoutParams","viewportSize","makeBackground","curry","LegendView","newlineDisabled","_contentGroup","_selectorGroup","_isFirstRender","getContentGroup","getSelectorGroup","legendModel","isFirstRender","resetInner","itemAlign","renderInner","mainRect","layoutInner","_backgroundEl","contentGroup","legendDrawnMap","selectMode","legendItemModel","lineVisualStyle","itemGroup","_createItem","dispatchSelectAction","dispatchHighlightAction","dispatchDownplayAction","containName","_createSelector","selectorGroup","selectorItem","labelText","onclick","emphasisLabelModel","itemVisualStyle","drawType","legendIconType","getLegendStyle","getDefaultLegendIcon","hitRect","__legendDataIndex","contentRect","contentPos","selectorRect","selectorPos","orientIdx","hw","yx","iconType","handleCommonProps","visualStyle","propVal","itemStyleModel","iconBrushType","decalStyle","legendLineModel","visualHasBorder","symboType","dataName","isUseHoverLayer","legendFilter","legendModels","legendSelectActionHandler","isToggleSelect","isItemSelected","installLegendAction","ScrollableLegendModel","setScrollDataIndex","scrollDataIndex","mergeAndNormalizeLayoutParams","pageButtonItemGap","pageButtonGap","pageButtonPosition","pageFormatter","pageIcons","horizontal","vertical","pageIconColor","pageIconInactiveColor","pageIconSize","pageTextStyle","raw","WH","XY","ScrollableLegendView","_currentIndex","_containerGroup","_controllerGroup","__rectSize","controllerGroup","pageIconSizeArr","createPageButton","pageTextStyleModel","iconIdx","pageDataIndexName","_pageGo","processMaxSize","_layoutContentAndController","containerGroup","controllerRect","showController","_showController","containerPos","controllerPos","pageInfo","_getPageInfo","pageIndex","contentPosition","_updatePageInfoView","legendId","canJump","pageText","pageCount","containerRectSize","targetItemIndex","_findTargetItemIndex","targetItem","itemCount","pCount","pagePrevDataIndex","pageNextDataIndex","targetItemInfo","getItemInfo","winStartItemInfo","winEndItemInfo","currItemInfo","itemRect","itemInfo","winStart","targetDataIndex","defaultIndex","legendDataIdx","installScrollableLegendAction","GridModel","containLabel","AxisModelCommonMixin","getCoordSysModel","CartesianAxisModel","nameRotate","nameTruncate","nameTextStyle","onZeroAxisIndex","axisTick","alignWithLabel","primary","logBase","AXIS_TYPES","axisModelCreator","BaseAxisModelClass","extraDefaultOption","axisDefault","AxisModel","getAxisType","thisOption","__ordinalMeta","Cartesian","_dimList","addAxis","cartesian2DDimensions","canCalculateAffineTransform","Cartesian2D","calcAffineTransform","_transform","_invTransform","xAxisScale","yAxisScale","xScaleExtent","yScaleExtent","xScaleSpan","yScaleSpan","translateX","translateY","axisX","axisY","toLocalCoord","containZone","data1","data2","zoneDiag1","zoneDiag2","zone","xVal","yVal","xAxis","yAxis","clampData","xScale","yScale","xAxisExtent","yAxisExtent","coordToData","xExtent","yExtent","createAxisLabels","makeCategoryLabels","makeRealNumberLabels","createAxisTicks","makeCategoryTicks","makeCategoryLabelsActually","labelCategoryInterval","numericLabelInterval","labelsCache","getListCache","optionLabelInterval","listCacheGet","makeLabelsByCustomizedCategoryInterval","makeAutoCategoryInterval","makeLabelsByNumericCategoryInterval","listCacheSet","tickCategoryInterval","ticksCache","optionTickInterval","labelsResult","autoInterval","calculateCategoryInterval","fetchAutoCategoryIntervalCalculationParams","axisRotate","ordinalScale","ordinalExtent","unitSpan","unitW","unitH","maxW","maxH","dw","dh","lastAutoInterval","lastTickCount","axisExtent0","axisExtent1","getRotate","categoryInterval","onlyTick","showAllLabel","includeMinLabel","includeMaxLabel","addItem","tickObj","NORMALIZED_EXTENT","Axis","onBand","fixExtentWithBands","getTickModel","tickVal","fixOnBandTicksCoords","nTick","ticksLen","diffSize","crossLen","shift_1","ticksItem","littleThan","Axis2D","coordExtent","setCategorySortInfo","categorySortInfo","alignScaleTicks","alignToScale","intervalScaleProto","alignToTicks","alignToNicedTicks","alignToSplitNumber","alignToInterval","scaleExtent","isMinFixed","isMaxFixed","nicedSplitNumber","t0","Grid","_coordsMap","_coordsList","_axesMap","_axesList","_initCartesian","axesMap","updateAxisTicks","axesIndices","axisNeedsAlign","_updateScale","onZeroRecords","fixAxisOnZero","ignoreContainLabel","isContainLabel","gridRect","axesList","adjustAxes","updateAxisTransform","labelUnionRect","axesMapOnDim","xAxisIndex","yAxisIndex","coordList","getCartesians","_findConvertTarget","coordsList","axisPositionUsed","axesCount","createAxisCreator","isAxisUsedInTheGrid","isCategory","axesModelMap","otherAxis","grids","otherAxisDim","canOnZeroToAxis","getOnZeroRecordKey","coordBase","axisExtentSum","rectCoordAxisBuildSplitArea","axisView","axisGroup","splitAreaModel","areaColors","areaColorsLen","lastSplitAreaColors","splitAreaColors","newSplitAreaColors","colorIndex","cIndex","rectCoordAxisHandleRemove","axisBuilderAttrs","selfBuilderAttrs","CartesianAxisView","oldAxisGroup","_axisGroup","axisBuilder","elementType","cartesians","axisElementBuilders","isInitialSortFromBarRacing","isInitSort","splitLineModel","lineColors","minorSplitLineModel","CartesianXAxisView","CartesianYAxisView","GridView","extraOption","DATA_ZOOM_AXIS_DIMENSIONS","SERIES_COORDS","isCoordSupported","coordType","getAxisMainType","findEffectedDataZooms","foundNewLink","axisRecords","effectedModels","effectedModelMap","dataZoomModel","addToEffected","processSingle","isLinked","markAxisControlled","isLink","eachTargetAxis","axisIdxArr","collectReferCoordSysModelInfo","coordSysInfoWrap","infoList","infoMap","coordSysUid","axisModels","DataZoomAxisInfo","indexList","indexMap","axisCmptIdx","DataZoomModel","_autoThrottle","_noTarget","_rangePropMode","inputRawOption","retrieveRawOption","settledOption","_setDefaultThrottle","_updateRangeUse","_resetTarget","optionOrient","targetAxisIndexMap","_targetAxisInfoMap","hasAxisSpecified","_fillSpecifiedTargetAxis","_orient","_makeAutoOrientByTargetAxis","_fillAutoTargetAxisByOrient","refering","needAuto","setParallelAxis","gridModel_1","axModel","globalOption","rangePropMode","rangeModeInOption","percentSpecified","valueSpecified","noTarget","getFirstTargetAxisModel","firstAxisModel","getAxisProxy","getAxisModel","__dzAxisProxy","setRawRange","setCalculatedRange","getPercentRange","axisProxy","findRepresentativeAxisProxy","getDataPercentWindow","getValueRange","getDataValueWindow","firstProxy","axisDimList","hostedBy","getRangePropMode","filterMode","SelectDataZoomModel","DataZoomView","SelectDataZoomView","sliderMove","handleEnds","handleIndex","minSpan","maxSpan","restrict","handleSpan","originalDistSign","getSpanSign","currDistSign","extentMinSpan","realExtent","AxisProxy","_dimName","_axisIndex","_dataZoomModel","_valueWindow","_percentWindow","getTargetSeriesModels","axisMainType","getMinMaxSpan","_minMaxSpan","calculateDataWindow","hasPropModeValue","_dataExtent","percentExtent","percentWindow","valueWindow","boundPercent","boundValue","spans","restrictSet","fromWindow","toWindow","fromExtent","toExtent","toValue","suffix","targetSeries","calculateDataExtent","_updateMinMaxSpan","dataWindow","_setAxisModel","filterData","store_1","dataDimIndices_1","leftOut","rightOut","thisHasValue","thisLeftOut","thisRightOut","isInWindow","minMaxSpan","percentSpan","valueSpan","dataZoomProcessor","eachAxisModel","proxyList","seriesModelMap","percentRange","valueRange","installDataZoomAction","installed","installCommon","SelectZoomModel","SelectZoomView","ToolboxFeature","registerFeature","getFeature","ToolboxModel","featureName","Feature","itemSize","showTitle","ToolboxView","toolboxModel","isVertical","featureOpts","features","_features","featureNames","_featureNames","processFeature","titleText","__title","emphasisTextConfig","emphasisTextState","emphasisTextStyle","needPutOnTop","topOffset","newIndex","oldIndex","featureModel","newTitle","isUserFeatureName","isToolboxFeature","unusable","createIconPaths","setIconStatus","iconName","iconPaths","iconStatus","iconsMap","titlesMap","iconStyleModel","iconStyleEmphasisModel","icons","getIcons","titles","pathEmphasisState","hoverStyle","defaultTextPosition","SaveAsImage","MouseEvent","newEdge","ie","edge","$a","download","evt","bubbles","cancelable","dispatchEvent","msSaveOrOpenBlob","base64Encoded","bstr","decodeURIComponent","atob","filename","u8arr","Uint8Array","blob","Blob","cw","contentWindow","doc","write","close","execCommand","tab","INNER_STACK_KEYWORD","radioTypes","MagicType","availableIcons","seriesOptGenreator","generateNewSeriesTypes","newSeriesOpt","radio","currentType","isStack","BLOCK_SPLITER","ITEM_SPLITER","groupSeries","seriesGroupByCategoryAxis","otherSeries","meta","assembleSeriesWithCategoryAxis","groups","tables","headers","columns","assembleOtherSeries","getContentFromModel","isTSVFormat","firstLine","itemSplitRegex","RegExp","parseTSVContents","tsv","tsvLines","parseListContents","hasName","parseContents","blockMetaList","blockMeta","DataView","viewMain","textarea","optionToContent","contentToOption","htmlOrDom","readOnly","buttonContainer","buttonStyle","closeButton","refreshButton","clientHeight","textareaColor","textareaBorderColor","buttonColor","buttonTextColor","tryMergeDataOption","originalData","newValIsObject","shouldDeleteName","newSeriesOptList","newSnapshot","storedSnapshots","getStoreSnapshots","dataZoomId","snapshot","snapshots","RestoreOption","Restore","ATTR","take","resourceKey","userKey","release","uKey","isTaken","BRUSH_PANEL_GLOBAL","COVER_Z","UNSELECT_THRESHOLD","MIN_RESIZE_LINE_WIDTH","MUTEX_RESOURCE_KEY","DIRECTION_MAP","CURSOR_MAP","ne","sw","nw","se","DEFAULT_BRUSH_OPT","transformable","brushMode","removeOnClick","baseUID","BrushController","_covers","_handlers","_uid","pointerHandlers","enableBrush","brushOption","_brushType","_doDisableBrush","brushType","_doEnableBrush","_enableGlobalPan","_brushOption","setPanels","panelOpts","panels_1","_panels","panelId","enableGlobalPan","thisGroup","updateCovers","coverConfigList","coverConfig","tmpIdPrefix","oldCovers","newCovers","controller","creatingCover","_creatingCover","oldGetKey","getKey","addOrUpdate","cover","__brushOption","newBrushInternal","endCreating","createCover","updateCoverAfterCreation","unmount","clearCovers","coverRenderers","coverRenderer","getCoverRenderer","updateCoverShape","updateCommon","getPanelByPoint","localCursorPoint","panel","panels","pn","isTargetByCursor","getPanelByCover","covers","originalLength","areas","isEnd","shouldShowCover","getTrackEnds","createBaseRectCover","rectRangeConverter","edgeNameSequences","makeStyle","driftRect","nameSequence","updateBaseRect","localRange","xa","ya","x2a","y2a","widtha","heighta","updateRectShape","mainEl","globalDir","getGlobalDirection1","getGlobalDirection2","pointsToRect","clipByPanel","formatRectRange","localDirName","inverseMap","localDirNameSeq","dirNameSequence","rectRange","toRectRange","localDelta","toLocalDelta","dirName","ind","fromRectRange","driftPolygon","localD","localZero","xmin","ymin","xmax","ymax","resetCursor","isOutsideZrArea","currPanel","rawE","mainShapeContain","updateCoverByMouse","eventParams","_creatingPanel","thisBrushOption","determineBrushType","coverBrushOption","getCreatingRange","defaultBrushType","handleDragEnd","getLineRenderer","returnInput","localTrack","ends","xyIndex","getLinearBrushOtherExtent","IRRELEVANT_EXCLUDES","onIrrelevantElement","targetCoordSysModel","makeRectPanelClipPath","normalizeRect","localPoints","makeLinearBrushOtherExtent","specifiedXYIndex","brushWidth","makeRectIsTargetByCursor","targetModel","INCLUDE_FINDER_MAIN_TYPES","BrushTargetManager","_targetInfoList","foundCpts","targetInfoBuilders","include","setOutputRanges","matchOutputRanges","coordRange","coordRanges","coordConvert","__rangeOffset","diffProcessor","xyMinMax","findTargetInfo","coordSyses","setInputRanges","rangeOffset","getScales","makePanelOpts","getDefaultBrushType","getPanelRect","controlSeries","targetInfoList","areaPanelId","targetInfoMatchers","formatMinMax","xAxisModels","yAxisModels","gridModels","gridModelMap","xAxesHas","yAxesHas","panelRectBuilders","xAxisDeclared","yAxisDeclared","geoModels","geoModel","axisConvert","rangeOrCoordRange","xminymin","xmaxymax","axisNameIndex","axisDiffProcessor","refer","scales","xyMinMaxCurr","xyMinMaxOrigin","sizeCurr","sizeOrigin","DATA_ZOOM_ID_BASE","DataZoomFeature","_brushController","_onBrush","updateZoomBtnStatus","updateBackBtnStatus","handlers","eventParam","brushTargetManager","makeAxisFinder","setBatch","_dispatchZoomAction","findDataZoom","minValueSpan","maxValueSpan","dzModel","nextActive","_isZoomActive","dataZoomSelectActive","dzFeatureModel","xAxisId","yAxisId","zoomActive","featureDataZoomPath","dzOptions","finderResult","buildInternalOptions","axisIndexPropName","newOpt","$fromToolbox","DataZoom","InsideZoomModel","zoomLock","zoomOnMouseWheel","moveOnMouseMove","moveOnMouseWheel","preventDefaultMouseMove","RoamController","mousedownHandler","_mousedownHandler","mousemoveHandler","_mousemoveHandler","mouseupHandler","_mouseupHandler","mousewheelHandler","_mousewheelHandler","pinchHandler","_pinchHandler","controlType","_opt","isDragging","isPinching","_pinching","setPointerChecker","pointerChecker","isAvailableBehavior","oldX","oldY","newX","newY","shouldZoom","shouldMove","absWheelDeltaDelta","factor","checkPointerAndTrigger","absDelta","scrollDelta","behaviorToCheck","contollerEvent","setViewInfoToCoordSysRecord","getRange","coordSysRecordMap","coordSysRecord","dzInfo","dataZoomInfoMap","disposeCoordSysRecordIfNeeded","coordSysKeyArr","dzUid","removeKey","disposeCoordSysRecord","createCoordSysRecord","containsPoint","dzReferCoordSysInfo","mergeControllerParams","typePriority","dataZoomInfo","oneType","installDataZoomRoamProcessor","apiInner","dzReferCoordSysWrap","dzCoordSysInfo","firstDzInfo","firstDzKey","controllerParams","InsideZoomView","_clear","pan","getRangeHandlers","scrollMove","lastRange","directionInfo","getDirectionInfo","percentPoint","signal","pixelStart","pixelLength","pixel","makeMover","getPercentDelta","percentDelta","oldPoint","newPoint","radiusExtent","getRadiusAxis","angleExtent","getAngleAxis","SliderZoomModel","handleIcon","moveHandleSize","moveHandleIcon","showDetail","showDataShadow","realtime","brushSelect","DEFAULT_LOCATION_EDGE_GAP","DEFAULT_FRAME_BORDER_WIDTH","DEFAULT_FILLER_SIZE","DEFAULT_MOVE_HANDLE_SIZE","HORIZONTAL","VERTICAL","LABEL_GAP","SHOW_DATA_SHADOW_SERIES_TYPE","REALTIME_ANIMATION_CONFIG","SliderZoomView","_onBrushEnd","_buildView","_updateView","_brushing","brushRect","_resetLocation","_resetInterval","barGroup","sliderGroup","_renderDataShadow","_positionGroup","showMoveHandle","coordRect","_findCoordRect","ecSize","layoutParams","_location","_size","targetAxisModel","otherAxisInverse","_dataShadowInfo","_getViewExtent","clickPanel","_onClickPanel","_onBrushStart","_prepareDataShadowInfo","dataShadowSegs","oldSize","_shadowSize","candlestickDim","getShadowDim","polygonPts","_shadowPolygonPts","polylinePts","_shadowPolylinePts","_shadowData","_shadowDim","otherDataExtent_1","otherOffset","lastIsEmpty_1","otherShadowExtent_1","thisShadowExtent","areaPoints_1","linePoints_1","step_1","thisCoord_1","stride_1","otherCoord","createDataShadowGroup","isSelectedArea","thisAxis","getOtherDim","thisDim","handles","handleLabels","filler","_onDragMove","_onDragEnd","onmouseover","_showDataInfo","onmouseout","bRect","_handleHeight","_handleWidth","handleColor","actualMoveZone","moveHandleHeight","moveHandle_1","moveHandle","iconSize","moveZoneExpandSize","moveZone","ondragstart","_range","viewExtent","_handleEnds","_updateInterval","viewExtend","nonRealtime","displaybles","handleInterval","handleHeight","segIntervals","segGroup","_updateDataInfo","dataInterval","_formatLabel","orderedHandleEnds","setLabel","barTransform","textPoint","labelPrecision","valueStr","showOrHide","changed","localPoint","_brushStart","_brushStartTime","brushShape","brushEndTime","_updateBrushRect","mouseX","mouseY","brushStart","endPoint","startPoint","coordSysInfoList","Vue2","raf","caf","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","createStyles","styleText","styleSheet","createTextNode","tagName","elem","forEach","pseudo","computedStyle","getRenderInfo","contains","detached","rendered","css_248z","addListener","__resize_mutation_handler__","handleMutation","listeners","__resize_listeners__","ResizeObserver","ro","__resize_observer_triggered__","runCallbacks","__resize_observer__","observe","attachEvent","__resize_legacy_resize_handler__","initTriggers","__resize_rendered__","MutationObserver","mo","attributes","childList","characterData","subtree","__resize_mutation_observer__","removeListener","detachEvent","unobserve","disconnect","handleScroll","__resize_triggers__","triggers","getUpdatedSize","__resize_last__","resetTriggers","this$1","__resize_raf__","updated","__resize_old_position__","expand","expandChild","contract","csw","scrollWidth","csh","eow","eoh","esw","esh","scrollLeft","O","assign","SuppressedError","autoresize","loadingOptions","prepend","singleTag","getElementsByTagName","insertAdjacentElement","HTMLElement","customElements","ignoredElements","D","U","initOptions","updateOptions","manualUpdate","emits","inheritAttrs","setup","E","P","F","N","I","W","__once__","$","deep","immediate","G","__dispose","nonEventAttrs","CanvasRenderer","TitleComponent","TooltipComponent","LegendComponent","LineChart","GridComponent","ToolboxComponent","DataZoomComponent","Sale","sales","debounceGetSales","getSales","debounceGetProducts","getProducts","orders","revenue","baseSeries","salesDates","gridIndex","salesOrders","salesRevenue","onSearchUpdate","updateProductFilter","productId","response","getShopProducts","$route","getShopSales","Watch","VChart","RADIAN","getViewRect","getBasicPieLayout","viewRect","pieLayout","padAngle","minAngle","minAndPadAngle","validDataCount","unitRadian","roseType","stillShowZeroSum","halfPadAngle","angleRange","restAngle","valueSumLargerThanMinAngle","currentAngle","actualStartAngle","actualEndAngle","angle_1","layout_1","layout_2","dataFilter","projectPointToLine","limitToEnds","lineLen","projectedLen","pt0","dir2","tmpProjPoint","limitTurnAngle","linePoints","minTurnAngle","angleCos","minTurnAngleCos","limitSurfaceAngle","surfaceNormal","maxSurfaceAngle","maxSurfaceAngleCos","HALF_PI","angle2","newAngle","setLabelLineState","isNormal","styleObj","buildLabelLinePath","moveLen","midPoint0","midPoint2","midPoint1","setLabelLineStyle","labelIgnoreNormal","isLabelIgnored","labelLineConfig","getLabelLineStatesModels","labelLineName","adjustSingleSide","viewLeft","viewTop","farthestX","labelAlignTo","recalculateX","recalculateXOnSemiToAlignOnEllipseCurve","semi","rB","rB2","rA","rA2","newTargetWidth","targetTextWidth","constrainTextWidth","topSemi","bottomSemi","avoidOverlap","labelLayoutList","leftList","rightList","leftmostX","rightmostX","isPositionCenter","labelStyleWidth","bleedMargin","isAlignToEdge","extraPaddingH","realTextWidth","availableWidth","forceRecalculate","oldOuterWidth","oldHeight","innerRect","availableInnerWidth","newWidth","unconstrainedWidth","newRect","sectorShape","pieLabelLayout","hasLabelRotate","minShowLabelRadian","setNotShow","isLabelShown","sector","labelLineModel","labelLineLen","labelLineLen2","midAngle","isLabelInside","radialAngle","isDown","notShowLabel","anchor","getSectorCornerRadius","zeroIfNull","dr","PiePiece","firstCreate","_updateLabel","visualOpacity","PieView","ignoreLabelLineUpdate","_emptyCircleSector","piePiece","itemLayout","createSeriesDataSimply","LegendVisualProvider","getDataWithEncodedVisual","_getDataWithEncodedVisual","_getRawData","dataWithEncodedVisual","innerData","PieSeriesModel","_defaultLabelLine","dataInner","valueList_1","labelLineNormalOpt","labelLineEmphasisOpt","minShowLabelAngle","selectedOffset","percentPrecision","distanceToLabelLine","showEmptyCircle","emptyCircleStyle","avoidLabelOverlap","animationTypeUpdate","PieSeries","negativeDataFilter","curValue","PieChart","Shop","totalPages","page","itemsPerPage","generalHeaders","scrapingHeaders","hr","per","salesByCountry","sbc","countryCode","getShop","ContactsTable","Browser","Env","detect","ua","SVGRect","WebKitCSSMatrix","wx","getSystemInfoSync","userAgent","kCSSColorTable","clampCssByte","clampCssFloat","parseCssInt","parseCssFloat","cssHueToRgb","lerpNumber","setRgba","copyRgba","colorCache","lastRemovedArr","putToCache","rgbaArr","cached","strLen","ep","fname","hsla2rgba","iv","hsla","lift","stringify","normalizedValue","colors","fullOutput","leftColor","rightColor","dv","arrColor","lum","backgroundLum","liftedColorCache","liftColor","liftedColor","BUILTIN_OBJECT","TYPED_ARRAY","objToString","arrayProto","nativeForEach","nativeFilter","nativeSlice","nativeMap","ctorFunction","protoFunction","protoKey","idStart","guid","logError","typeStr","isPrimitive","isDom","targetProp","sourceProp","isBuiltInObject","overlay","inherits","baseClazz","clazzPrototype","mixin","override","getOwnPropertyNames","keyList","isArrayLike","memo","bindPolyfill","isFunction","isString","isStringSafe","isNumber","isTypedArray","ownerDocument","isGradientObject","isImagePatternObject","eqNaN","retrieve","retrieve2","value1","retrieve3","value2","assert","message","primitiveKey","setAsPrimitive","MapPolyfill","existed","isNativeMapSupported","Map","maybeNativeMap","HashMap","thisMap","visit","createHashMap","concatArray","newArray","createObject","StyleCtor","disableUserSelect","webkitUserSelect","userSelect","webkitTapHighlightColor","hasOwn","own","noop","RADIAN_TO_DEGREE","DEFAULT_FONT_SIZE","DEFAULT_FONT_FAMILY","DEFAULT_FONT","OFFSET","SCALE","defaultWidthMapStr","getTextWidthMap","mapStr","JSON","char","fromCharCode","DEFAULT_TEXT_WIDTH_MAP","platformApi","_cachedFont","preCalcWidth","Image","setPlatformAPI","newPlatformApis","isLinearGradient","isRadialGradient","btoa","Entry","LinkedList","insert","entry","insertEntry","_list","_maxSize","removed","_lastRemovedEntry","leastUsedEntry"],"mappings":"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","file":"js/shop.9e194cb3.js","sourcesContent":["import './VPagination.sass'\n\nimport VIcon from '../VIcon'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Intersectable from '../../mixins/intersectable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, CreateElement, VNodeChildrenArrayContents } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Intersectable({ onVisible: ['init'] }),\n Themeable\n).extend({\n name: 'v-pagination',\n\n directives: { Resize },\n\n props: {\n circle: Boolean,\n disabled: Boolean,\n length: {\n type: Number,\n default: 0,\n validator: (val: number) => val % 1 === 0,\n },\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n totalVisible: [Number, String],\n value: {\n type: Number,\n default: 0,\n },\n pageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.page',\n },\n currentPageAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.currentPage',\n },\n previousAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.previous',\n },\n nextAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.next',\n },\n wrapperAriaLabel: {\n type: String,\n default: '$vuetify.pagination.ariaLabel.wrapper',\n },\n },\n\n data () {\n return {\n maxButtons: 0,\n selected: null as number | null,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-pagination': true,\n 'v-pagination--circle': this.circle,\n 'v-pagination--disabled': this.disabled,\n ...this.themeClasses,\n }\n },\n\n items (): (string | number)[] {\n const totalVisible = parseInt(this.totalVisible, 10)\n\n if (totalVisible === 0) {\n return []\n }\n\n const maxLength = Math.min(\n Math.max(0, totalVisible) || this.length,\n Math.max(0, this.maxButtons) || this.length,\n this.length\n )\n\n if (this.length <= maxLength) {\n return this.range(1, this.length)\n }\n\n const even = maxLength % 2 === 0 ? 1 : 0\n const left = Math.floor(maxLength / 2)\n const right = this.length - left + 1 + even\n\n if (this.value > left && this.value < right) {\n const start = this.value - left + 2\n const end = this.value + left - 2 - even\n\n return [1, '...', ...this.range(start, end), '...', this.length]\n } else if (this.value === left) {\n const end = this.value + left - 1 - even\n return [...this.range(1, end), '...', this.length]\n } else if (this.value === right) {\n const start = this.value - left + 1\n return [1, '...', ...this.range(start, this.length)]\n } else {\n return [\n ...this.range(1, left),\n '...',\n ...this.range(right, this.length),\n ]\n }\n },\n },\n\n watch: {\n value () {\n this.init()\n },\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init () {\n this.selected = null\n\n this.$nextTick(this.onResize)\n // TODO: Change this (f75dee3a, cbdf7caa)\n setTimeout(() => (this.selected = this.value), 100)\n },\n onResize () {\n const width = this.$el && this.$el.parentElement\n ? this.$el.parentElement.clientWidth\n : window.innerWidth\n\n this.maxButtons = Math.floor((width - 96) / 42)\n },\n next (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value + 1)\n this.$emit('next')\n },\n previous (e: Event) {\n e.preventDefault()\n this.$emit('input', this.value - 1)\n this.$emit('previous')\n },\n range (from: number, to: number) {\n const range = []\n\n from = from > 0 ? from : 1\n\n for (let i = from; i <= to; i++) {\n range.push(i)\n }\n\n return range\n },\n genIcon (h: CreateElement, icon: string, disabled: boolean, fn: EventListener, label: String): VNode {\n return h('li', [\n h('button', {\n staticClass: 'v-pagination__navigation',\n class: {\n 'v-pagination__navigation--disabled': disabled,\n },\n attrs: {\n disabled,\n type: 'button',\n 'aria-label': label,\n },\n on: disabled ? {} : { click: fn },\n }, [h(VIcon, [icon])]),\n ])\n },\n genItem (h: CreateElement, i: string | number): VNode {\n const color: string | false = (i === this.value) && (this.color || 'primary')\n const isCurrentPage = i === this.value\n const ariaLabel = isCurrentPage ? this.currentPageAriaLabel : this.pageAriaLabel\n\n return h('button', this.setBackgroundColor(color, {\n staticClass: 'v-pagination__item',\n class: {\n 'v-pagination__item--active': i === this.value,\n },\n attrs: {\n type: 'button',\n 'aria-current': isCurrentPage,\n 'aria-label': this.$vuetify.lang.t(ariaLabel, i),\n },\n on: {\n click: () => this.$emit('input', i),\n },\n }), [i.toString()])\n },\n genItems (h: CreateElement): VNode[] {\n return this.items.map((i, index) => {\n return h('li', { key: index }, [\n isNaN(Number(i)) ? h('span', { class: 'v-pagination__more' }, [i.toString()]) : this.genItem(h, i),\n ])\n })\n },\n genList (h: CreateElement, children: VNodeChildrenArrayContents): VNode {\n return h('ul', {\n directives: [{\n modifiers: { quiet: true },\n name: 'resize',\n value: this.onResize,\n }],\n class: this.classes,\n }, children)\n },\n },\n\n render (h): VNode {\n const children = [\n this.genIcon(h,\n this.$vuetify.rtl ? this.nextIcon : this.prevIcon,\n this.value <= 1,\n this.previous,\n this.$vuetify.lang.t(this.previousAriaLabel)),\n this.genItems(h),\n this.genIcon(h,\n this.$vuetify.rtl ? this.prevIcon : this.nextIcon,\n this.value >= this.length,\n this.next,\n this.$vuetify.lang.t(this.nextAriaLabel)),\n ]\n\n return h('nav', {\n attrs: {\n role: 'navigation',\n 'aria-label': this.$vuetify.lang.t(this.wrapperAriaLabel),\n },\n }, [this.genList(h, children)])\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return (_vm.shop)?_c('div',{staticClass:\"shop-info\"},[_c('h2',{staticClass:\"company\"},[_c('a',{attrs:{\"href\":_vm.shop.domain,\"_target\":\"blank\"}},[_vm._v(_vm._s(_vm.shop.domain))])]),_c('v-divider',{staticStyle:{\"margin-top\":\"30px\"}}),(_vm.shop.authenticated)?_c('v-row',{staticClass:\"mt-2\"},[_c('v-col',{attrs:{\"md\":\"4\"}},[(_vm.shop.customer)?_c('v-card',[_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.shop.customer.firstName)+\" \"+_vm._s(_vm.shop.customer.lastName)+\" \")]),_c('v-card-subtitle',[_vm._v(\" \"+_vm._s(_vm.shop.customer.email)+\" \")])],1):_vm._e(),_c('v-card',{staticClass:\"mt-2\"},[_c('v-chart',{staticClass:\"chart\",attrs:{\"option\":_vm.chartOptions}})],1),_c('v-card',{staticClass:\"mt-2\"},[_c('v-card-title',[_vm._v(\"Total Orders: \"+_vm._s(_vm.shop.orders || 0)+\" \")])],1),_c('v-card',{staticClass:\"mt-2\"},[_c('v-card-title',[_vm._v(\"Total Revenue: $\"+_vm._s((_vm.shop.salesRevenue || 0).toFixed(2))+\" \")])],1)],1),_c('v-col',{attrs:{\"md\":\"8\"}},[_c('Sale',{attrs:{\"shopId\":_vm.shop._id}})],1)],1):_vm._e(),_c('v-divider',{staticStyle:{\"margin-top\":\"30px\"}}),_c('div',{staticClass:\"mb-2\"},[_c('h3',[_vm._v(\"Scraping Info\")]),(!_vm.shop.authenticated)?_c('v-data-table',{staticClass:\"elevation-1\",attrs:{\"headers\":_vm.scrapingHeaders,\"items\":_vm.shop.scraping.sessions,\"items-per-page\":5}}):_vm._e()],1),_c('div',{staticClass:\"mb-2\"},[_c('v-row',{staticClass:\"mb-2\"},_vm._l((_vm.products),function(p){return _c('v-col',{key:p.id,staticClass:\"d-flex\",attrs:{\"md\":\"3\"}},[_c('Product',{staticClass:\"flex-grow-1\",attrs:{\"product\":p,\"authenticated\":_vm.shop.authenticated},on:{\"refresh-list\":_vm.getProducts}})],1)}),1),(_vm.loading)?_c('v-progress-linear',{attrs:{\"indeterminate\":\"\",\"color\":\"yellow darken-2\"}}):_vm._e(),(_vm.productParams.totalPages)?_c('v-pagination',{attrs:{\"length\":_vm.productParams.totalPages,\"total-visible\":7},on:{\"input\":_vm.getProducts},model:{value:(_vm.productParams.page),callback:function ($$v) {_vm.$set(_vm.productParams, \"page\", $$v)},expression:\"productParams.page\"}}):_vm._e()],1),_c('div',{staticClass:\"staff-info\"},[_c('h5',[_vm._v(\"Contacts\")]),_c('ContactsTable',{attrs:{\"contacts\":_vm.shop.contacts || []}})],1)],1):_vm._e()\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('v-card',{staticClass:\"mx-auto\",attrs:{\"color\":_vm.isYakkyoProduct ? 'orange' : 'white'}},[_c('v-img',{attrs:{\"src\":_vm.product.images[0],\"height\":\"200px\"}}),_c('v-card-title',[_vm._v(\" \"+_vm._s(_vm.product.title)+\" \")]),_c('v-card-subtitle',[_vm._v(\" Score: \"+_vm._s(_vm.product.score)+\" \"),_c('span',{staticClass:\"pl-2 pr-2\"},[_vm._v(\"-\")]),_vm._v(\" Price: \"+_vm._s(_vm.price)+\" $ \"),_c('span',{staticClass:\"pl-2 pr-2\"},[_vm._v(\"-\")]),_vm._v(\" Variants: \"+_vm._s(_vm.product.variants.length)+\" \"),_c('br'),(_vm.authenticated)?_c('span',[_vm._v(\"Orders: \"+_vm._s(_vm.product.orderCount || 0))]):_vm._e(),(_vm.authenticated)?_c('span',{staticClass:\"pl-2 pr-2\"},[_vm._v(\"-\")]):_vm._e(),(_vm.authenticated)?_c('span',[_vm._v(\"Revenue: \"+_vm._s((_vm.product.salesRevenue || 0).toFixed(2))+\" $\")]):_vm._e(),(_vm.loading)?_c('v-progress-linear',{attrs:{\"indeterminate\":\"\",\"color\":\"yellow darken-2\"}}):_vm._e()],1),_c('v-card-actions',[_c('v-btn',{attrs:{\"color\":\"lighten-2\",\"text\":\"\"},on:{\"click\":_vm.startImageSearch}},[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\" \"+_vm._s(!_vm.product.imageSearch ? 'mdi-image-search-outline' : 'mdi-open-in-new')+\" \")]),_vm._v(\" Image Search \")],1),_c('v-spacer'),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.show = !_vm.show}}},[_c('v-icon',[_vm._v(_vm._s(_vm.show ? 'mdi-chevron-up' : 'mdi-chevron-down'))])],1)],1),_c('v-expand-transition',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}]},[_c('v-divider'),_c('v-list',{attrs:{\"two-line\":\"\"}},_vm._l((_vm.product.variants),function(variant){return _c('Variant',{key:variant.externalId,attrs:{\"variant\":variant,\"authenticated\":_vm.authenticated}})}),1)],1)]),_c('v-snackbar',{attrs:{\"color\":_vm.snackbarColor},scopedSlots:_vm._u([{key:\"action\",fn:function({ attrs }){return [_c('v-btn',_vm._b({attrs:{\"color\":\"white\",\"text\":\"\"},on:{\"click\":function($event){_vm.snackbar = false}}},'v-btn',attrs,false),[_vm._v(\" Close \")])]}}]),model:{value:(_vm.snackbar),callback:function ($$v) {_vm.snackbar=$$v},expression:\"snackbar\"}},[_vm._v(\" \"+_vm._s(_vm.snackbarText)+\" \")])],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('v-list-item',[_c('v-list-item-avatar',[_c('v-img',{attrs:{\"alt\":`${_vm.variant.title}`,\"src\":_vm.variant.image}})],1),_c('v-list-item-content',[_c('v-list-item-title',{domProps:{\"textContent\":_vm._s(_vm.variant.title)}}),_c('v-list-item-subtitle',{domProps:{\"textContent\":_vm._s(_vm.authenticated ? `SKU ${_vm.variant.sku}` : `${_vm.variant.updatesCount} updates | SKU ${_vm.variant.sku}`)}})],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nimport { Component, Vue, Prop } from 'vue-property-decorator'\n\n@Component\nexport default class Variant extends Vue {\n @Prop({ required: true }) variant!: yakkyo.IShopMonitorVariant\n @Prop({ default: false }) authenticated!: boolean\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Variant.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Variant.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./Variant.vue?vue&type=template&id=15d0a840&scoped=true\"\nimport script from \"./Variant.vue?vue&type=script&lang=ts\"\nexport * from \"./Variant.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"15d0a840\",\n null\n \n)\n\nexport default component.exports","\nimport { Component, Vue, Prop } from 'vue-property-decorator'\nimport Variant from './Variant.vue'\n\n@Component({ components: { Variant } })\nexport default class Product extends Vue {\n @Prop({ required: true }) product!: yakkyo.IShopMonitorProduct\n @Prop({ default: false }) authenticated!: boolean\n\n show = false\n loading = false\n\n snackbarText = 'something'\n snackbarColor = 'green'\n snackbar = false\n\n get price() {\n const prices = this.product.variants.map(v => parseFloat(v.price))\n const max = Math.max(...prices)\n const min = Math.max(...prices)\n\n if (min === max) return max\n return `${min}-${max}`\n }\n\n get isYakkyoProduct() {\n const variantSkus = this.product.variants.map(v => v.sku)\n return variantSkus.some(sku => sku && sku.length > 13 && /^YK[0-9]+-[a-z0-9]/i.test(sku))\n }\n\n async linkImageSearch(search: yakkyo.IImageSearch) {\n try {\n await this.$store.state.apiClient.linkImageSearch(this.product._id, search._id)\n } catch (error) {\n console.log('Image search failed to link')\n }\n }\n\n async startImageSearch() {\n // i know, its horrible\n if (this.product.imageSearch)\n return (window.location.href = 'https://app.yakkyofy.com/quotations/image-search/' + this.product.externalId)\n\n this.loading = true\n try {\n const { data } = await this.$store.state.apiClient.startImageSearch({\n urls: this.product.images,\n title: this.product.title,\n sourceUrl: this.product.url,\n sourceId: this.product.externalId\n })\n\n if (!data.success) throw new Error(data.error || 'Eww, something went wrong!')\n\n this.snackbarText = '✔ Image search started successfully'\n this.snackbarColor = 'green'\n\n await this.linkImageSearch(data.search)\n this.$emit('refresh-list')\n } catch (err) {\n this.snackbarText = '✘ Image search failed to start'\n this.snackbarColor = 'red'\n }\n this.snackbar = true\n this.loading = false\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Product.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Product.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./Product.vue?vue&type=template&id=4cb86fe8&scoped=true\"\nimport script from \"./Product.vue?vue&type=script&lang=ts\"\nexport * from \"./Product.vue?vue&type=script&lang=ts\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4cb86fe8\",\n null\n \n)\n\nexport default component.exports","// Mixins\nimport Colorable from '../colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { kebabCase } from '../../util/helpers'\n\n// Types\nimport { VNodeChildren } from 'vue'\n\n/* @vue/component */\nexport default mixins(\n Colorable\n).extend({\n methods: {\n genPickerButton (\n prop: string,\n value: any,\n content: VNodeChildren,\n readonly = false,\n staticClass = ''\n ) {\n const active = (this as any)[prop] === value\n const click = (event: Event) => {\n event.stopPropagation()\n this.$emit(`update:${kebabCase(prop)}`, value)\n }\n\n return this.$createElement('div', {\n staticClass: `v-picker__title__btn ${staticClass}`.trim(),\n class: {\n 'v-picker__title__btn--active': active,\n 'v-picker__title__btn--readonly': readonly,\n },\n on: (active || readonly) ? undefined : { click },\n }, Array.isArray(content) ? content : [content])\n },\n },\n})\n","import './VDatePickerTitle.sass'\n\n// Components\nimport VIcon from '../VIcon'\n\n// Mixins\nimport PickerButton from '../../mixins/picker-button'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n PickerButton\n/* @vue/component */\n).extend({\n name: 'v-date-picker-title',\n\n props: {\n date: {\n type: String,\n default: '',\n },\n disabled: Boolean,\n readonly: Boolean,\n selectingYear: Boolean,\n value: {\n type: String,\n },\n year: {\n type: [Number, String],\n default: '',\n },\n yearIcon: {\n type: String,\n },\n },\n\n data: () => ({\n isReversing: false,\n }),\n\n computed: {\n computedTransition (): string {\n return this.isReversing ? 'picker-reverse-transition' : 'picker-transition'\n },\n },\n\n watch: {\n value (val: string, prev: string) {\n this.isReversing = val < prev\n },\n },\n\n methods: {\n genYearIcon (): VNode {\n return this.$createElement(VIcon, {\n props: {\n dark: true,\n },\n }, this.yearIcon)\n },\n getYearBtn (): VNode {\n return this.genPickerButton('selectingYear', true, [\n String(this.year),\n this.yearIcon ? this.genYearIcon() : null,\n ], false, 'v-date-picker-title__year')\n },\n genTitleText (): VNode {\n return this.$createElement('transition', {\n props: {\n name: this.computedTransition,\n },\n }, [\n this.$createElement('div', {\n domProps: { innerHTML: this.date || ' ' },\n key: this.value,\n }),\n ])\n },\n genTitleDate (): VNode {\n return this.genPickerButton('selectingYear', false, [this.genTitleText()], false, 'v-date-picker-title__date')\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-date-picker-title',\n class: {\n 'v-date-picker-title--disabled': this.disabled,\n },\n }, [\n this.getYearBtn(),\n this.genTitleDate(),\n ])\n },\n})\n","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'localable',\n\n props: {\n locale: String,\n },\n\n computed: {\n currentLocale (): string {\n return this.locale || this.$vuetify.lang.current\n },\n },\n})\n","const padStart = (string: number | string, targetLength: number, padString: string) => {\n targetLength = targetLength >> 0\n string = String(string)\n padString = String(padString)\n if (string.length > targetLength) {\n return String(string)\n }\n\n targetLength = targetLength - string.length\n if (targetLength > padString.length) {\n padString += padString.repeat(targetLength / padString.length)\n }\n return padString.slice(0, targetLength) + String(string)\n}\n\nexport default (n: string | number, length = 2) => padStart(n, length, '0')\n","import pad from './pad'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface SubstrOptions {\n start?: number\n length: number\n}\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions\n): DatePickerFormatter | undefined\n\nfunction createNativeLocaleFormatter (\n local: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions\n): DatePickerFormatter\n\nfunction createNativeLocaleFormatter (\n locale: string | undefined,\n options: Intl.DateTimeFormatOptions,\n substrOptions: SubstrOptions = { start: 0, length: 0 }\n): DatePickerFormatter | undefined {\n const makeIsoString = (dateString: string) => {\n const [year, month, date] = dateString.trim().split(' ')[0].split('-')\n return [pad(year, 4), pad(month || 1), pad(date || 1)].join('-')\n }\n\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, options)\n return (dateString: string) => intlFormatter.format(new Date(`${makeIsoString(dateString)}T00:00:00+00:00`))\n } catch (e) {\n return (substrOptions.start || substrOptions.length)\n ? (dateString: string) => makeIsoString(dateString).substr(substrOptions.start || 0, substrOptions.length)\n : undefined\n }\n}\n\nexport default createNativeLocaleFormatter\n","import pad from './pad'\n\n/**\n * @param {String} value YYYY-MM format\n * @param {Number} sign -1 or +1\n */\nexport default (value: string, sign: number) => {\n const [year, month] = value.split('-').map(Number)\n\n if (month + sign === 0) {\n return `${year - 1}-12`\n } else if (month + sign === 13) {\n return `${year + 1}-01`\n } else {\n return `${year}-${pad(month + sign)}`\n }\n}\n","import './VDatePickerHeader.sass'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport { createNativeLocaleFormatter, monthChange } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-header',\n\n props: {\n disabled: Boolean,\n format: Function as PropType,\n min: String,\n max: String,\n nextAriaLabel: String,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevAriaLabel: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n readonly: Boolean,\n value: {\n type: [Number, String],\n required: true,\n },\n },\n\n data () {\n return {\n isReversing: false,\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n if (this.format) {\n return this.format\n } else if (String(this.value).split('-')[1]) {\n return createNativeLocaleFormatter(this.currentLocale, { month: 'long', year: 'numeric', timeZone: 'UTC' }, { length: 7 })\n } else {\n return createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n }\n },\n },\n\n watch: {\n value (newVal, oldVal) {\n this.isReversing = newVal < oldVal\n },\n },\n\n methods: {\n genBtn (change: number) {\n const ariaLabelId = change > 0 ? this.nextAriaLabel : this.prevAriaLabel\n const ariaLabel = ariaLabelId ? this.$vuetify.lang.t(ariaLabelId) : undefined\n const disabled = this.disabled ||\n (change < 0 && this.min && this.calculateChange(change) < this.min) ||\n (change > 0 && this.max && this.calculateChange(change) > this.max)\n\n return this.$createElement(VBtn, {\n attrs: { 'aria-label': ariaLabel },\n props: {\n dark: this.dark,\n disabled,\n icon: true,\n light: this.light,\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n this.$emit('input', this.calculateChange(change))\n },\n },\n }, [\n this.$createElement(VIcon, ((change < 0) === !this.$vuetify.rtl) ? this.prevIcon : this.nextIcon),\n ])\n },\n calculateChange (sign: number) {\n const [year, month] = String(this.value).split('-').map(Number)\n\n if (month == null) {\n return `${year + sign}`\n } else {\n return monthChange(String(this.value), sign)\n }\n },\n genHeader () {\n const color = !this.disabled && (this.color || 'accent')\n const header = this.$createElement('div', this.setTextColor(color, {\n key: String(this.value),\n }), [this.$createElement('button', {\n attrs: {\n type: 'button',\n },\n on: {\n click: () => this.$emit('toggle'),\n },\n }, [this.$slots.default || this.formatter(String(this.value))])])\n\n const transition = this.$createElement('transition', {\n props: {\n name: (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition',\n },\n }, [header])\n\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header__value',\n class: {\n 'v-date-picker-header__value--disabled': this.disabled,\n },\n }, [transition])\n },\n },\n\n render (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-date-picker-header',\n class: {\n 'v-date-picker-header--disabled': this.disabled,\n ...this.themeClasses,\n },\n }, [\n this.genBtn(-1),\n this.genHeader(),\n this.genBtn(+1),\n ])\n },\n})\n","import Vue from 'vue'\n\nexport function createItemTypeNativeListeners (instance: Vue, itemTypeSuffix: string, value: any) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName.slice(0, -itemTypeSuffix.length)] = (event: Event) => instance.$emit(eventName, value, event)\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n\nexport function createItemTypeListeners (instance: Vue, itemTypeSuffix: string) {\n return Object.keys(instance.$listeners).reduce((on, eventName) => {\n if (eventName.endsWith(itemTypeSuffix)) {\n on[eventName] = instance.$listeners[eventName]\n }\n\n return on\n }, {} as typeof instance.$listeners)\n}\n","// Adds leading zero to month/day if necessary, returns 'YYYY' if type = 'year',\n// 'YYYY-MM' if 'month' and 'YYYY-MM-DD' if 'date'\nimport pad from './pad'\n\nexport default (dateString: string, type: 'date' | 'month' | 'year'): string => {\n const [year, month = 1, date = 1] = dateString.split('-')\n return `${year}-${pad(month)}-${pad(date)}`.substr(0, { date: 10, month: 7, year: 4 }[type])\n}\n","import { DatePickerAllowedDatesFunction } from 'vuetify/types'\n\nexport default function isDateAllowed (date: string, min: string, max: string, allowedFn: DatePickerAllowedDatesFunction | undefined) {\n return (!allowedFn || allowedFn(date)) &&\n (!min || date >= min.substr(0, 10)) &&\n (!max || date <= max)\n}\n","import '../VDatePickerTable.sass'\n\n// Directives\nimport Touch from '../../../directives/touch'\n\n// Mixins\nimport Colorable from '../../../mixins/colorable'\nimport Localable from '../../../mixins/localable'\nimport Themeable from '../../../mixins/themeable'\n\n// Utils\nimport { createItemTypeNativeListeners, sanitizeDateString } from '../util'\nimport isDateAllowed from '../util/isDateAllowed'\nimport { mergeListeners } from '../../../util/mergeData'\nimport mixins from '../../../util/mixins'\nimport { throttle } from '../../../util/helpers'\n\n// Types\nimport {\n PropType,\n VNodeChildren,\n} from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport {\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEventColorValue,\n DatePickerEvents,\n DatePickerFormatter,\n TouchWrapper,\n} from 'vuetify/types'\n\ntype CalculateTableDateFunction = (v: number) => string\n\nexport default mixins(\n Colorable,\n Localable,\n Themeable\n/* @vue/component */\n).extend({\n directives: { Touch },\n\n props: {\n allowedDates: Function as PropType,\n current: String,\n disabled: Boolean,\n format: Function as PropType,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n min: String,\n max: String,\n range: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n tableDate: {\n type: String,\n required: true,\n },\n value: [String, Array] as PropType,\n },\n\n data: () => ({\n isReversing: false,\n wheelThrottle: null as any,\n }),\n\n computed: {\n computedTransition (): string {\n return (this.isReversing === !this.$vuetify.rtl) ? 'tab-reverse-transition' : 'tab-transition'\n },\n displayedMonth (): number {\n return Number(this.tableDate.split('-')[1]) - 1\n },\n displayedYear (): number {\n return Number(this.tableDate.split('-')[0])\n },\n },\n\n watch: {\n tableDate (newVal: string, oldVal: string) {\n this.isReversing = newVal < oldVal\n },\n },\n\n mounted () {\n this.wheelThrottle = throttle(this.wheel, 250)\n },\n\n methods: {\n genButtonClasses (isAllowed: boolean, isFloating: boolean, isSelected: boolean, isCurrent: boolean) {\n return {\n 'v-size--default': !isFloating,\n 'v-date-picker-table__current': isCurrent,\n 'v-btn--active': isSelected,\n 'v-btn--flat': !isAllowed || this.disabled,\n 'v-btn--text': isSelected === isCurrent,\n 'v-btn--rounded': isFloating,\n 'v-btn--disabled': !isAllowed || this.disabled,\n 'v-btn--outlined': isCurrent && !isSelected,\n ...this.themeClasses,\n }\n },\n genButtonEvents (value: string, isAllowed: boolean, mouseEventType: string) {\n if (this.disabled) return undefined\n\n return mergeListeners({\n click: () => {\n if (isAllowed && !this.readonly) this.$emit('input', value)\n },\n }, createItemTypeNativeListeners(this, `:${mouseEventType}`, value))\n },\n genButton (value: string, isFloating: boolean, mouseEventType: string, formatter: DatePickerFormatter, isOtherMonth = false) {\n const isAllowed = isDateAllowed(value, this.min, this.max, this.allowedDates)\n const isSelected = this.isSelected(value) && isAllowed\n const isCurrent = value === this.current\n const setColor = isSelected ? this.setBackgroundColor : this.setTextColor\n const color = (isSelected || isCurrent) && (this.color || 'accent')\n\n return this.$createElement('button', setColor(color, {\n staticClass: 'v-btn',\n class: this.genButtonClasses(isAllowed && !isOtherMonth, isFloating, isSelected, isCurrent),\n attrs: {\n type: 'button',\n },\n domProps: {\n disabled: this.disabled || !isAllowed || isOtherMonth,\n },\n on: this.genButtonEvents(value, isAllowed, mouseEventType),\n }), [\n this.$createElement('div', {\n staticClass: 'v-btn__content',\n }, [formatter(value)]),\n this.genEvents(value),\n ])\n },\n getEventColors (date: string) {\n const arrayize = (v: string | string[]) => Array.isArray(v) ? v : [v]\n let eventData: boolean | DatePickerEventColorValue\n let eventColors: string[] = []\n\n if (Array.isArray(this.events)) {\n eventData = this.events.includes(date)\n } else if (this.events instanceof Function) {\n eventData = this.events(date) || false\n } else if (this.events) {\n eventData = this.events[date] || false\n } else {\n eventData = false\n }\n\n if (!eventData) {\n return []\n } else if (eventData !== true) {\n eventColors = arrayize(eventData)\n } else if (typeof this.eventColor === 'string') {\n eventColors = [this.eventColor]\n } else if (typeof this.eventColor === 'function') {\n eventColors = arrayize(this.eventColor(date))\n } else if (Array.isArray(this.eventColor)) {\n eventColors = this.eventColor\n } else {\n eventColors = arrayize(this.eventColor[date])\n }\n\n return eventColors.filter(v => v)\n },\n genEvents (date: string) {\n const eventColors = this.getEventColors(date)\n\n return eventColors.length ? this.$createElement('div', {\n staticClass: 'v-date-picker-table__events',\n }, eventColors.map(color => this.$createElement('div', this.setBackgroundColor(color)))) : null\n },\n isValidScroll (e: WheelEvent, calculateTableDate: CalculateTableDateFunction) {\n const tableDate = calculateTableDate(e.deltaY)\n // tableDate is 'YYYY-MM' for DateTable and 'YYYY' for MonthTable\n const sanitizeType = tableDate.split('-').length === 1 ? 'year' : 'month'\n return (e.deltaY === 0) ||\n (e.deltaY < 0 && (this.min ? tableDate >= sanitizeDateString(this.min, sanitizeType) : true)) ||\n (e.deltaY > 0 && (this.max ? tableDate <= sanitizeDateString(this.max, sanitizeType) : true))\n },\n wheel (e: WheelEvent, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(e.deltaY))\n },\n touch (value: number, calculateTableDate: CalculateTableDateFunction) {\n this.$emit('update:table-date', calculateTableDate(value))\n },\n genTable (staticClass: string, children: VNodeChildren, calculateTableDate: CalculateTableDateFunction) {\n const transition = this.$createElement('transition', {\n props: { name: this.computedTransition },\n }, [this.$createElement('table', { key: this.tableDate }, children)])\n\n const touchDirective = {\n name: 'touch',\n value: {\n left: (e: TouchWrapper) => (e.offsetX < -15) && this.touch(1, calculateTableDate),\n right: (e: TouchWrapper) => (e.offsetX > 15) && this.touch(-1, calculateTableDate),\n },\n }\n\n return this.$createElement('div', {\n staticClass,\n class: {\n 'v-date-picker-table--disabled': this.disabled,\n ...this.themeClasses,\n },\n on: (!this.disabled && this.scrollable) ? {\n wheel: (e: WheelEvent) => {\n e.preventDefault()\n if (this.isValidScroll(e, calculateTableDate)) { this.wheelThrottle(e, calculateTableDate) }\n },\n } : undefined,\n directives: [touchDirective],\n }, [transition])\n },\n isSelected (value: string): boolean {\n if (Array.isArray(this.value)) {\n if (this.range && this.value.length === 2) {\n const [from, to] = [...this.value].sort()\n return from <= value && value <= to\n } else {\n return this.value.indexOf(value) !== -1\n }\n }\n\n return value === this.value\n },\n },\n})\n","function createUTCDate (year: number, month = 0, day = 1) {\n let date\n if (year < 100 && year >= 0) {\n date = new Date(Date.UTC(year, month, day))\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(year)\n }\n } else {\n date = new Date(Date.UTC(year, month, day))\n }\n\n return date\n}\n\nfunction firstWeekOffset (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear\n const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7\n\n return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1\n}\n\nfunction dayOfYear (year: number, month: number, day: number, firstDayOfWeek: number) {\n let dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month]\n if (month > 1 && isLeapYear(year)) {\n dayOfYear++\n }\n\n return dayOfYear + day\n}\n\nfunction weeksInYear (year: number, firstDayOfWeek: number, firstDayOfYear: number) {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear)\n const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear)\n const daysInYear = isLeapYear(year) ? 366 : 365\n\n return (daysInYear - weekOffset + weekOffsetNext) / 7\n}\n\nexport function weekNumber (year: number, month: number, day: number, firstDayOfWeek: number, localeFirstDayOfYear: number): number {\n const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear)\n const week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7)\n\n if (week < 1) {\n return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear)\n } else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {\n return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)\n } else {\n return week\n }\n}\n\nexport function isLeapYear (year: number): boolean {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)\n}\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { weekNumber } from '../../util/dateTimeUtils'\nimport { pad, createNativeLocaleFormatter, monthChange } from './util'\nimport { createRange } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode, VNodeChildren, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-date-table',\n\n props: {\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n weekdayFormat: Function as PropType,\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { day: 'numeric', timeZone: 'UTC' }, { start: 8, length: 2 })\n },\n weekdayFormatter (): DatePickerFormatter | undefined {\n return this.weekdayFormat || createNativeLocaleFormatter(this.currentLocale, { weekday: 'narrow', timeZone: 'UTC' })\n },\n weekDays (): string[] {\n const first = parseInt(this.firstDayOfWeek, 10)\n\n return this.weekdayFormatter\n ? createRange(7).map(i => this.weekdayFormatter!(`2017-01-${first + i + 15}`)) // 2017-01-15 is Sunday\n : createRange(7).map(i => ['S', 'M', 'T', 'W', 'T', 'F', 'S'][(i + first) % 7])\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return monthChange(this.tableDate, Math.sign(delta || 1))\n },\n genTHead () {\n const days = this.weekDays.map(day => this.$createElement('th', day))\n if (this.showWeek) {\n days.unshift(this.$createElement('th'))\n }\n\n return this.$createElement('thead', this.genTR(days))\n },\n // Returns number of the days from the firstDayOfWeek to the first day of the current month\n weekDaysBeforeFirstDayOfTheMonth () {\n const firstDayOfTheMonth = new Date(`${this.displayedYear}-${pad(this.displayedMonth + 1)}-01T00:00:00+00:00`)\n const weekDay = firstDayOfTheMonth.getUTCDay()\n\n return (weekDay - parseInt(this.firstDayOfWeek) + 7) % 7\n },\n getWeekNumber (dayInMonth: number) {\n return weekNumber(\n this.displayedYear,\n this.displayedMonth,\n dayInMonth,\n parseInt(this.firstDayOfWeek),\n parseInt(this.localeFirstDayOfYear)\n )\n },\n genWeekNumber (weekNumber: number) {\n return this.$createElement('td', [\n this.$createElement('small', {\n staticClass: 'v-date-picker-table--date__week',\n }, String(weekNumber).padStart(2, '0')),\n ])\n },\n // eslint-disable-next-line max-statements\n genTBody () {\n const children = []\n const daysInMonth = new Date(this.displayedYear, this.displayedMonth + 1, 0).getDate()\n let rows = []\n let day = this.weekDaysBeforeFirstDayOfTheMonth()\n\n if (this.showWeek) {\n rows.push(this.genWeekNumber(this.getWeekNumber(1)))\n }\n\n const prevMonthYear = this.displayedMonth ? this.displayedYear : this.displayedYear - 1\n const prevMonth = (this.displayedMonth + 11) % 12\n const firstDayFromPreviousMonth = new Date(this.displayedYear, this.displayedMonth, 0).getDate()\n\n while (day--) {\n const date = `${prevMonthYear}-${pad(prevMonth + 1)}-${pad(firstDayFromPreviousMonth - day)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n for (day = 1; day <= daysInMonth; day++) {\n const date = `${this.displayedYear}-${pad(this.displayedMonth + 1)}-${pad(day)}`\n\n rows.push(this.$createElement('td', [\n this.genButton(date, true, 'date', this.formatter),\n ]))\n\n if (rows.length % (this.showWeek ? 8 : 7) === 0) {\n children.push(this.genTR(rows))\n rows = []\n if (this.showWeek && (day < daysInMonth)) {\n rows.push(this.genWeekNumber(this.getWeekNumber(day + 7)))\n }\n }\n }\n\n const nextMonthYear = this.displayedMonth === 11 ? this.displayedYear + 1 : this.displayedYear\n const nextMonth = (this.displayedMonth + 1) % 12\n let nextMonthDay = 1\n\n while (rows.length < 7) {\n const date = `${nextMonthYear}-${pad(nextMonth + 1)}-${pad(nextMonthDay++)}`\n\n rows.push(this.$createElement('td', this.showAdjacentMonths ? [\n this.genButton(date, true, 'date', this.formatter, true),\n ] : []))\n }\n\n if (rows.length) {\n children.push(this.genTR(rows))\n }\n\n return this.$createElement('tbody', children)\n },\n genTR (children: VNodeChildren) {\n return [this.$createElement('tr', children)]\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--date', [\n this.genTHead(),\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","// Mixins\nimport DatePickerTable from './mixins/date-picker-table'\n\n// Utils\nimport { pad, createNativeLocaleFormatter } from './util'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\nexport default mixins(\n DatePickerTable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-month-table',\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { month: 'short', timeZone: 'UTC' }, { start: 5, length: 2 })\n },\n },\n\n methods: {\n calculateTableDate (delta: number) {\n return `${parseInt(this.tableDate, 10) + Math.sign(delta || 1)}`\n },\n genTBody () {\n const children = []\n const cols = Array(3).fill(null)\n const rows = 12 / cols.length\n\n for (let row = 0; row < rows; row++) {\n const tds = cols.map((_, col) => {\n const month = row * cols.length + col\n const date = `${this.displayedYear}-${pad(month + 1)}`\n return this.$createElement('td', {\n key: month,\n }, [\n this.genButton(date, false, 'month', this.formatter),\n ])\n })\n\n children.push(this.$createElement('tr', {\n key: row,\n }, tds))\n }\n\n return this.$createElement('tbody', children)\n },\n },\n\n render (): VNode {\n return this.genTable('v-date-picker-table v-date-picker-table--month', [\n this.genTBody(),\n ], this.calculateTableDate)\n },\n})\n","import './VDatePickerYears.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Localable from '../../mixins/localable'\n\n// Utils\nimport {\n createItemTypeNativeListeners,\n createNativeLocaleFormatter,\n} from './util'\nimport { mergeListeners } from '../../util/mergeData'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode, PropType } from 'vue'\nimport { DatePickerFormatter } from 'vuetify/types'\n\ninterface options extends Vue {\n $el: HTMLElement\n}\n\nexport default mixins\n/* eslint-enable indent */\n>(\n Colorable,\n Localable\n/* @vue/component */\n).extend({\n name: 'v-date-picker-years',\n\n props: {\n format: Function as PropType,\n min: [Number, String],\n max: [Number, String],\n readonly: Boolean,\n value: [Number, String],\n },\n\n data () {\n return {\n defaultColor: 'primary',\n }\n },\n\n computed: {\n formatter (): DatePickerFormatter {\n return this.format || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 })\n },\n },\n\n mounted () {\n setTimeout(() => {\n const activeItem = this.$el.getElementsByClassName('active')[0]\n if (activeItem) {\n this.$el.scrollTop = activeItem.offsetTop - this.$el.offsetHeight / 2 + activeItem.offsetHeight / 2\n } else if (this.min && !this.max) {\n this.$el.scrollTop = this.$el.scrollHeight\n } else if (!this.min && this.max) {\n this.$el.scrollTop = 0\n } else {\n this.$el.scrollTop = this.$el.scrollHeight / 2 - this.$el.offsetHeight / 2\n }\n })\n },\n\n methods: {\n genYearItem (year: number): VNode {\n const formatted = this.formatter(`${year}`)\n const active = parseInt(this.value, 10) === year\n const color = active && (this.color || 'primary')\n\n return this.$createElement('li', this.setTextColor(color, {\n key: year,\n class: { active },\n on: mergeListeners({\n click: () => this.$emit('input', year),\n }, createItemTypeNativeListeners(this, ':year', year)),\n }), formatted)\n },\n\n genYearItems (): VNode[] {\n const children = []\n const selectedYear = this.value ? parseInt(this.value, 10) : new Date().getFullYear()\n const maxYear = this.max ? parseInt(this.max, 10) : (selectedYear + 100)\n const minYear = Math.min(maxYear, this.min ? parseInt(this.min, 10) : (selectedYear - 100))\n\n for (let year = maxYear; year >= minYear; year--) {\n children.push(this.genYearItem(year))\n }\n\n return children\n },\n },\n\n render (): VNode {\n return this.$createElement('ul', {\n staticClass: 'v-date-picker-years',\n ref: 'years',\n }, this.genYearItems())\n },\n})\n","import './VPicker.sass'\nimport '../VCard/VCard.sass'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../../mixins/themeable'\n\n// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport { VNode } from 'vue/types'\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n).extend({\n name: 'v-picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n landscape: Boolean,\n noTitle: Boolean,\n transition: {\n type: String,\n default: 'fade-transition',\n },\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n computed: {\n computedTitleColor (): string | false {\n const defaultTitleColor = this.isDark ? false : (this.color || 'primary')\n return this.color || defaultTitleColor\n },\n },\n\n methods: {\n genTitle () {\n return this.$createElement('div', this.setBackgroundColor(this.computedTitleColor, {\n staticClass: 'v-picker__title',\n class: {\n 'v-picker__title--landscape': this.landscape,\n },\n }), this.$slots.title)\n },\n genBodyTransition () {\n return this.$createElement('transition', {\n props: {\n name: this.transition,\n },\n }, this.$slots.default)\n },\n genBody () {\n return this.$createElement('div', {\n staticClass: 'v-picker__body',\n class: {\n 'v-picker__body--no-title': this.noTitle,\n ...this.themeClasses,\n },\n style: this.fullWidth ? undefined : {\n width: convertToUnit(this.width),\n },\n }, [\n this.genBodyTransition(),\n ])\n },\n genActions () {\n return this.$createElement('div', {\n staticClass: 'v-picker__actions v-card__actions',\n class: {\n 'v-picker__actions--no-title': this.noTitle,\n },\n }, this.$slots.actions)\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-picker v-card',\n class: {\n 'v-picker--flat': this.flat,\n 'v-picker--landscape': this.landscape,\n 'v-picker--full-width': this.fullWidth,\n ...this.themeClasses,\n ...this.elevationClasses,\n },\n }, [\n this.$slots.title ? this.genTitle() : null,\n this.genBody(),\n this.$slots.actions ? this.genActions() : null,\n ])\n },\n})\n","import VPicker from './VPicker'\n\nexport { VPicker }\nexport default VPicker\n","// Components\nimport VPicker from '../../components/VPicker'\n\n// Mixins\nimport Colorable from '../colorable'\nimport Elevatable from '../../mixins/elevatable'\nimport Themeable from '../themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nexport default mixins(\n Colorable,\n Elevatable,\n Themeable\n/* @vue/component */\n).extend({\n name: 'picker',\n\n props: {\n flat: Boolean,\n fullWidth: Boolean,\n headerColor: String,\n landscape: Boolean,\n noTitle: Boolean,\n width: {\n type: [Number, String],\n default: 290,\n },\n },\n\n methods: {\n genPickerTitle (): VNode | null {\n return null\n },\n genPickerBody (): VNode | null {\n return null\n },\n genPickerActionsSlot () {\n return this.$scopedSlots.default ? this.$scopedSlots.default({\n save: (this as any).save,\n cancel: (this as any).cancel,\n }) : this.$slots.default\n },\n genPicker (staticClass: string) {\n const children: VNode[] = []\n\n if (!this.noTitle) {\n const title = this.genPickerTitle()\n title && children.push(title)\n }\n\n const body = this.genPickerBody()\n body && children.push(body)\n\n children.push(this.$createElement('template', { slot: 'actions' }, [this.genPickerActionsSlot()]))\n\n return this.$createElement(VPicker, {\n staticClass,\n props: {\n color: this.headerColor || this.color,\n dark: this.dark,\n elevation: this.elevation,\n flat: this.flat,\n fullWidth: this.fullWidth,\n landscape: this.landscape,\n light: this.light,\n width: this.width,\n noTitle: this.noTitle,\n },\n }, children)\n },\n },\n})\n","import { CalendarTimestamp, CalendarFormatter } from 'vuetify/types'\nimport { isLeapYear } from '../../../util/dateTimeUtils'\n\nexport const PARSE_REGEX = /^(\\d{4})-(\\d{1,2})(-(\\d{1,2}))?([^\\d]+(\\d{1,2}))?(:(\\d{1,2}))?(:(\\d{1,2}))?$/\nexport const PARSE_TIME = /(\\d\\d?)(:(\\d\\d?)|)(:(\\d\\d?)|)/\n\nexport const DAYS_IN_MONTH: number[] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_LEAP: number[] = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\nexport const DAYS_IN_MONTH_MIN = 28\nexport const DAYS_IN_MONTH_MAX = 31\nexport const MONTH_MAX = 12\nexport const MONTH_MIN = 1\nexport const DAY_MIN = 1\nexport const DAYS_IN_WEEK = 7\nexport const MINUTES_IN_HOUR = 60\nexport const MINUTE_MAX = 59\nexport const MINUTES_IN_DAY = 24 * 60\nexport const HOURS_IN_DAY = 24\nexport const HOUR_MAX = 23\nexport const FIRST_HOUR = 0\nexport const OFFSET_YEAR = 10000\nexport const OFFSET_MONTH = 100\nexport const OFFSET_HOUR = 100\nexport const OFFSET_TIME = 10000\n\ntype CalendarTimestampFormatOptions = (timestamp: CalendarTimestamp, short: boolean) => object\ntype CalendarTimestampOperation = (timestamp: CalendarTimestamp) => CalendarTimestamp\nexport type VTime = number | string | {\n hour: number\n minute: number\n}\n\nexport type VTimestampInput = number | string | Date;\n\nexport function getStartOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n findWeekday(start, weekdays[0], prevDay)\n updateFormatted(start)\n if (today) {\n updateRelative(start, today, start.hasTime)\n }\n\n return start\n}\n\nexport function getEndOfWeek (timestamp: CalendarTimestamp, weekdays: number[], today?: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n findWeekday(end, weekdays[weekdays.length - 1])\n updateFormatted(end)\n if (today) {\n updateRelative(end, today, end.hasTime)\n }\n\n return end\n}\n\nexport function getStartOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const start = copyTimestamp(timestamp)\n start.day = DAY_MIN\n updateWeekday(start)\n updateFormatted(start)\n\n return start\n}\n\nexport function getEndOfMonth (timestamp: CalendarTimestamp): CalendarTimestamp {\n const end = copyTimestamp(timestamp)\n end.day = daysInMonth(end.year, end.month)\n updateWeekday(end)\n updateFormatted(end)\n\n return end\n}\n\nexport function validateTime (input: any): input is VTime {\n return (typeof input === 'number' && isFinite(input)) ||\n (!!PARSE_TIME.exec(input)) ||\n (typeof input === 'object' && isFinite(input.hour) && isFinite(input.minute))\n}\n\nexport function parseTime (input: any): number | false {\n if (typeof input === 'number') {\n // when a number is given, it's minutes since 12:00am\n return input\n } else if (typeof input === 'string') {\n // when a string is given, it's a hh:mm:ss format where seconds are optional\n const parts = PARSE_TIME.exec(input)\n if (!parts) {\n return false\n }\n\n return parseInt(parts[1]) * 60 + parseInt(parts[3] || 0)\n } else if (typeof input === 'object') {\n // when an object is given, it must have hour and minute\n if (typeof input.hour !== 'number' || typeof input.minute !== 'number') {\n return false\n }\n\n return input.hour * 60 + input.minute\n } else {\n // unsupported type\n return false\n }\n}\n\nexport function validateTimestamp (input: any): input is VTimestampInput {\n return (typeof input === 'number' && isFinite(input)) ||\n (typeof input === 'string' && !!PARSE_REGEX.exec(input)) ||\n (input instanceof Date)\n}\n\nexport function parseTimestamp (input: VTimestampInput, required?: false, now?: CalendarTimestamp): CalendarTimestamp | null\nexport function parseTimestamp (input: VTimestampInput, required: true, now?: CalendarTimestamp): CalendarTimestamp\nexport function parseTimestamp (input: VTimestampInput, required = false, now?: CalendarTimestamp): CalendarTimestamp | null {\n if (typeof input === 'number' && isFinite(input)) {\n input = new Date(input)\n }\n\n if (input instanceof Date) {\n const date: CalendarTimestamp = parseDate(input)\n\n if (now) {\n updateRelative(date, now, date.hasTime)\n }\n\n return date\n }\n\n if (typeof input !== 'string') {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n return null\n }\n\n // YYYY-MM-DD hh:mm:ss\n const parts = PARSE_REGEX.exec(input)\n\n if (!parts) {\n if (required) {\n throw new Error(`${input} is not a valid timestamp. It must be a Date, number of seconds since Epoch, or a string in the format of YYYY-MM-DD or YYYY-MM-DD hh:mm. Zero-padding is optional and seconds are ignored.`)\n }\n\n return null\n }\n\n const timestamp: CalendarTimestamp = {\n date: input,\n time: '',\n year: parseInt(parts[1]),\n month: parseInt(parts[2]),\n day: parseInt(parts[4]) || 1,\n hour: parseInt(parts[6]) || 0,\n minute: parseInt(parts[8]) || 0,\n weekday: 0,\n hasDay: !!parts[4],\n hasTime: !!(parts[6] && parts[8]),\n past: false,\n present: false,\n future: false,\n }\n\n updateWeekday(timestamp)\n updateFormatted(timestamp)\n\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n\n return timestamp\n}\n\nexport function parseDate (date: Date): CalendarTimestamp {\n return updateFormatted({\n date: '',\n time: '',\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n weekday: date.getDay(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n hasDay: true,\n hasTime: true,\n past: false,\n present: true,\n future: false,\n })\n}\n\nexport function getDayIdentifier (timestamp: { year: number, month: number, day: number }): number {\n return timestamp.year * OFFSET_YEAR + timestamp.month * OFFSET_MONTH + timestamp.day\n}\n\nexport function getTimeIdentifier (timestamp: { hour: number, minute: number }): number {\n return timestamp.hour * OFFSET_HOUR + timestamp.minute\n}\n\nexport function getTimestampIdentifier (timestamp: CalendarTimestamp): number {\n return getDayIdentifier(timestamp) * OFFSET_TIME + getTimeIdentifier(timestamp)\n}\n\nexport function updateRelative (timestamp: CalendarTimestamp, now: CalendarTimestamp, time = false): CalendarTimestamp {\n let a = getDayIdentifier(now)\n let b = getDayIdentifier(timestamp)\n let present = a === b\n\n if (timestamp.hasTime && time && present) {\n a = getTimeIdentifier(now)\n b = getTimeIdentifier(timestamp)\n present = a === b\n }\n\n timestamp.past = b < a\n timestamp.present = present\n timestamp.future = b > a\n\n return timestamp\n}\n\nexport function isTimedless (input: VTimestampInput): input is (Date | number) {\n return (input instanceof Date) || (typeof input === 'number' && isFinite(input))\n}\n\nexport function updateHasTime (timestamp: CalendarTimestamp, hasTime: boolean, now?: CalendarTimestamp): CalendarTimestamp {\n if (timestamp.hasTime !== hasTime) {\n timestamp.hasTime = hasTime\n if (!hasTime) {\n timestamp.hour = HOUR_MAX\n timestamp.minute = MINUTE_MAX\n timestamp.time = getTime(timestamp)\n }\n if (now) {\n updateRelative(timestamp, now, timestamp.hasTime)\n }\n }\n\n return timestamp\n}\n\nexport function updateMinutes (timestamp: CalendarTimestamp, minutes: number, now?: CalendarTimestamp): CalendarTimestamp {\n timestamp.hasTime = true\n timestamp.hour = Math.floor(minutes / MINUTES_IN_HOUR)\n timestamp.minute = minutes % MINUTES_IN_HOUR\n timestamp.time = getTime(timestamp)\n if (now) {\n updateRelative(timestamp, now, true)\n }\n\n return timestamp\n}\n\nexport function updateWeekday (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.weekday = getWeekday(timestamp)\n\n return timestamp\n}\n\nexport function updateFormatted (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.time = getTime(timestamp)\n timestamp.date = getDate(timestamp)\n\n return timestamp\n}\n\nexport function getWeekday (timestamp: CalendarTimestamp): number {\n if (timestamp.hasDay) {\n const _ = Math.floor\n const k = timestamp.day\n const m = ((timestamp.month + 9) % MONTH_MAX) + 1\n const C = _(timestamp.year / 100)\n const Y = (timestamp.year % 100) - (timestamp.month <= 2 ? 1 : 0)\n\n return (((k + _(2.6 * m - 0.2) - 2 * C + Y + _(Y / 4) + _(C / 4)) % 7) + 7) % 7\n }\n\n return timestamp.weekday\n}\n\nexport function daysInMonth (year: number, month: number) {\n return isLeapYear(year) ? DAYS_IN_MONTH_LEAP[month] : DAYS_IN_MONTH[month]\n}\n\nexport function copyTimestamp (timestamp: CalendarTimestamp): CalendarTimestamp {\n const { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future } = timestamp\n\n return { date, time, year, month, day, weekday, hour, minute, hasDay, hasTime, past, present, future }\n}\n\nexport function padNumber (x: number, length: number): string {\n let padded = String(x)\n while (padded.length < length) {\n padded = '0' + padded\n }\n\n return padded\n}\n\nexport function getDate (timestamp: CalendarTimestamp): string {\n let str = `${padNumber(timestamp.year, 4)}-${padNumber(timestamp.month, 2)}`\n\n if (timestamp.hasDay) str += `-${padNumber(timestamp.day, 2)}`\n\n return str\n}\n\nexport function getTime (timestamp: CalendarTimestamp): string {\n if (!timestamp.hasTime) {\n return ''\n }\n\n return `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n}\n\nexport function nextMinutes (timestamp: CalendarTimestamp, minutes: number): CalendarTimestamp {\n timestamp.minute += minutes\n while (timestamp.minute > MINUTES_IN_HOUR) {\n timestamp.minute -= MINUTES_IN_HOUR\n timestamp.hour++\n if (timestamp.hour >= HOURS_IN_DAY) {\n nextDay(timestamp)\n timestamp.hour = FIRST_HOUR\n }\n }\n\n return timestamp\n}\n\nexport function nextDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day++\n timestamp.weekday = (timestamp.weekday + 1) % DAYS_IN_WEEK\n if (timestamp.day > DAYS_IN_MONTH_MIN && timestamp.day > daysInMonth(timestamp.year, timestamp.month)) {\n timestamp.day = DAY_MIN\n timestamp.month++\n if (timestamp.month > MONTH_MAX) {\n timestamp.month = MONTH_MIN\n timestamp.year++\n }\n }\n\n return timestamp\n}\n\nexport function prevDay (timestamp: CalendarTimestamp): CalendarTimestamp {\n timestamp.day--\n timestamp.weekday = (timestamp.weekday + 6) % DAYS_IN_WEEK\n if (timestamp.day < DAY_MIN) {\n timestamp.month--\n if (timestamp.month < MONTH_MIN) {\n timestamp.year--\n timestamp.month = MONTH_MAX\n }\n timestamp.day = daysInMonth(timestamp.year, timestamp.month)\n }\n\n return timestamp\n}\n\nexport function relativeDays (\n timestamp: CalendarTimestamp,\n mover: CalendarTimestampOperation = nextDay,\n days = 1\n): CalendarTimestamp {\n while (--days >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function diffMinutes (min: CalendarTimestamp, max: CalendarTimestamp) {\n const Y = (max.year - min.year) * 525600\n const M = (max.month - min.month) * 43800\n const D = (max.day - min.day) * 1440\n const h = (max.hour - min.hour) * 60\n const m = (max.minute - min.minute)\n\n return Y + M + D + h + m\n}\n\nexport function findWeekday (timestamp: CalendarTimestamp, weekday: number,\n mover: CalendarTimestampOperation = nextDay, maxDays = 6): CalendarTimestamp {\n while (timestamp.weekday !== weekday && --maxDays >= 0) mover(timestamp)\n\n return timestamp\n}\n\nexport function getWeekdaySkips (weekdays: number[]): number[] {\n const skips: number[] = [1, 1, 1, 1, 1, 1, 1]\n const filled: number[] = [0, 0, 0, 0, 0, 0, 0]\n for (let i = 0; i < weekdays.length; i++) {\n filled[weekdays[i]] = 1\n }\n for (let k = 0; k < DAYS_IN_WEEK; k++) {\n let skip = 1\n for (let j = 1; j < DAYS_IN_WEEK; j++) {\n const next = (k + j) % DAYS_IN_WEEK\n if (filled[next]) {\n break\n }\n skip++\n }\n skips[k] = filled[k] * skip\n }\n\n return skips\n}\n\nexport function timestampToDate (timestamp: CalendarTimestamp): Date {\n const time = `${padNumber(timestamp.hour, 2)}:${padNumber(timestamp.minute, 2)}`\n const date = timestamp.date\n\n return new Date(`${date}T${time}:00+00:00`)\n}\n\nexport function createDayList (\n start: CalendarTimestamp,\n end: CalendarTimestamp,\n now: CalendarTimestamp,\n weekdaySkips: number[],\n max = 42,\n min = 0\n): CalendarTimestamp[] {\n const stop = getDayIdentifier(end)\n const days: CalendarTimestamp[] = []\n let current = copyTimestamp(start)\n let currentIdentifier = 0\n let stopped = currentIdentifier === stop\n\n if (stop < getDayIdentifier(start)) {\n throw new Error('End date is earlier than start date.')\n }\n\n while ((!stopped || days.length < min) && days.length < max) {\n currentIdentifier = getDayIdentifier(current)\n stopped = stopped || currentIdentifier === stop\n if (weekdaySkips[current.weekday] === 0) {\n current = nextDay(current)\n continue\n }\n const day = copyTimestamp(current)\n updateFormatted(day)\n updateRelative(day, now)\n days.push(day)\n current = relativeDays(current, nextDay, weekdaySkips[current.weekday])\n }\n\n if (!days.length) throw new Error('No dates found using specified start date, end date, and weekdays.')\n\n return days\n}\n\nexport function createIntervalList (timestamp: CalendarTimestamp, first: number,\n minutes: number, count: number, now?: CalendarTimestamp): CalendarTimestamp[] {\n const intervals: CalendarTimestamp[] = []\n\n for (let i = 0; i < count; i++) {\n const mins = first + (i * minutes)\n const int = copyTimestamp(timestamp)\n intervals.push(updateMinutes(int, mins, now))\n }\n\n return intervals\n}\n\nexport function createNativeLocaleFormatter (locale: string, getOptions: CalendarTimestampFormatOptions): CalendarFormatter {\n const emptyFormatter: CalendarFormatter = (_t, _s) => ''\n\n if (typeof Intl === 'undefined' || typeof Intl.DateTimeFormat === 'undefined') {\n return emptyFormatter\n }\n\n return (timestamp, short) => {\n try {\n const intlFormatter = new Intl.DateTimeFormat(locale || undefined, getOptions(timestamp, short))\n\n return intlFormatter.format(timestampToDate(timestamp))\n } catch (e) {\n return ''\n }\n }\n}\n","// Components\nimport VDatePickerTitle from './VDatePickerTitle'\nimport VDatePickerHeader from './VDatePickerHeader'\nimport VDatePickerDateTable from './VDatePickerDateTable'\nimport VDatePickerMonthTable from './VDatePickerMonthTable'\nimport VDatePickerYears from './VDatePickerYears'\n\n// Mixins\nimport Localable from '../../mixins/localable'\nimport Picker from '../../mixins/picker'\n\n// Utils\nimport isDateAllowed from './util/isDateAllowed'\nimport mixins from '../../util/mixins'\nimport { wrapInArray } from '../../util/helpers'\nimport { daysInMonth } from '../VCalendar/util/timestamp'\nimport { consoleWarn } from '../../util/console'\nimport {\n createItemTypeListeners,\n createNativeLocaleFormatter,\n pad,\n sanitizeDateString,\n} from './util'\n\n// Types\nimport {\n PropType,\n PropValidator,\n} from 'vue/types/options'\nimport { VNode } from 'vue'\nimport {\n DatePickerFormatter,\n DatePickerMultipleFormatter,\n DatePickerAllowedDatesFunction,\n DatePickerEventColors,\n DatePickerEvents,\n DatePickerType,\n} from 'vuetify/types'\n\ntype DatePickerValue = string | string[] | undefined\ninterface Formatters {\n year: DatePickerFormatter\n titleDate: DatePickerFormatter | DatePickerMultipleFormatter\n}\n\nexport default mixins(\n Localable,\n Picker,\n/* @vue/component */\n).extend({\n name: 'v-date-picker',\n\n props: {\n allowedDates: Function as PropType,\n // Function formatting the day in date picker table\n dayFormat: Function as PropType,\n disabled: Boolean,\n events: {\n type: [Array, Function, Object],\n default: () => null,\n } as PropValidator,\n eventColor: {\n type: [Array, Function, Object, String],\n default: () => 'warning',\n } as PropValidator,\n firstDayOfWeek: {\n type: [String, Number],\n default: 0,\n },\n // Function formatting the tableDate in the day/month table header\n headerDateFormat: Function as PropType,\n localeFirstDayOfYear: {\n type: [String, Number],\n default: 0,\n },\n max: String,\n min: String,\n // Function formatting month in the months table\n monthFormat: Function as PropType,\n multiple: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n nextMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextMonthAriaLabel',\n },\n nextYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.nextYearAriaLabel',\n },\n pickerDate: String,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n prevMonthAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevMonthAriaLabel',\n },\n prevYearAriaLabel: {\n type: String,\n default: '$vuetify.datePicker.prevYearAriaLabel',\n },\n range: Boolean,\n reactive: Boolean,\n readonly: Boolean,\n scrollable: Boolean,\n showCurrent: {\n type: [Boolean, String],\n default: true,\n },\n selectedItemsText: {\n type: String,\n default: '$vuetify.datePicker.itemsSelected',\n },\n showAdjacentMonths: Boolean,\n showWeek: Boolean,\n // Function formatting currently selected date in the picker title\n titleDateFormat: Function as PropType,\n type: {\n type: String,\n default: 'date',\n validator: (type: any) => ['date', 'month'].includes(type), // TODO: year\n } as PropValidator,\n value: [Array, String] as PropType,\n weekdayFormat: Function as PropType,\n // Function formatting the year in table header and pickup title\n yearFormat: Function as PropType,\n yearIcon: String,\n },\n\n data () {\n const now = new Date()\n return {\n activePicker: this.type.toUpperCase(),\n inputDay: null as number | null,\n inputMonth: null as number | null,\n inputYear: null as number | null,\n isReversing: false,\n now,\n // tableDate is a string in 'YYYY' / 'YYYY-M' format (leading zero for month is not required)\n tableDate: (() => {\n if (this.pickerDate) {\n return this.pickerDate\n }\n\n const multipleValue = wrapInArray(this.value)\n const date = multipleValue[multipleValue.length - 1] ||\n (typeof this.showCurrent === 'string' ? this.showCurrent : `${now.getFullYear()}-${now.getMonth() + 1}`)\n return sanitizeDateString(date as string, this.type === 'date' ? 'month' : 'year')\n })(),\n }\n },\n\n computed: {\n multipleValue (): string[] {\n return wrapInArray(this.value)\n },\n isMultiple (): boolean {\n return this.multiple || this.range\n },\n lastValue (): string | null {\n return this.isMultiple ? this.multipleValue[this.multipleValue.length - 1] : (this.value as string | null)\n },\n selectedMonths (): string | string[] | undefined {\n if (!this.value || this.type === 'month') {\n return this.value\n } else if (this.isMultiple) {\n return this.multipleValue.map(val => val.substr(0, 7))\n } else {\n return (this.value as string).substr(0, 7)\n }\n },\n current (): string | null {\n if (this.showCurrent === true) {\n return sanitizeDateString(`${this.now.getFullYear()}-${this.now.getMonth() + 1}-${this.now.getDate()}`, this.type)\n }\n\n return this.showCurrent || null\n },\n inputDate (): string {\n return this.type === 'date'\n ? `${this.inputYear}-${pad(this.inputMonth! + 1)}-${pad(this.inputDay!)}`\n : `${this.inputYear}-${pad(this.inputMonth! + 1)}`\n },\n tableMonth (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[1]) - 1\n },\n tableYear (): number {\n return Number((this.pickerDate || this.tableDate).split('-')[0])\n },\n minMonth (): string | null {\n return this.min ? sanitizeDateString(this.min, 'month') : null\n },\n maxMonth (): string | null {\n return this.max ? sanitizeDateString(this.max, 'month') : null\n },\n minYear (): string | null {\n return this.min ? sanitizeDateString(this.min, 'year') : null\n },\n maxYear (): string | null {\n return this.max ? sanitizeDateString(this.max, 'year') : null\n },\n formatters (): Formatters {\n return {\n year: this.yearFormat || createNativeLocaleFormatter(this.currentLocale, { year: 'numeric', timeZone: 'UTC' }, { length: 4 }),\n titleDate: this.titleDateFormat ||\n (this.isMultiple ? this.defaultTitleMultipleDateFormatter : this.defaultTitleDateFormatter),\n }\n },\n defaultTitleMultipleDateFormatter (): DatePickerMultipleFormatter {\n return dates => {\n if (!dates.length) {\n return '-'\n }\n\n if (dates.length === 1) {\n return this.defaultTitleDateFormatter(dates[0])\n }\n\n return this.$vuetify.lang.t(this.selectedItemsText, dates.length)\n }\n },\n defaultTitleDateFormatter (): DatePickerFormatter {\n const titleFormats = {\n year: { year: 'numeric', timeZone: 'UTC' },\n month: { month: 'long', timeZone: 'UTC' },\n date: { weekday: 'short', month: 'short', day: 'numeric', timeZone: 'UTC' },\n }\n\n const titleDateFormatter = createNativeLocaleFormatter(this.currentLocale, titleFormats[this.type], {\n start: 0,\n length: { date: 10, month: 7, year: 4 }[this.type],\n })\n\n const landscapeFormatter = (date: string) => titleDateFormatter(date)\n .replace(/([^\\d\\s])([\\d])/g, (match, nonDigit, digit) => `${nonDigit} ${digit}`)\n .replace(', ', ',
')\n\n return this.landscape ? landscapeFormatter : titleDateFormatter\n },\n },\n\n watch: {\n tableDate (val: string, prev: string) {\n // Make a ISO 8601 strings from val and prev for comparision, otherwise it will incorrectly\n // compare for example '2000-9' and '2000-10'\n const sanitizeType = this.type === 'month' ? 'year' : 'month'\n this.isReversing = sanitizeDateString(val, sanitizeType) < sanitizeDateString(prev, sanitizeType)\n this.$emit('update:picker-date', val)\n },\n pickerDate (val: string | null) {\n if (val) {\n this.tableDate = val\n } else if (this.lastValue && this.type === 'date') {\n this.tableDate = sanitizeDateString(this.lastValue, 'month')\n } else if (this.lastValue && this.type === 'month') {\n this.tableDate = sanitizeDateString(this.lastValue, 'year')\n }\n },\n value (newValue: DatePickerValue, oldValue: DatePickerValue) {\n this.checkMultipleProp()\n this.setInputDate()\n\n if (\n (!this.isMultiple && this.value && !this.pickerDate) ||\n (this.isMultiple && this.multipleValue.length && (!oldValue || !oldValue.length) && !this.pickerDate)\n ) {\n this.tableDate = sanitizeDateString(this.inputDate, this.type === 'month' ? 'year' : 'month')\n }\n },\n type (type: DatePickerType) {\n this.activePicker = type.toUpperCase()\n\n if (this.value && this.value.length) {\n const output = this.multipleValue\n .map((val: string) => sanitizeDateString(val, type))\n .filter(this.isDateAllowed)\n this.$emit('input', this.isMultiple ? output : output[0])\n }\n },\n },\n\n created () {\n this.checkMultipleProp()\n\n if (this.pickerDate !== this.tableDate) {\n this.$emit('update:picker-date', this.tableDate)\n }\n this.setInputDate()\n },\n\n methods: {\n emitInput (newInput: string) {\n if (this.range) {\n if (this.multipleValue.length !== 1) {\n this.$emit('input', [newInput])\n } else {\n const output = [this.multipleValue[0], newInput]\n this.$emit('input', output)\n this.$emit('change', output)\n }\n return\n }\n\n const output = this.multiple\n ? (\n this.multipleValue.indexOf(newInput) === -1\n ? this.multipleValue.concat([newInput])\n : this.multipleValue.filter(x => x !== newInput)\n )\n : newInput\n\n this.$emit('input', output)\n this.multiple || this.$emit('change', newInput)\n },\n checkMultipleProp () {\n if (this.value == null) return\n const valueType = this.value.constructor.name\n const expected = this.isMultiple ? 'Array' : 'String'\n if (valueType !== expected) {\n consoleWarn(`Value must be ${this.isMultiple ? 'an' : 'a'} ${expected}, got ${valueType}`, this)\n }\n },\n isDateAllowed (value: string): boolean {\n return isDateAllowed(value, this.min, this.max, this.allowedDates)\n },\n yearClick (value: number) {\n this.inputYear = value\n if (this.type === 'month') {\n this.tableDate = `${value}`\n } else {\n this.tableDate = `${value}-${pad((this.tableMonth || 0) + 1)}`\n }\n this.activePicker = 'MONTH'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n },\n monthClick (value: string) {\n this.inputYear = parseInt(value.split('-')[0], 10)\n this.inputMonth = parseInt(value.split('-')[1], 10) - 1\n if (this.type === 'date') {\n if (this.inputDay) {\n this.inputDay = Math.min(this.inputDay, daysInMonth(this.inputYear, this.inputMonth + 1))\n }\n\n this.tableDate = value\n this.activePicker = 'DATE'\n if (this.reactive && !this.readonly && !this.isMultiple && this.isDateAllowed(this.inputDate)) {\n this.$emit('input', this.inputDate)\n }\n } else {\n this.emitInput(this.inputDate)\n }\n },\n dateClick (value: string) {\n this.inputYear = parseInt(value.split('-')[0], 10)\n this.inputMonth = parseInt(value.split('-')[1], 10) - 1\n this.inputDay = parseInt(value.split('-')[2], 10)\n this.emitInput(this.inputDate)\n },\n genPickerTitle (): VNode {\n return this.$createElement(VDatePickerTitle, {\n props: {\n date: this.value ? (this.formatters.titleDate as (value: any) => string)(this.isMultiple ? this.multipleValue : this.value) : '',\n disabled: this.disabled,\n readonly: this.readonly,\n selectingYear: this.activePicker === 'YEAR',\n year: this.formatters.year(this.multipleValue.length ? `${this.inputYear}` : this.tableDate),\n yearIcon: this.yearIcon,\n value: this.multipleValue[0],\n },\n slot: 'title',\n on: {\n 'update:selecting-year': (value: boolean) => this.activePicker = value ? 'YEAR' : this.type.toUpperCase(),\n },\n })\n },\n genTableHeader (): VNode {\n return this.$createElement(VDatePickerHeader, {\n props: {\n nextIcon: this.nextIcon,\n color: this.color,\n dark: this.dark,\n disabled: this.disabled,\n format: this.headerDateFormat,\n light: this.light,\n locale: this.locale,\n min: this.activePicker === 'DATE' ? this.minMonth : this.minYear,\n max: this.activePicker === 'DATE' ? this.maxMonth : this.maxYear,\n nextAriaLabel: this.activePicker === 'DATE' ? this.nextMonthAriaLabel : this.nextYearAriaLabel,\n prevAriaLabel: this.activePicker === 'DATE' ? this.prevMonthAriaLabel : this.prevYearAriaLabel,\n prevIcon: this.prevIcon,\n readonly: this.readonly,\n value: this.activePicker === 'DATE' ? `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}` : `${pad(this.tableYear, 4)}`,\n },\n on: {\n toggle: () => this.activePicker = (this.activePicker === 'DATE' ? 'MONTH' : 'YEAR'),\n input: (value: string) => this.tableDate = value,\n },\n })\n },\n genDateTable (): VNode {\n return this.$createElement(VDatePickerDateTable, {\n props: {\n allowedDates: this.allowedDates,\n color: this.color,\n current: this.current,\n dark: this.dark,\n disabled: this.disabled,\n events: this.events,\n eventColor: this.eventColor,\n firstDayOfWeek: this.firstDayOfWeek,\n format: this.dayFormat,\n light: this.light,\n locale: this.locale,\n localeFirstDayOfYear: this.localeFirstDayOfYear,\n min: this.min,\n max: this.max,\n range: this.range,\n readonly: this.readonly,\n scrollable: this.scrollable,\n showAdjacentMonths: this.showAdjacentMonths,\n showWeek: this.showWeek,\n tableDate: `${pad(this.tableYear, 4)}-${pad(this.tableMonth + 1)}`,\n value: this.value,\n weekdayFormat: this.weekdayFormat,\n },\n ref: 'table',\n on: {\n input: this.dateClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':date'),\n },\n })\n },\n genMonthTable (): VNode {\n return this.$createElement(VDatePickerMonthTable, {\n props: {\n allowedDates: this.type === 'month' ? this.allowedDates : null,\n color: this.color,\n current: this.current ? sanitizeDateString(this.current, 'month') : null,\n dark: this.dark,\n disabled: this.disabled,\n events: this.type === 'month' ? this.events : null,\n eventColor: this.type === 'month' ? this.eventColor : null,\n format: this.monthFormat,\n light: this.light,\n locale: this.locale,\n min: this.minMonth,\n max: this.maxMonth,\n range: this.range,\n readonly: this.readonly && this.type === 'month',\n scrollable: this.scrollable,\n value: this.selectedMonths,\n tableDate: `${pad(this.tableYear, 4)}`,\n },\n ref: 'table',\n on: {\n input: this.monthClick,\n 'update:table-date': (value: string) => this.tableDate = value,\n ...createItemTypeListeners(this, ':month'),\n },\n })\n },\n genYears (): VNode {\n return this.$createElement(VDatePickerYears, {\n props: {\n color: this.color,\n format: this.yearFormat,\n locale: this.locale,\n min: this.minYear,\n max: this.maxYear,\n value: this.tableYear,\n },\n on: {\n input: this.yearClick,\n ...createItemTypeListeners(this, ':year'),\n },\n })\n },\n genPickerBody (): VNode {\n const children = this.activePicker === 'YEAR' ? [\n this.genYears(),\n ] : [\n this.genTableHeader(),\n this.activePicker === 'DATE' ? this.genDateTable() : this.genMonthTable(),\n ]\n\n return this.$createElement('div', {\n key: this.activePicker,\n }, children)\n },\n setInputDate () {\n if (this.lastValue) {\n const array = this.lastValue.split('-')\n this.inputYear = parseInt(array[0], 10)\n this.inputMonth = parseInt(array[1], 10) - 1\n if (this.type === 'date') {\n this.inputDay = parseInt(array[2], 10)\n }\n } else {\n this.inputYear = this.inputYear || this.now.getFullYear()\n this.inputMonth = this.inputMonth == null ? this.inputMonth : this.now.getMonth()\n this.inputDay = this.inputDay || this.now.getDate()\n }\n },\n },\n\n render (): VNode {\n return this.genPicker('v-picker--date')\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('v-card',{staticClass:\"mt-2\"},[_c('v-row',[_c('v-col',{attrs:{\"md\":\"4\"}},[_c('v-dialog',{ref:\"dialog\",attrs:{\"return-value\":_vm.date,\"persistent\":\"\",\"width\":\"290px\"},on:{\"update:returnValue\":function($event){_vm.date=$event},\"update:return-value\":function($event){_vm.date=$event}},scopedSlots:_vm._u([{key:\"activator\",fn:function({ on, attrs }){return [_c('v-text-field',_vm._g(_vm._b({staticStyle:{\"margin-left\":\"30px\"},attrs:{\"label\":\"Date Range\",\"prepend-icon\":\"mdi-calendar\",\"readonly\":\"\",\"clearable\":\"\"},on:{\"click:clear\":function($event){return _vm.updateDateFilter([])}},model:{value:(_vm.date),callback:function ($$v) {_vm.date=$$v},expression:\"date\"}},'v-text-field',attrs,false),on))]}}]),model:{value:(_vm.modal),callback:function ($$v) {_vm.modal=$$v},expression:\"modal\"}},[_c('v-date-picker',{attrs:{\"scrollable\":\"\",\"range\":\"\"},on:{\"change\":_vm.updateDateFilter},model:{value:(_vm.dates),callback:function ($$v) {_vm.dates=$$v},expression:\"dates\"}},[_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\",\"color\":\"primary\"},on:{\"click\":function($event){return _vm.$refs.dialog.save(_vm.date)}}},[_vm._v(\" OK \")])],1)],1)],1),_c('v-col',{attrs:{\"cols\":\"4\"}},[_c('v-autocomplete',{attrs:{\"items\":_vm.products,\"search-input\":_vm.search,\"hide-no-data\":\"\",\"hide-selected\":\"\",\"prepend-inner-icon\":\"mdi-shopping-search\",\"item-text\":\"title\",\"item-value\":\"_id\",\"label\":\"Product\",\"clearable\":\"\",\"placeholder\":\"Filter by product\"},on:{\"update:searchInput\":function($event){_vm.search=$event},\"update:search-input\":function($event){_vm.search=$event},\"change\":_vm.updateProductFilter},model:{value:(_vm.params.product),callback:function ($$v) {_vm.$set(_vm.params, \"product\", $$v)},expression:\"params.product\"}})],1)],1),_c('v-chart',{staticClass:\"chart\",staticStyle:{\"padding\":\"20px\"},attrs:{\"option\":_vm.salesChartOptions}}),(_vm.loading)?_c('v-progress-linear',{attrs:{\"indeterminate\":\"\",\"color\":\"yellow darken-2\"}}):_vm._e()],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export function create(x, y) {\n if (x == null) {\n x = 0;\n }\n if (y == null) {\n y = 0;\n }\n return [x, y];\n}\nexport function copy(out, v) {\n out[0] = v[0];\n out[1] = v[1];\n return out;\n}\nexport function clone(v) {\n return [v[0], v[1]];\n}\nexport function set(out, a, b) {\n out[0] = a;\n out[1] = b;\n return out;\n}\nexport function add(out, v1, v2) {\n out[0] = v1[0] + v2[0];\n out[1] = v1[1] + v2[1];\n return out;\n}\nexport function scaleAndAdd(out, v1, v2, a) {\n out[0] = v1[0] + v2[0] * a;\n out[1] = v1[1] + v2[1] * a;\n return out;\n}\nexport function sub(out, v1, v2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n return out;\n}\nexport function len(v) {\n return Math.sqrt(lenSquare(v));\n}\nexport var length = len;\nexport function lenSquare(v) {\n return v[0] * v[0] + v[1] * v[1];\n}\nexport var lengthSquare = lenSquare;\nexport function mul(out, v1, v2) {\n out[0] = v1[0] * v2[0];\n out[1] = v1[1] * v2[1];\n return out;\n}\nexport function div(out, v1, v2) {\n out[0] = v1[0] / v2[0];\n out[1] = v1[1] / v2[1];\n return out;\n}\nexport function dot(v1, v2) {\n return v1[0] * v2[0] + v1[1] * v2[1];\n}\nexport function scale(out, v, s) {\n out[0] = v[0] * s;\n out[1] = v[1] * s;\n return out;\n}\nexport function normalize(out, v) {\n var d = len(v);\n if (d === 0) {\n out[0] = 0;\n out[1] = 0;\n }\n else {\n out[0] = v[0] / d;\n out[1] = v[1] / d;\n }\n return out;\n}\nexport function distance(v1, v2) {\n return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]));\n}\nexport var dist = distance;\nexport function distanceSquare(v1, v2) {\n return (v1[0] - v2[0]) * (v1[0] - v2[0])\n + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nexport var distSquare = distanceSquare;\nexport function negate(out, v) {\n out[0] = -v[0];\n out[1] = -v[1];\n return out;\n}\nexport function lerp(out, v1, v2, t) {\n out[0] = v1[0] + t * (v2[0] - v1[0]);\n out[1] = v1[1] + t * (v2[1] - v1[1]);\n return out;\n}\nexport function applyTransform(out, v, m) {\n var x = v[0];\n var y = v[1];\n out[0] = m[0] * x + m[2] * y + m[4];\n out[1] = m[1] * x + m[3] * y + m[5];\n return out;\n}\nexport function min(out, v1, v2) {\n out[0] = Math.min(v1[0], v2[0]);\n out[1] = Math.min(v1[1], v2[1]);\n return out;\n}\nexport function max(out, v1, v2) {\n out[0] = Math.max(v1[0], v2[0]);\n out[1] = Math.max(v1[1], v2[1]);\n return out;\n}\n","var Param = (function () {\n function Param(target, e) {\n this.target = target;\n this.topTarget = e && e.topTarget;\n }\n return Param;\n}());\nvar Draggable = (function () {\n function Draggable(handler) {\n this.handler = handler;\n handler.on('mousedown', this._dragStart, this);\n handler.on('mousemove', this._drag, this);\n handler.on('mouseup', this._dragEnd, this);\n }\n Draggable.prototype._dragStart = function (e) {\n var draggingTarget = e.target;\n while (draggingTarget && !draggingTarget.draggable) {\n draggingTarget = draggingTarget.parent || draggingTarget.__hostTarget;\n }\n if (draggingTarget) {\n this._draggingTarget = draggingTarget;\n draggingTarget.dragging = true;\n this._x = e.offsetX;\n this._y = e.offsetY;\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragstart', e.event);\n }\n };\n Draggable.prototype._drag = function (e) {\n var draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n var x = e.offsetX;\n var y = e.offsetY;\n var dx = x - this._x;\n var dy = y - this._y;\n this._x = x;\n this._y = y;\n draggingTarget.drift(dx, dy, e);\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'drag', e.event);\n var dropTarget = this.handler.findHover(x, y, draggingTarget).target;\n var lastDropTarget = this._dropTarget;\n this._dropTarget = dropTarget;\n if (draggingTarget !== dropTarget) {\n if (lastDropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(new Param(lastDropTarget, e), 'dragleave', e.event);\n }\n if (dropTarget && dropTarget !== lastDropTarget) {\n this.handler.dispatchToElement(new Param(dropTarget, e), 'dragenter', e.event);\n }\n }\n }\n };\n Draggable.prototype._dragEnd = function (e) {\n var draggingTarget = this._draggingTarget;\n if (draggingTarget) {\n draggingTarget.dragging = false;\n }\n this.handler.dispatchToElement(new Param(draggingTarget, e), 'dragend', e.event);\n if (this._dropTarget) {\n this.handler.dispatchToElement(new Param(this._dropTarget, e), 'drop', e.event);\n }\n this._draggingTarget = null;\n this._dropTarget = null;\n };\n return Draggable;\n}());\nexport default Draggable;\n","var Eventful = (function () {\n function Eventful(eventProcessors) {\n if (eventProcessors) {\n this._$eventProcessor = eventProcessors;\n }\n }\n Eventful.prototype.on = function (event, query, handler, context) {\n if (!this._$handlers) {\n this._$handlers = {};\n }\n var _h = this._$handlers;\n if (typeof query === 'function') {\n context = handler;\n handler = query;\n query = null;\n }\n if (!handler || !event) {\n return this;\n }\n var eventProcessor = this._$eventProcessor;\n if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n query = eventProcessor.normalizeQuery(query);\n }\n if (!_h[event]) {\n _h[event] = [];\n }\n for (var i = 0; i < _h[event].length; i++) {\n if (_h[event][i].h === handler) {\n return this;\n }\n }\n var wrap = {\n h: handler,\n query: query,\n ctx: (context || this),\n callAtLast: handler.zrEventfulCallAtLast\n };\n var lastIndex = _h[event].length - 1;\n var lastWrap = _h[event][lastIndex];\n (lastWrap && lastWrap.callAtLast)\n ? _h[event].splice(lastIndex, 0, wrap)\n : _h[event].push(wrap);\n return this;\n };\n Eventful.prototype.isSilent = function (eventName) {\n var _h = this._$handlers;\n return !_h || !_h[eventName] || !_h[eventName].length;\n };\n Eventful.prototype.off = function (eventType, handler) {\n var _h = this._$handlers;\n if (!_h) {\n return this;\n }\n if (!eventType) {\n this._$handlers = {};\n return this;\n }\n if (handler) {\n if (_h[eventType]) {\n var newList = [];\n for (var i = 0, l = _h[eventType].length; i < l; i++) {\n if (_h[eventType][i].h !== handler) {\n newList.push(_h[eventType][i]);\n }\n }\n _h[eventType] = newList;\n }\n if (_h[eventType] && _h[eventType].length === 0) {\n delete _h[eventType];\n }\n }\n else {\n delete _h[eventType];\n }\n return this;\n };\n Eventful.prototype.trigger = function (eventType) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!this._$handlers) {\n return this;\n }\n var _h = this._$handlers[eventType];\n var eventProcessor = this._$eventProcessor;\n if (_h) {\n var argLen = args.length;\n var len = _h.length;\n for (var i = 0; i < len; i++) {\n var hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(eventType, hItem.query)) {\n continue;\n }\n switch (argLen) {\n case 0:\n hItem.h.call(hItem.ctx);\n break;\n case 1:\n hItem.h.call(hItem.ctx, args[0]);\n break;\n case 2:\n hItem.h.call(hItem.ctx, args[0], args[1]);\n break;\n default:\n hItem.h.apply(hItem.ctx, args);\n break;\n }\n }\n }\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(eventType);\n return this;\n };\n Eventful.prototype.triggerWithContext = function (type) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!this._$handlers) {\n return this;\n }\n var _h = this._$handlers[type];\n var eventProcessor = this._$eventProcessor;\n if (_h) {\n var argLen = args.length;\n var ctx = args[argLen - 1];\n var len = _h.length;\n for (var i = 0; i < len; i++) {\n var hItem = _h[i];\n if (eventProcessor\n && eventProcessor.filter\n && hItem.query != null\n && !eventProcessor.filter(type, hItem.query)) {\n continue;\n }\n switch (argLen) {\n case 0:\n hItem.h.call(ctx);\n break;\n case 1:\n hItem.h.call(ctx, args[0]);\n break;\n case 2:\n hItem.h.call(ctx, args[0], args[1]);\n break;\n default:\n hItem.h.apply(ctx, args.slice(1, argLen - 1));\n break;\n }\n }\n }\n eventProcessor && eventProcessor.afterTrigger\n && eventProcessor.afterTrigger(type);\n return this;\n };\n return Eventful;\n}());\nexport default Eventful;\n","var LN2 = Math.log(2);\nfunction determinant(rows, rank, rowStart, rowMask, colMask, detCache) {\n var cacheKey = rowMask + '-' + colMask;\n var fullRank = rows.length;\n if (detCache.hasOwnProperty(cacheKey)) {\n return detCache[cacheKey];\n }\n if (rank === 1) {\n var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n return rows[rowStart][colStart];\n }\n var subRowMask = rowMask | (1 << rowStart);\n var subRowStart = rowStart + 1;\n while (rowMask & (1 << subRowStart)) {\n subRowStart++;\n }\n var sum = 0;\n for (var j = 0, colLocalIdx = 0; j < fullRank; j++) {\n var colTag = 1 << j;\n if (!(colTag & colMask)) {\n sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n colLocalIdx++;\n }\n }\n detCache[cacheKey] = sum;\n return sum;\n}\nexport function buildTransformer(src, dest) {\n var mA = [\n [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n ];\n var detCache = {};\n var det = determinant(mA, 8, 0, 0, 0, detCache);\n if (det === 0) {\n return;\n }\n var vh = [];\n for (var i = 0; i < 8; i++) {\n for (var j = 0; j < 8; j++) {\n vh[j] == null && (vh[j] = 0);\n vh[j] += ((i + j) % 2 ? -1 : 1)\n * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n / det * dest[i];\n }\n }\n return function (out, srcPointX, srcPointY) {\n var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n };\n}\n","import env from './env.js';\nimport { buildTransformer } from './fourPointsTransform.js';\nvar EVENT_SAVED_PROP = '___zrEVENTSAVED';\nvar _calcOut = [];\nexport function transformLocalCoord(out, elFrom, elTarget, inX, inY) {\n return transformCoordWithViewport(_calcOut, elFrom, inX, inY, true)\n && transformCoordWithViewport(out, elTarget, _calcOut[0], _calcOut[1]);\n}\nexport function transformCoordWithViewport(out, el, inX, inY, inverse) {\n if (el.getBoundingClientRect && env.domSupported && !isCanvasEl(el)) {\n var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {});\n var markers = prepareCoordMarkers(el, saved);\n var transformer = preparePointerTransformer(markers, saved, inverse);\n if (transformer) {\n transformer(out, inX, inY);\n return true;\n }\n }\n return false;\n}\nfunction prepareCoordMarkers(el, saved) {\n var markers = saved.markers;\n if (markers) {\n return markers;\n }\n markers = saved.markers = [];\n var propLR = ['left', 'right'];\n var propTB = ['top', 'bottom'];\n for (var i = 0; i < 4; i++) {\n var marker = document.createElement('div');\n var stl = marker.style;\n var idxLR = i % 2;\n var idxTB = (i >> 1) % 2;\n stl.cssText = [\n 'position: absolute',\n 'visibility: hidden',\n 'padding: 0',\n 'margin: 0',\n 'border-width: 0',\n 'user-select: none',\n 'width:0',\n 'height:0',\n propLR[idxLR] + ':0',\n propTB[idxTB] + ':0',\n propLR[1 - idxLR] + ':auto',\n propTB[1 - idxTB] + ':auto',\n ''\n ].join('!important;');\n el.appendChild(marker);\n markers.push(marker);\n }\n return markers;\n}\nfunction preparePointerTransformer(markers, saved, inverse) {\n var transformerName = inverse ? 'invTrans' : 'trans';\n var transformer = saved[transformerName];\n var oldSrcCoords = saved.srcCoords;\n var srcCoords = [];\n var destCoords = [];\n var oldCoordTheSame = true;\n for (var i = 0; i < 4; i++) {\n var rect = markers[i].getBoundingClientRect();\n var ii = 2 * i;\n var x = rect.left;\n var y = rect.top;\n srcCoords.push(x, y);\n oldCoordTheSame = oldCoordTheSame && oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n }\n return (oldCoordTheSame && transformer)\n ? transformer\n : (saved.srcCoords = srcCoords,\n saved[transformerName] = inverse\n ? buildTransformer(destCoords, srcCoords)\n : buildTransformer(srcCoords, destCoords));\n}\nexport function isCanvasEl(el) {\n return el.nodeName.toUpperCase() === 'CANVAS';\n}\nvar replaceReg = /([&<>\"'])/g;\nvar replaceMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n '\\'': '''\n};\nexport function encodeHTML(source) {\n return source == null\n ? ''\n : (source + '').replace(replaceReg, function (str, c) {\n return replaceMap[c];\n });\n}\n","import Eventful from './Eventful.js';\nimport env from './env.js';\nimport { isCanvasEl, transformCoordWithViewport } from './dom.js';\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nvar _calcOut = [];\nvar firefoxNotSupportOffsetXY = env.browser.firefox\n && +env.browser.version.split('.')[0] < 39;\nexport function clientToLocal(el, e, out, calculate) {\n out = out || {};\n if (calculate) {\n calculateZrXY(el, e, out);\n }\n else if (firefoxNotSupportOffsetXY\n && e.layerX != null\n && e.layerX !== e.offsetX) {\n out.zrX = e.layerX;\n out.zrY = e.layerY;\n }\n else if (e.offsetX != null) {\n out.zrX = e.offsetX;\n out.zrY = e.offsetY;\n }\n else {\n calculateZrXY(el, e, out);\n }\n return out;\n}\nfunction calculateZrXY(el, e, out) {\n if (env.domSupported && el.getBoundingClientRect) {\n var ex = e.clientX;\n var ey = e.clientY;\n if (isCanvasEl(el)) {\n var box = el.getBoundingClientRect();\n out.zrX = ex - box.left;\n out.zrY = ey - box.top;\n return;\n }\n else {\n if (transformCoordWithViewport(_calcOut, el, ex, ey)) {\n out.zrX = _calcOut[0];\n out.zrY = _calcOut[1];\n return;\n }\n }\n }\n out.zrX = out.zrY = 0;\n}\nexport function getNativeEvent(e) {\n return e\n || window.event;\n}\nexport function normalizeEvent(el, e, calculate) {\n e = getNativeEvent(e);\n if (e.zrX != null) {\n return e;\n }\n var eventType = e.type;\n var isTouch = eventType && eventType.indexOf('touch') >= 0;\n if (!isTouch) {\n clientToLocal(el, e, e, calculate);\n var wheelDelta = getWheelDeltaMayPolyfill(e);\n e.zrDelta = wheelDelta ? wheelDelta / 120 : -(e.detail || 0) / 3;\n }\n else {\n var touch = eventType !== 'touchend'\n ? e.targetTouches[0]\n : e.changedTouches[0];\n touch && clientToLocal(el, touch, e, calculate);\n }\n var button = e.button;\n if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n }\n return e;\n}\nfunction getWheelDeltaMayPolyfill(e) {\n var rawWheelDelta = e.wheelDelta;\n if (rawWheelDelta) {\n return rawWheelDelta;\n }\n var deltaX = e.deltaX;\n var deltaY = e.deltaY;\n if (deltaX == null || deltaY == null) {\n return rawWheelDelta;\n }\n var delta = deltaY !== 0 ? Math.abs(deltaY) : Math.abs(deltaX);\n var sign = deltaY > 0 ? -1\n : deltaY < 0 ? 1\n : deltaX > 0 ? -1\n : 1;\n return 3 * delta * sign;\n}\nexport function addEventListener(el, name, handler, opt) {\n el.addEventListener(name, handler, opt);\n}\nexport function removeEventListener(el, name, handler, opt) {\n el.removeEventListener(name, handler, opt);\n}\nexport var stop = function (e) {\n e.preventDefault();\n e.stopPropagation();\n e.cancelBubble = true;\n};\nexport function isMiddleOrRightButtonOnMouseUpDown(e) {\n return e.which === 2 || e.which === 3;\n}\nexport { Eventful as Dispatcher };\n","import * as eventUtil from './event.js';\nvar GestureMgr = (function () {\n function GestureMgr() {\n this._track = [];\n }\n GestureMgr.prototype.recognize = function (event, target, root) {\n this._doTrack(event, target, root);\n return this._recognize(event);\n };\n GestureMgr.prototype.clear = function () {\n this._track.length = 0;\n return this;\n };\n GestureMgr.prototype._doTrack = function (event, target, root) {\n var touches = event.touches;\n if (!touches) {\n return;\n }\n var trackItem = {\n points: [],\n touches: [],\n target: target,\n event: event\n };\n for (var i = 0, len = touches.length; i < len; i++) {\n var touch = touches[i];\n var pos = eventUtil.clientToLocal(root, touch, {});\n trackItem.points.push([pos.zrX, pos.zrY]);\n trackItem.touches.push(touch);\n }\n this._track.push(trackItem);\n };\n GestureMgr.prototype._recognize = function (event) {\n for (var eventName in recognizers) {\n if (recognizers.hasOwnProperty(eventName)) {\n var gestureInfo = recognizers[eventName](this._track, event);\n if (gestureInfo) {\n return gestureInfo;\n }\n }\n }\n };\n return GestureMgr;\n}());\nexport { GestureMgr };\nfunction dist(pointPair) {\n var dx = pointPair[1][0] - pointPair[0][0];\n var dy = pointPair[1][1] - pointPair[0][1];\n return Math.sqrt(dx * dx + dy * dy);\n}\nfunction center(pointPair) {\n return [\n (pointPair[0][0] + pointPair[1][0]) / 2,\n (pointPair[0][1] + pointPair[1][1]) / 2\n ];\n}\nvar recognizers = {\n pinch: function (tracks, event) {\n var trackLen = tracks.length;\n if (!trackLen) {\n return;\n }\n var pinchEnd = (tracks[trackLen - 1] || {}).points;\n var pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd;\n if (pinchPre\n && pinchPre.length > 1\n && pinchEnd\n && pinchEnd.length > 1) {\n var pinchScale = dist(pinchEnd) / dist(pinchPre);\n !isFinite(pinchScale) && (pinchScale = 1);\n event.pinchScale = pinchScale;\n var pinchCenter = center(pinchEnd);\n event.pinchX = pinchCenter[0];\n event.pinchY = pinchCenter[1];\n return {\n type: 'pinch',\n target: tracks[0].target,\n event: event\n };\n }\n }\n};\n","export function create() {\n return [1, 0, 0, 1, 0, 0];\n}\nexport function 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}\nexport function copy(out, m) {\n out[0] = m[0];\n out[1] = m[1];\n out[2] = m[2];\n out[3] = m[3];\n out[4] = m[4];\n out[5] = m[5];\n return out;\n}\nexport function mul(out, m1, m2) {\n var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n out[0] = out0;\n out[1] = out1;\n out[2] = out2;\n out[3] = out3;\n out[4] = out4;\n out[5] = out5;\n return out;\n}\nexport function translate(out, a, v) {\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] + v[0];\n out[5] = a[5] + v[1];\n return out;\n}\nexport function rotate(out, a, rad, pivot) {\n if (pivot === void 0) { pivot = [0, 0]; }\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var st = Math.sin(rad);\n var ct = Math.cos(rad);\n out[0] = aa * ct + ab * st;\n out[1] = -aa * st + ab * ct;\n out[2] = ac * ct + ad * st;\n out[3] = -ac * st + ct * ad;\n out[4] = ct * (atx - pivot[0]) + st * (aty - pivot[1]) + pivot[0];\n out[5] = ct * (aty - pivot[1]) - st * (atx - pivot[0]) + pivot[1];\n return out;\n}\nexport function scale(out, a, v) {\n var vx = v[0];\n var vy = v[1];\n out[0] = a[0] * vx;\n out[1] = a[1] * vy;\n out[2] = a[2] * vx;\n out[3] = a[3] * vy;\n out[4] = a[4] * vx;\n out[5] = a[5] * vy;\n return out;\n}\nexport function invert(out, a) {\n var aa = a[0];\n var ac = a[2];\n var atx = a[4];\n var ab = a[1];\n var ad = a[3];\n var aty = a[5];\n var det = aa * ad - ab * ac;\n if (!det) {\n return null;\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}\nexport function clone(a) {\n var b = create();\n copy(b, a);\n return b;\n}\n","var Point = (function () {\n function Point(x, y) {\n this.x = x || 0;\n this.y = y || 0;\n }\n Point.prototype.copy = function (other) {\n this.x = other.x;\n this.y = other.y;\n return this;\n };\n Point.prototype.clone = function () {\n return new Point(this.x, this.y);\n };\n Point.prototype.set = function (x, y) {\n this.x = x;\n this.y = y;\n return this;\n };\n Point.prototype.equal = function (other) {\n return other.x === this.x && other.y === this.y;\n };\n Point.prototype.add = function (other) {\n this.x += other.x;\n this.y += other.y;\n return this;\n };\n Point.prototype.scale = function (scalar) {\n this.x *= scalar;\n this.y *= scalar;\n };\n Point.prototype.scaleAndAdd = function (other, scalar) {\n this.x += other.x * scalar;\n this.y += other.y * scalar;\n };\n Point.prototype.sub = function (other) {\n this.x -= other.x;\n this.y -= other.y;\n return this;\n };\n Point.prototype.dot = function (other) {\n return this.x * other.x + this.y * other.y;\n };\n Point.prototype.len = function () {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n };\n Point.prototype.lenSquare = function () {\n return this.x * this.x + this.y * this.y;\n };\n Point.prototype.normalize = function () {\n var len = this.len();\n this.x /= len;\n this.y /= len;\n return this;\n };\n Point.prototype.distance = function (other) {\n var dx = this.x - other.x;\n var dy = this.y - other.y;\n return Math.sqrt(dx * dx + dy * dy);\n };\n Point.prototype.distanceSquare = function (other) {\n var dx = this.x - other.x;\n var dy = this.y - other.y;\n return dx * dx + dy * dy;\n };\n Point.prototype.negate = function () {\n this.x = -this.x;\n this.y = -this.y;\n return this;\n };\n Point.prototype.transform = function (m) {\n if (!m) {\n return;\n }\n var x = this.x;\n var y = this.y;\n this.x = m[0] * x + m[2] * y + m[4];\n this.y = m[1] * x + m[3] * y + m[5];\n return this;\n };\n Point.prototype.toArray = function (out) {\n out[0] = this.x;\n out[1] = this.y;\n return out;\n };\n Point.prototype.fromArray = function (input) {\n this.x = input[0];\n this.y = input[1];\n };\n Point.set = function (p, x, y) {\n p.x = x;\n p.y = y;\n };\n Point.copy = function (p, p2) {\n p.x = p2.x;\n p.y = p2.y;\n };\n Point.len = function (p) {\n return Math.sqrt(p.x * p.x + p.y * p.y);\n };\n Point.lenSquare = function (p) {\n return p.x * p.x + p.y * p.y;\n };\n Point.dot = function (p0, p1) {\n return p0.x * p1.x + p0.y * p1.y;\n };\n Point.add = function (out, p0, p1) {\n out.x = p0.x + p1.x;\n out.y = p0.y + p1.y;\n };\n Point.sub = function (out, p0, p1) {\n out.x = p0.x - p1.x;\n out.y = p0.y - p1.y;\n };\n Point.scale = function (out, p0, scalar) {\n out.x = p0.x * scalar;\n out.y = p0.y * scalar;\n };\n Point.scaleAndAdd = function (out, p0, p1, scalar) {\n out.x = p0.x + p1.x * scalar;\n out.y = p0.y + p1.y * scalar;\n };\n Point.lerp = function (out, p0, p1, t) {\n var onet = 1 - t;\n out.x = onet * p0.x + t * p1.x;\n out.y = onet * p0.y + t * p1.y;\n };\n return Point;\n}());\nexport default Point;\n","import * as matrix from './matrix.js';\nimport Point from './Point.js';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar lt = new Point();\nvar rb = new Point();\nvar lb = new Point();\nvar rt = new Point();\nvar minTv = new Point();\nvar maxTv = new Point();\nvar BoundingRect = (function () {\n function BoundingRect(x, y, width, height) {\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n BoundingRect.prototype.union = function (other) {\n var x = mathMin(other.x, this.x);\n var y = mathMin(other.y, this.y);\n if (isFinite(this.x) && isFinite(this.width)) {\n this.width = mathMax(other.x + other.width, this.x + this.width) - x;\n }\n else {\n this.width = other.width;\n }\n if (isFinite(this.y) && isFinite(this.height)) {\n this.height = mathMax(other.y + other.height, this.y + this.height) - y;\n }\n else {\n this.height = other.height;\n }\n this.x = x;\n this.y = y;\n };\n BoundingRect.prototype.applyTransform = function (m) {\n BoundingRect.applyTransform(this, this, m);\n };\n BoundingRect.prototype.calculateTransform = function (b) {\n var a = this;\n var sx = b.width / a.width;\n var sy = b.height / a.height;\n var m = matrix.create();\n matrix.translate(m, m, [-a.x, -a.y]);\n matrix.scale(m, m, [sx, sy]);\n matrix.translate(m, m, [b.x, b.y]);\n return m;\n };\n BoundingRect.prototype.intersect = function (b, mtv) {\n if (!b) {\n return false;\n }\n if (!(b instanceof BoundingRect)) {\n b = BoundingRect.create(b);\n }\n var a = this;\n var ax0 = a.x;\n var ax1 = a.x + a.width;\n var ay0 = a.y;\n var ay1 = a.y + a.height;\n var bx0 = b.x;\n var bx1 = b.x + b.width;\n var by0 = b.y;\n var by1 = b.y + b.height;\n var overlap = !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n if (mtv) {\n var dMin = Infinity;\n var dMax = 0;\n var d0 = Math.abs(ax1 - bx0);\n var d1 = Math.abs(bx1 - ax0);\n var d2 = Math.abs(ay1 - by0);\n var d3 = Math.abs(by1 - ay0);\n var dx = Math.min(d0, d1);\n var dy = Math.min(d2, d3);\n if (ax1 < bx0 || bx1 < ax0) {\n if (dx > dMax) {\n dMax = dx;\n if (d0 < d1) {\n Point.set(maxTv, -d0, 0);\n }\n else {\n Point.set(maxTv, d1, 0);\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d0 < d1) {\n Point.set(minTv, d0, 0);\n }\n else {\n Point.set(minTv, -d1, 0);\n }\n }\n }\n if (ay1 < by0 || by1 < ay0) {\n if (dy > dMax) {\n dMax = dy;\n if (d2 < d3) {\n Point.set(maxTv, 0, -d2);\n }\n else {\n Point.set(maxTv, 0, d3);\n }\n }\n }\n else {\n if (dx < dMin) {\n dMin = dx;\n if (d2 < d3) {\n Point.set(minTv, 0, d2);\n }\n else {\n Point.set(minTv, 0, -d3);\n }\n }\n }\n }\n if (mtv) {\n Point.copy(mtv, overlap ? minTv : maxTv);\n }\n return overlap;\n };\n BoundingRect.prototype.contain = function (x, y) {\n var rect = this;\n return x >= rect.x\n && x <= (rect.x + rect.width)\n && y >= rect.y\n && y <= (rect.y + rect.height);\n };\n BoundingRect.prototype.clone = function () {\n return new BoundingRect(this.x, this.y, this.width, this.height);\n };\n BoundingRect.prototype.copy = function (other) {\n BoundingRect.copy(this, other);\n };\n BoundingRect.prototype.plain = function () {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height\n };\n };\n BoundingRect.prototype.isFinite = function () {\n return isFinite(this.x)\n && isFinite(this.y)\n && isFinite(this.width)\n && isFinite(this.height);\n };\n BoundingRect.prototype.isZero = function () {\n return this.width === 0 || this.height === 0;\n };\n BoundingRect.create = function (rect) {\n return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n };\n BoundingRect.copy = function (target, source) {\n target.x = source.x;\n target.y = source.y;\n target.width = source.width;\n target.height = source.height;\n };\n BoundingRect.applyTransform = function (target, source, m) {\n if (!m) {\n if (target !== source) {\n BoundingRect.copy(target, source);\n }\n return;\n }\n if (m[1] < 1e-5 && m[1] > -1e-5 && m[2] < 1e-5 && m[2] > -1e-5) {\n var sx = m[0];\n var sy = m[3];\n var tx = m[4];\n var ty = m[5];\n target.x = source.x * sx + tx;\n target.y = source.y * sy + ty;\n target.width = source.width * sx;\n target.height = source.height * sy;\n if (target.width < 0) {\n target.x += target.width;\n target.width = -target.width;\n }\n if (target.height < 0) {\n target.y += target.height;\n target.height = -target.height;\n }\n return;\n }\n lt.x = lb.x = source.x;\n lt.y = rt.y = source.y;\n rb.x = rt.x = source.x + source.width;\n rb.y = lb.y = source.y + source.height;\n lt.transform(m);\n rt.transform(m);\n rb.transform(m);\n lb.transform(m);\n target.x = mathMin(lt.x, rb.x, lb.x, rt.x);\n target.y = mathMin(lt.y, rb.y, lb.y, rt.y);\n var maxX = mathMax(lt.x, rb.x, lb.x, rt.x);\n var maxY = mathMax(lt.y, rb.y, lb.y, rt.y);\n target.width = maxX - target.x;\n target.height = maxY - target.y;\n };\n return BoundingRect;\n}());\nexport default BoundingRect;\n","import { __extends } from \"tslib\";\nimport * as util from './core/util.js';\nimport * as vec2 from './core/vector.js';\nimport Draggable from './mixin/Draggable.js';\nimport Eventful from './core/Eventful.js';\nimport * as eventTool from './core/event.js';\nimport { GestureMgr } from './core/GestureMgr.js';\nimport BoundingRect from './core/BoundingRect.js';\nvar SILENT = 'silent';\nfunction makeEventPacket(eveType, targetInfo, event) {\n return {\n type: eveType,\n event: event,\n target: targetInfo.target,\n topTarget: targetInfo.topTarget,\n cancelBubble: false,\n offsetX: event.zrX,\n offsetY: event.zrY,\n gestureEvent: event.gestureEvent,\n pinchX: event.pinchX,\n pinchY: event.pinchY,\n pinchScale: event.pinchScale,\n wheelDelta: event.zrDelta,\n zrByTouch: event.zrByTouch,\n which: event.which,\n stop: stopEvent\n };\n}\nfunction stopEvent() {\n eventTool.stop(this.event);\n}\nvar EmptyProxy = (function (_super) {\n __extends(EmptyProxy, _super);\n function EmptyProxy() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.handler = null;\n return _this;\n }\n EmptyProxy.prototype.dispose = function () { };\n EmptyProxy.prototype.setCursor = function () { };\n return EmptyProxy;\n}(Eventful));\nvar HoveredResult = (function () {\n function HoveredResult(x, y) {\n this.x = x;\n this.y = y;\n }\n return HoveredResult;\n}());\nvar handlerNames = [\n 'click', 'dblclick', 'mousewheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar Handler = (function (_super) {\n __extends(Handler, _super);\n function Handler(storage, painter, proxy, painterRoot, pointerSize) {\n var _this = _super.call(this) || this;\n _this._hovered = new HoveredResult(0, 0);\n _this.storage = storage;\n _this.painter = painter;\n _this.painterRoot = painterRoot;\n _this._pointerSize = pointerSize;\n proxy = proxy || new EmptyProxy();\n _this.proxy = null;\n _this.setHandlerProxy(proxy);\n _this._draggingMgr = new Draggable(_this);\n return _this;\n }\n Handler.prototype.setHandlerProxy = function (proxy) {\n if (this.proxy) {\n this.proxy.dispose();\n }\n if (proxy) {\n util.each(handlerNames, function (name) {\n proxy.on && proxy.on(name, this[name], this);\n }, this);\n proxy.handler = this;\n }\n this.proxy = proxy;\n };\n Handler.prototype.mousemove = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var lastHovered = this._hovered;\n var lastHoveredTarget = lastHovered.target;\n if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n lastHoveredTarget = lastHovered.target;\n }\n var hovered = this._hovered = isOutside ? new HoveredResult(x, y) : this.findHover(x, y);\n var hoveredTarget = hovered.target;\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(lastHovered, 'mouseout', event);\n }\n this.dispatchToElement(hovered, 'mousemove', event);\n if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n this.dispatchToElement(hovered, 'mouseover', event);\n }\n };\n Handler.prototype.mouseout = function (event) {\n var eventControl = event.zrEventControl;\n if (eventControl !== 'only_globalout') {\n this.dispatchToElement(this._hovered, 'mouseout', event);\n }\n if (eventControl !== 'no_globalout') {\n this.trigger('globalout', { type: 'globalout', event: event });\n }\n };\n Handler.prototype.resize = function () {\n this._hovered = new HoveredResult(0, 0);\n };\n Handler.prototype.dispatch = function (eventName, eventArgs) {\n var handler = this[eventName];\n handler && handler.call(this, eventArgs);\n };\n Handler.prototype.dispose = function () {\n this.proxy.dispose();\n this.storage = null;\n this.proxy = null;\n this.painter = null;\n };\n Handler.prototype.setCursorStyle = function (cursorStyle) {\n var proxy = this.proxy;\n proxy.setCursor && proxy.setCursor(cursorStyle);\n };\n Handler.prototype.dispatchToElement = function (targetInfo, eventName, event) {\n targetInfo = targetInfo || {};\n var el = targetInfo.target;\n if (el && el.silent) {\n return;\n }\n var eventKey = ('on' + eventName);\n var eventPacket = makeEventPacket(eventName, targetInfo, event);\n while (el) {\n el[eventKey]\n && (eventPacket.cancelBubble = !!el[eventKey].call(el, eventPacket));\n el.trigger(eventName, eventPacket);\n el = el.__hostTarget ? el.__hostTarget : el.parent;\n if (eventPacket.cancelBubble) {\n break;\n }\n }\n if (!eventPacket.cancelBubble) {\n this.trigger(eventName, eventPacket);\n if (this.painter && this.painter.eachOtherLayer) {\n this.painter.eachOtherLayer(function (layer) {\n if (typeof (layer[eventKey]) === 'function') {\n layer[eventKey].call(layer, eventPacket);\n }\n if (layer.trigger) {\n layer.trigger(eventName, eventPacket);\n }\n });\n }\n }\n };\n Handler.prototype.findHover = function (x, y, exclude) {\n var list = this.storage.getDisplayList();\n var out = new HoveredResult(x, y);\n setHoverTarget(list, out, x, y, exclude);\n if (this._pointerSize && !out.target) {\n var candidates = [];\n var pointerSize = this._pointerSize;\n var targetSizeHalf = pointerSize / 2;\n var pointerRect = new BoundingRect(x - targetSizeHalf, y - targetSizeHalf, pointerSize, pointerSize);\n for (var i = list.length - 1; i >= 0; i--) {\n var el = list[i];\n if (el !== exclude\n && !el.ignore\n && !el.ignoreCoarsePointer\n && (!el.parent || !el.parent.ignoreCoarsePointer)) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n if (tmpRect.intersect(pointerRect)) {\n candidates.push(el);\n }\n }\n }\n if (candidates.length) {\n var rStep = 4;\n var thetaStep = Math.PI / 12;\n var PI2 = Math.PI * 2;\n for (var r = 0; r < targetSizeHalf; r += rStep) {\n for (var theta = 0; theta < PI2; theta += thetaStep) {\n var x1 = x + r * Math.cos(theta);\n var y1 = y + r * Math.sin(theta);\n setHoverTarget(candidates, out, x1, y1, exclude);\n if (out.target) {\n return out;\n }\n }\n }\n }\n }\n return out;\n };\n Handler.prototype.processGesture = function (event, stage) {\n if (!this._gestureMgr) {\n this._gestureMgr = new GestureMgr();\n }\n var gestureMgr = this._gestureMgr;\n stage === 'start' && gestureMgr.clear();\n var gestureInfo = gestureMgr.recognize(event, this.findHover(event.zrX, event.zrY, null).target, this.proxy.dom);\n stage === 'end' && gestureMgr.clear();\n if (gestureInfo) {\n var type = gestureInfo.type;\n event.gestureEvent = type;\n var res = new HoveredResult();\n res.target = gestureInfo.target;\n this.dispatchToElement(res, type, gestureInfo.event);\n }\n };\n return Handler;\n}(Eventful));\nutil.each(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n Handler.prototype[name] = function (event) {\n var x = event.zrX;\n var y = event.zrY;\n var isOutside = isOutsideBoundary(this, x, y);\n var hovered;\n var hoveredTarget;\n if (name !== 'mouseup' || !isOutside) {\n hovered = this.findHover(x, y);\n hoveredTarget = hovered.target;\n }\n if (name === 'mousedown') {\n this._downEl = hoveredTarget;\n this._downPoint = [event.zrX, event.zrY];\n this._upEl = hoveredTarget;\n }\n else if (name === 'mouseup') {\n this._upEl = hoveredTarget;\n }\n else if (name === 'click') {\n if (this._downEl !== this._upEl\n || !this._downPoint\n || vec2.dist(this._downPoint, [event.zrX, event.zrY]) > 4) {\n return;\n }\n this._downPoint = null;\n }\n this.dispatchToElement(hovered, name, event);\n };\n});\nfunction isHover(displayable, x, y) {\n if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n var el = displayable;\n var isSilent = void 0;\n var ignoreClip = false;\n while (el) {\n if (el.ignoreClip) {\n ignoreClip = true;\n }\n if (!ignoreClip) {\n var clipPath = el.getClipPath();\n if (clipPath && !clipPath.contain(x, y)) {\n return false;\n }\n }\n if (el.silent) {\n isSilent = true;\n }\n var hostEl = el.__hostTarget;\n el = hostEl ? hostEl : el.parent;\n }\n return isSilent ? SILENT : true;\n }\n return false;\n}\nfunction setHoverTarget(list, out, x, y, exclude) {\n for (var i = list.length - 1; i >= 0; i--) {\n var el = list[i];\n var hoverCheckResult = void 0;\n if (el !== exclude\n && !el.ignore\n && (hoverCheckResult = isHover(el, x, y))) {\n !out.topTarget && (out.topTarget = el);\n if (hoverCheckResult !== SILENT) {\n out.target = el;\n break;\n }\n }\n }\n}\nfunction isOutsideBoundary(handlerInstance, x, y) {\n var painter = handlerInstance.painter;\n return x < 0 || x > painter.getWidth() || y < 0 || y > painter.getHeight();\n}\nexport default Handler;\n","var DEFAULT_MIN_MERGE = 32;\nvar DEFAULT_MIN_GALLOPING = 7;\nfunction minRunLength(n) {\n var r = 0;\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n return n + r;\n}\nfunction makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n if (runHi === hi) {\n return 1;\n }\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n reverseRun(array, lo, runHi);\n }\n else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n return runHi - lo;\n}\nfunction reverseRun(array, lo, hi) {\n hi--;\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n}\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n for (; start < hi; start++) {\n var pivot = array[start];\n var left = lo;\n var right = start;\n var mid;\n while (left < right) {\n mid = left + right >>> 1;\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n }\n else {\n left = mid + 1;\n }\n }\n var n = start - left;\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n case 2:\n array[left + 2] = array[left + 1];\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n array[left] = pivot;\n }\n}\nfunction gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n }\n else {\n offset = m;\n }\n }\n return offset;\n}\nfunction gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n else {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n }\n else {\n lastOffset = m + 1;\n }\n }\n return offset;\n}\nfunction TimSort(array, compare) {\n var minGallop = DEFAULT_MIN_GALLOPING;\n var runStart;\n var runLength;\n var stackSize = 0;\n var tmp = [];\n runStart = [];\n runLength = [];\n function pushRun(_runStart, _runLength) {\n runStart[stackSize] = _runStart;\n runLength[stackSize] = _runLength;\n stackSize += 1;\n }\n function mergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n if ((n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1])\n || (n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1])) {\n if (runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n }\n else if (runLength[n] > runLength[n + 1]) {\n break;\n }\n mergeAt(n);\n }\n }\n function forceMergeRuns() {\n while (stackSize > 1) {\n var n = stackSize - 2;\n if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n n--;\n }\n mergeAt(n);\n }\n }\n function mergeAt(i) {\n var start1 = runStart[i];\n var length1 = runLength[i];\n var start2 = runStart[i + 1];\n var length2 = runLength[i + 1];\n runLength[i] = length1 + length2;\n if (i === stackSize - 3) {\n runStart[i + 1] = runStart[i + 2];\n runLength[i + 1] = runLength[i + 2];\n }\n stackSize--;\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n if (length1 === 0) {\n return;\n }\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n if (length2 === 0) {\n return;\n }\n if (length1 <= length2) {\n mergeLow(start1, length1, start2, length2);\n }\n else {\n mergeHigh(start1, length1, start2, length2);\n }\n }\n function mergeLow(start1, length1, start2, length2) {\n var i = 0;\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n var _minGallop = minGallop;\n var count1;\n var count2;\n var exit;\n while (1) {\n count1 = 0;\n count2 = 0;\n exit = false;\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n if (--length2 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n exit = true;\n break;\n }\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n if (--length1 === 1) {\n exit = true;\n break;\n }\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n _minGallop += 2;\n }\n minGallop = _minGallop;\n minGallop < 1 && (minGallop = 1);\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n }\n else if (length1 === 0) {\n throw new Error();\n }\n else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n }\n function mergeHigh(start1, length1, start2, length2) {\n var i = 0;\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n return;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n return;\n }\n var _minGallop = minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n }\n else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < _minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n array[dest--] = tmp[cursor2--];\n if (--length2 === 1) {\n exit = true;\n break;\n }\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n exit = true;\n break;\n }\n _minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (_minGallop < 0) {\n _minGallop = 0;\n }\n _minGallop += 2;\n }\n minGallop = _minGallop;\n if (minGallop < 1) {\n minGallop = 1;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n }\n else if (length2 === 0) {\n throw new Error();\n }\n else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n }\n return {\n mergeRuns: mergeRuns,\n forceMergeRuns: forceMergeRuns,\n pushRun: pushRun\n };\n}\nexport default function sort(array, compare, lo, hi) {\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n var remaining = hi - lo;\n if (remaining < 2) {\n return;\n }\n var runLength = 0;\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n var ts = TimSort(array, compare);\n var minRun = minRunLength(remaining);\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n ts.forceMergeRuns();\n}\n","export var REDRAW_BIT = 1;\nexport var STYLE_CHANGED_BIT = 2;\nexport var SHAPE_CHANGED_BIT = 4;\n","import * as util from './core/util.js';\nimport timsort from './core/timsort.js';\nimport { REDRAW_BIT } from './graphic/constants.js';\nvar invalidZErrorLogged = false;\nfunction logInvalidZError() {\n if (invalidZErrorLogged) {\n return;\n }\n invalidZErrorLogged = true;\n console.warn('z / z2 / zlevel of displayable is invalid, which may cause unexpected errors');\n}\nfunction shapeCompareFunc(a, b) {\n if (a.zlevel === b.zlevel) {\n if (a.z === b.z) {\n return a.z2 - b.z2;\n }\n return a.z - b.z;\n }\n return a.zlevel - b.zlevel;\n}\nvar Storage = (function () {\n function Storage() {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n this.displayableSortFunc = shapeCompareFunc;\n }\n Storage.prototype.traverse = function (cb, context) {\n for (var i = 0; i < this._roots.length; i++) {\n this._roots[i].traverse(cb, context);\n }\n };\n Storage.prototype.getDisplayList = function (update, includeIgnore) {\n includeIgnore = includeIgnore || false;\n var displayList = this._displayList;\n if (update || !displayList.length) {\n this.updateDisplayList(includeIgnore);\n }\n return displayList;\n };\n Storage.prototype.updateDisplayList = function (includeIgnore) {\n this._displayListLen = 0;\n var roots = this._roots;\n var displayList = this._displayList;\n for (var i = 0, len = roots.length; i < len; i++) {\n this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n }\n displayList.length = this._displayListLen;\n timsort(displayList, shapeCompareFunc);\n };\n Storage.prototype._updateAndAddDisplayable = function (el, clipPaths, includeIgnore) {\n if (el.ignore && !includeIgnore) {\n return;\n }\n el.beforeUpdate();\n el.update();\n el.afterUpdate();\n var userSetClipPath = el.getClipPath();\n if (el.ignoreClip) {\n clipPaths = null;\n }\n else if (userSetClipPath) {\n if (clipPaths) {\n clipPaths = clipPaths.slice();\n }\n else {\n clipPaths = [];\n }\n var currentClipPath = userSetClipPath;\n var parentClipPath = el;\n while (currentClipPath) {\n currentClipPath.parent = parentClipPath;\n currentClipPath.updateTransform();\n clipPaths.push(currentClipPath);\n parentClipPath = currentClipPath;\n currentClipPath = currentClipPath.getClipPath();\n }\n }\n if (el.childrenRef) {\n var children = el.childrenRef();\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (el.__dirty) {\n child.__dirty |= REDRAW_BIT;\n }\n this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n }\n el.__dirty = 0;\n }\n else {\n var disp = el;\n if (clipPaths && clipPaths.length) {\n disp.__clipPaths = clipPaths;\n }\n else if (disp.__clipPaths && disp.__clipPaths.length > 0) {\n disp.__clipPaths = [];\n }\n if (isNaN(disp.z)) {\n logInvalidZError();\n disp.z = 0;\n }\n if (isNaN(disp.z2)) {\n logInvalidZError();\n disp.z2 = 0;\n }\n if (isNaN(disp.zlevel)) {\n logInvalidZError();\n disp.zlevel = 0;\n }\n this._displayList[this._displayListLen++] = disp;\n }\n var decalEl = el.getDecalElement && el.getDecalElement();\n if (decalEl) {\n this._updateAndAddDisplayable(decalEl, clipPaths, includeIgnore);\n }\n var textGuide = el.getTextGuideLine();\n if (textGuide) {\n this._updateAndAddDisplayable(textGuide, clipPaths, includeIgnore);\n }\n var textEl = el.getTextContent();\n if (textEl) {\n this._updateAndAddDisplayable(textEl, clipPaths, includeIgnore);\n }\n };\n Storage.prototype.addRoot = function (el) {\n if (el.__zr && el.__zr.storage === this) {\n return;\n }\n this._roots.push(el);\n };\n Storage.prototype.delRoot = function (el) {\n if (el instanceof Array) {\n for (var i = 0, l = el.length; i < l; i++) {\n this.delRoot(el[i]);\n }\n return;\n }\n var idx = util.indexOf(this._roots, el);\n if (idx >= 0) {\n this._roots.splice(idx, 1);\n }\n };\n Storage.prototype.delAllRoots = function () {\n this._roots = [];\n this._displayList = [];\n this._displayListLen = 0;\n return;\n };\n Storage.prototype.getRoots = function () {\n return this._roots;\n };\n Storage.prototype.dispose = function () {\n this._displayList = null;\n this._roots = null;\n };\n return Storage;\n}());\nexport default Storage;\n","import env from '../core/env.js';\nvar requestAnimationFrame;\nrequestAnimationFrame = (env.hasGlobalWindow\n && ((window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))\n || window.mozRequestAnimationFrame\n || window.webkitRequestAnimationFrame)) || function (func) {\n return setTimeout(func, 16);\n};\nexport default requestAnimationFrame;\n","var easingFuncs = {\n linear: function (k) {\n return k;\n },\n quadraticIn: function (k) {\n return k * k;\n },\n quadraticOut: function (k) {\n return k * (2 - k);\n },\n quadraticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k;\n }\n return -0.5 * (--k * (k - 2) - 1);\n },\n cubicIn: function (k) {\n return k * k * k;\n },\n cubicOut: function (k) {\n return --k * k * k + 1;\n },\n cubicInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k + 2);\n },\n quarticIn: function (k) {\n return k * k * k * k;\n },\n quarticOut: function (k) {\n return 1 - (--k * k * k * k);\n },\n quarticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k;\n }\n return -0.5 * ((k -= 2) * k * k * k - 2);\n },\n quinticIn: function (k) {\n return k * k * k * k * k;\n },\n quinticOut: function (k) {\n return --k * k * k * k * k + 1;\n },\n quinticInOut: function (k) {\n if ((k *= 2) < 1) {\n return 0.5 * k * k * k * k * k;\n }\n return 0.5 * ((k -= 2) * k * k * k * k + 2);\n },\n sinusoidalIn: function (k) {\n return 1 - Math.cos(k * Math.PI / 2);\n },\n sinusoidalOut: function (k) {\n return Math.sin(k * Math.PI / 2);\n },\n sinusoidalInOut: function (k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n },\n exponentialIn: function (k) {\n return k === 0 ? 0 : Math.pow(1024, k - 1);\n },\n exponentialOut: function (k) {\n return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n },\n exponentialInOut: function (k) {\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if ((k *= 2) < 1) {\n return 0.5 * Math.pow(1024, k - 1);\n }\n return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n },\n circularIn: function (k) {\n return 1 - Math.sqrt(1 - k * k);\n },\n circularOut: function (k) {\n return Math.sqrt(1 - (--k * k));\n },\n circularInOut: function (k) {\n if ((k *= 2) < 1) {\n return -0.5 * (Math.sqrt(1 - k * k) - 1);\n }\n return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n },\n elasticIn: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return -(a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n },\n elasticOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n return (a * Math.pow(2, -10 * k)\n * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n },\n elasticInOut: function (k) {\n var s;\n var a = 0.1;\n var p = 0.4;\n if (k === 0) {\n return 0;\n }\n if (k === 1) {\n return 1;\n }\n if (!a || a < 1) {\n a = 1;\n s = p / 4;\n }\n else {\n s = p * Math.asin(1 / a) / (2 * Math.PI);\n }\n if ((k *= 2) < 1) {\n return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p));\n }\n return a * Math.pow(2, -10 * (k -= 1))\n * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n },\n backIn: function (k) {\n var s = 1.70158;\n return k * k * ((s + 1) * k - s);\n },\n backOut: function (k) {\n var s = 1.70158;\n return --k * k * ((s + 1) * k + s) + 1;\n },\n backInOut: function (k) {\n var s = 1.70158 * 1.525;\n if ((k *= 2) < 1) {\n return 0.5 * (k * k * ((s + 1) * k - s));\n }\n return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n },\n bounceIn: function (k) {\n return 1 - easingFuncs.bounceOut(1 - k);\n },\n bounceOut: function (k) {\n if (k < (1 / 2.75)) {\n return 7.5625 * k * k;\n }\n else if (k < (2 / 2.75)) {\n return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n }\n else if (k < (2.5 / 2.75)) {\n return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n }\n else {\n return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n }\n },\n bounceInOut: function (k) {\n if (k < 0.5) {\n return easingFuncs.bounceIn(k * 2) * 0.5;\n }\n return easingFuncs.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n }\n};\nexport default easingFuncs;\n","import { create as v2Create, distSquare as v2DistSquare } from './vector.js';\nvar mathPow = Math.pow;\nvar mathSqrt = Math.sqrt;\nvar EPSILON = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\nvar THREE_SQRT = mathSqrt(3);\nvar ONE_THIRD = 1 / 3;\nvar _v0 = v2Create();\nvar _v1 = v2Create();\nvar _v2 = v2Create();\nfunction isAroundZero(val) {\n return val > -EPSILON && val < EPSILON;\n}\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\nexport function cubicAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return onet * onet * (onet * p0 + 3 * t * p1)\n + t * t * (t * p3 + 3 * onet * p2);\n}\nexport function cubicDerivativeAt(p0, p1, p2, p3, t) {\n var onet = 1 - t;\n return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n + (p3 - p2) * t * t);\n}\nexport function cubicRootAt(p0, p1, p2, p3, val, roots) {\n var a = p3 + 3 * (p1 - p2) - p0;\n var b = 3 * (p2 - p1 * 2 + p0);\n var c = 3 * (p1 - p0);\n var d = p0 - val;\n var A = b * b - 3 * a * c;\n var B = b * c - 9 * a * d;\n var C = c * c - 3 * b * d;\n var n = 0;\n if (isAroundZero(A) && isAroundZero(B)) {\n if (isAroundZero(b)) {\n roots[0] = 0;\n }\n else {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n var disc = B * B - 4 * A * C;\n if (isAroundZero(disc)) {\n var K = B / A;\n var t1 = -b / a + K;\n var t2 = -K / 2;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n var Y2 = A * b + 1.5 * a * (-B - discSqrt);\n if (Y1 < 0) {\n Y1 = -mathPow(-Y1, ONE_THIRD);\n }\n else {\n Y1 = mathPow(Y1, ONE_THIRD);\n }\n if (Y2 < 0) {\n Y2 = -mathPow(-Y2, ONE_THIRD);\n }\n else {\n Y2 = mathPow(Y2, ONE_THIRD);\n }\n var t1 = (-b - (Y1 + Y2)) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else {\n var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt(A * A * A));\n var theta = Math.acos(T) / 3;\n var ASqrt = mathSqrt(A);\n var tmp = Math.cos(theta);\n var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n if (t3 >= 0 && t3 <= 1) {\n roots[n++] = t3;\n }\n }\n }\n return n;\n}\nexport function cubicExtrema(p0, p1, p2, p3, extrema) {\n var b = 6 * p2 - 12 * p1 + 6 * p0;\n var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n var c = 3 * p1 - 3 * p0;\n var n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n extrema[0] = -b / (2 * a);\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n extrema[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n extrema[n++] = t2;\n }\n }\n }\n return n;\n}\nexport function cubicSubdivide(p0, p1, p2, p3, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p23 = (p3 - p2) * t + p2;\n var p012 = (p12 - p01) * t + p01;\n var p123 = (p23 - p12) * t + p12;\n var p0123 = (p123 - p012) * t + p012;\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p0123;\n out[4] = p0123;\n out[5] = p123;\n out[6] = p23;\n out[7] = p3;\n}\nexport function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {\n var t;\n var interval = 0.005;\n var d = Infinity;\n var prev;\n var next;\n var d1;\n var d2;\n _v0[0] = x;\n _v0[1] = y;\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n prev = t - interval;\n next = t + interval;\n _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n d1 = v2DistSquare(_v1, _v0);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n _v2[0] = cubicAt(x0, x1, x2, x3, next);\n _v2[1] = cubicAt(y0, y1, y2, y3, next);\n d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n if (out) {\n out[0] = cubicAt(x0, x1, x2, x3, t);\n out[1] = cubicAt(y0, y1, y2, y3, t);\n }\n return mathSqrt(d);\n}\nexport function cubicLength(x0, y0, x1, y1, x2, y2, x3, y3, iteration) {\n var px = x0;\n var py = y0;\n var d = 0;\n var step = 1 / iteration;\n for (var i = 1; i <= iteration; i++) {\n var t = i * step;\n var x = cubicAt(x0, x1, x2, x3, t);\n var y = cubicAt(y0, y1, y2, y3, t);\n var dx = x - px;\n var dy = y - py;\n d += Math.sqrt(dx * dx + dy * dy);\n px = x;\n py = y;\n }\n return d;\n}\nexport function quadraticAt(p0, p1, p2, t) {\n var onet = 1 - t;\n return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\nexport function quadraticDerivativeAt(p0, p1, p2, t) {\n return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\nexport function quadraticRootAt(p0, p1, p2, val, roots) {\n var a = p0 - 2 * p1 + p2;\n var b = 2 * (p1 - p0);\n var c = p0 - val;\n var n = 0;\n if (isAroundZero(a)) {\n if (isNotAroundZero(b)) {\n var t1 = -c / b;\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n }\n else {\n var disc = b * b - 4 * a * c;\n if (isAroundZero(disc)) {\n var t1 = -b / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n }\n else if (disc > 0) {\n var discSqrt = mathSqrt(disc);\n var t1 = (-b + discSqrt) / (2 * a);\n var t2 = (-b - discSqrt) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots[n++] = t1;\n }\n if (t2 >= 0 && t2 <= 1) {\n roots[n++] = t2;\n }\n }\n }\n return n;\n}\nexport function quadraticExtremum(p0, p1, p2) {\n var divider = p0 + p2 - 2 * p1;\n if (divider === 0) {\n return 0.5;\n }\n else {\n return (p0 - p1) / divider;\n }\n}\nexport function quadraticSubdivide(p0, p1, p2, t, out) {\n var p01 = (p1 - p0) * t + p0;\n var p12 = (p2 - p1) * t + p1;\n var p012 = (p12 - p01) * t + p01;\n out[0] = p0;\n out[1] = p01;\n out[2] = p012;\n out[3] = p012;\n out[4] = p12;\n out[5] = p2;\n}\nexport function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {\n var t;\n var interval = 0.005;\n var d = Infinity;\n _v0[0] = x;\n _v0[1] = y;\n for (var _t = 0; _t < 1; _t += 0.05) {\n _v1[0] = quadraticAt(x0, x1, x2, _t);\n _v1[1] = quadraticAt(y0, y1, y2, _t);\n var d1 = v2DistSquare(_v0, _v1);\n if (d1 < d) {\n t = _t;\n d = d1;\n }\n }\n d = Infinity;\n for (var i = 0; i < 32; i++) {\n if (interval < EPSILON_NUMERIC) {\n break;\n }\n var prev = t - interval;\n var next = t + interval;\n _v1[0] = quadraticAt(x0, x1, x2, prev);\n _v1[1] = quadraticAt(y0, y1, y2, prev);\n var d1 = v2DistSquare(_v1, _v0);\n if (prev >= 0 && d1 < d) {\n t = prev;\n d = d1;\n }\n else {\n _v2[0] = quadraticAt(x0, x1, x2, next);\n _v2[1] = quadraticAt(y0, y1, y2, next);\n var d2 = v2DistSquare(_v2, _v0);\n if (next <= 1 && d2 < d) {\n t = next;\n d = d2;\n }\n else {\n interval *= 0.5;\n }\n }\n }\n if (out) {\n out[0] = quadraticAt(x0, x1, x2, t);\n out[1] = quadraticAt(y0, y1, y2, t);\n }\n return mathSqrt(d);\n}\nexport function quadraticLength(x0, y0, x1, y1, x2, y2, iteration) {\n var px = x0;\n var py = y0;\n var d = 0;\n var step = 1 / iteration;\n for (var i = 1; i <= iteration; i++) {\n var t = i * step;\n var x = quadraticAt(x0, x1, x2, t);\n var y = quadraticAt(y0, y1, y2, t);\n var dx = x - px;\n var dy = y - py;\n d += Math.sqrt(dx * dx + dy * dy);\n px = x;\n py = y;\n }\n return d;\n}\n","import { cubicAt, cubicRootAt } from '../core/curve.js';\nimport { trim } from '../core/util.js';\nvar regexp = /cubic-bezier\\(([0-9,\\.e ]+)\\)/;\nexport function createCubicEasingFunc(cubicEasingStr) {\n var cubic = cubicEasingStr && regexp.exec(cubicEasingStr);\n if (cubic) {\n var points = cubic[1].split(',');\n var a_1 = +trim(points[0]);\n var b_1 = +trim(points[1]);\n var c_1 = +trim(points[2]);\n var d_1 = +trim(points[3]);\n if (isNaN(a_1 + b_1 + c_1 + d_1)) {\n return;\n }\n var roots_1 = [];\n return function (p) {\n return p <= 0\n ? 0 : p >= 1\n ? 1\n : cubicRootAt(0, a_1, c_1, 1, p, roots_1) && cubicAt(0, b_1, d_1, 1, roots_1[0]);\n };\n }\n}\n","import easingFuncs from './easing.js';\nimport { isFunction, noop } from '../core/util.js';\nimport { createCubicEasingFunc } from './cubicEasing.js';\nvar Clip = (function () {\n function Clip(opts) {\n this._inited = false;\n this._startTime = 0;\n this._pausedTime = 0;\n this._paused = false;\n this._life = opts.life || 1000;\n this._delay = opts.delay || 0;\n this.loop = opts.loop || false;\n this.onframe = opts.onframe || noop;\n this.ondestroy = opts.ondestroy || noop;\n this.onrestart = opts.onrestart || noop;\n opts.easing && this.setEasing(opts.easing);\n }\n Clip.prototype.step = function (globalTime, deltaTime) {\n if (!this._inited) {\n this._startTime = globalTime + this._delay;\n this._inited = true;\n }\n if (this._paused) {\n this._pausedTime += deltaTime;\n return;\n }\n var life = this._life;\n var elapsedTime = globalTime - this._startTime - this._pausedTime;\n var percent = elapsedTime / life;\n if (percent < 0) {\n percent = 0;\n }\n percent = Math.min(percent, 1);\n var easingFunc = this.easingFunc;\n var schedule = easingFunc ? easingFunc(percent) : percent;\n this.onframe(schedule);\n if (percent === 1) {\n if (this.loop) {\n var remainder = elapsedTime % life;\n this._startTime = globalTime - remainder;\n this._pausedTime = 0;\n this.onrestart();\n }\n else {\n return true;\n }\n }\n return false;\n };\n Clip.prototype.pause = function () {\n this._paused = true;\n };\n Clip.prototype.resume = function () {\n this._paused = false;\n };\n Clip.prototype.setEasing = function (easing) {\n this.easing = easing;\n this.easingFunc = isFunction(easing)\n ? easing\n : easingFuncs[easing] || createCubicEasingFunc(easing);\n };\n return Clip;\n}());\nexport default Clip;\n","import Clip from './Clip.js';\nimport * as color from '../tool/color.js';\nimport { eqNaN, extend, isArrayLike, isFunction, isGradientObject, isNumber, isString, keys, logError, map } from '../core/util.js';\nimport easingFuncs from './easing.js';\nimport { createCubicEasingFunc } from './cubicEasing.js';\nimport { isLinearGradient, isRadialGradient } from '../svg/helper.js';\n;\nvar arraySlice = Array.prototype.slice;\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\nfunction interpolate1DArray(out, p0, p1, percent) {\n var len = p0.length;\n for (var i = 0; i < len; i++) {\n out[i] = interpolateNumber(p0[i], p1[i], percent);\n }\n return out;\n}\nfunction interpolate2DArray(out, p0, p1, percent) {\n var len = p0.length;\n var len2 = len && p0[0].length;\n for (var i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (var j = 0; j < len2; j++) {\n out[i][j] = interpolateNumber(p0[i][j], p1[i][j], percent);\n }\n }\n return out;\n}\nfunction add1DArray(out, p0, p1, sign) {\n var len = p0.length;\n for (var i = 0; i < len; i++) {\n out[i] = p0[i] + p1[i] * sign;\n }\n return out;\n}\nfunction add2DArray(out, p0, p1, sign) {\n var len = p0.length;\n var len2 = len && p0[0].length;\n for (var i = 0; i < len; i++) {\n if (!out[i]) {\n out[i] = [];\n }\n for (var j = 0; j < len2; j++) {\n out[i][j] = p0[i][j] + p1[i][j] * sign;\n }\n }\n return out;\n}\nfunction fillColorStops(val0, val1) {\n var len0 = val0.length;\n var len1 = val1.length;\n var shorterArr = len0 > len1 ? val1 : val0;\n var shorterLen = Math.min(len0, len1);\n var last = shorterArr[shorterLen - 1] || { color: [0, 0, 0, 0], offset: 0 };\n for (var i = shorterLen; i < Math.max(len0, len1); i++) {\n shorterArr.push({\n offset: last.offset,\n color: last.color.slice()\n });\n }\n}\nfunction fillArray(val0, val1, arrDim) {\n var arr0 = val0;\n var arr1 = val1;\n if (!arr0.push || !arr1.push) {\n return;\n }\n var arr0Len = arr0.length;\n var arr1Len = arr1.length;\n if (arr0Len !== arr1Len) {\n var isPreviousLarger = arr0Len > arr1Len;\n if (isPreviousLarger) {\n arr0.length = arr1Len;\n }\n else {\n for (var i = arr0Len; i < arr1Len; i++) {\n arr0.push(arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i]));\n }\n }\n }\n var len2 = arr0[0] && arr0[0].length;\n for (var i = 0; i < arr0.length; i++) {\n if (arrDim === 1) {\n if (isNaN(arr0[i])) {\n arr0[i] = arr1[i];\n }\n }\n else {\n for (var j = 0; j < len2; j++) {\n if (isNaN(arr0[i][j])) {\n arr0[i][j] = arr1[i][j];\n }\n }\n }\n }\n}\nexport function cloneValue(value) {\n if (isArrayLike(value)) {\n var len = value.length;\n if (isArrayLike(value[0])) {\n var ret = [];\n for (var i = 0; i < len; i++) {\n ret.push(arraySlice.call(value[i]));\n }\n return ret;\n }\n return arraySlice.call(value);\n }\n return value;\n}\nfunction rgba2String(rgba) {\n rgba[0] = Math.floor(rgba[0]) || 0;\n rgba[1] = Math.floor(rgba[1]) || 0;\n rgba[2] = Math.floor(rgba[2]) || 0;\n rgba[3] = rgba[3] == null ? 1 : rgba[3];\n return 'rgba(' + rgba.join(',') + ')';\n}\nfunction guessArrayDim(value) {\n return isArrayLike(value && value[0]) ? 2 : 1;\n}\nvar VALUE_TYPE_NUMBER = 0;\nvar VALUE_TYPE_1D_ARRAY = 1;\nvar VALUE_TYPE_2D_ARRAY = 2;\nvar VALUE_TYPE_COLOR = 3;\nvar VALUE_TYPE_LINEAR_GRADIENT = 4;\nvar VALUE_TYPE_RADIAL_GRADIENT = 5;\nvar VALUE_TYPE_UNKOWN = 6;\nfunction isGradientValueType(valType) {\n return valType === VALUE_TYPE_LINEAR_GRADIENT || valType === VALUE_TYPE_RADIAL_GRADIENT;\n}\nfunction isArrayValueType(valType) {\n return valType === VALUE_TYPE_1D_ARRAY || valType === VALUE_TYPE_2D_ARRAY;\n}\nvar tmpRgba = [0, 0, 0, 0];\nvar Track = (function () {\n function Track(propName) {\n this.keyframes = [];\n this.discrete = false;\n this._invalid = false;\n this._needsSort = false;\n this._lastFr = 0;\n this._lastFrP = 0;\n this.propName = propName;\n }\n Track.prototype.isFinished = function () {\n return this._finished;\n };\n Track.prototype.setFinished = function () {\n this._finished = true;\n if (this._additiveTrack) {\n this._additiveTrack.setFinished();\n }\n };\n Track.prototype.needsAnimate = function () {\n return this.keyframes.length >= 1;\n };\n Track.prototype.getAdditiveTrack = function () {\n return this._additiveTrack;\n };\n Track.prototype.addKeyframe = function (time, rawValue, easing) {\n this._needsSort = true;\n var keyframes = this.keyframes;\n var len = keyframes.length;\n var discrete = false;\n var valType = VALUE_TYPE_UNKOWN;\n var value = rawValue;\n if (isArrayLike(rawValue)) {\n var arrayDim = guessArrayDim(rawValue);\n valType = arrayDim;\n if (arrayDim === 1 && !isNumber(rawValue[0])\n || arrayDim === 2 && !isNumber(rawValue[0][0])) {\n discrete = true;\n }\n }\n else {\n if (isNumber(rawValue) && !eqNaN(rawValue)) {\n valType = VALUE_TYPE_NUMBER;\n }\n else if (isString(rawValue)) {\n if (!isNaN(+rawValue)) {\n valType = VALUE_TYPE_NUMBER;\n }\n else {\n var colorArray = color.parse(rawValue);\n if (colorArray) {\n value = colorArray;\n valType = VALUE_TYPE_COLOR;\n }\n }\n }\n else if (isGradientObject(rawValue)) {\n var parsedGradient = extend({}, value);\n parsedGradient.colorStops = map(rawValue.colorStops, function (colorStop) { return ({\n offset: colorStop.offset,\n color: color.parse(colorStop.color)\n }); });\n if (isLinearGradient(rawValue)) {\n valType = VALUE_TYPE_LINEAR_GRADIENT;\n }\n else if (isRadialGradient(rawValue)) {\n valType = VALUE_TYPE_RADIAL_GRADIENT;\n }\n value = parsedGradient;\n }\n }\n if (len === 0) {\n this.valType = valType;\n }\n else if (valType !== this.valType || valType === VALUE_TYPE_UNKOWN) {\n discrete = true;\n }\n this.discrete = this.discrete || discrete;\n var kf = {\n time: time,\n value: value,\n rawValue: rawValue,\n percent: 0\n };\n if (easing) {\n kf.easing = easing;\n kf.easingFunc = isFunction(easing)\n ? easing\n : easingFuncs[easing] || createCubicEasingFunc(easing);\n }\n keyframes.push(kf);\n return kf;\n };\n Track.prototype.prepare = function (maxTime, additiveTrack) {\n var kfs = this.keyframes;\n if (this._needsSort) {\n kfs.sort(function (a, b) {\n return a.time - b.time;\n });\n }\n var valType = this.valType;\n var kfsLen = kfs.length;\n var lastKf = kfs[kfsLen - 1];\n var isDiscrete = this.discrete;\n var isArr = isArrayValueType(valType);\n var isGradient = isGradientValueType(valType);\n for (var i = 0; i < kfsLen; i++) {\n var kf = kfs[i];\n var value = kf.value;\n var lastValue = lastKf.value;\n kf.percent = kf.time / maxTime;\n if (!isDiscrete) {\n if (isArr && i !== kfsLen - 1) {\n fillArray(value, lastValue, valType);\n }\n else if (isGradient) {\n fillColorStops(value.colorStops, lastValue.colorStops);\n }\n }\n }\n if (!isDiscrete\n && valType !== VALUE_TYPE_RADIAL_GRADIENT\n && additiveTrack\n && this.needsAnimate()\n && additiveTrack.needsAnimate()\n && valType === additiveTrack.valType\n && !additiveTrack._finished) {\n this._additiveTrack = additiveTrack;\n var startValue = kfs[0].value;\n for (var i = 0; i < kfsLen; i++) {\n if (valType === VALUE_TYPE_NUMBER) {\n kfs[i].additiveValue = kfs[i].value - startValue;\n }\n else if (valType === VALUE_TYPE_COLOR) {\n kfs[i].additiveValue =\n add1DArray([], kfs[i].value, startValue, -1);\n }\n else if (isArrayValueType(valType)) {\n kfs[i].additiveValue = valType === VALUE_TYPE_1D_ARRAY\n ? add1DArray([], kfs[i].value, startValue, -1)\n : add2DArray([], kfs[i].value, startValue, -1);\n }\n }\n }\n };\n Track.prototype.step = function (target, percent) {\n if (this._finished) {\n return;\n }\n if (this._additiveTrack && this._additiveTrack._finished) {\n this._additiveTrack = null;\n }\n var isAdditive = this._additiveTrack != null;\n var valueKey = isAdditive ? 'additiveValue' : 'value';\n var valType = this.valType;\n var keyframes = this.keyframes;\n var kfsNum = keyframes.length;\n var propName = this.propName;\n var isValueColor = valType === VALUE_TYPE_COLOR;\n var frameIdx;\n var lastFrame = this._lastFr;\n var mathMin = Math.min;\n var frame;\n var nextFrame;\n if (kfsNum === 1) {\n frame = nextFrame = keyframes[0];\n }\n else {\n if (percent < 0) {\n frameIdx = 0;\n }\n else if (percent < this._lastFrP) {\n var start = mathMin(lastFrame + 1, kfsNum - 1);\n for (frameIdx = start; frameIdx >= 0; frameIdx--) {\n if (keyframes[frameIdx].percent <= percent) {\n break;\n }\n }\n frameIdx = mathMin(frameIdx, kfsNum - 2);\n }\n else {\n for (frameIdx = lastFrame; frameIdx < kfsNum; frameIdx++) {\n if (keyframes[frameIdx].percent > percent) {\n break;\n }\n }\n frameIdx = mathMin(frameIdx - 1, kfsNum - 2);\n }\n nextFrame = keyframes[frameIdx + 1];\n frame = keyframes[frameIdx];\n }\n if (!(frame && nextFrame)) {\n return;\n }\n this._lastFr = frameIdx;\n this._lastFrP = percent;\n var interval = (nextFrame.percent - frame.percent);\n var w = interval === 0 ? 1 : mathMin((percent - frame.percent) / interval, 1);\n if (nextFrame.easingFunc) {\n w = nextFrame.easingFunc(w);\n }\n var targetArr = isAdditive ? this._additiveValue\n : (isValueColor ? tmpRgba : target[propName]);\n if ((isArrayValueType(valType) || isValueColor) && !targetArr) {\n targetArr = this._additiveValue = [];\n }\n if (this.discrete) {\n target[propName] = w < 1 ? frame.rawValue : nextFrame.rawValue;\n }\n else if (isArrayValueType(valType)) {\n valType === VALUE_TYPE_1D_ARRAY\n ? interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w)\n : interpolate2DArray(targetArr, frame[valueKey], nextFrame[valueKey], w);\n }\n else if (isGradientValueType(valType)) {\n var val = frame[valueKey];\n var nextVal_1 = nextFrame[valueKey];\n var isLinearGradient_1 = valType === VALUE_TYPE_LINEAR_GRADIENT;\n target[propName] = {\n type: isLinearGradient_1 ? 'linear' : 'radial',\n x: interpolateNumber(val.x, nextVal_1.x, w),\n y: interpolateNumber(val.y, nextVal_1.y, w),\n colorStops: map(val.colorStops, function (colorStop, idx) {\n var nextColorStop = nextVal_1.colorStops[idx];\n return {\n offset: interpolateNumber(colorStop.offset, nextColorStop.offset, w),\n color: rgba2String(interpolate1DArray([], colorStop.color, nextColorStop.color, w))\n };\n }),\n global: nextVal_1.global\n };\n if (isLinearGradient_1) {\n target[propName].x2 = interpolateNumber(val.x2, nextVal_1.x2, w);\n target[propName].y2 = interpolateNumber(val.y2, nextVal_1.y2, w);\n }\n else {\n target[propName].r = interpolateNumber(val.r, nextVal_1.r, w);\n }\n }\n else if (isValueColor) {\n interpolate1DArray(targetArr, frame[valueKey], nextFrame[valueKey], w);\n if (!isAdditive) {\n target[propName] = rgba2String(targetArr);\n }\n }\n else {\n var value = interpolateNumber(frame[valueKey], nextFrame[valueKey], w);\n if (isAdditive) {\n this._additiveValue = value;\n }\n else {\n target[propName] = value;\n }\n }\n if (isAdditive) {\n this._addToTarget(target);\n }\n };\n Track.prototype._addToTarget = function (target) {\n var valType = this.valType;\n var propName = this.propName;\n var additiveValue = this._additiveValue;\n if (valType === VALUE_TYPE_NUMBER) {\n target[propName] = target[propName] + additiveValue;\n }\n else if (valType === VALUE_TYPE_COLOR) {\n color.parse(target[propName], tmpRgba);\n add1DArray(tmpRgba, tmpRgba, additiveValue, 1);\n target[propName] = rgba2String(tmpRgba);\n }\n else if (valType === VALUE_TYPE_1D_ARRAY) {\n add1DArray(target[propName], target[propName], additiveValue, 1);\n }\n else if (valType === VALUE_TYPE_2D_ARRAY) {\n add2DArray(target[propName], target[propName], additiveValue, 1);\n }\n };\n return Track;\n}());\nvar Animator = (function () {\n function Animator(target, loop, allowDiscreteAnimation, additiveTo) {\n this._tracks = {};\n this._trackKeys = [];\n this._maxTime = 0;\n this._started = 0;\n this._clip = null;\n this._target = target;\n this._loop = loop;\n if (loop && additiveTo) {\n logError('Can\\' use additive animation on looped animation.');\n return;\n }\n this._additiveAnimators = additiveTo;\n this._allowDiscrete = allowDiscreteAnimation;\n }\n Animator.prototype.getMaxTime = function () {\n return this._maxTime;\n };\n Animator.prototype.getDelay = function () {\n return this._delay;\n };\n Animator.prototype.getLoop = function () {\n return this._loop;\n };\n Animator.prototype.getTarget = function () {\n return this._target;\n };\n Animator.prototype.changeTarget = function (target) {\n this._target = target;\n };\n Animator.prototype.when = function (time, props, easing) {\n return this.whenWithKeys(time, props, keys(props), easing);\n };\n Animator.prototype.whenWithKeys = function (time, props, propNames, easing) {\n var tracks = this._tracks;\n for (var i = 0; i < propNames.length; i++) {\n var propName = propNames[i];\n var track = tracks[propName];\n if (!track) {\n track = tracks[propName] = new Track(propName);\n var initialValue = void 0;\n var additiveTrack = this._getAdditiveTrack(propName);\n if (additiveTrack) {\n var addtiveTrackKfs = additiveTrack.keyframes;\n var lastFinalKf = addtiveTrackKfs[addtiveTrackKfs.length - 1];\n initialValue = lastFinalKf && lastFinalKf.value;\n if (additiveTrack.valType === VALUE_TYPE_COLOR && initialValue) {\n initialValue = rgba2String(initialValue);\n }\n }\n else {\n initialValue = this._target[propName];\n }\n if (initialValue == null) {\n continue;\n }\n if (time > 0) {\n track.addKeyframe(0, cloneValue(initialValue), easing);\n }\n this._trackKeys.push(propName);\n }\n track.addKeyframe(time, cloneValue(props[propName]), easing);\n }\n this._maxTime = Math.max(this._maxTime, time);\n return this;\n };\n Animator.prototype.pause = function () {\n this._clip.pause();\n this._paused = true;\n };\n Animator.prototype.resume = function () {\n this._clip.resume();\n this._paused = false;\n };\n Animator.prototype.isPaused = function () {\n return !!this._paused;\n };\n Animator.prototype.duration = function (duration) {\n this._maxTime = duration;\n this._force = true;\n return this;\n };\n Animator.prototype._doneCallback = function () {\n this._setTracksFinished();\n this._clip = null;\n var doneList = this._doneCbs;\n if (doneList) {\n var len = doneList.length;\n for (var i = 0; i < len; i++) {\n doneList[i].call(this);\n }\n }\n };\n Animator.prototype._abortedCallback = function () {\n this._setTracksFinished();\n var animation = this.animation;\n var abortedList = this._abortedCbs;\n if (animation) {\n animation.removeClip(this._clip);\n }\n this._clip = null;\n if (abortedList) {\n for (var i = 0; i < abortedList.length; i++) {\n abortedList[i].call(this);\n }\n }\n };\n Animator.prototype._setTracksFinished = function () {\n var tracks = this._tracks;\n var tracksKeys = this._trackKeys;\n for (var i = 0; i < tracksKeys.length; i++) {\n tracks[tracksKeys[i]].setFinished();\n }\n };\n Animator.prototype._getAdditiveTrack = function (trackName) {\n var additiveTrack;\n var additiveAnimators = this._additiveAnimators;\n if (additiveAnimators) {\n for (var i = 0; i < additiveAnimators.length; i++) {\n var track = additiveAnimators[i].getTrack(trackName);\n if (track) {\n additiveTrack = track;\n }\n }\n }\n return additiveTrack;\n };\n Animator.prototype.start = function (easing) {\n if (this._started > 0) {\n return;\n }\n this._started = 1;\n var self = this;\n var tracks = [];\n var maxTime = this._maxTime || 0;\n for (var i = 0; i < this._trackKeys.length; i++) {\n var propName = this._trackKeys[i];\n var track = this._tracks[propName];\n var additiveTrack = this._getAdditiveTrack(propName);\n var kfs = track.keyframes;\n var kfsNum = kfs.length;\n track.prepare(maxTime, additiveTrack);\n if (track.needsAnimate()) {\n if (!this._allowDiscrete && track.discrete) {\n var lastKf = kfs[kfsNum - 1];\n if (lastKf) {\n self._target[track.propName] = lastKf.rawValue;\n }\n track.setFinished();\n }\n else {\n tracks.push(track);\n }\n }\n }\n if (tracks.length || this._force) {\n var clip = new Clip({\n life: maxTime,\n loop: this._loop,\n delay: this._delay || 0,\n onframe: function (percent) {\n self._started = 2;\n var additiveAnimators = self._additiveAnimators;\n if (additiveAnimators) {\n var stillHasAdditiveAnimator = false;\n for (var i = 0; i < additiveAnimators.length; i++) {\n if (additiveAnimators[i]._clip) {\n stillHasAdditiveAnimator = true;\n break;\n }\n }\n if (!stillHasAdditiveAnimator) {\n self._additiveAnimators = null;\n }\n }\n for (var i = 0; i < tracks.length; i++) {\n tracks[i].step(self._target, percent);\n }\n var onframeList = self._onframeCbs;\n if (onframeList) {\n for (var i = 0; i < onframeList.length; i++) {\n onframeList[i](self._target, percent);\n }\n }\n },\n ondestroy: function () {\n self._doneCallback();\n }\n });\n this._clip = clip;\n if (this.animation) {\n this.animation.addClip(clip);\n }\n if (easing) {\n clip.setEasing(easing);\n }\n }\n else {\n this._doneCallback();\n }\n return this;\n };\n Animator.prototype.stop = function (forwardToLast) {\n if (!this._clip) {\n return;\n }\n var clip = this._clip;\n if (forwardToLast) {\n clip.onframe(1);\n }\n this._abortedCallback();\n };\n Animator.prototype.delay = function (time) {\n this._delay = time;\n return this;\n };\n Animator.prototype.during = function (cb) {\n if (cb) {\n if (!this._onframeCbs) {\n this._onframeCbs = [];\n }\n this._onframeCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.done = function (cb) {\n if (cb) {\n if (!this._doneCbs) {\n this._doneCbs = [];\n }\n this._doneCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.aborted = function (cb) {\n if (cb) {\n if (!this._abortedCbs) {\n this._abortedCbs = [];\n }\n this._abortedCbs.push(cb);\n }\n return this;\n };\n Animator.prototype.getClip = function () {\n return this._clip;\n };\n Animator.prototype.getTrack = function (propName) {\n return this._tracks[propName];\n };\n Animator.prototype.getTracks = function () {\n var _this = this;\n return map(this._trackKeys, function (key) { return _this._tracks[key]; });\n };\n Animator.prototype.stopTracks = function (propNames, forwardToLast) {\n if (!propNames.length || !this._clip) {\n return true;\n }\n var tracks = this._tracks;\n var tracksKeys = this._trackKeys;\n for (var i = 0; i < propNames.length; i++) {\n var track = tracks[propNames[i]];\n if (track && !track.isFinished()) {\n if (forwardToLast) {\n track.step(this._target, 1);\n }\n else if (this._started === 1) {\n track.step(this._target, 0);\n }\n track.setFinished();\n }\n }\n var allAborted = true;\n for (var i = 0; i < tracksKeys.length; i++) {\n if (!tracks[tracksKeys[i]].isFinished()) {\n allAborted = false;\n break;\n }\n }\n if (allAborted) {\n this._abortedCallback();\n }\n return allAborted;\n };\n Animator.prototype.saveTo = function (target, trackKeys, firstOrLast) {\n if (!target) {\n return;\n }\n trackKeys = trackKeys || this._trackKeys;\n for (var i = 0; i < trackKeys.length; i++) {\n var propName = trackKeys[i];\n var track = this._tracks[propName];\n if (!track || track.isFinished()) {\n continue;\n }\n var kfs = track.keyframes;\n var kf = kfs[firstOrLast ? 0 : kfs.length - 1];\n if (kf) {\n target[propName] = cloneValue(kf.rawValue);\n }\n }\n };\n Animator.prototype.__changeFinalValue = function (finalProps, trackKeys) {\n trackKeys = trackKeys || keys(finalProps);\n for (var i = 0; i < trackKeys.length; i++) {\n var propName = trackKeys[i];\n var track = this._tracks[propName];\n if (!track) {\n continue;\n }\n var kfs = track.keyframes;\n if (kfs.length > 1) {\n var lastKf = kfs.pop();\n track.addKeyframe(lastKf.time, finalProps[propName]);\n track.prepare(this._maxTime, track.getAdditiveTrack());\n }\n }\n };\n return Animator;\n}());\nexport default Animator;\n","import { __extends } from \"tslib\";\nimport Eventful from '../core/Eventful.js';\nimport requestAnimationFrame from './requestAnimationFrame.js';\nimport Animator from './Animator.js';\nexport function getTime() {\n return new Date().getTime();\n}\nvar Animation = (function (_super) {\n __extends(Animation, _super);\n function Animation(opts) {\n var _this = _super.call(this) || this;\n _this._running = false;\n _this._time = 0;\n _this._pausedTime = 0;\n _this._pauseStart = 0;\n _this._paused = false;\n opts = opts || {};\n _this.stage = opts.stage || {};\n return _this;\n }\n Animation.prototype.addClip = function (clip) {\n if (clip.animation) {\n this.removeClip(clip);\n }\n if (!this._head) {\n this._head = this._tail = clip;\n }\n else {\n this._tail.next = clip;\n clip.prev = this._tail;\n clip.next = null;\n this._tail = clip;\n }\n clip.animation = this;\n };\n Animation.prototype.addAnimator = function (animator) {\n animator.animation = this;\n var clip = animator.getClip();\n if (clip) {\n this.addClip(clip);\n }\n };\n Animation.prototype.removeClip = function (clip) {\n if (!clip.animation) {\n return;\n }\n var prev = clip.prev;\n var next = clip.next;\n if (prev) {\n prev.next = next;\n }\n else {\n this._head = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n this._tail = prev;\n }\n clip.next = clip.prev = clip.animation = null;\n };\n Animation.prototype.removeAnimator = function (animator) {\n var clip = animator.getClip();\n if (clip) {\n this.removeClip(clip);\n }\n animator.animation = null;\n };\n Animation.prototype.update = function (notTriggerFrameAndStageUpdate) {\n var time = getTime() - this._pausedTime;\n var delta = time - this._time;\n var clip = this._head;\n while (clip) {\n var nextClip = clip.next;\n var finished = clip.step(time, delta);\n if (finished) {\n clip.ondestroy();\n this.removeClip(clip);\n clip = nextClip;\n }\n else {\n clip = nextClip;\n }\n }\n this._time = time;\n if (!notTriggerFrameAndStageUpdate) {\n this.trigger('frame', delta);\n this.stage.update && this.stage.update();\n }\n };\n Animation.prototype._startLoop = function () {\n var self = this;\n this._running = true;\n function step() {\n if (self._running) {\n requestAnimationFrame(step);\n !self._paused && self.update();\n }\n }\n requestAnimationFrame(step);\n };\n Animation.prototype.start = function () {\n if (this._running) {\n return;\n }\n this._time = getTime();\n this._pausedTime = 0;\n this._startLoop();\n };\n Animation.prototype.stop = function () {\n this._running = false;\n };\n Animation.prototype.pause = function () {\n if (!this._paused) {\n this._pauseStart = getTime();\n this._paused = true;\n }\n };\n Animation.prototype.resume = function () {\n if (this._paused) {\n this._pausedTime += getTime() - this._pauseStart;\n this._paused = false;\n }\n };\n Animation.prototype.clear = function () {\n var clip = this._head;\n while (clip) {\n var nextClip = clip.next;\n clip.prev = clip.next = clip.animation = null;\n clip = nextClip;\n }\n this._head = this._tail = null;\n };\n Animation.prototype.isFinished = function () {\n return this._head == null;\n };\n Animation.prototype.animate = function (target, options) {\n options = options || {};\n this.start();\n var animator = new Animator(target, options.loop);\n this.addAnimator(animator);\n return animator;\n };\n return Animation;\n}(Eventful));\nexport default Animation;\n","import { __extends } from \"tslib\";\nimport { addEventListener, removeEventListener, normalizeEvent, getNativeEvent } from '../core/event.js';\nimport * as zrUtil from '../core/util.js';\nimport Eventful from '../core/Eventful.js';\nimport env from '../core/env.js';\nvar TOUCH_CLICK_DELAY = 300;\nvar globalEventSupported = env.domSupported;\nvar localNativeListenerNames = (function () {\n var mouseHandlerNames = [\n 'click', 'dblclick', 'mousewheel', 'wheel', 'mouseout',\n 'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n ];\n var touchHandlerNames = [\n 'touchstart', 'touchend', 'touchmove'\n ];\n var pointerEventNameMap = {\n pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n };\n var pointerHandlerNames = zrUtil.map(mouseHandlerNames, function (name) {\n var nm = name.replace('mouse', 'pointer');\n return pointerEventNameMap.hasOwnProperty(nm) ? nm : name;\n });\n return {\n mouse: mouseHandlerNames,\n touch: touchHandlerNames,\n pointer: pointerHandlerNames\n };\n})();\nvar globalNativeListenerNames = {\n mouse: ['mousemove', 'mouseup'],\n pointer: ['pointermove', 'pointerup']\n};\nvar wheelEventSupported = false;\nfunction isPointerFromTouch(event) {\n var pointerType = event.pointerType;\n return pointerType === 'pen' || pointerType === 'touch';\n}\nfunction setTouchTimer(scope) {\n scope.touching = true;\n if (scope.touchTimer != null) {\n clearTimeout(scope.touchTimer);\n scope.touchTimer = null;\n }\n scope.touchTimer = setTimeout(function () {\n scope.touching = false;\n scope.touchTimer = null;\n }, 700);\n}\nfunction markTouch(event) {\n event && (event.zrByTouch = true);\n}\nfunction normalizeGlobalEvent(instance, event) {\n return normalizeEvent(instance.dom, new FakeGlobalEvent(instance, event), true);\n}\nfunction isLocalEl(instance, el) {\n var elTmp = el;\n var isLocal = false;\n while (elTmp && elTmp.nodeType !== 9\n && !(isLocal = elTmp.domBelongToZr\n || (elTmp !== el && elTmp === instance.painterRoot))) {\n elTmp = elTmp.parentNode;\n }\n return isLocal;\n}\nvar FakeGlobalEvent = (function () {\n function FakeGlobalEvent(instance, event) {\n this.stopPropagation = zrUtil.noop;\n this.stopImmediatePropagation = zrUtil.noop;\n this.preventDefault = zrUtil.noop;\n this.type = event.type;\n this.target = this.currentTarget = instance.dom;\n this.pointerType = event.pointerType;\n this.clientX = event.clientX;\n this.clientY = event.clientY;\n }\n return FakeGlobalEvent;\n}());\nvar localDOMHandlers = {\n mousedown: function (event) {\n event = normalizeEvent(this.dom, event);\n this.__mayPointerCapture = [event.zrX, event.zrY];\n this.trigger('mousedown', event);\n },\n mousemove: function (event) {\n event = normalizeEvent(this.dom, event);\n var downPoint = this.__mayPointerCapture;\n if (downPoint && (event.zrX !== downPoint[0] || event.zrY !== downPoint[1])) {\n this.__togglePointerCapture(true);\n }\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n event = normalizeEvent(this.dom, event);\n this.__togglePointerCapture(false);\n this.trigger('mouseup', event);\n },\n mouseout: function (event) {\n event = normalizeEvent(this.dom, event);\n var element = event.toElement || event.relatedTarget;\n if (!isLocalEl(this, element)) {\n if (this.__pointerCapturing) {\n event.zrEventControl = 'no_globalout';\n }\n this.trigger('mouseout', event);\n }\n },\n wheel: function (event) {\n wheelEventSupported = true;\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n mousewheel: function (event) {\n if (wheelEventSupported) {\n return;\n }\n event = normalizeEvent(this.dom, event);\n this.trigger('mousewheel', event);\n },\n touchstart: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.__lastTouchMoment = new Date();\n this.handler.processGesture(event, 'start');\n localDOMHandlers.mousemove.call(this, event);\n localDOMHandlers.mousedown.call(this, event);\n },\n touchmove: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'change');\n localDOMHandlers.mousemove.call(this, event);\n },\n touchend: function (event) {\n event = normalizeEvent(this.dom, event);\n markTouch(event);\n this.handler.processGesture(event, 'end');\n localDOMHandlers.mouseup.call(this, event);\n if (+new Date() - (+this.__lastTouchMoment) < TOUCH_CLICK_DELAY) {\n localDOMHandlers.click.call(this, event);\n }\n },\n pointerdown: function (event) {\n localDOMHandlers.mousedown.call(this, event);\n },\n pointermove: function (event) {\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n localDOMHandlers.mouseup.call(this, event);\n },\n pointerout: function (event) {\n if (!isPointerFromTouch(event)) {\n localDOMHandlers.mouseout.call(this, event);\n }\n }\n};\nzrUtil.each(['click', 'dblclick', 'contextmenu'], function (name) {\n localDOMHandlers[name] = function (event) {\n event = normalizeEvent(this.dom, event);\n this.trigger(name, event);\n };\n});\nvar globalDOMHandlers = {\n pointermove: function (event) {\n if (!isPointerFromTouch(event)) {\n globalDOMHandlers.mousemove.call(this, event);\n }\n },\n pointerup: function (event) {\n globalDOMHandlers.mouseup.call(this, event);\n },\n mousemove: function (event) {\n this.trigger('mousemove', event);\n },\n mouseup: function (event) {\n var pointerCaptureReleasing = this.__pointerCapturing;\n this.__togglePointerCapture(false);\n this.trigger('mouseup', event);\n if (pointerCaptureReleasing) {\n event.zrEventControl = 'only_globalout';\n this.trigger('mouseout', event);\n }\n }\n};\nfunction mountLocalDOMEventListeners(instance, scope) {\n var domHandlers = scope.domHandlers;\n if (env.pointerEventsSupported) {\n zrUtil.each(localNativeListenerNames.pointer, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n domHandlers[nativeEventName].call(instance, event);\n });\n });\n }\n else {\n if (env.touchEventsSupported) {\n zrUtil.each(localNativeListenerNames.touch, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n domHandlers[nativeEventName].call(instance, event);\n setTouchTimer(scope);\n });\n });\n }\n zrUtil.each(localNativeListenerNames.mouse, function (nativeEventName) {\n mountSingleDOMEventListener(scope, nativeEventName, function (event) {\n event = getNativeEvent(event);\n if (!scope.touching) {\n domHandlers[nativeEventName].call(instance, event);\n }\n });\n });\n }\n}\nfunction mountGlobalDOMEventListeners(instance, scope) {\n if (env.pointerEventsSupported) {\n zrUtil.each(globalNativeListenerNames.pointer, mount);\n }\n else if (!env.touchEventsSupported) {\n zrUtil.each(globalNativeListenerNames.mouse, mount);\n }\n function mount(nativeEventName) {\n function nativeEventListener(event) {\n event = getNativeEvent(event);\n if (!isLocalEl(instance, event.target)) {\n event = normalizeGlobalEvent(instance, event);\n scope.domHandlers[nativeEventName].call(instance, event);\n }\n }\n mountSingleDOMEventListener(scope, nativeEventName, nativeEventListener, { capture: true });\n }\n}\nfunction mountSingleDOMEventListener(scope, nativeEventName, listener, opt) {\n scope.mounted[nativeEventName] = listener;\n scope.listenerOpts[nativeEventName] = opt;\n addEventListener(scope.domTarget, nativeEventName, listener, opt);\n}\nfunction unmountDOMEventListeners(scope) {\n var mounted = scope.mounted;\n for (var nativeEventName in mounted) {\n if (mounted.hasOwnProperty(nativeEventName)) {\n removeEventListener(scope.domTarget, nativeEventName, mounted[nativeEventName], scope.listenerOpts[nativeEventName]);\n }\n }\n scope.mounted = {};\n}\nvar DOMHandlerScope = (function () {\n function DOMHandlerScope(domTarget, domHandlers) {\n this.mounted = {};\n this.listenerOpts = {};\n this.touching = false;\n this.domTarget = domTarget;\n this.domHandlers = domHandlers;\n }\n return DOMHandlerScope;\n}());\nvar HandlerDomProxy = (function (_super) {\n __extends(HandlerDomProxy, _super);\n function HandlerDomProxy(dom, painterRoot) {\n var _this = _super.call(this) || this;\n _this.__pointerCapturing = false;\n _this.dom = dom;\n _this.painterRoot = painterRoot;\n _this._localHandlerScope = new DOMHandlerScope(dom, localDOMHandlers);\n if (globalEventSupported) {\n _this._globalHandlerScope = new DOMHandlerScope(document, globalDOMHandlers);\n }\n mountLocalDOMEventListeners(_this, _this._localHandlerScope);\n return _this;\n }\n HandlerDomProxy.prototype.dispose = function () {\n unmountDOMEventListeners(this._localHandlerScope);\n if (globalEventSupported) {\n unmountDOMEventListeners(this._globalHandlerScope);\n }\n };\n HandlerDomProxy.prototype.setCursor = function (cursorStyle) {\n this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n };\n HandlerDomProxy.prototype.__togglePointerCapture = function (isPointerCapturing) {\n this.__mayPointerCapture = null;\n if (globalEventSupported\n && ((+this.__pointerCapturing) ^ (+isPointerCapturing))) {\n this.__pointerCapturing = isPointerCapturing;\n var globalHandlerScope = this._globalHandlerScope;\n isPointerCapturing\n ? mountGlobalDOMEventListeners(this, globalHandlerScope)\n : unmountDOMEventListeners(globalHandlerScope);\n }\n };\n return HandlerDomProxy;\n}(Eventful));\nexport default HandlerDomProxy;\n","import env from './core/env.js';\nvar dpr = 1;\nif (env.hasGlobalWindow) {\n dpr = Math.max(window.devicePixelRatio\n || (window.screen && window.screen.deviceXDPI / window.screen.logicalXDPI)\n || 1, 1);\n}\nexport var debugMode = 0;\nexport var devicePixelRatio = dpr;\nexport var DARK_MODE_THRESHOLD = 0.4;\nexport var DARK_LABEL_COLOR = '#333';\nexport var LIGHT_LABEL_COLOR = '#ccc';\nexport var LIGHTER_LABEL_COLOR = '#eee';\n","import * as matrix from './matrix.js';\nimport * as vector from './vector.js';\nvar mIdentity = matrix.identity;\nvar EPSILON = 5e-5;\nfunction isNotAroundZero(val) {\n return val > EPSILON || val < -EPSILON;\n}\nvar scaleTmp = [];\nvar tmpTransform = [];\nvar originTransform = matrix.create();\nvar abs = Math.abs;\nvar Transformable = (function () {\n function Transformable() {\n }\n Transformable.prototype.getLocalTransform = function (m) {\n return Transformable.getLocalTransform(this, m);\n };\n Transformable.prototype.setPosition = function (arr) {\n this.x = arr[0];\n this.y = arr[1];\n };\n Transformable.prototype.setScale = function (arr) {\n this.scaleX = arr[0];\n this.scaleY = arr[1];\n };\n Transformable.prototype.setSkew = function (arr) {\n this.skewX = arr[0];\n this.skewY = arr[1];\n };\n Transformable.prototype.setOrigin = function (arr) {\n this.originX = arr[0];\n this.originY = arr[1];\n };\n Transformable.prototype.needLocalTransform = function () {\n return isNotAroundZero(this.rotation)\n || isNotAroundZero(this.x)\n || isNotAroundZero(this.y)\n || isNotAroundZero(this.scaleX - 1)\n || isNotAroundZero(this.scaleY - 1)\n || isNotAroundZero(this.skewX)\n || isNotAroundZero(this.skewY);\n };\n Transformable.prototype.updateTransform = function () {\n var parentTransform = this.parent && this.parent.transform;\n var needLocalTransform = this.needLocalTransform();\n var m = this.transform;\n if (!(needLocalTransform || parentTransform)) {\n if (m) {\n mIdentity(m);\n this.invTransform = null;\n }\n return;\n }\n m = m || matrix.create();\n if (needLocalTransform) {\n this.getLocalTransform(m);\n }\n else {\n mIdentity(m);\n }\n if (parentTransform) {\n if (needLocalTransform) {\n matrix.mul(m, parentTransform, m);\n }\n else {\n matrix.copy(m, parentTransform);\n }\n }\n this.transform = m;\n this._resolveGlobalScaleRatio(m);\n };\n Transformable.prototype._resolveGlobalScaleRatio = function (m) {\n var globalScaleRatio = this.globalScaleRatio;\n if (globalScaleRatio != null && globalScaleRatio !== 1) {\n this.getGlobalScale(scaleTmp);\n var relX = scaleTmp[0] < 0 ? -1 : 1;\n var relY = scaleTmp[1] < 0 ? -1 : 1;\n var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n m[0] *= sx;\n m[1] *= sx;\n m[2] *= sy;\n m[3] *= sy;\n }\n this.invTransform = this.invTransform || matrix.create();\n matrix.invert(this.invTransform, m);\n };\n Transformable.prototype.getComputedTransform = function () {\n var transformNode = this;\n var ancestors = [];\n while (transformNode) {\n ancestors.push(transformNode);\n transformNode = transformNode.parent;\n }\n while (transformNode = ancestors.pop()) {\n transformNode.updateTransform();\n }\n return this.transform;\n };\n Transformable.prototype.setLocalTransform = function (m) {\n if (!m) {\n return;\n }\n var sx = m[0] * m[0] + m[1] * m[1];\n var sy = m[2] * m[2] + m[3] * m[3];\n var rotation = Math.atan2(m[1], m[0]);\n var shearX = Math.PI / 2 + rotation - Math.atan2(m[3], m[2]);\n sy = Math.sqrt(sy) * Math.cos(shearX);\n sx = Math.sqrt(sx);\n this.skewX = shearX;\n this.skewY = 0;\n this.rotation = -rotation;\n this.x = +m[4];\n this.y = +m[5];\n this.scaleX = sx;\n this.scaleY = sy;\n this.originX = 0;\n this.originY = 0;\n };\n Transformable.prototype.decomposeTransform = function () {\n if (!this.transform) {\n return;\n }\n var parent = this.parent;\n var m = this.transform;\n if (parent && parent.transform) {\n parent.invTransform = parent.invTransform || matrix.create();\n matrix.mul(tmpTransform, parent.invTransform, m);\n m = tmpTransform;\n }\n var ox = this.originX;\n var oy = this.originY;\n if (ox || oy) {\n originTransform[4] = ox;\n originTransform[5] = oy;\n matrix.mul(tmpTransform, m, originTransform);\n tmpTransform[4] -= ox;\n tmpTransform[5] -= oy;\n m = tmpTransform;\n }\n this.setLocalTransform(m);\n };\n Transformable.prototype.getGlobalScale = function (out) {\n var m = this.transform;\n out = out || [];\n if (!m) {\n out[0] = 1;\n out[1] = 1;\n return out;\n }\n out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n if (m[0] < 0) {\n out[0] = -out[0];\n }\n if (m[3] < 0) {\n out[1] = -out[1];\n }\n return out;\n };\n Transformable.prototype.transformCoordToLocal = function (x, y) {\n var v2 = [x, y];\n var invTransform = this.invTransform;\n if (invTransform) {\n vector.applyTransform(v2, v2, invTransform);\n }\n return v2;\n };\n Transformable.prototype.transformCoordToGlobal = function (x, y) {\n var v2 = [x, y];\n var transform = this.transform;\n if (transform) {\n vector.applyTransform(v2, v2, transform);\n }\n return v2;\n };\n Transformable.prototype.getLineScale = function () {\n var m = this.transform;\n return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n : 1;\n };\n Transformable.prototype.copyTransform = function (source) {\n copyTransform(this, source);\n };\n Transformable.getLocalTransform = function (target, m) {\n m = m || [];\n var ox = target.originX || 0;\n var oy = target.originY || 0;\n var sx = target.scaleX;\n var sy = target.scaleY;\n var ax = target.anchorX;\n var ay = target.anchorY;\n var rotation = target.rotation || 0;\n var x = target.x;\n var y = target.y;\n var skewX = target.skewX ? Math.tan(target.skewX) : 0;\n var skewY = target.skewY ? Math.tan(-target.skewY) : 0;\n if (ox || oy || ax || ay) {\n var dx = ox + ax;\n var dy = oy + ay;\n m[4] = -dx * sx - skewX * dy * sy;\n m[5] = -dy * sy - skewY * dx * sx;\n }\n else {\n m[4] = m[5] = 0;\n }\n m[0] = sx;\n m[3] = sy;\n m[1] = skewY * sx;\n m[2] = skewX * sy;\n rotation && matrix.rotate(m, m, rotation);\n m[4] += ox + x;\n m[5] += oy + y;\n return m;\n };\n Transformable.initDefaultProps = (function () {\n var proto = Transformable.prototype;\n proto.scaleX =\n proto.scaleY =\n proto.globalScaleRatio = 1;\n proto.x =\n proto.y =\n proto.originX =\n proto.originY =\n proto.skewX =\n proto.skewY =\n proto.rotation =\n proto.anchorX =\n proto.anchorY = 0;\n })();\n return Transformable;\n}());\n;\nexport var TRANSFORMABLE_PROPS = [\n 'x', 'y', 'originX', 'originY', 'anchorX', 'anchorY', 'rotation', 'scaleX', 'scaleY', 'skewX', 'skewY'\n];\nexport function copyTransform(target, source) {\n for (var i = 0; i < TRANSFORMABLE_PROPS.length; i++) {\n var propName = TRANSFORMABLE_PROPS[i];\n target[propName] = source[propName];\n }\n}\nexport default Transformable;\n","import BoundingRect from '../core/BoundingRect.js';\nimport LRU from '../core/LRU.js';\nimport { DEFAULT_FONT, platformApi } from '../core/platform.js';\nvar textWidthCache = {};\nexport function getWidth(text, font) {\n font = font || DEFAULT_FONT;\n var cacheOfFont = textWidthCache[font];\n if (!cacheOfFont) {\n cacheOfFont = textWidthCache[font] = new LRU(500);\n }\n var width = cacheOfFont.get(text);\n if (width == null) {\n width = platformApi.measureText(text, font).width;\n cacheOfFont.put(text, width);\n }\n return width;\n}\nexport function innerGetBoundingRect(text, font, textAlign, textBaseline) {\n var width = getWidth(text, font);\n var height = getLineHeight(font);\n var x = adjustTextX(0, width, textAlign);\n var y = adjustTextY(0, height, textBaseline);\n var rect = new BoundingRect(x, y, width, height);\n return rect;\n}\nexport function getBoundingRect(text, font, textAlign, textBaseline) {\n var textLines = ((text || '') + '').split('\\n');\n var len = textLines.length;\n if (len === 1) {\n return innerGetBoundingRect(textLines[0], font, textAlign, textBaseline);\n }\n else {\n var uniondRect = new BoundingRect(0, 0, 0, 0);\n for (var i = 0; i < textLines.length; i++) {\n var rect = innerGetBoundingRect(textLines[i], font, textAlign, textBaseline);\n i === 0 ? uniondRect.copy(rect) : uniondRect.union(rect);\n }\n return uniondRect;\n }\n}\nexport function adjustTextX(x, width, textAlign) {\n if (textAlign === 'right') {\n x -= width;\n }\n else if (textAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nexport function adjustTextY(y, height, verticalAlign) {\n if (verticalAlign === 'middle') {\n y -= height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y -= height;\n }\n return y;\n}\nexport function getLineHeight(font) {\n return getWidth('国', font);\n}\nexport function measureText(text, font) {\n return platformApi.measureText(text, font);\n}\nexport function parsePercent(value, maxValue) {\n if (typeof value === 'string') {\n if (value.lastIndexOf('%') >= 0) {\n return parseFloat(value) / 100 * maxValue;\n }\n return parseFloat(value);\n }\n return value;\n}\nexport function calculateTextPosition(out, opts, rect) {\n var textPosition = opts.position || 'inside';\n var distance = opts.distance != null ? opts.distance : 5;\n var height = rect.height;\n var width = rect.width;\n var halfHeight = height / 2;\n var x = rect.x;\n var y = rect.y;\n var textAlign = 'left';\n var textVerticalAlign = 'top';\n if (textPosition instanceof Array) {\n x += parsePercent(textPosition[0], rect.width);\n y += parsePercent(textPosition[1], rect.height);\n textAlign = null;\n textVerticalAlign = null;\n }\n else {\n switch (textPosition) {\n case 'left':\n x -= distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'right':\n x += distance + width;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'top':\n x += width / 2;\n y -= distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'bottom':\n x += width / 2;\n y += height + distance;\n textAlign = 'center';\n break;\n case 'inside':\n x += width / 2;\n y += halfHeight;\n textAlign = 'center';\n textVerticalAlign = 'middle';\n break;\n case 'insideLeft':\n x += distance;\n y += halfHeight;\n textVerticalAlign = 'middle';\n break;\n case 'insideRight':\n x += width - distance;\n y += halfHeight;\n textAlign = 'right';\n textVerticalAlign = 'middle';\n break;\n case 'insideTop':\n x += width / 2;\n y += distance;\n textAlign = 'center';\n break;\n case 'insideBottom':\n x += width / 2;\n y += height - distance;\n textAlign = 'center';\n textVerticalAlign = 'bottom';\n break;\n case 'insideTopLeft':\n x += distance;\n y += distance;\n break;\n case 'insideTopRight':\n x += width - distance;\n y += distance;\n textAlign = 'right';\n break;\n case 'insideBottomLeft':\n x += distance;\n y += height - distance;\n textVerticalAlign = 'bottom';\n break;\n case 'insideBottomRight':\n x += width - distance;\n y += height - distance;\n textAlign = 'right';\n textVerticalAlign = 'bottom';\n break;\n }\n }\n out = out || {};\n out.x = x;\n out.y = y;\n out.align = textAlign;\n out.verticalAlign = textVerticalAlign;\n return out;\n}\n","import Transformable, { TRANSFORMABLE_PROPS } from './core/Transformable.js';\nimport Animator, { cloneValue } from './animation/Animator.js';\nimport BoundingRect from './core/BoundingRect.js';\nimport Eventful from './core/Eventful.js';\nimport { calculateTextPosition, parsePercent } from './contain/text.js';\nimport { guid, isObject, keys, extend, indexOf, logError, mixin, isArrayLike, isTypedArray, isGradientObject, filter, reduce } from './core/util.js';\nimport { LIGHT_LABEL_COLOR, DARK_LABEL_COLOR } from './config.js';\nimport { parse, stringify } from './tool/color.js';\nimport { REDRAW_BIT } from './graphic/constants.js';\nexport var PRESERVED_NORMAL_STATE = '__zr_normal__';\nvar PRIMARY_STATES_KEYS = TRANSFORMABLE_PROPS.concat(['ignore']);\nvar DEFAULT_ANIMATABLE_MAP = reduce(TRANSFORMABLE_PROPS, function (obj, key) {\n obj[key] = true;\n return obj;\n}, { ignore: false });\nvar tmpTextPosCalcRes = {};\nvar tmpBoundingRect = new BoundingRect(0, 0, 0, 0);\nvar Element = (function () {\n function Element(props) {\n this.id = guid();\n this.animators = [];\n this.currentStates = [];\n this.states = {};\n this._init(props);\n }\n Element.prototype._init = function (props) {\n this.attr(props);\n };\n Element.prototype.drift = function (dx, dy, e) {\n switch (this.draggable) {\n case 'horizontal':\n dy = 0;\n break;\n case 'vertical':\n dx = 0;\n break;\n }\n var m = this.transform;\n if (!m) {\n m = this.transform = [1, 0, 0, 1, 0, 0];\n }\n m[4] += dx;\n m[5] += dy;\n this.decomposeTransform();\n this.markRedraw();\n };\n Element.prototype.beforeUpdate = function () { };\n Element.prototype.afterUpdate = function () { };\n Element.prototype.update = function () {\n this.updateTransform();\n if (this.__dirty) {\n this.updateInnerText();\n }\n };\n Element.prototype.updateInnerText = function (forceUpdate) {\n var textEl = this._textContent;\n if (textEl && (!textEl.ignore || forceUpdate)) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n var textConfig = this.textConfig;\n var isLocal = textConfig.local;\n var innerTransformable = textEl.innerTransformable;\n var textAlign = void 0;\n var textVerticalAlign = void 0;\n var textStyleChanged = false;\n innerTransformable.parent = isLocal ? this : null;\n var innerOrigin = false;\n innerTransformable.copyTransform(textEl);\n if (textConfig.position != null) {\n var layoutRect = tmpBoundingRect;\n if (textConfig.layoutRect) {\n layoutRect.copy(textConfig.layoutRect);\n }\n else {\n layoutRect.copy(this.getBoundingRect());\n }\n if (!isLocal) {\n layoutRect.applyTransform(this.transform);\n }\n if (this.calculateTextPosition) {\n this.calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n else {\n calculateTextPosition(tmpTextPosCalcRes, textConfig, layoutRect);\n }\n innerTransformable.x = tmpTextPosCalcRes.x;\n innerTransformable.y = tmpTextPosCalcRes.y;\n textAlign = tmpTextPosCalcRes.align;\n textVerticalAlign = tmpTextPosCalcRes.verticalAlign;\n var textOrigin = textConfig.origin;\n if (textOrigin && textConfig.rotation != null) {\n var relOriginX = void 0;\n var relOriginY = void 0;\n if (textOrigin === 'center') {\n relOriginX = layoutRect.width * 0.5;\n relOriginY = layoutRect.height * 0.5;\n }\n else {\n relOriginX = parsePercent(textOrigin[0], layoutRect.width);\n relOriginY = parsePercent(textOrigin[1], layoutRect.height);\n }\n innerOrigin = true;\n innerTransformable.originX = -innerTransformable.x + relOriginX + (isLocal ? 0 : layoutRect.x);\n innerTransformable.originY = -innerTransformable.y + relOriginY + (isLocal ? 0 : layoutRect.y);\n }\n }\n if (textConfig.rotation != null) {\n innerTransformable.rotation = textConfig.rotation;\n }\n var textOffset = textConfig.offset;\n if (textOffset) {\n innerTransformable.x += textOffset[0];\n innerTransformable.y += textOffset[1];\n if (!innerOrigin) {\n innerTransformable.originX = -textOffset[0];\n innerTransformable.originY = -textOffset[1];\n }\n }\n var isInside = textConfig.inside == null\n ? (typeof textConfig.position === 'string' && textConfig.position.indexOf('inside') >= 0)\n : textConfig.inside;\n var innerTextDefaultStyle = this._innerTextDefaultStyle || (this._innerTextDefaultStyle = {});\n var textFill = void 0;\n var textStroke = void 0;\n var autoStroke = void 0;\n if (isInside && this.canBeInsideText()) {\n textFill = textConfig.insideFill;\n textStroke = textConfig.insideStroke;\n if (textFill == null || textFill === 'auto') {\n textFill = this.getInsideTextFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getInsideTextStroke(textFill);\n autoStroke = true;\n }\n }\n else {\n textFill = textConfig.outsideFill;\n textStroke = textConfig.outsideStroke;\n if (textFill == null || textFill === 'auto') {\n textFill = this.getOutsideFill();\n }\n if (textStroke == null || textStroke === 'auto') {\n textStroke = this.getOutsideStroke(textFill);\n autoStroke = true;\n }\n }\n textFill = textFill || '#000';\n if (textFill !== innerTextDefaultStyle.fill\n || textStroke !== innerTextDefaultStyle.stroke\n || autoStroke !== innerTextDefaultStyle.autoStroke\n || textAlign !== innerTextDefaultStyle.align\n || textVerticalAlign !== innerTextDefaultStyle.verticalAlign) {\n textStyleChanged = true;\n innerTextDefaultStyle.fill = textFill;\n innerTextDefaultStyle.stroke = textStroke;\n innerTextDefaultStyle.autoStroke = autoStroke;\n innerTextDefaultStyle.align = textAlign;\n innerTextDefaultStyle.verticalAlign = textVerticalAlign;\n textEl.setDefaultTextStyle(innerTextDefaultStyle);\n }\n textEl.__dirty |= REDRAW_BIT;\n if (textStyleChanged) {\n textEl.dirtyStyle(true);\n }\n }\n };\n Element.prototype.canBeInsideText = function () {\n return true;\n };\n Element.prototype.getInsideTextFill = function () {\n return '#fff';\n };\n Element.prototype.getInsideTextStroke = function (textFill) {\n return '#000';\n };\n Element.prototype.getOutsideFill = function () {\n return this.__zr && this.__zr.isDarkMode() ? LIGHT_LABEL_COLOR : DARK_LABEL_COLOR;\n };\n Element.prototype.getOutsideStroke = function (textFill) {\n var backgroundColor = this.__zr && this.__zr.getBackgroundColor();\n var colorArr = typeof backgroundColor === 'string' && parse(backgroundColor);\n if (!colorArr) {\n colorArr = [255, 255, 255, 1];\n }\n var alpha = colorArr[3];\n var isDark = this.__zr.isDarkMode();\n for (var i = 0; i < 3; i++) {\n colorArr[i] = colorArr[i] * alpha + (isDark ? 0 : 255) * (1 - alpha);\n }\n colorArr[3] = 1;\n return stringify(colorArr, 'rgba');\n };\n Element.prototype.traverse = function (cb, context) { };\n Element.prototype.attrKV = function (key, value) {\n if (key === 'textConfig') {\n this.setTextConfig(value);\n }\n else if (key === 'textContent') {\n this.setTextContent(value);\n }\n else if (key === 'clipPath') {\n this.setClipPath(value);\n }\n else if (key === 'extra') {\n this.extra = this.extra || {};\n extend(this.extra, value);\n }\n else {\n this[key] = value;\n }\n };\n Element.prototype.hide = function () {\n this.ignore = true;\n this.markRedraw();\n };\n Element.prototype.show = function () {\n this.ignore = false;\n this.markRedraw();\n };\n Element.prototype.attr = function (keyOrObj, value) {\n if (typeof keyOrObj === 'string') {\n this.attrKV(keyOrObj, value);\n }\n else if (isObject(keyOrObj)) {\n var obj = keyOrObj;\n var keysArr = keys(obj);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n this.attrKV(key, keyOrObj[key]);\n }\n }\n this.markRedraw();\n return this;\n };\n Element.prototype.saveCurrentToNormalState = function (toState) {\n this._innerSaveToNormal(toState);\n var normalState = this._normalState;\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n var fromStateTransition = animator.__fromStateTransition;\n if (animator.getLoop() || fromStateTransition && fromStateTransition !== PRESERVED_NORMAL_STATE) {\n continue;\n }\n var targetName = animator.targetName;\n var target = targetName\n ? normalState[targetName] : normalState;\n animator.saveTo(target);\n }\n };\n Element.prototype._innerSaveToNormal = function (toState) {\n var normalState = this._normalState;\n if (!normalState) {\n normalState = this._normalState = {};\n }\n if (toState.textConfig && !normalState.textConfig) {\n normalState.textConfig = this.textConfig;\n }\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n };\n Element.prototype._savePrimaryToNormal = function (toState, normalState, primaryKeys) {\n for (var i = 0; i < primaryKeys.length; i++) {\n var key = primaryKeys[i];\n if (toState[key] != null && !(key in normalState)) {\n normalState[key] = this[key];\n }\n }\n };\n Element.prototype.hasState = function () {\n return this.currentStates.length > 0;\n };\n Element.prototype.getState = function (name) {\n return this.states[name];\n };\n Element.prototype.ensureState = function (name) {\n var states = this.states;\n if (!states[name]) {\n states[name] = {};\n }\n return states[name];\n };\n Element.prototype.clearStates = function (noAnimation) {\n this.useState(PRESERVED_NORMAL_STATE, false, noAnimation);\n };\n Element.prototype.useState = function (stateName, keepCurrentStates, noAnimation, forceUseHoverLayer) {\n var toNormalState = stateName === PRESERVED_NORMAL_STATE;\n var hasStates = this.hasState();\n if (!hasStates && toNormalState) {\n return;\n }\n var currentStates = this.currentStates;\n var animationCfg = this.stateTransition;\n if (indexOf(currentStates, stateName) >= 0 && (keepCurrentStates || currentStates.length === 1)) {\n return;\n }\n var state;\n if (this.stateProxy && !toNormalState) {\n state = this.stateProxy(stateName);\n }\n if (!state) {\n state = (this.states && this.states[stateName]);\n }\n if (!state && !toNormalState) {\n logError(\"State \" + stateName + \" not exists.\");\n return;\n }\n if (!toNormalState) {\n this.saveCurrentToNormalState(state);\n }\n var useHoverLayer = !!((state && state.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n this._toggleHoverLayerFlag(true);\n }\n this._applyStateObj(stateName, state, this._normalState, keepCurrentStates, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg);\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useState(stateName, keepCurrentStates, noAnimation, useHoverLayer);\n }\n if (toNormalState) {\n this.currentStates = [];\n this._normalState = {};\n }\n else {\n if (!keepCurrentStates) {\n this.currentStates = [stateName];\n }\n else {\n this.currentStates.push(stateName);\n }\n }\n this._updateAnimationTargets();\n this.markRedraw();\n if (!useHoverLayer && this.__inHover) {\n this._toggleHoverLayerFlag(false);\n this.__dirty &= ~REDRAW_BIT;\n }\n return state;\n };\n Element.prototype.useStates = function (states, noAnimation, forceUseHoverLayer) {\n if (!states.length) {\n this.clearStates();\n }\n else {\n var stateObjects = [];\n var currentStates = this.currentStates;\n var len = states.length;\n var notChange = len === currentStates.length;\n if (notChange) {\n for (var i = 0; i < len; i++) {\n if (states[i] !== currentStates[i]) {\n notChange = false;\n break;\n }\n }\n }\n if (notChange) {\n return;\n }\n for (var i = 0; i < len; i++) {\n var stateName = states[i];\n var stateObj = void 0;\n if (this.stateProxy) {\n stateObj = this.stateProxy(stateName, states);\n }\n if (!stateObj) {\n stateObj = this.states[stateName];\n }\n if (stateObj) {\n stateObjects.push(stateObj);\n }\n }\n var lastStateObj = stateObjects[len - 1];\n var useHoverLayer = !!((lastStateObj && lastStateObj.hoverLayer) || forceUseHoverLayer);\n if (useHoverLayer) {\n this._toggleHoverLayerFlag(true);\n }\n var mergedState = this._mergeStates(stateObjects);\n var animationCfg = this.stateTransition;\n this.saveCurrentToNormalState(mergedState);\n this._applyStateObj(states.join(','), mergedState, this._normalState, false, !noAnimation && !this.__inHover && animationCfg && animationCfg.duration > 0, animationCfg);\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.useStates(states, noAnimation, useHoverLayer);\n }\n if (textGuide) {\n textGuide.useStates(states, noAnimation, useHoverLayer);\n }\n this._updateAnimationTargets();\n this.currentStates = states.slice();\n this.markRedraw();\n if (!useHoverLayer && this.__inHover) {\n this._toggleHoverLayerFlag(false);\n this.__dirty &= ~REDRAW_BIT;\n }\n }\n };\n Element.prototype.isSilent = function () {\n var isSilent = this.silent;\n var ancestor = this.parent;\n while (!isSilent && ancestor) {\n if (ancestor.silent) {\n isSilent = true;\n break;\n }\n ancestor = ancestor.parent;\n }\n return isSilent;\n };\n Element.prototype._updateAnimationTargets = function () {\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n if (animator.targetName) {\n animator.changeTarget(this[animator.targetName]);\n }\n }\n };\n Element.prototype.removeState = function (state) {\n var idx = indexOf(this.currentStates, state);\n if (idx >= 0) {\n var currentStates = this.currentStates.slice();\n currentStates.splice(idx, 1);\n this.useStates(currentStates);\n }\n };\n Element.prototype.replaceState = function (oldState, newState, forceAdd) {\n var currentStates = this.currentStates.slice();\n var idx = indexOf(currentStates, oldState);\n var newStateExists = indexOf(currentStates, newState) >= 0;\n if (idx >= 0) {\n if (!newStateExists) {\n currentStates[idx] = newState;\n }\n else {\n currentStates.splice(idx, 1);\n }\n }\n else if (forceAdd && !newStateExists) {\n currentStates.push(newState);\n }\n this.useStates(currentStates);\n };\n Element.prototype.toggleState = function (state, enable) {\n if (enable) {\n this.useState(state, true);\n }\n else {\n this.removeState(state);\n }\n };\n Element.prototype._mergeStates = function (states) {\n var mergedState = {};\n var mergedTextConfig;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n extend(mergedState, state);\n if (state.textConfig) {\n mergedTextConfig = mergedTextConfig || {};\n extend(mergedTextConfig, state.textConfig);\n }\n }\n if (mergedTextConfig) {\n mergedState.textConfig = mergedTextConfig;\n }\n return mergedState;\n };\n Element.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n var needsRestoreToNormal = !(state && keepCurrentStates);\n if (state && state.textConfig) {\n this.textConfig = extend({}, keepCurrentStates ? this.textConfig : normalState.textConfig);\n extend(this.textConfig, state.textConfig);\n }\n else if (needsRestoreToNormal) {\n if (normalState.textConfig) {\n this.textConfig = normalState.textConfig;\n }\n }\n var transitionTarget = {};\n var hasTransition = false;\n for (var i = 0; i < PRIMARY_STATES_KEYS.length; i++) {\n var key = PRIMARY_STATES_KEYS[i];\n var propNeedsTransition = transition && DEFAULT_ANIMATABLE_MAP[key];\n if (state && state[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = state[key];\n }\n else {\n this[key] = state[key];\n }\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n if (propNeedsTransition) {\n hasTransition = true;\n transitionTarget[key] = normalState[key];\n }\n else {\n this[key] = normalState[key];\n }\n }\n }\n }\n if (!transition) {\n for (var i = 0; i < this.animators.length; i++) {\n var animator = this.animators[i];\n var targetName = animator.targetName;\n if (!animator.getLoop()) {\n animator.__changeFinalValue(targetName\n ? (state || normalState)[targetName]\n : (state || normalState));\n }\n }\n }\n if (hasTransition) {\n this._transitionState(stateName, transitionTarget, animationCfg);\n }\n };\n Element.prototype._attachComponent = function (componentEl) {\n if (componentEl.__zr && !componentEl.__hostTarget) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('Text element has been added to zrender.');\n }\n return;\n }\n if (componentEl === this) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('Recursive component attachment.');\n }\n return;\n }\n var zr = this.__zr;\n if (zr) {\n componentEl.addSelfToZr(zr);\n }\n componentEl.__zr = zr;\n componentEl.__hostTarget = this;\n };\n Element.prototype._detachComponent = function (componentEl) {\n if (componentEl.__zr) {\n componentEl.removeSelfFromZr(componentEl.__zr);\n }\n componentEl.__zr = null;\n componentEl.__hostTarget = null;\n };\n Element.prototype.getClipPath = function () {\n return this._clipPath;\n };\n Element.prototype.setClipPath = function (clipPath) {\n if (this._clipPath && this._clipPath !== clipPath) {\n this.removeClipPath();\n }\n this._attachComponent(clipPath);\n this._clipPath = clipPath;\n this.markRedraw();\n };\n Element.prototype.removeClipPath = function () {\n var clipPath = this._clipPath;\n if (clipPath) {\n this._detachComponent(clipPath);\n this._clipPath = null;\n this.markRedraw();\n }\n };\n Element.prototype.getTextContent = function () {\n return this._textContent;\n };\n Element.prototype.setTextContent = function (textEl) {\n var previousTextContent = this._textContent;\n if (previousTextContent === textEl) {\n return;\n }\n if (previousTextContent && previousTextContent !== textEl) {\n this.removeTextContent();\n }\n if (process.env.NODE_ENV !== 'production') {\n if (textEl.__zr && !textEl.__hostTarget) {\n throw new Error('Text element has been added to zrender.');\n }\n }\n textEl.innerTransformable = new Transformable();\n this._attachComponent(textEl);\n this._textContent = textEl;\n this.markRedraw();\n };\n Element.prototype.setTextConfig = function (cfg) {\n if (!this.textConfig) {\n this.textConfig = {};\n }\n extend(this.textConfig, cfg);\n this.markRedraw();\n };\n Element.prototype.removeTextConfig = function () {\n this.textConfig = null;\n this.markRedraw();\n };\n Element.prototype.removeTextContent = function () {\n var textEl = this._textContent;\n if (textEl) {\n textEl.innerTransformable = null;\n this._detachComponent(textEl);\n this._textContent = null;\n this._innerTextDefaultStyle = null;\n this.markRedraw();\n }\n };\n Element.prototype.getTextGuideLine = function () {\n return this._textGuide;\n };\n Element.prototype.setTextGuideLine = function (guideLine) {\n if (this._textGuide && this._textGuide !== guideLine) {\n this.removeTextGuideLine();\n }\n this._attachComponent(guideLine);\n this._textGuide = guideLine;\n this.markRedraw();\n };\n Element.prototype.removeTextGuideLine = function () {\n var textGuide = this._textGuide;\n if (textGuide) {\n this._detachComponent(textGuide);\n this._textGuide = null;\n this.markRedraw();\n }\n };\n Element.prototype.markRedraw = function () {\n this.__dirty |= REDRAW_BIT;\n var zr = this.__zr;\n if (zr) {\n if (this.__inHover) {\n zr.refreshHover();\n }\n else {\n zr.refresh();\n }\n }\n if (this.__hostTarget) {\n this.__hostTarget.markRedraw();\n }\n };\n Element.prototype.dirty = function () {\n this.markRedraw();\n };\n Element.prototype._toggleHoverLayerFlag = function (inHover) {\n this.__inHover = inHover;\n var textContent = this._textContent;\n var textGuide = this._textGuide;\n if (textContent) {\n textContent.__inHover = inHover;\n }\n if (textGuide) {\n textGuide.__inHover = inHover;\n }\n };\n Element.prototype.addSelfToZr = function (zr) {\n if (this.__zr === zr) {\n return;\n }\n this.__zr = zr;\n var animators = this.animators;\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.addAnimator(animators[i]);\n }\n }\n if (this._clipPath) {\n this._clipPath.addSelfToZr(zr);\n }\n if (this._textContent) {\n this._textContent.addSelfToZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.addSelfToZr(zr);\n }\n };\n Element.prototype.removeSelfFromZr = function (zr) {\n if (!this.__zr) {\n return;\n }\n this.__zr = null;\n var animators = this.animators;\n if (animators) {\n for (var i = 0; i < animators.length; i++) {\n zr.animation.removeAnimator(animators[i]);\n }\n }\n if (this._clipPath) {\n this._clipPath.removeSelfFromZr(zr);\n }\n if (this._textContent) {\n this._textContent.removeSelfFromZr(zr);\n }\n if (this._textGuide) {\n this._textGuide.removeSelfFromZr(zr);\n }\n };\n Element.prototype.animate = function (key, loop, allowDiscreteAnimation) {\n var target = key ? this[key] : this;\n if (process.env.NODE_ENV !== 'production') {\n if (!target) {\n logError('Property \"'\n + key\n + '\" is not existed in element '\n + this.id);\n return;\n }\n }\n var animator = new Animator(target, loop, allowDiscreteAnimation);\n key && (animator.targetName = key);\n this.addAnimator(animator, key);\n return animator;\n };\n Element.prototype.addAnimator = function (animator, key) {\n var zr = this.__zr;\n var el = this;\n animator.during(function () {\n el.updateDuringAnimation(key);\n }).done(function () {\n var animators = el.animators;\n var idx = indexOf(animators, animator);\n if (idx >= 0) {\n animators.splice(idx, 1);\n }\n });\n this.animators.push(animator);\n if (zr) {\n zr.animation.addAnimator(animator);\n }\n zr && zr.wakeUp();\n };\n Element.prototype.updateDuringAnimation = function (key) {\n this.markRedraw();\n };\n Element.prototype.stopAnimation = function (scope, forwardToLast) {\n var animators = this.animators;\n var len = animators.length;\n var leftAnimators = [];\n for (var i = 0; i < len; i++) {\n var animator = animators[i];\n if (!scope || scope === animator.scope) {\n animator.stop(forwardToLast);\n }\n else {\n leftAnimators.push(animator);\n }\n }\n this.animators = leftAnimators;\n return this;\n };\n Element.prototype.animateTo = function (target, cfg, animationProps) {\n animateTo(this, target, cfg, animationProps);\n };\n Element.prototype.animateFrom = function (target, cfg, animationProps) {\n animateTo(this, target, cfg, animationProps, true);\n };\n Element.prototype._transitionState = function (stateName, target, cfg, animationProps) {\n var animators = animateTo(this, target, cfg, animationProps);\n for (var i = 0; i < animators.length; i++) {\n animators[i].__fromStateTransition = stateName;\n }\n };\n Element.prototype.getBoundingRect = function () {\n return null;\n };\n Element.prototype.getPaintRect = function () {\n return null;\n };\n Element.initDefaultProps = (function () {\n var elProto = Element.prototype;\n elProto.type = 'element';\n elProto.name = '';\n elProto.ignore =\n elProto.silent =\n elProto.isGroup =\n elProto.draggable =\n elProto.dragging =\n elProto.ignoreClip =\n elProto.__inHover = false;\n elProto.__dirty = REDRAW_BIT;\n var logs = {};\n function logDeprecatedError(key, xKey, yKey) {\n if (!logs[key + xKey + yKey]) {\n console.warn(\"DEPRECATED: '\" + key + \"' has been deprecated. use '\" + xKey + \"', '\" + yKey + \"' instead\");\n logs[key + xKey + yKey] = true;\n }\n }\n function createLegacyProperty(key, privateKey, xKey, yKey) {\n Object.defineProperty(elProto, key, {\n get: function () {\n if (process.env.NODE_ENV !== 'production') {\n logDeprecatedError(key, xKey, yKey);\n }\n if (!this[privateKey]) {\n var pos = this[privateKey] = [];\n enhanceArray(this, pos);\n }\n return this[privateKey];\n },\n set: function (pos) {\n if (process.env.NODE_ENV !== 'production') {\n logDeprecatedError(key, xKey, yKey);\n }\n this[xKey] = pos[0];\n this[yKey] = pos[1];\n this[privateKey] = pos;\n enhanceArray(this, pos);\n }\n });\n function enhanceArray(self, pos) {\n Object.defineProperty(pos, 0, {\n get: function () {\n return self[xKey];\n },\n set: function (val) {\n self[xKey] = val;\n }\n });\n Object.defineProperty(pos, 1, {\n get: function () {\n return self[yKey];\n },\n set: function (val) {\n self[yKey] = val;\n }\n });\n }\n }\n if (Object.defineProperty) {\n createLegacyProperty('position', '_legacyPos', 'x', 'y');\n createLegacyProperty('scale', '_legacyScale', 'scaleX', 'scaleY');\n createLegacyProperty('origin', '_legacyOrigin', 'originX', 'originY');\n }\n })();\n return Element;\n}());\nmixin(Element, Eventful);\nmixin(Element, Transformable);\nfunction animateTo(animatable, target, cfg, animationProps, reverse) {\n cfg = cfg || {};\n var animators = [];\n animateToShallow(animatable, '', animatable, target, cfg, animationProps, animators, reverse);\n var finishCount = animators.length;\n var doneHappened = false;\n var cfgDone = cfg.done;\n var cfgAborted = cfg.aborted;\n var doneCb = function () {\n doneHappened = true;\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n var abortedCb = function () {\n finishCount--;\n if (finishCount <= 0) {\n doneHappened\n ? (cfgDone && cfgDone())\n : (cfgAborted && cfgAborted());\n }\n };\n if (!finishCount) {\n cfgDone && cfgDone();\n }\n if (animators.length > 0 && cfg.during) {\n animators[0].during(function (target, percent) {\n cfg.during(percent);\n });\n }\n for (var i = 0; i < animators.length; i++) {\n var animator = animators[i];\n if (doneCb) {\n animator.done(doneCb);\n }\n if (abortedCb) {\n animator.aborted(abortedCb);\n }\n if (cfg.force) {\n animator.duration(cfg.duration);\n }\n animator.start(cfg.easing);\n }\n return animators;\n}\nfunction copyArrShallow(source, target, len) {\n for (var i = 0; i < len; i++) {\n source[i] = target[i];\n }\n}\nfunction is2DArray(value) {\n return isArrayLike(value[0]);\n}\nfunction copyValue(target, source, key) {\n if (isArrayLike(source[key])) {\n if (!isArrayLike(target[key])) {\n target[key] = [];\n }\n if (isTypedArray(source[key])) {\n var len = source[key].length;\n if (target[key].length !== len) {\n target[key] = new (source[key].constructor)(len);\n copyArrShallow(target[key], source[key], len);\n }\n }\n else {\n var sourceArr = source[key];\n var targetArr = target[key];\n var len0 = sourceArr.length;\n if (is2DArray(sourceArr)) {\n var len1 = sourceArr[0].length;\n for (var i = 0; i < len0; i++) {\n if (!targetArr[i]) {\n targetArr[i] = Array.prototype.slice.call(sourceArr[i]);\n }\n else {\n copyArrShallow(targetArr[i], sourceArr[i], len1);\n }\n }\n }\n else {\n copyArrShallow(targetArr, sourceArr, len0);\n }\n targetArr.length = sourceArr.length;\n }\n }\n else {\n target[key] = source[key];\n }\n}\nfunction isValueSame(val1, val2) {\n return val1 === val2\n || isArrayLike(val1) && isArrayLike(val2) && is1DArraySame(val1, val2);\n}\nfunction is1DArraySame(arr0, arr1) {\n var len = arr0.length;\n if (len !== arr1.length) {\n return false;\n }\n for (var i = 0; i < len; i++) {\n if (arr0[i] !== arr1[i]) {\n return false;\n }\n }\n return true;\n}\nfunction animateToShallow(animatable, topKey, animateObj, target, cfg, animationProps, animators, reverse) {\n var targetKeys = keys(target);\n var duration = cfg.duration;\n var delay = cfg.delay;\n var additive = cfg.additive;\n var setToFinal = cfg.setToFinal;\n var animateAll = !isObject(animationProps);\n var existsAnimators = animatable.animators;\n var animationKeys = [];\n for (var k = 0; k < targetKeys.length; k++) {\n var innerKey = targetKeys[k];\n var targetVal = target[innerKey];\n if (targetVal != null && animateObj[innerKey] != null\n && (animateAll || animationProps[innerKey])) {\n if (isObject(targetVal)\n && !isArrayLike(targetVal)\n && !isGradientObject(targetVal)) {\n if (topKey) {\n if (!reverse) {\n animateObj[innerKey] = targetVal;\n animatable.updateDuringAnimation(topKey);\n }\n continue;\n }\n animateToShallow(animatable, innerKey, animateObj[innerKey], targetVal, cfg, animationProps && animationProps[innerKey], animators, reverse);\n }\n else {\n animationKeys.push(innerKey);\n }\n }\n else if (!reverse) {\n animateObj[innerKey] = targetVal;\n animatable.updateDuringAnimation(topKey);\n animationKeys.push(innerKey);\n }\n }\n var keyLen = animationKeys.length;\n if (!additive && keyLen) {\n for (var i = 0; i < existsAnimators.length; i++) {\n var animator = existsAnimators[i];\n if (animator.targetName === topKey) {\n var allAborted = animator.stopTracks(animationKeys);\n if (allAborted) {\n var idx = indexOf(existsAnimators, animator);\n existsAnimators.splice(idx, 1);\n }\n }\n }\n }\n if (!cfg.force) {\n animationKeys = filter(animationKeys, function (key) { return !isValueSame(target[key], animateObj[key]); });\n keyLen = animationKeys.length;\n }\n if (keyLen > 0\n || (cfg.force && !animators.length)) {\n var revertedSource = void 0;\n var reversedTarget = void 0;\n var sourceClone = void 0;\n if (reverse) {\n reversedTarget = {};\n if (setToFinal) {\n revertedSource = {};\n }\n for (var i = 0; i < keyLen; i++) {\n var innerKey = animationKeys[i];\n reversedTarget[innerKey] = animateObj[innerKey];\n if (setToFinal) {\n revertedSource[innerKey] = target[innerKey];\n }\n else {\n animateObj[innerKey] = target[innerKey];\n }\n }\n }\n else if (setToFinal) {\n sourceClone = {};\n for (var i = 0; i < keyLen; i++) {\n var innerKey = animationKeys[i];\n sourceClone[innerKey] = cloneValue(animateObj[innerKey]);\n copyValue(animateObj, target, innerKey);\n }\n }\n var animator = new Animator(animateObj, false, false, additive ? filter(existsAnimators, function (animator) { return animator.targetName === topKey; }) : null);\n animator.targetName = topKey;\n if (cfg.scope) {\n animator.scope = cfg.scope;\n }\n if (setToFinal && revertedSource) {\n animator.whenWithKeys(0, revertedSource, animationKeys);\n }\n if (sourceClone) {\n animator.whenWithKeys(0, sourceClone, animationKeys);\n }\n animator.whenWithKeys(duration == null ? 500 : duration, reverse ? reversedTarget : target, animationKeys).delay(delay || 0);\n animatable.addAnimator(animator, topKey);\n animators.push(animator);\n }\n}\nexport default Element;\n","import { __extends } from \"tslib\";\nimport * as zrUtil from '../core/util.js';\nimport Element from '../Element.js';\nimport BoundingRect from '../core/BoundingRect.js';\nvar Group = (function (_super) {\n __extends(Group, _super);\n function Group(opts) {\n var _this = _super.call(this) || this;\n _this.isGroup = true;\n _this._children = [];\n _this.attr(opts);\n return _this;\n }\n Group.prototype.childrenRef = function () {\n return this._children;\n };\n Group.prototype.children = function () {\n return this._children.slice();\n };\n Group.prototype.childAt = function (idx) {\n return this._children[idx];\n };\n Group.prototype.childOfName = function (name) {\n var children = this._children;\n for (var i = 0; i < children.length; i++) {\n if (children[i].name === name) {\n return children[i];\n }\n }\n };\n Group.prototype.childCount = function () {\n return this._children.length;\n };\n Group.prototype.add = function (child) {\n if (child) {\n if (child !== this && child.parent !== this) {\n this._children.push(child);\n this._doAdd(child);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (child.__hostTarget) {\n throw 'This elemenet has been used as an attachment';\n }\n }\n }\n return this;\n };\n Group.prototype.addBefore = function (child, nextSibling) {\n if (child && child !== this && child.parent !== this\n && nextSibling && nextSibling.parent === this) {\n var children = this._children;\n var idx = children.indexOf(nextSibling);\n if (idx >= 0) {\n children.splice(idx, 0, child);\n this._doAdd(child);\n }\n }\n return this;\n };\n Group.prototype.replace = function (oldChild, newChild) {\n var idx = zrUtil.indexOf(this._children, oldChild);\n if (idx >= 0) {\n this.replaceAt(newChild, idx);\n }\n return this;\n };\n Group.prototype.replaceAt = function (child, index) {\n var children = this._children;\n var old = children[index];\n if (child && child !== this && child.parent !== this && child !== old) {\n children[index] = child;\n old.parent = null;\n var zr = this.__zr;\n if (zr) {\n old.removeSelfFromZr(zr);\n }\n this._doAdd(child);\n }\n return this;\n };\n Group.prototype._doAdd = function (child) {\n if (child.parent) {\n child.parent.remove(child);\n }\n child.parent = this;\n var zr = this.__zr;\n if (zr && zr !== child.__zr) {\n child.addSelfToZr(zr);\n }\n zr && zr.refresh();\n };\n Group.prototype.remove = function (child) {\n var zr = this.__zr;\n var children = this._children;\n var idx = zrUtil.indexOf(children, child);\n if (idx < 0) {\n return this;\n }\n children.splice(idx, 1);\n child.parent = null;\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n zr && zr.refresh();\n return this;\n };\n Group.prototype.removeAll = function () {\n var children = this._children;\n var zr = this.__zr;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (zr) {\n child.removeSelfFromZr(zr);\n }\n child.parent = null;\n }\n children.length = 0;\n return this;\n };\n Group.prototype.eachChild = function (cb, context) {\n var children = this._children;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n cb.call(context, child, i);\n }\n return this;\n };\n Group.prototype.traverse = function (cb, context) {\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n var stopped = cb.call(context, child);\n if (child.isGroup && !stopped) {\n child.traverse(cb, context);\n }\n }\n return this;\n };\n Group.prototype.addSelfToZr = function (zr) {\n _super.prototype.addSelfToZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.addSelfToZr(zr);\n }\n };\n Group.prototype.removeSelfFromZr = function (zr) {\n _super.prototype.removeSelfFromZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.removeSelfFromZr(zr);\n }\n };\n Group.prototype.getBoundingRect = function (includeChildren) {\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = includeChildren || this._children;\n var tmpMat = [];\n var rect = null;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if (child.ignore || child.invisible) {\n continue;\n }\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat);\n if (transform) {\n BoundingRect.applyTransform(tmpRect, childRect, transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n return rect || tmpRect;\n };\n return Group;\n}(Element));\nGroup.prototype.type = 'group';\nexport default Group;\n","/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\nimport env from './core/env.js';\nimport * as zrUtil from './core/util.js';\nimport Handler from './Handler.js';\nimport Storage from './Storage.js';\nimport Animation, { getTime } from './animation/Animation.js';\nimport HandlerProxy from './dom/HandlerProxy.js';\nimport { lum } from './tool/color.js';\nimport { DARK_MODE_THRESHOLD } from './config.js';\nimport Group from './graphic/Group.js';\nvar painterCtors = {};\nvar instances = {};\nfunction delInstance(id) {\n delete instances[id];\n}\nfunction isDarkMode(backgroundColor) {\n if (!backgroundColor) {\n return false;\n }\n if (typeof backgroundColor === 'string') {\n return lum(backgroundColor, 1) < DARK_MODE_THRESHOLD;\n }\n else if (backgroundColor.colorStops) {\n var colorStops = backgroundColor.colorStops;\n var totalLum = 0;\n var len = colorStops.length;\n for (var i = 0; i < len; i++) {\n totalLum += lum(colorStops[i].color, 1);\n }\n totalLum /= len;\n return totalLum < DARK_MODE_THRESHOLD;\n }\n return false;\n}\nvar ZRender = (function () {\n function ZRender(id, dom, opts) {\n var _this = this;\n this._sleepAfterStill = 10;\n this._stillFrameAccum = 0;\n this._needsRefresh = true;\n this._needsRefreshHover = true;\n this._darkMode = false;\n opts = opts || {};\n this.dom = dom;\n this.id = id;\n var storage = new Storage();\n var rendererType = opts.renderer || 'canvas';\n if (!painterCtors[rendererType]) {\n rendererType = zrUtil.keys(painterCtors)[0];\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!painterCtors[rendererType]) {\n throw new Error(\"Renderer '\" + rendererType + \"' is not imported. Please import it first.\");\n }\n }\n opts.useDirtyRect = opts.useDirtyRect == null\n ? false\n : opts.useDirtyRect;\n var painter = new painterCtors[rendererType](dom, storage, opts, id);\n var ssrMode = opts.ssr || painter.ssrOnly;\n this.storage = storage;\n this.painter = painter;\n var handlerProxy = (!env.node && !env.worker && !ssrMode)\n ? new HandlerProxy(painter.getViewportRoot(), painter.root)\n : null;\n var useCoarsePointer = opts.useCoarsePointer;\n var usePointerSize = (useCoarsePointer == null || useCoarsePointer === 'auto')\n ? env.touchEventsSupported\n : !!useCoarsePointer;\n var defaultPointerSize = 44;\n var pointerSize;\n if (usePointerSize) {\n pointerSize = zrUtil.retrieve2(opts.pointerSize, defaultPointerSize);\n }\n this.handler = new Handler(storage, painter, handlerProxy, painter.root, pointerSize);\n this.animation = new Animation({\n stage: {\n update: ssrMode ? null : function () { return _this._flush(true); }\n }\n });\n if (!ssrMode) {\n this.animation.start();\n }\n }\n ZRender.prototype.add = function (el) {\n if (this._disposed || !el) {\n return;\n }\n this.storage.addRoot(el);\n el.addSelfToZr(this);\n this.refresh();\n };\n ZRender.prototype.remove = function (el) {\n if (this._disposed || !el) {\n return;\n }\n this.storage.delRoot(el);\n el.removeSelfFromZr(this);\n this.refresh();\n };\n ZRender.prototype.configLayer = function (zLevel, config) {\n if (this._disposed) {\n return;\n }\n if (this.painter.configLayer) {\n this.painter.configLayer(zLevel, config);\n }\n this.refresh();\n };\n ZRender.prototype.setBackgroundColor = function (backgroundColor) {\n if (this._disposed) {\n return;\n }\n if (this.painter.setBackgroundColor) {\n this.painter.setBackgroundColor(backgroundColor);\n }\n this.refresh();\n this._backgroundColor = backgroundColor;\n this._darkMode = isDarkMode(backgroundColor);\n };\n ZRender.prototype.getBackgroundColor = function () {\n return this._backgroundColor;\n };\n ZRender.prototype.setDarkMode = function (darkMode) {\n this._darkMode = darkMode;\n };\n ZRender.prototype.isDarkMode = function () {\n return this._darkMode;\n };\n ZRender.prototype.refreshImmediately = function (fromInside) {\n if (this._disposed) {\n return;\n }\n if (!fromInside) {\n this.animation.update(true);\n }\n this._needsRefresh = false;\n this.painter.refresh();\n this._needsRefresh = false;\n };\n ZRender.prototype.refresh = function () {\n if (this._disposed) {\n return;\n }\n this._needsRefresh = true;\n this.animation.start();\n };\n ZRender.prototype.flush = function () {\n if (this._disposed) {\n return;\n }\n this._flush(false);\n };\n ZRender.prototype._flush = function (fromInside) {\n var triggerRendered;\n var start = getTime();\n if (this._needsRefresh) {\n triggerRendered = true;\n this.refreshImmediately(fromInside);\n }\n if (this._needsRefreshHover) {\n triggerRendered = true;\n this.refreshHoverImmediately();\n }\n var end = getTime();\n if (triggerRendered) {\n this._stillFrameAccum = 0;\n this.trigger('rendered', {\n elapsedTime: end - start\n });\n }\n else if (this._sleepAfterStill > 0) {\n this._stillFrameAccum++;\n if (this._stillFrameAccum > this._sleepAfterStill) {\n this.animation.stop();\n }\n }\n };\n ZRender.prototype.setSleepAfterStill = function (stillFramesCount) {\n this._sleepAfterStill = stillFramesCount;\n };\n ZRender.prototype.wakeUp = function () {\n if (this._disposed) {\n return;\n }\n this.animation.start();\n this._stillFrameAccum = 0;\n };\n ZRender.prototype.refreshHover = function () {\n this._needsRefreshHover = true;\n };\n ZRender.prototype.refreshHoverImmediately = function () {\n if (this._disposed) {\n return;\n }\n this._needsRefreshHover = false;\n if (this.painter.refreshHover && this.painter.getType() === 'canvas') {\n this.painter.refreshHover();\n }\n };\n ZRender.prototype.resize = function (opts) {\n if (this._disposed) {\n return;\n }\n opts = opts || {};\n this.painter.resize(opts.width, opts.height);\n this.handler.resize();\n };\n ZRender.prototype.clearAnimation = function () {\n if (this._disposed) {\n return;\n }\n this.animation.clear();\n };\n ZRender.prototype.getWidth = function () {\n if (this._disposed) {\n return;\n }\n return this.painter.getWidth();\n };\n ZRender.prototype.getHeight = function () {\n if (this._disposed) {\n return;\n }\n return this.painter.getHeight();\n };\n ZRender.prototype.setCursorStyle = function (cursorStyle) {\n if (this._disposed) {\n return;\n }\n this.handler.setCursorStyle(cursorStyle);\n };\n ZRender.prototype.findHover = function (x, y) {\n if (this._disposed) {\n return;\n }\n return this.handler.findHover(x, y);\n };\n ZRender.prototype.on = function (eventName, eventHandler, context) {\n if (!this._disposed) {\n this.handler.on(eventName, eventHandler, context);\n }\n return this;\n };\n ZRender.prototype.off = function (eventName, eventHandler) {\n if (this._disposed) {\n return;\n }\n this.handler.off(eventName, eventHandler);\n };\n ZRender.prototype.trigger = function (eventName, event) {\n if (this._disposed) {\n return;\n }\n this.handler.trigger(eventName, event);\n };\n ZRender.prototype.clear = function () {\n if (this._disposed) {\n return;\n }\n var roots = this.storage.getRoots();\n for (var i = 0; i < roots.length; i++) {\n if (roots[i] instanceof Group) {\n roots[i].removeSelfFromZr(this);\n }\n }\n this.storage.delAllRoots();\n this.painter.clear();\n };\n ZRender.prototype.dispose = function () {\n if (this._disposed) {\n return;\n }\n this.animation.stop();\n this.clear();\n this.storage.dispose();\n this.painter.dispose();\n this.handler.dispose();\n this.animation =\n this.storage =\n this.painter =\n this.handler = null;\n this._disposed = true;\n delInstance(this.id);\n };\n return ZRender;\n}());\nexport function init(dom, opts) {\n var zr = new ZRender(zrUtil.guid(), dom, opts);\n instances[zr.id] = zr;\n return zr;\n}\nexport function dispose(zr) {\n zr.dispose();\n}\nexport function disposeAll() {\n for (var key in instances) {\n if (instances.hasOwnProperty(key)) {\n instances[key].dispose();\n }\n }\n instances = {};\n}\nexport function getInstance(id) {\n return instances[id];\n}\nexport function registerPainter(name, Ctor) {\n painterCtors[name] = Ctor;\n}\nvar ssrDataGetter;\nexport function getElementSSRData(el) {\n if (typeof ssrDataGetter === 'function') {\n return ssrDataGetter(el);\n }\n}\nexport function registerSSRDataGetter(getter) {\n ssrDataGetter = getter;\n}\nexport var version = '5.5.0';\n;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/*\n* A third-party license is embedded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar RADIAN_EPSILON = 1e-4;\n// Although chrome already enlarge this number to 100 for `toFixed`, but\n// we sill follow the spec for compatibility.\nvar ROUND_SUPPORTED_PRECISION_MAX = 20;\nfunction _trim(str) {\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n/**\n * Linear mapping a value from domain to range\n * @param val\n * @param domain Domain extent domain[0] can be bigger than domain[1]\n * @param range Range extent range[0] can be bigger than range[1]\n * @param clamp Default to be false\n */\nexport function linearMap(val, domain, range, clamp) {\n var d0 = domain[0];\n var d1 = domain[1];\n var r0 = range[0];\n var r1 = range[1];\n var subDomain = d1 - d0;\n var subRange = r1 - r0;\n if (subDomain === 0) {\n return subRange === 0 ? r0 : (r0 + r1) / 2;\n }\n // Avoid accuracy problem in edge, such as\n // 146.39 - 62.83 === 83.55999999999999.\n // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n // It is a little verbose for efficiency considering this method\n // is a hotspot.\n if (clamp) {\n if (subDomain > 0) {\n if (val <= d0) {\n return r0;\n } else if (val >= d1) {\n return r1;\n }\n } else {\n if (val >= d0) {\n return r0;\n } else if (val <= d1) {\n return r1;\n }\n }\n } else {\n if (val === d0) {\n return r0;\n }\n if (val === d1) {\n return r1;\n }\n }\n return (val - d0) / subDomain * subRange + r0;\n}\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n */\nexport function parsePercent(percent, all) {\n switch (percent) {\n case 'center':\n case 'middle':\n percent = '50%';\n break;\n case 'left':\n case 'top':\n percent = '0%';\n break;\n case 'right':\n case 'bottom':\n percent = '100%';\n break;\n }\n if (zrUtil.isString(percent)) {\n if (_trim(percent).match(/%$/)) {\n return parseFloat(percent) / 100 * all;\n }\n return parseFloat(percent);\n }\n return percent == null ? NaN : +percent;\n}\nexport function round(x, precision, returnStr) {\n if (precision == null) {\n precision = 10;\n }\n // Avoid range error\n precision = Math.min(Math.max(0, precision), ROUND_SUPPORTED_PRECISION_MAX);\n // PENDING: 1.005.toFixed(2) is '1.00' rather than '1.01'\n x = (+x).toFixed(precision);\n return returnStr ? x : +x;\n}\n/**\n * Inplacd asc sort arr.\n * The input arr will be modified.\n */\nexport function asc(arr) {\n arr.sort(function (a, b) {\n return a - b;\n });\n return arr;\n}\n/**\n * Get precision.\n */\nexport function getPrecision(val) {\n val = +val;\n if (isNaN(val)) {\n return 0;\n }\n // It is much faster than methods converting number to string as follows\n // let tmp = val.toString();\n // return tmp.length - 1 - tmp.indexOf('.');\n // especially when precision is low\n // Notice:\n // (1) If the loop count is over about 20, it is slower than `getPrecisionSafe`.\n // (see https://jsbench.me/2vkpcekkvw/1)\n // (2) If the val is less than for example 1e-15, the result may be incorrect.\n // (see test/ut/spec/util/number.test.ts `getPrecision_equal_random`)\n if (val > 1e-14) {\n var e = 1;\n for (var i = 0; i < 15; i++, e *= 10) {\n if (Math.round(val * e) / e === val) {\n return i;\n }\n }\n }\n return getPrecisionSafe(val);\n}\n/**\n * Get precision with slow but safe method\n */\nexport function getPrecisionSafe(val) {\n // toLowerCase for: '3.4E-12'\n var str = val.toString().toLowerCase();\n // Consider scientific notation: '3.4e-12' '3.4e+12'\n var eIndex = str.indexOf('e');\n var exp = eIndex > 0 ? +str.slice(eIndex + 1) : 0;\n var significandPartLen = eIndex > 0 ? eIndex : str.length;\n var dotIndex = str.indexOf('.');\n var decimalPartLen = dotIndex < 0 ? 0 : significandPartLen - 1 - dotIndex;\n return Math.max(0, decimalPartLen - exp);\n}\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n */\nexport function getPixelPrecision(dataExtent, pixelExtent) {\n var log = Math.log;\n var LN10 = Math.LN10;\n var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10);\n // toFixed() digits argument must be between 0 and 20.\n var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n return !isFinite(precision) ? 20 : precision;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param idx index of the data to be processed in valueList\n * @param precision integer number showing digits of precision\n * @return percent ranging from 0 to 100\n */\nexport function getPercentWithPrecision(valueList, idx, precision) {\n if (!valueList[idx]) {\n return 0;\n }\n var seats = getPercentSeats(valueList, precision);\n return seats[idx] || 0;\n}\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainder method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param valueList a list of all data\n * @param precision integer number showing digits of precision\n * @return {Array}\n */\nexport function getPercentSeats(valueList, precision) {\n var sum = zrUtil.reduce(valueList, function (acc, val) {\n return acc + (isNaN(val) ? 0 : val);\n }, 0);\n if (sum === 0) {\n return [];\n }\n var digits = Math.pow(10, precision);\n var votesPerQuota = zrUtil.map(valueList, function (val) {\n return (isNaN(val) ? 0 : val) / sum * digits * 100;\n });\n var targetSeats = digits * 100;\n var seats = zrUtil.map(votesPerQuota, function (votes) {\n // Assign automatic seats.\n return Math.floor(votes);\n });\n var currentSum = zrUtil.reduce(seats, function (acc, val) {\n return acc + val;\n }, 0);\n var remainder = zrUtil.map(votesPerQuota, function (votes, idx) {\n return votes - seats[idx];\n });\n // Has remainding votes.\n while (currentSum < targetSeats) {\n // Find next largest remainder.\n var max = Number.NEGATIVE_INFINITY;\n var maxId = null;\n for (var i = 0, len = remainder.length; i < len; ++i) {\n if (remainder[i] > max) {\n max = remainder[i];\n maxId = i;\n }\n }\n // Add a vote to max remainder.\n ++seats[maxId];\n remainder[maxId] = 0;\n ++currentSum;\n }\n return zrUtil.map(seats, function (seat) {\n return seat / digits;\n });\n}\n/**\n * Solve the floating point adding problem like 0.1 + 0.2 === 0.30000000000000004\n * See \n */\nexport function addSafe(val0, val1) {\n var maxPrecision = Math.max(getPrecision(val0), getPrecision(val1));\n // const multiplier = Math.pow(10, maxPrecision);\n // return (Math.round(val0 * multiplier) + Math.round(val1 * multiplier)) / multiplier;\n var sum = val0 + val1;\n // // PENDING: support more?\n return maxPrecision > ROUND_SUPPORTED_PRECISION_MAX ? sum : round(sum, maxPrecision);\n}\n// Number.MAX_SAFE_INTEGER, ie do not support.\nexport var MAX_SAFE_INTEGER = 9007199254740991;\n/**\n * To 0 - 2 * PI, considering negative radian.\n */\nexport function remRadian(radian) {\n var pi2 = Math.PI * 2;\n return (radian % pi2 + pi2) % pi2;\n}\n/**\n * @param {type} radian\n * @return {boolean}\n */\nexport function isRadianAroundZero(val) {\n return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n// eslint-disable-next-line\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d{1,2})(?::(\\d{1,2})(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n/**\n * @param value valid type: number | string | Date, otherwise return `new Date(NaN)`\n * These values can be accepted:\n * + An instance of Date, represent a time in its own time zone.\n * + Or string in a subset of ISO 8601, only including:\n * + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n * + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n * + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n * all of which will be treated as local time if time zone is not specified\n * (see ).\n * + Or other string format, including (all of which will be treated as local time):\n * '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n * '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n * + a timestamp, which represent a time in UTC.\n * @return date Never be null/undefined. If invalid, return `new Date(NaN)`.\n */\nexport function parseDate(value) {\n if (value instanceof Date) {\n return value;\n } else if (zrUtil.isString(value)) {\n // Different browsers parse date in different way, so we parse it manually.\n // Some other issues:\n // new Date('1970-01-01') is UTC,\n // new Date('1970/01/01') and new Date('1970-1-01') is local.\n // See issue #3623\n var match = TIME_REG.exec(value);\n if (!match) {\n // return Invalid Date.\n return new Date(NaN);\n }\n // Use local time when no timezone offset is specified.\n if (!match[8]) {\n // match[n] can only be string or undefined.\n // But take care of '12' + 1 => '121'.\n return new Date(+match[1], +(match[2] || 1) - 1, +match[3] || 1, +match[4] || 0, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0);\n }\n // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n // For example, system timezone is set as \"Time Zone: America/Toronto\",\n // then these code will get different result:\n // `new Date(1478411999999).getTimezoneOffset(); // get 240`\n // `new Date(1478412000000).getTimezoneOffset(); // get 300`\n // So we should not use `new Date`, but use `Date.UTC`.\n else {\n var hour = +match[4] || 0;\n if (match[8].toUpperCase() !== 'Z') {\n hour -= +match[8].slice(0, 3);\n }\n return new Date(Date.UTC(+match[1], +(match[2] || 1) - 1, +match[3] || 1, hour, +(match[5] || 0), +match[6] || 0, match[7] ? +match[7].substring(0, 3) : 0));\n }\n } else if (value == null) {\n return new Date(NaN);\n }\n return new Date(Math.round(value));\n}\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param val\n * @return\n */\nexport function quantity(val) {\n return Math.pow(10, quantityExponent(val));\n}\n/**\n * Exponent of the quantity of a number\n * e.g., 1234 equals to 1.234*10^3, so quantityExponent(1234) is 3\n *\n * @param val non-negative value\n * @return\n */\nexport function quantityExponent(val) {\n if (val === 0) {\n return 0;\n }\n var exp = Math.floor(Math.log(val) / Math.LN10);\n /**\n * exp is expected to be the rounded-down result of the base-10 log of val.\n * But due to the precision loss with Math.log(val), we need to restore it\n * using 10^exp to make sure we can get val back from exp. #11249\n */\n if (val / Math.pow(10, exp) >= 10) {\n exp++;\n }\n return exp;\n}\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param val Non-negative value.\n * @param round\n * @return Niced number\n */\nexport function nice(val, round) {\n var exponent = quantityExponent(val);\n var exp10 = Math.pow(10, exponent);\n var f = val / exp10; // 1 <= f < 10\n var nf;\n if (round) {\n if (f < 1.5) {\n nf = 1;\n } else if (f < 2.5) {\n nf = 2;\n } else if (f < 4) {\n nf = 3;\n } else if (f < 7) {\n nf = 5;\n } else {\n nf = 10;\n }\n } else {\n if (f < 1) {\n nf = 1;\n } else if (f < 2) {\n nf = 2;\n } else if (f < 3) {\n nf = 3;\n } else if (f < 5) {\n nf = 5;\n } else {\n nf = 10;\n }\n }\n val = nf * exp10;\n // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n // 20 is the uppper bound of toFixed.\n return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n/**\n * This code was copied from \"d3.js\"\n * .\n * See the license statement at the head of this file.\n * @param ascArr\n */\nexport function quantile(ascArr, p) {\n var H = (ascArr.length - 1) * p + 1;\n var h = Math.floor(H);\n var v = +ascArr[h - 1];\n var e = H - h;\n return e ? v + e * (ascArr[h] - v) : v;\n}\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n * {interval: [18, 62], close: [1, 1]},\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [1, 1]},\n * {interval: [62, 150], close: [1, 1]},\n * {interval: [106, 150], close: [1, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n * {interval: [-Infinity, -70], close: [0, 0]},\n * {interval: [-70, -26], close: [1, 1]},\n * {interval: [-26, 18], close: [0, 1]},\n * {interval: [18, 62], close: [0, 1]},\n * {interval: [62, 150], close: [0, 1]},\n * {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param list, where `close` mean open or close\n * of the interval, and Infinity can be used.\n * @return The origin list, which has been reformed.\n */\nexport function reformIntervals(list) {\n list.sort(function (a, b) {\n return littleThan(a, b, 0) ? -1 : 1;\n });\n var curr = -Infinity;\n var currClose = 1;\n for (var i = 0; i < list.length;) {\n var interval = list[i].interval;\n var close_1 = list[i].close;\n for (var lg = 0; lg < 2; lg++) {\n if (interval[lg] <= curr) {\n interval[lg] = curr;\n close_1[lg] = !lg ? 1 - currClose : 1;\n }\n curr = interval[lg];\n currClose = close_1[lg];\n }\n if (interval[0] === interval[1] && close_1[0] * close_1[1] !== 1) {\n list.splice(i, 1);\n } else {\n i++;\n }\n }\n return list;\n function littleThan(a, b, lg) {\n return a.interval[lg] < b.interval[lg] || a.interval[lg] === b.interval[lg] && (a.close[lg] - b.close[lg] === (!lg ? 1 : -1) || !lg && littleThan(a, b, 1));\n }\n}\n/**\n * [Numeric is defined as]:\n * `parseFloat(val) == val`\n * For example:\n * numeric:\n * typeof number except NaN, '-123', '123', '2e3', '-2e3', '011', 'Infinity', Infinity,\n * and they rounded by white-spaces or line-terminal like ' -123 \\n ' (see es spec)\n * not-numeric:\n * null, undefined, [], {}, true, false, 'NaN', NaN, '123ab',\n * empty string, string with only white-spaces or line-terminal (see es spec),\n * 0x12, '0x12', '-0x12', 012, '012', '-012',\n * non-string, ...\n *\n * @test See full test cases in `test/ut/spec/util/number.js`.\n * @return Must be a typeof number. If not numeric, return NaN.\n */\nexport function numericToNumber(val) {\n var valFloat = parseFloat(val);\n return valFloat == val // eslint-disable-line eqeqeq\n && (valFloat !== 0 || !zrUtil.isString(val) || val.indexOf('x') <= 0) // For case ' 0x0 '.\n ? valFloat : NaN;\n}\n/**\n * Definition of \"numeric\": see `numericToNumber`.\n */\nexport function isNumeric(val) {\n return !isNaN(numericToNumber(val));\n}\n/**\n * Use random base to prevent users hard code depending on\n * this auto generated marker id.\n * @return An positive integer.\n */\nexport function getRandomIdBase() {\n return Math.round(Math.random() * 9);\n}\n/**\n * Get the greatest common divisor.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\nexport function getGreatestCommonDividor(a, b) {\n if (b === 0) {\n return a;\n }\n return getGreatestCommonDividor(b, a % b);\n}\n/**\n * Get the least common multiple.\n *\n * @param {number} a one number\n * @param {number} b the other number\n */\nexport function getLeastCommonMultiple(a, b) {\n if (a == null) {\n return b;\n }\n if (b == null) {\n return a;\n }\n return a * b / getGreatestCommonDividor(a, b);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, isObject, isArray, createHashMap, map, assert, isString, indexOf, isStringSafe, isNumber } from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport { isNumeric, getRandomIdBase, getPrecision, round } from './number.js';\nimport { warn } from './log.js';\nfunction interpolateNumber(p0, p1, percent) {\n return (p1 - p0) * percent + p0;\n}\n/**\n * Make the name displayable. But we should\n * make sure it is not duplicated with user\n * specified name, so use '\\0';\n */\nvar DUMMY_COMPONENT_NAME_PREFIX = 'series\\0';\nvar INTERNAL_COMPONENT_ID_PREFIX = '\\0_ec_\\0';\n/**\n * If value is not array, then translate it to array.\n * @param {*} value\n * @return {Array} [value] or value\n */\nexport function normalizeToArray(value) {\n return value instanceof Array ? value : value == null ? [] : [value];\n}\n/**\n * Sync default option between normal and emphasis like `position` and `show`\n * In case some one will write code like\n * label: {\n * show: false,\n * position: 'outside',\n * fontSize: 18\n * },\n * emphasis: {\n * label: { show: true }\n * }\n */\nexport function defaultEmphasis(opt, key, subOpts) {\n // Caution: performance sensitive.\n if (opt) {\n opt[key] = opt[key] || {};\n opt.emphasis = opt.emphasis || {};\n opt.emphasis[key] = opt.emphasis[key] || {};\n // Default emphasis option from normal\n for (var i = 0, len = subOpts.length; i < len; i++) {\n var subOptName = subOpts[i];\n if (!opt.emphasis[key].hasOwnProperty(subOptName) && opt[key].hasOwnProperty(subOptName)) {\n opt.emphasis[key][subOptName] = opt[key][subOptName];\n }\n }\n }\n}\nexport var TEXT_STYLE_OPTIONS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth', 'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY', 'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding'];\n// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([\n// 'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',\n// 'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n// // FIXME: deprecated, check and remove it.\n// 'textStyle'\n// ]);\n/**\n * The method does not ensure performance.\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method retrieves value from data.\n */\nexport function getDataItemValue(dataItem) {\n return isObject(dataItem) && !isArray(dataItem) && !(dataItem instanceof Date) ? dataItem.value : dataItem;\n}\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method determine if dataItem has extra option besides value\n */\nexport function isDataItemOption(dataItem) {\n return isObject(dataItem) && !(dataItem instanceof Array);\n // // markLine data can be array\n // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n\n;\n/**\n * Mapping to existings for merge.\n *\n * Mode \"normalMege\":\n * The mapping result (merge result) will keep the order of the existing\n * component, rather than the order of new option. Because we should ensure\n * some specified index reference (like xAxisIndex) keep work.\n * And in most cases, \"merge option\" is used to update partial option but not\n * be expected to change the order.\n *\n * Mode \"replaceMege\":\n * (1) Only the id mapped components will be merged.\n * (2) Other existing components (except internal components) will be removed.\n * (3) Other new options will be used to create new component.\n * (4) The index of the existing components will not be modified.\n * That means their might be \"hole\" after the removal.\n * The new components are created first at those available index.\n *\n * Mode \"replaceAll\":\n * This mode try to support that reproduce an echarts instance from another\n * echarts instance (via `getOption`) in some simple cases.\n * In this scenario, the `result` index are exactly the consistent with the `newCmptOptions`,\n * which ensures the component index referring (like `xAxisIndex: ?`) corrent. That is,\n * the \"hole\" in `newCmptOptions` will also be kept.\n * On the contrary, other modes try best to eliminate holes.\n * PENDING: This is an experimental mode yet.\n *\n * @return See the comment of .\n */\nexport function mappingToExists(existings, newCmptOptions, mode) {\n var isNormalMergeMode = mode === 'normalMerge';\n var isReplaceMergeMode = mode === 'replaceMerge';\n var isReplaceAllMode = mode === 'replaceAll';\n existings = existings || [];\n newCmptOptions = (newCmptOptions || []).slice();\n var existingIdIdxMap = createHashMap();\n // Validate id and name on user input option.\n each(newCmptOptions, function (cmptOption, index) {\n if (!isObject(cmptOption)) {\n newCmptOptions[index] = null;\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // There is some legacy case that name is set as `false`.\n // But should work normally rather than throw error.\n if (cmptOption.id != null && !isValidIdOrName(cmptOption.id)) {\n warnInvalidateIdOrName(cmptOption.id);\n }\n if (cmptOption.name != null && !isValidIdOrName(cmptOption.name)) {\n warnInvalidateIdOrName(cmptOption.name);\n }\n }\n });\n var result = prepareResult(existings, existingIdIdxMap, mode);\n if (isNormalMergeMode || isReplaceMergeMode) {\n mappingById(result, existings, existingIdIdxMap, newCmptOptions);\n }\n if (isNormalMergeMode) {\n mappingByName(result, newCmptOptions);\n }\n if (isNormalMergeMode || isReplaceMergeMode) {\n mappingByIndex(result, newCmptOptions, isReplaceMergeMode);\n } else if (isReplaceAllMode) {\n mappingInReplaceAllMode(result, newCmptOptions);\n }\n makeIdAndName(result);\n // The array `result` MUST NOT contain elided items, otherwise the\n // forEach will omit those items and result in incorrect result.\n return result;\n}\nfunction prepareResult(existings, existingIdIdxMap, mode) {\n var result = [];\n if (mode === 'replaceAll') {\n return result;\n }\n // Do not use native `map` to in case that the array `existings`\n // contains elided items, which will be omitted.\n for (var index = 0; index < existings.length; index++) {\n var existing = existings[index];\n // Because of replaceMerge, `existing` may be null/undefined.\n if (existing && existing.id != null) {\n existingIdIdxMap.set(existing.id, index);\n }\n // For non-internal-componnets:\n // Mode \"normalMerge\": all existings kept.\n // Mode \"replaceMerge\": all existing removed unless mapped by id.\n // For internal-components:\n // go with \"replaceMerge\" approach in both mode.\n result.push({\n existing: mode === 'replaceMerge' || isComponentIdInternal(existing) ? null : existing,\n newOption: null,\n keyInfo: null,\n brandNew: null\n });\n }\n return result;\n}\nfunction mappingById(result, existings, existingIdIdxMap, newCmptOptions) {\n // Mapping by id if specified.\n each(newCmptOptions, function (cmptOption, index) {\n if (!cmptOption || cmptOption.id == null) {\n return;\n }\n var optionId = makeComparableKey(cmptOption.id);\n var existingIdx = existingIdIdxMap.get(optionId);\n if (existingIdx != null) {\n var resultItem = result[existingIdx];\n assert(!resultItem.newOption, 'Duplicated option on id \"' + optionId + '\".');\n resultItem.newOption = cmptOption;\n // In both mode, if id matched, new option will be merged to\n // the existings rather than creating new component model.\n resultItem.existing = existings[existingIdx];\n newCmptOptions[index] = null;\n }\n });\n}\nfunction mappingByName(result, newCmptOptions) {\n // Mapping by name if specified.\n each(newCmptOptions, function (cmptOption, index) {\n if (!cmptOption || cmptOption.name == null) {\n return;\n }\n for (var i = 0; i < result.length; i++) {\n var existing = result[i].existing;\n if (!result[i].newOption // Consider name: two map to one.\n // Can not match when both ids existing but different.\n && existing && (existing.id == null || cmptOption.id == null) && !isComponentIdInternal(cmptOption) && !isComponentIdInternal(existing) && keyExistAndEqual('name', existing, cmptOption)) {\n result[i].newOption = cmptOption;\n newCmptOptions[index] = null;\n return;\n }\n }\n });\n}\nfunction mappingByIndex(result, newCmptOptions, brandNew) {\n each(newCmptOptions, function (cmptOption) {\n if (!cmptOption) {\n return;\n }\n // Find the first place that not mapped by id and not internal component (consider the \"hole\").\n var resultItem;\n var nextIdx = 0;\n while (\n // Be `!resultItem` only when `nextIdx >= result.length`.\n (resultItem = result[nextIdx]\n // (1) Existing models that already have id should be able to mapped to. Because\n // after mapping performed, model will always be assigned with an id if user not given.\n // After that all models have id.\n // (2) If new option has id, it can only set to a hole or append to the last. It should\n // not be merged to the existings with different id. Because id should not be overwritten.\n // (3) Name can be overwritten, because axis use name as 'show label text'.\n ) && (resultItem.newOption || isComponentIdInternal(resultItem.existing) ||\n // In mode \"replaceMerge\", here no not-mapped-non-internal-existing.\n resultItem.existing && cmptOption.id != null && !keyExistAndEqual('id', cmptOption, resultItem.existing))) {\n nextIdx++;\n }\n if (resultItem) {\n resultItem.newOption = cmptOption;\n resultItem.brandNew = brandNew;\n } else {\n result.push({\n newOption: cmptOption,\n brandNew: brandNew,\n existing: null,\n keyInfo: null\n });\n }\n nextIdx++;\n });\n}\nfunction mappingInReplaceAllMode(result, newCmptOptions) {\n each(newCmptOptions, function (cmptOption) {\n // The feature \"reproduce\" requires \"hole\" will also reproduced\n // in case that component index referring are broken.\n result.push({\n newOption: cmptOption,\n brandNew: true,\n existing: null,\n keyInfo: null\n });\n });\n}\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n */\nfunction makeIdAndName(mapResult) {\n // We use this id to hash component models and view instances\n // in echarts. id can be specified by user, or auto generated.\n // The id generation rule ensures new view instance are able\n // to mapped to old instance when setOption are called in\n // no-merge mode. So we generate model id by name and plus\n // type in view id.\n // name can be duplicated among components, which is convenient\n // to specify multi components (like series) by one name.\n // Ensure that each id is distinct.\n var idMap = createHashMap();\n each(mapResult, function (item) {\n var existing = item.existing;\n existing && idMap.set(existing.id, item);\n });\n each(mapResult, function (item) {\n var opt = item.newOption;\n // Force ensure id not duplicated.\n assert(!opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item, 'id duplicates: ' + (opt && opt.id));\n opt && opt.id != null && idMap.set(opt.id, item);\n !item.keyInfo && (item.keyInfo = {});\n });\n // Make name and id.\n each(mapResult, function (item, index) {\n var existing = item.existing;\n var opt = item.newOption;\n var keyInfo = item.keyInfo;\n if (!isObject(opt)) {\n return;\n }\n // Name can be overwritten. Consider case: axis.name = '20km'.\n // But id generated by name will not be changed, which affect\n // only in that case: setOption with 'not merge mode' and view\n // instance will be recreated, which can be accepted.\n keyInfo.name = opt.name != null ? makeComparableKey(opt.name) : existing ? existing.name\n // Avoid that different series has the same name,\n // because name may be used like in color pallet.\n : DUMMY_COMPONENT_NAME_PREFIX + index;\n if (existing) {\n keyInfo.id = makeComparableKey(existing.id);\n } else if (opt.id != null) {\n keyInfo.id = makeComparableKey(opt.id);\n } else {\n // Consider this situatoin:\n // optionA: [{name: 'a'}, {name: 'a'}, {..}]\n // optionB [{..}, {name: 'a'}, {name: 'a'}]\n // Series with the same name between optionA and optionB\n // should be mapped.\n var idNum = 0;\n do {\n keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n } while (idMap.get(keyInfo.id));\n }\n idMap.set(keyInfo.id, item);\n });\n}\nfunction keyExistAndEqual(attr, obj1, obj2) {\n var key1 = convertOptionIdName(obj1[attr], null);\n var key2 = convertOptionIdName(obj2[attr], null);\n // See `MappingExistingItem`. `id` and `name` trade string equals to number.\n return key1 != null && key2 != null && key1 === key2;\n}\n/**\n * @return return null if not exist.\n */\nfunction makeComparableKey(val) {\n if (process.env.NODE_ENV !== 'production') {\n if (val == null) {\n throw new Error();\n }\n }\n return convertOptionIdName(val, '');\n}\nexport function convertOptionIdName(idOrName, defaultValue) {\n if (idOrName == null) {\n return defaultValue;\n }\n return isString(idOrName) ? idOrName : isNumber(idOrName) || isStringSafe(idOrName) ? idOrName + '' : defaultValue;\n}\nfunction warnInvalidateIdOrName(idOrName) {\n if (process.env.NODE_ENV !== 'production') {\n warn('`' + idOrName + '` is invalid id or name. Must be a string or number.');\n }\n}\nfunction isValidIdOrName(idOrName) {\n return isStringSafe(idOrName) || isNumeric(idOrName);\n}\nexport function isNameSpecified(componentModel) {\n var name = componentModel.name;\n // Is specified when `indexOf` get -1 or > 0.\n return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));\n}\n/**\n * @public\n * @param {Object} cmptOption\n * @return {boolean}\n */\nexport function isComponentIdInternal(cmptOption) {\n return cmptOption && cmptOption.id != null && makeComparableKey(cmptOption.id).indexOf(INTERNAL_COMPONENT_ID_PREFIX) === 0;\n}\nexport function makeInternalComponentId(idSuffix) {\n return INTERNAL_COMPONENT_ID_PREFIX + idSuffix;\n}\nexport function setComponentTypeToKeyInfo(mappingResult, mainType, componentModelCtor) {\n // Set mainType and complete subType.\n each(mappingResult, function (item) {\n var newOption = item.newOption;\n if (isObject(newOption)) {\n item.keyInfo.mainType = mainType;\n item.keyInfo.subType = determineSubType(mainType, newOption, item.existing, componentModelCtor);\n }\n });\n}\nfunction determineSubType(mainType, newCmptOption, existComponent, componentModelCtor) {\n var subType = newCmptOption.type ? newCmptOption.type : existComponent ? existComponent.subType\n // Use determineSubType only when there is no existComponent.\n : componentModelCtor.determineSubType(mainType, newCmptOption);\n // tooltip, markline, markpoint may always has no subType\n return subType;\n}\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return result: [resultBatchA, resultBatchB]\n */\nexport function compressBatches(batchA, batchB) {\n var mapA = {};\n var mapB = {};\n makeMap(batchA || [], mapA);\n makeMap(batchB || [], mapB, mapA);\n return [mapToArray(mapA), mapToArray(mapB)];\n function makeMap(sourceBatch, map, otherMap) {\n for (var i = 0, len = sourceBatch.length; i < len; i++) {\n var seriesId = convertOptionIdName(sourceBatch[i].seriesId, null);\n if (seriesId == null) {\n return;\n }\n var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);\n var otherDataIndices = otherMap && otherMap[seriesId];\n for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {\n var dataIndex = dataIndices[j];\n if (otherDataIndices && otherDataIndices[dataIndex]) {\n otherDataIndices[dataIndex] = null;\n } else {\n (map[seriesId] || (map[seriesId] = {}))[dataIndex] = 1;\n }\n }\n }\n }\n function mapToArray(map, isData) {\n var result = [];\n for (var i in map) {\n if (map.hasOwnProperty(i) && map[i] != null) {\n if (isData) {\n result.push(+i);\n } else {\n var dataIndices = mapToArray(map[i], true);\n dataIndices.length && result.push({\n seriesId: i,\n dataIndex: dataIndices\n });\n }\n }\n }\n return result;\n }\n}\n/**\n * @param payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n * each of which can be Array or primary type.\n * @return dataIndex If not found, return undefined/null.\n */\nexport function queryDataIndex(data, payload) {\n if (payload.dataIndexInside != null) {\n return payload.dataIndexInside;\n } else if (payload.dataIndex != null) {\n return isArray(payload.dataIndex) ? map(payload.dataIndex, function (value) {\n return data.indexOfRawIndex(value);\n }) : data.indexOfRawIndex(payload.dataIndex);\n } else if (payload.name != null) {\n return isArray(payload.name) ? map(payload.name, function (value) {\n return data.indexOfName(value);\n }) : data.indexOfName(payload.name);\n }\n}\n/**\n * Enable property storage to any host object.\n * Notice: Serialization is not supported.\n *\n * For example:\n * let inner = zrUitl.makeInner();\n *\n * function some1(hostObj) {\n * inner(hostObj).someProperty = 1212;\n * ...\n * }\n * function some2() {\n * let fields = inner(this);\n * fields.someProperty1 = 1212;\n * fields.someProperty2 = 'xx';\n * ...\n * }\n *\n * @return {Function}\n */\nexport function makeInner() {\n var key = '__ec_inner_' + innerUniqueIndex++;\n return function (hostObj) {\n return hostObj[key] || (hostObj[key] = {});\n };\n}\nvar innerUniqueIndex = getRandomIdBase();\n/**\n * The same behavior as `component.getReferringComponents`.\n */\nexport function parseFinder(ecModel, finderInput, opt) {\n var _a = preParseFinder(finderInput, opt),\n mainTypeSpecified = _a.mainTypeSpecified,\n queryOptionMap = _a.queryOptionMap,\n others = _a.others;\n var result = others;\n var defaultMainType = opt ? opt.defaultMainType : null;\n if (!mainTypeSpecified && defaultMainType) {\n queryOptionMap.set(defaultMainType, {});\n }\n queryOptionMap.each(function (queryOption, mainType) {\n var queryResult = queryReferringComponents(ecModel, mainType, queryOption, {\n useDefault: defaultMainType === mainType,\n enableAll: opt && opt.enableAll != null ? opt.enableAll : true,\n enableNone: opt && opt.enableNone != null ? opt.enableNone : true\n });\n result[mainType + 'Models'] = queryResult.models;\n result[mainType + 'Model'] = queryResult.models[0];\n });\n return result;\n}\nexport function preParseFinder(finderInput, opt) {\n var finder;\n if (isString(finderInput)) {\n var obj = {};\n obj[finderInput + 'Index'] = 0;\n finder = obj;\n } else {\n finder = finderInput;\n }\n var queryOptionMap = createHashMap();\n var others = {};\n var mainTypeSpecified = false;\n each(finder, function (value, key) {\n // Exclude 'dataIndex' and other illgal keys.\n if (key === 'dataIndex' || key === 'dataIndexInside') {\n others[key] = value;\n return;\n }\n var parsedKey = key.match(/^(\\w+)(Index|Id|Name)$/) || [];\n var mainType = parsedKey[1];\n var queryType = (parsedKey[2] || '').toLowerCase();\n if (!mainType || !queryType || opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0) {\n return;\n }\n mainTypeSpecified = mainTypeSpecified || !!mainType;\n var queryOption = queryOptionMap.get(mainType) || queryOptionMap.set(mainType, {});\n queryOption[queryType] = value;\n });\n return {\n mainTypeSpecified: mainTypeSpecified,\n queryOptionMap: queryOptionMap,\n others: others\n };\n}\nexport var SINGLE_REFERRING = {\n useDefault: true,\n enableAll: false,\n enableNone: false\n};\nexport var MULTIPLE_REFERRING = {\n useDefault: false,\n enableAll: true,\n enableNone: true\n};\nexport function queryReferringComponents(ecModel, mainType, userOption, opt) {\n opt = opt || SINGLE_REFERRING;\n var indexOption = userOption.index;\n var idOption = userOption.id;\n var nameOption = userOption.name;\n var result = {\n models: null,\n specified: indexOption != null || idOption != null || nameOption != null\n };\n if (!result.specified) {\n // Use the first as default if `useDefault`.\n var firstCmpt = void 0;\n result.models = opt.useDefault && (firstCmpt = ecModel.getComponent(mainType)) ? [firstCmpt] : [];\n return result;\n }\n if (indexOption === 'none' || indexOption === false) {\n assert(opt.enableNone, '`\"none\"` or `false` is not a valid value on index option.');\n result.models = [];\n return result;\n }\n // `queryComponents` will return all components if\n // both all of index/id/name are null/undefined.\n if (indexOption === 'all') {\n assert(opt.enableAll, '`\"all\"` is not a valid value on index option.');\n indexOption = idOption = nameOption = null;\n }\n result.models = ecModel.queryComponents({\n mainType: mainType,\n index: indexOption,\n id: idOption,\n name: nameOption\n });\n return result;\n}\nexport function setAttribute(dom, key, value) {\n dom.setAttribute ? dom.setAttribute(key, value) : dom[key] = value;\n}\nexport function getAttribute(dom, key) {\n return dom.getAttribute ? dom.getAttribute(key) : dom[key];\n}\nexport function getTooltipRenderMode(renderModeOption) {\n if (renderModeOption === 'auto') {\n // Using html when `document` exists, use richText otherwise\n return env.domSupported ? 'html' : 'richText';\n } else {\n return renderModeOption || 'html';\n }\n}\n/**\n * Group a list by key.\n */\nexport function groupData(array, getKey // return key\n) {\n var buckets = createHashMap();\n var keys = [];\n each(array, function (item) {\n var key = getKey(item);\n (buckets.get(key) || (keys.push(key), buckets.set(key, []))).push(item);\n });\n return {\n keys: keys,\n buckets: buckets\n };\n}\n/**\n * Interpolate raw values of a series with percent\n *\n * @param data data\n * @param labelModel label model of the text element\n * @param sourceValue start value. May be null/undefined when init.\n * @param targetValue end value\n * @param percent 0~1 percentage; 0 uses start value while 1 uses end value\n * @return interpolated values\n * If `sourceValue` and `targetValue` are `number`, return `number`.\n * If `sourceValue` and `targetValue` are `string`, return `string`.\n * If `sourceValue` and `targetValue` are `(string | number)[]`, return `(string | number)[]`.\n * Other cases do not supported.\n */\nexport function interpolateRawValues(data, precision, sourceValue, targetValue, percent) {\n var isAutoPrecision = precision == null || precision === 'auto';\n if (targetValue == null) {\n return targetValue;\n }\n if (isNumber(targetValue)) {\n var value = interpolateNumber(sourceValue || 0, targetValue, percent);\n return round(value, isAutoPrecision ? Math.max(getPrecision(sourceValue || 0), getPrecision(targetValue)) : precision);\n } else if (isString(targetValue)) {\n return percent < 1 ? sourceValue : targetValue;\n } else {\n var interpolated = [];\n var leftArr = sourceValue;\n var rightArr = targetValue;\n var length_1 = Math.max(leftArr ? leftArr.length : 0, rightArr.length);\n for (var i = 0; i < length_1; ++i) {\n var info = data.getDimensionInfo(i);\n // Don't interpolate ordinal dims\n if (info && info.type === 'ordinal') {\n // In init, there is no `sourceValue`, but should better not to get undefined result.\n interpolated[i] = (percent < 1 && leftArr ? leftArr : rightArr)[i];\n } else {\n var leftVal = leftArr && leftArr[i] ? leftArr[i] : 0;\n var rightVal = rightArr[i];\n var value = interpolateNumber(leftVal, rightVal, percent);\n interpolated[i] = round(value, isAutoPrecision ? Math.max(getPrecision(leftVal), getPrecision(rightVal)) : precision);\n }\n }\n return interpolated;\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar TYPE_DELIMITER = '.';\nvar IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';\nvar IS_EXTENDED_CLASS = '___EC__EXTENDED_CLASS___';\n/**\n * Notice, parseClassType('') should returns {main: '', sub: ''}\n * @public\n */\nexport function parseClassType(componentType) {\n var ret = {\n main: '',\n sub: ''\n };\n if (componentType) {\n var typeArr = componentType.split(TYPE_DELIMITER);\n ret.main = typeArr[0] || '';\n ret.sub = typeArr[1] || '';\n }\n return ret;\n}\n/**\n * @public\n */\nfunction checkClassType(componentType) {\n zrUtil.assert(/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType), 'componentType \"' + componentType + '\" illegal');\n}\nexport function isExtendedClass(clz) {\n return !!(clz && clz[IS_EXTENDED_CLASS]);\n}\n/**\n * Implements `ExtendableConstructor` for `rootClz`.\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & ExtendableConstructor\n * enableClassExtend(Xxx as XxxConstructor);\n * ```\n */\nexport function enableClassExtend(rootClz, mandatoryMethods) {\n rootClz.$constructor = rootClz; // FIXME: not necessary?\n rootClz.extend = function (proto) {\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.each(mandatoryMethods, function (method) {\n if (!proto[method]) {\n console.warn('Method `' + method + '` should be implemented' + (proto.type ? ' in ' + proto.type : '') + '.');\n }\n });\n }\n var superClass = this;\n var ExtendedClass;\n if (isESClass(superClass)) {\n ExtendedClass = /** @class */function (_super) {\n __extends(class_1, _super);\n function class_1() {\n return _super.apply(this, arguments) || this;\n }\n return class_1;\n }(superClass);\n } else {\n // For backward compat, we both support ts class inheritance and this\n // \"extend\" approach.\n // The constructor should keep the same behavior as ts class inheritance:\n // If this constructor/$constructor is not declared, auto invoke the super\n // constructor.\n // If this constructor/$constructor is declared, it is responsible for\n // calling the super constructor.\n ExtendedClass = function () {\n (proto.$constructor || superClass).apply(this, arguments);\n };\n zrUtil.inherits(ExtendedClass, this);\n }\n zrUtil.extend(ExtendedClass.prototype, proto);\n ExtendedClass[IS_EXTENDED_CLASS] = true;\n ExtendedClass.extend = this.extend;\n ExtendedClass.superCall = superCall;\n ExtendedClass.superApply = superApply;\n ExtendedClass.superClass = superClass;\n return ExtendedClass;\n };\n}\nfunction isESClass(fn) {\n return zrUtil.isFunction(fn) && /^class\\s/.test(Function.prototype.toString.call(fn));\n}\n/**\n * A work around to both support ts extend and this extend mechanism.\n * on sub-class.\n * @usage\n * ```ts\n * class Component { ... }\n * classUtil.enableClassExtend(Component);\n * classUtil.enableClassManagement(Component, {registerWhenExtend: true});\n *\n * class Series extends Component { ... }\n * // Without calling `markExtend`, `registerWhenExtend` will not work.\n * Component.markExtend(Series);\n * ```\n */\nexport function mountExtend(SubClz, SupperClz) {\n SubClz.extend = SupperClz.extend;\n}\n// A random offset.\nvar classBase = Math.round(Math.random() * 10);\n/**\n * Implements `CheckableConstructor` for `target`.\n * Can not use instanceof, consider different scope by\n * cross domain or es module import in ec extensions.\n * Mount a method \"isInstance()\" to Clz.\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & CheckableConstructor;\n * enableClassCheck(Xxx as XxxConstructor)\n * ```\n */\nexport function enableClassCheck(target) {\n var classAttr = ['__\\0is_clz', classBase++].join('_');\n target.prototype[classAttr] = true;\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(!target.isInstance, 'The method \"is\" can not be defined.');\n }\n target.isInstance = function (obj) {\n return !!(obj && obj[classAttr]);\n };\n}\n// superCall should have class info, which can not be fetched from 'this'.\n// Consider this case:\n// class A has method f,\n// class B inherits class A, overrides method f, f call superApply('f'),\n// class C inherits class B, does not override method f,\n// then when method of class C is called, dead loop occurred.\nfunction superCall(context, methodName) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n return this.superClass.prototype[methodName].apply(context, args);\n}\nfunction superApply(context, methodName, args) {\n return this.superClass.prototype[methodName].apply(context, args);\n}\n/**\n * Implements `ClassManager` for `target`\n *\n * @usage\n * ```ts\n * class Xxx {}\n * type XxxConstructor = typeof Xxx & ClassManager\n * enableClassManagement(Xxx as XxxConstructor);\n * ```\n */\nexport function enableClassManagement(target) {\n /**\n * Component model classes\n * key: componentType,\n * value:\n * componentClass, when componentType is 'a'\n * or Object., when componentType is 'a.b'\n */\n var storage = {};\n target.registerClass = function (clz) {\n // `type` should not be a \"instance member\".\n // If using TS class, should better declared as `static type = 'series.pie'`.\n // otherwise users have to mount `type` on prototype manually.\n // For backward compat and enable instance visit type via `this.type`,\n // we still support fetch `type` from prototype.\n var componentFullType = clz.type || clz.prototype.type;\n if (componentFullType) {\n checkClassType(componentFullType);\n // If only static type declared, we assign it to prototype mandatorily.\n clz.prototype.type = componentFullType;\n var componentTypeInfo = parseClassType(componentFullType);\n if (!componentTypeInfo.sub) {\n if (process.env.NODE_ENV !== 'production') {\n if (storage[componentTypeInfo.main]) {\n console.warn(componentTypeInfo.main + ' exists.');\n }\n }\n storage[componentTypeInfo.main] = clz;\n } else if (componentTypeInfo.sub !== IS_CONTAINER) {\n var container = makeContainer(componentTypeInfo);\n container[componentTypeInfo.sub] = clz;\n }\n }\n return clz;\n };\n target.getClass = function (mainType, subType, throwWhenNotFound) {\n var clz = storage[mainType];\n if (clz && clz[IS_CONTAINER]) {\n clz = subType ? clz[subType] : null;\n }\n if (throwWhenNotFound && !clz) {\n throw new Error(!subType ? mainType + '.' + 'type should be specified.' : 'Component ' + mainType + '.' + (subType || '') + ' is used but not imported.');\n }\n return clz;\n };\n target.getClassesByMainType = function (componentType) {\n var componentTypeInfo = parseClassType(componentType);\n var result = [];\n var obj = storage[componentTypeInfo.main];\n if (obj && obj[IS_CONTAINER]) {\n zrUtil.each(obj, function (o, type) {\n type !== IS_CONTAINER && result.push(o);\n });\n } else {\n result.push(obj);\n }\n return result;\n };\n target.hasClass = function (componentType) {\n // Just consider componentType.main.\n var componentTypeInfo = parseClassType(componentType);\n return !!storage[componentTypeInfo.main];\n };\n /**\n * @return Like ['aa', 'bb'], but can not be ['aa.xx']\n */\n target.getAllClassMainTypes = function () {\n var types = [];\n zrUtil.each(storage, function (obj, type) {\n types.push(type);\n });\n return types;\n };\n /**\n * If a main type is container and has sub types\n */\n target.hasSubTypes = function (componentType) {\n var componentTypeInfo = parseClassType(componentType);\n var obj = storage[componentTypeInfo.main];\n return obj && obj[IS_CONTAINER];\n };\n function makeContainer(componentTypeInfo) {\n var container = storage[componentTypeInfo.main];\n if (!container || !container[IS_CONTAINER]) {\n container = storage[componentTypeInfo.main] = {};\n container[IS_CONTAINER] = true;\n }\n return container;\n }\n}\n// /**\n// * @param {string|Array.} properties\n// */\n// export function setReadOnly(obj, properties) {\n// FIXME It seems broken in IE8 simulation of IE11\n// if (!zrUtil.isArray(properties)) {\n// properties = properties != null ? [properties] : [];\n// }\n// zrUtil.each(properties, function (prop) {\n// let value = obj[prop];\n// Object.defineProperty\n// && Object.defineProperty(obj, prop, {\n// value: value, writable: false\n// });\n// zrUtil.isArray(obj[prop])\n// && Object.freeze\n// && Object.freeze(obj[prop]);\n// });\n// }","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// TODO Parse shadow style\n// TODO Only shallow path support\nimport * as zrUtil from 'zrender/lib/core/util.js';\nexport default function makeStyleMapper(properties, ignoreParent) {\n // Normalize\n for (var i = 0; i < properties.length; i++) {\n if (!properties[i][1]) {\n properties[i][1] = properties[i][0];\n }\n }\n ignoreParent = ignoreParent || false;\n return function (model, excludes, includes) {\n var style = {};\n for (var i = 0; i < properties.length; i++) {\n var propName = properties[i][1];\n if (excludes && zrUtil.indexOf(excludes, propName) >= 0 || includes && zrUtil.indexOf(includes, propName) < 0) {\n continue;\n }\n var val = model.getShallow(propName, ignoreParent);\n if (val != null) {\n style[properties[i][0]] = val;\n }\n }\n // TODO Text or image?\n return style;\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper.js';\nexport var AREA_STYLE_KEY_MAP = [['fill', 'color'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['opacity'], ['shadowColor']\n// Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\n\nvar getAreaStyle = makeStyleMapper(AREA_STYLE_KEY_MAP);\nvar AreaStyleMixin = /** @class */function () {\n function AreaStyleMixin() {}\n AreaStyleMixin.prototype.getAreaStyle = function (excludes, includes) {\n return getAreaStyle(this, excludes, includes);\n };\n return AreaStyleMixin;\n}();\n;\nexport { AreaStyleMixin };","import LRU from '../../core/LRU.js';\nimport { platformApi } from '../../core/platform.js';\nvar globalImageCache = new LRU(50);\nexport function findExistImage(newImageOrSrc) {\n if (typeof newImageOrSrc === 'string') {\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n return cachedImgObj && cachedImgObj.image;\n }\n else {\n return newImageOrSrc;\n }\n}\nexport function createOrUpdateImage(newImageOrSrc, image, hostEl, onload, cbPayload) {\n if (!newImageOrSrc) {\n return image;\n }\n else if (typeof newImageOrSrc === 'string') {\n if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) {\n return image;\n }\n var cachedImgObj = globalImageCache.get(newImageOrSrc);\n var pendingWrap = { hostEl: hostEl, cb: onload, cbPayload: cbPayload };\n if (cachedImgObj) {\n image = cachedImgObj.image;\n !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n }\n else {\n image = platformApi.loadImage(newImageOrSrc, imageOnLoad, imageOnLoad);\n image.__zrImageSrc = newImageOrSrc;\n globalImageCache.put(newImageOrSrc, image.__cachedImgObj = {\n image: image,\n pending: [pendingWrap]\n });\n }\n return image;\n }\n else {\n return newImageOrSrc;\n }\n}\nfunction imageOnLoad() {\n var cachedImgObj = this.__cachedImgObj;\n this.onload = this.onerror = this.__cachedImgObj = null;\n for (var i = 0; i < cachedImgObj.pending.length; i++) {\n var pendingWrap = cachedImgObj.pending[i];\n var cb = pendingWrap.cb;\n cb && cb(this, pendingWrap.cbPayload);\n pendingWrap.hostEl.dirty();\n }\n cachedImgObj.pending.length = 0;\n}\nexport function isImageReady(image) {\n return image && image.width && image.height;\n}\n","import * as imageHelper from '../helper/image.js';\nimport { extend, retrieve2, retrieve3, reduce } from '../../core/util.js';\nimport { getLineHeight, getWidth, parsePercent } from '../../contain/text.js';\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\nexport function truncateText(text, containerWidth, font, ellipsis, options) {\n if (!containerWidth) {\n return '';\n }\n var textLines = (text + '').split('\\n');\n options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n for (var i = 0, len = textLines.length; i < len; i++) {\n textLines[i] = truncateSingleLine(textLines[i], options);\n }\n return textLines.join('\\n');\n}\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n options = options || {};\n var preparedOpts = extend({}, options);\n preparedOpts.font = font;\n ellipsis = retrieve2(ellipsis, '...');\n preparedOpts.maxIterations = retrieve2(options.maxIterations, 2);\n var minChar = preparedOpts.minChar = retrieve2(options.minChar, 0);\n preparedOpts.cnCharWidth = getWidth('国', font);\n var ascCharWidth = preparedOpts.ascCharWidth = getWidth('a', font);\n preparedOpts.placeholder = retrieve2(options.placeholder, '');\n var contentWidth = containerWidth = Math.max(0, containerWidth - 1);\n for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n contentWidth -= ascCharWidth;\n }\n var ellipsisWidth = getWidth(ellipsis, font);\n if (ellipsisWidth > contentWidth) {\n ellipsis = '';\n ellipsisWidth = 0;\n }\n contentWidth = containerWidth - ellipsisWidth;\n preparedOpts.ellipsis = ellipsis;\n preparedOpts.ellipsisWidth = ellipsisWidth;\n preparedOpts.contentWidth = contentWidth;\n preparedOpts.containerWidth = containerWidth;\n return preparedOpts;\n}\nfunction truncateSingleLine(textLine, options) {\n var containerWidth = options.containerWidth;\n var font = options.font;\n var contentWidth = options.contentWidth;\n if (!containerWidth) {\n return '';\n }\n var lineWidth = getWidth(textLine, font);\n if (lineWidth <= containerWidth) {\n return textLine;\n }\n for (var j = 0;; j++) {\n if (lineWidth <= contentWidth || j >= options.maxIterations) {\n textLine += options.ellipsis;\n break;\n }\n var subLength = j === 0\n ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n : lineWidth > 0\n ? Math.floor(textLine.length * contentWidth / lineWidth)\n : 0;\n textLine = textLine.substr(0, subLength);\n lineWidth = getWidth(textLine, font);\n }\n if (textLine === '') {\n textLine = options.placeholder;\n }\n return textLine;\n}\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n var width = 0;\n var i = 0;\n for (var len = text.length; i < len && width < contentWidth; i++) {\n var charCode = text.charCodeAt(i);\n width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n }\n return i;\n}\nexport function parsePlainText(text, style) {\n text != null && (text += '');\n var overflow = style.overflow;\n var padding = style.padding;\n var font = style.font;\n var truncate = overflow === 'truncate';\n var calculatedLineHeight = getLineHeight(font);\n var lineHeight = retrieve2(style.lineHeight, calculatedLineHeight);\n var bgColorDrawn = !!(style.backgroundColor);\n var truncateLineOverflow = style.lineOverflow === 'truncate';\n var width = style.width;\n var lines;\n if (width != null && (overflow === 'break' || overflow === 'breakAll')) {\n lines = text ? wrapText(text, style.font, width, overflow === 'breakAll', 0).lines : [];\n }\n else {\n lines = text ? text.split('\\n') : [];\n }\n var contentHeight = lines.length * lineHeight;\n var height = retrieve2(style.height, contentHeight);\n if (contentHeight > height && truncateLineOverflow) {\n var lineCount = Math.floor(height / lineHeight);\n lines = lines.slice(0, lineCount);\n }\n if (text && truncate && width != null) {\n var options = prepareTruncateOptions(width, font, style.ellipsis, {\n minChar: style.truncateMinChar,\n placeholder: style.placeholder\n });\n for (var i = 0; i < lines.length; i++) {\n lines[i] = truncateSingleLine(lines[i], options);\n }\n }\n var outerHeight = height;\n var contentWidth = 0;\n for (var i = 0; i < lines.length; i++) {\n contentWidth = Math.max(getWidth(lines[i], font), contentWidth);\n }\n if (width == null) {\n width = contentWidth;\n }\n var outerWidth = contentWidth;\n if (padding) {\n outerHeight += padding[0] + padding[2];\n outerWidth += padding[1] + padding[3];\n width += padding[1] + padding[3];\n }\n if (bgColorDrawn) {\n outerWidth = width;\n }\n return {\n lines: lines,\n height: height,\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n calculatedLineHeight: calculatedLineHeight,\n contentWidth: contentWidth,\n contentHeight: contentHeight,\n width: width\n };\n}\nvar RichTextToken = (function () {\n function RichTextToken() {\n }\n return RichTextToken;\n}());\nvar RichTextLine = (function () {\n function RichTextLine(tokens) {\n this.tokens = [];\n if (tokens) {\n this.tokens = tokens;\n }\n }\n return RichTextLine;\n}());\nvar RichTextContentBlock = (function () {\n function RichTextContentBlock() {\n this.width = 0;\n this.height = 0;\n this.contentWidth = 0;\n this.contentHeight = 0;\n this.outerWidth = 0;\n this.outerHeight = 0;\n this.lines = [];\n }\n return RichTextContentBlock;\n}());\nexport { RichTextContentBlock };\nexport function parseRichText(text, style) {\n var contentBlock = new RichTextContentBlock();\n text != null && (text += '');\n if (!text) {\n return contentBlock;\n }\n var topWidth = style.width;\n var topHeight = style.height;\n var overflow = style.overflow;\n var wrapInfo = (overflow === 'break' || overflow === 'breakAll') && topWidth != null\n ? { width: topWidth, accumWidth: 0, breakAll: overflow === 'breakAll' }\n : null;\n var lastIndex = STYLE_REG.lastIndex = 0;\n var result;\n while ((result = STYLE_REG.exec(text)) != null) {\n var matchedIndex = result.index;\n if (matchedIndex > lastIndex) {\n pushTokens(contentBlock, text.substring(lastIndex, matchedIndex), style, wrapInfo);\n }\n pushTokens(contentBlock, result[2], style, wrapInfo, result[1]);\n lastIndex = STYLE_REG.lastIndex;\n }\n if (lastIndex < text.length) {\n pushTokens(contentBlock, text.substring(lastIndex, text.length), style, wrapInfo);\n }\n var pendingList = [];\n var calculatedHeight = 0;\n var calculatedWidth = 0;\n var stlPadding = style.padding;\n var truncate = overflow === 'truncate';\n var truncateLine = style.lineOverflow === 'truncate';\n function finishLine(line, lineWidth, lineHeight) {\n line.width = lineWidth;\n line.lineHeight = lineHeight;\n calculatedHeight += lineHeight;\n calculatedWidth = Math.max(calculatedWidth, lineWidth);\n }\n outer: for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var lineHeight = 0;\n var lineWidth = 0;\n for (var j = 0; j < line.tokens.length; j++) {\n var token = line.tokens[j];\n var tokenStyle = token.styleName && style.rich[token.styleName] || {};\n var textPadding = token.textPadding = tokenStyle.padding;\n var paddingH = textPadding ? textPadding[1] + textPadding[3] : 0;\n var font = token.font = tokenStyle.font || style.font;\n token.contentHeight = getLineHeight(font);\n var tokenHeight = retrieve2(tokenStyle.height, token.contentHeight);\n token.innerHeight = tokenHeight;\n textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n token.height = tokenHeight;\n token.lineHeight = retrieve3(tokenStyle.lineHeight, style.lineHeight, tokenHeight);\n token.align = tokenStyle && tokenStyle.align || style.align;\n token.verticalAlign = tokenStyle && tokenStyle.verticalAlign || 'middle';\n if (truncateLine && topHeight != null && calculatedHeight + token.lineHeight > topHeight) {\n if (j > 0) {\n line.tokens = line.tokens.slice(0, j);\n finishLine(line, lineWidth, lineHeight);\n contentBlock.lines = contentBlock.lines.slice(0, i + 1);\n }\n else {\n contentBlock.lines = contentBlock.lines.slice(0, i);\n }\n break outer;\n }\n var styleTokenWidth = tokenStyle.width;\n var tokenWidthNotSpecified = styleTokenWidth == null || styleTokenWidth === 'auto';\n if (typeof styleTokenWidth === 'string' && styleTokenWidth.charAt(styleTokenWidth.length - 1) === '%') {\n token.percentWidth = styleTokenWidth;\n pendingList.push(token);\n token.contentWidth = getWidth(token.text, font);\n }\n else {\n if (tokenWidthNotSpecified) {\n var textBackgroundColor = tokenStyle.backgroundColor;\n var bgImg = textBackgroundColor && textBackgroundColor.image;\n if (bgImg) {\n bgImg = imageHelper.findExistImage(bgImg);\n if (imageHelper.isImageReady(bgImg)) {\n token.width = Math.max(token.width, bgImg.width * tokenHeight / bgImg.height);\n }\n }\n }\n var remainTruncWidth = truncate && topWidth != null\n ? topWidth - lineWidth : null;\n if (remainTruncWidth != null && remainTruncWidth < token.width) {\n if (!tokenWidthNotSpecified || remainTruncWidth < paddingH) {\n token.text = '';\n token.width = token.contentWidth = 0;\n }\n else {\n token.text = truncateText(token.text, remainTruncWidth - paddingH, font, style.ellipsis, { minChar: style.truncateMinChar });\n token.width = token.contentWidth = getWidth(token.text, font);\n }\n }\n else {\n token.contentWidth = getWidth(token.text, font);\n }\n }\n token.width += paddingH;\n lineWidth += token.width;\n tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n }\n finishLine(line, lineWidth, lineHeight);\n }\n contentBlock.outerWidth = contentBlock.width = retrieve2(topWidth, calculatedWidth);\n contentBlock.outerHeight = contentBlock.height = retrieve2(topHeight, calculatedHeight);\n contentBlock.contentHeight = calculatedHeight;\n contentBlock.contentWidth = calculatedWidth;\n if (stlPadding) {\n contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n }\n for (var i = 0; i < pendingList.length; i++) {\n var token = pendingList[i];\n var percentWidth = token.percentWidth;\n token.width = parseInt(percentWidth, 10) / 100 * contentBlock.width;\n }\n return contentBlock;\n}\nfunction pushTokens(block, str, style, wrapInfo, styleName) {\n var isEmptyStr = str === '';\n var tokenStyle = styleName && style.rich[styleName] || {};\n var lines = block.lines;\n var font = tokenStyle.font || style.font;\n var newLine = false;\n var strLines;\n var linesWidths;\n if (wrapInfo) {\n var tokenPadding = tokenStyle.padding;\n var tokenPaddingH = tokenPadding ? tokenPadding[1] + tokenPadding[3] : 0;\n if (tokenStyle.width != null && tokenStyle.width !== 'auto') {\n var outerWidth_1 = parsePercent(tokenStyle.width, wrapInfo.width) + tokenPaddingH;\n if (lines.length > 0) {\n if (outerWidth_1 + wrapInfo.accumWidth > wrapInfo.width) {\n strLines = str.split('\\n');\n newLine = true;\n }\n }\n wrapInfo.accumWidth = outerWidth_1;\n }\n else {\n var res = wrapText(str, font, wrapInfo.width, wrapInfo.breakAll, wrapInfo.accumWidth);\n wrapInfo.accumWidth = res.accumWidth + tokenPaddingH;\n linesWidths = res.linesWidths;\n strLines = res.lines;\n }\n }\n else {\n strLines = str.split('\\n');\n }\n for (var i = 0; i < strLines.length; i++) {\n var text = strLines[i];\n var token = new RichTextToken();\n token.styleName = styleName;\n token.text = text;\n token.isLineHolder = !text && !isEmptyStr;\n if (typeof tokenStyle.width === 'number') {\n token.width = tokenStyle.width;\n }\n else {\n token.width = linesWidths\n ? linesWidths[i]\n : getWidth(text, font);\n }\n if (!i && !newLine) {\n var tokens = (lines[lines.length - 1] || (lines[0] = new RichTextLine())).tokens;\n var tokensLen = tokens.length;\n (tokensLen === 1 && tokens[0].isLineHolder)\n ? (tokens[0] = token)\n : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n }\n else {\n lines.push(new RichTextLine([token]));\n }\n }\n}\nfunction isAlphabeticLetter(ch) {\n var code = ch.charCodeAt(0);\n return code >= 0x20 && code <= 0x24F\n || code >= 0x370 && code <= 0x10FF\n || code >= 0x1200 && code <= 0x13FF\n || code >= 0x1E00 && code <= 0x206F;\n}\nvar breakCharMap = reduce(',&?/;] '.split(''), function (obj, ch) {\n obj[ch] = true;\n return obj;\n}, {});\nfunction isWordBreakChar(ch) {\n if (isAlphabeticLetter(ch)) {\n if (breakCharMap[ch]) {\n return true;\n }\n return false;\n }\n return true;\n}\nfunction wrapText(text, font, lineWidth, isBreakAll, lastAccumWidth) {\n var lines = [];\n var linesWidths = [];\n var line = '';\n var currentWord = '';\n var currentWordWidth = 0;\n var accumWidth = 0;\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch === '\\n') {\n if (currentWord) {\n line += currentWord;\n accumWidth += currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n line = '';\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = 0;\n continue;\n }\n var chWidth = getWidth(ch, font);\n var inWord = isBreakAll ? false : !isWordBreakChar(ch);\n if (!lines.length\n ? lastAccumWidth + accumWidth + chWidth > lineWidth\n : accumWidth + chWidth > lineWidth) {\n if (!accumWidth) {\n if (inWord) {\n lines.push(currentWord);\n linesWidths.push(currentWordWidth);\n currentWord = ch;\n currentWordWidth = chWidth;\n }\n else {\n lines.push(ch);\n linesWidths.push(chWidth);\n }\n }\n else if (line || currentWord) {\n if (inWord) {\n if (!line) {\n line = currentWord;\n currentWord = '';\n currentWordWidth = 0;\n accumWidth = currentWordWidth;\n }\n lines.push(line);\n linesWidths.push(accumWidth - currentWordWidth);\n currentWord += ch;\n currentWordWidth += chWidth;\n line = '';\n accumWidth = currentWordWidth;\n }\n else {\n if (currentWord) {\n line += currentWord;\n currentWord = '';\n currentWordWidth = 0;\n }\n lines.push(line);\n linesWidths.push(accumWidth);\n line = ch;\n accumWidth = chWidth;\n }\n }\n continue;\n }\n accumWidth += chWidth;\n if (inWord) {\n currentWord += ch;\n currentWordWidth += chWidth;\n }\n else {\n if (currentWord) {\n line += currentWord;\n currentWord = '';\n currentWordWidth = 0;\n }\n line += ch;\n }\n }\n if (!lines.length && !line) {\n line = text;\n currentWord = '';\n currentWordWidth = 0;\n }\n if (currentWord) {\n line += currentWord;\n }\n if (line) {\n lines.push(line);\n linesWidths.push(accumWidth);\n }\n if (lines.length === 1) {\n accumWidth += lastAccumWidth;\n }\n return {\n accumWidth: accumWidth,\n lines: lines,\n linesWidths: linesWidths\n };\n}\n","import { __extends } from \"tslib\";\nimport Element from '../Element.js';\nimport BoundingRect from '../core/BoundingRect.js';\nimport { keys, extend, createObject } from '../core/util.js';\nimport { REDRAW_BIT, STYLE_CHANGED_BIT } from './constants.js';\nvar STYLE_MAGIC_KEY = '__zr_style_' + Math.round((Math.random() * 10));\nexport var DEFAULT_COMMON_STYLE = {\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n shadowColor: '#000',\n opacity: 1,\n blend: 'source-over'\n};\nexport var DEFAULT_COMMON_ANIMATION_PROPS = {\n style: {\n shadowBlur: true,\n shadowOffsetX: true,\n shadowOffsetY: true,\n shadowColor: true,\n opacity: true\n }\n};\nDEFAULT_COMMON_STYLE[STYLE_MAGIC_KEY] = true;\nvar PRIMARY_STATES_KEYS = ['z', 'z2', 'invisible'];\nvar PRIMARY_STATES_KEYS_IN_HOVER_LAYER = ['invisible'];\nvar Displayable = (function (_super) {\n __extends(Displayable, _super);\n function Displayable(props) {\n return _super.call(this, props) || this;\n }\n Displayable.prototype._init = function (props) {\n var keysArr = keys(props);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n if (key === 'style') {\n this.useStyle(props[key]);\n }\n else {\n _super.prototype.attrKV.call(this, key, props[key]);\n }\n }\n if (!this.style) {\n this.useStyle({});\n }\n };\n Displayable.prototype.beforeBrush = function () { };\n Displayable.prototype.afterBrush = function () { };\n Displayable.prototype.innerBeforeBrush = function () { };\n Displayable.prototype.innerAfterBrush = function () { };\n Displayable.prototype.shouldBePainted = function (viewWidth, viewHeight, considerClipPath, considerAncestors) {\n var m = this.transform;\n if (this.ignore\n || this.invisible\n || this.style.opacity === 0\n || (this.culling\n && isDisplayableCulled(this, viewWidth, viewHeight))\n || (m && !m[0] && !m[3])) {\n return false;\n }\n if (considerClipPath && this.__clipPaths) {\n for (var i = 0; i < this.__clipPaths.length; ++i) {\n if (this.__clipPaths[i].isZeroArea()) {\n return false;\n }\n }\n }\n if (considerAncestors && this.parent) {\n var parent_1 = this.parent;\n while (parent_1) {\n if (parent_1.ignore) {\n return false;\n }\n parent_1 = parent_1.parent;\n }\n }\n return true;\n };\n Displayable.prototype.contain = function (x, y) {\n return this.rectContain(x, y);\n };\n Displayable.prototype.traverse = function (cb, context) {\n cb.call(context, this);\n };\n Displayable.prototype.rectContain = function (x, y) {\n var coord = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n return rect.contain(coord[0], coord[1]);\n };\n Displayable.prototype.getPaintRect = function () {\n var rect = this._paintRect;\n if (!this._paintRect || this.__dirty) {\n var transform = this.transform;\n var elRect = this.getBoundingRect();\n var style = this.style;\n var shadowSize = style.shadowBlur || 0;\n var shadowOffsetX = style.shadowOffsetX || 0;\n var shadowOffsetY = style.shadowOffsetY || 0;\n rect = this._paintRect || (this._paintRect = new BoundingRect(0, 0, 0, 0));\n if (transform) {\n BoundingRect.applyTransform(rect, elRect, transform);\n }\n else {\n rect.copy(elRect);\n }\n if (shadowSize || shadowOffsetX || shadowOffsetY) {\n rect.width += shadowSize * 2 + Math.abs(shadowOffsetX);\n rect.height += shadowSize * 2 + Math.abs(shadowOffsetY);\n rect.x = Math.min(rect.x, rect.x + shadowOffsetX - shadowSize);\n rect.y = Math.min(rect.y, rect.y + shadowOffsetY - shadowSize);\n }\n var tolerance = this.dirtyRectTolerance;\n if (!rect.isZero()) {\n rect.x = Math.floor(rect.x - tolerance);\n rect.y = Math.floor(rect.y - tolerance);\n rect.width = Math.ceil(rect.width + 1 + tolerance * 2);\n rect.height = Math.ceil(rect.height + 1 + tolerance * 2);\n }\n }\n return rect;\n };\n Displayable.prototype.setPrevPaintRect = function (paintRect) {\n if (paintRect) {\n this._prevPaintRect = this._prevPaintRect || new BoundingRect(0, 0, 0, 0);\n this._prevPaintRect.copy(paintRect);\n }\n else {\n this._prevPaintRect = null;\n }\n };\n Displayable.prototype.getPrevPaintRect = function () {\n return this._prevPaintRect;\n };\n Displayable.prototype.animateStyle = function (loop) {\n return this.animate('style', loop);\n };\n Displayable.prototype.updateDuringAnimation = function (targetKey) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else {\n this.markRedraw();\n }\n };\n Displayable.prototype.attrKV = function (key, value) {\n if (key !== 'style') {\n _super.prototype.attrKV.call(this, key, value);\n }\n else {\n if (!this.style) {\n this.useStyle(value);\n }\n else {\n this.setStyle(value);\n }\n }\n };\n Displayable.prototype.setStyle = function (keyOrObj, value) {\n if (typeof keyOrObj === 'string') {\n this.style[keyOrObj] = value;\n }\n else {\n extend(this.style, keyOrObj);\n }\n this.dirtyStyle();\n return this;\n };\n Displayable.prototype.dirtyStyle = function (notRedraw) {\n if (!notRedraw) {\n this.markRedraw();\n }\n this.__dirty |= STYLE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n };\n Displayable.prototype.dirty = function () {\n this.dirtyStyle();\n };\n Displayable.prototype.styleChanged = function () {\n return !!(this.__dirty & STYLE_CHANGED_BIT);\n };\n Displayable.prototype.styleUpdated = function () {\n this.__dirty &= ~STYLE_CHANGED_BIT;\n };\n Displayable.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_COMMON_STYLE, obj);\n };\n Displayable.prototype.useStyle = function (obj) {\n if (!obj[STYLE_MAGIC_KEY]) {\n obj = this.createStyle(obj);\n }\n if (this.__inHover) {\n this.__hoverStyle = obj;\n }\n else {\n this.style = obj;\n }\n this.dirtyStyle();\n };\n Displayable.prototype.isStyleObject = function (obj) {\n return obj[STYLE_MAGIC_KEY];\n };\n Displayable.prototype._innerSaveToNormal = function (toState) {\n _super.prototype._innerSaveToNormal.call(this, toState);\n var normalState = this._normalState;\n if (toState.style && !normalState.style) {\n normalState.style = this._mergeStyle(this.createStyle(), this.style);\n }\n this._savePrimaryToNormal(toState, normalState, PRIMARY_STATES_KEYS);\n };\n Displayable.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n var needsRestoreToNormal = !(state && keepCurrentStates);\n var targetStyle;\n if (state && state.style) {\n if (transition) {\n if (keepCurrentStates) {\n targetStyle = state.style;\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else {\n targetStyle = this._mergeStyle(this.createStyle(), keepCurrentStates ? this.style : normalState.style);\n this._mergeStyle(targetStyle, state.style);\n }\n }\n else if (needsRestoreToNormal) {\n targetStyle = normalState.style;\n }\n if (targetStyle) {\n if (transition) {\n var sourceStyle = this.style;\n this.style = this.createStyle(needsRestoreToNormal ? {} : sourceStyle);\n if (needsRestoreToNormal) {\n var changedKeys = keys(sourceStyle);\n for (var i = 0; i < changedKeys.length; i++) {\n var key = changedKeys[i];\n if (key in targetStyle) {\n targetStyle[key] = targetStyle[key];\n this.style[key] = sourceStyle[key];\n }\n }\n }\n var targetKeys = keys(targetStyle);\n for (var i = 0; i < targetKeys.length; i++) {\n var key = targetKeys[i];\n this.style[key] = this.style[key];\n }\n this._transitionState(stateName, {\n style: targetStyle\n }, animationCfg, this.getAnimationStyleProps());\n }\n else {\n this.useStyle(targetStyle);\n }\n }\n var statesKeys = this.__inHover ? PRIMARY_STATES_KEYS_IN_HOVER_LAYER : PRIMARY_STATES_KEYS;\n for (var i = 0; i < statesKeys.length; i++) {\n var key = statesKeys[i];\n if (state && state[key] != null) {\n this[key] = state[key];\n }\n else if (needsRestoreToNormal) {\n if (normalState[key] != null) {\n this[key] = normalState[key];\n }\n }\n }\n };\n Displayable.prototype._mergeStates = function (states) {\n var mergedState = _super.prototype._mergeStates.call(this, states);\n var mergedStyle;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n if (state.style) {\n mergedStyle = mergedStyle || {};\n this._mergeStyle(mergedStyle, state.style);\n }\n }\n if (mergedStyle) {\n mergedState.style = mergedStyle;\n }\n return mergedState;\n };\n Displayable.prototype._mergeStyle = function (targetStyle, sourceStyle) {\n extend(targetStyle, sourceStyle);\n return targetStyle;\n };\n Displayable.prototype.getAnimationStyleProps = function () {\n return DEFAULT_COMMON_ANIMATION_PROPS;\n };\n Displayable.initDefaultProps = (function () {\n var dispProto = Displayable.prototype;\n dispProto.type = 'displayable';\n dispProto.invisible = false;\n dispProto.z = 0;\n dispProto.z2 = 0;\n dispProto.zlevel = 0;\n dispProto.culling = false;\n dispProto.cursor = 'pointer';\n dispProto.rectHover = false;\n dispProto.incremental = false;\n dispProto._rect = null;\n dispProto.dirtyRectTolerance = 0;\n dispProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT;\n })();\n return Displayable;\n}(Element));\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el, width, height) {\n tmpRect.copy(el.getBoundingRect());\n if (el.transform) {\n tmpRect.applyTransform(el.transform);\n }\n viewRect.width = width;\n viewRect.height = height;\n return !tmpRect.intersect(viewRect);\n}\nexport default Displayable;\n","import * as vec2 from './vector.js';\nimport * as curve from './curve.js';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI2 = Math.PI * 2;\nvar start = vec2.create();\nvar end = vec2.create();\nvar extremity = vec2.create();\nexport function fromPoints(points, min, max) {\n if (points.length === 0) {\n return;\n }\n var p = points[0];\n var left = p[0];\n var right = p[0];\n var top = p[1];\n var bottom = p[1];\n for (var i = 1; i < points.length; i++) {\n p = points[i];\n left = mathMin(left, p[0]);\n right = mathMax(right, p[0]);\n top = mathMin(top, p[1]);\n bottom = mathMax(bottom, p[1]);\n }\n min[0] = left;\n min[1] = top;\n max[0] = right;\n max[1] = bottom;\n}\nexport function fromLine(x0, y0, x1, y1, min, max) {\n min[0] = mathMin(x0, x1);\n min[1] = mathMin(y0, y1);\n max[0] = mathMax(x0, x1);\n max[1] = mathMax(y0, y1);\n}\nvar xDim = [];\nvar yDim = [];\nexport function fromCubic(x0, y0, x1, y1, x2, y2, x3, y3, min, max) {\n var cubicExtrema = curve.cubicExtrema;\n var cubicAt = curve.cubicAt;\n var n = cubicExtrema(x0, x1, x2, x3, xDim);\n min[0] = Infinity;\n min[1] = Infinity;\n max[0] = -Infinity;\n max[1] = -Infinity;\n for (var i = 0; i < n; i++) {\n var x = cubicAt(x0, x1, x2, x3, xDim[i]);\n min[0] = mathMin(x, min[0]);\n max[0] = mathMax(x, max[0]);\n }\n n = cubicExtrema(y0, y1, y2, y3, yDim);\n for (var i = 0; i < n; i++) {\n var y = cubicAt(y0, y1, y2, y3, yDim[i]);\n min[1] = mathMin(y, min[1]);\n max[1] = mathMax(y, max[1]);\n }\n min[0] = mathMin(x0, min[0]);\n max[0] = mathMax(x0, max[0]);\n min[0] = mathMin(x3, min[0]);\n max[0] = mathMax(x3, max[0]);\n min[1] = mathMin(y0, min[1]);\n max[1] = mathMax(y0, max[1]);\n min[1] = mathMin(y3, min[1]);\n max[1] = mathMax(y3, max[1]);\n}\nexport function fromQuadratic(x0, y0, x1, y1, x2, y2, min, max) {\n var quadraticExtremum = curve.quadraticExtremum;\n var quadraticAt = curve.quadraticAt;\n var tx = mathMax(mathMin(quadraticExtremum(x0, x1, x2), 1), 0);\n var ty = mathMax(mathMin(quadraticExtremum(y0, y1, y2), 1), 0);\n var x = quadraticAt(x0, x1, x2, tx);\n var y = quadraticAt(y0, y1, y2, ty);\n min[0] = mathMin(x0, x2, x);\n min[1] = mathMin(y0, y2, y);\n max[0] = mathMax(x0, x2, x);\n max[1] = mathMax(y0, y2, y);\n}\nexport function fromArc(x, y, rx, ry, startAngle, endAngle, anticlockwise, min, max) {\n var vec2Min = vec2.min;\n var vec2Max = vec2.max;\n var diff = Math.abs(startAngle - endAngle);\n if (diff % PI2 < 1e-4 && diff > 1e-4) {\n min[0] = x - rx;\n min[1] = y - ry;\n max[0] = x + rx;\n max[1] = y + ry;\n return;\n }\n start[0] = mathCos(startAngle) * rx + x;\n start[1] = mathSin(startAngle) * ry + y;\n end[0] = mathCos(endAngle) * rx + x;\n end[1] = mathSin(endAngle) * ry + y;\n vec2Min(min, start, end);\n vec2Max(max, start, end);\n startAngle = startAngle % (PI2);\n if (startAngle < 0) {\n startAngle = startAngle + PI2;\n }\n endAngle = endAngle % (PI2);\n if (endAngle < 0) {\n endAngle = endAngle + PI2;\n }\n if (startAngle > endAngle && !anticlockwise) {\n endAngle += PI2;\n }\n else if (startAngle < endAngle && anticlockwise) {\n startAngle += PI2;\n }\n if (anticlockwise) {\n var tmp = endAngle;\n endAngle = startAngle;\n startAngle = tmp;\n }\n for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n if (angle > startAngle) {\n extremity[0] = mathCos(angle) * rx + x;\n extremity[1] = mathSin(angle) * ry + y;\n vec2Min(min, extremity, min);\n vec2Max(max, extremity, max);\n }\n }\n}\n","import * as vec2 from './vector.js';\nimport BoundingRect from './BoundingRect.js';\nimport { devicePixelRatio as dpr } from '../config.js';\nimport { fromLine, fromCubic, fromQuadratic, fromArc } from './bbox.js';\nimport { cubicLength, cubicSubdivide, quadraticLength, quadraticSubdivide } from './curve.js';\nvar CMD = {\n M: 1,\n L: 2,\n C: 3,\n Q: 4,\n A: 5,\n Z: 6,\n R: 7\n};\nvar tmpOutX = [];\nvar tmpOutY = [];\nvar min = [];\nvar max = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathCos = Math.cos;\nvar mathSin = Math.sin;\nvar mathAbs = Math.abs;\nvar PI = Math.PI;\nvar PI2 = PI * 2;\nvar hasTypedArray = typeof Float32Array !== 'undefined';\nvar tmpAngles = [];\nfunction modPI2(radian) {\n var n = Math.round(radian / PI * 1e8) / 1e8;\n return (n % 2) * PI;\n}\nexport function normalizeArcAngles(angles, anticlockwise) {\n var newStartAngle = modPI2(angles[0]);\n if (newStartAngle < 0) {\n newStartAngle += PI2;\n }\n var delta = newStartAngle - angles[0];\n var newEndAngle = angles[1];\n newEndAngle += delta;\n if (!anticlockwise && newEndAngle - newStartAngle >= PI2) {\n newEndAngle = newStartAngle + PI2;\n }\n else if (anticlockwise && newStartAngle - newEndAngle >= PI2) {\n newEndAngle = newStartAngle - PI2;\n }\n else if (!anticlockwise && newStartAngle > newEndAngle) {\n newEndAngle = newStartAngle + (PI2 - modPI2(newStartAngle - newEndAngle));\n }\n else if (anticlockwise && newStartAngle < newEndAngle) {\n newEndAngle = newStartAngle - (PI2 - modPI2(newEndAngle - newStartAngle));\n }\n angles[0] = newStartAngle;\n angles[1] = newEndAngle;\n}\nvar PathProxy = (function () {\n function PathProxy(notSaveData) {\n this.dpr = 1;\n this._xi = 0;\n this._yi = 0;\n this._x0 = 0;\n this._y0 = 0;\n this._len = 0;\n if (notSaveData) {\n this._saveData = false;\n }\n if (this._saveData) {\n this.data = [];\n }\n }\n PathProxy.prototype.increaseVersion = function () {\n this._version++;\n };\n PathProxy.prototype.getVersion = function () {\n return this._version;\n };\n PathProxy.prototype.setScale = function (sx, sy, segmentIgnoreThreshold) {\n segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n if (segmentIgnoreThreshold > 0) {\n this._ux = mathAbs(segmentIgnoreThreshold / dpr / sx) || 0;\n this._uy = mathAbs(segmentIgnoreThreshold / dpr / sy) || 0;\n }\n };\n PathProxy.prototype.setDPR = function (dpr) {\n this.dpr = dpr;\n };\n PathProxy.prototype.setContext = function (ctx) {\n this._ctx = ctx;\n };\n PathProxy.prototype.getContext = function () {\n return this._ctx;\n };\n PathProxy.prototype.beginPath = function () {\n this._ctx && this._ctx.beginPath();\n this.reset();\n return this;\n };\n PathProxy.prototype.reset = function () {\n if (this._saveData) {\n this._len = 0;\n }\n if (this._pathSegLen) {\n this._pathSegLen = null;\n this._pathLen = 0;\n }\n this._version++;\n };\n PathProxy.prototype.moveTo = function (x, y) {\n this._drawPendingPt();\n this.addData(CMD.M, x, y);\n this._ctx && this._ctx.moveTo(x, y);\n this._x0 = x;\n this._y0 = y;\n this._xi = x;\n this._yi = y;\n return this;\n };\n PathProxy.prototype.lineTo = function (x, y) {\n var dx = mathAbs(x - this._xi);\n var dy = mathAbs(y - this._yi);\n var exceedUnit = dx > this._ux || dy > this._uy;\n this.addData(CMD.L, x, y);\n if (this._ctx && exceedUnit) {\n this._ctx.lineTo(x, y);\n }\n if (exceedUnit) {\n this._xi = x;\n this._yi = y;\n this._pendingPtDist = 0;\n }\n else {\n var d2 = dx * dx + dy * dy;\n if (d2 > this._pendingPtDist) {\n this._pendingPtX = x;\n this._pendingPtY = y;\n this._pendingPtDist = d2;\n }\n }\n return this;\n };\n PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) {\n this._drawPendingPt();\n this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n if (this._ctx) {\n this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n }\n this._xi = x3;\n this._yi = y3;\n return this;\n };\n PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) {\n this._drawPendingPt();\n this.addData(CMD.Q, x1, y1, x2, y2);\n if (this._ctx) {\n this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n }\n this._xi = x2;\n this._yi = y2;\n return this;\n };\n PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n this._drawPendingPt();\n tmpAngles[0] = startAngle;\n tmpAngles[1] = endAngle;\n normalizeArcAngles(tmpAngles, anticlockwise);\n startAngle = tmpAngles[0];\n endAngle = tmpAngles[1];\n var delta = endAngle - startAngle;\n this.addData(CMD.A, cx, cy, r, r, startAngle, delta, 0, anticlockwise ? 0 : 1);\n this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n this._xi = mathCos(endAngle) * r + cx;\n this._yi = mathSin(endAngle) * r + cy;\n return this;\n };\n PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) {\n this._drawPendingPt();\n if (this._ctx) {\n this._ctx.arcTo(x1, y1, x2, y2, radius);\n }\n return this;\n };\n PathProxy.prototype.rect = function (x, y, w, h) {\n this._drawPendingPt();\n this._ctx && this._ctx.rect(x, y, w, h);\n this.addData(CMD.R, x, y, w, h);\n return this;\n };\n PathProxy.prototype.closePath = function () {\n this._drawPendingPt();\n this.addData(CMD.Z);\n var ctx = this._ctx;\n var x0 = this._x0;\n var y0 = this._y0;\n if (ctx) {\n ctx.closePath();\n }\n this._xi = x0;\n this._yi = y0;\n return this;\n };\n PathProxy.prototype.fill = function (ctx) {\n ctx && ctx.fill();\n this.toStatic();\n };\n PathProxy.prototype.stroke = function (ctx) {\n ctx && ctx.stroke();\n this.toStatic();\n };\n PathProxy.prototype.len = function () {\n return this._len;\n };\n PathProxy.prototype.setData = function (data) {\n var len = data.length;\n if (!(this.data && this.data.length === len) && hasTypedArray) {\n this.data = new Float32Array(len);\n }\n for (var i = 0; i < len; i++) {\n this.data[i] = data[i];\n }\n this._len = len;\n };\n PathProxy.prototype.appendPath = function (path) {\n if (!(path instanceof Array)) {\n path = [path];\n }\n var len = path.length;\n var appendSize = 0;\n var offset = this._len;\n for (var i = 0; i < len; i++) {\n appendSize += path[i].len();\n }\n if (hasTypedArray && (this.data instanceof Float32Array)) {\n this.data = new Float32Array(offset + appendSize);\n }\n for (var i = 0; i < len; i++) {\n var appendPathData = path[i].data;\n for (var k = 0; k < appendPathData.length; k++) {\n this.data[offset++] = appendPathData[k];\n }\n }\n this._len = offset;\n };\n PathProxy.prototype.addData = function (cmd, a, b, c, d, e, f, g, h) {\n if (!this._saveData) {\n return;\n }\n var data = this.data;\n if (this._len + arguments.length > data.length) {\n this._expandData();\n data = this.data;\n }\n for (var i = 0; i < arguments.length; i++) {\n data[this._len++] = arguments[i];\n }\n };\n PathProxy.prototype._drawPendingPt = function () {\n if (this._pendingPtDist > 0) {\n this._ctx && this._ctx.lineTo(this._pendingPtX, this._pendingPtY);\n this._pendingPtDist = 0;\n }\n };\n PathProxy.prototype._expandData = function () {\n if (!(this.data instanceof Array)) {\n var newData = [];\n for (var i = 0; i < this._len; i++) {\n newData[i] = this.data[i];\n }\n this.data = newData;\n }\n };\n PathProxy.prototype.toStatic = function () {\n if (!this._saveData) {\n return;\n }\n this._drawPendingPt();\n var data = this.data;\n if (data instanceof Array) {\n data.length = this._len;\n if (hasTypedArray && this._len > 11) {\n this.data = new Float32Array(data);\n }\n }\n };\n PathProxy.prototype.getBoundingRect = function () {\n min[0] = min[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n max[0] = max[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n var data = this.data;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var i;\n for (i = 0; i < this._len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n switch (cmd) {\n case CMD.M:\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n min2[0] = x0;\n min2[1] = y0;\n max2[0] = x0;\n max2[1] = y0;\n break;\n case CMD.L:\n fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n fromCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n fromQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], min2, max2);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var endAngle = data[i++] + startAngle;\n i += 1;\n var anticlockwise = !data[i++];\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n fromArc(cx, cy, rx, ry, startAngle, endAngle, anticlockwise, min2, max2);\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n break;\n case CMD.Z:\n xi = x0;\n yi = y0;\n break;\n }\n vec2.min(min, min, min2);\n vec2.max(max, max, max2);\n }\n if (i === 0) {\n min[0] = min[1] = max[0] = max[1] = 0;\n }\n return new BoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n };\n PathProxy.prototype._calculateLength = function () {\n var data = this.data;\n var len = this._len;\n var ux = this._ux;\n var uy = this._uy;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n if (!this._pathSegLen) {\n this._pathSegLen = [];\n }\n var pathSegLen = this._pathSegLen;\n var pathTotalLen = 0;\n var segCount = 0;\n for (var i = 0; i < len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n var l = -1;\n switch (cmd) {\n case CMD.M:\n xi = x0 = data[i++];\n yi = y0 = data[i++];\n break;\n case CMD.L: {\n var x2 = data[i++];\n var y2 = data[i++];\n var dx = x2 - xi;\n var dy = y2 - yi;\n if (mathAbs(dx) > ux || mathAbs(dy) > uy || i === len - 1) {\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x2;\n yi = y2;\n }\n break;\n }\n case CMD.C: {\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n var x3 = data[i++];\n var y3 = data[i++];\n l = cubicLength(xi, yi, x1, y1, x2, y2, x3, y3, 10);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n var x1 = data[i++];\n var y1 = data[i++];\n var x2 = data[i++];\n var y2 = data[i++];\n l = quadraticLength(xi, yi, x1, y1, x2, y2, 10);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var startAngle = data[i++];\n var delta = data[i++];\n var endAngle = delta + startAngle;\n i += 1;\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n l = mathMax(rx, ry) * mathMin(PI2, Math.abs(delta));\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R: {\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n l = width * 2 + height * 2;\n break;\n }\n case CMD.Z: {\n var dx = x0 - xi;\n var dy = y0 - yi;\n l = Math.sqrt(dx * dx + dy * dy);\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (l >= 0) {\n pathSegLen[segCount++] = l;\n pathTotalLen += l;\n }\n }\n this._pathLen = pathTotalLen;\n return pathTotalLen;\n };\n PathProxy.prototype.rebuildPath = function (ctx, percent) {\n var d = this.data;\n var ux = this._ux;\n var uy = this._uy;\n var len = this._len;\n var x0;\n var y0;\n var xi;\n var yi;\n var x;\n var y;\n var drawPart = percent < 1;\n var pathSegLen;\n var pathTotalLen;\n var accumLength = 0;\n var segCount = 0;\n var displayedLength;\n var pendingPtDist = 0;\n var pendingPtX;\n var pendingPtY;\n if (drawPart) {\n if (!this._pathSegLen) {\n this._calculateLength();\n }\n pathSegLen = this._pathSegLen;\n pathTotalLen = this._pathLen;\n displayedLength = percent * pathTotalLen;\n if (!displayedLength) {\n return;\n }\n }\n lo: for (var i = 0; i < len;) {\n var cmd = d[i++];\n var isFirst = i === 1;\n if (isFirst) {\n xi = d[i];\n yi = d[i + 1];\n x0 = xi;\n y0 = yi;\n }\n if (cmd !== CMD.L && pendingPtDist > 0) {\n ctx.lineTo(pendingPtX, pendingPtY);\n pendingPtDist = 0;\n }\n switch (cmd) {\n case CMD.M:\n x0 = xi = d[i++];\n y0 = yi = d[i++];\n ctx.moveTo(xi, yi);\n break;\n case CMD.L: {\n x = d[i++];\n y = d[i++];\n var dx = mathAbs(x - xi);\n var dy = mathAbs(y - yi);\n if (dx > ux || dy > uy) {\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x * t, yi * (1 - t) + y * t);\n break lo;\n }\n accumLength += l;\n }\n ctx.lineTo(x, y);\n xi = x;\n yi = y;\n pendingPtDist = 0;\n }\n else {\n var d2 = dx * dx + dy * dy;\n if (d2 > pendingPtDist) {\n pendingPtX = x;\n pendingPtY = y;\n pendingPtDist = d2;\n }\n }\n break;\n }\n case CMD.C: {\n var x1 = d[i++];\n var y1 = d[i++];\n var x2 = d[i++];\n var y2 = d[i++];\n var x3 = d[i++];\n var y3 = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n cubicSubdivide(xi, x1, x2, x3, t, tmpOutX);\n cubicSubdivide(yi, y1, y2, y3, t, tmpOutY);\n ctx.bezierCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2], tmpOutX[3], tmpOutY[3]);\n break lo;\n }\n accumLength += l;\n }\n ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n xi = x3;\n yi = y3;\n break;\n }\n case CMD.Q: {\n var x1 = d[i++];\n var y1 = d[i++];\n var x2 = d[i++];\n var y2 = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n quadraticSubdivide(xi, x1, x2, t, tmpOutX);\n quadraticSubdivide(yi, y1, y2, t, tmpOutY);\n ctx.quadraticCurveTo(tmpOutX[1], tmpOutY[1], tmpOutX[2], tmpOutY[2]);\n break lo;\n }\n accumLength += l;\n }\n ctx.quadraticCurveTo(x1, y1, x2, y2);\n xi = x2;\n yi = y2;\n break;\n }\n case CMD.A:\n var cx = d[i++];\n var cy = d[i++];\n var rx = d[i++];\n var ry = d[i++];\n var startAngle = d[i++];\n var delta = d[i++];\n var psi = d[i++];\n var anticlockwise = !d[i++];\n var r = (rx > ry) ? rx : ry;\n var isEllipse = mathAbs(rx - ry) > 1e-3;\n var endAngle = startAngle + delta;\n var breakBuild = false;\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n endAngle = startAngle + delta * (displayedLength - accumLength) / l;\n breakBuild = true;\n }\n accumLength += l;\n }\n if (isEllipse && ctx.ellipse) {\n ctx.ellipse(cx, cy, rx, ry, psi, startAngle, endAngle, anticlockwise);\n }\n else {\n ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n }\n if (breakBuild) {\n break lo;\n }\n if (isFirst) {\n x0 = mathCos(startAngle) * rx + cx;\n y0 = mathSin(startAngle) * ry + cy;\n }\n xi = mathCos(endAngle) * rx + cx;\n yi = mathSin(endAngle) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = d[i];\n y0 = yi = d[i + 1];\n x = d[i++];\n y = d[i++];\n var width = d[i++];\n var height = d[i++];\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var d_1 = displayedLength - accumLength;\n ctx.moveTo(x, y);\n ctx.lineTo(x + mathMin(d_1, width), y);\n d_1 -= width;\n if (d_1 > 0) {\n ctx.lineTo(x + width, y + mathMin(d_1, height));\n }\n d_1 -= height;\n if (d_1 > 0) {\n ctx.lineTo(x + mathMax(width - d_1, 0), y + height);\n }\n d_1 -= width;\n if (d_1 > 0) {\n ctx.lineTo(x, y + mathMax(height - d_1, 0));\n }\n break lo;\n }\n accumLength += l;\n }\n ctx.rect(x, y, width, height);\n break;\n case CMD.Z:\n if (drawPart) {\n var l = pathSegLen[segCount++];\n if (accumLength + l > displayedLength) {\n var t = (displayedLength - accumLength) / l;\n ctx.lineTo(xi * (1 - t) + x0 * t, yi * (1 - t) + y0 * t);\n break lo;\n }\n accumLength += l;\n }\n ctx.closePath();\n xi = x0;\n yi = y0;\n }\n }\n };\n PathProxy.prototype.clone = function () {\n var newProxy = new PathProxy();\n var data = this.data;\n newProxy.data = data.slice ? data.slice()\n : Array.prototype.slice.call(data);\n newProxy._len = this._len;\n return newProxy;\n };\n PathProxy.CMD = CMD;\n PathProxy.initDefaultProps = (function () {\n var proto = PathProxy.prototype;\n proto._saveData = true;\n proto._ux = 0;\n proto._uy = 0;\n proto._pendingPtDist = 0;\n proto._version = 0;\n })();\n return PathProxy;\n}());\nexport default PathProxy;\n","export function containStroke(x0, y0, x1, y1, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n var _a = 0;\n var _b = x0;\n if ((y > y0 + _l && y > y1 + _l)\n || (y < y0 - _l && y < y1 - _l)\n || (x > x0 + _l && x > x1 + _l)\n || (x < x0 - _l && x < x1 - _l)) {\n return false;\n }\n if (x0 !== x1) {\n _a = (y0 - y1) / (x0 - x1);\n _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n }\n else {\n return Math.abs(x - x0) <= _l / 2;\n }\n var tmp = _a * x - y + _b;\n var _s = tmp * tmp / (_a * _a + 1);\n return _s <= _l / 2 * _l / 2;\n}\n","import * as curve from '../core/curve.js';\nexport function containStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n if ((y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)) {\n return false;\n }\n var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);\n return d <= _l / 2;\n}\n","import { quadraticProjectPoint } from '../core/curve.js';\nexport function containStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n if ((y > y0 + _l && y > y1 + _l && y > y2 + _l)\n || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n || (x < x0 - _l && x < x1 - _l && x < x2 - _l)) {\n return false;\n }\n var d = quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);\n return d <= _l / 2;\n}\n","var PI2 = Math.PI * 2;\nexport function normalizeRadian(angle) {\n angle %= PI2;\n if (angle < 0) {\n angle += PI2;\n }\n return angle;\n}\n","import { normalizeRadian } from './util.js';\nvar PI2 = Math.PI * 2;\nexport function containStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {\n if (lineWidth === 0) {\n return false;\n }\n var _l = lineWidth;\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n if ((d - _l > r) || (d + _l < r)) {\n return false;\n }\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n return true;\n }\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n }\n else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n var angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += PI2;\n }\n return (angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle);\n}\n","export default function windingLine(x0, y0, x1, y1, x, y) {\n if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n return 0;\n }\n if (y1 === y0) {\n return 0;\n }\n var t = (y - y0) / (y1 - y0);\n var dir = y1 < y0 ? 1 : -1;\n if (t === 1 || t === 0) {\n dir = y1 < y0 ? 0.5 : -0.5;\n }\n var x_ = t * (x1 - x0) + x0;\n return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n","import PathProxy from '../core/PathProxy.js';\nimport * as line from './line.js';\nimport * as cubic from './cubic.js';\nimport * as quadratic from './quadratic.js';\nimport * as arc from './arc.js';\nimport * as curve from '../core/curve.js';\nimport windingLine from './windingLine.js';\nvar CMD = PathProxy.CMD;\nvar PI2 = Math.PI * 2;\nvar EPSILON = 1e-4;\nfunction isAroundEqual(a, b) {\n return Math.abs(a - b) < EPSILON;\n}\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\nfunction swapExtrema() {\n var tmp = extrema[0];\n extrema[0] = extrema[1];\n extrema[1] = tmp;\n}\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n if ((y > y0 && y > y1 && y > y2 && y > y3)\n || (y < y0 && y < y1 && y < y2 && y < y3)) {\n return 0;\n }\n var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n var w = 0;\n var nExtrema = -1;\n var y0_ = void 0;\n var y1_ = void 0;\n for (var i = 0; i < nRoots; i++) {\n var t = roots[i];\n var unit = (t === 0 || t === 1) ? 0.5 : 1;\n var x_ = curve.cubicAt(x0, x1, x2, x3, t);\n if (x_ < x) {\n continue;\n }\n if (nExtrema < 0) {\n nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);\n if (extrema[1] < extrema[0] && nExtrema > 1) {\n swapExtrema();\n }\n y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);\n if (nExtrema > 1) {\n y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);\n }\n }\n if (nExtrema === 2) {\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else if (t < extrema[1]) {\n w += y1_ < y0_ ? unit : -unit;\n }\n else {\n w += y3 < y1_ ? unit : -unit;\n }\n }\n else {\n if (t < extrema[0]) {\n w += y0_ < y0 ? unit : -unit;\n }\n else {\n w += y3 < y0_ ? unit : -unit;\n }\n }\n }\n return w;\n }\n}\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n if ((y > y0 && y > y1 && y > y2)\n || (y < y0 && y < y1 && y < y2)) {\n return 0;\n }\n var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);\n if (nRoots === 0) {\n return 0;\n }\n else {\n var t = curve.quadraticExtremum(y0, y1, y2);\n if (t >= 0 && t <= 1) {\n var w = 0;\n var y_ = curve.quadraticAt(y0, y1, y2, t);\n for (var i = 0; i < nRoots; i++) {\n var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);\n if (x_ < x) {\n continue;\n }\n if (roots[i] < t) {\n w += y_ < y0 ? unit : -unit;\n }\n else {\n w += y2 < y_ ? unit : -unit;\n }\n }\n return w;\n }\n else {\n var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);\n if (x_ < x) {\n return 0;\n }\n return y2 < y0 ? unit : -unit;\n }\n }\n}\nfunction windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {\n y -= cy;\n if (y > r || y < -r) {\n return 0;\n }\n var tmp = Math.sqrt(r * r - y * y);\n roots[0] = -tmp;\n roots[1] = tmp;\n var dTheta = Math.abs(startAngle - endAngle);\n if (dTheta < 1e-4) {\n return 0;\n }\n if (dTheta >= PI2 - 1e-4) {\n startAngle = 0;\n endAngle = PI2;\n var dir = anticlockwise ? 1 : -1;\n if (x >= roots[0] + cx && x <= roots[1] + cx) {\n return dir;\n }\n else {\n return 0;\n }\n }\n if (startAngle > endAngle) {\n var tmp_1 = startAngle;\n startAngle = endAngle;\n endAngle = tmp_1;\n }\n if (startAngle < 0) {\n startAngle += PI2;\n endAngle += PI2;\n }\n var w = 0;\n for (var i = 0; i < 2; i++) {\n var x_ = roots[i];\n if (x_ + cx > x) {\n var angle = Math.atan2(y, x_);\n var dir = anticlockwise ? 1 : -1;\n if (angle < 0) {\n angle = PI2 + angle;\n }\n if ((angle >= startAngle && angle <= endAngle)\n || (angle + PI2 >= startAngle && angle + PI2 <= endAngle)) {\n if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n dir = -dir;\n }\n w += dir;\n }\n }\n }\n return w;\n}\nfunction containPath(path, lineWidth, isStroke, x, y) {\n var data = path.data;\n var len = path.len();\n var w = 0;\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n for (var i = 0; i < len;) {\n var cmd = data[i++];\n var isFirst = i === 1;\n if (cmd === CMD.M && i > 1) {\n if (!isStroke) {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n }\n if (isFirst) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n switch (cmd) {\n case CMD.M:\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n if (isStroke) {\n if (line.containStroke(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n if (isStroke) {\n if (cubic.containStroke(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingCubic(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n if (isStroke) {\n if (quadratic.containStroke(xi, yi, data[i++], data[i++], data[i], data[i + 1], lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingQuadratic(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y) || 0;\n }\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++];\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy;\n if (!isFirst) {\n w += windingLine(xi, yi, x1, y1, x, y);\n }\n else {\n x0 = x1;\n y0 = y1;\n }\n var _x = (x - cx) * ry / rx + cx;\n if (isStroke) {\n if (arc.containStroke(cx, cy, ry, theta, theta + dTheta, anticlockwise, lineWidth, _x, y)) {\n return true;\n }\n }\n else {\n w += windingArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y);\n }\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n x1 = x0 + width;\n y1 = y0 + height;\n if (isStroke) {\n if (line.containStroke(x0, y0, x1, y0, lineWidth, x, y)\n || line.containStroke(x1, y0, x1, y1, lineWidth, x, y)\n || line.containStroke(x1, y1, x0, y1, lineWidth, x, y)\n || line.containStroke(x0, y1, x0, y0, lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(x1, y0, x1, y1, x, y);\n w += windingLine(x0, y1, x0, y0, x, y);\n }\n break;\n case CMD.Z:\n if (isStroke) {\n if (line.containStroke(xi, yi, x0, y0, lineWidth, x, y)) {\n return true;\n }\n }\n else {\n w += windingLine(xi, yi, x0, y0, x, y);\n }\n xi = x0;\n yi = y0;\n break;\n }\n }\n if (!isStroke && !isAroundEqual(yi, y0)) {\n w += windingLine(xi, yi, x0, y0, x, y) || 0;\n }\n return w !== 0;\n}\nexport function contain(pathProxy, x, y) {\n return containPath(pathProxy, 0, false, x, y);\n}\nexport function containStroke(pathProxy, lineWidth, x, y) {\n return containPath(pathProxy, lineWidth, true, x, y);\n}\n","import { __extends } from \"tslib\";\nimport Displayable, { DEFAULT_COMMON_STYLE, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable.js';\nimport PathProxy from '../core/PathProxy.js';\nimport * as pathContain from '../contain/path.js';\nimport { defaults, keys, extend, clone, isString, createObject } from '../core/util.js';\nimport { lum } from '../tool/color.js';\nimport { DARK_LABEL_COLOR, LIGHT_LABEL_COLOR, DARK_MODE_THRESHOLD, LIGHTER_LABEL_COLOR } from '../config.js';\nimport { REDRAW_BIT, SHAPE_CHANGED_BIT, STYLE_CHANGED_BIT } from './constants.js';\nimport { TRANSFORMABLE_PROPS } from '../core/Transformable.js';\nexport var DEFAULT_PATH_STYLE = defaults({\n fill: '#000',\n stroke: null,\n strokePercent: 1,\n fillOpacity: 1,\n strokeOpacity: 1,\n lineDashOffset: 0,\n lineWidth: 1,\n lineCap: 'butt',\n miterLimit: 10,\n strokeNoScale: false,\n strokeFirst: false\n}, DEFAULT_COMMON_STYLE);\nexport var DEFAULT_PATH_ANIMATION_PROPS = {\n style: defaults({\n fill: true,\n stroke: true,\n strokePercent: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineDashOffset: true,\n lineWidth: true,\n miterLimit: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nvar pathCopyParams = TRANSFORMABLE_PROPS.concat(['invisible',\n 'culling', 'z', 'z2', 'zlevel', 'parent'\n]);\nvar Path = (function (_super) {\n __extends(Path, _super);\n function Path(opts) {\n return _super.call(this, opts) || this;\n }\n Path.prototype.update = function () {\n var _this = this;\n _super.prototype.update.call(this);\n var style = this.style;\n if (style.decal) {\n var decalEl = this._decalEl = this._decalEl || new Path();\n if (decalEl.buildPath === Path.prototype.buildPath) {\n decalEl.buildPath = function (ctx) {\n _this.buildPath(ctx, _this.shape);\n };\n }\n decalEl.silent = true;\n var decalElStyle = decalEl.style;\n for (var key in style) {\n if (decalElStyle[key] !== style[key]) {\n decalElStyle[key] = style[key];\n }\n }\n decalElStyle.fill = style.fill ? style.decal : null;\n decalElStyle.decal = null;\n decalElStyle.shadowColor = null;\n style.strokeFirst && (decalElStyle.stroke = null);\n for (var i = 0; i < pathCopyParams.length; ++i) {\n decalEl[pathCopyParams[i]] = this[pathCopyParams[i]];\n }\n decalEl.__dirty |= REDRAW_BIT;\n }\n else if (this._decalEl) {\n this._decalEl = null;\n }\n };\n Path.prototype.getDecalElement = function () {\n return this._decalEl;\n };\n Path.prototype._init = function (props) {\n var keysArr = keys(props);\n this.shape = this.getDefaultShape();\n var defaultStyle = this.getDefaultStyle();\n if (defaultStyle) {\n this.useStyle(defaultStyle);\n }\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n var value = props[key];\n if (key === 'style') {\n if (!this.style) {\n this.useStyle(value);\n }\n else {\n extend(this.style, value);\n }\n }\n else if (key === 'shape') {\n extend(this.shape, value);\n }\n else {\n _super.prototype.attrKV.call(this, key, value);\n }\n }\n if (!this.style) {\n this.useStyle({});\n }\n };\n Path.prototype.getDefaultStyle = function () {\n return null;\n };\n Path.prototype.getDefaultShape = function () {\n return {};\n };\n Path.prototype.canBeInsideText = function () {\n return this.hasFill();\n };\n Path.prototype.getInsideTextFill = function () {\n var pathFill = this.style.fill;\n if (pathFill !== 'none') {\n if (isString(pathFill)) {\n var fillLum = lum(pathFill, 0);\n if (fillLum > 0.5) {\n return DARK_LABEL_COLOR;\n }\n else if (fillLum > 0.2) {\n return LIGHTER_LABEL_COLOR;\n }\n return LIGHT_LABEL_COLOR;\n }\n else if (pathFill) {\n return LIGHT_LABEL_COLOR;\n }\n }\n return DARK_LABEL_COLOR;\n };\n Path.prototype.getInsideTextStroke = function (textFill) {\n var pathFill = this.style.fill;\n if (isString(pathFill)) {\n var zr = this.__zr;\n var isDarkMode = !!(zr && zr.isDarkMode());\n var isDarkLabel = lum(textFill, 0) < DARK_MODE_THRESHOLD;\n if (isDarkMode === isDarkLabel) {\n return pathFill;\n }\n }\n };\n Path.prototype.buildPath = function (ctx, shapeCfg, inBatch) { };\n Path.prototype.pathUpdated = function () {\n this.__dirty &= ~SHAPE_CHANGED_BIT;\n };\n Path.prototype.getUpdatedPathProxy = function (inBatch) {\n !this.path && this.createPathProxy();\n this.path.beginPath();\n this.buildPath(this.path, this.shape, inBatch);\n return this.path;\n };\n Path.prototype.createPathProxy = function () {\n this.path = new PathProxy(false);\n };\n Path.prototype.hasStroke = function () {\n var style = this.style;\n var stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n };\n Path.prototype.hasFill = function () {\n var style = this.style;\n var fill = style.fill;\n return fill != null && fill !== 'none';\n };\n Path.prototype.getBoundingRect = function () {\n var rect = this._rect;\n var style = this.style;\n var needsUpdateRect = !rect;\n if (needsUpdateRect) {\n var firstInvoke = false;\n if (!this.path) {\n firstInvoke = true;\n this.createPathProxy();\n }\n var path = this.path;\n if (firstInvoke || (this.__dirty & SHAPE_CHANGED_BIT)) {\n path.beginPath();\n this.buildPath(path, this.shape, false);\n this.pathUpdated();\n }\n rect = path.getBoundingRect();\n }\n this._rect = rect;\n if (this.hasStroke() && this.path && this.path.len() > 0) {\n var rectStroke = this._rectStroke || (this._rectStroke = rect.clone());\n if (this.__dirty || needsUpdateRect) {\n rectStroke.copy(rect);\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n var w = style.lineWidth;\n if (!this.hasFill()) {\n var strokeContainThreshold = this.strokeContainThreshold;\n w = Math.max(w, strokeContainThreshold == null ? 4 : strokeContainThreshold);\n }\n if (lineScale > 1e-10) {\n rectStroke.width += w / lineScale;\n rectStroke.height += w / lineScale;\n rectStroke.x -= w / lineScale / 2;\n rectStroke.y -= w / lineScale / 2;\n }\n }\n return rectStroke;\n }\n return rect;\n };\n Path.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n var style = this.style;\n x = localPos[0];\n y = localPos[1];\n if (rect.contain(x, y)) {\n var pathProxy = this.path;\n if (this.hasStroke()) {\n var lineWidth = style.lineWidth;\n var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n if (lineScale > 1e-10) {\n if (!this.hasFill()) {\n lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n }\n if (pathContain.containStroke(pathProxy, lineWidth / lineScale, x, y)) {\n return true;\n }\n }\n }\n if (this.hasFill()) {\n return pathContain.contain(pathProxy, x, y);\n }\n }\n return false;\n };\n Path.prototype.dirtyShape = function () {\n this.__dirty |= SHAPE_CHANGED_BIT;\n if (this._rect) {\n this._rect = null;\n }\n if (this._decalEl) {\n this._decalEl.dirtyShape();\n }\n this.markRedraw();\n };\n Path.prototype.dirty = function () {\n this.dirtyStyle();\n this.dirtyShape();\n };\n Path.prototype.animateShape = function (loop) {\n return this.animate('shape', loop);\n };\n Path.prototype.updateDuringAnimation = function (targetKey) {\n if (targetKey === 'style') {\n this.dirtyStyle();\n }\n else if (targetKey === 'shape') {\n this.dirtyShape();\n }\n else {\n this.markRedraw();\n }\n };\n Path.prototype.attrKV = function (key, value) {\n if (key === 'shape') {\n this.setShape(value);\n }\n else {\n _super.prototype.attrKV.call(this, key, value);\n }\n };\n Path.prototype.setShape = function (keyOrObj, value) {\n var shape = this.shape;\n if (!shape) {\n shape = this.shape = {};\n }\n if (typeof keyOrObj === 'string') {\n shape[keyOrObj] = value;\n }\n else {\n extend(shape, keyOrObj);\n }\n this.dirtyShape();\n return this;\n };\n Path.prototype.shapeChanged = function () {\n return !!(this.__dirty & SHAPE_CHANGED_BIT);\n };\n Path.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_PATH_STYLE, obj);\n };\n Path.prototype._innerSaveToNormal = function (toState) {\n _super.prototype._innerSaveToNormal.call(this, toState);\n var normalState = this._normalState;\n if (toState.shape && !normalState.shape) {\n normalState.shape = extend({}, this.shape);\n }\n };\n Path.prototype._applyStateObj = function (stateName, state, normalState, keepCurrentStates, transition, animationCfg) {\n _super.prototype._applyStateObj.call(this, stateName, state, normalState, keepCurrentStates, transition, animationCfg);\n var needsRestoreToNormal = !(state && keepCurrentStates);\n var targetShape;\n if (state && state.shape) {\n if (transition) {\n if (keepCurrentStates) {\n targetShape = state.shape;\n }\n else {\n targetShape = extend({}, normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else {\n targetShape = extend({}, keepCurrentStates ? this.shape : normalState.shape);\n extend(targetShape, state.shape);\n }\n }\n else if (needsRestoreToNormal) {\n targetShape = normalState.shape;\n }\n if (targetShape) {\n if (transition) {\n this.shape = extend({}, this.shape);\n var targetShapePrimaryProps = {};\n var shapeKeys = keys(targetShape);\n for (var i = 0; i < shapeKeys.length; i++) {\n var key = shapeKeys[i];\n if (typeof targetShape[key] === 'object') {\n this.shape[key] = targetShape[key];\n }\n else {\n targetShapePrimaryProps[key] = targetShape[key];\n }\n }\n this._transitionState(stateName, {\n shape: targetShapePrimaryProps\n }, animationCfg);\n }\n else {\n this.shape = targetShape;\n this.dirtyShape();\n }\n }\n };\n Path.prototype._mergeStates = function (states) {\n var mergedState = _super.prototype._mergeStates.call(this, states);\n var mergedShape;\n for (var i = 0; i < states.length; i++) {\n var state = states[i];\n if (state.shape) {\n mergedShape = mergedShape || {};\n this._mergeStyle(mergedShape, state.shape);\n }\n }\n if (mergedShape) {\n mergedState.shape = mergedShape;\n }\n return mergedState;\n };\n Path.prototype.getAnimationStyleProps = function () {\n return DEFAULT_PATH_ANIMATION_PROPS;\n };\n Path.prototype.isZeroArea = function () {\n return false;\n };\n Path.extend = function (defaultProps) {\n var Sub = (function (_super) {\n __extends(Sub, _super);\n function Sub(opts) {\n var _this = _super.call(this, opts) || this;\n defaultProps.init && defaultProps.init.call(_this, opts);\n return _this;\n }\n Sub.prototype.getDefaultStyle = function () {\n return clone(defaultProps.style);\n };\n Sub.prototype.getDefaultShape = function () {\n return clone(defaultProps.shape);\n };\n return Sub;\n }(Path));\n for (var key in defaultProps) {\n if (typeof defaultProps[key] === 'function') {\n Sub.prototype[key] = defaultProps[key];\n }\n }\n return Sub;\n };\n Path.initDefaultProps = (function () {\n var pathProto = Path.prototype;\n pathProto.type = 'path';\n pathProto.strokeContainThreshold = 5;\n pathProto.segmentIgnoreThreshold = 0;\n pathProto.subPixelOptimize = false;\n pathProto.autoBatch = false;\n pathProto.__dirty = REDRAW_BIT | STYLE_CHANGED_BIT | SHAPE_CHANGED_BIT;\n })();\n return Path;\n}(Displayable));\nexport default Path;\n","import { __extends } from \"tslib\";\nimport Displayable from './Displayable.js';\nimport { getBoundingRect } from '../contain/text.js';\nimport { DEFAULT_PATH_STYLE } from './Path.js';\nimport { createObject, defaults } from '../core/util.js';\nimport { DEFAULT_FONT } from '../core/platform.js';\nexport var DEFAULT_TSPAN_STYLE = defaults({\n strokeFirst: true,\n font: DEFAULT_FONT,\n x: 0,\n y: 0,\n textAlign: 'left',\n textBaseline: 'top',\n miterLimit: 2\n}, DEFAULT_PATH_STYLE);\nvar TSpan = (function (_super) {\n __extends(TSpan, _super);\n function TSpan() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n TSpan.prototype.hasStroke = function () {\n var style = this.style;\n var stroke = style.stroke;\n return stroke != null && stroke !== 'none' && style.lineWidth > 0;\n };\n TSpan.prototype.hasFill = function () {\n var style = this.style;\n var fill = style.fill;\n return fill != null && fill !== 'none';\n };\n TSpan.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_TSPAN_STYLE, obj);\n };\n TSpan.prototype.setBoundingRect = function (rect) {\n this._rect = rect;\n };\n TSpan.prototype.getBoundingRect = function () {\n var style = this.style;\n if (!this._rect) {\n var text = style.text;\n text != null ? (text += '') : (text = '');\n var rect = getBoundingRect(text, style.font, style.textAlign, style.textBaseline);\n rect.x += style.x || 0;\n rect.y += style.y || 0;\n if (this.hasStroke()) {\n var w = style.lineWidth;\n rect.x -= w / 2;\n rect.y -= w / 2;\n rect.width += w;\n rect.height += w;\n }\n this._rect = rect;\n }\n return this._rect;\n };\n TSpan.initDefaultProps = (function () {\n var tspanProto = TSpan.prototype;\n tspanProto.dirtyRectTolerance = 10;\n })();\n return TSpan;\n}(Displayable));\nTSpan.prototype.type = 'tspan';\nexport default TSpan;\n","import { __extends } from \"tslib\";\nimport Displayable, { DEFAULT_COMMON_STYLE, DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable.js';\nimport BoundingRect from '../core/BoundingRect.js';\nimport { defaults, createObject } from '../core/util.js';\nexport var DEFAULT_IMAGE_STYLE = defaults({\n x: 0,\n y: 0\n}, DEFAULT_COMMON_STYLE);\nexport var DEFAULT_IMAGE_ANIMATION_PROPS = {\n style: defaults({\n x: true,\n y: true,\n width: true,\n height: true,\n sx: true,\n sy: true,\n sWidth: true,\n sHeight: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nfunction isImageLike(source) {\n return !!(source\n && typeof source !== 'string'\n && source.width && source.height);\n}\nvar ZRImage = (function (_super) {\n __extends(ZRImage, _super);\n function ZRImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ZRImage.prototype.createStyle = function (obj) {\n return createObject(DEFAULT_IMAGE_STYLE, obj);\n };\n ZRImage.prototype._getSize = function (dim) {\n var style = this.style;\n var size = style[dim];\n if (size != null) {\n return size;\n }\n var imageSource = isImageLike(style.image)\n ? style.image : this.__image;\n if (!imageSource) {\n return 0;\n }\n var otherDim = dim === 'width' ? 'height' : 'width';\n var otherDimSize = style[otherDim];\n if (otherDimSize == null) {\n return imageSource[dim];\n }\n else {\n return imageSource[dim] / imageSource[otherDim] * otherDimSize;\n }\n };\n ZRImage.prototype.getWidth = function () {\n return this._getSize('width');\n };\n ZRImage.prototype.getHeight = function () {\n return this._getSize('height');\n };\n ZRImage.prototype.getAnimationStyleProps = function () {\n return DEFAULT_IMAGE_ANIMATION_PROPS;\n };\n ZRImage.prototype.getBoundingRect = function () {\n var style = this.style;\n if (!this._rect) {\n this._rect = new BoundingRect(style.x || 0, style.y || 0, this.getWidth(), this.getHeight());\n }\n return this._rect;\n };\n return ZRImage;\n}(Displayable));\nZRImage.prototype.type = 'image';\nexport default ZRImage;\n","export function buildPath(ctx, shape) {\n var x = shape.x;\n var y = shape.y;\n var width = shape.width;\n var height = shape.height;\n var r = shape.r;\n var r1;\n var r2;\n var r3;\n var r4;\n if (width < 0) {\n x = x + width;\n width = -width;\n }\n if (height < 0) {\n y = y + height;\n height = -height;\n }\n if (typeof r === 'number') {\n r1 = r2 = r3 = r4 = r;\n }\n else if (r instanceof Array) {\n if (r.length === 1) {\n r1 = r2 = r3 = r4 = r[0];\n }\n else if (r.length === 2) {\n r1 = r3 = r[0];\n r2 = r4 = r[1];\n }\n else if (r.length === 3) {\n r1 = r[0];\n r2 = r4 = r[1];\n r3 = r[2];\n }\n else {\n r1 = r[0];\n r2 = r[1];\n r3 = r[2];\n r4 = r[3];\n }\n }\n else {\n r1 = r2 = r3 = r4 = 0;\n }\n var total;\n if (r1 + r2 > width) {\n total = r1 + r2;\n r1 *= width / total;\n r2 *= width / total;\n }\n if (r3 + r4 > width) {\n total = r3 + r4;\n r3 *= width / total;\n r4 *= width / total;\n }\n if (r2 + r3 > height) {\n total = r2 + r3;\n r2 *= height / total;\n r3 *= height / total;\n }\n if (r1 + r4 > height) {\n total = r1 + r4;\n r1 *= height / total;\n r4 *= height / total;\n }\n ctx.moveTo(x + r1, y);\n ctx.lineTo(x + width - r2, y);\n r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n ctx.lineTo(x + width, y + height - r3);\n r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n ctx.lineTo(x + r4, y + height);\n r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n ctx.lineTo(x, y + r1);\n r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n","var round = Math.round;\nexport function subPixelOptimizeLine(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n var x1 = inputShape.x1;\n var x2 = inputShape.x2;\n var y1 = inputShape.y1;\n var y2 = inputShape.y2;\n outputShape.x1 = x1;\n outputShape.x2 = x2;\n outputShape.y1 = y1;\n outputShape.y2 = y2;\n var lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape;\n }\n if (round(x1 * 2) === round(x2 * 2)) {\n outputShape.x1 = outputShape.x2 = subPixelOptimize(x1, lineWidth, true);\n }\n if (round(y1 * 2) === round(y2 * 2)) {\n outputShape.y1 = outputShape.y2 = subPixelOptimize(y1, lineWidth, true);\n }\n return outputShape;\n}\nexport function subPixelOptimizeRect(outputShape, inputShape, style) {\n if (!inputShape) {\n return;\n }\n var originX = inputShape.x;\n var originY = inputShape.y;\n var originWidth = inputShape.width;\n var originHeight = inputShape.height;\n outputShape.x = originX;\n outputShape.y = originY;\n outputShape.width = originWidth;\n outputShape.height = originHeight;\n var lineWidth = style && style.lineWidth;\n if (!lineWidth) {\n return outputShape;\n }\n outputShape.x = subPixelOptimize(originX, lineWidth, true);\n outputShape.y = subPixelOptimize(originY, lineWidth, true);\n outputShape.width = Math.max(subPixelOptimize(originX + originWidth, lineWidth, false) - outputShape.x, originWidth === 0 ? 0 : 1);\n outputShape.height = Math.max(subPixelOptimize(originY + originHeight, lineWidth, false) - outputShape.y, originHeight === 0 ? 0 : 1);\n return outputShape;\n}\nexport function subPixelOptimize(position, lineWidth, positiveOrNegative) {\n if (!lineWidth) {\n return position;\n }\n var doubledPosition = round(position * 2);\n return (doubledPosition + round(lineWidth)) % 2 === 0\n ? doubledPosition / 2\n : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport * as roundRectHelper from '../helper/roundRect.js';\nimport { subPixelOptimizeRect } from '../helper/subPixelOptimize.js';\nvar RectShape = (function () {\n function RectShape() {\n this.x = 0;\n this.y = 0;\n this.width = 0;\n this.height = 0;\n }\n return RectShape;\n}());\nexport { RectShape };\nvar subPixelOptimizeOutputShape = {};\nvar Rect = (function (_super) {\n __extends(Rect, _super);\n function Rect(opts) {\n return _super.call(this, opts) || this;\n }\n Rect.prototype.getDefaultShape = function () {\n return new RectShape();\n };\n Rect.prototype.buildPath = function (ctx, shape) {\n var x;\n var y;\n var width;\n var height;\n if (this.subPixelOptimize) {\n var optimizedShape = subPixelOptimizeRect(subPixelOptimizeOutputShape, shape, this.style);\n x = optimizedShape.x;\n y = optimizedShape.y;\n width = optimizedShape.width;\n height = optimizedShape.height;\n optimizedShape.r = shape.r;\n shape = optimizedShape;\n }\n else {\n x = shape.x;\n y = shape.y;\n width = shape.width;\n height = shape.height;\n }\n if (!shape.r) {\n ctx.rect(x, y, width, height);\n }\n else {\n roundRectHelper.buildPath(ctx, shape);\n }\n };\n Rect.prototype.isZeroArea = function () {\n return !this.shape.width || !this.shape.height;\n };\n return Rect;\n}(Path));\nRect.prototype.type = 'rect';\nexport default Rect;\n","import { __extends } from \"tslib\";\nimport { parseRichText, parsePlainText } from './helper/parseText.js';\nimport TSpan from './TSpan.js';\nimport { retrieve2, each, normalizeCssArray, trim, retrieve3, extend, keys, defaults } from '../core/util.js';\nimport { adjustTextX, adjustTextY } from '../contain/text.js';\nimport ZRImage from './Image.js';\nimport Rect from './shape/Rect.js';\nimport BoundingRect from '../core/BoundingRect.js';\nimport Displayable, { DEFAULT_COMMON_ANIMATION_PROPS } from './Displayable.js';\nimport { DEFAULT_FONT, DEFAULT_FONT_SIZE } from '../core/platform.js';\nvar DEFAULT_RICH_TEXT_COLOR = {\n fill: '#000'\n};\nvar DEFAULT_STROKE_LINE_WIDTH = 2;\nexport var DEFAULT_TEXT_ANIMATION_PROPS = {\n style: defaults({\n fill: true,\n stroke: true,\n fillOpacity: true,\n strokeOpacity: true,\n lineWidth: true,\n fontSize: true,\n lineHeight: true,\n width: true,\n height: true,\n textShadowColor: true,\n textShadowBlur: true,\n textShadowOffsetX: true,\n textShadowOffsetY: true,\n backgroundColor: true,\n padding: true,\n borderColor: true,\n borderWidth: true,\n borderRadius: true\n }, DEFAULT_COMMON_ANIMATION_PROPS.style)\n};\nvar ZRText = (function (_super) {\n __extends(ZRText, _super);\n function ZRText(opts) {\n var _this = _super.call(this) || this;\n _this.type = 'text';\n _this._children = [];\n _this._defaultStyle = DEFAULT_RICH_TEXT_COLOR;\n _this.attr(opts);\n return _this;\n }\n ZRText.prototype.childrenRef = function () {\n return this._children;\n };\n ZRText.prototype.update = function () {\n _super.prototype.update.call(this);\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n for (var i = 0; i < this._children.length; i++) {\n var child = this._children[i];\n child.zlevel = this.zlevel;\n child.z = this.z;\n child.z2 = this.z2;\n child.culling = this.culling;\n child.cursor = this.cursor;\n child.invisible = this.invisible;\n }\n };\n ZRText.prototype.updateTransform = function () {\n var innerTransformable = this.innerTransformable;\n if (innerTransformable) {\n innerTransformable.updateTransform();\n if (innerTransformable.transform) {\n this.transform = innerTransformable.transform;\n }\n }\n else {\n _super.prototype.updateTransform.call(this);\n }\n };\n ZRText.prototype.getLocalTransform = function (m) {\n var innerTransformable = this.innerTransformable;\n return innerTransformable\n ? innerTransformable.getLocalTransform(m)\n : _super.prototype.getLocalTransform.call(this, m);\n };\n ZRText.prototype.getComputedTransform = function () {\n if (this.__hostTarget) {\n this.__hostTarget.getComputedTransform();\n this.__hostTarget.updateInnerText(true);\n }\n return _super.prototype.getComputedTransform.call(this);\n };\n ZRText.prototype._updateSubTexts = function () {\n this._childCursor = 0;\n normalizeTextStyle(this.style);\n this.style.rich\n ? this._updateRichTexts()\n : this._updatePlainTexts();\n this._children.length = this._childCursor;\n this.styleUpdated();\n };\n ZRText.prototype.addSelfToZr = function (zr) {\n _super.prototype.addSelfToZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n this._children[i].__zr = zr;\n }\n };\n ZRText.prototype.removeSelfFromZr = function (zr) {\n _super.prototype.removeSelfFromZr.call(this, zr);\n for (var i = 0; i < this._children.length; i++) {\n this._children[i].__zr = null;\n }\n };\n ZRText.prototype.getBoundingRect = function () {\n if (this.styleChanged()) {\n this._updateSubTexts();\n }\n if (!this._rect) {\n var tmpRect = new BoundingRect(0, 0, 0, 0);\n var children = this._children;\n var tmpMat = [];\n var rect = null;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n var childRect = child.getBoundingRect();\n var transform = child.getLocalTransform(tmpMat);\n if (transform) {\n tmpRect.copy(childRect);\n tmpRect.applyTransform(transform);\n rect = rect || tmpRect.clone();\n rect.union(tmpRect);\n }\n else {\n rect = rect || childRect.clone();\n rect.union(childRect);\n }\n }\n this._rect = rect || tmpRect;\n }\n return this._rect;\n };\n ZRText.prototype.setDefaultTextStyle = function (defaultTextStyle) {\n this._defaultStyle = defaultTextStyle || DEFAULT_RICH_TEXT_COLOR;\n };\n ZRText.prototype.setTextContent = function (textContent) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('Can\\'t attach text on another text');\n }\n };\n ZRText.prototype._mergeStyle = function (targetStyle, sourceStyle) {\n if (!sourceStyle) {\n return targetStyle;\n }\n var sourceRich = sourceStyle.rich;\n var targetRich = targetStyle.rich || (sourceRich && {});\n extend(targetStyle, sourceStyle);\n if (sourceRich && targetRich) {\n this._mergeRich(targetRich, sourceRich);\n targetStyle.rich = targetRich;\n }\n else if (targetRich) {\n targetStyle.rich = targetRich;\n }\n return targetStyle;\n };\n ZRText.prototype._mergeRich = function (targetRich, sourceRich) {\n var richNames = keys(sourceRich);\n for (var i = 0; i < richNames.length; i++) {\n var richName = richNames[i];\n targetRich[richName] = targetRich[richName] || {};\n extend(targetRich[richName], sourceRich[richName]);\n }\n };\n ZRText.prototype.getAnimationStyleProps = function () {\n return DEFAULT_TEXT_ANIMATION_PROPS;\n };\n ZRText.prototype._getOrCreateChild = function (Ctor) {\n var child = this._children[this._childCursor];\n if (!child || !(child instanceof Ctor)) {\n child = new Ctor();\n }\n this._children[this._childCursor++] = child;\n child.__zr = this.__zr;\n child.parent = this;\n return child;\n };\n ZRText.prototype._updatePlainTexts = function () {\n var style = this.style;\n var textFont = style.font || DEFAULT_FONT;\n var textPadding = style.padding;\n var text = getStyleText(style);\n var contentBlock = parsePlainText(text, style);\n var needDrawBg = needDrawBackground(style);\n var bgColorDrawn = !!(style.backgroundColor);\n var outerHeight = contentBlock.outerHeight;\n var outerWidth = contentBlock.outerWidth;\n var contentWidth = contentBlock.contentWidth;\n var textLines = contentBlock.lines;\n var lineHeight = contentBlock.lineHeight;\n var defaultStyle = this._defaultStyle;\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var textAlign = style.align || defaultStyle.align || 'left';\n var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign || 'top';\n var textX = baseX;\n var textY = adjustTextY(baseY, contentBlock.contentHeight, verticalAlign);\n if (needDrawBg || textPadding) {\n var boxX = adjustTextX(baseX, outerWidth, textAlign);\n var boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n needDrawBg && this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n textY += lineHeight / 2;\n if (textPadding) {\n textX = getTextXForPadding(baseX, textAlign, textPadding);\n if (verticalAlign === 'top') {\n textY += textPadding[0];\n }\n else if (verticalAlign === 'bottom') {\n textY -= textPadding[2];\n }\n }\n var defaultLineWidth = 0;\n var useDefaultFill = false;\n var textFill = getFill('fill' in style\n ? style.fill\n : (useDefaultFill = true, defaultStyle.fill));\n var textStroke = getStroke('stroke' in style\n ? style.stroke\n : (!bgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill))\n ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null);\n var hasShadow = style.textShadowBlur > 0;\n var fixedBoundingRect = style.width != null\n && (style.overflow === 'truncate' || style.overflow === 'break' || style.overflow === 'breakAll');\n var calculatedLineHeight = contentBlock.calculatedLineHeight;\n for (var i = 0; i < textLines.length; i++) {\n var el = this._getOrCreateChild(TSpan);\n var subElStyle = el.createStyle();\n el.useStyle(subElStyle);\n subElStyle.text = textLines[i];\n subElStyle.x = textX;\n subElStyle.y = textY;\n if (textAlign) {\n subElStyle.textAlign = textAlign;\n }\n subElStyle.textBaseline = 'middle';\n subElStyle.opacity = style.opacity;\n subElStyle.strokeFirst = true;\n if (hasShadow) {\n subElStyle.shadowBlur = style.textShadowBlur || 0;\n subElStyle.shadowColor = style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = style.textShadowOffsetY || 0;\n }\n subElStyle.stroke = textStroke;\n subElStyle.fill = textFill;\n if (textStroke) {\n subElStyle.lineWidth = style.lineWidth || defaultLineWidth;\n subElStyle.lineDash = style.lineDash;\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n }\n subElStyle.font = textFont;\n setSeparateFont(subElStyle, style);\n textY += lineHeight;\n if (fixedBoundingRect) {\n el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, style.width, subElStyle.textAlign), adjustTextY(subElStyle.y, calculatedLineHeight, subElStyle.textBaseline), contentWidth, calculatedLineHeight));\n }\n }\n };\n ZRText.prototype._updateRichTexts = function () {\n var style = this.style;\n var text = getStyleText(style);\n var contentBlock = parseRichText(text, style);\n var contentWidth = contentBlock.width;\n var outerWidth = contentBlock.outerWidth;\n var outerHeight = contentBlock.outerHeight;\n var textPadding = style.padding;\n var baseX = style.x || 0;\n var baseY = style.y || 0;\n var defaultStyle = this._defaultStyle;\n var textAlign = style.align || defaultStyle.align;\n var verticalAlign = style.verticalAlign || defaultStyle.verticalAlign;\n var boxX = adjustTextX(baseX, outerWidth, textAlign);\n var boxY = adjustTextY(baseY, outerHeight, verticalAlign);\n var xLeft = boxX;\n var lineTop = boxY;\n if (textPadding) {\n xLeft += textPadding[3];\n lineTop += textPadding[0];\n }\n var xRight = xLeft + contentWidth;\n if (needDrawBackground(style)) {\n this._renderBackground(style, style, boxX, boxY, outerWidth, outerHeight);\n }\n var bgColorDrawn = !!(style.backgroundColor);\n for (var i = 0; i < contentBlock.lines.length; i++) {\n var line = contentBlock.lines[i];\n var tokens = line.tokens;\n var tokenCount = tokens.length;\n var lineHeight = line.lineHeight;\n var remainedWidth = line.width;\n var leftIndex = 0;\n var lineXLeft = xLeft;\n var lineXRight = xRight;\n var rightIndex = tokenCount - 1;\n var token = void 0;\n while (leftIndex < tokenCount\n && (token = tokens[leftIndex], !token.align || token.align === 'left')) {\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft, 'left', bgColorDrawn);\n remainedWidth -= token.width;\n lineXLeft += token.width;\n leftIndex++;\n }\n while (rightIndex >= 0\n && (token = tokens[rightIndex], token.align === 'right')) {\n this._placeToken(token, style, lineHeight, lineTop, lineXRight, 'right', bgColorDrawn);\n remainedWidth -= token.width;\n lineXRight -= token.width;\n rightIndex--;\n }\n lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - remainedWidth) / 2;\n while (leftIndex <= rightIndex) {\n token = tokens[leftIndex];\n this._placeToken(token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center', bgColorDrawn);\n lineXLeft += token.width;\n leftIndex++;\n }\n lineTop += lineHeight;\n }\n };\n ZRText.prototype._placeToken = function (token, style, lineHeight, lineTop, x, textAlign, parentBgColorDrawn) {\n var tokenStyle = style.rich[token.styleName] || {};\n tokenStyle.text = token.text;\n var verticalAlign = token.verticalAlign;\n var y = lineTop + lineHeight / 2;\n if (verticalAlign === 'top') {\n y = lineTop + token.height / 2;\n }\n else if (verticalAlign === 'bottom') {\n y = lineTop + lineHeight - token.height / 2;\n }\n var needDrawBg = !token.isLineHolder && needDrawBackground(tokenStyle);\n needDrawBg && this._renderBackground(tokenStyle, style, textAlign === 'right'\n ? x - token.width\n : textAlign === 'center'\n ? x - token.width / 2\n : x, y - token.height / 2, token.width, token.height);\n var bgColorDrawn = !!tokenStyle.backgroundColor;\n var textPadding = token.textPadding;\n if (textPadding) {\n x = getTextXForPadding(x, textAlign, textPadding);\n y -= token.height / 2 - textPadding[0] - token.innerHeight / 2;\n }\n var el = this._getOrCreateChild(TSpan);\n var subElStyle = el.createStyle();\n el.useStyle(subElStyle);\n var defaultStyle = this._defaultStyle;\n var useDefaultFill = false;\n var defaultLineWidth = 0;\n var textFill = getFill('fill' in tokenStyle ? tokenStyle.fill\n : 'fill' in style ? style.fill\n : (useDefaultFill = true, defaultStyle.fill));\n var textStroke = getStroke('stroke' in tokenStyle ? tokenStyle.stroke\n : 'stroke' in style ? style.stroke\n : (!bgColorDrawn\n && !parentBgColorDrawn\n && (!defaultStyle.autoStroke || useDefaultFill)) ? (defaultLineWidth = DEFAULT_STROKE_LINE_WIDTH, defaultStyle.stroke)\n : null);\n var hasShadow = tokenStyle.textShadowBlur > 0\n || style.textShadowBlur > 0;\n subElStyle.text = token.text;\n subElStyle.x = x;\n subElStyle.y = y;\n if (hasShadow) {\n subElStyle.shadowBlur = tokenStyle.textShadowBlur || style.textShadowBlur || 0;\n subElStyle.shadowColor = tokenStyle.textShadowColor || style.textShadowColor || 'transparent';\n subElStyle.shadowOffsetX = tokenStyle.textShadowOffsetX || style.textShadowOffsetX || 0;\n subElStyle.shadowOffsetY = tokenStyle.textShadowOffsetY || style.textShadowOffsetY || 0;\n }\n subElStyle.textAlign = textAlign;\n subElStyle.textBaseline = 'middle';\n subElStyle.font = token.font || DEFAULT_FONT;\n subElStyle.opacity = retrieve3(tokenStyle.opacity, style.opacity, 1);\n setSeparateFont(subElStyle, tokenStyle);\n if (textStroke) {\n subElStyle.lineWidth = retrieve3(tokenStyle.lineWidth, style.lineWidth, defaultLineWidth);\n subElStyle.lineDash = retrieve2(tokenStyle.lineDash, style.lineDash);\n subElStyle.lineDashOffset = style.lineDashOffset || 0;\n subElStyle.stroke = textStroke;\n }\n if (textFill) {\n subElStyle.fill = textFill;\n }\n var textWidth = token.contentWidth;\n var textHeight = token.contentHeight;\n el.setBoundingRect(new BoundingRect(adjustTextX(subElStyle.x, textWidth, subElStyle.textAlign), adjustTextY(subElStyle.y, textHeight, subElStyle.textBaseline), textWidth, textHeight));\n };\n ZRText.prototype._renderBackground = function (style, topStyle, x, y, width, height) {\n var textBackgroundColor = style.backgroundColor;\n var textBorderWidth = style.borderWidth;\n var textBorderColor = style.borderColor;\n var isImageBg = textBackgroundColor && textBackgroundColor.image;\n var isPlainOrGradientBg = textBackgroundColor && !isImageBg;\n var textBorderRadius = style.borderRadius;\n var self = this;\n var rectEl;\n var imgEl;\n if (isPlainOrGradientBg || style.lineHeight || (textBorderWidth && textBorderColor)) {\n rectEl = this._getOrCreateChild(Rect);\n rectEl.useStyle(rectEl.createStyle());\n rectEl.style.fill = null;\n var rectShape = rectEl.shape;\n rectShape.x = x;\n rectShape.y = y;\n rectShape.width = width;\n rectShape.height = height;\n rectShape.r = textBorderRadius;\n rectEl.dirtyShape();\n }\n if (isPlainOrGradientBg) {\n var rectStyle = rectEl.style;\n rectStyle.fill = textBackgroundColor || null;\n rectStyle.fillOpacity = retrieve2(style.fillOpacity, 1);\n }\n else if (isImageBg) {\n imgEl = this._getOrCreateChild(ZRImage);\n imgEl.onload = function () {\n self.dirtyStyle();\n };\n var imgStyle = imgEl.style;\n imgStyle.image = textBackgroundColor.image;\n imgStyle.x = x;\n imgStyle.y = y;\n imgStyle.width = width;\n imgStyle.height = height;\n }\n if (textBorderWidth && textBorderColor) {\n var rectStyle = rectEl.style;\n rectStyle.lineWidth = textBorderWidth;\n rectStyle.stroke = textBorderColor;\n rectStyle.strokeOpacity = retrieve2(style.strokeOpacity, 1);\n rectStyle.lineDash = style.borderDash;\n rectStyle.lineDashOffset = style.borderDashOffset || 0;\n rectEl.strokeContainThreshold = 0;\n if (rectEl.hasFill() && rectEl.hasStroke()) {\n rectStyle.strokeFirst = true;\n rectStyle.lineWidth *= 2;\n }\n }\n var commonStyle = (rectEl || imgEl).style;\n commonStyle.shadowBlur = style.shadowBlur || 0;\n commonStyle.shadowColor = style.shadowColor || 'transparent';\n commonStyle.shadowOffsetX = style.shadowOffsetX || 0;\n commonStyle.shadowOffsetY = style.shadowOffsetY || 0;\n commonStyle.opacity = retrieve3(style.opacity, topStyle.opacity, 1);\n };\n ZRText.makeFont = function (style) {\n var font = '';\n if (hasSeparateFont(style)) {\n font = [\n style.fontStyle,\n style.fontWeight,\n parseFontSize(style.fontSize),\n style.fontFamily || 'sans-serif'\n ].join(' ');\n }\n return font && trim(font) || style.textFont || style.font;\n };\n return ZRText;\n}(Displayable));\nvar VALID_TEXT_ALIGN = { left: true, right: 1, center: 1 };\nvar VALID_TEXT_VERTICAL_ALIGN = { top: 1, bottom: 1, middle: 1 };\nvar FONT_PARTS = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily'];\nexport function parseFontSize(fontSize) {\n if (typeof fontSize === 'string'\n && (fontSize.indexOf('px') !== -1\n || fontSize.indexOf('rem') !== -1\n || fontSize.indexOf('em') !== -1)) {\n return fontSize;\n }\n else if (!isNaN(+fontSize)) {\n return fontSize + 'px';\n }\n else {\n return DEFAULT_FONT_SIZE + 'px';\n }\n}\nfunction setSeparateFont(targetStyle, sourceStyle) {\n for (var i = 0; i < FONT_PARTS.length; i++) {\n var fontProp = FONT_PARTS[i];\n var val = sourceStyle[fontProp];\n if (val != null) {\n targetStyle[fontProp] = val;\n }\n }\n}\nexport function hasSeparateFont(style) {\n return style.fontSize != null || style.fontFamily || style.fontWeight;\n}\nexport function normalizeTextStyle(style) {\n normalizeStyle(style);\n each(style.rich, normalizeStyle);\n return style;\n}\nfunction normalizeStyle(style) {\n if (style) {\n style.font = ZRText.makeFont(style);\n var textAlign = style.align;\n textAlign === 'middle' && (textAlign = 'center');\n style.align = (textAlign == null || VALID_TEXT_ALIGN[textAlign]) ? textAlign : 'left';\n var verticalAlign = style.verticalAlign;\n verticalAlign === 'center' && (verticalAlign = 'middle');\n style.verticalAlign = (verticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[verticalAlign]) ? verticalAlign : 'top';\n var textPadding = style.padding;\n if (textPadding) {\n style.padding = normalizeCssArray(style.padding);\n }\n }\n}\nfunction getStroke(stroke, lineWidth) {\n return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n ? null\n : (stroke.image || stroke.colorStops)\n ? '#000'\n : stroke;\n}\nfunction getFill(fill) {\n return (fill == null || fill === 'none')\n ? null\n : (fill.image || fill.colorStops)\n ? '#000'\n : fill;\n}\nfunction getTextXForPadding(x, textAlign, textPadding) {\n return textAlign === 'right'\n ? (x - textPadding[1])\n : textAlign === 'center'\n ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n : (x + textPadding[3]);\n}\nfunction getStyleText(style) {\n var text = style.text;\n text != null && (text += '');\n return text;\n}\nfunction needDrawBackground(style) {\n return !!(style.backgroundColor\n || style.lineHeight\n || (style.borderWidth && style.borderColor));\n}\nexport default ZRText;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from './model.js';\nexport var getECData = makeInner();\nexport var setCommonECData = function (seriesIndex, dataType, dataIdx, el) {\n if (el) {\n var ecData = getECData(el);\n // Add data index and series index for indexing the data by element\n // Useful in tooltip\n ecData.dataIndex = dataIdx;\n ecData.dataType = dataType;\n ecData.seriesIndex = seriesIndex;\n ecData.ssrType = 'chart';\n // TODO: not store dataIndex on children.\n if (el.type === 'group') {\n el.traverse(function (child) {\n var childECData = getECData(child);\n childECData.seriesIndex = seriesIndex;\n childECData.dataIndex = dataIdx;\n childECData.dataType = dataType;\n childECData.ssrType = 'chart';\n });\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend, indexOf, isArrayLike, isObject, keys, isArray, each } from 'zrender/lib/core/util.js';\nimport { getECData } from './innerStore.js';\nimport { liftColor } from 'zrender/lib/tool/color.js';\nimport { queryDataIndex, makeInner } from './model.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport { error } from './log.js';\n// Reserve 0 as default.\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\nvar getSavedStates = makeInner();\nvar getComponentStates = makeInner();\nexport var HOVER_STATE_NORMAL = 0;\nexport var HOVER_STATE_BLUR = 1;\nexport var HOVER_STATE_EMPHASIS = 2;\nexport var SPECIAL_STATES = ['emphasis', 'blur', 'select'];\nexport var DISPLAY_STATES = ['normal', 'emphasis', 'blur', 'select'];\nexport var Z2_EMPHASIS_LIFT = 10;\nexport var Z2_SELECT_LIFT = 9;\nexport var HIGHLIGHT_ACTION_TYPE = 'highlight';\nexport var DOWNPLAY_ACTION_TYPE = 'downplay';\nexport var SELECT_ACTION_TYPE = 'select';\nexport var UNSELECT_ACTION_TYPE = 'unselect';\nexport var TOGGLE_SELECT_ACTION_TYPE = 'toggleSelect';\nfunction hasFillOrStroke(fillOrStroke) {\n return fillOrStroke != null && fillOrStroke !== 'none';\n}\nfunction doChangeHoverState(el, stateName, hoverStateEnum) {\n if (el.onHoverStateChange && (el.hoverState || 0) !== hoverStateEnum) {\n el.onHoverStateChange(stateName);\n }\n el.hoverState = hoverStateEnum;\n}\nfunction singleEnterEmphasis(el) {\n // Only mark the flag.\n // States will be applied in the echarts.ts in next frame.\n doChangeHoverState(el, 'emphasis', HOVER_STATE_EMPHASIS);\n}\nfunction singleLeaveEmphasis(el) {\n // Only mark the flag.\n // States will be applied in the echarts.ts in next frame.\n if (el.hoverState === HOVER_STATE_EMPHASIS) {\n doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL);\n }\n}\nfunction singleEnterBlur(el) {\n doChangeHoverState(el, 'blur', HOVER_STATE_BLUR);\n}\nfunction singleLeaveBlur(el) {\n if (el.hoverState === HOVER_STATE_BLUR) {\n doChangeHoverState(el, 'normal', HOVER_STATE_NORMAL);\n }\n}\nfunction singleEnterSelect(el) {\n el.selected = true;\n}\nfunction singleLeaveSelect(el) {\n el.selected = false;\n}\nfunction updateElementState(el, updater, commonParam) {\n updater(el, commonParam);\n}\nfunction traverseUpdateState(el, updater, commonParam) {\n updateElementState(el, updater, commonParam);\n el.isGroup && el.traverse(function (child) {\n updateElementState(child, updater, commonParam);\n });\n}\nexport function setStatesFlag(el, stateName) {\n switch (stateName) {\n case 'emphasis':\n el.hoverState = HOVER_STATE_EMPHASIS;\n break;\n case 'normal':\n el.hoverState = HOVER_STATE_NORMAL;\n break;\n case 'blur':\n el.hoverState = HOVER_STATE_BLUR;\n break;\n case 'select':\n el.selected = true;\n }\n}\n/**\n * If we reuse elements when rerender.\n * DON'T forget to clearStates before we update the style and shape.\n * Or we may update on the wrong state instead of normal state.\n */\nexport function clearStates(el) {\n if (el.isGroup) {\n el.traverse(function (child) {\n child.clearStates();\n });\n } else {\n el.clearStates();\n }\n}\nfunction getFromStateStyle(el, props, toStateName, defaultValue) {\n var style = el.style;\n var fromState = {};\n for (var i = 0; i < props.length; i++) {\n var propName = props[i];\n var val = style[propName];\n fromState[propName] = val == null ? defaultValue && defaultValue[propName] : val;\n }\n for (var i = 0; i < el.animators.length; i++) {\n var animator = el.animators[i];\n if (animator.__fromStateTransition\n // Don't consider the animation to emphasis state.\n && animator.__fromStateTransition.indexOf(toStateName) < 0 && animator.targetName === 'style') {\n animator.saveTo(fromState, props);\n }\n }\n return fromState;\n}\nfunction createEmphasisDefaultState(el, stateName, targetStates, state) {\n var hasSelect = targetStates && indexOf(targetStates, 'select') >= 0;\n var cloned = false;\n if (el instanceof Path) {\n var store = getSavedStates(el);\n var fromFill = hasSelect ? store.selectFill || store.normalFill : store.normalFill;\n var fromStroke = hasSelect ? store.selectStroke || store.normalStroke : store.normalStroke;\n if (hasFillOrStroke(fromFill) || hasFillOrStroke(fromStroke)) {\n state = state || {};\n var emphasisStyle = state.style || {};\n // inherit case\n if (emphasisStyle.fill === 'inherit') {\n cloned = true;\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle);\n emphasisStyle.fill = fromFill;\n }\n // Apply default color lift\n else if (!hasFillOrStroke(emphasisStyle.fill) && hasFillOrStroke(fromFill)) {\n cloned = true;\n // Not modify the original value.\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle);\n // Already being applied 'emphasis'. DON'T lift color multiple times.\n emphasisStyle.fill = liftColor(fromFill);\n }\n // Not highlight stroke if fill has been highlighted.\n else if (!hasFillOrStroke(emphasisStyle.stroke) && hasFillOrStroke(fromStroke)) {\n if (!cloned) {\n state = extend({}, state);\n emphasisStyle = extend({}, emphasisStyle);\n }\n emphasisStyle.stroke = liftColor(fromStroke);\n }\n state.style = emphasisStyle;\n }\n }\n if (state) {\n // TODO Share with textContent?\n if (state.z2 == null) {\n if (!cloned) {\n state = extend({}, state);\n }\n var z2EmphasisLift = el.z2EmphasisLift;\n state.z2 = el.z2 + (z2EmphasisLift != null ? z2EmphasisLift : Z2_EMPHASIS_LIFT);\n }\n }\n return state;\n}\nfunction createSelectDefaultState(el, stateName, state) {\n // const hasSelect = indexOf(el.currentStates, stateName) >= 0;\n if (state) {\n // TODO Share with textContent?\n if (state.z2 == null) {\n state = extend({}, state);\n var z2SelectLift = el.z2SelectLift;\n state.z2 = el.z2 + (z2SelectLift != null ? z2SelectLift : Z2_SELECT_LIFT);\n }\n }\n return state;\n}\nfunction createBlurDefaultState(el, stateName, state) {\n var hasBlur = indexOf(el.currentStates, stateName) >= 0;\n var currentOpacity = el.style.opacity;\n var fromState = !hasBlur ? getFromStateStyle(el, ['opacity'], stateName, {\n opacity: 1\n }) : null;\n state = state || {};\n var blurStyle = state.style || {};\n if (blurStyle.opacity == null) {\n // clone state\n state = extend({}, state);\n blurStyle = extend({\n // Already being applied 'emphasis'. DON'T mul opacity multiple times.\n opacity: hasBlur ? currentOpacity : fromState.opacity * 0.1\n }, blurStyle);\n state.style = blurStyle;\n }\n return state;\n}\nfunction elementStateProxy(stateName, targetStates) {\n var state = this.states[stateName];\n if (this.style) {\n if (stateName === 'emphasis') {\n return createEmphasisDefaultState(this, stateName, targetStates, state);\n } else if (stateName === 'blur') {\n return createBlurDefaultState(this, stateName, state);\n } else if (stateName === 'select') {\n return createSelectDefaultState(this, stateName, state);\n }\n }\n return state;\n}\n/**\n * Set hover style (namely \"emphasis style\") of element.\n * @param el Should not be `zrender/graphic/Group`.\n * @param focus 'self' | 'selfInSeries' | 'series'\n */\nexport function setDefaultStateProxy(el) {\n el.stateProxy = elementStateProxy;\n var textContent = el.getTextContent();\n var textGuide = el.getTextGuideLine();\n if (textContent) {\n textContent.stateProxy = elementStateProxy;\n }\n if (textGuide) {\n textGuide.stateProxy = elementStateProxy;\n }\n}\nexport function enterEmphasisWhenMouseOver(el, e) {\n !shouldSilent(el, e)\n // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !el.__highByOuter && traverseUpdateState(el, singleEnterEmphasis);\n}\nexport function leaveEmphasisWhenMouseOut(el, e) {\n !shouldSilent(el, e)\n // \"emphasis\" event highlight has higher priority than mouse highlight.\n && !el.__highByOuter && traverseUpdateState(el, singleLeaveEmphasis);\n}\nexport function enterEmphasis(el, highlightDigit) {\n el.__highByOuter |= 1 << (highlightDigit || 0);\n traverseUpdateState(el, singleEnterEmphasis);\n}\nexport function leaveEmphasis(el, highlightDigit) {\n !(el.__highByOuter &= ~(1 << (highlightDigit || 0))) && traverseUpdateState(el, singleLeaveEmphasis);\n}\nexport function enterBlur(el) {\n traverseUpdateState(el, singleEnterBlur);\n}\nexport function leaveBlur(el) {\n traverseUpdateState(el, singleLeaveBlur);\n}\nexport function enterSelect(el) {\n traverseUpdateState(el, singleEnterSelect);\n}\nexport function leaveSelect(el) {\n traverseUpdateState(el, singleLeaveSelect);\n}\nfunction shouldSilent(el, e) {\n return el.__highDownSilentOnTouch && e.zrByTouch;\n}\nexport function allLeaveBlur(api) {\n var model = api.getModel();\n var leaveBlurredSeries = [];\n var allComponentViews = [];\n model.eachComponent(function (componentType, componentModel) {\n var componentStates = getComponentStates(componentModel);\n var isSeries = componentType === 'series';\n var view = isSeries ? api.getViewOfSeriesModel(componentModel) : api.getViewOfComponentModel(componentModel);\n !isSeries && allComponentViews.push(view);\n if (componentStates.isBlured) {\n // Leave blur anyway\n view.group.traverse(function (child) {\n singleLeaveBlur(child);\n });\n isSeries && leaveBlurredSeries.push(componentModel);\n }\n componentStates.isBlured = false;\n });\n each(allComponentViews, function (view) {\n if (view && view.toggleBlurSeries) {\n view.toggleBlurSeries(leaveBlurredSeries, false, model);\n }\n });\n}\nexport function blurSeries(targetSeriesIndex, focus, blurScope, api) {\n var ecModel = api.getModel();\n blurScope = blurScope || 'coordinateSystem';\n function leaveBlurOfIndices(data, dataIndices) {\n for (var i = 0; i < dataIndices.length; i++) {\n var itemEl = data.getItemGraphicEl(dataIndices[i]);\n itemEl && leaveBlur(itemEl);\n }\n }\n if (targetSeriesIndex == null) {\n return;\n }\n if (!focus || focus === 'none') {\n return;\n }\n var targetSeriesModel = ecModel.getSeriesByIndex(targetSeriesIndex);\n var targetCoordSys = targetSeriesModel.coordinateSystem;\n if (targetCoordSys && targetCoordSys.master) {\n targetCoordSys = targetCoordSys.master;\n }\n var blurredSeries = [];\n ecModel.eachSeries(function (seriesModel) {\n var sameSeries = targetSeriesModel === seriesModel;\n var coordSys = seriesModel.coordinateSystem;\n if (coordSys && coordSys.master) {\n coordSys = coordSys.master;\n }\n var sameCoordSys = coordSys && targetCoordSys ? coordSys === targetCoordSys : sameSeries; // If there is no coordinate system. use sameSeries instead.\n if (!(\n // Not blur other series if blurScope series\n blurScope === 'series' && !sameSeries\n // Not blur other coordinate system if blurScope is coordinateSystem\n || blurScope === 'coordinateSystem' && !sameCoordSys\n // Not blur self series if focus is series.\n || focus === 'series' && sameSeries\n // TODO blurScope: coordinate system\n )) {\n var view = api.getViewOfSeriesModel(seriesModel);\n view.group.traverse(function (child) {\n // For the elements that have been triggered by other components,\n // and are still required to be highlighted,\n // because the current is directly forced to blur the element,\n // it will cause the focus self to be unable to highlight, so skip the blur of this element.\n if (child.__highByOuter && sameSeries && focus === 'self') {\n return;\n }\n singleEnterBlur(child);\n });\n if (isArrayLike(focus)) {\n leaveBlurOfIndices(seriesModel.getData(), focus);\n } else if (isObject(focus)) {\n var dataTypes = keys(focus);\n for (var d = 0; d < dataTypes.length; d++) {\n leaveBlurOfIndices(seriesModel.getData(dataTypes[d]), focus[dataTypes[d]]);\n }\n }\n blurredSeries.push(seriesModel);\n getComponentStates(seriesModel).isBlured = true;\n }\n });\n ecModel.eachComponent(function (componentType, componentModel) {\n if (componentType === 'series') {\n return;\n }\n var view = api.getViewOfComponentModel(componentModel);\n if (view && view.toggleBlurSeries) {\n view.toggleBlurSeries(blurredSeries, true, ecModel);\n }\n });\n}\nexport function blurComponent(componentMainType, componentIndex, api) {\n if (componentMainType == null || componentIndex == null) {\n return;\n }\n var componentModel = api.getModel().getComponent(componentMainType, componentIndex);\n if (!componentModel) {\n return;\n }\n getComponentStates(componentModel).isBlured = true;\n var view = api.getViewOfComponentModel(componentModel);\n if (!view || !view.focusBlurEnabled) {\n return;\n }\n view.group.traverse(function (child) {\n singleEnterBlur(child);\n });\n}\nexport function blurSeriesFromHighlightPayload(seriesModel, payload, api) {\n var seriesIndex = seriesModel.seriesIndex;\n var data = seriesModel.getData(payload.dataType);\n if (!data) {\n if (process.env.NODE_ENV !== 'production') {\n error(\"Unknown dataType \" + payload.dataType);\n }\n return;\n }\n var dataIndex = queryDataIndex(data, payload);\n // Pick the first one if there is multiple/none exists.\n dataIndex = (isArray(dataIndex) ? dataIndex[0] : dataIndex) || 0;\n var el = data.getItemGraphicEl(dataIndex);\n if (!el) {\n var count = data.count();\n var current = 0;\n // If data on dataIndex is NaN.\n while (!el && current < count) {\n el = data.getItemGraphicEl(current++);\n }\n }\n if (el) {\n var ecData = getECData(el);\n blurSeries(seriesIndex, ecData.focus, ecData.blurScope, api);\n } else {\n // If there is no element put on the data. Try getting it from raw option\n // TODO Should put it on seriesModel?\n var focus_1 = seriesModel.get(['emphasis', 'focus']);\n var blurScope = seriesModel.get(['emphasis', 'blurScope']);\n if (focus_1 != null) {\n blurSeries(seriesIndex, focus_1, blurScope, api);\n }\n }\n}\nexport function findComponentHighDownDispatchers(componentMainType, componentIndex, name, api) {\n var ret = {\n focusSelf: false,\n dispatchers: null\n };\n if (componentMainType == null || componentMainType === 'series' || componentIndex == null || name == null) {\n return ret;\n }\n var componentModel = api.getModel().getComponent(componentMainType, componentIndex);\n if (!componentModel) {\n return ret;\n }\n var view = api.getViewOfComponentModel(componentModel);\n if (!view || !view.findHighDownDispatchers) {\n return ret;\n }\n var dispatchers = view.findHighDownDispatchers(name);\n // At presnet, the component (like Geo) only blur inside itself.\n // So we do not use `blurScope` in component.\n var focusSelf;\n for (var i = 0; i < dispatchers.length; i++) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatchers[i])) {\n error('param should be highDownDispatcher');\n }\n if (getECData(dispatchers[i]).focus === 'self') {\n focusSelf = true;\n break;\n }\n }\n return {\n focusSelf: focusSelf,\n dispatchers: dispatchers\n };\n}\nexport function handleGlobalMouseOverForHighDown(dispatcher, e, api) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatcher)) {\n error('param should be highDownDispatcher');\n }\n var ecData = getECData(dispatcher);\n var _a = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api),\n dispatchers = _a.dispatchers,\n focusSelf = _a.focusSelf;\n // If `findHighDownDispatchers` is supported on the component,\n // highlight/downplay elements with the same name.\n if (dispatchers) {\n if (focusSelf) {\n blurComponent(ecData.componentMainType, ecData.componentIndex, api);\n }\n each(dispatchers, function (dispatcher) {\n return enterEmphasisWhenMouseOver(dispatcher, e);\n });\n } else {\n // Try blur all in the related series. Then emphasis the hoverred.\n // TODO. progressive mode.\n blurSeries(ecData.seriesIndex, ecData.focus, ecData.blurScope, api);\n if (ecData.focus === 'self') {\n blurComponent(ecData.componentMainType, ecData.componentIndex, api);\n }\n // Other than series, component that not support `findHighDownDispatcher` will\n // also use it. But in this case, highlight/downplay are only supported in\n // mouse hover but not in dispatchAction.\n enterEmphasisWhenMouseOver(dispatcher, e);\n }\n}\nexport function handleGlobalMouseOutForHighDown(dispatcher, e, api) {\n if (process.env.NODE_ENV !== 'production' && !isHighDownDispatcher(dispatcher)) {\n error('param should be highDownDispatcher');\n }\n allLeaveBlur(api);\n var ecData = getECData(dispatcher);\n var dispatchers = findComponentHighDownDispatchers(ecData.componentMainType, ecData.componentIndex, ecData.componentHighDownName, api).dispatchers;\n if (dispatchers) {\n each(dispatchers, function (dispatcher) {\n return leaveEmphasisWhenMouseOut(dispatcher, e);\n });\n } else {\n leaveEmphasisWhenMouseOut(dispatcher, e);\n }\n}\nexport function toggleSelectionFromPayload(seriesModel, payload, api) {\n if (!isSelectChangePayload(payload)) {\n return;\n }\n var dataType = payload.dataType;\n var data = seriesModel.getData(dataType);\n var dataIndex = queryDataIndex(data, payload);\n if (!isArray(dataIndex)) {\n dataIndex = [dataIndex];\n }\n seriesModel[payload.type === TOGGLE_SELECT_ACTION_TYPE ? 'toggleSelect' : payload.type === SELECT_ACTION_TYPE ? 'select' : 'unselect'](dataIndex, dataType);\n}\nexport function updateSeriesElementSelection(seriesModel) {\n var allData = seriesModel.getAllData();\n each(allData, function (_a) {\n var data = _a.data,\n type = _a.type;\n data.eachItemGraphicEl(function (el, idx) {\n seriesModel.isSelected(idx, type) ? enterSelect(el) : leaveSelect(el);\n });\n });\n}\nexport function getAllSelectedIndices(ecModel) {\n var ret = [];\n ecModel.eachSeries(function (seriesModel) {\n var allData = seriesModel.getAllData();\n each(allData, function (_a) {\n var data = _a.data,\n type = _a.type;\n var dataIndices = seriesModel.getSelectedDataIndices();\n if (dataIndices.length > 0) {\n var item = {\n dataIndex: dataIndices,\n seriesIndex: seriesModel.seriesIndex\n };\n if (type != null) {\n item.dataType = type;\n }\n ret.push(item);\n }\n });\n });\n return ret;\n}\n/**\n * Enable the function that mouseover will trigger the emphasis state.\n *\n * NOTE:\n * This function should be used on the element with dataIndex, seriesIndex.\n *\n */\nexport function enableHoverEmphasis(el, focus, blurScope) {\n setAsHighDownDispatcher(el, true);\n traverseUpdateState(el, setDefaultStateProxy);\n enableHoverFocus(el, focus, blurScope);\n}\nexport function disableHoverEmphasis(el) {\n setAsHighDownDispatcher(el, false);\n}\nexport function toggleHoverEmphasis(el, focus, blurScope, isDisabled) {\n isDisabled ? disableHoverEmphasis(el) : enableHoverEmphasis(el, focus, blurScope);\n}\nexport function enableHoverFocus(el, focus, blurScope) {\n var ecData = getECData(el);\n if (focus != null) {\n // TODO dataIndex may be set after this function. This check is not useful.\n // if (ecData.dataIndex == null) {\n // if (__DEV__) {\n // console.warn('focus can only been set on element with dataIndex');\n // }\n // }\n // else {\n ecData.focus = focus;\n ecData.blurScope = blurScope;\n // }\n } else if (ecData.focus) {\n ecData.focus = null;\n }\n}\nvar OTHER_STATES = ['emphasis', 'blur', 'select'];\nvar defaultStyleGetterMap = {\n itemStyle: 'getItemStyle',\n lineStyle: 'getLineStyle',\n areaStyle: 'getAreaStyle'\n};\n/**\n * Set emphasis/blur/selected states of element.\n */\nexport function setStatesStylesFromModel(el, itemModel, styleType,\n// default itemStyle\ngetter) {\n styleType = styleType || 'itemStyle';\n for (var i = 0; i < OTHER_STATES.length; i++) {\n var stateName = OTHER_STATES[i];\n var model = itemModel.getModel([stateName, styleType]);\n var state = el.ensureState(stateName);\n // Let it throw error if getterType is not found.\n state.style = getter ? getter(model) : model[defaultStyleGetterMap[styleType]]();\n }\n}\n/**\n *\n * Set element as highlight / downplay dispatcher.\n * It will be checked when element received mouseover event or from highlight action.\n * It's in change of all highlight/downplay behavior of it's children.\n *\n * @param el\n * @param el.highDownSilentOnTouch\n * In touch device, mouseover event will be trigger on touchstart event\n * (see module:zrender/dom/HandlerProxy). By this mechanism, we can\n * conveniently use hoverStyle when tap on touch screen without additional\n * code for compatibility.\n * But if the chart/component has select feature, which usually also use\n * hoverStyle, there might be conflict between 'select-highlight' and\n * 'hover-highlight' especially when roam is enabled (see geo for example).\n * In this case, `highDownSilentOnTouch` should be used to disable\n * hover-highlight on touch device.\n * @param asDispatcher If `false`, do not set as \"highDownDispatcher\".\n */\nexport function setAsHighDownDispatcher(el, asDispatcher) {\n var disable = asDispatcher === false;\n var extendedEl = el;\n // Make `highDownSilentOnTouch` and `onStateChange` only work after\n // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n if (el.highDownSilentOnTouch) {\n extendedEl.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n }\n // Simple optimize, since this method might be\n // called for each elements of a group in some cases.\n if (!disable || extendedEl.__highDownDispatcher) {\n // Emphasis, normal can be triggered manually by API or other components like hover link.\n // el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent);\n // Also keep previous record.\n extendedEl.__highByOuter = extendedEl.__highByOuter || 0;\n extendedEl.__highDownDispatcher = !disable;\n }\n}\nexport function isHighDownDispatcher(el) {\n return !!(el && el.__highDownDispatcher);\n}\n/**\n * Enable component highlight/downplay features:\n * + hover link (within the same name)\n * + focus blur in component\n */\nexport function enableComponentHighDownFeatures(el, componentModel, componentHighDownName) {\n var ecData = getECData(el);\n ecData.componentMainType = componentModel.mainType;\n ecData.componentIndex = componentModel.componentIndex;\n ecData.componentHighDownName = componentHighDownName;\n}\n/**\n * Support highlight/downplay record on each elements.\n * For the case: hover highlight/downplay (legend, visualMap, ...) and\n * user triggered highlight/downplay should not conflict.\n * Only all of the highlightDigit cleared, return to normal.\n * @param {string} highlightKey\n * @return {number} highlightDigit\n */\nexport function getHighlightDigit(highlightKey) {\n var highlightDigit = _highlightKeyMap[highlightKey];\n if (highlightDigit == null && _highlightNextDigit <= 32) {\n highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++;\n }\n return highlightDigit;\n}\nexport function isSelectChangePayload(payload) {\n var payloadType = payload.type;\n return payloadType === SELECT_ACTION_TYPE || payloadType === UNSELECT_ACTION_TYPE || payloadType === TOGGLE_SELECT_ACTION_TYPE;\n}\nexport function isHighDownPayload(payload) {\n var payloadType = payload.type;\n return payloadType === HIGHLIGHT_ACTION_TYPE || payloadType === DOWNPLAY_ACTION_TYPE;\n}\nexport function savePathStates(el) {\n var store = getSavedStates(el);\n store.normalFill = el.style.fill;\n store.normalStroke = el.style.stroke;\n var selectState = el.states.select || {};\n store.selectFill = selectState.style && selectState.style.fill || null;\n store.selectStroke = selectState.style && selectState.style.stroke || null;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isFunction, isObject, retrieve2 } from 'zrender/lib/core/util.js';\nimport { makeInner } from '../util/model.js';\n// Stored properties for further transition.\nexport var transitionStore = makeInner();\n/**\n * Return null if animation is disabled.\n */\nexport function getAnimationConfig(animationType, animatableModel, dataIndex,\n// Extra opts can override the option in animatable model.\nextraOpts,\n// TODO It's only for pictorial bar now.\nextraDelayParams) {\n var animationPayload;\n // Check if there is global animation configuration from dataZoom/resize can override the config in option.\n // If animation is enabled. Will use this animation config in payload.\n // If animation is disabled. Just ignore it.\n if (animatableModel && animatableModel.ecModel) {\n var updatePayload = animatableModel.ecModel.getUpdatePayload();\n animationPayload = updatePayload && updatePayload.animation;\n }\n var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n var isUpdate = animationType === 'update';\n if (animationEnabled) {\n var duration = void 0;\n var easing = void 0;\n var delay = void 0;\n if (extraOpts) {\n duration = retrieve2(extraOpts.duration, 200);\n easing = retrieve2(extraOpts.easing, 'cubicOut');\n delay = 0;\n } else {\n duration = animatableModel.getShallow(isUpdate ? 'animationDurationUpdate' : 'animationDuration');\n easing = animatableModel.getShallow(isUpdate ? 'animationEasingUpdate' : 'animationEasing');\n delay = animatableModel.getShallow(isUpdate ? 'animationDelayUpdate' : 'animationDelay');\n }\n // animation from payload has highest priority.\n if (animationPayload) {\n animationPayload.duration != null && (duration = animationPayload.duration);\n animationPayload.easing != null && (easing = animationPayload.easing);\n animationPayload.delay != null && (delay = animationPayload.delay);\n }\n if (isFunction(delay)) {\n delay = delay(dataIndex, extraDelayParams);\n }\n if (isFunction(duration)) {\n duration = duration(dataIndex);\n }\n var config = {\n duration: duration || 0,\n delay: delay,\n easing: easing\n };\n return config;\n } else {\n return null;\n }\n}\nfunction animateOrSetProps(animationType, el, props, animatableModel, dataIndex, cb, during) {\n var isFrom = false;\n var removeOpt;\n if (isFunction(dataIndex)) {\n during = cb;\n cb = dataIndex;\n dataIndex = null;\n } else if (isObject(dataIndex)) {\n cb = dataIndex.cb;\n during = dataIndex.during;\n isFrom = dataIndex.isFrom;\n removeOpt = dataIndex.removeOpt;\n dataIndex = dataIndex.dataIndex;\n }\n var isRemove = animationType === 'leave';\n if (!isRemove) {\n // Must stop the remove animation.\n el.stopAnimation('leave');\n }\n var animationConfig = getAnimationConfig(animationType, animatableModel, dataIndex, isRemove ? removeOpt || {} : null, animatableModel && animatableModel.getAnimationDelayParams ? animatableModel.getAnimationDelayParams(el, dataIndex) : null);\n if (animationConfig && animationConfig.duration > 0) {\n var duration = animationConfig.duration;\n var animationDelay = animationConfig.delay;\n var animationEasing = animationConfig.easing;\n var animateConfig = {\n duration: duration,\n delay: animationDelay || 0,\n easing: animationEasing,\n done: cb,\n force: !!cb || !!during,\n // Set to final state in update/init animation.\n // So the post processing based on the path shape can be done correctly.\n setToFinal: !isRemove,\n scope: animationType,\n during: during\n };\n isFrom ? el.animateFrom(props, animateConfig) : el.animateTo(props, animateConfig);\n } else {\n el.stopAnimation();\n // If `isFrom`, the props is the \"from\" props.\n !isFrom && el.attr(props);\n // Call during at least once.\n during && during(1);\n cb && cb();\n }\n}\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n * @example\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n * // Or\n * graphic.updateProps(el, {\n * position: [100, 100]\n * }, seriesModel, function () { console.log('Animation done!'); });\n */\nfunction updateProps(el, props,\n// TODO: TYPE AnimatableModel\nanimatableModel, dataIndex, cb, during) {\n animateOrSetProps('update', el, props, animatableModel, dataIndex, cb, during);\n}\nexport { updateProps };\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n */\nexport function initProps(el, props, animatableModel, dataIndex, cb, during) {\n animateOrSetProps('enter', el, props, animatableModel, dataIndex, cb, during);\n}\n/**\n * If element is removed.\n * It can determine if element is having remove animation.\n */\nexport function isElementRemoved(el) {\n if (!el.__zr) {\n return true;\n }\n for (var i = 0; i < el.animators.length; i++) {\n var animator = el.animators[i];\n if (animator.scope === 'leave') {\n return true;\n }\n }\n return false;\n}\n/**\n * Remove graphic element\n */\nexport function removeElement(el, props, animatableModel, dataIndex, cb, during) {\n // Don't do remove animation twice.\n if (isElementRemoved(el)) {\n return;\n }\n animateOrSetProps('leave', el, props, animatableModel, dataIndex, cb, during);\n}\nfunction fadeOutDisplayable(el, animatableModel, dataIndex, done) {\n el.removeTextContent();\n el.removeTextGuideLine();\n removeElement(el, {\n style: {\n opacity: 0\n }\n }, animatableModel, dataIndex, done);\n}\nexport function removeElementWithFadeOut(el, animatableModel, dataIndex) {\n function doRemove() {\n el.parent && el.parent.remove(el);\n }\n // Hide label and labelLine first\n // TODO Also use fade out animation?\n if (!el.isGroup) {\n fadeOutDisplayable(el, animatableModel, dataIndex, doRemove);\n } else {\n el.traverse(function (disp) {\n if (!disp.isGroup) {\n // Can invoke doRemove multiple times.\n fadeOutDisplayable(disp, animatableModel, dataIndex, doRemove);\n }\n });\n }\n}\n/**\n * Save old style for style transition in universalTransition module.\n * It's used when element will be reused in each render.\n * For chart like map, heatmap, which will always create new element.\n * We don't need to save this because universalTransition can get old style from the old element\n */\nexport function saveOldStyle(el) {\n transitionStore(el).oldStyle = el.style;\n}\nexport function getOldStyle(el) {\n return transitionStore(el).oldStyle;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport ZRText from 'zrender/lib/graphic/Text.js';\nimport { isFunction, retrieve2, extend, keys, trim } from 'zrender/lib/core/util.js';\nimport { SPECIAL_STATES, DISPLAY_STATES } from '../util/states.js';\nimport { deprecateReplaceLog } from '../util/log.js';\nimport { makeInner, interpolateRawValues } from '../util/model.js';\nimport { initProps, updateProps } from '../util/graphic.js';\nvar EMPTY_OBJ = {};\nexport function setLabelText(label, labelTexts) {\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var text = labelTexts[stateName];\n var state = label.ensureState(stateName);\n state.style = state.style || {};\n state.style.text = text;\n }\n var oldStates = label.currentStates.slice();\n label.clearStates(true);\n label.setStyle({\n text: labelTexts.normal\n });\n label.useStates(oldStates, true);\n}\nfunction getLabelText(opt, stateModels, interpolatedValue) {\n var labelFetcher = opt.labelFetcher;\n var labelDataIndex = opt.labelDataIndex;\n var labelDimIndex = opt.labelDimIndex;\n var normalModel = stateModels.normal;\n var baseText;\n if (labelFetcher) {\n baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex, normalModel && normalModel.get('formatter'), interpolatedValue != null ? {\n interpolatedValue: interpolatedValue\n } : null);\n }\n if (baseText == null) {\n baseText = isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt, interpolatedValue) : opt.defaultText;\n }\n var statesText = {\n normal: baseText\n };\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = stateModels[stateName];\n statesText[stateName] = retrieve2(labelFetcher ? labelFetcher.getFormattedLabel(labelDataIndex, stateName, null, labelDimIndex, stateModel && stateModel.get('formatter')) : null, baseText);\n }\n return statesText;\n}\nfunction setLabelStyle(targetEl, labelStatesModels, opt, stateSpecified\n// TODO specified position?\n) {\n opt = opt || EMPTY_OBJ;\n var isSetOnText = targetEl instanceof ZRText;\n var needsCreateText = false;\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateModel = labelStatesModels[DISPLAY_STATES[i]];\n if (stateModel && stateModel.getShallow('show')) {\n needsCreateText = true;\n break;\n }\n }\n var textContent = isSetOnText ? targetEl : targetEl.getTextContent();\n if (needsCreateText) {\n if (!isSetOnText) {\n // Reuse the previous\n if (!textContent) {\n textContent = new ZRText();\n targetEl.setTextContent(textContent);\n }\n // Use same state proxy\n if (targetEl.stateProxy) {\n textContent.stateProxy = targetEl.stateProxy;\n }\n }\n var labelStatesTexts = getLabelText(opt, labelStatesModels);\n var normalModel = labelStatesModels.normal;\n var showNormal = !!normalModel.getShallow('show');\n var normalStyle = createTextStyle(normalModel, stateSpecified && stateSpecified.normal, opt, false, !isSetOnText);\n normalStyle.text = labelStatesTexts.normal;\n if (!isSetOnText) {\n // Always create new\n targetEl.setTextConfig(createTextConfig(normalModel, opt, false));\n }\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n var stateModel = labelStatesModels[stateName];\n if (stateModel) {\n var stateObj = textContent.ensureState(stateName);\n var stateShow = !!retrieve2(stateModel.getShallow('show'), showNormal);\n if (stateShow !== showNormal) {\n stateObj.ignore = !stateShow;\n }\n stateObj.style = createTextStyle(stateModel, stateSpecified && stateSpecified[stateName], opt, true, !isSetOnText);\n stateObj.style.text = labelStatesTexts[stateName];\n if (!isSetOnText) {\n var targetElEmphasisState = targetEl.ensureState(stateName);\n targetElEmphasisState.textConfig = createTextConfig(stateModel, opt, true);\n }\n }\n }\n // PENDING: if there is many requirements that emphasis position\n // need to be different from normal position, we might consider\n // auto silent is those cases.\n textContent.silent = !!normalModel.getShallow('silent');\n // Keep x and y\n if (textContent.style.x != null) {\n normalStyle.x = textContent.style.x;\n }\n if (textContent.style.y != null) {\n normalStyle.y = textContent.style.y;\n }\n textContent.ignore = !showNormal;\n // Always create new style.\n textContent.useStyle(normalStyle);\n textContent.dirty();\n if (opt.enableTextSetter) {\n labelInner(textContent).setLabelText = function (interpolatedValue) {\n var labelStatesTexts = getLabelText(opt, labelStatesModels, interpolatedValue);\n setLabelText(textContent, labelStatesTexts);\n };\n }\n } else if (textContent) {\n // Not display rich text.\n textContent.ignore = true;\n }\n targetEl.dirty();\n}\nexport { setLabelStyle };\nexport function getLabelStatesModels(itemModel, labelName) {\n labelName = labelName || 'label';\n var statesModels = {\n normal: itemModel.getModel(labelName)\n };\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelName]);\n }\n return statesModels;\n}\n/**\n * Set basic textStyle properties.\n */\nexport function createTextStyle(textStyleModel, specifiedTextStyle,\n// Fixed style in the code. Can't be set by model.\nopt, isNotNormal, isAttached // If text is attached on an element. If so, auto color will handling in zrender.\n) {\n var textStyle = {};\n setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached);\n specifiedTextStyle && extend(textStyle, specifiedTextStyle);\n // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n return textStyle;\n}\nexport function createTextConfig(textStyleModel, opt, isNotNormal) {\n opt = opt || {};\n var textConfig = {};\n var labelPosition;\n var labelRotate = textStyleModel.getShallow('rotate');\n var labelDistance = retrieve2(textStyleModel.getShallow('distance'), isNotNormal ? null : 5);\n var labelOffset = textStyleModel.getShallow('offset');\n labelPosition = textStyleModel.getShallow('position') || (isNotNormal ? null : 'inside');\n // 'outside' is not a valid zr textPostion value, but used\n // in bar series, and magric type should be considered.\n labelPosition === 'outside' && (labelPosition = opt.defaultOutsidePosition || 'top');\n if (labelPosition != null) {\n textConfig.position = labelPosition;\n }\n if (labelOffset != null) {\n textConfig.offset = labelOffset;\n }\n if (labelRotate != null) {\n labelRotate *= Math.PI / 180;\n textConfig.rotation = labelRotate;\n }\n if (labelDistance != null) {\n textConfig.distance = labelDistance;\n }\n // fill and auto is determined by the color of path fill if it's not specified by developers.\n textConfig.outsideFill = textStyleModel.get('color') === 'inherit' ? opt.inheritColor || null : 'auto';\n return textConfig;\n}\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n */\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isNotNormal, isAttached) {\n // Consider there will be abnormal when merge hover style to normal style if given default value.\n opt = opt || EMPTY_OBJ;\n var ecModel = textStyleModel.ecModel;\n var globalTextStyle = ecModel && ecModel.option.textStyle;\n // Consider case:\n // {\n // data: [{\n // value: 12,\n // label: {\n // rich: {\n // // no 'a' here but using parent 'a'.\n // }\n // }\n // }],\n // rich: {\n // a: { ... }\n // }\n // }\n var richItemNames = getRichItemNames(textStyleModel);\n var richResult;\n if (richItemNames) {\n richResult = {};\n for (var name_1 in richItemNames) {\n if (richItemNames.hasOwnProperty(name_1)) {\n // Cascade is supported in rich.\n var richTextStyle = textStyleModel.getModel(['rich', name_1]);\n // In rich, never `disableBox`.\n // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n // the default color `'blue'` will not be adopted if no color declared in `rich`.\n // That might confuses users. So probably we should put `textStyleModel` as the\n // root ancestor of the `richTextStyle`. But that would be a break change.\n setTokenTextStyle(richResult[name_1] = {}, richTextStyle, globalTextStyle, opt, isNotNormal, isAttached, false, true);\n }\n }\n }\n if (richResult) {\n textStyle.rich = richResult;\n }\n var overflow = textStyleModel.get('overflow');\n if (overflow) {\n textStyle.overflow = overflow;\n }\n var margin = textStyleModel.get('minMargin');\n if (margin != null) {\n textStyle.margin = margin;\n }\n setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, true, false);\n}\n// Consider case:\n// {\n// data: [{\n// value: 12,\n// label: {\n// rich: {\n// // no 'a' here but using parent 'a'.\n// }\n// }\n// }],\n// rich: {\n// a: { ... }\n// }\n// }\n// TODO TextStyleModel\nfunction getRichItemNames(textStyleModel) {\n // Use object to remove duplicated names.\n var richItemNameMap;\n while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n if (rich) {\n richItemNameMap = richItemNameMap || {};\n var richKeys = keys(rich);\n for (var i = 0; i < richKeys.length; i++) {\n var richKey = richKeys[i];\n richItemNameMap[richKey] = 1;\n }\n }\n textStyleModel = textStyleModel.parentModel;\n }\n return richItemNameMap;\n}\nvar TEXT_PROPS_WITH_GLOBAL = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY'];\nvar TEXT_PROPS_SELF = ['align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign', 'ellipsis'];\nvar TEXT_PROPS_BOX = ['padding', 'borderWidth', 'borderRadius', 'borderDashOffset', 'backgroundColor', 'borderColor', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isNotNormal, isAttached, isBlock, inRich) {\n // In merge mode, default value should not be given.\n globalTextStyle = !isNotNormal && globalTextStyle || EMPTY_OBJ;\n var inheritColor = opt && opt.inheritColor;\n var fillColor = textStyleModel.getShallow('color');\n var strokeColor = textStyleModel.getShallow('textBorderColor');\n var opacity = retrieve2(textStyleModel.getShallow('opacity'), globalTextStyle.opacity);\n if (fillColor === 'inherit' || fillColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (fillColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n if (inheritColor) {\n fillColor = inheritColor;\n } else {\n fillColor = null;\n }\n }\n if (strokeColor === 'inherit' || strokeColor === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n if (strokeColor === 'auto') {\n deprecateReplaceLog('color: \\'auto\\'', 'color: \\'inherit\\'');\n }\n }\n if (inheritColor) {\n strokeColor = inheritColor;\n } else {\n strokeColor = null;\n }\n }\n if (!isAttached) {\n // Only use default global textStyle.color if text is individual.\n // Otherwise it will use the strategy of attached text color because text may be on a path.\n fillColor = fillColor || globalTextStyle.color;\n strokeColor = strokeColor || globalTextStyle.textBorderColor;\n }\n if (fillColor != null) {\n textStyle.fill = fillColor;\n }\n if (strokeColor != null) {\n textStyle.stroke = strokeColor;\n }\n var textBorderWidth = retrieve2(textStyleModel.getShallow('textBorderWidth'), globalTextStyle.textBorderWidth);\n if (textBorderWidth != null) {\n textStyle.lineWidth = textBorderWidth;\n }\n var textBorderType = retrieve2(textStyleModel.getShallow('textBorderType'), globalTextStyle.textBorderType);\n if (textBorderType != null) {\n textStyle.lineDash = textBorderType;\n }\n var textBorderDashOffset = retrieve2(textStyleModel.getShallow('textBorderDashOffset'), globalTextStyle.textBorderDashOffset);\n if (textBorderDashOffset != null) {\n textStyle.lineDashOffset = textBorderDashOffset;\n }\n if (!isNotNormal && opacity == null && !inRich) {\n opacity = opt && opt.defaultOpacity;\n }\n if (opacity != null) {\n textStyle.opacity = opacity;\n }\n // TODO\n if (!isNotNormal && !isAttached) {\n // Set default finally.\n if (textStyle.fill == null && opt.inheritColor) {\n textStyle.fill = opt.inheritColor;\n }\n }\n // Do not use `getFont` here, because merge should be supported, where\n // part of these properties may be changed in emphasis style, and the\n // others should remain their original value got from normal style.\n for (var i = 0; i < TEXT_PROPS_WITH_GLOBAL.length; i++) {\n var key = TEXT_PROPS_WITH_GLOBAL[i];\n var val = retrieve2(textStyleModel.getShallow(key), globalTextStyle[key]);\n if (val != null) {\n textStyle[key] = val;\n }\n }\n for (var i = 0; i < TEXT_PROPS_SELF.length; i++) {\n var key = TEXT_PROPS_SELF[i];\n var val = textStyleModel.getShallow(key);\n if (val != null) {\n textStyle[key] = val;\n }\n }\n if (textStyle.verticalAlign == null) {\n var baseline = textStyleModel.getShallow('baseline');\n if (baseline != null) {\n textStyle.verticalAlign = baseline;\n }\n }\n if (!isBlock || !opt.disableBox) {\n for (var i = 0; i < TEXT_PROPS_BOX.length; i++) {\n var key = TEXT_PROPS_BOX[i];\n var val = textStyleModel.getShallow(key);\n if (val != null) {\n textStyle[key] = val;\n }\n }\n var borderType = textStyleModel.getShallow('borderType');\n if (borderType != null) {\n textStyle.borderDash = borderType;\n }\n if ((textStyle.backgroundColor === 'auto' || textStyle.backgroundColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.backgroundColor === 'auto') {\n deprecateReplaceLog('backgroundColor: \\'auto\\'', 'backgroundColor: \\'inherit\\'');\n }\n }\n textStyle.backgroundColor = inheritColor;\n }\n if ((textStyle.borderColor === 'auto' || textStyle.borderColor === 'inherit') && inheritColor) {\n if (process.env.NODE_ENV !== 'production') {\n if (textStyle.borderColor === 'auto') {\n deprecateReplaceLog('borderColor: \\'auto\\'', 'borderColor: \\'inherit\\'');\n }\n }\n textStyle.borderColor = inheritColor;\n }\n }\n}\nexport function getFont(opt, ecModel) {\n var gTextStyleModel = ecModel && ecModel.getModel('textStyle');\n return trim([\n // FIXME in node-canvas fontWeight is before fontStyle\n opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '', opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '', (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px', opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'].join(' '));\n}\nexport var labelInner = makeInner();\nexport function setLabelValueAnimation(label, labelStatesModels, value, getDefaultText) {\n if (!label) {\n return;\n }\n var obj = labelInner(label);\n obj.prevValue = obj.value;\n obj.value = value;\n var normalLabelModel = labelStatesModels.normal;\n obj.valueAnimation = normalLabelModel.get('valueAnimation');\n if (obj.valueAnimation) {\n obj.precision = normalLabelModel.get('precision');\n obj.defaultInterpolatedText = getDefaultText;\n obj.statesModels = labelStatesModels;\n }\n}\nexport function animateLabelValue(textEl, dataIndex, data, animatableModel, labelFetcher) {\n var labelInnerStore = labelInner(textEl);\n if (!labelInnerStore.valueAnimation || labelInnerStore.prevValue === labelInnerStore.value) {\n // Value not changed, no new label animation\n return;\n }\n var defaultInterpolatedText = labelInnerStore.defaultInterpolatedText;\n // Consider the case that being animating, do not use the `obj.value`,\n // Otherwise it will jump to the `obj.value` when this new animation started.\n var currValue = retrieve2(labelInnerStore.interpolatedValue, labelInnerStore.prevValue);\n var targetValue = labelInnerStore.value;\n function during(percent) {\n var interpolated = interpolateRawValues(data, labelInnerStore.precision, currValue, targetValue, percent);\n labelInnerStore.interpolatedValue = percent === 1 ? null : interpolated;\n var labelText = getLabelText({\n labelDataIndex: dataIndex,\n labelFetcher: labelFetcher,\n defaultText: defaultInterpolatedText ? defaultInterpolatedText(interpolated) : interpolated + ''\n }, labelInnerStore.statesModels, interpolated);\n setLabelText(textEl, labelText);\n }\n textEl.percent = 0;\n (labelInnerStore.prevValue == null ? initProps : updateProps)(textEl, {\n // percent is used to prevent animation from being aborted #15916\n percent: 1\n }, animatableModel, dataIndex, null, during);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getFont } from '../../label/labelStyle.js';\nimport ZRText from 'zrender/lib/graphic/Text.js';\nvar PATH_COLOR = ['textStyle', 'color'];\nvar textStyleParams = ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'padding', 'lineHeight', 'rich', 'width', 'height', 'overflow'];\n// TODO Performance improvement?\nvar tmpText = new ZRText();\nvar TextStyleMixin = /** @class */function () {\n function TextStyleMixin() {}\n /**\n * Get color property or get color from option.textStyle.color\n */\n // TODO Callback\n TextStyleMixin.prototype.getTextColor = function (isEmphasis) {\n var ecModel = this.ecModel;\n return this.getShallow('color') || (!isEmphasis && ecModel ? ecModel.get(PATH_COLOR) : null);\n };\n /**\n * Create font string from fontStyle, fontWeight, fontSize, fontFamily\n * @return {string}\n */\n TextStyleMixin.prototype.getFont = function () {\n return getFont({\n fontStyle: this.getShallow('fontStyle'),\n fontWeight: this.getShallow('fontWeight'),\n fontSize: this.getShallow('fontSize'),\n fontFamily: this.getShallow('fontFamily')\n }, this.ecModel);\n };\n TextStyleMixin.prototype.getTextRect = function (text) {\n var style = {\n text: text,\n verticalAlign: this.getShallow('verticalAlign') || this.getShallow('baseline')\n };\n for (var i = 0; i < textStyleParams.length; i++) {\n style[textStyleParams[i]] = this.getShallow(textStyleParams[i]);\n }\n tmpText.useStyle(style);\n tmpText.update();\n return tmpText.getBoundingRect();\n };\n return TextStyleMixin;\n}();\n;\nexport default TextStyleMixin;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper.js';\nexport var LINE_STYLE_KEY_MAP = [['lineWidth', 'width'], ['stroke', 'color'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'type'], ['lineDashOffset', 'dashOffset'], ['lineCap', 'cap'], ['lineJoin', 'join'], ['miterLimit']\n// Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\n\nvar getLineStyle = makeStyleMapper(LINE_STYLE_KEY_MAP);\nvar LineStyleMixin = /** @class */function () {\n function LineStyleMixin() {}\n LineStyleMixin.prototype.getLineStyle = function (excludes) {\n return getLineStyle(this, excludes);\n };\n return LineStyleMixin;\n}();\n;\nexport { LineStyleMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport makeStyleMapper from './makeStyleMapper.js';\nexport var ITEM_STYLE_KEY_MAP = [['fill', 'color'], ['stroke', 'borderColor'], ['lineWidth', 'borderWidth'], ['opacity'], ['shadowBlur'], ['shadowOffsetX'], ['shadowOffsetY'], ['shadowColor'], ['lineDash', 'borderType'], ['lineDashOffset', 'borderDashOffset'], ['lineCap', 'borderCap'], ['lineJoin', 'borderJoin'], ['miterLimit', 'borderMiterLimit']\n// Option decal is in `DecalObject` but style.decal is in `PatternObject`.\n// So do not transfer decal directly.\n];\n\nvar getItemStyle = makeStyleMapper(ITEM_STYLE_KEY_MAP);\nvar ItemStyleMixin = /** @class */function () {\n function ItemStyleMixin() {}\n ItemStyleMixin.prototype.getItemStyle = function (excludes, includes) {\n return getItemStyle(this, excludes, includes);\n };\n return ItemStyleMixin;\n}();\nexport { ItemStyleMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport env from 'zrender/lib/core/env.js';\nimport { enableClassExtend, enableClassCheck } from '../util/clazz.js';\nimport { AreaStyleMixin } from './mixin/areaStyle.js';\nimport TextStyleMixin from './mixin/textStyle.js';\nimport { LineStyleMixin } from './mixin/lineStyle.js';\nimport { ItemStyleMixin } from './mixin/itemStyle.js';\nimport { mixin, clone, merge } from 'zrender/lib/core/util.js';\nvar Model = /** @class */function () {\n function Model(option, parentModel, ecModel) {\n this.parentModel = parentModel;\n this.ecModel = ecModel;\n this.option = option;\n // Simple optimization\n // if (this.init) {\n // if (arguments.length <= 4) {\n // this.init(option, parentModel, ecModel, extraOpt);\n // }\n // else {\n // this.init.apply(this, arguments);\n // }\n // }\n }\n\n Model.prototype.init = function (option, parentModel, ecModel) {\n var rest = [];\n for (var _i = 3; _i < arguments.length; _i++) {\n rest[_i - 3] = arguments[_i];\n }\n };\n /**\n * Merge the input option to me.\n */\n Model.prototype.mergeOption = function (option, ecModel) {\n merge(this.option, option, true);\n };\n // `path` can be 'a.b.c', so the return value type have to be `ModelOption`\n // TODO: TYPE strict key check?\n // get(path: string | string[], ignoreParent?: boolean): ModelOption;\n Model.prototype.get = function (path, ignoreParent) {\n if (path == null) {\n return this.option;\n }\n return this._doGet(this.parsePath(path), !ignoreParent && this.parentModel);\n };\n Model.prototype.getShallow = function (key, ignoreParent) {\n var option = this.option;\n var val = option == null ? option : option[key];\n if (val == null && !ignoreParent) {\n var parentModel = this.parentModel;\n if (parentModel) {\n // FIXME:TS do not know how to make it works\n val = parentModel.getShallow(key);\n }\n }\n return val;\n };\n // `path` can be 'a.b.c', so the return value type have to be `Model`\n // getModel(path: string | string[], parentModel?: Model): Model;\n // TODO 'a.b.c' is deprecated\n Model.prototype.getModel = function (path, parentModel) {\n var hasPath = path != null;\n var pathFinal = hasPath ? this.parsePath(path) : null;\n var obj = hasPath ? this._doGet(pathFinal) : this.option;\n parentModel = parentModel || this.parentModel && this.parentModel.getModel(this.resolveParentPath(pathFinal));\n return new Model(obj, parentModel, this.ecModel);\n };\n /**\n * If model has option\n */\n Model.prototype.isEmpty = function () {\n return this.option == null;\n };\n Model.prototype.restoreData = function () {};\n // Pending\n Model.prototype.clone = function () {\n var Ctor = this.constructor;\n return new Ctor(clone(this.option));\n };\n // setReadOnly(properties): void {\n // clazzUtil.setReadOnly(this, properties);\n // }\n // If path is null/undefined, return null/undefined.\n Model.prototype.parsePath = function (path) {\n if (typeof path === 'string') {\n return path.split('.');\n }\n return path;\n };\n // Resolve path for parent. Perhaps useful when parent use a different property.\n // Default to be a identity resolver.\n // Can be modified to a different resolver.\n Model.prototype.resolveParentPath = function (path) {\n return path;\n };\n // FIXME:TS check whether put this method here\n Model.prototype.isAnimationEnabled = function () {\n if (!env.node && this.option) {\n if (this.option.animation != null) {\n return !!this.option.animation;\n } else if (this.parentModel) {\n return this.parentModel.isAnimationEnabled();\n }\n }\n };\n Model.prototype._doGet = function (pathArr, parentModel) {\n var obj = this.option;\n if (!pathArr) {\n return obj;\n }\n for (var i = 0; i < pathArr.length; i++) {\n // Ignore empty\n if (!pathArr[i]) {\n continue;\n }\n // obj could be number/string/... (like 0)\n obj = obj && typeof obj === 'object' ? obj[pathArr[i]] : null;\n if (obj == null) {\n break;\n }\n }\n if (obj == null && parentModel) {\n obj = parentModel._doGet(this.resolveParentPath(pathArr), parentModel.parentModel);\n }\n return obj;\n };\n return Model;\n}();\n;\n// Enable Model.extend.\nenableClassExtend(Model);\nenableClassCheck(Model);\nmixin(Model, LineStyleMixin);\nmixin(Model, ItemStyleMixin);\nmixin(Model, AreaStyleMixin);\nmixin(Model, TextStyleMixin);\nexport default Model;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { parseClassType } from './clazz.js';\nimport { makePrintable } from './log.js';\n// A random offset\nvar base = Math.round(Math.random() * 10);\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\nexport function getUID(type) {\n // Considering the case of crossing js context,\n // use Math.random to make id as unique as possible.\n return [type || '', base++].join('_');\n}\n/**\n * Implements `SubTypeDefaulterManager` for `target`.\n */\nexport function enableSubTypeDefaulter(target) {\n var subTypeDefaulters = {};\n target.registerSubTypeDefaulter = function (componentType, defaulter) {\n var componentTypeInfo = parseClassType(componentType);\n subTypeDefaulters[componentTypeInfo.main] = defaulter;\n };\n target.determineSubType = function (componentType, option) {\n var type = option.type;\n if (!type) {\n var componentTypeMain = parseClassType(componentType).main;\n if (target.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n type = subTypeDefaulters[componentTypeMain](option);\n }\n }\n return type;\n };\n}\n/**\n * Implements `TopologicalTravelable` for `entity`.\n *\n * Topological travel on Activity Network (Activity On Vertices).\n * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].\n * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.\n * If there is circular dependencey, Error will be thrown.\n */\nexport function enableTopologicalTravel(entity, dependencyGetter) {\n /**\n * @param targetNameList Target Component type list.\n * Can be ['aa', 'bb', 'aa.xx']\n * @param fullNameList By which we can build dependency graph.\n * @param callback Params: componentType, dependencies.\n * @param context Scope of callback.\n */\n entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {\n if (!targetNameList.length) {\n return;\n }\n var result = makeDepndencyGraph(fullNameList);\n var graph = result.graph;\n var noEntryList = result.noEntryList;\n var targetNameSet = {};\n zrUtil.each(targetNameList, function (name) {\n targetNameSet[name] = true;\n });\n while (noEntryList.length) {\n var currComponentType = noEntryList.pop();\n var currVertex = graph[currComponentType];\n var isInTargetNameSet = !!targetNameSet[currComponentType];\n if (isInTargetNameSet) {\n callback.call(context, currComponentType, currVertex.originalDeps.slice());\n delete targetNameSet[currComponentType];\n }\n zrUtil.each(currVertex.successor, isInTargetNameSet ? removeEdgeAndAdd : removeEdge);\n }\n zrUtil.each(targetNameSet, function () {\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n errMsg = makePrintable('Circular dependency may exists: ', targetNameSet, targetNameList, fullNameList);\n }\n throw new Error(errMsg);\n });\n function removeEdge(succComponentType) {\n graph[succComponentType].entryCount--;\n if (graph[succComponentType].entryCount === 0) {\n noEntryList.push(succComponentType);\n }\n }\n // Consider this case: legend depends on series, and we call\n // chart.setOption({series: [...]}), where only series is in option.\n // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will\n // not be called, but only sereis.mergeOption is called. Thus legend\n // have no chance to update its local record about series (like which\n // name of series is available in legend).\n function removeEdgeAndAdd(succComponentType) {\n targetNameSet[succComponentType] = true;\n removeEdge(succComponentType);\n }\n };\n function makeDepndencyGraph(fullNameList) {\n var graph = {};\n var noEntryList = [];\n zrUtil.each(fullNameList, function (name) {\n var thisItem = createDependencyGraphItem(graph, name);\n var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n thisItem.entryCount = availableDeps.length;\n if (thisItem.entryCount === 0) {\n noEntryList.push(name);\n }\n zrUtil.each(availableDeps, function (dependentName) {\n if (zrUtil.indexOf(thisItem.predecessor, dependentName) < 0) {\n thisItem.predecessor.push(dependentName);\n }\n var thatItem = createDependencyGraphItem(graph, dependentName);\n if (zrUtil.indexOf(thatItem.successor, dependentName) < 0) {\n thatItem.successor.push(name);\n }\n });\n });\n return {\n graph: graph,\n noEntryList: noEntryList\n };\n }\n function createDependencyGraphItem(graph, name) {\n if (!graph[name]) {\n graph[name] = {\n predecessor: [],\n successor: []\n };\n }\n return graph[name];\n }\n function getAvailableDependencies(originalDeps, fullNameList) {\n var availableDeps = [];\n zrUtil.each(originalDeps, function (dep) {\n zrUtil.indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);\n });\n return availableDeps;\n }\n}\nexport function inheritDefaultOption(superOption, subOption) {\n // See also `model/Component.ts#getDefaultOption`\n return zrUtil.merge(zrUtil.merge({}, superOption, true), subOption, true);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\n/**\n * Language: English.\n */\nexport default {\n time: {\n month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthAbbr: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n dayOfWeek: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayOfWeekAbbr: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']\n },\n legend: {\n selector: {\n all: 'All',\n inverse: 'Inv'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: 'Box Select',\n polygon: 'Lasso Select',\n lineX: 'Horizontally Select',\n lineY: 'Vertically Select',\n keep: 'Keep Selections',\n clear: 'Clear Selections'\n }\n },\n dataView: {\n title: 'Data View',\n lang: ['Data View', 'Close', 'Refresh']\n },\n dataZoom: {\n title: {\n zoom: 'Zoom',\n back: 'Zoom Reset'\n }\n },\n magicType: {\n title: {\n line: 'Switch to Line Chart',\n bar: 'Switch to Bar Chart',\n stack: 'Stack',\n tiled: 'Tile'\n }\n },\n restore: {\n title: 'Restore'\n },\n saveAsImage: {\n title: 'Save as Image',\n lang: ['Right Click to Save Image']\n }\n },\n series: {\n typeNames: {\n pie: 'Pie chart',\n bar: 'Bar chart',\n line: 'Line chart',\n scatter: 'Scatter plot',\n effectScatter: 'Ripple scatter plot',\n radar: 'Radar chart',\n tree: 'Tree',\n treemap: 'Treemap',\n boxplot: 'Boxplot',\n candlestick: 'Candlestick',\n k: 'K line chart',\n heatmap: 'Heat map',\n map: 'Map',\n parallel: 'Parallel coordinate map',\n lines: 'Line graph',\n graph: 'Relationship graph',\n sankey: 'Sankey diagram',\n funnel: 'Funnel chart',\n gauge: 'Gauge',\n pictorialBar: 'Pictorial bar',\n themeRiver: 'Theme River Map',\n sunburst: 'Sunburst',\n custom: 'Custom chart',\n chart: 'Chart'\n }\n },\n aria: {\n general: {\n withTitle: 'This is a chart about \"{title}\"',\n withoutTitle: 'This is a chart'\n },\n series: {\n single: {\n prefix: '',\n withName: ' with type {seriesType} named {seriesName}.',\n withoutName: ' with type {seriesType}.'\n },\n multiple: {\n prefix: '. It consists of {seriesCount} series count.',\n withName: ' The {seriesId} series is a {seriesType} representing {seriesName}.',\n withoutName: ' The {seriesId} series is a {seriesType}.',\n separator: {\n middle: '',\n end: ''\n }\n }\n },\n data: {\n allData: 'The data is as follows: ',\n partialData: 'The first {displayCnt} items are: ',\n withName: 'the data for {name} is {value}',\n withoutName: '{value}',\n separator: {\n middle: ', ',\n end: '. '\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n * Licensed to the Apache Software Foundation (ASF) under one\n * or more contributor license agreements. See the NOTICE file\n * distributed with this work for additional information\n * regarding copyright ownership. The ASF licenses this file\n * to you under the Apache License, Version 2.0 (the\n * \"License\"); you may not use this file except in compliance\n * with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n * KIND, either express or implied. See the License for the\n * specific language governing permissions and limitations\n * under the License.\n */\nexport default {\n time: {\n month: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\n monthAbbr: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],\n dayOfWeek: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\n dayOfWeekAbbr: ['日', '一', '二', '三', '四', '五', '六']\n },\n legend: {\n selector: {\n all: '全选',\n inverse: '反选'\n }\n },\n toolbox: {\n brush: {\n title: {\n rect: '矩形选择',\n polygon: '圈选',\n lineX: '横向选择',\n lineY: '纵向选择',\n keep: '保持选择',\n clear: '清除选择'\n }\n },\n dataView: {\n title: '数据视图',\n lang: ['数据视图', '关闭', '刷新']\n },\n dataZoom: {\n title: {\n zoom: '区域缩放',\n back: '区域缩放还原'\n }\n },\n magicType: {\n title: {\n line: '切换为折线图',\n bar: '切换为柱状图',\n stack: '切换为堆叠',\n tiled: '切换为平铺'\n }\n },\n restore: {\n title: '还原'\n },\n saveAsImage: {\n title: '保存为图片',\n lang: ['右键另存为图片']\n }\n },\n series: {\n typeNames: {\n pie: '饼图',\n bar: '柱状图',\n line: '折线图',\n scatter: '散点图',\n effectScatter: '涟漪散点图',\n radar: '雷达图',\n tree: '树图',\n treemap: '矩形树图',\n boxplot: '箱型图',\n candlestick: 'K线图',\n k: 'K线图',\n heatmap: '热力图',\n map: '地图',\n parallel: '平行坐标图',\n lines: '线图',\n graph: '关系图',\n sankey: '桑基图',\n funnel: '漏斗图',\n gauge: '仪表盘图',\n pictorialBar: '象形柱图',\n themeRiver: '主题河流图',\n sunburst: '旭日图',\n custom: '自定义图表',\n chart: '图表'\n }\n },\n aria: {\n general: {\n withTitle: '这是一个关于“{title}”的图表。',\n withoutTitle: '这是一个图表,'\n },\n series: {\n single: {\n prefix: '',\n withName: '图表类型是{seriesType},表示{seriesName}。',\n withoutName: '图表类型是{seriesType}。'\n },\n multiple: {\n prefix: '它由{seriesCount}个图表系列组成。',\n withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType},',\n withoutName: '第{seriesId}个系列是一个{seriesType},',\n separator: {\n middle: ';',\n end: '。'\n }\n }\n },\n data: {\n allData: '其数据是——',\n partialData: '其中,前{displayCnt}项是——',\n withName: '{name}的数据是{value}',\n withoutName: '{value}',\n separator: {\n middle: ',',\n end: ''\n }\n }\n }\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport Model from '../model/Model.js';\nimport env from 'zrender/lib/core/env.js';\n// default import ZH and EN lang\nimport langEN from '../i18n/langEN.js';\nimport langZH from '../i18n/langZH.js';\nimport { isString, clone, merge } from 'zrender/lib/core/util.js';\nvar LOCALE_ZH = 'ZH';\nvar LOCALE_EN = 'EN';\nvar DEFAULT_LOCALE = LOCALE_EN;\nvar localeStorage = {};\nvar localeModels = {};\nexport var SYSTEM_LANG = !env.domSupported ? DEFAULT_LOCALE : function () {\n var langStr = ( /* eslint-disable-next-line */\n document.documentElement.lang || navigator.language || navigator.browserLanguage || DEFAULT_LOCALE).toUpperCase();\n return langStr.indexOf(LOCALE_ZH) > -1 ? LOCALE_ZH : DEFAULT_LOCALE;\n}();\nexport function registerLocale(locale, localeObj) {\n locale = locale.toUpperCase();\n localeModels[locale] = new Model(localeObj);\n localeStorage[locale] = localeObj;\n}\n// export function getLocale(locale: string) {\n// return localeStorage[locale];\n// }\nexport function createLocaleObject(locale) {\n if (isString(locale)) {\n var localeObj = localeStorage[locale.toUpperCase()] || {};\n if (locale === LOCALE_ZH || locale === LOCALE_EN) {\n return clone(localeObj);\n } else {\n return merge(clone(localeObj), clone(localeStorage[DEFAULT_LOCALE]), false);\n }\n } else {\n return merge(clone(locale), clone(localeStorage[DEFAULT_LOCALE]), false);\n }\n}\nexport function getLocaleModel(lang) {\n return localeModels[lang];\n}\nexport function getDefaultLocaleModel() {\n return localeModels[DEFAULT_LOCALE];\n}\n// Default locale\nregisterLocale(LOCALE_EN, langEN);\nregisterLocale(LOCALE_ZH, langZH);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as numberUtil from './number.js';\nimport { getDefaultLocaleModel, getLocaleModel, SYSTEM_LANG } from '../core/locale.js';\nimport Model from '../model/Model.js';\nexport var ONE_SECOND = 1000;\nexport var ONE_MINUTE = ONE_SECOND * 60;\nexport var ONE_HOUR = ONE_MINUTE * 60;\nexport var ONE_DAY = ONE_HOUR * 24;\nexport var ONE_YEAR = ONE_DAY * 365;\nexport var defaultLeveledFormatter = {\n year: '{yyyy}',\n month: '{MMM}',\n day: '{d}',\n hour: '{HH}:{mm}',\n minute: '{HH}:{mm}',\n second: '{HH}:{mm}:{ss}',\n millisecond: '{HH}:{mm}:{ss} {SSS}',\n none: '{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}'\n};\nvar fullDayFormatter = '{yyyy}-{MM}-{dd}';\nexport var fullLeveledFormatter = {\n year: '{yyyy}',\n month: '{yyyy}-{MM}',\n day: fullDayFormatter,\n hour: fullDayFormatter + ' ' + defaultLeveledFormatter.hour,\n minute: fullDayFormatter + ' ' + defaultLeveledFormatter.minute,\n second: fullDayFormatter + ' ' + defaultLeveledFormatter.second,\n millisecond: defaultLeveledFormatter.none\n};\nexport var primaryTimeUnits = ['year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'];\nexport var timeUnits = ['year', 'half-year', 'quarter', 'month', 'week', 'half-week', 'day', 'half-day', 'quarter-day', 'hour', 'minute', 'second', 'millisecond'];\nexport function pad(str, len) {\n str += '';\n return '0000'.substr(0, len - str.length) + str;\n}\nexport function getPrimaryTimeUnit(timeUnit) {\n switch (timeUnit) {\n case 'half-year':\n case 'quarter':\n return 'month';\n case 'week':\n case 'half-week':\n return 'day';\n case 'half-day':\n case 'quarter-day':\n return 'hour';\n default:\n // year, minutes, second, milliseconds\n return timeUnit;\n }\n}\nexport function isPrimaryTimeUnit(timeUnit) {\n return timeUnit === getPrimaryTimeUnit(timeUnit);\n}\nexport function getDefaultFormatPrecisionOfInterval(timeUnit) {\n switch (timeUnit) {\n case 'year':\n case 'month':\n return 'day';\n case 'millisecond':\n return 'millisecond';\n default:\n // Also for day, hour, minute, second\n return 'second';\n }\n}\nexport function format(\n// Note: The result based on `isUTC` are totally different, which can not be just simply\n// substituted by the result without `isUTC`. So we make the param `isUTC` mandatory.\ntime, template, isUTC, lang) {\n var date = numberUtil.parseDate(time);\n var y = date[fullYearGetterName(isUTC)]();\n var M = date[monthGetterName(isUTC)]() + 1;\n var q = Math.floor((M - 1) / 3) + 1;\n var d = date[dateGetterName(isUTC)]();\n var e = date['get' + (isUTC ? 'UTC' : '') + 'Day']();\n var H = date[hoursGetterName(isUTC)]();\n var h = (H - 1) % 12 + 1;\n var m = date[minutesGetterName(isUTC)]();\n var s = date[secondsGetterName(isUTC)]();\n var S = date[millisecondsGetterName(isUTC)]();\n var localeModel = lang instanceof Model ? lang : getLocaleModel(lang || SYSTEM_LANG) || getDefaultLocaleModel();\n var timeModel = localeModel.getModel('time');\n var month = timeModel.get('month');\n var monthAbbr = timeModel.get('monthAbbr');\n var dayOfWeek = timeModel.get('dayOfWeek');\n var dayOfWeekAbbr = timeModel.get('dayOfWeekAbbr');\n return (template || '').replace(/{yyyy}/g, y + '').replace(/{yy}/g, pad(y % 100 + '', 2)).replace(/{Q}/g, q + '').replace(/{MMMM}/g, month[M - 1]).replace(/{MMM}/g, monthAbbr[M - 1]).replace(/{MM}/g, pad(M, 2)).replace(/{M}/g, M + '').replace(/{dd}/g, pad(d, 2)).replace(/{d}/g, d + '').replace(/{eeee}/g, dayOfWeek[e]).replace(/{ee}/g, dayOfWeekAbbr[e]).replace(/{e}/g, e + '').replace(/{HH}/g, pad(H, 2)).replace(/{H}/g, H + '').replace(/{hh}/g, pad(h + '', 2)).replace(/{h}/g, h + '').replace(/{mm}/g, pad(m, 2)).replace(/{m}/g, m + '').replace(/{ss}/g, pad(s, 2)).replace(/{s}/g, s + '').replace(/{SSS}/g, pad(S, 3)).replace(/{S}/g, S + '');\n}\nexport function leveledFormat(tick, idx, formatter, lang, isUTC) {\n var template = null;\n if (zrUtil.isString(formatter)) {\n // Single formatter for all units at all levels\n template = formatter;\n } else if (zrUtil.isFunction(formatter)) {\n // Callback formatter\n template = formatter(tick.value, idx, {\n level: tick.level\n });\n } else {\n var defaults = zrUtil.extend({}, defaultLeveledFormatter);\n if (tick.level > 0) {\n for (var i = 0; i < primaryTimeUnits.length; ++i) {\n defaults[primaryTimeUnits[i]] = \"{primary|\" + defaults[primaryTimeUnits[i]] + \"}\";\n }\n }\n var mergedFormatter = formatter ? formatter.inherit === false ? formatter // Use formatter with bigger units\n : zrUtil.defaults(formatter, defaults) : defaults;\n var unit = getUnitFromValue(tick.value, isUTC);\n if (mergedFormatter[unit]) {\n template = mergedFormatter[unit];\n } else if (mergedFormatter.inherit) {\n // Unit formatter is not defined and should inherit from bigger units\n var targetId = timeUnits.indexOf(unit);\n for (var i = targetId - 1; i >= 0; --i) {\n if (mergedFormatter[unit]) {\n template = mergedFormatter[unit];\n break;\n }\n }\n template = template || defaults.none;\n }\n if (zrUtil.isArray(template)) {\n var levelId = tick.level == null ? 0 : tick.level >= 0 ? tick.level : template.length + tick.level;\n levelId = Math.min(levelId, template.length - 1);\n template = template[levelId];\n }\n }\n return format(new Date(tick.value), template, isUTC, lang);\n}\nexport function getUnitFromValue(value, isUTC) {\n var date = numberUtil.parseDate(value);\n var M = date[monthGetterName(isUTC)]() + 1;\n var d = date[dateGetterName(isUTC)]();\n var h = date[hoursGetterName(isUTC)]();\n var m = date[minutesGetterName(isUTC)]();\n var s = date[secondsGetterName(isUTC)]();\n var S = date[millisecondsGetterName(isUTC)]();\n var isSecond = S === 0;\n var isMinute = isSecond && s === 0;\n var isHour = isMinute && m === 0;\n var isDay = isHour && h === 0;\n var isMonth = isDay && d === 1;\n var isYear = isMonth && M === 1;\n if (isYear) {\n return 'year';\n } else if (isMonth) {\n return 'month';\n } else if (isDay) {\n return 'day';\n } else if (isHour) {\n return 'hour';\n } else if (isMinute) {\n return 'minute';\n } else if (isSecond) {\n return 'second';\n } else {\n return 'millisecond';\n }\n}\nexport function getUnitValue(value, unit, isUTC) {\n var date = zrUtil.isNumber(value) ? numberUtil.parseDate(value) : value;\n unit = unit || getUnitFromValue(value, isUTC);\n switch (unit) {\n case 'year':\n return date[fullYearGetterName(isUTC)]();\n case 'half-year':\n return date[monthGetterName(isUTC)]() >= 6 ? 1 : 0;\n case 'quarter':\n return Math.floor((date[monthGetterName(isUTC)]() + 1) / 4);\n case 'month':\n return date[monthGetterName(isUTC)]();\n case 'day':\n return date[dateGetterName(isUTC)]();\n case 'half-day':\n return date[hoursGetterName(isUTC)]() / 24;\n case 'hour':\n return date[hoursGetterName(isUTC)]();\n case 'minute':\n return date[minutesGetterName(isUTC)]();\n case 'second':\n return date[secondsGetterName(isUTC)]();\n case 'millisecond':\n return date[millisecondsGetterName(isUTC)]();\n }\n}\nexport function fullYearGetterName(isUTC) {\n return isUTC ? 'getUTCFullYear' : 'getFullYear';\n}\nexport function monthGetterName(isUTC) {\n return isUTC ? 'getUTCMonth' : 'getMonth';\n}\nexport function dateGetterName(isUTC) {\n return isUTC ? 'getUTCDate' : 'getDate';\n}\nexport function hoursGetterName(isUTC) {\n return isUTC ? 'getUTCHours' : 'getHours';\n}\nexport function minutesGetterName(isUTC) {\n return isUTC ? 'getUTCMinutes' : 'getMinutes';\n}\nexport function secondsGetterName(isUTC) {\n return isUTC ? 'getUTCSeconds' : 'getSeconds';\n}\nexport function millisecondsGetterName(isUTC) {\n return isUTC ? 'getUTCMilliseconds' : 'getMilliseconds';\n}\nexport function fullYearSetterName(isUTC) {\n return isUTC ? 'setUTCFullYear' : 'setFullYear';\n}\nexport function monthSetterName(isUTC) {\n return isUTC ? 'setUTCMonth' : 'setMonth';\n}\nexport function dateSetterName(isUTC) {\n return isUTC ? 'setUTCDate' : 'setDate';\n}\nexport function hoursSetterName(isUTC) {\n return isUTC ? 'setUTCHours' : 'setHours';\n}\nexport function minutesSetterName(isUTC) {\n return isUTC ? 'setUTCMinutes' : 'setMinutes';\n}\nexport function secondsSetterName(isUTC) {\n return isUTC ? 'setUTCSeconds' : 'setSeconds';\n}\nexport function millisecondsSetterName(isUTC) {\n return isUTC ? 'setUTCMilliseconds' : 'setMilliseconds';\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { encodeHTML } from 'zrender/lib/core/dom.js';\nimport { parseDate, isNumeric, numericToNumber } from './number.js';\nimport { format as timeFormat, pad } from './time.js';\nimport { deprecateReplaceLog } from './log.js';\n/**\n * Add a comma each three digit.\n */\nexport function addCommas(x) {\n if (!isNumeric(x)) {\n return zrUtil.isString(x) ? x : '-';\n }\n var parts = (x + '').split('.');\n return parts[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,') + (parts.length > 1 ? '.' + parts[1] : '');\n}\nexport function toCamelCase(str, upperCaseFirst) {\n str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {\n return group1.toUpperCase();\n });\n if (upperCaseFirst && str) {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n }\n return str;\n}\nexport var normalizeCssArray = zrUtil.normalizeCssArray;\nexport { encodeHTML };\n/**\n * Make value user readable for tooltip and label.\n * \"User readable\":\n * Try to not print programmer-specific text like NaN, Infinity, null, undefined.\n * Avoid to display an empty string, which users can not recognize there is\n * a value and it might look like a bug.\n */\nexport function makeValueReadable(value, valueType, useUTC) {\n var USER_READABLE_DEFUALT_TIME_PATTERN = '{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}';\n function stringToUserReadable(str) {\n return str && zrUtil.trim(str) ? str : '-';\n }\n function isNumberUserReadable(num) {\n return !!(num != null && !isNaN(num) && isFinite(num));\n }\n var isTypeTime = valueType === 'time';\n var isValueDate = value instanceof Date;\n if (isTypeTime || isValueDate) {\n var date = isTypeTime ? parseDate(value) : value;\n if (!isNaN(+date)) {\n return timeFormat(date, USER_READABLE_DEFUALT_TIME_PATTERN, useUTC);\n } else if (isValueDate) {\n return '-';\n }\n // In other cases, continue to try to display the value in the following code.\n }\n\n if (valueType === 'ordinal') {\n return zrUtil.isStringSafe(value) ? stringToUserReadable(value) : zrUtil.isNumber(value) ? isNumberUserReadable(value) ? value + '' : '-' : '-';\n }\n // By default.\n var numericResult = numericToNumber(value);\n return isNumberUserReadable(numericResult) ? addCommas(numericResult) : zrUtil.isStringSafe(value) ? stringToUserReadable(value) : typeof value === 'boolean' ? value + '' : '-';\n}\nvar TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];\nvar wrapVar = function (varName, seriesIdx) {\n return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';\n};\n/**\n * Template formatter\n * @param {Array.|Object} paramsList\n */\nexport function formatTpl(tpl, paramsList, encode) {\n if (!zrUtil.isArray(paramsList)) {\n paramsList = [paramsList];\n }\n var seriesLen = paramsList.length;\n if (!seriesLen) {\n return '';\n }\n var $vars = paramsList[0].$vars || [];\n for (var i = 0; i < $vars.length; i++) {\n var alias = TPL_VAR_ALIAS[i];\n tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));\n }\n for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {\n for (var k = 0; k < $vars.length; k++) {\n var val = paramsList[seriesIdx][$vars[k]];\n tpl = tpl.replace(wrapVar(TPL_VAR_ALIAS[k], seriesIdx), encode ? encodeHTML(val) : val);\n }\n }\n return tpl;\n}\n/**\n * simple Template formatter\n */\nexport function formatTplSimple(tpl, param, encode) {\n zrUtil.each(param, function (value, key) {\n tpl = tpl.replace('{' + key + '}', encode ? encodeHTML(value) : value);\n });\n return tpl;\n}\nexport function getTooltipMarker(inOpt, extraCssText) {\n var opt = zrUtil.isString(inOpt) ? {\n color: inOpt,\n extraCssText: extraCssText\n } : inOpt || {};\n var color = opt.color;\n var type = opt.type;\n extraCssText = opt.extraCssText;\n var renderMode = opt.renderMode || 'html';\n if (!color) {\n return '';\n }\n if (renderMode === 'html') {\n return type === 'subItem' ? '' : '';\n } else {\n // Should better not to auto generate style name by auto-increment number here.\n // Because this util is usually called in tooltip formatter, which is probably\n // called repeatedly when mouse move and the auto-increment number increases fast.\n // Users can make their own style name by theirselves, make it unique and readable.\n var markerId = opt.markerId || 'markerX';\n return {\n renderMode: renderMode,\n content: '{' + markerId + '|} ',\n style: type === 'subItem' ? {\n width: 4,\n height: 4,\n borderRadius: 2,\n backgroundColor: color\n } : {\n width: 10,\n height: 10,\n borderRadius: 5,\n backgroundColor: color\n }\n };\n }\n}\n/**\n * @deprecated Use `time/format` instead.\n * ISO Date format\n * @param {string} tpl\n * @param {number} value\n * @param {boolean} [isUTC=false] Default in local time.\n * see `module:echarts/scale/Time`\n * and `module:echarts/util/number#parseDate`.\n * @inner\n */\nexport function formatTime(tpl, value, isUTC) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('echarts.format.formatTime', 'echarts.time.format');\n }\n if (tpl === 'week' || tpl === 'month' || tpl === 'quarter' || tpl === 'half-year' || tpl === 'year') {\n tpl = 'MM-dd\\nyyyy';\n }\n var date = parseDate(value);\n var getUTC = isUTC ? 'getUTC' : 'get';\n var y = date[getUTC + 'FullYear']();\n var M = date[getUTC + 'Month']() + 1;\n var d = date[getUTC + 'Date']();\n var h = date[getUTC + 'Hours']();\n var m = date[getUTC + 'Minutes']();\n var s = date[getUTC + 'Seconds']();\n var S = date[getUTC + 'Milliseconds']();\n tpl = tpl.replace('MM', pad(M, 2)).replace('M', M).replace('yyyy', y).replace('yy', pad(y % 100 + '', 2)).replace('dd', pad(d, 2)).replace('d', d).replace('hh', pad(h, 2)).replace('h', h).replace('mm', pad(m, 2)).replace('m', m).replace('ss', pad(s, 2)).replace('s', s).replace('SSS', pad(S, 3));\n return tpl;\n}\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\nexport function capitalFirst(str) {\n return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n/**\n * @return Never be null/undefined.\n */\nexport function convertToColorString(color, defaultColor) {\n defaultColor = defaultColor || 'transparent';\n return zrUtil.isString(color) ? color : zrUtil.isObject(color) ? color.colorStops && (color.colorStops[0] || {}).color || defaultColor : defaultColor;\n}\nexport { truncateText } from 'zrender/lib/graphic/helper/parseText.js';\n/**\n * open new tab\n * @param link url\n * @param target blank or self\n */\nexport function windowOpen(link, target) {\n /* global window */\n if (target === '_blank' || target === 'blank') {\n var blank = window.open();\n blank.opener = null;\n blank.location.href = link;\n } else {\n window.open(link, target);\n }\n}\nexport { getTextRect } from '../legacy/getTextRect.js';","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Layout helpers for each component positioning\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { parsePercent } from './number.js';\nimport * as formatUtil from './format.js';\nvar each = zrUtil.each;\n/**\n * @public\n */\nexport var LOCATION_PARAMS = ['left', 'right', 'top', 'bottom', 'width', 'height'];\n/**\n * @public\n */\nexport var HV_NAMES = [['width', 'left', 'right'], ['height', 'top', 'bottom']];\nfunction boxLayout(orient, group, gap, maxWidth, maxHeight) {\n var x = 0;\n var y = 0;\n if (maxWidth == null) {\n maxWidth = Infinity;\n }\n if (maxHeight == null) {\n maxHeight = Infinity;\n }\n var currentLineMaxSize = 0;\n group.eachChild(function (child, idx) {\n var rect = child.getBoundingRect();\n var nextChild = group.childAt(idx + 1);\n var nextChildRect = nextChild && nextChild.getBoundingRect();\n var nextX;\n var nextY;\n if (orient === 'horizontal') {\n var moveX = rect.width + (nextChildRect ? -nextChildRect.x + rect.x : 0);\n nextX = x + moveX;\n // Wrap when width exceeds maxWidth or meet a `newline` group\n // FIXME compare before adding gap?\n if (nextX > maxWidth || child.newline) {\n x = 0;\n nextX = moveX;\n y += currentLineMaxSize + gap;\n currentLineMaxSize = rect.height;\n } else {\n // FIXME: consider rect.y is not `0`?\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n }\n } else {\n var moveY = rect.height + (nextChildRect ? -nextChildRect.y + rect.y : 0);\n nextY = y + moveY;\n // Wrap when width exceeds maxHeight or meet a `newline` group\n if (nextY > maxHeight || child.newline) {\n x += currentLineMaxSize + gap;\n y = 0;\n nextY = moveY;\n currentLineMaxSize = rect.width;\n } else {\n currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);\n }\n }\n if (child.newline) {\n return;\n }\n child.x = x;\n child.y = y;\n child.markRedraw();\n orient === 'horizontal' ? x = nextX + gap : y = nextY + gap;\n });\n}\n/**\n * VBox or HBox layouting\n * @param {string} orient\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var box = boxLayout;\n/**\n * VBox layouting\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var vbox = zrUtil.curry(boxLayout, 'vertical');\n/**\n * HBox layouting\n * @param {module:zrender/graphic/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nexport var hbox = zrUtil.curry(boxLayout, 'horizontal');\n/**\n * If x or x2 is not specified or 'center' 'left' 'right',\n * the width would be as long as possible.\n * If y or y2 is not specified or 'middle' 'top' 'bottom',\n * the height would be as long as possible.\n */\nexport function getAvailableSize(positionInfo, containerRect, margin) {\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var x = parsePercent(positionInfo.left, containerWidth);\n var y = parsePercent(positionInfo.top, containerHeight);\n var x2 = parsePercent(positionInfo.right, containerWidth);\n var y2 = parsePercent(positionInfo.bottom, containerHeight);\n (isNaN(x) || isNaN(parseFloat(positionInfo.left))) && (x = 0);\n (isNaN(x2) || isNaN(parseFloat(positionInfo.right))) && (x2 = containerWidth);\n (isNaN(y) || isNaN(parseFloat(positionInfo.top))) && (y = 0);\n (isNaN(y2) || isNaN(parseFloat(positionInfo.bottom))) && (y2 = containerHeight);\n margin = formatUtil.normalizeCssArray(margin || 0);\n return {\n width: Math.max(x2 - x - margin[1] - margin[3], 0),\n height: Math.max(y2 - y - margin[0] - margin[2], 0)\n };\n}\n/**\n * Parse position info.\n */\nexport function getLayoutRect(positionInfo, containerRect, margin) {\n margin = formatUtil.normalizeCssArray(margin || 0);\n var containerWidth = containerRect.width;\n var containerHeight = containerRect.height;\n var left = parsePercent(positionInfo.left, containerWidth);\n var top = parsePercent(positionInfo.top, containerHeight);\n var right = parsePercent(positionInfo.right, containerWidth);\n var bottom = parsePercent(positionInfo.bottom, containerHeight);\n var width = parsePercent(positionInfo.width, containerWidth);\n var height = parsePercent(positionInfo.height, containerHeight);\n var verticalMargin = margin[2] + margin[0];\n var horizontalMargin = margin[1] + margin[3];\n var aspect = positionInfo.aspect;\n // If width is not specified, calculate width from left and right\n if (isNaN(width)) {\n width = containerWidth - right - horizontalMargin - left;\n }\n if (isNaN(height)) {\n height = containerHeight - bottom - verticalMargin - top;\n }\n if (aspect != null) {\n // If width and height are not given\n // 1. Graph should not exceeds the container\n // 2. Aspect must be keeped\n // 3. Graph should take the space as more as possible\n // FIXME\n // Margin is not considered, because there is no case that both\n // using margin and aspect so far.\n if (isNaN(width) && isNaN(height)) {\n if (aspect > containerWidth / containerHeight) {\n width = containerWidth * 0.8;\n } else {\n height = containerHeight * 0.8;\n }\n }\n // Calculate width or height with given aspect\n if (isNaN(width)) {\n width = aspect * height;\n }\n if (isNaN(height)) {\n height = width / aspect;\n }\n }\n // If left is not specified, calculate left from right and width\n if (isNaN(left)) {\n left = containerWidth - right - width - horizontalMargin;\n }\n if (isNaN(top)) {\n top = containerHeight - bottom - height - verticalMargin;\n }\n // Align left and top\n switch (positionInfo.left || positionInfo.right) {\n case 'center':\n left = containerWidth / 2 - width / 2 - margin[3];\n break;\n case 'right':\n left = containerWidth - width - horizontalMargin;\n break;\n }\n switch (positionInfo.top || positionInfo.bottom) {\n case 'middle':\n case 'center':\n top = containerHeight / 2 - height / 2 - margin[0];\n break;\n case 'bottom':\n top = containerHeight - height - verticalMargin;\n break;\n }\n // If something is wrong and left, top, width, height are calculated as NaN\n left = left || 0;\n top = top || 0;\n if (isNaN(width)) {\n // Width may be NaN if only one value is given except width\n width = containerWidth - horizontalMargin - left - (right || 0);\n }\n if (isNaN(height)) {\n // Height may be NaN if only one value is given except height\n height = containerHeight - verticalMargin - top - (bottom || 0);\n }\n var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);\n rect.margin = margin;\n return rect;\n}\n/**\n * Position a zr element in viewport\n * Group position is specified by either\n * {left, top}, {right, bottom}\n * If all properties exists, right and bottom will be igonred.\n *\n * Logic:\n * 1. Scale (against origin point in parent coord)\n * 2. Rotate (against origin point in parent coord)\n * 3. Translate (with el.position by this method)\n * So this method only fixes the last step 'Translate', which does not affect\n * scaling and rotating.\n *\n * If be called repeatedly with the same input el, the same result will be gotten.\n *\n * Return true if the layout happened.\n *\n * @param el Should have `getBoundingRect` method.\n * @param positionInfo\n * @param positionInfo.left\n * @param positionInfo.top\n * @param positionInfo.right\n * @param positionInfo.bottom\n * @param positionInfo.width Only for opt.boundingModel: 'raw'\n * @param positionInfo.height Only for opt.boundingModel: 'raw'\n * @param containerRect\n * @param margin\n * @param opt\n * @param opt.hv Only horizontal or only vertical. Default to be [1, 1]\n * @param opt.boundingMode\n * Specify how to calculate boundingRect when locating.\n * 'all': Position the boundingRect that is transformed and uioned\n * both itself and its descendants.\n * This mode simplies confine the elements in the bounding\n * of their container (e.g., using 'right: 0').\n * 'raw': Position the boundingRect that is not transformed and only itself.\n * This mode is useful when you want a element can overflow its\n * container. (Consider a rotated circle needs to be located in a corner.)\n * In this mode positionInfo.width/height can only be number.\n */\nexport function positionElement(el, positionInfo, containerRect, margin, opt, out) {\n var h = !opt || !opt.hv || opt.hv[0];\n var v = !opt || !opt.hv || opt.hv[1];\n var boundingMode = opt && opt.boundingMode || 'all';\n out = out || el;\n out.x = el.x;\n out.y = el.y;\n if (!h && !v) {\n return false;\n }\n var rect;\n if (boundingMode === 'raw') {\n rect = el.type === 'group' ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0) : el.getBoundingRect();\n } else {\n rect = el.getBoundingRect();\n if (el.needLocalTransform()) {\n var transform = el.getLocalTransform();\n // Notice: raw rect may be inner object of el,\n // which should not be modified.\n rect = rect.clone();\n rect.applyTransform(transform);\n }\n }\n // The real width and height can not be specified but calculated by the given el.\n var layoutRect = getLayoutRect(zrUtil.defaults({\n width: rect.width,\n height: rect.height\n }, positionInfo), containerRect, margin);\n // Because 'tranlate' is the last step in transform\n // (see zrender/core/Transformable#getLocalTransform),\n // we can just only modify el.position to get final result.\n var dx = h ? layoutRect.x - rect.x : 0;\n var dy = v ? layoutRect.y - rect.y : 0;\n if (boundingMode === 'raw') {\n out.x = dx;\n out.y = dy;\n } else {\n out.x += dx;\n out.y += dy;\n }\n if (out === el) {\n el.markRedraw();\n }\n return true;\n}\n/**\n * @param option Contains some of the properties in HV_NAMES.\n * @param hvIdx 0: horizontal; 1: vertical.\n */\nexport function sizeCalculable(option, hvIdx) {\n return option[HV_NAMES[hvIdx][0]] != null || option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null;\n}\nexport function fetchLayoutMode(ins) {\n var layoutMode = ins.layoutMode || ins.constructor.layoutMode;\n return zrUtil.isObject(layoutMode) ? layoutMode : layoutMode ? {\n type: layoutMode\n } : null;\n}\n/**\n * Consider Case:\n * When default option has {left: 0, width: 100}, and we set {right: 0}\n * through setOption or media query, using normal zrUtil.merge will cause\n * {right: 0} does not take effect.\n *\n * @example\n * ComponentModel.extend({\n * init: function () {\n * ...\n * let inputPositionParams = layout.getLayoutParams(option);\n * this.mergeOption(inputPositionParams);\n * },\n * mergeOption: function (newOption) {\n * newOption && zrUtil.merge(thisOption, newOption, true);\n * layout.mergeLayoutParam(thisOption, newOption);\n * }\n * });\n *\n * @param targetOption\n * @param newOption\n * @param opt\n */\nexport function mergeLayoutParam(targetOption, newOption, opt) {\n var ignoreSize = opt && opt.ignoreSize;\n !zrUtil.isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n var hResult = merge(HV_NAMES[0], 0);\n var vResult = merge(HV_NAMES[1], 1);\n copy(HV_NAMES[0], targetOption, hResult);\n copy(HV_NAMES[1], targetOption, vResult);\n function merge(names, hvIdx) {\n var newParams = {};\n var newValueCount = 0;\n var merged = {};\n var mergedValueCount = 0;\n var enoughParamNumber = 2;\n each(names, function (name) {\n merged[name] = targetOption[name];\n });\n each(names, function (name) {\n // Consider case: newOption.width is null, which is\n // set by user for removing width setting.\n hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);\n hasValue(newParams, name) && newValueCount++;\n hasValue(merged, name) && mergedValueCount++;\n });\n if (ignoreSize[hvIdx]) {\n // Only one of left/right is premitted to exist.\n if (hasValue(newOption, names[1])) {\n merged[names[2]] = null;\n } else if (hasValue(newOption, names[2])) {\n merged[names[1]] = null;\n }\n return merged;\n }\n // Case: newOption: {width: ..., right: ...},\n // or targetOption: {right: ...} and newOption: {width: ...},\n // There is no conflict when merged only has params count\n // little than enoughParamNumber.\n if (mergedValueCount === enoughParamNumber || !newValueCount) {\n return merged;\n }\n // Case: newOption: {width: ..., right: ...},\n // Than we can make sure user only want those two, and ignore\n // all origin params in targetOption.\n else if (newValueCount >= enoughParamNumber) {\n return newParams;\n } else {\n // Chose another param from targetOption by priority.\n for (var i = 0; i < names.length; i++) {\n var name_1 = names[i];\n if (!hasProp(newParams, name_1) && hasProp(targetOption, name_1)) {\n newParams[name_1] = targetOption[name_1];\n break;\n }\n }\n return newParams;\n }\n }\n function hasProp(obj, name) {\n return obj.hasOwnProperty(name);\n }\n function hasValue(obj, name) {\n return obj[name] != null && obj[name] !== 'auto';\n }\n function copy(names, target, source) {\n each(names, function (name) {\n target[name] = source[name];\n });\n }\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n */\nexport function getLayoutParams(source) {\n return copyLayoutParams({}, source);\n}\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\nexport function copyLayoutParams(target, source) {\n source && target && each(LOCATION_PARAMS, function (name) {\n source.hasOwnProperty(name) && (target[name] = source[name]);\n });\n return target;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Model from './Model.js';\nimport * as componentUtil from '../util/component.js';\nimport { enableClassManagement, parseClassType, isExtendedClass, mountExtend } from '../util/clazz.js';\nimport { makeInner, queryReferringComponents } from '../util/model.js';\nimport * as layout from '../util/layout.js';\nvar inner = makeInner();\nvar ComponentModel = /** @class */function (_super) {\n __extends(ComponentModel, _super);\n function ComponentModel(option, parentModel, ecModel) {\n var _this = _super.call(this, option, parentModel, ecModel) || this;\n _this.uid = componentUtil.getUID('ec_cpt_model');\n return _this;\n }\n ComponentModel.prototype.init = function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n };\n ComponentModel.prototype.mergeDefaultAndTheme = function (option, ecModel) {\n var layoutMode = layout.fetchLayoutMode(this);\n var inputPositionParams = layoutMode ? layout.getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n zrUtil.merge(option, themeModel.get(this.mainType));\n zrUtil.merge(option, this.getDefaultOption());\n if (layoutMode) {\n layout.mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n };\n ComponentModel.prototype.mergeOption = function (option, ecModel) {\n zrUtil.merge(this.option, option, true);\n var layoutMode = layout.fetchLayoutMode(this);\n if (layoutMode) {\n layout.mergeLayoutParam(this.option, option, layoutMode);\n }\n };\n /**\n * Called immediately after `init` or `mergeOption` of this instance called.\n */\n ComponentModel.prototype.optionUpdated = function (newCptOption, isInit) {};\n /**\n * [How to declare defaultOption]:\n *\n * (A) If using class declaration in typescript (since echarts 5):\n * ```ts\n * import {ComponentOption} from '../model/option.js';\n * export interface XxxOption extends ComponentOption {\n * aaa: number\n * }\n * export class XxxModel extends Component {\n * static type = 'xxx';\n * static defaultOption: XxxOption = {\n * aaa: 123\n * }\n * }\n * Component.registerClass(XxxModel);\n * ```\n * ```ts\n * import {inheritDefaultOption} from '../util/component.js';\n * import {XxxModel, XxxOption} from './XxxModel.js';\n * export interface XxxSubOption extends XxxOption {\n * bbb: number\n * }\n * class XxxSubModel extends XxxModel {\n * static defaultOption: XxxSubOption = inheritDefaultOption(XxxModel.defaultOption, {\n * bbb: 456\n * })\n * fn() {\n * let opt = this.getDefaultOption();\n * // opt is {aaa: 123, bbb: 456}\n * }\n * }\n * ```\n *\n * (B) If using class extend (previous approach in echarts 3 & 4):\n * ```js\n * let XxxComponent = Component.extend({\n * defaultOption: {\n * xx: 123\n * }\n * })\n * ```\n * ```js\n * let XxxSubComponent = XxxComponent.extend({\n * defaultOption: {\n * yy: 456\n * },\n * fn: function () {\n * let opt = this.getDefaultOption();\n * // opt is {xx: 123, yy: 456}\n * }\n * })\n * ```\n */\n ComponentModel.prototype.getDefaultOption = function () {\n var ctor = this.constructor;\n // If using class declaration, it is different to travel super class\n // in legacy env and auto merge defaultOption. So if using class\n // declaration, defaultOption should be merged manually.\n if (!isExtendedClass(ctor)) {\n // When using ts class, defaultOption must be declared as static.\n return ctor.defaultOption;\n }\n // FIXME: remove this approach?\n var fields = inner(this);\n if (!fields.defaultOption) {\n var optList = [];\n var clz = ctor;\n while (clz) {\n var opt = clz.prototype.defaultOption;\n opt && optList.push(opt);\n clz = clz.superClass;\n }\n var defaultOption = {};\n for (var i = optList.length - 1; i >= 0; i--) {\n defaultOption = zrUtil.merge(defaultOption, optList[i], true);\n }\n fields.defaultOption = defaultOption;\n }\n return fields.defaultOption;\n };\n /**\n * Notice: always force to input param `useDefault` in case that forget to consider it.\n * The same behavior as `modelUtil.parseFinder`.\n *\n * @param useDefault In many cases like series refer axis and axis refer grid,\n * If axis index / axis id not specified, use the first target as default.\n * In other cases like dataZoom refer axis, if not specified, measn no refer.\n */\n ComponentModel.prototype.getReferringComponents = function (mainType, opt) {\n var indexKey = mainType + 'Index';\n var idKey = mainType + 'Id';\n return queryReferringComponents(this.ecModel, mainType, {\n index: this.get(indexKey, true),\n id: this.get(idKey, true)\n }, opt);\n };\n ComponentModel.prototype.getBoxLayoutParams = function () {\n // Consider itself having box layout configs.\n var boxLayoutModel = this;\n return {\n left: boxLayoutModel.get('left'),\n top: boxLayoutModel.get('top'),\n right: boxLayoutModel.get('right'),\n bottom: boxLayoutModel.get('bottom'),\n width: boxLayoutModel.get('width'),\n height: boxLayoutModel.get('height')\n };\n };\n /**\n * Get key for zlevel.\n * If developers don't configure zlevel. We will assign zlevel to series based on the key.\n * For example, lines with trail effect and progressive series will in an individual zlevel.\n */\n ComponentModel.prototype.getZLevelKey = function () {\n return '';\n };\n ComponentModel.prototype.setZLevel = function (zlevel) {\n this.option.zlevel = zlevel;\n };\n ComponentModel.protoInitialize = function () {\n var proto = ComponentModel.prototype;\n proto.type = 'component';\n proto.id = '';\n proto.name = '';\n proto.mainType = '';\n proto.subType = '';\n proto.componentIndex = 0;\n }();\n return ComponentModel;\n}(Model);\nmountExtend(ComponentModel, Model);\nenableClassManagement(ComponentModel);\ncomponentUtil.enableSubTypeDefaulter(ComponentModel);\ncomponentUtil.enableTopologicalTravel(ComponentModel, getDependencies);\nfunction getDependencies(componentType) {\n var deps = [];\n zrUtil.each(ComponentModel.getClassesByMainType(componentType), function (clz) {\n deps = deps.concat(clz.dependencies || clz.prototype.dependencies || []);\n });\n // Ensure main type.\n deps = zrUtil.map(deps, function (type) {\n return parseClassType(type).main;\n });\n // Hack dataset for convenience.\n if (componentType !== 'dataset' && zrUtil.indexOf(deps, 'dataset') <= 0) {\n deps.unshift('dataset');\n }\n return deps;\n}\nexport default ComponentModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar platform = '';\n// Navigator not exists in node\nif (typeof navigator !== 'undefined') {\n /* global navigator */\n platform = navigator.platform || '';\n}\nvar decalColor = 'rgba(0, 0, 0, 0.2)';\nexport default {\n darkMode: 'auto',\n // backgroundColor: 'rgba(0,0,0,0)',\n colorBy: 'series',\n color: ['#5470c6', '#91cc75', '#fac858', '#ee6666', '#73c0de', '#3ba272', '#fc8452', '#9a60b4', '#ea7ccc'],\n gradientColor: ['#f6efa6', '#d88273', '#bf444c'],\n aria: {\n decal: {\n decals: [{\n color: decalColor,\n dashArrayX: [1, 0],\n dashArrayY: [2, 5],\n symbolSize: 1,\n rotation: Math.PI / 6\n }, {\n color: decalColor,\n symbol: 'circle',\n dashArrayX: [[8, 8], [0, 8, 8, 0]],\n dashArrayY: [6, 0],\n symbolSize: 0.8\n }, {\n color: decalColor,\n dashArrayX: [1, 0],\n dashArrayY: [4, 3],\n rotation: -Math.PI / 4\n }, {\n color: decalColor,\n dashArrayX: [[6, 6], [0, 6, 6, 0]],\n dashArrayY: [6, 0]\n }, {\n color: decalColor,\n dashArrayX: [[1, 0], [1, 6]],\n dashArrayY: [1, 0, 6, 0],\n rotation: Math.PI / 4\n }, {\n color: decalColor,\n symbol: 'triangle',\n dashArrayX: [[9, 9], [0, 9, 9, 0]],\n dashArrayY: [7, 2],\n symbolSize: 0.75\n }]\n }\n },\n // If xAxis and yAxis declared, grid is created by default.\n // grid: {},\n textStyle: {\n // color: '#000',\n // decoration: 'none',\n // PENDING\n fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',\n // fontFamily: 'Arial, Verdana, sans-serif',\n fontSize: 12,\n fontStyle: 'normal',\n fontWeight: 'normal'\n },\n // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n // Default is source-over\n blendMode: null,\n stateAnimation: {\n duration: 300,\n easing: 'cubicOut'\n },\n animation: 'auto',\n animationDuration: 1000,\n animationDurationUpdate: 500,\n animationEasing: 'cubicInOut',\n animationEasingUpdate: 'cubicInOut',\n animationThreshold: 2000,\n // Configuration for progressive/incremental rendering\n progressiveThreshold: 3000,\n progressive: 400,\n // Threshold of if use single hover layer to optimize.\n // It is recommended that `hoverLayerThreshold` is equivalent to or less than\n // `progressiveThreshold`, otherwise hover will cause restart of progressive,\n // which is unexpected.\n // see example .\n hoverLayerThreshold: 3000,\n // See: module:echarts/scale/Time\n useUTC: false\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap } from 'zrender/lib/core/util.js';\n;\n;\n;\nexport var VISUAL_DIMENSIONS = createHashMap(['tooltip', 'label', 'itemName', 'itemId', 'itemGroupId', 'itemChildGroupId', 'seriesName']);\nexport var SOURCE_FORMAT_ORIGINAL = 'original';\nexport var SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';\nexport var SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';\nexport var SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';\nexport var SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';\nexport var SOURCE_FORMAT_UNKNOWN = 'unknown';\nexport var SERIES_LAYOUT_BY_COLUMN = 'column';\nexport var SERIES_LAYOUT_BY_ROW = 'row';\n;\n;\n;\n;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner, getDataItemValue, queryReferringComponents, SINGLE_REFERRING } from '../../util/model.js';\nimport { createHashMap, each, isArray, isString, isObject, isTypedArray } from 'zrender/lib/core/util.js';\nimport { SOURCE_FORMAT_ORIGINAL, SOURCE_FORMAT_ARRAY_ROWS, SOURCE_FORMAT_OBJECT_ROWS, SERIES_LAYOUT_BY_ROW, SOURCE_FORMAT_KEYED_COLUMNS } from '../../util/types.js';\n// The result of `guessOrdinal`.\nexport var BE_ORDINAL = {\n Must: 1,\n Might: 2,\n Not: 3 // Other cases\n};\n\nvar innerGlobalModel = makeInner();\n/**\n * MUST be called before mergeOption of all series.\n */\nexport function resetSourceDefaulter(ecModel) {\n // `datasetMap` is used to make default encode.\n innerGlobalModel(ecModel).datasetMap = createHashMap();\n}\n/**\n * [The strategy of the arrengment of data dimensions for dataset]:\n * \"value way\": all axes are non-category axes. So series one by one take\n * several (the number is coordSysDims.length) dimensions from dataset.\n * The result of data arrengment of data dimensions like:\n * | ser0_x | ser0_y | ser1_x | ser1_y | ser2_x | ser2_y |\n * \"category way\": at least one axis is category axis. So the the first data\n * dimension is always mapped to the first category axis and shared by\n * all of the series. The other data dimensions are taken by series like\n * \"value way\" does.\n * The result of data arrengment of data dimensions like:\n * | ser_shared_x | ser0_y | ser1_y | ser2_y |\n *\n * @return encode Never be `null/undefined`.\n */\nexport function makeSeriesEncodeForAxisCoordSys(coordDimensions, seriesModel, source) {\n var encode = {};\n var datasetModel = querySeriesUpstreamDatasetModel(seriesModel);\n // Currently only make default when using dataset, util more reqirements occur.\n if (!datasetModel || !coordDimensions) {\n return encode;\n }\n var encodeItemName = [];\n var encodeSeriesName = [];\n var ecModel = seriesModel.ecModel;\n var datasetMap = innerGlobalModel(ecModel).datasetMap;\n var key = datasetModel.uid + '_' + source.seriesLayoutBy;\n var baseCategoryDimIndex;\n var categoryWayValueDimStart;\n coordDimensions = coordDimensions.slice();\n each(coordDimensions, function (coordDimInfoLoose, coordDimIdx) {\n var coordDimInfo = isObject(coordDimInfoLoose) ? coordDimInfoLoose : coordDimensions[coordDimIdx] = {\n name: coordDimInfoLoose\n };\n if (coordDimInfo.type === 'ordinal' && baseCategoryDimIndex == null) {\n baseCategoryDimIndex = coordDimIdx;\n categoryWayValueDimStart = getDataDimCountOnCoordDim(coordDimInfo);\n }\n encode[coordDimInfo.name] = [];\n });\n var datasetRecord = datasetMap.get(key) || datasetMap.set(key, {\n categoryWayDim: categoryWayValueDimStart,\n valueWayDim: 0\n });\n // TODO\n // Auto detect first time axis and do arrangement.\n each(coordDimensions, function (coordDimInfo, coordDimIdx) {\n var coordDimName = coordDimInfo.name;\n var count = getDataDimCountOnCoordDim(coordDimInfo);\n // In value way.\n if (baseCategoryDimIndex == null) {\n var start = datasetRecord.valueWayDim;\n pushDim(encode[coordDimName], start, count);\n pushDim(encodeSeriesName, start, count);\n datasetRecord.valueWayDim += count;\n // ??? TODO give a better default series name rule?\n // especially when encode x y specified.\n // consider: when multiple series share one dimension\n // category axis, series name should better use\n // the other dimension name. On the other hand, use\n // both dimensions name.\n }\n // In category way, the first category axis.\n else if (baseCategoryDimIndex === coordDimIdx) {\n pushDim(encode[coordDimName], 0, count);\n pushDim(encodeItemName, 0, count);\n }\n // In category way, the other axis.\n else {\n var start = datasetRecord.categoryWayDim;\n pushDim(encode[coordDimName], start, count);\n pushDim(encodeSeriesName, start, count);\n datasetRecord.categoryWayDim += count;\n }\n });\n function pushDim(dimIdxArr, idxFrom, idxCount) {\n for (var i = 0; i < idxCount; i++) {\n dimIdxArr.push(idxFrom + i);\n }\n }\n function getDataDimCountOnCoordDim(coordDimInfo) {\n var dimsDef = coordDimInfo.dimsDef;\n return dimsDef ? dimsDef.length : 1;\n }\n encodeItemName.length && (encode.itemName = encodeItemName);\n encodeSeriesName.length && (encode.seriesName = encodeSeriesName);\n return encode;\n}\n/**\n * Work for data like [{name: ..., value: ...}, ...].\n *\n * @return encode Never be `null/undefined`.\n */\nexport function makeSeriesEncodeForNameBased(seriesModel, source, dimCount) {\n var encode = {};\n var datasetModel = querySeriesUpstreamDatasetModel(seriesModel);\n // Currently only make default when using dataset, util more reqirements occur.\n if (!datasetModel) {\n return encode;\n }\n var sourceFormat = source.sourceFormat;\n var dimensionsDefine = source.dimensionsDefine;\n var potentialNameDimIndex;\n if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n each(dimensionsDefine, function (dim, idx) {\n if ((isObject(dim) ? dim.name : dim) === 'name') {\n potentialNameDimIndex = idx;\n }\n });\n }\n var idxResult = function () {\n var idxRes0 = {};\n var idxRes1 = {};\n var guessRecords = [];\n // 5 is an experience value.\n for (var i = 0, len = Math.min(5, dimCount); i < len; i++) {\n var guessResult = doGuessOrdinal(source.data, sourceFormat, source.seriesLayoutBy, dimensionsDefine, source.startIndex, i);\n guessRecords.push(guessResult);\n var isPureNumber = guessResult === BE_ORDINAL.Not;\n // [Strategy of idxRes0]: find the first BE_ORDINAL.Not as the value dim,\n // and then find a name dim with the priority:\n // \"BE_ORDINAL.Might|BE_ORDINAL.Must\" > \"other dim\" > \"the value dim itself\".\n if (isPureNumber && idxRes0.v == null && i !== potentialNameDimIndex) {\n idxRes0.v = i;\n }\n if (idxRes0.n == null || idxRes0.n === idxRes0.v || !isPureNumber && guessRecords[idxRes0.n] === BE_ORDINAL.Not) {\n idxRes0.n = i;\n }\n if (fulfilled(idxRes0) && guessRecords[idxRes0.n] !== BE_ORDINAL.Not) {\n return idxRes0;\n }\n // [Strategy of idxRes1]: if idxRes0 not satisfied (that is, no BE_ORDINAL.Not),\n // find the first BE_ORDINAL.Might as the value dim,\n // and then find a name dim with the priority:\n // \"other dim\" > \"the value dim itself\".\n // That is for backward compat: number-like (e.g., `'3'`, `'55'`) can be\n // treated as number.\n if (!isPureNumber) {\n if (guessResult === BE_ORDINAL.Might && idxRes1.v == null && i !== potentialNameDimIndex) {\n idxRes1.v = i;\n }\n if (idxRes1.n == null || idxRes1.n === idxRes1.v) {\n idxRes1.n = i;\n }\n }\n }\n function fulfilled(idxResult) {\n return idxResult.v != null && idxResult.n != null;\n }\n return fulfilled(idxRes0) ? idxRes0 : fulfilled(idxRes1) ? idxRes1 : null;\n }();\n if (idxResult) {\n encode.value = [idxResult.v];\n // `potentialNameDimIndex` has highest priority.\n var nameDimIndex = potentialNameDimIndex != null ? potentialNameDimIndex : idxResult.n;\n // By default, label uses itemName in charts.\n // So we don't set encodeLabel here.\n encode.itemName = [nameDimIndex];\n encode.seriesName = [nameDimIndex];\n }\n return encode;\n}\n/**\n * @return If return null/undefined, indicate that should not use datasetModel.\n */\nexport function querySeriesUpstreamDatasetModel(seriesModel) {\n // Caution: consider the scenario:\n // A dataset is declared and a series is not expected to use the dataset,\n // and at the beginning `setOption({series: { noData })` (just prepare other\n // option but no data), then `setOption({series: {data: [...]}); In this case,\n // the user should set an empty array to avoid that dataset is used by default.\n var thisData = seriesModel.get('data', true);\n if (!thisData) {\n return queryReferringComponents(seriesModel.ecModel, 'dataset', {\n index: seriesModel.get('datasetIndex', true),\n id: seriesModel.get('datasetId', true)\n }, SINGLE_REFERRING).models[0];\n }\n}\n/**\n * @return Always return an array event empty.\n */\nexport function queryDatasetUpstreamDatasetModels(datasetModel) {\n // Only these attributes declared, we by default reference to `datasetIndex: 0`.\n // Otherwise, no reference.\n if (!datasetModel.get('transform', true) && !datasetModel.get('fromTransformResult', true)) {\n return [];\n }\n return queryReferringComponents(datasetModel.ecModel, 'dataset', {\n index: datasetModel.get('fromDatasetIndex', true),\n id: datasetModel.get('fromDatasetId', true)\n }, SINGLE_REFERRING).models;\n}\n/**\n * The rule should not be complex, otherwise user might not\n * be able to known where the data is wrong.\n * The code is ugly, but how to make it neat?\n */\nexport function guessOrdinal(source, dimIndex) {\n return doGuessOrdinal(source.data, source.sourceFormat, source.seriesLayoutBy, source.dimensionsDefine, source.startIndex, dimIndex);\n}\n// dimIndex may be overflow source data.\n// return {BE_ORDINAL}\nfunction doGuessOrdinal(data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex) {\n var result;\n // Experience value.\n var maxLoop = 5;\n if (isTypedArray(data)) {\n return BE_ORDINAL.Not;\n }\n // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine\n // always exists in source.\n var dimName;\n var dimType;\n if (dimensionsDefine) {\n var dimDefItem = dimensionsDefine[dimIndex];\n if (isObject(dimDefItem)) {\n dimName = dimDefItem.name;\n dimType = dimDefItem.type;\n } else if (isString(dimDefItem)) {\n dimName = dimDefItem;\n }\n }\n if (dimType != null) {\n return dimType === 'ordinal' ? BE_ORDINAL.Must : BE_ORDINAL.Not;\n }\n if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n var dataArrayRows = data;\n if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n var sample = dataArrayRows[dimIndex];\n for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {\n if ((result = detectValue(sample[startIndex + i])) != null) {\n return result;\n }\n }\n } else {\n for (var i = 0; i < dataArrayRows.length && i < maxLoop; i++) {\n var row = dataArrayRows[startIndex + i];\n if (row && (result = detectValue(row[dimIndex])) != null) {\n return result;\n }\n }\n }\n } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n var dataObjectRows = data;\n if (!dimName) {\n return BE_ORDINAL.Not;\n }\n for (var i = 0; i < dataObjectRows.length && i < maxLoop; i++) {\n var item = dataObjectRows[i];\n if (item && (result = detectValue(item[dimName])) != null) {\n return result;\n }\n }\n } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n var dataKeyedColumns = data;\n if (!dimName) {\n return BE_ORDINAL.Not;\n }\n var sample = dataKeyedColumns[dimName];\n if (!sample || isTypedArray(sample)) {\n return BE_ORDINAL.Not;\n }\n for (var i = 0; i < sample.length && i < maxLoop; i++) {\n if ((result = detectValue(sample[i])) != null) {\n return result;\n }\n }\n } else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n var dataOriginal = data;\n for (var i = 0; i < dataOriginal.length && i < maxLoop; i++) {\n var item = dataOriginal[i];\n var val = getDataItemValue(item);\n if (!isArray(val)) {\n return BE_ORDINAL.Not;\n }\n if ((result = detectValue(val[dimIndex])) != null) {\n return result;\n }\n }\n }\n function detectValue(val) {\n var beStr = isString(val);\n // Consider usage convenience, '1', '2' will be treated as \"number\".\n // `isFinit('')` get `true`.\n if (val != null && isFinite(val) && val !== '') {\n return beStr ? BE_ORDINAL.Might : BE_ORDINAL.Not;\n } else if (beStr && val !== '-') {\n return BE_ORDINAL.Must;\n }\n }\n return BE_ORDINAL.Not;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, assert } from 'zrender/lib/core/util.js';\nimport { isComponentIdInternal } from '../util/model.js';\nvar internalOptionCreatorMap = createHashMap();\nexport function registerInternalOptionCreator(mainType, creator) {\n assert(internalOptionCreatorMap.get(mainType) == null && creator);\n internalOptionCreatorMap.set(mainType, creator);\n}\nexport function concatInternalOptions(ecModel, mainType, newCmptOptionList) {\n var internalOptionCreator = internalOptionCreatorMap.get(mainType);\n if (!internalOptionCreator) {\n return newCmptOptionList;\n }\n var internalOptions = internalOptionCreator(ecModel);\n if (!internalOptions) {\n return newCmptOptionList;\n }\n if (process.env.NODE_ENV !== 'production') {\n for (var i = 0; i < internalOptions.length; i++) {\n assert(isComponentIdInternal(internalOptions[i]));\n }\n }\n return newCmptOptionList.concat(internalOptions);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner, normalizeToArray } from '../../util/model.js';\nvar innerColor = makeInner();\nvar innerDecal = makeInner();\nvar PaletteMixin = /** @class */function () {\n function PaletteMixin() {}\n PaletteMixin.prototype.getColorFromPalette = function (name, scope, requestNum) {\n var defaultPalette = normalizeToArray(this.get('color', true));\n var layeredPalette = this.get('colorLayer', true);\n return getFromPalette(this, innerColor, defaultPalette, layeredPalette, name, scope, requestNum);\n };\n PaletteMixin.prototype.clearColorPalette = function () {\n clearPalette(this, innerColor);\n };\n return PaletteMixin;\n}();\nexport function getDecalFromPalette(ecModel, name, scope, requestNum) {\n var defaultDecals = normalizeToArray(ecModel.get(['aria', 'decal', 'decals']));\n return getFromPalette(ecModel, innerDecal, defaultDecals, null, name, scope, requestNum);\n}\nfunction getNearestPalette(palettes, requestColorNum) {\n var paletteNum = palettes.length;\n // TODO palettes must be in order\n for (var i = 0; i < paletteNum; i++) {\n if (palettes[i].length > requestColorNum) {\n return palettes[i];\n }\n }\n return palettes[paletteNum - 1];\n}\n/**\n * @param name MUST NOT be null/undefined. Otherwise call this function\n * twise with the same parameters will get different result.\n * @param scope default this.\n * @return Can be null/undefined\n */\nfunction getFromPalette(that, inner, defaultPalette, layeredPalette, name, scope, requestNum) {\n scope = scope || that;\n var scopeFields = inner(scope);\n var paletteIdx = scopeFields.paletteIdx || 0;\n var paletteNameMap = scopeFields.paletteNameMap = scopeFields.paletteNameMap || {};\n // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n if (paletteNameMap.hasOwnProperty(name)) {\n return paletteNameMap[name];\n }\n var palette = requestNum == null || !layeredPalette ? defaultPalette : getNearestPalette(layeredPalette, requestNum);\n // In case can't find in layered color palette.\n palette = palette || defaultPalette;\n if (!palette || !palette.length) {\n return;\n }\n var pickedPaletteItem = palette[paletteIdx];\n if (name) {\n paletteNameMap[name] = pickedPaletteItem;\n }\n scopeFields.paletteIdx = (paletteIdx + 1) % palette.length;\n return pickedPaletteItem;\n}\nfunction clearPalette(that, inner) {\n inner(that).paletteIdx = 0;\n inner(that).paletteNameMap = {};\n}\nexport { PaletteMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { map, isString, isFunction, eqNaN, isRegExp } from 'zrender/lib/core/util.js';\nvar ECHARTS_PREFIX = '[ECharts] ';\nvar storedLogs = {};\nvar hasConsole = typeof console !== 'undefined'\n// eslint-disable-next-line\n&& console.warn && console.log;\nfunction outputLog(type, str, onlyOnce) {\n if (hasConsole) {\n if (onlyOnce) {\n if (storedLogs[str]) {\n return;\n }\n storedLogs[str] = true;\n }\n // eslint-disable-next-line\n console[type](ECHARTS_PREFIX + str);\n }\n}\nexport function log(str, onlyOnce) {\n outputLog('log', str, onlyOnce);\n}\nexport function warn(str, onlyOnce) {\n outputLog('warn', str, onlyOnce);\n}\nexport function error(str, onlyOnce) {\n outputLog('error', str, onlyOnce);\n}\nexport function deprecateLog(str) {\n if (process.env.NODE_ENV !== 'production') {\n // Not display duplicate message.\n outputLog('warn', 'DEPRECATED: ' + str, true);\n }\n}\nexport function deprecateReplaceLog(oldOpt, newOpt, scope) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog((scope ? \"[\" + scope + \"]\" : '') + (oldOpt + \" is deprecated, use \" + newOpt + \" instead.\"));\n }\n}\n/**\n * If in __DEV__ environment, get console printable message for users hint.\n * Parameters are separated by ' '.\n * @usage\n * makePrintable('This is an error on', someVar, someObj);\n *\n * @param hintInfo anything about the current execution context to hint users.\n * @throws Error\n */\nexport function makePrintable() {\n var hintInfo = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n hintInfo[_i] = arguments[_i];\n }\n var msg = '';\n if (process.env.NODE_ENV !== 'production') {\n // Fuzzy stringify for print.\n // This code only exist in dev environment.\n var makePrintableStringIfPossible_1 = function (val) {\n return val === void 0 ? 'undefined' : val === Infinity ? 'Infinity' : val === -Infinity ? '-Infinity' : eqNaN(val) ? 'NaN' : val instanceof Date ? 'Date(' + val.toISOString() + ')' : isFunction(val) ? 'function () { ... }' : isRegExp(val) ? val + '' : null;\n };\n msg = map(hintInfo, function (arg) {\n if (isString(arg)) {\n // Print without quotation mark for some statement.\n return arg;\n } else {\n var printableStr = makePrintableStringIfPossible_1(arg);\n if (printableStr != null) {\n return printableStr;\n } else if (typeof JSON !== 'undefined' && JSON.stringify) {\n try {\n return JSON.stringify(arg, function (n, val) {\n var printableStr = makePrintableStringIfPossible_1(val);\n return printableStr == null ? val : printableStr;\n });\n // In most cases the info object is small, so do not line break.\n } catch (err) {\n return '?';\n }\n } else {\n return '?';\n }\n }\n }).join(' ');\n }\n return msg;\n}\n/**\n * @throws Error\n */\nexport function throwError(msg) {\n throw new Error(msg);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Caution: If the mechanism should be changed some day, these cases\n * should be considered:\n *\n * (1) In `merge option` mode, if using the same option to call `setOption`\n * many times, the result should be the same (try our best to ensure that).\n * (2) In `merge option` mode, if a component has no id/name specified, it\n * will be merged by index, and the result sequence of the components is\n * consistent to the original sequence.\n * (3) In `replaceMerge` mode, keep the result sequence of the components is\n * consistent to the original sequence, even though there might result in \"hole\".\n * (4) `reset` feature (in toolbox). Find detailed info in comments about\n * `mergeOption` in module:echarts/model/OptionManager.\n */\nimport { each, filter, isArray, isObject, isString, createHashMap, assert, clone, merge, extend, mixin, isFunction } from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../util/model.js';\nimport Model from './Model.js';\nimport ComponentModel from './Component.js';\nimport globalDefault from './globalDefault.js';\nimport { resetSourceDefaulter } from '../data/helper/sourceHelper.js';\nimport { concatInternalOptions } from './internalComponentCreator.js';\nimport { PaletteMixin } from './mixin/palette.js';\nimport { error, warn } from '../util/log.js';\n// -----------------------\n// Internal method names:\n// -----------------------\nvar reCreateSeriesIndices;\nvar assertSeriesInitialized;\nvar initBase;\nvar OPTION_INNER_KEY = '\\0_ec_inner';\nvar OPTION_INNER_VALUE = 1;\nvar BUITIN_COMPONENTS_MAP = {\n grid: 'GridComponent',\n polar: 'PolarComponent',\n geo: 'GeoComponent',\n singleAxis: 'SingleAxisComponent',\n parallel: 'ParallelComponent',\n calendar: 'CalendarComponent',\n graphic: 'GraphicComponent',\n toolbox: 'ToolboxComponent',\n tooltip: 'TooltipComponent',\n axisPointer: 'AxisPointerComponent',\n brush: 'BrushComponent',\n title: 'TitleComponent',\n timeline: 'TimelineComponent',\n markPoint: 'MarkPointComponent',\n markLine: 'MarkLineComponent',\n markArea: 'MarkAreaComponent',\n legend: 'LegendComponent',\n dataZoom: 'DataZoomComponent',\n visualMap: 'VisualMapComponent',\n // aria: 'AriaComponent',\n // dataset: 'DatasetComponent',\n // Dependencies\n xAxis: 'GridComponent',\n yAxis: 'GridComponent',\n angleAxis: 'PolarComponent',\n radiusAxis: 'PolarComponent'\n};\nvar BUILTIN_CHARTS_MAP = {\n line: 'LineChart',\n bar: 'BarChart',\n pie: 'PieChart',\n scatter: 'ScatterChart',\n radar: 'RadarChart',\n map: 'MapChart',\n tree: 'TreeChart',\n treemap: 'TreemapChart',\n graph: 'GraphChart',\n gauge: 'GaugeChart',\n funnel: 'FunnelChart',\n parallel: 'ParallelChart',\n sankey: 'SankeyChart',\n boxplot: 'BoxplotChart',\n candlestick: 'CandlestickChart',\n effectScatter: 'EffectScatterChart',\n lines: 'LinesChart',\n heatmap: 'HeatmapChart',\n pictorialBar: 'PictorialBarChart',\n themeRiver: 'ThemeRiverChart',\n sunburst: 'SunburstChart',\n custom: 'CustomChart'\n};\nvar componetsMissingLogPrinted = {};\nfunction checkMissingComponents(option) {\n each(option, function (componentOption, mainType) {\n if (!ComponentModel.hasClass(mainType)) {\n var componentImportName = BUITIN_COMPONENTS_MAP[mainType];\n if (componentImportName && !componetsMissingLogPrinted[componentImportName]) {\n error(\"Component \" + mainType + \" is used but not imported.\\nimport { \" + componentImportName + \" } from 'echarts/components';\\necharts.use([\" + componentImportName + \"]);\");\n componetsMissingLogPrinted[componentImportName] = true;\n }\n }\n });\n}\nvar GlobalModel = /** @class */function (_super) {\n __extends(GlobalModel, _super);\n function GlobalModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GlobalModel.prototype.init = function (option, parentModel, ecModel, theme, locale, optionManager) {\n theme = theme || {};\n this.option = null; // Mark as not initialized.\n this._theme = new Model(theme);\n this._locale = new Model(locale);\n this._optionManager = optionManager;\n };\n GlobalModel.prototype.setOption = function (option, opts, optionPreprocessorFuncs) {\n if (process.env.NODE_ENV !== 'production') {\n assert(option != null, 'option is null/undefined');\n assert(option[OPTION_INNER_KEY] !== OPTION_INNER_VALUE, 'please use chart.getOption()');\n }\n var innerOpt = normalizeSetOptionInput(opts);\n this._optionManager.setOption(option, optionPreprocessorFuncs, innerOpt);\n this._resetOption(null, innerOpt);\n };\n /**\n * @param type null/undefined: reset all.\n * 'recreate': force recreate all.\n * 'timeline': only reset timeline option\n * 'media': only reset media query option\n * @return Whether option changed.\n */\n GlobalModel.prototype.resetOption = function (type, opt) {\n return this._resetOption(type, normalizeSetOptionInput(opt));\n };\n GlobalModel.prototype._resetOption = function (type, opt) {\n var optionChanged = false;\n var optionManager = this._optionManager;\n if (!type || type === 'recreate') {\n var baseOption = optionManager.mountOption(type === 'recreate');\n if (process.env.NODE_ENV !== 'production') {\n checkMissingComponents(baseOption);\n }\n if (!this.option || type === 'recreate') {\n initBase(this, baseOption);\n } else {\n this.restoreData();\n this._mergeOption(baseOption, opt);\n }\n optionChanged = true;\n }\n if (type === 'timeline' || type === 'media') {\n this.restoreData();\n }\n // By design, if `setOption(option2)` at the second time, and `option2` is a `ECUnitOption`,\n // it should better not have the same props with `MediaUnit['option']`.\n // Because either `option2` or `MediaUnit['option']` will be always merged to \"current option\"\n // rather than original \"baseOption\". If they both override a prop, the result might be\n // unexpected when media state changed after `setOption` called.\n // If we really need to modify a props in each `MediaUnit['option']`, use the full version\n // (`{baseOption, media}`) in `setOption`.\n // For `timeline`, the case is the same.\n if (!type || type === 'recreate' || type === 'timeline') {\n var timelineOption = optionManager.getTimelineOption(this);\n if (timelineOption) {\n optionChanged = true;\n this._mergeOption(timelineOption, opt);\n }\n }\n if (!type || type === 'recreate' || type === 'media') {\n var mediaOptions = optionManager.getMediaOption(this);\n if (mediaOptions.length) {\n each(mediaOptions, function (mediaOption) {\n optionChanged = true;\n this._mergeOption(mediaOption, opt);\n }, this);\n }\n }\n return optionChanged;\n };\n GlobalModel.prototype.mergeOption = function (option) {\n this._mergeOption(option, null);\n };\n GlobalModel.prototype._mergeOption = function (newOption, opt) {\n var option = this.option;\n var componentsMap = this._componentsMap;\n var componentsCount = this._componentsCount;\n var newCmptTypes = [];\n var newCmptTypeMap = createHashMap();\n var replaceMergeMainTypeMap = opt && opt.replaceMergeMainTypeMap;\n resetSourceDefaulter(this);\n // If no component class, merge directly.\n // For example: color, animaiton options, etc.\n each(newOption, function (componentOption, mainType) {\n if (componentOption == null) {\n return;\n }\n if (!ComponentModel.hasClass(mainType)) {\n // globalSettingTask.dirty();\n option[mainType] = option[mainType] == null ? clone(componentOption) : merge(option[mainType], componentOption, true);\n } else if (mainType) {\n newCmptTypes.push(mainType);\n newCmptTypeMap.set(mainType, true);\n }\n });\n if (replaceMergeMainTypeMap) {\n // If there is a mainType `xxx` in `replaceMerge` but not declared in option,\n // we trade it as it is declared in option as `{xxx: []}`. Because:\n // (1) for normal merge, `{xxx: null/undefined}` are the same meaning as `{xxx: []}`.\n // (2) some preprocessor may convert some of `{xxx: null/undefined}` to `{xxx: []}`.\n replaceMergeMainTypeMap.each(function (val, mainTypeInReplaceMerge) {\n if (ComponentModel.hasClass(mainTypeInReplaceMerge) && !newCmptTypeMap.get(mainTypeInReplaceMerge)) {\n newCmptTypes.push(mainTypeInReplaceMerge);\n newCmptTypeMap.set(mainTypeInReplaceMerge, true);\n }\n });\n }\n ComponentModel.topologicalTravel(newCmptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this);\n function visitComponent(mainType) {\n var newCmptOptionList = concatInternalOptions(this, mainType, modelUtil.normalizeToArray(newOption[mainType]));\n var oldCmptList = componentsMap.get(mainType);\n var mergeMode =\n // `!oldCmptList` means init. See the comment in `mappingToExists`\n !oldCmptList ? 'replaceAll' : replaceMergeMainTypeMap && replaceMergeMainTypeMap.get(mainType) ? 'replaceMerge' : 'normalMerge';\n var mappingResult = modelUtil.mappingToExists(oldCmptList, newCmptOptionList, mergeMode);\n // Set mainType and complete subType.\n modelUtil.setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel);\n // Empty it before the travel, in order to prevent `this._componentsMap`\n // from being used in the `init`/`mergeOption`/`optionUpdated` of some\n // components, which is probably incorrect logic.\n option[mainType] = null;\n componentsMap.set(mainType, null);\n componentsCount.set(mainType, 0);\n var optionsByMainType = [];\n var cmptsByMainType = [];\n var cmptsCountByMainType = 0;\n var tooltipExists;\n var tooltipWarningLogged;\n each(mappingResult, function (resultItem, index) {\n var componentModel = resultItem.existing;\n var newCmptOption = resultItem.newOption;\n if (!newCmptOption) {\n if (componentModel) {\n // Consider where is no new option and should be merged using {},\n // see removeEdgeAndAdd in topologicalTravel and\n // ComponentModel.getAllClassMainTypes.\n componentModel.mergeOption({}, this);\n componentModel.optionUpdated({}, false);\n }\n // If no both `resultItem.exist` and `resultItem.option`,\n // either it is in `replaceMerge` and not matched by any id,\n // or it has been removed in previous `replaceMerge` and left a \"hole\" in this component index.\n } else {\n var isSeriesType = mainType === 'series';\n var ComponentModelClass = ComponentModel.getClass(mainType, resultItem.keyInfo.subType, !isSeriesType // Give a more detailed warn later if series don't exists\n );\n\n if (!ComponentModelClass) {\n if (process.env.NODE_ENV !== 'production') {\n var subType = resultItem.keyInfo.subType;\n var seriesImportName = BUILTIN_CHARTS_MAP[subType];\n if (!componetsMissingLogPrinted[subType]) {\n componetsMissingLogPrinted[subType] = true;\n if (seriesImportName) {\n error(\"Series \" + subType + \" is used but not imported.\\nimport { \" + seriesImportName + \" } from 'echarts/charts';\\necharts.use([\" + seriesImportName + \"]);\");\n } else {\n error(\"Unknown series \" + subType);\n }\n }\n }\n return;\n }\n // TODO Before multiple tooltips get supported, we do this check to avoid unexpected exception.\n if (mainType === 'tooltip') {\n if (tooltipExists) {\n if (process.env.NODE_ENV !== 'production') {\n if (!tooltipWarningLogged) {\n warn('Currently only one tooltip component is allowed.');\n tooltipWarningLogged = true;\n }\n }\n return;\n }\n tooltipExists = true;\n }\n if (componentModel && componentModel.constructor === ComponentModelClass) {\n componentModel.name = resultItem.keyInfo.name;\n // componentModel.settingTask && componentModel.settingTask.dirty();\n componentModel.mergeOption(newCmptOption, this);\n componentModel.optionUpdated(newCmptOption, false);\n } else {\n // PENDING Global as parent ?\n var extraOpt = extend({\n componentIndex: index\n }, resultItem.keyInfo);\n componentModel = new ComponentModelClass(newCmptOption, this, this, extraOpt);\n // Assign `keyInfo`\n extend(componentModel, extraOpt);\n if (resultItem.brandNew) {\n componentModel.__requireNewView = true;\n }\n componentModel.init(newCmptOption, this, this);\n // Call optionUpdated after init.\n // newCmptOption has been used as componentModel.option\n // and may be merged with theme and default, so pass null\n // to avoid confusion.\n componentModel.optionUpdated(null, true);\n }\n }\n if (componentModel) {\n optionsByMainType.push(componentModel.option);\n cmptsByMainType.push(componentModel);\n cmptsCountByMainType++;\n } else {\n // Always do assign to avoid elided item in array.\n optionsByMainType.push(void 0);\n cmptsByMainType.push(void 0);\n }\n }, this);\n option[mainType] = optionsByMainType;\n componentsMap.set(mainType, cmptsByMainType);\n componentsCount.set(mainType, cmptsCountByMainType);\n // Backup series for filtering.\n if (mainType === 'series') {\n reCreateSeriesIndices(this);\n }\n }\n // If no series declared, ensure `_seriesIndices` initialized.\n if (!this._seriesIndices) {\n reCreateSeriesIndices(this);\n }\n };\n /**\n * Get option for output (cloned option and inner info removed)\n */\n GlobalModel.prototype.getOption = function () {\n var option = clone(this.option);\n each(option, function (optInMainType, mainType) {\n if (ComponentModel.hasClass(mainType)) {\n var opts = modelUtil.normalizeToArray(optInMainType);\n // Inner cmpts need to be removed.\n // Inner cmpts might not be at last since ec5.0, but still\n // compatible for users: if inner cmpt at last, splice the returned array.\n var realLen = opts.length;\n var metNonInner = false;\n for (var i = realLen - 1; i >= 0; i--) {\n // Remove options with inner id.\n if (opts[i] && !modelUtil.isComponentIdInternal(opts[i])) {\n metNonInner = true;\n } else {\n opts[i] = null;\n !metNonInner && realLen--;\n }\n }\n opts.length = realLen;\n option[mainType] = opts;\n }\n });\n delete option[OPTION_INNER_KEY];\n return option;\n };\n GlobalModel.prototype.getTheme = function () {\n return this._theme;\n };\n GlobalModel.prototype.getLocaleModel = function () {\n return this._locale;\n };\n GlobalModel.prototype.setUpdatePayload = function (payload) {\n this._payload = payload;\n };\n GlobalModel.prototype.getUpdatePayload = function () {\n return this._payload;\n };\n /**\n * @param idx If not specified, return the first one.\n */\n GlobalModel.prototype.getComponent = function (mainType, idx) {\n var list = this._componentsMap.get(mainType);\n if (list) {\n var cmpt = list[idx || 0];\n if (cmpt) {\n return cmpt;\n } else if (idx == null) {\n for (var i = 0; i < list.length; i++) {\n if (list[i]) {\n return list[i];\n }\n }\n }\n }\n };\n /**\n * @return Never be null/undefined.\n */\n GlobalModel.prototype.queryComponents = function (condition) {\n var mainType = condition.mainType;\n if (!mainType) {\n return [];\n }\n var index = condition.index;\n var id = condition.id;\n var name = condition.name;\n var cmpts = this._componentsMap.get(mainType);\n if (!cmpts || !cmpts.length) {\n return [];\n }\n var result;\n if (index != null) {\n result = [];\n each(modelUtil.normalizeToArray(index), function (idx) {\n cmpts[idx] && result.push(cmpts[idx]);\n });\n } else if (id != null) {\n result = queryByIdOrName('id', id, cmpts);\n } else if (name != null) {\n result = queryByIdOrName('name', name, cmpts);\n } else {\n // Return all non-empty components in that mainType\n result = filter(cmpts, function (cmpt) {\n return !!cmpt;\n });\n }\n return filterBySubType(result, condition);\n };\n /**\n * The interface is different from queryComponents,\n * which is convenient for inner usage.\n *\n * @usage\n * let result = findComponents(\n * {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}\n * );\n * let result = findComponents(\n * {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}\n * );\n * let result = findComponents(\n * {mainType: 'series',\n * filter: function (model, index) {...}}\n * );\n * // result like [component0, componnet1, ...]\n */\n GlobalModel.prototype.findComponents = function (condition) {\n var query = condition.query;\n var mainType = condition.mainType;\n var queryCond = getQueryCond(query);\n var result = queryCond ? this.queryComponents(queryCond)\n // Retrieve all non-empty components.\n : filter(this._componentsMap.get(mainType), function (cmpt) {\n return !!cmpt;\n });\n return doFilter(filterBySubType(result, condition));\n function getQueryCond(q) {\n var indexAttr = mainType + 'Index';\n var idAttr = mainType + 'Id';\n var nameAttr = mainType + 'Name';\n return q && (q[indexAttr] != null || q[idAttr] != null || q[nameAttr] != null) ? {\n mainType: mainType,\n // subType will be filtered finally.\n index: q[indexAttr],\n id: q[idAttr],\n name: q[nameAttr]\n } : null;\n }\n function doFilter(res) {\n return condition.filter ? filter(res, condition.filter) : res;\n }\n };\n GlobalModel.prototype.eachComponent = function (mainType, cb, context) {\n var componentsMap = this._componentsMap;\n if (isFunction(mainType)) {\n var ctxForAll_1 = cb;\n var cbForAll_1 = mainType;\n componentsMap.each(function (cmpts, componentType) {\n for (var i = 0; cmpts && i < cmpts.length; i++) {\n var cmpt = cmpts[i];\n cmpt && cbForAll_1.call(ctxForAll_1, componentType, cmpt, cmpt.componentIndex);\n }\n });\n } else {\n var cmpts = isString(mainType) ? componentsMap.get(mainType) : isObject(mainType) ? this.findComponents(mainType) : null;\n for (var i = 0; cmpts && i < cmpts.length; i++) {\n var cmpt = cmpts[i];\n cmpt && cb.call(context, cmpt, cmpt.componentIndex);\n }\n }\n };\n /**\n * Get series list before filtered by name.\n */\n GlobalModel.prototype.getSeriesByName = function (name) {\n var nameStr = modelUtil.convertOptionIdName(name, null);\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries && nameStr != null && oneSeries.name === nameStr;\n });\n };\n /**\n * Get series list before filtered by index.\n */\n GlobalModel.prototype.getSeriesByIndex = function (seriesIndex) {\n return this._componentsMap.get('series')[seriesIndex];\n };\n /**\n * Get series list before filtered by type.\n * FIXME: rename to getRawSeriesByType?\n */\n GlobalModel.prototype.getSeriesByType = function (subType) {\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries && oneSeries.subType === subType;\n });\n };\n /**\n * Get all series before filtered.\n */\n GlobalModel.prototype.getSeries = function () {\n return filter(this._componentsMap.get('series'), function (oneSeries) {\n return !!oneSeries;\n });\n };\n /**\n * Count series before filtered.\n */\n GlobalModel.prototype.getSeriesCount = function () {\n return this._componentsCount.get('series');\n };\n /**\n * After filtering, series may be different\n * from raw series.\n */\n GlobalModel.prototype.eachSeries = function (cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n cb.call(context, series, rawSeriesIndex);\n }, this);\n };\n /**\n * Iterate raw series before filtered.\n *\n * @param {Function} cb\n * @param {*} context\n */\n GlobalModel.prototype.eachRawSeries = function (cb, context) {\n each(this._componentsMap.get('series'), function (series) {\n series && cb.call(context, series, series.componentIndex);\n });\n };\n /**\n * After filtering, series may be different.\n * from raw series.\n */\n GlobalModel.prototype.eachSeriesByType = function (subType, cb, context) {\n assertSeriesInitialized(this);\n each(this._seriesIndices, function (rawSeriesIndex) {\n var series = this._componentsMap.get('series')[rawSeriesIndex];\n if (series.subType === subType) {\n cb.call(context, series, rawSeriesIndex);\n }\n }, this);\n };\n /**\n * Iterate raw series before filtered of given type.\n */\n GlobalModel.prototype.eachRawSeriesByType = function (subType, cb, context) {\n return each(this.getSeriesByType(subType), cb, context);\n };\n GlobalModel.prototype.isSeriesFiltered = function (seriesModel) {\n assertSeriesInitialized(this);\n return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;\n };\n GlobalModel.prototype.getCurrentSeriesIndices = function () {\n return (this._seriesIndices || []).slice();\n };\n GlobalModel.prototype.filterSeries = function (cb, context) {\n assertSeriesInitialized(this);\n var newSeriesIndices = [];\n each(this._seriesIndices, function (seriesRawIdx) {\n var series = this._componentsMap.get('series')[seriesRawIdx];\n cb.call(context, series, seriesRawIdx) && newSeriesIndices.push(seriesRawIdx);\n }, this);\n this._seriesIndices = newSeriesIndices;\n this._seriesIndicesMap = createHashMap(newSeriesIndices);\n };\n GlobalModel.prototype.restoreData = function (payload) {\n reCreateSeriesIndices(this);\n var componentsMap = this._componentsMap;\n var componentTypes = [];\n componentsMap.each(function (components, componentType) {\n if (ComponentModel.hasClass(componentType)) {\n componentTypes.push(componentType);\n }\n });\n ComponentModel.topologicalTravel(componentTypes, ComponentModel.getAllClassMainTypes(), function (componentType) {\n each(componentsMap.get(componentType), function (component) {\n if (component && (componentType !== 'series' || !isNotTargetSeries(component, payload))) {\n component.restoreData();\n }\n });\n });\n };\n GlobalModel.internalField = function () {\n reCreateSeriesIndices = function (ecModel) {\n var seriesIndices = ecModel._seriesIndices = [];\n each(ecModel._componentsMap.get('series'), function (series) {\n // series may have been removed by `replaceMerge`.\n series && seriesIndices.push(series.componentIndex);\n });\n ecModel._seriesIndicesMap = createHashMap(seriesIndices);\n };\n assertSeriesInitialized = function (ecModel) {\n // Components that use _seriesIndices should depends on series component,\n // which make sure that their initialization is after series.\n if (process.env.NODE_ENV !== 'production') {\n if (!ecModel._seriesIndices) {\n throw new Error('Option should contains series.');\n }\n }\n };\n initBase = function (ecModel, baseOption) {\n // Using OPTION_INNER_KEY to mark that this option cannot be used outside,\n // i.e. `chart.setOption(chart.getModel().option);` is forbidden.\n ecModel.option = {};\n ecModel.option[OPTION_INNER_KEY] = OPTION_INNER_VALUE;\n // Init with series: [], in case of calling findSeries method\n // before series initialized.\n ecModel._componentsMap = createHashMap({\n series: []\n });\n ecModel._componentsCount = createHashMap();\n // If user spefied `option.aria`, aria will be enable. This detection should be\n // performed before theme and globalDefault merge.\n var airaOption = baseOption.aria;\n if (isObject(airaOption) && airaOption.enabled == null) {\n airaOption.enabled = true;\n }\n mergeTheme(baseOption, ecModel._theme.option);\n // TODO Needs clone when merging to the unexisted property\n merge(baseOption, globalDefault, false);\n ecModel._mergeOption(baseOption, null);\n };\n }();\n return GlobalModel;\n}(Model);\nfunction isNotTargetSeries(seriesModel, payload) {\n if (payload) {\n var index = payload.seriesIndex;\n var id = payload.seriesId;\n var name_1 = payload.seriesName;\n return index != null && seriesModel.componentIndex !== index || id != null && seriesModel.id !== id || name_1 != null && seriesModel.name !== name_1;\n }\n}\nfunction mergeTheme(option, theme) {\n // PENDING\n // NOT use `colorLayer` in theme if option has `color`\n var notMergeColorLayer = option.color && !option.colorLayer;\n each(theme, function (themeItem, name) {\n if (name === 'colorLayer' && notMergeColorLayer) {\n return;\n }\n // If it is component model mainType, the model handles that merge later.\n // otherwise, merge them here.\n if (!ComponentModel.hasClass(name)) {\n if (typeof themeItem === 'object') {\n option[name] = !option[name] ? clone(themeItem) : merge(option[name], themeItem, false);\n } else {\n if (option[name] == null) {\n option[name] = themeItem;\n }\n }\n }\n });\n}\nfunction queryByIdOrName(attr, idOrName, cmpts) {\n // Here is a break from echarts4: string and number are\n // treated as equal.\n if (isArray(idOrName)) {\n var keyMap_1 = createHashMap();\n each(idOrName, function (idOrNameItem) {\n if (idOrNameItem != null) {\n var idName = modelUtil.convertOptionIdName(idOrNameItem, null);\n idName != null && keyMap_1.set(idOrNameItem, true);\n }\n });\n return filter(cmpts, function (cmpt) {\n return cmpt && keyMap_1.get(cmpt[attr]);\n });\n } else {\n var idName_1 = modelUtil.convertOptionIdName(idOrName, null);\n return filter(cmpts, function (cmpt) {\n return cmpt && idName_1 != null && cmpt[attr] === idName_1;\n });\n }\n}\nfunction filterBySubType(components, condition) {\n // Using hasOwnProperty for restrict. Consider\n // subType is undefined in user payload.\n return condition.hasOwnProperty('subType') ? filter(components, function (cmpt) {\n return cmpt && cmpt.subType === condition.subType;\n }) : components;\n}\nfunction normalizeSetOptionInput(opts) {\n var replaceMergeMainTypeMap = createHashMap();\n opts && each(modelUtil.normalizeToArray(opts.replaceMerge), function (mainType) {\n if (process.env.NODE_ENV !== 'production') {\n assert(ComponentModel.hasClass(mainType), '\"' + mainType + '\" is not valid component main type in \"replaceMerge\"');\n }\n replaceMergeMainTypeMap.set(mainType, true);\n });\n return {\n replaceMergeMainTypeMap: replaceMergeMainTypeMap\n };\n}\nmixin(GlobalModel, PaletteMixin);\nexport default GlobalModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar availableMethods = ['getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isSSR', 'isDisposed', 'on', 'off', 'getDataURL', 'getConnectedDataURL',\n// 'getModel',\n'getOption',\n// 'getViewOfComponentModel',\n// 'getViewOfSeriesModel',\n'getId', 'updateLabelLayout'];\nvar ExtensionAPI = /** @class */function () {\n function ExtensionAPI(ecInstance) {\n zrUtil.each(availableMethods, function (methodName) {\n this[methodName] = zrUtil.bind(ecInstance[methodName], ecInstance);\n }, this);\n }\n return ExtensionAPI;\n}();\nexport default ExtensionAPI;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar coordinateSystemCreators = {};\nvar CoordinateSystemManager = /** @class */function () {\n function CoordinateSystemManager() {\n this._coordinateSystems = [];\n }\n CoordinateSystemManager.prototype.create = function (ecModel, api) {\n var coordinateSystems = [];\n zrUtil.each(coordinateSystemCreators, function (creator, type) {\n var list = creator.create(ecModel, api);\n coordinateSystems = coordinateSystems.concat(list || []);\n });\n this._coordinateSystems = coordinateSystems;\n };\n CoordinateSystemManager.prototype.update = function (ecModel, api) {\n zrUtil.each(this._coordinateSystems, function (coordSys) {\n coordSys.update && coordSys.update(ecModel, api);\n });\n };\n CoordinateSystemManager.prototype.getCoordinateSystems = function () {\n return this._coordinateSystems.slice();\n };\n CoordinateSystemManager.register = function (type, creator) {\n coordinateSystemCreators[type] = creator;\n };\n CoordinateSystemManager.get = function (type) {\n return coordinateSystemCreators[type];\n };\n return CoordinateSystemManager;\n}();\nexport default CoordinateSystemManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { normalizeToArray\n// , MappingExistingItem, setComponentTypeToKeyInfo, mappingToExists\n} from '../util/model.js';\nimport { each, clone, map, isTypedArray, setAsPrimitive, isArray, isObject\n// , HashMap , createHashMap, extend, merge,\n} from 'zrender/lib/core/util.js';\nimport { error } from '../util/log.js';\nvar QUERY_REG = /^(min|max)?(.+)$/;\n// Key: mainType\n// type FakeComponentsMap = HashMap<(MappingExistingItem & { subType: string })[]>;\n/**\n * TERM EXPLANATIONS:\n * See `ECOption` and `ECUnitOption` in `src/util/types.ts`.\n */\nvar OptionManager = /** @class */function () {\n // timeline.notMerge is not supported in ec3. Firstly there is rearly\n // case that notMerge is needed. Secondly supporting 'notMerge' requires\n // rawOption cloned and backuped when timeline changed, which does no\n // good to performance. What's more, that both timeline and setOption\n // method supply 'notMerge' brings complex and some problems.\n // Consider this case:\n // (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);\n // (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);\n function OptionManager(api) {\n this._timelineOptions = [];\n this._mediaList = [];\n /**\n * -1, means default.\n * empty means no media.\n */\n this._currentMediaIndices = [];\n this._api = api;\n }\n OptionManager.prototype.setOption = function (rawOption, optionPreprocessorFuncs, opt) {\n if (rawOption) {\n // That set dat primitive is dangerous if user reuse the data when setOption again.\n each(normalizeToArray(rawOption.series), function (series) {\n series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);\n });\n each(normalizeToArray(rawOption.dataset), function (dataset) {\n dataset && dataset.source && isTypedArray(dataset.source) && setAsPrimitive(dataset.source);\n });\n }\n // Caution: some series modify option data, if do not clone,\n // it should ensure that the repeat modify correctly\n // (create a new object when modify itself).\n rawOption = clone(rawOption);\n // FIXME\n // If some property is set in timeline options or media option but\n // not set in baseOption, a warning should be given.\n var optionBackup = this._optionBackup;\n var newParsedOption = parseRawOption(rawOption, optionPreprocessorFuncs, !optionBackup);\n this._newBaseOption = newParsedOption.baseOption;\n // For setOption at second time (using merge mode);\n if (optionBackup) {\n // FIXME\n // the restore merge solution is essentially incorrect.\n // the mapping can not be 100% consistent with ecModel, which probably brings\n // potential bug!\n // The first merge is delayed, because in most cases, users do not call `setOption` twice.\n // let fakeCmptsMap = this._fakeCmptsMap;\n // if (!fakeCmptsMap) {\n // fakeCmptsMap = this._fakeCmptsMap = createHashMap();\n // mergeToBackupOption(fakeCmptsMap, null, optionBackup.baseOption, null);\n // }\n // mergeToBackupOption(\n // fakeCmptsMap, optionBackup.baseOption, newParsedOption.baseOption, opt\n // );\n // For simplicity, timeline options and media options do not support merge,\n // that is, if you `setOption` twice and both has timeline options, the latter\n // timeline options will not be merged to the former, but just substitute them.\n if (newParsedOption.timelineOptions.length) {\n optionBackup.timelineOptions = newParsedOption.timelineOptions;\n }\n if (newParsedOption.mediaList.length) {\n optionBackup.mediaList = newParsedOption.mediaList;\n }\n if (newParsedOption.mediaDefault) {\n optionBackup.mediaDefault = newParsedOption.mediaDefault;\n }\n } else {\n this._optionBackup = newParsedOption;\n }\n };\n OptionManager.prototype.mountOption = function (isRecreate) {\n var optionBackup = this._optionBackup;\n this._timelineOptions = optionBackup.timelineOptions;\n this._mediaList = optionBackup.mediaList;\n this._mediaDefault = optionBackup.mediaDefault;\n this._currentMediaIndices = [];\n return clone(isRecreate\n // this._optionBackup.baseOption, which is created at the first `setOption`\n // called, and is merged into every new option by inner method `mergeToBackupOption`\n // each time `setOption` called, can be only used in `isRecreate`, because\n // its reliability is under suspicion. In other cases option merge is\n // performed by `model.mergeOption`.\n ? optionBackup.baseOption : this._newBaseOption);\n };\n OptionManager.prototype.getTimelineOption = function (ecModel) {\n var option;\n var timelineOptions = this._timelineOptions;\n if (timelineOptions.length) {\n // getTimelineOption can only be called after ecModel inited,\n // so we can get currentIndex from timelineModel.\n var timelineModel = ecModel.getComponent('timeline');\n if (timelineModel) {\n option = clone(\n // FIXME:TS as TimelineModel or quivlant interface\n timelineOptions[timelineModel.getCurrentIndex()]);\n }\n }\n return option;\n };\n OptionManager.prototype.getMediaOption = function (ecModel) {\n var ecWidth = this._api.getWidth();\n var ecHeight = this._api.getHeight();\n var mediaList = this._mediaList;\n var mediaDefault = this._mediaDefault;\n var indices = [];\n var result = [];\n // No media defined.\n if (!mediaList.length && !mediaDefault) {\n return result;\n }\n // Multi media may be applied, the latter defined media has higher priority.\n for (var i = 0, len = mediaList.length; i < len; i++) {\n if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {\n indices.push(i);\n }\n }\n // FIXME\n // Whether mediaDefault should force users to provide? Otherwise\n // the change by media query can not be recorvered.\n if (!indices.length && mediaDefault) {\n indices = [-1];\n }\n if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {\n result = map(indices, function (index) {\n return clone(index === -1 ? mediaDefault.option : mediaList[index].option);\n });\n }\n // Otherwise return nothing.\n this._currentMediaIndices = indices;\n return result;\n };\n return OptionManager;\n}();\n/**\n * [RAW_OPTION_PATTERNS]\n * (Note: \"series: []\" represents all other props in `ECUnitOption`)\n *\n * (1) No prop \"baseOption\" declared:\n * Root option is used as \"baseOption\" (except prop \"options\" and \"media\").\n * ```js\n * option = {\n * series: [],\n * timeline: {},\n * options: [],\n * };\n * option = {\n * series: [],\n * media: {},\n * };\n * option = {\n * series: [],\n * timeline: {},\n * options: [],\n * media: {},\n * }\n * ```\n *\n * (2) Prop \"baseOption\" declared:\n * If \"baseOption\" declared, `ECUnitOption` props can only be declared\n * inside \"baseOption\" except prop \"timeline\" (compat ec2).\n * ```js\n * option = {\n * baseOption: {\n * timeline: {},\n * series: [],\n * },\n * options: []\n * };\n * option = {\n * baseOption: {\n * series: [],\n * },\n * media: []\n * };\n * option = {\n * baseOption: {\n * timeline: {},\n * series: [],\n * },\n * options: []\n * media: []\n * };\n * option = {\n * // ec3 compat ec2: allow (only) `timeline` declared\n * // outside baseOption. Keep this setting for compat.\n * timeline: {},\n * baseOption: {\n * series: [],\n * },\n * options: [],\n * media: []\n * };\n * ```\n */\nfunction parseRawOption(\n// `rawOption` May be modified\nrawOption, optionPreprocessorFuncs, isNew) {\n var mediaList = [];\n var mediaDefault;\n var baseOption;\n var declaredBaseOption = rawOption.baseOption;\n // Compatible with ec2, [RAW_OPTION_PATTERNS] above.\n var timelineOnRoot = rawOption.timeline;\n var timelineOptionsOnRoot = rawOption.options;\n var mediaOnRoot = rawOption.media;\n var hasMedia = !!rawOption.media;\n var hasTimeline = !!(timelineOptionsOnRoot || timelineOnRoot || declaredBaseOption && declaredBaseOption.timeline);\n if (declaredBaseOption) {\n baseOption = declaredBaseOption;\n // For merge option.\n if (!baseOption.timeline) {\n baseOption.timeline = timelineOnRoot;\n }\n }\n // For convenience, enable to use the root option as the `baseOption`:\n // `{ ...normalOptionProps, media: [{ ... }, { ... }] }`\n else {\n if (hasTimeline || hasMedia) {\n rawOption.options = rawOption.media = null;\n }\n baseOption = rawOption;\n }\n if (hasMedia) {\n if (isArray(mediaOnRoot)) {\n each(mediaOnRoot, function (singleMedia) {\n if (process.env.NODE_ENV !== 'production') {\n // Real case of wrong config.\n if (singleMedia && !singleMedia.option && isObject(singleMedia.query) && isObject(singleMedia.query.option)) {\n error('Illegal media option. Must be like { media: [ { query: {}, option: {} } ] }');\n }\n }\n if (singleMedia && singleMedia.option) {\n if (singleMedia.query) {\n mediaList.push(singleMedia);\n } else if (!mediaDefault) {\n // Use the first media default.\n mediaDefault = singleMedia;\n }\n }\n });\n } else {\n if (process.env.NODE_ENV !== 'production') {\n // Real case of wrong config.\n error('Illegal media option. Must be an array. Like { media: [ {...}, {...} ] }');\n }\n }\n }\n doPreprocess(baseOption);\n each(timelineOptionsOnRoot, function (option) {\n return doPreprocess(option);\n });\n each(mediaList, function (media) {\n return doPreprocess(media.option);\n });\n function doPreprocess(option) {\n each(optionPreprocessorFuncs, function (preProcess) {\n preProcess(option, isNew);\n });\n }\n return {\n baseOption: baseOption,\n timelineOptions: timelineOptionsOnRoot || [],\n mediaDefault: mediaDefault,\n mediaList: mediaList\n };\n}\n/**\n * @see \n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\nfunction applyMediaQuery(query, ecWidth, ecHeight) {\n var realMap = {\n width: ecWidth,\n height: ecHeight,\n aspectratio: ecWidth / ecHeight // lower case for convenience.\n };\n\n var applicable = true;\n each(query, function (value, attr) {\n var matched = attr.match(QUERY_REG);\n if (!matched || !matched[1] || !matched[2]) {\n return;\n }\n var operator = matched[1];\n var realAttr = matched[2].toLowerCase();\n if (!compare(realMap[realAttr], value, operator)) {\n applicable = false;\n }\n });\n return applicable;\n}\nfunction compare(real, expect, operator) {\n if (operator === 'min') {\n return real >= expect;\n } else if (operator === 'max') {\n return real <= expect;\n } else {\n // Equals\n return real === expect;\n }\n}\nfunction indicesEquals(indices1, indices2) {\n // indices is always order by asc and has only finite number.\n return indices1.join(',') === indices2.join(',');\n}\n/**\n * Consider case:\n * `chart.setOption(opt1);`\n * Then user do some interaction like dataZoom, dataView changing.\n * `chart.setOption(opt2);`\n * Then user press 'reset button' in toolbox.\n *\n * After doing that all of the interaction effects should be reset, the\n * chart should be the same as the result of invoke\n * `chart.setOption(opt1); chart.setOption(opt2);`.\n *\n * Although it is not able ensure that\n * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to\n * `chart.setOption(merge(opt1, opt2));` exactly,\n * this might be the only simple way to implement that feature.\n *\n * MEMO: We've considered some other approaches:\n * 1. Each model handles its self restoration but not uniform treatment.\n * (Too complex in logic and error-prone)\n * 2. Use a shadow ecModel. (Performance expensive)\n *\n * FIXME: A possible solution:\n * Add a extra level of model for each component model. The inheritance chain would be:\n * ecModel <- componentModel <- componentActionModel <- dataItemModel\n * And all of the actions can only modify the `componentActionModel` rather than\n * `componentModel`. `setOption` will only modify the `ecModel` and `componentModel`.\n * When \"resotre\" action triggered, model from `componentActionModel` will be discarded\n * instead of recreating the \"ecModel\" from the \"_optionBackup\".\n */\n// function mergeToBackupOption(\n// fakeCmptsMap: FakeComponentsMap,\n// // `tarOption` Can be null/undefined, means init\n// tarOption: ECUnitOption,\n// newOption: ECUnitOption,\n// // Can be null/undefined\n// opt: InnerSetOptionOpts\n// ): void {\n// newOption = newOption || {} as ECUnitOption;\n// const notInit = !!tarOption;\n// each(newOption, function (newOptsInMainType, mainType) {\n// if (newOptsInMainType == null) {\n// return;\n// }\n// if (!ComponentModel.hasClass(mainType)) {\n// if (tarOption) {\n// tarOption[mainType] = merge(tarOption[mainType], newOptsInMainType, true);\n// }\n// }\n// else {\n// const oldTarOptsInMainType = notInit ? normalizeToArray(tarOption[mainType]) : null;\n// const oldFakeCmptsInMainType = fakeCmptsMap.get(mainType) || [];\n// const resultTarOptsInMainType = notInit ? (tarOption[mainType] = [] as ComponentOption[]) : null;\n// const resultFakeCmptsInMainType = fakeCmptsMap.set(mainType, []);\n// const mappingResult = mappingToExists(\n// oldFakeCmptsInMainType,\n// normalizeToArray(newOptsInMainType),\n// (opt && opt.replaceMergeMainTypeMap.get(mainType)) ? 'replaceMerge' : 'normalMerge'\n// );\n// setComponentTypeToKeyInfo(mappingResult, mainType, ComponentModel as ComponentModelConstructor);\n// each(mappingResult, function (resultItem, index) {\n// // The same logic as `Global.ts#_mergeOption`.\n// let fakeCmpt = resultItem.existing;\n// const newOption = resultItem.newOption;\n// const keyInfo = resultItem.keyInfo;\n// let fakeCmptOpt;\n// if (!newOption) {\n// fakeCmptOpt = oldTarOptsInMainType[index];\n// }\n// else {\n// if (fakeCmpt && fakeCmpt.subType === keyInfo.subType) {\n// fakeCmpt.name = keyInfo.name;\n// if (notInit) {\n// fakeCmptOpt = merge(oldTarOptsInMainType[index], newOption, true);\n// }\n// }\n// else {\n// fakeCmpt = extend({}, keyInfo);\n// if (notInit) {\n// fakeCmptOpt = clone(newOption);\n// }\n// }\n// }\n// if (fakeCmpt) {\n// notInit && resultTarOptsInMainType.push(fakeCmptOpt);\n// resultFakeCmptsInMainType.push(fakeCmpt);\n// }\n// else {\n// notInit && resultTarOptsInMainType.push(void 0);\n// resultFakeCmptsInMainType.push(void 0);\n// }\n// });\n// }\n// });\n// }\nexport default OptionManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport { deprecateLog, deprecateReplaceLog } from '../../util/log.js';\nvar each = zrUtil.each;\nvar isObject = zrUtil.isObject;\nvar POSSIBLE_STYLES = ['areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle', 'chordStyle', 'label', 'labelLine'];\nfunction compatEC2ItemStyle(opt) {\n var itemStyleOpt = opt && opt.itemStyle;\n if (!itemStyleOpt) {\n return;\n }\n for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {\n var styleName = POSSIBLE_STYLES[i];\n var normalItemStyleOpt = itemStyleOpt.normal;\n var emphasisItemStyleOpt = itemStyleOpt.emphasis;\n if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(\"itemStyle.normal.\" + styleName, styleName);\n }\n opt[styleName] = opt[styleName] || {};\n if (!opt[styleName].normal) {\n opt[styleName].normal = normalItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n }\n normalItemStyleOpt[styleName] = null;\n }\n if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(\"itemStyle.emphasis.\" + styleName, \"emphasis.\" + styleName);\n }\n opt[styleName] = opt[styleName] || {};\n if (!opt[styleName].emphasis) {\n opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n } else {\n zrUtil.merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n }\n emphasisItemStyleOpt[styleName] = null;\n }\n }\n}\nfunction convertNormalEmphasis(opt, optType, useExtend) {\n if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {\n var normalOpt = opt[optType].normal;\n var emphasisOpt = opt[optType].emphasis;\n if (normalOpt) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line max-len\n deprecateLog(\"'normal' hierarchy in \" + optType + \" has been removed since 4.0. All style properties are configured in \" + optType + \" directly now.\");\n }\n // Timeline controlStyle has other properties besides normal and emphasis\n if (useExtend) {\n opt[optType].normal = opt[optType].emphasis = null;\n zrUtil.defaults(opt[optType], normalOpt);\n } else {\n opt[optType] = normalOpt;\n }\n }\n if (emphasisOpt) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog(optType + \".emphasis has been changed to emphasis.\" + optType + \" since 4.0\");\n }\n opt.emphasis = opt.emphasis || {};\n opt.emphasis[optType] = emphasisOpt;\n // Also compat the case user mix the style and focus together in ec3 style\n // for example: { itemStyle: { normal: {}, emphasis: {focus, shadowBlur} } }\n if (emphasisOpt.focus) {\n opt.emphasis.focus = emphasisOpt.focus;\n }\n if (emphasisOpt.blurScope) {\n opt.emphasis.blurScope = emphasisOpt.blurScope;\n }\n }\n }\n}\nfunction removeEC3NormalStatus(opt) {\n convertNormalEmphasis(opt, 'itemStyle');\n convertNormalEmphasis(opt, 'lineStyle');\n convertNormalEmphasis(opt, 'areaStyle');\n convertNormalEmphasis(opt, 'label');\n convertNormalEmphasis(opt, 'labelLine');\n // treemap\n convertNormalEmphasis(opt, 'upperLabel');\n // graph\n convertNormalEmphasis(opt, 'edgeLabel');\n}\nfunction compatTextStyle(opt, propName) {\n // Check whether is not object (string\\null\\undefined ...)\n var labelOptSingle = isObject(opt) && opt[propName];\n var textStyle = isObject(labelOptSingle) && labelOptSingle.textStyle;\n if (textStyle) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line max-len\n deprecateLog(\"textStyle hierarchy in \" + propName + \" has been removed since 4.0. All textStyle properties are configured in \" + propName + \" directly now.\");\n }\n for (var i = 0, len = modelUtil.TEXT_STYLE_OPTIONS.length; i < len; i++) {\n var textPropName = modelUtil.TEXT_STYLE_OPTIONS[i];\n if (textStyle.hasOwnProperty(textPropName)) {\n labelOptSingle[textPropName] = textStyle[textPropName];\n }\n }\n }\n}\nfunction compatEC3CommonStyles(opt) {\n if (opt) {\n removeEC3NormalStatus(opt);\n compatTextStyle(opt, 'label');\n opt.emphasis && compatTextStyle(opt.emphasis, 'label');\n }\n}\nfunction processSeries(seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n compatEC2ItemStyle(seriesOpt);\n removeEC3NormalStatus(seriesOpt);\n compatTextStyle(seriesOpt, 'label');\n // treemap\n compatTextStyle(seriesOpt, 'upperLabel');\n // graph\n compatTextStyle(seriesOpt, 'edgeLabel');\n if (seriesOpt.emphasis) {\n compatTextStyle(seriesOpt.emphasis, 'label');\n // treemap\n compatTextStyle(seriesOpt.emphasis, 'upperLabel');\n // graph\n compatTextStyle(seriesOpt.emphasis, 'edgeLabel');\n }\n var markPoint = seriesOpt.markPoint;\n if (markPoint) {\n compatEC2ItemStyle(markPoint);\n compatEC3CommonStyles(markPoint);\n }\n var markLine = seriesOpt.markLine;\n if (markLine) {\n compatEC2ItemStyle(markLine);\n compatEC3CommonStyles(markLine);\n }\n var markArea = seriesOpt.markArea;\n if (markArea) {\n compatEC3CommonStyles(markArea);\n }\n var data = seriesOpt.data;\n // Break with ec3: if `setOption` again, there may be no `type` in option,\n // then the backward compat based on option type will not be performed.\n if (seriesOpt.type === 'graph') {\n data = data || seriesOpt.nodes;\n var edgeData = seriesOpt.links || seriesOpt.edges;\n if (edgeData && !zrUtil.isTypedArray(edgeData)) {\n for (var i = 0; i < edgeData.length; i++) {\n compatEC3CommonStyles(edgeData[i]);\n }\n }\n zrUtil.each(seriesOpt.categories, function (opt) {\n removeEC3NormalStatus(opt);\n });\n }\n if (data && !zrUtil.isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n compatEC3CommonStyles(data[i]);\n }\n }\n // mark point data\n markPoint = seriesOpt.markPoint;\n if (markPoint && markPoint.data) {\n var mpData = markPoint.data;\n for (var i = 0; i < mpData.length; i++) {\n compatEC3CommonStyles(mpData[i]);\n }\n }\n // mark line data\n markLine = seriesOpt.markLine;\n if (markLine && markLine.data) {\n var mlData = markLine.data;\n for (var i = 0; i < mlData.length; i++) {\n if (zrUtil.isArray(mlData[i])) {\n compatEC3CommonStyles(mlData[i][0]);\n compatEC3CommonStyles(mlData[i][1]);\n } else {\n compatEC3CommonStyles(mlData[i]);\n }\n }\n }\n // Series\n if (seriesOpt.type === 'gauge') {\n compatTextStyle(seriesOpt, 'axisLabel');\n compatTextStyle(seriesOpt, 'title');\n compatTextStyle(seriesOpt, 'detail');\n } else if (seriesOpt.type === 'treemap') {\n convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');\n zrUtil.each(seriesOpt.levels, function (opt) {\n removeEC3NormalStatus(opt);\n });\n } else if (seriesOpt.type === 'tree') {\n removeEC3NormalStatus(seriesOpt.leaves);\n }\n // sunburst starts from ec4, so it does not need to compat levels.\n}\n\nfunction toArr(o) {\n return zrUtil.isArray(o) ? o : o ? [o] : [];\n}\nfunction toObj(o) {\n return (zrUtil.isArray(o) ? o[0] : o) || {};\n}\nexport default function globalCompatStyle(option, isTheme) {\n each(toArr(option.series), function (seriesOpt) {\n isObject(seriesOpt) && processSeries(seriesOpt);\n });\n var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n each(axes, function (axisName) {\n each(toArr(option[axisName]), function (axisOpt) {\n if (axisOpt) {\n compatTextStyle(axisOpt, 'axisLabel');\n compatTextStyle(axisOpt.axisPointer, 'label');\n }\n });\n });\n each(toArr(option.parallel), function (parallelOpt) {\n var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n compatTextStyle(parallelAxisDefault, 'axisLabel');\n compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\n });\n each(toArr(option.calendar), function (calendarOpt) {\n convertNormalEmphasis(calendarOpt, 'itemStyle');\n compatTextStyle(calendarOpt, 'dayLabel');\n compatTextStyle(calendarOpt, 'monthLabel');\n compatTextStyle(calendarOpt, 'yearLabel');\n });\n // radar.name.textStyle\n each(toArr(option.radar), function (radarOpt) {\n compatTextStyle(radarOpt, 'name');\n // Use axisName instead of name because component has name property\n if (radarOpt.name && radarOpt.axisName == null) {\n radarOpt.axisName = radarOpt.name;\n delete radarOpt.name;\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('name property in radar component has been changed to axisName');\n }\n }\n if (radarOpt.nameGap != null && radarOpt.axisNameGap == null) {\n radarOpt.axisNameGap = radarOpt.nameGap;\n delete radarOpt.nameGap;\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('nameGap property in radar component has been changed to axisNameGap');\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n each(radarOpt.indicator, function (indicatorOpt) {\n if (indicatorOpt.text) {\n deprecateReplaceLog('text', 'name', 'radar.indicator');\n }\n });\n }\n });\n each(toArr(option.geo), function (geoOpt) {\n if (isObject(geoOpt)) {\n compatEC3CommonStyles(geoOpt);\n each(toArr(geoOpt.regions), function (regionObj) {\n compatEC3CommonStyles(regionObj);\n });\n }\n });\n each(toArr(option.timeline), function (timelineOpt) {\n compatEC3CommonStyles(timelineOpt);\n convertNormalEmphasis(timelineOpt, 'label');\n convertNormalEmphasis(timelineOpt, 'itemStyle');\n convertNormalEmphasis(timelineOpt, 'controlStyle', true);\n var data = timelineOpt.data;\n zrUtil.isArray(data) && zrUtil.each(data, function (item) {\n if (zrUtil.isObject(item)) {\n convertNormalEmphasis(item, 'label');\n convertNormalEmphasis(item, 'itemStyle');\n }\n });\n });\n each(toArr(option.toolbox), function (toolboxOpt) {\n convertNormalEmphasis(toolboxOpt, 'iconStyle');\n each(toolboxOpt.feature, function (featureOpt) {\n convertNormalEmphasis(featureOpt, 'iconStyle');\n });\n });\n compatTextStyle(toObj(option.axisPointer), 'label');\n compatTextStyle(toObj(option.tooltip).axisPointer, 'label');\n // Clean logs\n // storedLogs = {};\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, isArray, isObject, isTypedArray, defaults } from 'zrender/lib/core/util.js';\nimport compatStyle from './helper/compatStyle.js';\nimport { normalizeToArray } from '../util/model.js';\nimport { deprecateLog, deprecateReplaceLog } from '../util/log.js';\nfunction get(opt, path) {\n var pathArr = path.split(',');\n var obj = opt;\n for (var i = 0; i < pathArr.length; i++) {\n obj = obj && obj[pathArr[i]];\n if (obj == null) {\n break;\n }\n }\n return obj;\n}\nfunction set(opt, path, val, overwrite) {\n var pathArr = path.split(',');\n var obj = opt;\n var key;\n var i = 0;\n for (; i < pathArr.length - 1; i++) {\n key = pathArr[i];\n if (obj[key] == null) {\n obj[key] = {};\n }\n obj = obj[key];\n }\n if (overwrite || obj[pathArr[i]] == null) {\n obj[pathArr[i]] = val;\n }\n}\nfunction compatLayoutProperties(option) {\n option && each(LAYOUT_PROPERTIES, function (prop) {\n if (prop[0] in option && !(prop[1] in option)) {\n option[prop[1]] = option[prop[0]];\n }\n });\n}\nvar LAYOUT_PROPERTIES = [['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']];\nvar COMPATITABLE_COMPONENTS = ['grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'];\nvar BAR_ITEM_STYLE_MAP = [['borderRadius', 'barBorderRadius'], ['borderColor', 'barBorderColor'], ['borderWidth', 'barBorderWidth']];\nfunction compatBarItemStyle(option) {\n var itemStyle = option && option.itemStyle;\n if (itemStyle) {\n for (var i = 0; i < BAR_ITEM_STYLE_MAP.length; i++) {\n var oldName = BAR_ITEM_STYLE_MAP[i][1];\n var newName = BAR_ITEM_STYLE_MAP[i][0];\n if (itemStyle[oldName] != null) {\n itemStyle[newName] = itemStyle[oldName];\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(oldName, newName);\n }\n }\n }\n }\n}\nfunction compatPieLabel(option) {\n if (!option) {\n return;\n }\n if (option.alignTo === 'edge' && option.margin != null && option.edgeDistance == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('label.margin', 'label.edgeDistance', 'pie');\n }\n option.edgeDistance = option.margin;\n }\n}\nfunction compatSunburstState(option) {\n if (!option) {\n return;\n }\n if (option.downplay && !option.blur) {\n option.blur = option.downplay;\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('downplay', 'blur', 'sunburst');\n }\n }\n}\nfunction compatGraphFocus(option) {\n if (!option) {\n return;\n }\n if (option.focusNodeAdjacency != null) {\n option.emphasis = option.emphasis || {};\n if (option.emphasis.focus == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('focusNodeAdjacency', 'emphasis: { focus: \\'adjacency\\'}', 'graph/sankey');\n }\n option.emphasis.focus = 'adjacency';\n }\n }\n}\nfunction traverseTree(data, cb) {\n if (data) {\n for (var i = 0; i < data.length; i++) {\n cb(data[i]);\n data[i] && traverseTree(data[i].children, cb);\n }\n }\n}\nexport default function globalBackwardCompat(option, isTheme) {\n compatStyle(option, isTheme);\n // Make sure series array for model initialization.\n option.series = normalizeToArray(option.series);\n each(option.series, function (seriesOpt) {\n if (!isObject(seriesOpt)) {\n return;\n }\n var seriesType = seriesOpt.type;\n if (seriesType === 'line') {\n if (seriesOpt.clipOverflow != null) {\n seriesOpt.clip = seriesOpt.clipOverflow;\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('clipOverflow', 'clip', 'line');\n }\n }\n } else if (seriesType === 'pie' || seriesType === 'gauge') {\n if (seriesOpt.clockWise != null) {\n seriesOpt.clockwise = seriesOpt.clockWise;\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('clockWise', 'clockwise');\n }\n }\n compatPieLabel(seriesOpt.label);\n var data = seriesOpt.data;\n if (data && !isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n compatPieLabel(data[i]);\n }\n }\n if (seriesOpt.hoverOffset != null) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n if (seriesOpt.emphasis.scaleSize = null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('hoverOffset', 'emphasis.scaleSize');\n }\n seriesOpt.emphasis.scaleSize = seriesOpt.hoverOffset;\n }\n }\n } else if (seriesType === 'gauge') {\n var pointerColor = get(seriesOpt, 'pointer.color');\n pointerColor != null && set(seriesOpt, 'itemStyle.color', pointerColor);\n } else if (seriesType === 'bar') {\n compatBarItemStyle(seriesOpt);\n compatBarItemStyle(seriesOpt.backgroundStyle);\n compatBarItemStyle(seriesOpt.emphasis);\n var data = seriesOpt.data;\n if (data && !isTypedArray(data)) {\n for (var i = 0; i < data.length; i++) {\n if (typeof data[i] === 'object') {\n compatBarItemStyle(data[i]);\n compatBarItemStyle(data[i] && data[i].emphasis);\n }\n }\n }\n } else if (seriesType === 'sunburst') {\n var highlightPolicy = seriesOpt.highlightPolicy;\n if (highlightPolicy) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n if (!seriesOpt.emphasis.focus) {\n seriesOpt.emphasis.focus = highlightPolicy;\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('highlightPolicy', 'emphasis.focus', 'sunburst');\n }\n }\n }\n compatSunburstState(seriesOpt);\n traverseTree(seriesOpt.data, compatSunburstState);\n } else if (seriesType === 'graph' || seriesType === 'sankey') {\n compatGraphFocus(seriesOpt);\n // TODO nodes, edges?\n } else if (seriesType === 'map') {\n if (seriesOpt.mapType && !seriesOpt.map) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('mapType', 'map', 'map');\n }\n seriesOpt.map = seriesOpt.mapType;\n }\n if (seriesOpt.mapLocation) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('`mapLocation` is not used anymore.');\n }\n defaults(seriesOpt, seriesOpt.mapLocation);\n }\n }\n if (seriesOpt.hoverAnimation != null) {\n seriesOpt.emphasis = seriesOpt.emphasis || {};\n if (seriesOpt.emphasis && seriesOpt.emphasis.scale == null) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('hoverAnimation', 'emphasis.scale');\n }\n seriesOpt.emphasis.scale = seriesOpt.hoverAnimation;\n }\n }\n compatLayoutProperties(seriesOpt);\n });\n // dataRange has changed to visualMap\n if (option.dataRange) {\n option.visualMap = option.dataRange;\n }\n each(COMPATITABLE_COMPONENTS, function (componentName) {\n var options = option[componentName];\n if (options) {\n if (!isArray(options)) {\n options = [options];\n }\n each(options, function (option) {\n compatLayoutProperties(option);\n });\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, each } from 'zrender/lib/core/util.js';\nimport { addSafe } from '../util/number.js';\n// (1) [Caution]: the logic is correct based on the premises:\n// data processing stage is blocked in stream.\n// See \n// (2) Only register once when import repeatedly.\n// Should be executed after series is filtered and before stack calculation.\nexport default function dataStack(ecModel) {\n var stackInfoMap = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var stack = seriesModel.get('stack');\n // Compatible: when `stack` is set as '', do not stack.\n if (stack) {\n var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);\n var data = seriesModel.getData();\n var stackInfo = {\n // Used for calculate axis extent automatically.\n // TODO: Type getCalculationInfo return more specific type?\n stackResultDimension: data.getCalculationInfo('stackResultDimension'),\n stackedOverDimension: data.getCalculationInfo('stackedOverDimension'),\n stackedDimension: data.getCalculationInfo('stackedDimension'),\n stackedByDimension: data.getCalculationInfo('stackedByDimension'),\n isStackedByIndex: data.getCalculationInfo('isStackedByIndex'),\n data: data,\n seriesModel: seriesModel\n };\n // If stacked on axis that do not support data stack.\n if (!stackInfo.stackedDimension || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)) {\n return;\n }\n stackInfoList.length && data.setCalculationInfo('stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel);\n stackInfoList.push(stackInfo);\n }\n });\n stackInfoMap.each(calculateStack);\n}\nfunction calculateStack(stackInfoList) {\n each(stackInfoList, function (targetStackInfo, idxInStack) {\n var resultVal = [];\n var resultNaN = [NaN, NaN];\n var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];\n var targetData = targetStackInfo.data;\n var isStackedByIndex = targetStackInfo.isStackedByIndex;\n var stackStrategy = targetStackInfo.seriesModel.get('stackStrategy') || 'samesign';\n // Should not write on raw data, because stack series model list changes\n // depending on legend selection.\n targetData.modify(dims, function (v0, v1, dataIndex) {\n var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex);\n // Consider `connectNulls` of line area, if value is NaN, stackedOver\n // should also be NaN, to draw a appropriate belt area.\n if (isNaN(sum)) {\n return resultNaN;\n }\n var byValue;\n var stackedDataRawIndex;\n if (isStackedByIndex) {\n stackedDataRawIndex = targetData.getRawIndex(dataIndex);\n } else {\n byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);\n }\n // If stackOver is NaN, chart view will render point on value start.\n var stackedOver = NaN;\n for (var j = idxInStack - 1; j >= 0; j--) {\n var stackInfo = stackInfoList[j];\n // Has been optimized by inverted indices on `stackedByDimension`.\n if (!isStackedByIndex) {\n stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);\n }\n if (stackedDataRawIndex >= 0) {\n var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex);\n // Considering positive stack, negative stack and empty data\n if (stackStrategy === 'all' // single stack group\n || stackStrategy === 'positive' && val > 0 || stackStrategy === 'negative' && val < 0 || stackStrategy === 'samesign' && sum >= 0 && val > 0 // All positive stack\n || stackStrategy === 'samesign' && sum <= 0 && val < 0 // All negative stack\n ) {\n // The sum has to be very small to be affected by the\n // floating arithmetic problem. An incorrect result will probably\n // cause axis min/max to be filtered incorrectly.\n sum = addSafe(sum, val);\n stackedOver = val;\n break;\n }\n }\n }\n resultVal[0] = sum;\n resultVal[1] = stackedOver;\n return resultVal;\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isTypedArray, clone, createHashMap, isArray, isObject, isArrayLike, hasOwn, assert, each, map, isNumber, isString, keys } from 'zrender/lib/core/util.js';\nimport { SOURCE_FORMAT_ORIGINAL, SERIES_LAYOUT_BY_COLUMN, SOURCE_FORMAT_UNKNOWN, SOURCE_FORMAT_KEYED_COLUMNS, SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ARRAY_ROWS, SOURCE_FORMAT_OBJECT_ROWS, SERIES_LAYOUT_BY_ROW } from '../util/types.js';\nimport { getDataItemValue } from '../util/model.js';\nimport { BE_ORDINAL, guessOrdinal } from './helper/sourceHelper.js';\n;\n// @inner\nvar SourceImpl = /** @class */function () {\n function SourceImpl(fields) {\n this.data = fields.data || (fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []);\n this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;\n // Visit config\n this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;\n this.startIndex = fields.startIndex || 0;\n this.dimensionsDetectedCount = fields.dimensionsDetectedCount;\n this.metaRawOption = fields.metaRawOption;\n var dimensionsDefine = this.dimensionsDefine = fields.dimensionsDefine;\n if (dimensionsDefine) {\n for (var i = 0; i < dimensionsDefine.length; i++) {\n var dim = dimensionsDefine[i];\n if (dim.type == null) {\n if (guessOrdinal(this, i) === BE_ORDINAL.Must) {\n dim.type = 'ordinal';\n }\n }\n }\n }\n }\n return SourceImpl;\n}();\nexport function isSourceInstance(val) {\n return val instanceof SourceImpl;\n}\n/**\n * Create a source from option.\n * NOTE: Created source is immutable. Don't change any properties in it.\n */\nexport function createSource(sourceData, thisMetaRawOption,\n// can be null. If not provided, auto detect it from `sourceData`.\nsourceFormat) {\n sourceFormat = sourceFormat || detectSourceFormat(sourceData);\n var seriesLayoutBy = thisMetaRawOption.seriesLayoutBy;\n var determined = determineSourceDimensions(sourceData, sourceFormat, seriesLayoutBy, thisMetaRawOption.sourceHeader, thisMetaRawOption.dimensions);\n var source = new SourceImpl({\n data: sourceData,\n sourceFormat: sourceFormat,\n seriesLayoutBy: seriesLayoutBy,\n dimensionsDefine: determined.dimensionsDefine,\n startIndex: determined.startIndex,\n dimensionsDetectedCount: determined.dimensionsDetectedCount,\n metaRawOption: clone(thisMetaRawOption)\n });\n return source;\n}\n/**\n * Wrap original series data for some compatibility cases.\n */\nexport function createSourceFromSeriesDataOption(data) {\n return new SourceImpl({\n data: data,\n sourceFormat: isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL\n });\n}\n/**\n * Clone source but excludes source data.\n */\nexport function cloneSourceShallow(source) {\n return new SourceImpl({\n data: source.data,\n sourceFormat: source.sourceFormat,\n seriesLayoutBy: source.seriesLayoutBy,\n dimensionsDefine: clone(source.dimensionsDefine),\n startIndex: source.startIndex,\n dimensionsDetectedCount: source.dimensionsDetectedCount\n });\n}\n/**\n * Note: An empty array will be detected as `SOURCE_FORMAT_ARRAY_ROWS`.\n */\nexport function detectSourceFormat(data) {\n var sourceFormat = SOURCE_FORMAT_UNKNOWN;\n if (isTypedArray(data)) {\n sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;\n } else if (isArray(data)) {\n // FIXME Whether tolerate null in top level array?\n if (data.length === 0) {\n sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n }\n for (var i = 0, len = data.length; i < len; i++) {\n var item = data[i];\n if (item == null) {\n continue;\n } else if (isArray(item) || isTypedArray(item)) {\n sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n break;\n } else if (isObject(item)) {\n sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;\n break;\n }\n }\n } else if (isObject(data)) {\n for (var key in data) {\n if (hasOwn(data, key) && isArrayLike(data[key])) {\n sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;\n break;\n }\n }\n }\n return sourceFormat;\n}\n/**\n * Determine the source definitions from data standalone dimensions definitions\n * are not specified.\n */\nfunction determineSourceDimensions(data, sourceFormat, seriesLayoutBy, sourceHeader,\n// standalone raw dimensions definition, like:\n// {\n// dimensions: ['aa', 'bb', { name: 'cc', type: 'time' }]\n// }\n// in `dataset` or `series`\ndimensionsDefine) {\n var dimensionsDetectedCount;\n var startIndex;\n // PENDING: Could data be null/undefined here?\n // currently, if `dataset.source` not specified, error thrown.\n // if `series.data` not specified, nothing rendered without error thrown.\n // Should test these cases.\n if (!data) {\n return {\n dimensionsDefine: normalizeDimensionsOption(dimensionsDefine),\n startIndex: startIndex,\n dimensionsDetectedCount: dimensionsDetectedCount\n };\n }\n if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n var dataArrayRows = data;\n // Rule: Most of the first line are string: it is header.\n // Caution: consider a line with 5 string and 1 number,\n // it still can not be sure it is a head, because the\n // 5 string may be 5 values of category columns.\n if (sourceHeader === 'auto' || sourceHeader == null) {\n arrayRowsTravelFirst(function (val) {\n // '-' is regarded as null/undefined.\n if (val != null && val !== '-') {\n if (isString(val)) {\n startIndex == null && (startIndex = 1);\n } else {\n startIndex = 0;\n }\n }\n // 10 is an experience number, avoid long loop.\n }, seriesLayoutBy, dataArrayRows, 10);\n } else {\n startIndex = isNumber(sourceHeader) ? sourceHeader : sourceHeader ? 1 : 0;\n }\n if (!dimensionsDefine && startIndex === 1) {\n dimensionsDefine = [];\n arrayRowsTravelFirst(function (val, index) {\n dimensionsDefine[index] = val != null ? val + '' : '';\n }, seriesLayoutBy, dataArrayRows, Infinity);\n }\n dimensionsDetectedCount = dimensionsDefine ? dimensionsDefine.length : seriesLayoutBy === SERIES_LAYOUT_BY_ROW ? dataArrayRows.length : dataArrayRows[0] ? dataArrayRows[0].length : null;\n } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n if (!dimensionsDefine) {\n dimensionsDefine = objectRowsCollectDimensions(data);\n }\n } else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n if (!dimensionsDefine) {\n dimensionsDefine = [];\n each(data, function (colArr, key) {\n dimensionsDefine.push(key);\n });\n }\n } else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n var value0 = getDataItemValue(data[0]);\n dimensionsDetectedCount = isArray(value0) && value0.length || 1;\n } else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n if (process.env.NODE_ENV !== 'production') {\n assert(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.');\n }\n }\n return {\n startIndex: startIndex,\n dimensionsDefine: normalizeDimensionsOption(dimensionsDefine),\n dimensionsDetectedCount: dimensionsDetectedCount\n };\n}\nfunction objectRowsCollectDimensions(data) {\n var firstIndex = 0;\n var obj;\n while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line\n if (obj) {\n return keys(obj);\n }\n}\n// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],\n// which is reasonable. But dimension name is duplicated.\n// Returns undefined or an array contains only object without null/undefined or string.\nfunction normalizeDimensionsOption(dimensionsDefine) {\n if (!dimensionsDefine) {\n // The meaning of null/undefined is different from empty array.\n return;\n }\n var nameMap = createHashMap();\n return map(dimensionsDefine, function (rawItem, index) {\n rawItem = isObject(rawItem) ? rawItem : {\n name: rawItem\n };\n // Other fields will be discarded.\n var item = {\n name: rawItem.name,\n displayName: rawItem.displayName,\n type: rawItem.type\n };\n // User can set null in dimensions.\n // We don't auto specify name, otherwise a given name may\n // cause it to be referred unexpectedly.\n if (item.name == null) {\n return item;\n }\n // Also consider number form like 2012.\n item.name += '';\n // User may also specify displayName.\n // displayName will always exists except user not\n // specified or dim name is not specified or detected.\n // (A auto generated dim name will not be used as\n // displayName).\n if (item.displayName == null) {\n item.displayName = item.name;\n }\n var exist = nameMap.get(item.name);\n if (!exist) {\n nameMap.set(item.name, {\n count: 1\n });\n } else {\n item.name += '-' + exist.count++;\n }\n return item;\n });\n}\nfunction arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {\n if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n for (var i = 0; i < data.length && i < maxLoop; i++) {\n cb(data[i] ? data[i][0] : null, i);\n }\n } else {\n var value0 = data[0] || [];\n for (var i = 0; i < value0.length && i < maxLoop; i++) {\n cb(value0[i], i);\n }\n }\n}\nexport function shouldRetrieveDataByName(source) {\n var sourceFormat = source.sourceFormat;\n return sourceFormat === SOURCE_FORMAT_OBJECT_ROWS || sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar _a, _b, _c;\n// TODO\n// ??? refactor? check the outer usage of data provider.\n// merge with defaultDimValueGetter?\nimport { isTypedArray, extend, assert, each, isObject, bind } from 'zrender/lib/core/util.js';\nimport { getDataItemValue } from '../../util/model.js';\nimport { createSourceFromSeriesDataOption, isSourceInstance } from '../Source.js';\nimport { SOURCE_FORMAT_ORIGINAL, SOURCE_FORMAT_OBJECT_ROWS, SOURCE_FORMAT_KEYED_COLUMNS, SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ARRAY_ROWS, SERIES_LAYOUT_BY_COLUMN, SERIES_LAYOUT_BY_ROW } from '../../util/types.js';\nvar providerMethods;\nvar mountMethods;\n/**\n * If normal array used, mutable chunk size is supported.\n * If typed array used, chunk size must be fixed.\n */\nvar DefaultDataProvider = /** @class */function () {\n function DefaultDataProvider(sourceParam, dimSize) {\n // let source: Source;\n var source = !isSourceInstance(sourceParam) ? createSourceFromSeriesDataOption(sourceParam) : sourceParam;\n // declare source is Source;\n this._source = source;\n var data = this._data = source.data;\n // Typed array. TODO IE10+?\n if (source.sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n if (process.env.NODE_ENV !== 'production') {\n if (dimSize == null) {\n throw new Error('Typed array data must specify dimension size');\n }\n }\n this._offset = 0;\n this._dimSize = dimSize;\n this._data = data;\n }\n mountMethods(this, data, source);\n }\n DefaultDataProvider.prototype.getSource = function () {\n return this._source;\n };\n DefaultDataProvider.prototype.count = function () {\n return 0;\n };\n DefaultDataProvider.prototype.getItem = function (idx, out) {\n return;\n };\n DefaultDataProvider.prototype.appendData = function (newData) {};\n DefaultDataProvider.prototype.clean = function () {};\n DefaultDataProvider.protoInitialize = function () {\n // PENDING: To avoid potential incompat (e.g., prototype\n // is visited somewhere), still init them on prototype.\n var proto = DefaultDataProvider.prototype;\n proto.pure = false;\n proto.persistent = true;\n }();\n DefaultDataProvider.internalField = function () {\n var _a;\n mountMethods = function (provider, data, source) {\n var sourceFormat = source.sourceFormat;\n var seriesLayoutBy = source.seriesLayoutBy;\n var startIndex = source.startIndex;\n var dimsDef = source.dimensionsDefine;\n var methods = providerMethods[getMethodMapKey(sourceFormat, seriesLayoutBy)];\n if (process.env.NODE_ENV !== 'production') {\n assert(methods, 'Invalide sourceFormat: ' + sourceFormat);\n }\n extend(provider, methods);\n if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n provider.getItem = getItemForTypedArray;\n provider.count = countForTypedArray;\n provider.fillStorage = fillStorageForTypedArray;\n } else {\n var rawItemGetter = getRawSourceItemGetter(sourceFormat, seriesLayoutBy);\n provider.getItem = bind(rawItemGetter, null, data, startIndex, dimsDef);\n var rawCounter = getRawSourceDataCounter(sourceFormat, seriesLayoutBy);\n provider.count = bind(rawCounter, null, data, startIndex, dimsDef);\n }\n };\n var getItemForTypedArray = function (idx, out) {\n idx = idx - this._offset;\n out = out || [];\n var data = this._data;\n var dimSize = this._dimSize;\n var offset = dimSize * idx;\n for (var i = 0; i < dimSize; i++) {\n out[i] = data[offset + i];\n }\n return out;\n };\n var fillStorageForTypedArray = function (start, end, storage, extent) {\n var data = this._data;\n var dimSize = this._dimSize;\n for (var dim = 0; dim < dimSize; dim++) {\n var dimExtent = extent[dim];\n var min = dimExtent[0] == null ? Infinity : dimExtent[0];\n var max = dimExtent[1] == null ? -Infinity : dimExtent[1];\n var count = end - start;\n var arr = storage[dim];\n for (var i = 0; i < count; i++) {\n // appendData with TypedArray will always do replace in provider.\n var val = data[i * dimSize + dim];\n arr[start + i] = val;\n val < min && (min = val);\n val > max && (max = val);\n }\n dimExtent[0] = min;\n dimExtent[1] = max;\n }\n };\n var countForTypedArray = function () {\n return this._data ? this._data.length / this._dimSize : 0;\n };\n providerMethods = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = {\n pure: true,\n appendData: appendDataSimply\n }, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = {\n pure: true,\n appendData: function () {\n throw new Error('Do not support appendData when set seriesLayoutBy: \"row\".');\n }\n }, _a[SOURCE_FORMAT_OBJECT_ROWS] = {\n pure: true,\n appendData: appendDataSimply\n }, _a[SOURCE_FORMAT_KEYED_COLUMNS] = {\n pure: true,\n appendData: function (newData) {\n var data = this._data;\n each(newData, function (newCol, key) {\n var oldCol = data[key] || (data[key] = []);\n for (var i = 0; i < (newCol || []).length; i++) {\n oldCol.push(newCol[i]);\n }\n });\n }\n }, _a[SOURCE_FORMAT_ORIGINAL] = {\n appendData: appendDataSimply\n }, _a[SOURCE_FORMAT_TYPED_ARRAY] = {\n persistent: false,\n pure: true,\n appendData: function (newData) {\n if (process.env.NODE_ENV !== 'production') {\n assert(isTypedArray(newData), 'Added data must be TypedArray if data in initialization is TypedArray');\n }\n this._data = newData;\n },\n // Clean self if data is already used.\n clean: function () {\n // PENDING\n this._offset += this.count();\n this._data = null;\n }\n }, _a);\n function appendDataSimply(newData) {\n for (var i = 0; i < newData.length; i++) {\n this._data.push(newData[i]);\n }\n }\n }();\n return DefaultDataProvider;\n}();\nexport { DefaultDataProvider };\nvar getItemSimply = function (rawData, startIndex, dimsDef, idx) {\n return rawData[idx];\n};\nvar rawSourceItemGetterMap = (_a = {}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef, idx) {\n return rawData[idx + startIndex];\n}, _a[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef, idx, out) {\n idx += startIndex;\n var item = out || [];\n var data = rawData;\n for (var i = 0; i < data.length; i++) {\n var row = data[i];\n item[i] = row ? row[idx] : null;\n }\n return item;\n}, _a[SOURCE_FORMAT_OBJECT_ROWS] = getItemSimply, _a[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef, idx, out) {\n var item = out || [];\n for (var i = 0; i < dimsDef.length; i++) {\n var dimName = dimsDef[i].name;\n if (process.env.NODE_ENV !== 'production') {\n if (dimName == null) {\n throw new Error();\n }\n }\n var col = rawData[dimName];\n item[i] = col ? col[idx] : null;\n }\n return item;\n}, _a[SOURCE_FORMAT_ORIGINAL] = getItemSimply, _a);\nexport function getRawSourceItemGetter(sourceFormat, seriesLayoutBy) {\n var method = rawSourceItemGetterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)];\n if (process.env.NODE_ENV !== 'production') {\n assert(method, 'Do not support get item on \"' + sourceFormat + '\", \"' + seriesLayoutBy + '\".');\n }\n return method;\n}\nvar countSimply = function (rawData, startIndex, dimsDef) {\n return rawData.length;\n};\nvar rawSourceDataCounterMap = (_b = {}, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_COLUMN] = function (rawData, startIndex, dimsDef) {\n return Math.max(0, rawData.length - startIndex);\n}, _b[SOURCE_FORMAT_ARRAY_ROWS + '_' + SERIES_LAYOUT_BY_ROW] = function (rawData, startIndex, dimsDef) {\n var row = rawData[0];\n return row ? Math.max(0, row.length - startIndex) : 0;\n}, _b[SOURCE_FORMAT_OBJECT_ROWS] = countSimply, _b[SOURCE_FORMAT_KEYED_COLUMNS] = function (rawData, startIndex, dimsDef) {\n var dimName = dimsDef[0].name;\n if (process.env.NODE_ENV !== 'production') {\n if (dimName == null) {\n throw new Error();\n }\n }\n var col = rawData[dimName];\n return col ? col.length : 0;\n}, _b[SOURCE_FORMAT_ORIGINAL] = countSimply, _b);\nexport function getRawSourceDataCounter(sourceFormat, seriesLayoutBy) {\n var method = rawSourceDataCounterMap[getMethodMapKey(sourceFormat, seriesLayoutBy)];\n if (process.env.NODE_ENV !== 'production') {\n assert(method, 'Do not support count on \"' + sourceFormat + '\", \"' + seriesLayoutBy + '\".');\n }\n return method;\n}\nvar getRawValueSimply = function (dataItem, dimIndex, property) {\n return dataItem[dimIndex];\n};\nvar rawSourceValueGetterMap = (_c = {}, _c[SOURCE_FORMAT_ARRAY_ROWS] = getRawValueSimply, _c[SOURCE_FORMAT_OBJECT_ROWS] = function (dataItem, dimIndex, property) {\n return dataItem[property];\n}, _c[SOURCE_FORMAT_KEYED_COLUMNS] = getRawValueSimply, _c[SOURCE_FORMAT_ORIGINAL] = function (dataItem, dimIndex, property) {\n // FIXME: In some case (markpoint in geo (geo-map.html)),\n // dataItem is {coord: [...]}\n var value = getDataItemValue(dataItem);\n return !(value instanceof Array) ? value : value[dimIndex];\n}, _c[SOURCE_FORMAT_TYPED_ARRAY] = getRawValueSimply, _c);\nexport function getRawSourceValueGetter(sourceFormat) {\n var method = rawSourceValueGetterMap[sourceFormat];\n if (process.env.NODE_ENV !== 'production') {\n assert(method, 'Do not support get value on \"' + sourceFormat + '\".');\n }\n return method;\n}\nfunction getMethodMapKey(sourceFormat, seriesLayoutBy) {\n return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS ? sourceFormat + '_' + seriesLayoutBy : sourceFormat;\n}\n// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,\n// Consider persistent.\n// Caution: why use raw value to display on label or tooltip?\n// A reason is to avoid format. For example time value we do not know\n// how to format is expected. More over, if stack is used, calculated\n// value may be 0.91000000001, which have brings trouble to display.\n// TODO: consider how to treat null/undefined/NaN when display?\nexport function retrieveRawValue(data, dataIndex,\n// If dimIndex is null/undefined, return OptionDataItem.\n// Otherwise, return OptionDataValue.\ndim) {\n if (!data) {\n return;\n }\n // Consider data may be not persistent.\n var dataItem = data.getRawDataItem(dataIndex);\n if (dataItem == null) {\n return;\n }\n var store = data.getStore();\n var sourceFormat = store.getSource().sourceFormat;\n if (dim != null) {\n var dimIndex = data.getDimensionIndex(dim);\n var property = store.getDimensionProperty(dimIndex);\n return getRawSourceValueGetter(sourceFormat)(dataItem, dimIndex, property);\n } else {\n var result = dataItem;\n if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n result = getDataItemValue(dataItem);\n }\n return result;\n }\n}\n/**\n * Compatible with some cases (in pie, map) like:\n * data: [{name: 'xx', value: 5, selected: true}, ...]\n * where only sourceFormat is 'original' and 'objectRows' supported.\n *\n * // TODO\n * Supported detail options in data item when using 'arrayRows'.\n *\n * @param data\n * @param dataIndex\n * @param attr like 'selected'\n */\nexport function retrieveRawAttr(data, dataIndex, attr) {\n if (!data) {\n return;\n }\n var sourceFormat = data.getStore().getSource().sourceFormat;\n if (sourceFormat !== SOURCE_FORMAT_ORIGINAL && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS) {\n return;\n }\n var dataItem = data.getRawDataItem(dataIndex);\n if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject(dataItem)) {\n dataItem = null;\n }\n if (dataItem) {\n return dataItem[attr];\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { retrieveRawValue } from '../../data/helper/dataProvider.js';\nimport { formatTpl } from '../../util/format.js';\nimport { error, makePrintable } from '../../util/log.js';\nvar DIMENSION_LABEL_REG = /\\{@(.+?)\\}/g;\nvar DataFormatMixin = /** @class */function () {\n function DataFormatMixin() {}\n /**\n * Get params for formatter\n */\n DataFormatMixin.prototype.getDataParams = function (dataIndex, dataType) {\n var data = this.getData(dataType);\n var rawValue = this.getRawValue(dataIndex, dataType);\n var rawDataIndex = data.getRawIndex(dataIndex);\n var name = data.getName(dataIndex);\n var itemOpt = data.getRawDataItem(dataIndex);\n var style = data.getItemVisual(dataIndex, 'style');\n var color = style && style[data.getItemVisual(dataIndex, 'drawType') || 'fill'];\n var borderColor = style && style.stroke;\n var mainType = this.mainType;\n var isSeries = mainType === 'series';\n var userOutput = data.userOutput && data.userOutput.get();\n return {\n componentType: mainType,\n componentSubType: this.subType,\n componentIndex: this.componentIndex,\n seriesType: isSeries ? this.subType : null,\n seriesIndex: this.seriesIndex,\n seriesId: isSeries ? this.id : null,\n seriesName: isSeries ? this.name : null,\n name: name,\n dataIndex: rawDataIndex,\n data: itemOpt,\n dataType: dataType,\n value: rawValue,\n color: color,\n borderColor: borderColor,\n dimensionNames: userOutput ? userOutput.fullDimensions : null,\n encode: userOutput ? userOutput.encode : null,\n // Param name list for mapping `a`, `b`, `c`, `d`, `e`\n $vars: ['seriesName', 'name', 'value']\n };\n };\n /**\n * Format label\n * @param dataIndex\n * @param status 'normal' by default\n * @param dataType\n * @param labelDimIndex Only used in some chart that\n * use formatter in different dimensions, like radar.\n * @param formatter Formatter given outside.\n * @return return null/undefined if no formatter\n */\n DataFormatMixin.prototype.getFormattedLabel = function (dataIndex, status, dataType, labelDimIndex, formatter, extendParams) {\n status = status || 'normal';\n var data = this.getData(dataType);\n var params = this.getDataParams(dataIndex, dataType);\n if (extendParams) {\n params.value = extendParams.interpolatedValue;\n }\n if (labelDimIndex != null && zrUtil.isArray(params.value)) {\n params.value = params.value[labelDimIndex];\n }\n if (!formatter) {\n var itemModel = data.getItemModel(dataIndex);\n // @ts-ignore\n formatter = itemModel.get(status === 'normal' ? ['label', 'formatter'] : [status, 'label', 'formatter']);\n }\n if (zrUtil.isFunction(formatter)) {\n params.status = status;\n params.dimensionIndex = labelDimIndex;\n return formatter(params);\n } else if (zrUtil.isString(formatter)) {\n var str = formatTpl(formatter, params);\n // Support 'aaa{@[3]}bbb{@product}ccc'.\n // Do not support '}' in dim name util have to.\n return str.replace(DIMENSION_LABEL_REG, function (origin, dimStr) {\n var len = dimStr.length;\n var dimLoose = dimStr;\n if (dimLoose.charAt(0) === '[' && dimLoose.charAt(len - 1) === ']') {\n dimLoose = +dimLoose.slice(1, len - 1); // Also support: '[]' => 0\n if (process.env.NODE_ENV !== 'production') {\n if (isNaN(dimLoose)) {\n error(\"Invalide label formatter: @\" + dimStr + \", only support @[0], @[1], @[2], ...\");\n }\n }\n }\n var val = retrieveRawValue(data, dataIndex, dimLoose);\n if (extendParams && zrUtil.isArray(extendParams.interpolatedValue)) {\n var dimIndex = data.getDimensionIndex(dimLoose);\n if (dimIndex >= 0) {\n val = extendParams.interpolatedValue[dimIndex];\n }\n }\n return val != null ? val + '' : '';\n });\n }\n };\n /**\n * Get raw value in option\n */\n DataFormatMixin.prototype.getRawValue = function (idx, dataType) {\n return retrieveRawValue(this.getData(dataType), idx);\n };\n /**\n * Should be implemented.\n * @param {number} dataIndex\n * @param {boolean} [multipleSeries=false]\n * @param {string} [dataType]\n */\n DataFormatMixin.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n // Empty function\n return;\n };\n return DataFormatMixin;\n}();\nexport { DataFormatMixin };\n;\n// PENDING: previously we accept this type when calling `formatTooltip`,\n// but guess little chance has been used outside. Do we need to backward\n// compat it?\n// type TooltipFormatResultLegacyObject = {\n// // `html` means the markup language text, either in 'html' or 'richText'.\n// // The name `html` is not appropriate because in 'richText' it is not a HTML\n// // string. But still support it for backward compatibility.\n// html: string;\n// markers: Dictionary;\n// };\n/**\n * For backward compat, normalize the return from `formatTooltip`.\n */\nexport function normalizeTooltipFormatResult(result) {\n var markupText;\n // let markers: Dictionary;\n var markupFragment;\n if (zrUtil.isObject(result)) {\n if (result.type) {\n markupFragment = result;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('The return type of `formatTooltip` is not supported: ' + makePrintable(result));\n }\n }\n // else {\n // markupText = (result as TooltipFormatResultLegacyObject).html;\n // markers = (result as TooltipFormatResultLegacyObject).markers;\n // if (markersExisting) {\n // markers = zrUtil.merge(markersExisting, markers);\n // }\n // }\n } else {\n markupText = result;\n }\n return {\n text: markupText,\n // markers: markers || markersExisting,\n frag: markupFragment\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { assert, isArray } from 'zrender/lib/core/util.js';\n;\n/**\n * @param {Object} define\n * @return See the return of `createTask`.\n */\nexport function createTask(define) {\n return new Task(define);\n}\nvar Task = /** @class */function () {\n function Task(define) {\n define = define || {};\n this._reset = define.reset;\n this._plan = define.plan;\n this._count = define.count;\n this._onDirty = define.onDirty;\n this._dirty = true;\n }\n /**\n * @param step Specified step.\n * @param skip Skip customer perform call.\n * @param modBy Sampling window size.\n * @param modDataCount Sampling count.\n * @return whether unfinished.\n */\n Task.prototype.perform = function (performArgs) {\n var upTask = this._upstream;\n var skip = performArgs && performArgs.skip;\n // TODO some refactor.\n // Pull data. Must pull data each time, because context.data\n // may be updated by Series.setData.\n if (this._dirty && upTask) {\n var context = this.context;\n context.data = context.outputData = upTask.context.outputData;\n }\n if (this.__pipeline) {\n this.__pipeline.currentTask = this;\n }\n var planResult;\n if (this._plan && !skip) {\n planResult = this._plan(this.context);\n }\n // Support sharding by mod, which changes the render sequence and makes the rendered graphic\n // elements uniformed distributed when progress, especially when moving or zooming.\n var lastModBy = normalizeModBy(this._modBy);\n var lastModDataCount = this._modDataCount || 0;\n var modBy = normalizeModBy(performArgs && performArgs.modBy);\n var modDataCount = performArgs && performArgs.modDataCount || 0;\n if (lastModBy !== modBy || lastModDataCount !== modDataCount) {\n planResult = 'reset';\n }\n function normalizeModBy(val) {\n !(val >= 1) && (val = 1); // jshint ignore:line\n return val;\n }\n var forceFirstProgress;\n if (this._dirty || planResult === 'reset') {\n this._dirty = false;\n forceFirstProgress = this._doReset(skip);\n }\n this._modBy = modBy;\n this._modDataCount = modDataCount;\n var step = performArgs && performArgs.step;\n if (upTask) {\n if (process.env.NODE_ENV !== 'production') {\n assert(upTask._outputDueEnd != null);\n }\n this._dueEnd = upTask._outputDueEnd;\n }\n // DataTask or overallTask\n else {\n if (process.env.NODE_ENV !== 'production') {\n assert(!this._progress || this._count);\n }\n this._dueEnd = this._count ? this._count(this.context) : Infinity;\n }\n // Note: Stubs, that its host overall task let it has progress, has progress.\n // If no progress, pass index from upstream to downstream each time plan called.\n if (this._progress) {\n var start = this._dueIndex;\n var end = Math.min(step != null ? this._dueIndex + step : Infinity, this._dueEnd);\n if (!skip && (forceFirstProgress || start < end)) {\n var progress = this._progress;\n if (isArray(progress)) {\n for (var i = 0; i < progress.length; i++) {\n this._doProgress(progress[i], start, end, modBy, modDataCount);\n }\n } else {\n this._doProgress(progress, start, end, modBy, modDataCount);\n }\n }\n this._dueIndex = end;\n // If no `outputDueEnd`, assume that output data and\n // input data is the same, so use `dueIndex` as `outputDueEnd`.\n var outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : end;\n if (process.env.NODE_ENV !== 'production') {\n // ??? Can not rollback.\n assert(outputDueEnd >= this._outputDueEnd);\n }\n this._outputDueEnd = outputDueEnd;\n } else {\n // (1) Some overall task has no progress.\n // (2) Stubs, that its host overall task do not let it has progress, has no progress.\n // This should always be performed so it can be passed to downstream.\n this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null ? this._settedOutputEnd : this._dueEnd;\n }\n return this.unfinished();\n };\n Task.prototype.dirty = function () {\n this._dirty = true;\n this._onDirty && this._onDirty(this.context);\n };\n Task.prototype._doProgress = function (progress, start, end, modBy, modDataCount) {\n iterator.reset(start, end, modBy, modDataCount);\n this._callingProgress = progress;\n this._callingProgress({\n start: start,\n end: end,\n count: end - start,\n next: iterator.next\n }, this.context);\n };\n Task.prototype._doReset = function (skip) {\n this._dueIndex = this._outputDueEnd = this._dueEnd = 0;\n this._settedOutputEnd = null;\n var progress;\n var forceFirstProgress;\n if (!skip && this._reset) {\n progress = this._reset(this.context);\n if (progress && progress.progress) {\n forceFirstProgress = progress.forceFirstProgress;\n progress = progress.progress;\n }\n // To simplify no progress checking, array must has item.\n if (isArray(progress) && !progress.length) {\n progress = null;\n }\n }\n this._progress = progress;\n this._modBy = this._modDataCount = null;\n var downstream = this._downstream;\n downstream && downstream.dirty();\n return forceFirstProgress;\n };\n Task.prototype.unfinished = function () {\n return this._progress && this._dueIndex < this._dueEnd;\n };\n /**\n * @param downTask The downstream task.\n * @return The downstream task.\n */\n Task.prototype.pipe = function (downTask) {\n if (process.env.NODE_ENV !== 'production') {\n assert(downTask && !downTask._disposed && downTask !== this);\n }\n // If already downstream, do not dirty downTask.\n if (this._downstream !== downTask || this._dirty) {\n this._downstream = downTask;\n downTask._upstream = this;\n downTask.dirty();\n }\n };\n Task.prototype.dispose = function () {\n if (this._disposed) {\n return;\n }\n this._upstream && (this._upstream._downstream = null);\n this._downstream && (this._downstream._upstream = null);\n this._dirty = false;\n this._disposed = true;\n };\n Task.prototype.getUpstream = function () {\n return this._upstream;\n };\n Task.prototype.getDownstream = function () {\n return this._downstream;\n };\n Task.prototype.setOutputEnd = function (end) {\n // This only happens in dataTask, dataZoom, map, currently.\n // where dataZoom do not set end each time, but only set\n // when reset. So we should record the set end, in case\n // that the stub of dataZoom perform again and earse the\n // set end by upstream.\n this._outputDueEnd = this._settedOutputEnd = end;\n };\n return Task;\n}();\nexport { Task };\nvar iterator = function () {\n var end;\n var current;\n var modBy;\n var modDataCount;\n var winCount;\n var it = {\n reset: function (s, e, sStep, sCount) {\n current = s;\n end = e;\n modBy = sStep;\n modDataCount = sCount;\n winCount = Math.ceil(modDataCount / modBy);\n it.next = modBy > 1 && modDataCount > 0 ? modNext : sequentialNext;\n }\n };\n return it;\n function sequentialNext() {\n return current < end ? current++ : null;\n }\n function modNext() {\n var dataIndex = current % winCount * modBy + Math.ceil(current / winCount);\n var result = current >= end ? null : dataIndex < modDataCount ? dataIndex\n // If modDataCount is smaller than data.count() (consider `appendData` case),\n // Use normal linear rendering mode.\n : current;\n current++;\n return result;\n }\n}();\n// -----------------------------------------------------------------------------\n// For stream debug (Should be commented out after used!)\n// @usage: printTask(this, 'begin');\n// @usage: printTask(this, null, {someExtraProp});\n// @usage: Use `__idxInPipeline` as conditional breakpiont.\n//\n// window.printTask = function (task: any, prefix: string, extra: { [key: string]: unknown }): void {\n// window.ecTaskUID == null && (window.ecTaskUID = 0);\n// task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`);\n// task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`);\n// let props = [];\n// if (task.__pipeline) {\n// let val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`;\n// props.push({text: '__idxInPipeline/total', value: val});\n// } else {\n// let stubCount = 0;\n// task.agentStubMap.each(() => stubCount++);\n// props.push({text: 'idx', value: `overall (stubs: ${stubCount})`});\n// }\n// props.push({text: 'uid', value: task.uidDebug});\n// if (task.__pipeline) {\n// props.push({text: 'pipelineId', value: task.__pipeline.id});\n// task.agent && props.push(\n// {text: 'stubFor', value: task.agent.uidDebug}\n// );\n// }\n// props.push(\n// {text: 'dirty', value: task._dirty},\n// {text: 'dueIndex', value: task._dueIndex},\n// {text: 'dueEnd', value: task._dueEnd},\n// {text: 'outputDueEnd', value: task._outputDueEnd}\n// );\n// if (extra) {\n// Object.keys(extra).forEach(key => {\n// props.push({text: key, value: extra[key]});\n// });\n// }\n// let args = ['color: blue'];\n// let msg = `%c[${prefix || 'T'}] %c` + props.map(item => (\n// args.push('color: green', 'color: red'),\n// `${item.text}: %c${item.value}`\n// )).join('%c, ');\n// console.log.apply(console, [msg].concat(args));\n// // console.log(this);\n// };\n// window.printPipeline = function (task: any, prefix: string) {\n// const pipeline = task.__pipeline;\n// let currTask = pipeline.head;\n// while (currTask) {\n// window.printTask(currTask, prefix);\n// currTask = currTask._downstream;\n// }\n// };\n// window.showChain = function (chainHeadTask) {\n// var chain = [];\n// var task = chainHeadTask;\n// while (task) {\n// chain.push({\n// task: task,\n// up: task._upstream,\n// down: task._downstream,\n// idxInPipeline: task.__idxInPipeline\n// });\n// task = task._downstream;\n// }\n// return chain;\n// };\n// window.findTaskInChain = function (task, chainHeadTask) {\n// let chain = window.showChain(chainHeadTask);\n// let result = [];\n// for (let i = 0; i < chain.length; i++) {\n// let chainItem = chain[i];\n// if (chainItem.task === task) {\n// result.push(i);\n// }\n// }\n// return result;\n// };\n// window.printChainAEachInChainB = function (chainHeadTaskA, chainHeadTaskB) {\n// let chainA = window.showChain(chainHeadTaskA);\n// for (let i = 0; i < chainA.length; i++) {\n// console.log('chainAIdx:', i, 'inChainB:', window.findTaskInChain(chainA[i].task, chainHeadTaskB));\n// }\n// };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parseDate, numericToNumber } from '../../util/number.js';\nimport { createHashMap, trim, hasOwn, isString, isNumber } from 'zrender/lib/core/util.js';\nimport { throwError } from '../../util/log.js';\n/**\n * Convert raw the value in to inner value in List.\n *\n * [Performance sensitive]\n *\n * [Caution]: this is the key logic of user value parser.\n * For backward compatibility, do not modify it until you have to!\n */\nexport function parseDataValue(value,\n// For high performance, do not omit the second param.\nopt) {\n // Performance sensitive.\n var dimType = opt && opt.type;\n if (dimType === 'ordinal') {\n // If given value is a category string\n return value;\n }\n if (dimType === 'time'\n // spead up when using timestamp\n && !isNumber(value) && value != null && value !== '-') {\n value = +parseDate(value);\n }\n // dimType defaults 'number'.\n // If dimType is not ordinal and value is null or undefined or NaN or '-',\n // parse to NaN.\n // number-like string (like ' 123 ') can be converted to a number.\n // where null/undefined or other string will be converted to NaN.\n return value == null || value === '' ? NaN\n // If string (like '-'), using '+' parse to NaN\n // If object, also parse to NaN\n : +value;\n}\n;\nvar valueParserMap = createHashMap({\n 'number': function (val) {\n // Do not use `numericToNumber` here. We have `numericToNumber` by default.\n // Here the number parser can have loose rule:\n // enable to cut suffix: \"120px\" => 120, \"14%\" => 14.\n return parseFloat(val);\n },\n 'time': function (val) {\n // return timestamp.\n return +parseDate(val);\n },\n 'trim': function (val) {\n return isString(val) ? trim(val) : val;\n }\n});\nexport function getRawValueParser(type) {\n return valueParserMap.get(type);\n}\nvar ORDER_COMPARISON_OP_MAP = {\n lt: function (lval, rval) {\n return lval < rval;\n },\n lte: function (lval, rval) {\n return lval <= rval;\n },\n gt: function (lval, rval) {\n return lval > rval;\n },\n gte: function (lval, rval) {\n return lval >= rval;\n }\n};\nvar FilterOrderComparator = /** @class */function () {\n function FilterOrderComparator(op, rval) {\n if (!isNumber(rval)) {\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'rvalue of \"<\", \">\", \"<=\", \">=\" can only be number in filter.';\n }\n throwError(errMsg);\n }\n this._opFn = ORDER_COMPARISON_OP_MAP[op];\n this._rvalFloat = numericToNumber(rval);\n }\n // Performance sensitive.\n FilterOrderComparator.prototype.evaluate = function (lval) {\n // Most cases is 'number', and typeof maybe 10 times faseter than parseFloat.\n return isNumber(lval) ? this._opFn(lval, this._rvalFloat) : this._opFn(numericToNumber(lval), this._rvalFloat);\n };\n return FilterOrderComparator;\n}();\nvar SortOrderComparator = /** @class */function () {\n /**\n * @param order by default: 'asc'\n * @param incomparable by default: Always on the tail.\n * That is, if 'asc' => 'max', if 'desc' => 'min'\n * See the definition of \"incomparable\" in [SORT_COMPARISON_RULE].\n */\n function SortOrderComparator(order, incomparable) {\n var isDesc = order === 'desc';\n this._resultLT = isDesc ? 1 : -1;\n if (incomparable == null) {\n incomparable = isDesc ? 'min' : 'max';\n }\n this._incomparable = incomparable === 'min' ? -Infinity : Infinity;\n }\n // See [SORT_COMPARISON_RULE].\n // Performance sensitive.\n SortOrderComparator.prototype.evaluate = function (lval, rval) {\n // Most cases is 'number', and typeof maybe 10 times faseter than parseFloat.\n var lvalFloat = isNumber(lval) ? lval : numericToNumber(lval);\n var rvalFloat = isNumber(rval) ? rval : numericToNumber(rval);\n var lvalNotNumeric = isNaN(lvalFloat);\n var rvalNotNumeric = isNaN(rvalFloat);\n if (lvalNotNumeric) {\n lvalFloat = this._incomparable;\n }\n if (rvalNotNumeric) {\n rvalFloat = this._incomparable;\n }\n if (lvalNotNumeric && rvalNotNumeric) {\n var lvalIsStr = isString(lval);\n var rvalIsStr = isString(rval);\n if (lvalIsStr) {\n lvalFloat = rvalIsStr ? lval : 0;\n }\n if (rvalIsStr) {\n rvalFloat = lvalIsStr ? rval : 0;\n }\n }\n return lvalFloat < rvalFloat ? this._resultLT : lvalFloat > rvalFloat ? -this._resultLT : 0;\n };\n return SortOrderComparator;\n}();\nexport { SortOrderComparator };\nvar FilterEqualityComparator = /** @class */function () {\n function FilterEqualityComparator(isEq, rval) {\n this._rval = rval;\n this._isEQ = isEq;\n this._rvalTypeof = typeof rval;\n this._rvalFloat = numericToNumber(rval);\n }\n // Performance sensitive.\n FilterEqualityComparator.prototype.evaluate = function (lval) {\n var eqResult = lval === this._rval;\n if (!eqResult) {\n var lvalTypeof = typeof lval;\n if (lvalTypeof !== this._rvalTypeof && (lvalTypeof === 'number' || this._rvalTypeof === 'number')) {\n eqResult = numericToNumber(lval) === this._rvalFloat;\n }\n }\n return this._isEQ ? eqResult : !eqResult;\n };\n return FilterEqualityComparator;\n}();\n/**\n * [FILTER_COMPARISON_RULE]\n * `lt`|`lte`|`gt`|`gte`:\n * + rval must be a number. And lval will be converted to number (`numericToNumber`) to compare.\n * `eq`:\n * + If same type, compare with `===`.\n * + If there is one number, convert to number (`numericToNumber`) to compare.\n * + Else return `false`.\n * `ne`:\n * + Not `eq`.\n *\n *\n * [SORT_COMPARISON_RULE]\n * All the values are grouped into three categories:\n * + \"numeric\" (number and numeric string)\n * + \"non-numeric-string\" (string that excluding numeric string)\n * + \"others\"\n * \"numeric\" vs \"numeric\": values are ordered by number order.\n * \"non-numeric-string\" vs \"non-numeric-string\": values are ordered by ES spec (#sec-abstract-relational-comparison).\n * \"others\" vs \"others\": do not change order (always return 0).\n * \"numeric\" vs \"non-numeric-string\": \"non-numeric-string\" is treated as \"incomparable\".\n * \"number\" vs \"others\": \"others\" is treated as \"incomparable\".\n * \"non-numeric-string\" vs \"others\": \"others\" is treated as \"incomparable\".\n * \"incomparable\" will be seen as -Infinity or Infinity (depends on the settings).\n * MEMO:\n * Non-numeric string sort makes sense when we need to put the items with the same tag together.\n * But if we support string sort, we still need to avoid the misleading like `'2' > '12'`,\n * So we treat \"numeric-string\" sorted by number order rather than string comparison.\n *\n *\n * [CHECK_LIST_OF_THE_RULE_DESIGN]\n * + Do not support string comparison until required. And also need to\n * avoid the misleading of \"2\" > \"12\".\n * + Should avoid the misleading case:\n * `\" 22 \" gte \"22\"` is `true` but `\" 22 \" eq \"22\"` is `false`.\n * + JS bad case should be avoided: null <= 0, [] <= 0, ' ' <= 0, ...\n * + Only \"numeric\" can be converted to comparable number, otherwise converted to NaN.\n * See `util/number.ts#numericToNumber`.\n *\n * @return If `op` is not `RelationalOperator`, return null;\n */\nexport function createFilterComparator(op, rval) {\n return op === 'eq' || op === 'ne' ? new FilterEqualityComparator(op === 'eq', rval) : hasOwn(ORDER_COMPARISON_OP_MAP, op) ? new FilterOrderComparator(op, rval) : null;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { SERIES_LAYOUT_BY_COLUMN, SOURCE_FORMAT_OBJECT_ROWS, SOURCE_FORMAT_ARRAY_ROWS } from '../../util/types.js';\nimport { normalizeToArray } from '../../util/model.js';\nimport { createHashMap, bind, each, hasOwn, map, clone, isObject, extend, isNumber } from 'zrender/lib/core/util.js';\nimport { getRawSourceItemGetter, getRawSourceDataCounter, getRawSourceValueGetter } from './dataProvider.js';\nimport { parseDataValue } from './dataValueHelper.js';\nimport { log, makePrintable, throwError } from '../../util/log.js';\nimport { createSource, detectSourceFormat } from '../Source.js';\n/**\n * TODO: disable writable.\n * This structure will be exposed to users.\n */\nvar ExternalSource = /** @class */function () {\n function ExternalSource() {}\n ExternalSource.prototype.getRawData = function () {\n // Only built-in transform available.\n throw new Error('not supported');\n };\n ExternalSource.prototype.getRawDataItem = function (dataIndex) {\n // Only built-in transform available.\n throw new Error('not supported');\n };\n ExternalSource.prototype.cloneRawData = function () {\n return;\n };\n /**\n * @return If dimension not found, return null/undefined.\n */\n ExternalSource.prototype.getDimensionInfo = function (dim) {\n return;\n };\n /**\n * dimensions defined if and only if either:\n * (a) dataset.dimensions are declared.\n * (b) dataset data include dimensions definitions in data (detected or via specified `sourceHeader`).\n * If dimensions are defined, `dimensionInfoAll` is corresponding to\n * the defined dimensions.\n * Otherwise, `dimensionInfoAll` is determined by data columns.\n * @return Always return an array (even empty array).\n */\n ExternalSource.prototype.cloneAllDimensionInfo = function () {\n return;\n };\n ExternalSource.prototype.count = function () {\n return;\n };\n /**\n * Only support by dimension index.\n * No need to support by dimension name in transform function,\n * because transform function is not case-specific, no need to use name literally.\n */\n ExternalSource.prototype.retrieveValue = function (dataIndex, dimIndex) {\n return;\n };\n ExternalSource.prototype.retrieveValueFromItem = function (dataItem, dimIndex) {\n return;\n };\n ExternalSource.prototype.convertValue = function (rawVal, dimInfo) {\n return parseDataValue(rawVal, dimInfo);\n };\n return ExternalSource;\n}();\nexport { ExternalSource };\nfunction createExternalSource(internalSource, externalTransform) {\n var extSource = new ExternalSource();\n var data = internalSource.data;\n var sourceFormat = extSource.sourceFormat = internalSource.sourceFormat;\n var sourceHeaderCount = internalSource.startIndex;\n var errMsg = '';\n if (internalSource.seriesLayoutBy !== SERIES_LAYOUT_BY_COLUMN) {\n // For the logic simplicity in transformer, only 'culumn' is\n // supported in data transform. Otherwise, the `dimensionsDefine`\n // might be detected by 'row', which probably confuses users.\n if (process.env.NODE_ENV !== 'production') {\n errMsg = '`seriesLayoutBy` of upstream dataset can only be \"column\" in data transform.';\n }\n throwError(errMsg);\n }\n // [MEMO]\n // Create a new dimensions structure for exposing.\n // Do not expose all dimension info to users directly.\n // Because the dimension is probably auto detected from data and not might reliable.\n // Should not lead the transformers to think that is reliable and return it.\n // See [DIMENSION_INHERIT_RULE] in `sourceManager.ts`.\n var dimensions = [];\n var dimsByName = {};\n var dimsDef = internalSource.dimensionsDefine;\n if (dimsDef) {\n each(dimsDef, function (dimDef, idx) {\n var name = dimDef.name;\n var dimDefExt = {\n index: idx,\n name: name,\n displayName: dimDef.displayName\n };\n dimensions.push(dimDefExt);\n // Users probably do not specify dimension name. For simplicity, data transform\n // does not generate dimension name.\n if (name != null) {\n // Dimension name should not be duplicated.\n // For simplicity, data transform forbids name duplication, do not generate\n // new name like module `completeDimensions.ts` did, but just tell users.\n var errMsg_1 = '';\n if (hasOwn(dimsByName, name)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg_1 = 'dimension name \"' + name + '\" duplicated.';\n }\n throwError(errMsg_1);\n }\n dimsByName[name] = dimDefExt;\n }\n });\n }\n // If dimension definitions are not defined and can not be detected.\n // e.g., pure data `[[11, 22], ...]`.\n else {\n for (var i = 0; i < internalSource.dimensionsDetectedCount || 0; i++) {\n // Do not generete name or anything others. The consequence process in\n // `transform` or `series` probably have there own name generation strategry.\n dimensions.push({\n index: i\n });\n }\n }\n // Implement public methods:\n var rawItemGetter = getRawSourceItemGetter(sourceFormat, SERIES_LAYOUT_BY_COLUMN);\n if (externalTransform.__isBuiltIn) {\n extSource.getRawDataItem = function (dataIndex) {\n return rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex);\n };\n extSource.getRawData = bind(getRawData, null, internalSource);\n }\n extSource.cloneRawData = bind(cloneRawData, null, internalSource);\n var rawCounter = getRawSourceDataCounter(sourceFormat, SERIES_LAYOUT_BY_COLUMN);\n extSource.count = bind(rawCounter, null, data, sourceHeaderCount, dimensions);\n var rawValueGetter = getRawSourceValueGetter(sourceFormat);\n extSource.retrieveValue = function (dataIndex, dimIndex) {\n var rawItem = rawItemGetter(data, sourceHeaderCount, dimensions, dataIndex);\n return retrieveValueFromItem(rawItem, dimIndex);\n };\n var retrieveValueFromItem = extSource.retrieveValueFromItem = function (dataItem, dimIndex) {\n if (dataItem == null) {\n return;\n }\n var dimDef = dimensions[dimIndex];\n // When `dimIndex` is `null`, `rawValueGetter` return the whole item.\n if (dimDef) {\n return rawValueGetter(dataItem, dimIndex, dimDef.name);\n }\n };\n extSource.getDimensionInfo = bind(getDimensionInfo, null, dimensions, dimsByName);\n extSource.cloneAllDimensionInfo = bind(cloneAllDimensionInfo, null, dimensions);\n return extSource;\n}\nfunction getRawData(upstream) {\n var sourceFormat = upstream.sourceFormat;\n if (!isSupportedSourceFormat(sourceFormat)) {\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n errMsg = '`getRawData` is not supported in source format ' + sourceFormat;\n }\n throwError(errMsg);\n }\n return upstream.data;\n}\nfunction cloneRawData(upstream) {\n var sourceFormat = upstream.sourceFormat;\n var data = upstream.data;\n if (!isSupportedSourceFormat(sourceFormat)) {\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n errMsg = '`cloneRawData` is not supported in source format ' + sourceFormat;\n }\n throwError(errMsg);\n }\n if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n var result = [];\n for (var i = 0, len = data.length; i < len; i++) {\n // Not strictly clone for performance\n result.push(data[i].slice());\n }\n return result;\n } else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n var result = [];\n for (var i = 0, len = data.length; i < len; i++) {\n // Not strictly clone for performance\n result.push(extend({}, data[i]));\n }\n return result;\n }\n}\nfunction getDimensionInfo(dimensions, dimsByName, dim) {\n if (dim == null) {\n return;\n }\n // Keep the same logic as `List::getDimension` did.\n if (isNumber(dim)\n // If being a number-like string but not being defined a dimension name.\n || !isNaN(dim) && !hasOwn(dimsByName, dim)) {\n return dimensions[dim];\n } else if (hasOwn(dimsByName, dim)) {\n return dimsByName[dim];\n }\n}\nfunction cloneAllDimensionInfo(dimensions) {\n return clone(dimensions);\n}\nvar externalTransformMap = createHashMap();\nexport function registerExternalTransform(externalTransform) {\n externalTransform = clone(externalTransform);\n var type = externalTransform.type;\n var errMsg = '';\n if (!type) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Must have a `type` when `registerTransform`.';\n }\n throwError(errMsg);\n }\n var typeParsed = type.split(':');\n if (typeParsed.length !== 2) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Name must include namespace like \"ns:regression\".';\n }\n throwError(errMsg);\n }\n // Namespace 'echarts:xxx' is official namespace, where the transforms should\n // be called directly via 'xxx' rather than 'echarts:xxx'.\n var isBuiltIn = false;\n if (typeParsed[0] === 'echarts') {\n type = typeParsed[1];\n isBuiltIn = true;\n }\n externalTransform.__isBuiltIn = isBuiltIn;\n externalTransformMap.set(type, externalTransform);\n}\nexport function applyDataTransform(rawTransOption, sourceList, infoForPrint) {\n var pipedTransOption = normalizeToArray(rawTransOption);\n var pipeLen = pipedTransOption.length;\n var errMsg = '';\n if (!pipeLen) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'If `transform` declared, it should at least contain one transform.';\n }\n throwError(errMsg);\n }\n for (var i = 0, len = pipeLen; i < len; i++) {\n var transOption = pipedTransOption[i];\n sourceList = applySingleDataTransform(transOption, sourceList, infoForPrint, pipeLen === 1 ? null : i);\n // piped transform only support single input, except the fist one.\n // piped transform only support single output, except the last one.\n if (i !== len - 1) {\n sourceList.length = Math.max(sourceList.length, 1);\n }\n }\n return sourceList;\n}\nfunction applySingleDataTransform(transOption, upSourceList, infoForPrint,\n// If `pipeIndex` is null/undefined, no piped transform.\npipeIndex) {\n var errMsg = '';\n if (!upSourceList.length) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Must have at least one upstream dataset.';\n }\n throwError(errMsg);\n }\n if (!isObject(transOption)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'transform declaration must be an object rather than ' + typeof transOption + '.';\n }\n throwError(errMsg);\n }\n var transType = transOption.type;\n var externalTransform = externalTransformMap.get(transType);\n if (!externalTransform) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Can not find transform on type \"' + transType + '\".';\n }\n throwError(errMsg);\n }\n // Prepare source\n var extUpSourceList = map(upSourceList, function (upSource) {\n return createExternalSource(upSource, externalTransform);\n });\n var resultList = normalizeToArray(externalTransform.transform({\n upstream: extUpSourceList[0],\n upstreamList: extUpSourceList,\n config: clone(transOption.config)\n }));\n if (process.env.NODE_ENV !== 'production') {\n if (transOption.print) {\n var printStrArr = map(resultList, function (extSource) {\n var pipeIndexStr = pipeIndex != null ? ' === pipe index: ' + pipeIndex : '';\n return ['=== dataset index: ' + infoForPrint.datasetIndex + pipeIndexStr + ' ===', '- transform result data:', makePrintable(extSource.data), '- transform result dimensions:', makePrintable(extSource.dimensions)].join('\\n');\n }).join('\\n');\n log(printStrArr);\n }\n }\n return map(resultList, function (result, resultIndex) {\n var errMsg = '';\n if (!isObject(result)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'A transform should not return some empty results.';\n }\n throwError(errMsg);\n }\n if (!result.data) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Transform result data should be not be null or undefined';\n }\n throwError(errMsg);\n }\n var sourceFormat = detectSourceFormat(result.data);\n if (!isSupportedSourceFormat(sourceFormat)) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Transform result data should be array rows or object rows.';\n }\n throwError(errMsg);\n }\n var resultMetaRawOption;\n var firstUpSource = upSourceList[0];\n /**\n * Intuitively, the end users known the content of the original `dataset.source`,\n * calucating the transform result in mind.\n * Suppose the original `dataset.source` is:\n * ```js\n * [\n * ['product', '2012', '2013', '2014', '2015'],\n * ['AAA', 41.1, 30.4, 65.1, 53.3],\n * ['BBB', 86.5, 92.1, 85.7, 83.1],\n * ['CCC', 24.1, 67.2, 79.5, 86.4]\n * ]\n * ```\n * The dimension info have to be detected from the source data.\n * Some of the transformers (like filter, sort) will follow the dimension info\n * of upstream, while others use new dimensions (like aggregate).\n * Transformer can output a field `dimensions` to define the its own output dimensions.\n * We also allow transformers to ignore the output `dimensions` field, and\n * inherit the upstream dimensions definition. It can reduce the burden of handling\n * dimensions in transformers.\n *\n * See also [DIMENSION_INHERIT_RULE] in `sourceManager.ts`.\n */\n if (firstUpSource && resultIndex === 0\n // If transformer returns `dimensions`, it means that the transformer has different\n // dimensions definitions. We do not inherit anything from upstream.\n && !result.dimensions) {\n var startIndex = firstUpSource.startIndex;\n // We copy the header of upstream to the result, because:\n // (1) The returned data always does not contain header line and can not be used\n // as dimension-detection. In this case we can not use \"detected dimensions\" of\n // upstream directly, because it might be detected based on different `seriesLayoutBy`.\n // (2) We should support that the series read the upstream source in `seriesLayoutBy: 'row'`.\n // So the original detected header should be add to the result, otherwise they can not be read.\n if (startIndex) {\n result.data = firstUpSource.data.slice(0, startIndex).concat(result.data);\n }\n resultMetaRawOption = {\n seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,\n sourceHeader: startIndex,\n dimensions: firstUpSource.metaRawOption.dimensions\n };\n } else {\n resultMetaRawOption = {\n seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,\n sourceHeader: 0,\n dimensions: result.dimensions\n };\n }\n return createSource(result.data, resultMetaRawOption, null);\n });\n}\nfunction isSupportedSourceFormat(sourceFormat) {\n return sourceFormat === SOURCE_FORMAT_ARRAY_ROWS || sourceFormat === SOURCE_FORMAT_OBJECT_ROWS;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { assert, clone, createHashMap, isFunction, keys, map, reduce } from 'zrender/lib/core/util.js';\nimport { parseDataValue } from './helper/dataValueHelper.js';\nimport { shouldRetrieveDataByName } from './Source.js';\nvar UNDEFINED = 'undefined';\n/* global Float64Array, Int32Array, Uint32Array, Uint16Array */\n// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is\n// different from the Ctor of typed array.\nexport var CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;\nexport var CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;\nexport var CtorInt32Array = typeof Int32Array === UNDEFINED ? Array : Int32Array;\nexport var CtorFloat64Array = typeof Float64Array === UNDEFINED ? Array : Float64Array;\n/**\n * Multi dimensional data store\n */\nvar dataCtors = {\n 'float': CtorFloat64Array,\n 'int': CtorInt32Array,\n // Ordinal data type can be string or int\n 'ordinal': Array,\n 'number': Array,\n 'time': CtorFloat64Array\n};\nvar defaultDimValueGetters;\nfunction getIndicesCtor(rawCount) {\n // The possible max value in this._indicies is always this._rawCount despite of filtering.\n return rawCount > 65535 ? CtorUint32Array : CtorUint16Array;\n}\n;\nfunction getInitialExtent() {\n return [Infinity, -Infinity];\n}\n;\nfunction cloneChunk(originalChunk) {\n var Ctor = originalChunk.constructor;\n // Only shallow clone is enough when Array.\n return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);\n}\nfunction prepareStore(store, dimIdx, dimType, end, append) {\n var DataCtor = dataCtors[dimType || 'float'];\n if (append) {\n var oldStore = store[dimIdx];\n var oldLen = oldStore && oldStore.length;\n if (!(oldLen === end)) {\n var newStore = new DataCtor(end);\n // The cost of the copy is probably inconsiderable\n // within the initial chunkSize.\n for (var j = 0; j < oldLen; j++) {\n newStore[j] = oldStore[j];\n }\n store[dimIdx] = newStore;\n }\n } else {\n store[dimIdx] = new DataCtor(end);\n }\n}\n;\n/**\n * Basically, DataStore API keep immutable.\n */\nvar DataStore = /** @class */function () {\n function DataStore() {\n this._chunks = [];\n // It will not be calculated until needed.\n this._rawExtent = [];\n this._extent = [];\n this._count = 0;\n this._rawCount = 0;\n this._calcDimNameToIdx = createHashMap();\n }\n /**\n * Initialize from data\n */\n DataStore.prototype.initData = function (provider, inputDimensions, dimValueGetter) {\n if (process.env.NODE_ENV !== 'production') {\n assert(isFunction(provider.getItem) && isFunction(provider.count), 'Invalid data provider.');\n }\n this._provider = provider;\n // Clear\n this._chunks = [];\n this._indices = null;\n this.getRawIndex = this._getRawIdxIdentity;\n var source = provider.getSource();\n var defaultGetter = this.defaultDimValueGetter = defaultDimValueGetters[source.sourceFormat];\n // Default dim value getter\n this._dimValueGetter = dimValueGetter || defaultGetter;\n // Reset raw extent.\n this._rawExtent = [];\n var willRetrieveDataByName = shouldRetrieveDataByName(source);\n this._dimensions = map(inputDimensions, function (dim) {\n if (process.env.NODE_ENV !== 'production') {\n if (willRetrieveDataByName) {\n assert(dim.property != null);\n }\n }\n return {\n // Only pick these two props. Not leak other properties like orderMeta.\n type: dim.type,\n property: dim.property\n };\n });\n this._initDataFromProvider(0, provider.count());\n };\n DataStore.prototype.getProvider = function () {\n return this._provider;\n };\n /**\n * Caution: even when a `source` instance owned by a series, the created data store\n * may still be shared by different sereis (the source hash does not use all `source`\n * props, see `sourceManager`). In this case, the `source` props that are not used in\n * hash (like `source.dimensionDefine`) probably only belongs to a certain series and\n * thus should not be fetch here.\n */\n DataStore.prototype.getSource = function () {\n return this._provider.getSource();\n };\n /**\n * @caution Only used in dataStack.\n */\n DataStore.prototype.ensureCalculationDimension = function (dimName, type) {\n var calcDimNameToIdx = this._calcDimNameToIdx;\n var dimensions = this._dimensions;\n var calcDimIdx = calcDimNameToIdx.get(dimName);\n if (calcDimIdx != null) {\n if (dimensions[calcDimIdx].type === type) {\n return calcDimIdx;\n }\n } else {\n calcDimIdx = dimensions.length;\n }\n dimensions[calcDimIdx] = {\n type: type\n };\n calcDimNameToIdx.set(dimName, calcDimIdx);\n this._chunks[calcDimIdx] = new dataCtors[type || 'float'](this._rawCount);\n this._rawExtent[calcDimIdx] = getInitialExtent();\n return calcDimIdx;\n };\n DataStore.prototype.collectOrdinalMeta = function (dimIdx, ordinalMeta) {\n var chunk = this._chunks[dimIdx];\n var dim = this._dimensions[dimIdx];\n var rawExtents = this._rawExtent;\n var offset = dim.ordinalOffset || 0;\n var len = chunk.length;\n if (offset === 0) {\n // We need to reset the rawExtent if collect is from start.\n // Because this dimension may be guessed as number and calcuating a wrong extent.\n rawExtents[dimIdx] = getInitialExtent();\n }\n var dimRawExtent = rawExtents[dimIdx];\n // Parse from previous data offset. len may be changed after appendData\n for (var i = offset; i < len; i++) {\n var val = chunk[i] = ordinalMeta.parseAndCollect(chunk[i]);\n if (!isNaN(val)) {\n dimRawExtent[0] = Math.min(val, dimRawExtent[0]);\n dimRawExtent[1] = Math.max(val, dimRawExtent[1]);\n }\n }\n dim.ordinalMeta = ordinalMeta;\n dim.ordinalOffset = len;\n dim.type = 'ordinal'; // Force to be ordinal\n };\n\n DataStore.prototype.getOrdinalMeta = function (dimIdx) {\n var dimInfo = this._dimensions[dimIdx];\n var ordinalMeta = dimInfo.ordinalMeta;\n return ordinalMeta;\n };\n DataStore.prototype.getDimensionProperty = function (dimIndex) {\n var item = this._dimensions[dimIndex];\n return item && item.property;\n };\n /**\n * Caution: Can be only called on raw data (before `this._indices` created).\n */\n DataStore.prototype.appendData = function (data) {\n if (process.env.NODE_ENV !== 'production') {\n assert(!this._indices, 'appendData can only be called on raw data.');\n }\n var provider = this._provider;\n var start = this.count();\n provider.appendData(data);\n var end = provider.count();\n if (!provider.persistent) {\n end += start;\n }\n if (start < end) {\n this._initDataFromProvider(start, end, true);\n }\n return [start, end];\n };\n DataStore.prototype.appendValues = function (values, minFillLen) {\n var chunks = this._chunks;\n var dimensions = this._dimensions;\n var dimLen = dimensions.length;\n var rawExtent = this._rawExtent;\n var start = this.count();\n var end = start + Math.max(values.length, minFillLen || 0);\n for (var i = 0; i < dimLen; i++) {\n var dim = dimensions[i];\n prepareStore(chunks, i, dim.type, end, true);\n }\n var emptyDataItem = [];\n for (var idx = start; idx < end; idx++) {\n var sourceIdx = idx - start;\n // Store the data by dimensions\n for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) {\n var dim = dimensions[dimIdx];\n var val = defaultDimValueGetters.arrayRows.call(this, values[sourceIdx] || emptyDataItem, dim.property, sourceIdx, dimIdx);\n chunks[dimIdx][idx] = val;\n var dimRawExtent = rawExtent[dimIdx];\n val < dimRawExtent[0] && (dimRawExtent[0] = val);\n val > dimRawExtent[1] && (dimRawExtent[1] = val);\n }\n }\n this._rawCount = this._count = end;\n return {\n start: start,\n end: end\n };\n };\n DataStore.prototype._initDataFromProvider = function (start, end, append) {\n var provider = this._provider;\n var chunks = this._chunks;\n var dimensions = this._dimensions;\n var dimLen = dimensions.length;\n var rawExtent = this._rawExtent;\n var dimNames = map(dimensions, function (dim) {\n return dim.property;\n });\n for (var i = 0; i < dimLen; i++) {\n var dim = dimensions[i];\n if (!rawExtent[i]) {\n rawExtent[i] = getInitialExtent();\n }\n prepareStore(chunks, i, dim.type, end, append);\n }\n if (provider.fillStorage) {\n provider.fillStorage(start, end, chunks, rawExtent);\n } else {\n var dataItem = [];\n for (var idx = start; idx < end; idx++) {\n // NOTICE: Try not to write things into dataItem\n dataItem = provider.getItem(idx, dataItem);\n // Each data item is value\n // [1, 2]\n // 2\n // Bar chart, line chart which uses category axis\n // only gives the 'y' value. 'x' value is the indices of category\n // Use a tempValue to normalize the value to be a (x, y) value\n // Store the data by dimensions\n for (var dimIdx = 0; dimIdx < dimLen; dimIdx++) {\n var dimStorage = chunks[dimIdx];\n // PENDING NULL is empty or zero\n var val = this._dimValueGetter(dataItem, dimNames[dimIdx], idx, dimIdx);\n dimStorage[idx] = val;\n var dimRawExtent = rawExtent[dimIdx];\n val < dimRawExtent[0] && (dimRawExtent[0] = val);\n val > dimRawExtent[1] && (dimRawExtent[1] = val);\n }\n }\n }\n if (!provider.persistent && provider.clean) {\n // Clean unused data if data source is typed array.\n provider.clean();\n }\n this._rawCount = this._count = end;\n // Reset data extent\n this._extent = [];\n };\n DataStore.prototype.count = function () {\n return this._count;\n };\n /**\n * Get value. Return NaN if idx is out of range.\n */\n DataStore.prototype.get = function (dim, idx) {\n if (!(idx >= 0 && idx < this._count)) {\n return NaN;\n }\n var dimStore = this._chunks[dim];\n return dimStore ? dimStore[this.getRawIndex(idx)] : NaN;\n };\n DataStore.prototype.getValues = function (dimensions, idx) {\n var values = [];\n var dimArr = [];\n if (idx == null) {\n idx = dimensions;\n // TODO get all from store?\n dimensions = [];\n // All dimensions\n for (var i = 0; i < this._dimensions.length; i++) {\n dimArr.push(i);\n }\n } else {\n dimArr = dimensions;\n }\n for (var i = 0, len = dimArr.length; i < len; i++) {\n values.push(this.get(dimArr[i], idx));\n }\n return values;\n };\n /**\n * @param dim concrete dim\n */\n DataStore.prototype.getByRawIndex = function (dim, rawIdx) {\n if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {\n return NaN;\n }\n var dimStore = this._chunks[dim];\n return dimStore ? dimStore[rawIdx] : NaN;\n };\n /**\n * Get sum of data in one dimension\n */\n DataStore.prototype.getSum = function (dim) {\n var dimData = this._chunks[dim];\n var sum = 0;\n if (dimData) {\n for (var i = 0, len = this.count(); i < len; i++) {\n var value = this.get(dim, i);\n if (!isNaN(value)) {\n sum += value;\n }\n }\n }\n return sum;\n };\n /**\n * Get median of data in one dimension\n */\n DataStore.prototype.getMedian = function (dim) {\n var dimDataArray = [];\n // map all data of one dimension\n this.each([dim], function (val) {\n if (!isNaN(val)) {\n dimDataArray.push(val);\n }\n });\n // TODO\n // Use quick select?\n var sortedDimDataArray = dimDataArray.sort(function (a, b) {\n return a - b;\n });\n var len = this.count();\n // calculate median\n return len === 0 ? 0 : len % 2 === 1 ? sortedDimDataArray[(len - 1) / 2] : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2;\n };\n /**\n * Retrieve the index with given raw data index.\n */\n DataStore.prototype.indexOfRawIndex = function (rawIndex) {\n if (rawIndex >= this._rawCount || rawIndex < 0) {\n return -1;\n }\n if (!this._indices) {\n return rawIndex;\n }\n // Indices are ascending\n var indices = this._indices;\n // If rawIndex === dataIndex\n var rawDataIndex = indices[rawIndex];\n if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {\n return rawIndex;\n }\n var left = 0;\n var right = this._count - 1;\n while (left <= right) {\n var mid = (left + right) / 2 | 0;\n if (indices[mid] < rawIndex) {\n left = mid + 1;\n } else if (indices[mid] > rawIndex) {\n right = mid - 1;\n } else {\n return mid;\n }\n }\n return -1;\n };\n /**\n * Retrieve the index of nearest value.\n * @param dim\n * @param value\n * @param [maxDistance=Infinity]\n * @return If and only if multiple indices have\n * the same value, they are put to the result.\n */\n DataStore.prototype.indicesOfNearest = function (dim, value, maxDistance) {\n var chunks = this._chunks;\n var dimData = chunks[dim];\n var nearestIndices = [];\n if (!dimData) {\n return nearestIndices;\n }\n if (maxDistance == null) {\n maxDistance = Infinity;\n }\n var minDist = Infinity;\n var minDiff = -1;\n var nearestIndicesLen = 0;\n // Check the test case of `test/ut/spec/data/SeriesData.js`.\n for (var i = 0, len = this.count(); i < len; i++) {\n var dataIndex = this.getRawIndex(i);\n var diff = value - dimData[dataIndex];\n var dist = Math.abs(diff);\n if (dist <= maxDistance) {\n // When the `value` is at the middle of `this.get(dim, i)` and `this.get(dim, i+1)`,\n // we'd better not push both of them to `nearestIndices`, otherwise it is easy to\n // get more than one item in `nearestIndices` (more specifically, in `tooltip`).\n // So we choose the one that `diff >= 0` in this case.\n // But if `this.get(dim, i)` and `this.get(dim, j)` get the same value, both of them\n // should be push to `nearestIndices`.\n if (dist < minDist || dist === minDist && diff >= 0 && minDiff < 0) {\n minDist = dist;\n minDiff = diff;\n nearestIndicesLen = 0;\n }\n if (diff === minDiff) {\n nearestIndices[nearestIndicesLen++] = i;\n }\n }\n }\n nearestIndices.length = nearestIndicesLen;\n return nearestIndices;\n };\n DataStore.prototype.getIndices = function () {\n var newIndices;\n var indices = this._indices;\n if (indices) {\n var Ctor = indices.constructor;\n var thisCount = this._count;\n // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`.\n if (Ctor === Array) {\n newIndices = new Ctor(thisCount);\n for (var i = 0; i < thisCount; i++) {\n newIndices[i] = indices[i];\n }\n } else {\n newIndices = new Ctor(indices.buffer, 0, thisCount);\n }\n } else {\n var Ctor = getIndicesCtor(this._rawCount);\n newIndices = new Ctor(this.count());\n for (var i = 0; i < newIndices.length; i++) {\n newIndices[i] = i;\n }\n }\n return newIndices;\n };\n /**\n * Data filter.\n */\n DataStore.prototype.filter = function (dims, cb) {\n if (!this._count) {\n return this;\n }\n var newStore = this.clone();\n var count = newStore.count();\n var Ctor = getIndicesCtor(newStore._rawCount);\n var newIndices = new Ctor(count);\n var value = [];\n var dimSize = dims.length;\n var offset = 0;\n var dim0 = dims[0];\n var chunks = newStore._chunks;\n for (var i = 0; i < count; i++) {\n var keep = void 0;\n var rawIdx = newStore.getRawIndex(i);\n // Simple optimization\n if (dimSize === 0) {\n keep = cb(i);\n } else if (dimSize === 1) {\n var val = chunks[dim0][rawIdx];\n keep = cb(val, i);\n } else {\n var k = 0;\n for (; k < dimSize; k++) {\n value[k] = chunks[dims[k]][rawIdx];\n }\n value[k] = i;\n keep = cb.apply(null, value);\n }\n if (keep) {\n newIndices[offset++] = rawIdx;\n }\n }\n // Set indices after filtered.\n if (offset < count) {\n newStore._indices = newIndices;\n }\n newStore._count = offset;\n // Reset data extent\n newStore._extent = [];\n newStore._updateGetRawIdx();\n return newStore;\n };\n /**\n * Select data in range. (For optimization of filter)\n * (Manually inline code, support 5 million data filtering in data zoom.)\n */\n DataStore.prototype.selectRange = function (range) {\n var newStore = this.clone();\n var len = newStore._count;\n if (!len) {\n return this;\n }\n var dims = keys(range);\n var dimSize = dims.length;\n if (!dimSize) {\n return this;\n }\n var originalCount = newStore.count();\n var Ctor = getIndicesCtor(newStore._rawCount);\n var newIndices = new Ctor(originalCount);\n var offset = 0;\n var dim0 = dims[0];\n var min = range[dim0][0];\n var max = range[dim0][1];\n var storeArr = newStore._chunks;\n var quickFinished = false;\n if (!newStore._indices) {\n // Extreme optimization for common case. About 2x faster in chrome.\n var idx = 0;\n if (dimSize === 1) {\n var dimStorage = storeArr[dims[0]];\n for (var i = 0; i < len; i++) {\n var val = dimStorage[i];\n // NaN will not be filtered. Consider the case, in line chart, empty\n // value indicates the line should be broken. But for the case like\n // scatter plot, a data item with empty value will not be rendered,\n // but the axis extent may be effected if some other dim of the data\n // item has value. Fortunately it is not a significant negative effect.\n if (val >= min && val <= max || isNaN(val)) {\n newIndices[offset++] = idx;\n }\n idx++;\n }\n quickFinished = true;\n } else if (dimSize === 2) {\n var dimStorage = storeArr[dims[0]];\n var dimStorage2 = storeArr[dims[1]];\n var min2 = range[dims[1]][0];\n var max2 = range[dims[1]][1];\n for (var i = 0; i < len; i++) {\n var val = dimStorage[i];\n var val2 = dimStorage2[i];\n // Do not filter NaN, see comment above.\n if ((val >= min && val <= max || isNaN(val)) && (val2 >= min2 && val2 <= max2 || isNaN(val2))) {\n newIndices[offset++] = idx;\n }\n idx++;\n }\n quickFinished = true;\n }\n }\n if (!quickFinished) {\n if (dimSize === 1) {\n for (var i = 0; i < originalCount; i++) {\n var rawIndex = newStore.getRawIndex(i);\n var val = storeArr[dims[0]][rawIndex];\n // Do not filter NaN, see comment above.\n if (val >= min && val <= max || isNaN(val)) {\n newIndices[offset++] = rawIndex;\n }\n }\n } else {\n for (var i = 0; i < originalCount; i++) {\n var keep = true;\n var rawIndex = newStore.getRawIndex(i);\n for (var k = 0; k < dimSize; k++) {\n var dimk = dims[k];\n var val = storeArr[dimk][rawIndex];\n // Do not filter NaN, see comment above.\n if (val < range[dimk][0] || val > range[dimk][1]) {\n keep = false;\n }\n }\n if (keep) {\n newIndices[offset++] = newStore.getRawIndex(i);\n }\n }\n }\n }\n // Set indices after filtered.\n if (offset < originalCount) {\n newStore._indices = newIndices;\n }\n newStore._count = offset;\n // Reset data extent\n newStore._extent = [];\n newStore._updateGetRawIdx();\n return newStore;\n };\n // /**\n // * Data mapping to a plain array\n // */\n // mapArray(dims: DimensionIndex[], cb: MapArrayCb): any[] {\n // const result: any[] = [];\n // this.each(dims, function () {\n // result.push(cb && (cb as MapArrayCb).apply(null, arguments));\n // });\n // return result;\n // }\n /**\n * Data mapping to a new List with given dimensions\n */\n DataStore.prototype.map = function (dims, cb) {\n // TODO only clone picked chunks.\n var target = this.clone(dims);\n this._updateDims(target, dims, cb);\n return target;\n };\n /**\n * @caution Danger!! Only used in dataStack.\n */\n DataStore.prototype.modify = function (dims, cb) {\n this._updateDims(this, dims, cb);\n };\n DataStore.prototype._updateDims = function (target, dims, cb) {\n var targetChunks = target._chunks;\n var tmpRetValue = [];\n var dimSize = dims.length;\n var dataCount = target.count();\n var values = [];\n var rawExtent = target._rawExtent;\n for (var i = 0; i < dims.length; i++) {\n rawExtent[dims[i]] = getInitialExtent();\n }\n for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {\n var rawIndex = target.getRawIndex(dataIndex);\n for (var k = 0; k < dimSize; k++) {\n values[k] = targetChunks[dims[k]][rawIndex];\n }\n values[dimSize] = dataIndex;\n var retValue = cb && cb.apply(null, values);\n if (retValue != null) {\n // a number or string (in oridinal dimension)?\n if (typeof retValue !== 'object') {\n tmpRetValue[0] = retValue;\n retValue = tmpRetValue;\n }\n for (var i = 0; i < retValue.length; i++) {\n var dim = dims[i];\n var val = retValue[i];\n var rawExtentOnDim = rawExtent[dim];\n var dimStore = targetChunks[dim];\n if (dimStore) {\n dimStore[rawIndex] = val;\n }\n if (val < rawExtentOnDim[0]) {\n rawExtentOnDim[0] = val;\n }\n if (val > rawExtentOnDim[1]) {\n rawExtentOnDim[1] = val;\n }\n }\n }\n }\n };\n /**\n * Large data down sampling using largest-triangle-three-buckets\n * @param {string} valueDimension\n * @param {number} targetCount\n */\n DataStore.prototype.lttbDownSample = function (valueDimension, rate) {\n var target = this.clone([valueDimension], true);\n var targetStorage = target._chunks;\n var dimStore = targetStorage[valueDimension];\n var len = this.count();\n var sampledIndex = 0;\n var frameSize = Math.floor(1 / rate);\n var currentRawIndex = this.getRawIndex(0);\n var maxArea;\n var area;\n var nextRawIndex;\n var newIndices = new (getIndicesCtor(this._rawCount))(Math.min((Math.ceil(len / frameSize) + 2) * 2, len));\n // First frame use the first data.\n newIndices[sampledIndex++] = currentRawIndex;\n for (var i = 1; i < len - 1; i += frameSize) {\n var nextFrameStart = Math.min(i + frameSize, len - 1);\n var nextFrameEnd = Math.min(i + frameSize * 2, len);\n var avgX = (nextFrameEnd + nextFrameStart) / 2;\n var avgY = 0;\n for (var idx = nextFrameStart; idx < nextFrameEnd; idx++) {\n var rawIndex = this.getRawIndex(idx);\n var y = dimStore[rawIndex];\n if (isNaN(y)) {\n continue;\n }\n avgY += y;\n }\n avgY /= nextFrameEnd - nextFrameStart;\n var frameStart = i;\n var frameEnd = Math.min(i + frameSize, len);\n var pointAX = i - 1;\n var pointAY = dimStore[currentRawIndex];\n maxArea = -1;\n nextRawIndex = frameStart;\n var firstNaNIndex = -1;\n var countNaN = 0;\n // Find a point from current frame that construct a triangle with largest area with previous selected point\n // And the average of next frame.\n for (var idx = frameStart; idx < frameEnd; idx++) {\n var rawIndex = this.getRawIndex(idx);\n var y = dimStore[rawIndex];\n if (isNaN(y)) {\n countNaN++;\n if (firstNaNIndex < 0) {\n firstNaNIndex = rawIndex;\n }\n continue;\n }\n // Calculate triangle area over three buckets\n area = Math.abs((pointAX - avgX) * (y - pointAY) - (pointAX - idx) * (avgY - pointAY));\n if (area > maxArea) {\n maxArea = area;\n nextRawIndex = rawIndex; // Next a is this b\n }\n }\n\n if (countNaN > 0 && countNaN < frameEnd - frameStart) {\n // Append first NaN point in every bucket.\n // It is necessary to ensure the correct order of indices.\n newIndices[sampledIndex++] = Math.min(firstNaNIndex, nextRawIndex);\n nextRawIndex = Math.max(firstNaNIndex, nextRawIndex);\n }\n newIndices[sampledIndex++] = nextRawIndex;\n currentRawIndex = nextRawIndex; // This a is the next a (chosen b)\n }\n // First frame use the last data.\n newIndices[sampledIndex++] = this.getRawIndex(len - 1);\n target._count = sampledIndex;\n target._indices = newIndices;\n target.getRawIndex = this._getRawIdx;\n return target;\n };\n /**\n * Large data down sampling on given dimension\n * @param sampleIndex Sample index for name and id\n */\n DataStore.prototype.downSample = function (dimension, rate, sampleValue, sampleIndex) {\n var target = this.clone([dimension], true);\n var targetStorage = target._chunks;\n var frameValues = [];\n var frameSize = Math.floor(1 / rate);\n var dimStore = targetStorage[dimension];\n var len = this.count();\n var rawExtentOnDim = target._rawExtent[dimension] = getInitialExtent();\n var newIndices = new (getIndicesCtor(this._rawCount))(Math.ceil(len / frameSize));\n var offset = 0;\n for (var i = 0; i < len; i += frameSize) {\n // Last frame\n if (frameSize > len - i) {\n frameSize = len - i;\n frameValues.length = frameSize;\n }\n for (var k = 0; k < frameSize; k++) {\n var dataIdx = this.getRawIndex(i + k);\n frameValues[k] = dimStore[dataIdx];\n }\n var value = sampleValue(frameValues);\n var sampleFrameIdx = this.getRawIndex(Math.min(i + sampleIndex(frameValues, value) || 0, len - 1));\n // Only write value on the filtered data\n dimStore[sampleFrameIdx] = value;\n if (value < rawExtentOnDim[0]) {\n rawExtentOnDim[0] = value;\n }\n if (value > rawExtentOnDim[1]) {\n rawExtentOnDim[1] = value;\n }\n newIndices[offset++] = sampleFrameIdx;\n }\n target._count = offset;\n target._indices = newIndices;\n target._updateGetRawIdx();\n return target;\n };\n /**\n * Data iteration\n * @param ctx default this\n * @example\n * list.each('x', function (x, idx) {});\n * list.each(['x', 'y'], function (x, y, idx) {});\n * list.each(function (idx) {})\n */\n DataStore.prototype.each = function (dims, cb) {\n if (!this._count) {\n return;\n }\n var dimSize = dims.length;\n var chunks = this._chunks;\n for (var i = 0, len = this.count(); i < len; i++) {\n var rawIdx = this.getRawIndex(i);\n // Simple optimization\n switch (dimSize) {\n case 0:\n cb(i);\n break;\n case 1:\n cb(chunks[dims[0]][rawIdx], i);\n break;\n case 2:\n cb(chunks[dims[0]][rawIdx], chunks[dims[1]][rawIdx], i);\n break;\n default:\n var k = 0;\n var value = [];\n for (; k < dimSize; k++) {\n value[k] = chunks[dims[k]][rawIdx];\n }\n // Index\n value[k] = i;\n cb.apply(null, value);\n }\n }\n };\n /**\n * Get extent of data in one dimension\n */\n DataStore.prototype.getDataExtent = function (dim) {\n // Make sure use concrete dim as cache name.\n var dimData = this._chunks[dim];\n var initialExtent = getInitialExtent();\n if (!dimData) {\n return initialExtent;\n }\n // Make more strict checkings to ensure hitting cache.\n var currEnd = this.count();\n // Consider the most cases when using data zoom, `getDataExtent`\n // happened before filtering. We cache raw extent, which is not\n // necessary to be cleared and recalculated when restore data.\n var useRaw = !this._indices;\n var dimExtent;\n if (useRaw) {\n return this._rawExtent[dim].slice();\n }\n dimExtent = this._extent[dim];\n if (dimExtent) {\n return dimExtent.slice();\n }\n dimExtent = initialExtent;\n var min = dimExtent[0];\n var max = dimExtent[1];\n for (var i = 0; i < currEnd; i++) {\n var rawIdx = this.getRawIndex(i);\n var value = dimData[rawIdx];\n value < min && (min = value);\n value > max && (max = value);\n }\n dimExtent = [min, max];\n this._extent[dim] = dimExtent;\n return dimExtent;\n };\n /**\n * Get raw data item\n */\n DataStore.prototype.getRawDataItem = function (idx) {\n var rawIdx = this.getRawIndex(idx);\n if (!this._provider.persistent) {\n var val = [];\n var chunks = this._chunks;\n for (var i = 0; i < chunks.length; i++) {\n val.push(chunks[i][rawIdx]);\n }\n return val;\n } else {\n return this._provider.getItem(rawIdx);\n }\n };\n /**\n * Clone shallow.\n *\n * @param clonedDims Determine which dims to clone. Will share the data if not specified.\n */\n DataStore.prototype.clone = function (clonedDims, ignoreIndices) {\n var target = new DataStore();\n var chunks = this._chunks;\n var clonedDimsMap = clonedDims && reduce(clonedDims, function (obj, dimIdx) {\n obj[dimIdx] = true;\n return obj;\n }, {});\n if (clonedDimsMap) {\n for (var i = 0; i < chunks.length; i++) {\n // Not clone if dim is not picked.\n target._chunks[i] = !clonedDimsMap[i] ? chunks[i] : cloneChunk(chunks[i]);\n }\n } else {\n target._chunks = chunks;\n }\n this._copyCommonProps(target);\n if (!ignoreIndices) {\n target._indices = this._cloneIndices();\n }\n target._updateGetRawIdx();\n return target;\n };\n DataStore.prototype._copyCommonProps = function (target) {\n target._count = this._count;\n target._rawCount = this._rawCount;\n target._provider = this._provider;\n target._dimensions = this._dimensions;\n target._extent = clone(this._extent);\n target._rawExtent = clone(this._rawExtent);\n };\n DataStore.prototype._cloneIndices = function () {\n if (this._indices) {\n var Ctor = this._indices.constructor;\n var indices = void 0;\n if (Ctor === Array) {\n var thisCount = this._indices.length;\n indices = new Ctor(thisCount);\n for (var i = 0; i < thisCount; i++) {\n indices[i] = this._indices[i];\n }\n } else {\n indices = new Ctor(this._indices);\n }\n return indices;\n }\n return null;\n };\n DataStore.prototype._getRawIdxIdentity = function (idx) {\n return idx;\n };\n DataStore.prototype._getRawIdx = function (idx) {\n if (idx < this._count && idx >= 0) {\n return this._indices[idx];\n }\n return -1;\n };\n DataStore.prototype._updateGetRawIdx = function () {\n this.getRawIndex = this._indices ? this._getRawIdx : this._getRawIdxIdentity;\n };\n DataStore.internalField = function () {\n function getDimValueSimply(dataItem, property, dataIndex, dimIndex) {\n return parseDataValue(dataItem[dimIndex], this._dimensions[dimIndex]);\n }\n defaultDimValueGetters = {\n arrayRows: getDimValueSimply,\n objectRows: function (dataItem, property, dataIndex, dimIndex) {\n return parseDataValue(dataItem[property], this._dimensions[dimIndex]);\n },\n keyedColumns: getDimValueSimply,\n original: function (dataItem, property, dataIndex, dimIndex) {\n // Performance sensitive, do not use modelUtil.getDataItemValue.\n // If dataItem is an plain object with no value field, the let `value`\n // will be assigned with the object, but it will be tread correctly\n // in the `convertValue`.\n var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);\n return parseDataValue(value instanceof Array ? value[dimIndex]\n // If value is a single number or something else not array.\n : value, this._dimensions[dimIndex]);\n },\n typedArray: function (dataItem, property, dataIndex, dimIndex) {\n return dataItem[dimIndex];\n }\n };\n }();\n return DataStore;\n}();\nexport default DataStore;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { setAsPrimitive, map, isTypedArray, assert, each, retrieve2 } from 'zrender/lib/core/util.js';\nimport { createSource, cloneSourceShallow } from '../Source.js';\nimport { SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ORIGINAL } from '../../util/types.js';\nimport { querySeriesUpstreamDatasetModel, queryDatasetUpstreamDatasetModels } from './sourceHelper.js';\nimport { applyDataTransform } from './transform.js';\nimport DataStore from '../DataStore.js';\nimport { DefaultDataProvider } from './dataProvider.js';\n/**\n * [REQUIREMENT_MEMO]:\n * (0) `metaRawOption` means `dimensions`/`sourceHeader`/`seriesLayoutBy` in raw option.\n * (1) Keep support the feature: `metaRawOption` can be specified both on `series` and\n * `root-dataset`. Them on `series` has higher priority.\n * (2) Do not support to set `metaRawOption` on a `non-root-dataset`, because it might\n * confuse users: whether those props indicate how to visit the upstream source or visit\n * the transform result source, and some transforms has nothing to do with these props,\n * and some transforms might have multiple upstream.\n * (3) Transforms should specify `metaRawOption` in each output, just like they can be\n * declared in `root-dataset`.\n * (4) At present only support visit source in `SERIES_LAYOUT_BY_COLUMN` in transforms.\n * That is for reducing complexity in transforms.\n * PENDING: Whether to provide transposition transform?\n *\n * [IMPLEMENTAION_MEMO]:\n * \"sourceVisitConfig\" are calculated from `metaRawOption` and `data`.\n * They will not be calculated until `source` is about to be visited (to prevent from\n * duplicate calcuation). `source` is visited only in series and input to transforms.\n *\n * [DIMENSION_INHERIT_RULE]:\n * By default the dimensions are inherited from ancestors, unless a transform return\n * a new dimensions definition.\n * Consider the case:\n * ```js\n * dataset: [{\n * source: [ ['Product', 'Sales', 'Prise'], ['Cookies', 321, 44.21], ...]\n * }, {\n * transform: { type: 'filter', ... }\n * }]\n * dataset: [{\n * dimension: ['Product', 'Sales', 'Prise'],\n * source: [ ['Cookies', 321, 44.21], ...]\n * }, {\n * transform: { type: 'filter', ... }\n * }]\n * ```\n * The two types of option should have the same behavior after transform.\n *\n *\n * [SCENARIO]:\n * (1) Provide source data directly:\n * ```js\n * series: {\n * encode: {...},\n * dimensions: [...]\n * seriesLayoutBy: 'row',\n * data: [[...]]\n * }\n * ```\n * (2) Series refer to dataset.\n * ```js\n * series: [{\n * encode: {...}\n * // Ignore datasetIndex means `datasetIndex: 0`\n * // and the dimensions defination in dataset is used\n * }, {\n * encode: {...},\n * seriesLayoutBy: 'column',\n * datasetIndex: 1\n * }]\n * ```\n * (3) dataset transform\n * ```js\n * dataset: [{\n * source: [...]\n * }, {\n * source: [...]\n * }, {\n * // By default from 0.\n * transform: { type: 'filter', config: {...} }\n * }, {\n * // Piped.\n * transform: [\n * { type: 'filter', config: {...} },\n * { type: 'sort', config: {...} }\n * ]\n * }, {\n * id: 'regressionData',\n * fromDatasetIndex: 1,\n * // Third-party transform\n * transform: { type: 'ecStat:regression', config: {...} }\n * }, {\n * // retrieve the extra result.\n * id: 'regressionFormula',\n * fromDatasetId: 'regressionData',\n * fromTransformResult: 1\n * }]\n * ```\n */\nvar SourceManager = /** @class */function () {\n function SourceManager(sourceHost) {\n // Cached source. Do not repeat calculating if not dirty.\n this._sourceList = [];\n this._storeList = [];\n // version sign of each upstream source manager.\n this._upstreamSignList = [];\n this._versionSignBase = 0;\n this._dirty = true;\n this._sourceHost = sourceHost;\n }\n /**\n * Mark dirty.\n */\n SourceManager.prototype.dirty = function () {\n this._setLocalSource([], []);\n this._storeList = [];\n this._dirty = true;\n };\n SourceManager.prototype._setLocalSource = function (sourceList, upstreamSignList) {\n this._sourceList = sourceList;\n this._upstreamSignList = upstreamSignList;\n this._versionSignBase++;\n if (this._versionSignBase > 9e10) {\n this._versionSignBase = 0;\n }\n };\n /**\n * For detecting whether the upstream source is dirty, so that\n * the local cached source (in `_sourceList`) should be discarded.\n */\n SourceManager.prototype._getVersionSign = function () {\n return this._sourceHost.uid + '_' + this._versionSignBase;\n };\n /**\n * Always return a source instance. Otherwise throw error.\n */\n SourceManager.prototype.prepareSource = function () {\n // For the case that call `setOption` multiple time but no data changed,\n // cache the result source to prevent from repeating transform.\n if (this._isDirty()) {\n this._createSource();\n this._dirty = false;\n }\n };\n SourceManager.prototype._createSource = function () {\n this._setLocalSource([], []);\n var sourceHost = this._sourceHost;\n var upSourceMgrList = this._getUpstreamSourceManagers();\n var hasUpstream = !!upSourceMgrList.length;\n var resultSourceList;\n var upstreamSignList;\n if (isSeries(sourceHost)) {\n var seriesModel = sourceHost;\n var data = void 0;\n var sourceFormat = void 0;\n var upSource = void 0;\n // Has upstream dataset\n if (hasUpstream) {\n var upSourceMgr = upSourceMgrList[0];\n upSourceMgr.prepareSource();\n upSource = upSourceMgr.getSource();\n data = upSource.data;\n sourceFormat = upSource.sourceFormat;\n upstreamSignList = [upSourceMgr._getVersionSign()];\n }\n // Series data is from own.\n else {\n data = seriesModel.get('data', true);\n sourceFormat = isTypedArray(data) ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;\n upstreamSignList = [];\n }\n // See [REQUIREMENT_MEMO], merge settings on series and parent dataset if it is root.\n var newMetaRawOption = this._getSourceMetaRawOption() || {};\n var upMetaRawOption = upSource && upSource.metaRawOption || {};\n var seriesLayoutBy = retrieve2(newMetaRawOption.seriesLayoutBy, upMetaRawOption.seriesLayoutBy) || null;\n var sourceHeader = retrieve2(newMetaRawOption.sourceHeader, upMetaRawOption.sourceHeader);\n // Note here we should not use `upSource.dimensionsDefine`. Consider the case:\n // `upSource.dimensionsDefine` is detected by `seriesLayoutBy: 'column'`,\n // but series need `seriesLayoutBy: 'row'`.\n var dimensions = retrieve2(newMetaRawOption.dimensions, upMetaRawOption.dimensions);\n // We share source with dataset as much as possible\n // to avoid extra memory cost of high dimensional data.\n var needsCreateSource = seriesLayoutBy !== upMetaRawOption.seriesLayoutBy || !!sourceHeader !== !!upMetaRawOption.sourceHeader || dimensions;\n resultSourceList = needsCreateSource ? [createSource(data, {\n seriesLayoutBy: seriesLayoutBy,\n sourceHeader: sourceHeader,\n dimensions: dimensions\n }, sourceFormat)] : [];\n } else {\n var datasetModel = sourceHost;\n // Has upstream dataset.\n if (hasUpstream) {\n var result = this._applyTransform(upSourceMgrList);\n resultSourceList = result.sourceList;\n upstreamSignList = result.upstreamSignList;\n }\n // Is root dataset.\n else {\n var sourceData = datasetModel.get('source', true);\n resultSourceList = [createSource(sourceData, this._getSourceMetaRawOption(), null)];\n upstreamSignList = [];\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n assert(resultSourceList && upstreamSignList);\n }\n this._setLocalSource(resultSourceList, upstreamSignList);\n };\n SourceManager.prototype._applyTransform = function (upMgrList) {\n var datasetModel = this._sourceHost;\n var transformOption = datasetModel.get('transform', true);\n var fromTransformResult = datasetModel.get('fromTransformResult', true);\n if (process.env.NODE_ENV !== 'production') {\n assert(fromTransformResult != null || transformOption != null);\n }\n if (fromTransformResult != null) {\n var errMsg = '';\n if (upMgrList.length !== 1) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'When using `fromTransformResult`, there should be only one upstream dataset';\n }\n doThrow(errMsg);\n }\n }\n var sourceList;\n var upSourceList = [];\n var upstreamSignList = [];\n each(upMgrList, function (upMgr) {\n upMgr.prepareSource();\n var upSource = upMgr.getSource(fromTransformResult || 0);\n var errMsg = '';\n if (fromTransformResult != null && !upSource) {\n if (process.env.NODE_ENV !== 'production') {\n errMsg = 'Can not retrieve result by `fromTransformResult`: ' + fromTransformResult;\n }\n doThrow(errMsg);\n }\n upSourceList.push(upSource);\n upstreamSignList.push(upMgr._getVersionSign());\n });\n if (transformOption) {\n sourceList = applyDataTransform(transformOption, upSourceList, {\n datasetIndex: datasetModel.componentIndex\n });\n } else if (fromTransformResult != null) {\n sourceList = [cloneSourceShallow(upSourceList[0])];\n }\n return {\n sourceList: sourceList,\n upstreamSignList: upstreamSignList\n };\n };\n SourceManager.prototype._isDirty = function () {\n if (this._dirty) {\n return true;\n }\n // All sourceList is from the some upstream.\n var upSourceMgrList = this._getUpstreamSourceManagers();\n for (var i = 0; i < upSourceMgrList.length; i++) {\n var upSrcMgr = upSourceMgrList[i];\n if (\n // Consider the case that there is ancestor diry, call it recursively.\n // The performance is probably not an issue because usually the chain is not long.\n upSrcMgr._isDirty() || this._upstreamSignList[i] !== upSrcMgr._getVersionSign()) {\n return true;\n }\n }\n };\n /**\n * @param sourceIndex By default 0, means \"main source\".\n * In most cases there is only one source.\n */\n SourceManager.prototype.getSource = function (sourceIndex) {\n sourceIndex = sourceIndex || 0;\n var source = this._sourceList[sourceIndex];\n if (!source) {\n // Series may share source instance with dataset.\n var upSourceMgrList = this._getUpstreamSourceManagers();\n return upSourceMgrList[0] && upSourceMgrList[0].getSource(sourceIndex);\n }\n return source;\n };\n /**\n *\n * Get a data store which can be shared across series.\n * Only available for series.\n *\n * @param seriesDimRequest Dimensions that are generated in series.\n * Should have been sorted by `storeDimIndex` asc.\n */\n SourceManager.prototype.getSharedDataStore = function (seriesDimRequest) {\n if (process.env.NODE_ENV !== 'production') {\n assert(isSeries(this._sourceHost), 'Can only call getDataStore on series source manager.');\n }\n var schema = seriesDimRequest.makeStoreSchema();\n return this._innerGetDataStore(schema.dimensions, seriesDimRequest.source, schema.hash);\n };\n SourceManager.prototype._innerGetDataStore = function (storeDims, seriesSource, sourceReadKey) {\n // TODO Can use other sourceIndex?\n var sourceIndex = 0;\n var storeList = this._storeList;\n var cachedStoreMap = storeList[sourceIndex];\n if (!cachedStoreMap) {\n cachedStoreMap = storeList[sourceIndex] = {};\n }\n var cachedStore = cachedStoreMap[sourceReadKey];\n if (!cachedStore) {\n var upSourceMgr = this._getUpstreamSourceManagers()[0];\n if (isSeries(this._sourceHost) && upSourceMgr) {\n cachedStore = upSourceMgr._innerGetDataStore(storeDims, seriesSource, sourceReadKey);\n } else {\n cachedStore = new DataStore();\n // Always create store from source of series.\n cachedStore.initData(new DefaultDataProvider(seriesSource, storeDims.length), storeDims);\n }\n cachedStoreMap[sourceReadKey] = cachedStore;\n }\n return cachedStore;\n };\n /**\n * PENDING: Is it fast enough?\n * If no upstream, return empty array.\n */\n SourceManager.prototype._getUpstreamSourceManagers = function () {\n // Always get the relationship from the raw option.\n // Do not cache the link of the dependency graph, so that\n // there is no need to update them when change happens.\n var sourceHost = this._sourceHost;\n if (isSeries(sourceHost)) {\n var datasetModel = querySeriesUpstreamDatasetModel(sourceHost);\n return !datasetModel ? [] : [datasetModel.getSourceManager()];\n } else {\n return map(queryDatasetUpstreamDatasetModels(sourceHost), function (datasetModel) {\n return datasetModel.getSourceManager();\n });\n }\n };\n SourceManager.prototype._getSourceMetaRawOption = function () {\n var sourceHost = this._sourceHost;\n var seriesLayoutBy;\n var sourceHeader;\n var dimensions;\n if (isSeries(sourceHost)) {\n seriesLayoutBy = sourceHost.get('seriesLayoutBy', true);\n sourceHeader = sourceHost.get('sourceHeader', true);\n dimensions = sourceHost.get('dimensions', true);\n }\n // See [REQUIREMENT_MEMO], `non-root-dataset` do not support them.\n else if (!this._getUpstreamSourceManagers().length) {\n var model = sourceHost;\n seriesLayoutBy = model.get('seriesLayoutBy', true);\n sourceHeader = model.get('sourceHeader', true);\n dimensions = model.get('dimensions', true);\n }\n return {\n seriesLayoutBy: seriesLayoutBy,\n sourceHeader: sourceHeader,\n dimensions: dimensions\n };\n };\n return SourceManager;\n}();\nexport { SourceManager };\n// Call this method after `super.init` and `super.mergeOption` to\n// disable the transform merge, but do not disable transform clone from rawOption.\nexport function disableTransformOptionMerge(datasetModel) {\n var transformOption = datasetModel.option.transform;\n transformOption && setAsPrimitive(datasetModel.option.transform);\n}\nfunction isSeries(sourceHost) {\n // Avoid circular dependency with Series.ts\n return sourceHost.mainType === 'series';\n}\nfunction doThrow(errMsg) {\n throw new Error(errMsg);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getTooltipMarker, encodeHTML, makeValueReadable, convertToColorString } from '../../util/format.js';\nimport { isString, each, hasOwn, isArray, map, assert, extend } from 'zrender/lib/core/util.js';\nimport { SortOrderComparator } from '../../data/helper/dataValueHelper.js';\nimport { getRandomIdBase } from '../../util/number.js';\nvar TOOLTIP_LINE_HEIGHT_CSS = 'line-height:1';\n// TODO: more textStyle option\nfunction getTooltipTextStyle(textStyle, renderMode) {\n var nameFontColor = textStyle.color || '#6e7079';\n var nameFontSize = textStyle.fontSize || 12;\n var nameFontWeight = textStyle.fontWeight || '400';\n var valueFontColor = textStyle.color || '#464646';\n var valueFontSize = textStyle.fontSize || 14;\n var valueFontWeight = textStyle.fontWeight || '900';\n if (renderMode === 'html') {\n // `textStyle` is probably from user input, should be encoded to reduce security risk.\n return {\n // eslint-disable-next-line max-len\n nameStyle: \"font-size:\" + encodeHTML(nameFontSize + '') + \"px;color:\" + encodeHTML(nameFontColor) + \";font-weight:\" + encodeHTML(nameFontWeight + ''),\n // eslint-disable-next-line max-len\n valueStyle: \"font-size:\" + encodeHTML(valueFontSize + '') + \"px;color:\" + encodeHTML(valueFontColor) + \";font-weight:\" + encodeHTML(valueFontWeight + '')\n };\n } else {\n return {\n nameStyle: {\n fontSize: nameFontSize,\n fill: nameFontColor,\n fontWeight: nameFontWeight\n },\n valueStyle: {\n fontSize: valueFontSize,\n fill: valueFontColor,\n fontWeight: valueFontWeight\n }\n };\n }\n}\n// See `TooltipMarkupLayoutIntent['innerGapLevel']`.\n// (value from UI design)\nvar HTML_GAPS = [0, 10, 20, 30];\nvar RICH_TEXT_GAPS = ['', '\\n', '\\n\\n', '\\n\\n\\n'];\n// eslint-disable-next-line max-len\nexport function createTooltipMarkup(type, option) {\n option.type = type;\n return option;\n}\nfunction isSectionFragment(frag) {\n return frag.type === 'section';\n}\nfunction getBuilder(frag) {\n return isSectionFragment(frag) ? buildSection : buildNameValue;\n}\nfunction getBlockGapLevel(frag) {\n if (isSectionFragment(frag)) {\n var gapLevel_1 = 0;\n var subBlockLen = frag.blocks.length;\n var hasInnerGap_1 = subBlockLen > 1 || subBlockLen > 0 && !frag.noHeader;\n each(frag.blocks, function (subBlock) {\n var subGapLevel = getBlockGapLevel(subBlock);\n // If the some of the sub-blocks have some gaps (like 10px) inside, this block\n // should use a larger gap (like 20px) to distinguish those sub-blocks.\n if (subGapLevel >= gapLevel_1) {\n gapLevel_1 = subGapLevel + +(hasInnerGap_1 && (\n // 0 always can not be readable gap level.\n !subGapLevel\n // If no header, always keep the sub gap level. Otherwise\n // look weird in case `multipleSeries`.\n || isSectionFragment(subBlock) && !subBlock.noHeader));\n }\n });\n return gapLevel_1;\n }\n return 0;\n}\nfunction buildSection(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) {\n var noHeader = fragment.noHeader;\n var gaps = getGap(getBlockGapLevel(fragment));\n var subMarkupTextList = [];\n var subBlocks = fragment.blocks || [];\n assert(!subBlocks || isArray(subBlocks));\n subBlocks = subBlocks || [];\n var orderMode = ctx.orderMode;\n if (fragment.sortBlocks && orderMode) {\n subBlocks = subBlocks.slice();\n var orderMap = {\n valueAsc: 'asc',\n valueDesc: 'desc'\n };\n if (hasOwn(orderMap, orderMode)) {\n var comparator_1 = new SortOrderComparator(orderMap[orderMode], null);\n subBlocks.sort(function (a, b) {\n return comparator_1.evaluate(a.sortParam, b.sortParam);\n });\n }\n // FIXME 'seriesDesc' necessary?\n else if (orderMode === 'seriesDesc') {\n subBlocks.reverse();\n }\n }\n each(subBlocks, function (subBlock, idx) {\n var valueFormatter = fragment.valueFormatter;\n var subMarkupText = getBuilder(subBlock)(\n // Inherit valueFormatter\n valueFormatter ? extend(extend({}, ctx), {\n valueFormatter: valueFormatter\n }) : ctx, subBlock, idx > 0 ? gaps.html : 0, toolTipTextStyle);\n subMarkupText != null && subMarkupTextList.push(subMarkupText);\n });\n var subMarkupText = ctx.renderMode === 'richText' ? subMarkupTextList.join(gaps.richText) : wrapBlockHTML(subMarkupTextList.join(''), noHeader ? topMarginForOuterGap : gaps.html);\n if (noHeader) {\n return subMarkupText;\n }\n var displayableHeader = makeValueReadable(fragment.header, 'ordinal', ctx.useUTC);\n var nameStyle = getTooltipTextStyle(toolTipTextStyle, ctx.renderMode).nameStyle;\n if (ctx.renderMode === 'richText') {\n return wrapInlineNameRichText(ctx, displayableHeader, nameStyle) + gaps.richText + subMarkupText;\n } else {\n return wrapBlockHTML(\"
\" + encodeHTML(displayableHeader) + '
' + subMarkupText, topMarginForOuterGap);\n }\n}\nfunction buildNameValue(ctx, fragment, topMarginForOuterGap, toolTipTextStyle) {\n var renderMode = ctx.renderMode;\n var noName = fragment.noName;\n var noValue = fragment.noValue;\n var noMarker = !fragment.markerType;\n var name = fragment.name;\n var useUTC = ctx.useUTC;\n var valueFormatter = fragment.valueFormatter || ctx.valueFormatter || function (value) {\n value = isArray(value) ? value : [value];\n return map(value, function (val, idx) {\n return makeValueReadable(val, isArray(valueTypeOption) ? valueTypeOption[idx] : valueTypeOption, useUTC);\n });\n };\n if (noName && noValue) {\n return;\n }\n var markerStr = noMarker ? '' : ctx.markupStyleCreator.makeTooltipMarker(fragment.markerType, fragment.markerColor || '#333', renderMode);\n var readableName = noName ? '' : makeValueReadable(name, 'ordinal', useUTC);\n var valueTypeOption = fragment.valueType;\n var readableValueList = noValue ? [] : valueFormatter(fragment.value, fragment.dataIndex);\n var valueAlignRight = !noMarker || !noName;\n // It little weird if only value next to marker but far from marker.\n var valueCloseToMarker = !noMarker && noName;\n var _a = getTooltipTextStyle(toolTipTextStyle, renderMode),\n nameStyle = _a.nameStyle,\n valueStyle = _a.valueStyle;\n return renderMode === 'richText' ? (noMarker ? '' : markerStr) + (noName ? '' : wrapInlineNameRichText(ctx, readableName, nameStyle))\n // Value has commas inside, so use ' ' as delimiter for multiple values.\n + (noValue ? '' : wrapInlineValueRichText(ctx, readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)) : wrapBlockHTML((noMarker ? '' : markerStr) + (noName ? '' : wrapInlineNameHTML(readableName, !noMarker, nameStyle)) + (noValue ? '' : wrapInlineValueHTML(readableValueList, valueAlignRight, valueCloseToMarker, valueStyle)), topMarginForOuterGap);\n}\n/**\n * @return markupText. null/undefined means no content.\n */\nexport function buildTooltipMarkup(fragment, markupStyleCreator, renderMode, orderMode, useUTC, toolTipTextStyle) {\n if (!fragment) {\n return;\n }\n var builder = getBuilder(fragment);\n var ctx = {\n useUTC: useUTC,\n renderMode: renderMode,\n orderMode: orderMode,\n markupStyleCreator: markupStyleCreator,\n valueFormatter: fragment.valueFormatter\n };\n return builder(ctx, fragment, 0, toolTipTextStyle);\n}\nfunction getGap(gapLevel) {\n return {\n html: HTML_GAPS[gapLevel],\n richText: RICH_TEXT_GAPS[gapLevel]\n };\n}\nfunction wrapBlockHTML(encodedContent, topGap) {\n var clearfix = '
';\n var marginCSS = \"margin: \" + topGap + \"px 0 0\";\n return \"
\" + encodedContent + clearfix + '
';\n}\nfunction wrapInlineNameHTML(name, leftHasMarker, style) {\n var marginCss = leftHasMarker ? 'margin-left:2px' : '';\n return \"\" + encodeHTML(name) + '';\n}\nfunction wrapInlineValueHTML(valueList, alignRight, valueCloseToMarker, style) {\n // Do not too close to marker, considering there are multiple values separated by spaces.\n var paddingStr = valueCloseToMarker ? '10px' : '20px';\n var alignCSS = alignRight ? \"float:right;margin-left:\" + paddingStr : '';\n valueList = isArray(valueList) ? valueList : [valueList];\n return \"\"\n // Value has commas inside, so use ' ' as delimiter for multiple values.\n + map(valueList, function (value) {\n return encodeHTML(value);\n }).join('  ') + '';\n}\nfunction wrapInlineNameRichText(ctx, name, style) {\n return ctx.markupStyleCreator.wrapRichTextStyle(name, style);\n}\nfunction wrapInlineValueRichText(ctx, values, alignRight, valueCloseToMarker, style) {\n var styles = [style];\n var paddingLeft = valueCloseToMarker ? 10 : 20;\n alignRight && styles.push({\n padding: [0, 0, 0, paddingLeft],\n align: 'right'\n });\n // Value has commas inside, so use ' ' as delimiter for multiple values.\n return ctx.markupStyleCreator.wrapRichTextStyle(isArray(values) ? values.join(' ') : values, styles);\n}\nexport function retrieveVisualColorForTooltipMarker(series, dataIndex) {\n var style = series.getData().getItemVisual(dataIndex, 'style');\n var color = style[series.visualDrawType];\n return convertToColorString(color);\n}\nexport function getPaddingFromTooltipModel(model, renderMode) {\n var padding = model.get('padding');\n return padding != null ? padding\n // We give slightly different to look pretty.\n : renderMode === 'richText' ? [8, 10] : 10;\n}\n/**\n * The major feature is generate styles for `renderMode: 'richText'`.\n * But it also serves `renderMode: 'html'` to provide\n * \"renderMode-independent\" API.\n */\nvar TooltipMarkupStyleCreator = /** @class */function () {\n function TooltipMarkupStyleCreator() {\n this.richTextStyles = {};\n // Notice that \"generate a style name\" usually happens repeatedly when mouse is moving and\n // a tooltip is displayed. So we put the `_nextStyleNameId` as a member of each creator\n // rather than static shared by all creators (which will cause it increase to fast).\n this._nextStyleNameId = getRandomIdBase();\n }\n TooltipMarkupStyleCreator.prototype._generateStyleName = function () {\n return '__EC_aUTo_' + this._nextStyleNameId++;\n };\n TooltipMarkupStyleCreator.prototype.makeTooltipMarker = function (markerType, colorStr, renderMode) {\n var markerId = renderMode === 'richText' ? this._generateStyleName() : null;\n var marker = getTooltipMarker({\n color: colorStr,\n type: markerType,\n renderMode: renderMode,\n markerId: markerId\n });\n if (isString(marker)) {\n return marker;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n assert(markerId);\n }\n this.richTextStyles[markerId] = marker.style;\n return marker.content;\n }\n };\n /**\n * @usage\n * ```ts\n * const styledText = markupStyleCreator.wrapRichTextStyle([\n * // The styles will be auto merged.\n * {\n * fontSize: 12,\n * color: 'blue'\n * },\n * {\n * padding: 20\n * }\n * ]);\n * ```\n */\n TooltipMarkupStyleCreator.prototype.wrapRichTextStyle = function (text, styles) {\n var finalStl = {};\n if (isArray(styles)) {\n each(styles, function (stl) {\n return extend(finalStl, stl);\n });\n } else {\n extend(finalStl, styles);\n }\n var styleName = this._generateStyleName();\n this.richTextStyles[styleName] = finalStl;\n return \"{\" + styleName + \"|\" + text + \"}\";\n };\n return TooltipMarkupStyleCreator;\n}();\nexport { TooltipMarkupStyleCreator };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { trim, isArray, each, reduce } from 'zrender/lib/core/util.js';\nimport { retrieveVisualColorForTooltipMarker, createTooltipMarkup } from './tooltipMarkup.js';\nimport { retrieveRawValue } from '../../data/helper/dataProvider.js';\nimport { isNameSpecified } from '../../util/model.js';\nexport function defaultSeriesFormatTooltip(opt) {\n var series = opt.series;\n var dataIndex = opt.dataIndex;\n var multipleSeries = opt.multipleSeries;\n var data = series.getData();\n var tooltipDims = data.mapDimensionsAll('defaultedTooltip');\n var tooltipDimLen = tooltipDims.length;\n var value = series.getRawValue(dataIndex);\n var isValueArr = isArray(value);\n var markerColor = retrieveVisualColorForTooltipMarker(series, dataIndex);\n // Complicated rule for pretty tooltip.\n var inlineValue;\n var inlineValueType;\n var subBlocks;\n var sortParam;\n if (tooltipDimLen > 1 || isValueArr && !tooltipDimLen) {\n var formatArrResult = formatTooltipArrayValue(value, series, dataIndex, tooltipDims, markerColor);\n inlineValue = formatArrResult.inlineValues;\n inlineValueType = formatArrResult.inlineValueTypes;\n subBlocks = formatArrResult.blocks;\n // Only support tooltip sort by the first inline value. It's enough in most cases.\n sortParam = formatArrResult.inlineValues[0];\n } else if (tooltipDimLen) {\n var dimInfo = data.getDimensionInfo(tooltipDims[0]);\n sortParam = inlineValue = retrieveRawValue(data, dataIndex, tooltipDims[0]);\n inlineValueType = dimInfo.type;\n } else {\n sortParam = inlineValue = isValueArr ? value[0] : value;\n }\n // Do not show generated series name. It might not be readable.\n var seriesNameSpecified = isNameSpecified(series);\n var seriesName = seriesNameSpecified && series.name || '';\n var itemName = data.getName(dataIndex);\n var inlineName = multipleSeries ? seriesName : itemName;\n return createTooltipMarkup('section', {\n header: seriesName,\n // When series name is not specified, do not show a header line with only '-'.\n // This case always happens in tooltip.trigger: 'item'.\n noHeader: multipleSeries || !seriesNameSpecified,\n sortParam: sortParam,\n blocks: [createTooltipMarkup('nameValue', {\n markerType: 'item',\n markerColor: markerColor,\n // Do not mix display seriesName and itemName in one tooltip,\n // which might confuses users.\n name: inlineName,\n // name dimension might be auto assigned, where the name might\n // be not readable. So we check trim here.\n noName: !trim(inlineName),\n value: inlineValue,\n valueType: inlineValueType,\n dataIndex: dataIndex\n })].concat(subBlocks || [])\n });\n}\nfunction formatTooltipArrayValue(value, series, dataIndex, tooltipDims, colorStr) {\n // check: category-no-encode-has-axis-data in dataset.html\n var data = series.getData();\n var isValueMultipleLine = reduce(value, function (isValueMultipleLine, val, idx) {\n var dimItem = data.getDimensionInfo(idx);\n return isValueMultipleLine = isValueMultipleLine || dimItem && dimItem.tooltip !== false && dimItem.displayName != null;\n }, false);\n var inlineValues = [];\n var inlineValueTypes = [];\n var blocks = [];\n tooltipDims.length ? each(tooltipDims, function (dim) {\n setEachItem(retrieveRawValue(data, dataIndex, dim), dim);\n })\n // By default, all dims is used on tooltip.\n : each(value, setEachItem);\n function setEachItem(val, dim) {\n var dimInfo = data.getDimensionInfo(dim);\n // If `dimInfo.tooltip` is not set, show tooltip.\n if (!dimInfo || dimInfo.otherDims.tooltip === false) {\n return;\n }\n if (isValueMultipleLine) {\n blocks.push(createTooltipMarkup('nameValue', {\n markerType: 'subItem',\n markerColor: colorStr,\n name: dimInfo.displayName,\n value: val,\n valueType: dimInfo.type\n }));\n } else {\n inlineValues.push(val);\n inlineValueTypes.push(dimInfo.type);\n }\n }\n return {\n inlineValues: inlineValues,\n inlineValueTypes: inlineValueTypes,\n blocks: blocks\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport * as modelUtil from '../util/model.js';\nimport ComponentModel from './Component.js';\nimport { PaletteMixin } from './mixin/palette.js';\nimport { DataFormatMixin } from '../model/mixin/dataFormat.js';\nimport { getLayoutParams, mergeLayoutParam, fetchLayoutMode } from '../util/layout.js';\nimport { createTask } from '../core/task.js';\nimport { mountExtend } from '../util/clazz.js';\nimport { SourceManager } from '../data/helper/sourceManager.js';\nimport { defaultSeriesFormatTooltip } from '../component/tooltip/seriesFormatTooltip.js';\nvar inner = modelUtil.makeInner();\nfunction getSelectionKey(data, dataIndex) {\n return data.getName(dataIndex) || data.getId(dataIndex);\n}\nexport var SERIES_UNIVERSAL_TRANSITION_PROP = '__universalTransitionEnabled';\nvar SeriesModel = /** @class */function (_super) {\n __extends(SeriesModel, _super);\n function SeriesModel() {\n // [Caution]: Because this class or desecendants can be used as `XXX.extend(subProto)`,\n // the class members must not be initialized in constructor or declaration place.\n // Otherwise there is bad case:\n // class A {xxx = 1;}\n // enableClassExtend(A);\n // class B extends A {}\n // var C = B.extend({xxx: 5});\n // var c = new C();\n // console.log(c.xxx); // expect 5 but always 1.\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // ---------------------------------------\n // Props about data selection\n // ---------------------------------------\n _this._selectedDataIndicesMap = {};\n return _this;\n }\n SeriesModel.prototype.init = function (option, parentModel, ecModel) {\n this.seriesIndex = this.componentIndex;\n this.dataTask = createTask({\n count: dataTaskCount,\n reset: dataTaskReset\n });\n this.dataTask.context = {\n model: this\n };\n this.mergeDefaultAndTheme(option, ecModel);\n var sourceManager = inner(this).sourceManager = new SourceManager(this);\n sourceManager.prepareSource();\n var data = this.getInitialData(option, ecModel);\n wrapData(data, this);\n this.dataTask.context.data = data;\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(data, 'getInitialData returned invalid data.');\n }\n inner(this).dataBeforeProcessed = data;\n // If we reverse the order (make data firstly, and then make\n // dataBeforeProcessed by cloneShallow), cloneShallow will\n // cause data.graph.data !== data when using\n // module:echarts/data/Graph or module:echarts/data/Tree.\n // See module:echarts/data/helper/linkSeriesData\n // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model\n // init or merge stage, because the data can be restored. So we do not `restoreData`\n // and `setData` here, which forbids calling `seriesModel.getData()` in this stage.\n // Call `seriesModel.getRawData()` instead.\n // this.restoreData();\n autoSeriesName(this);\n this._initSelectedMapFromData(data);\n };\n /**\n * Util for merge default and theme to option\n */\n SeriesModel.prototype.mergeDefaultAndTheme = function (option, ecModel) {\n var layoutMode = fetchLayoutMode(this);\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {};\n // Backward compat: using subType on theme.\n // But if name duplicate between series subType\n // (for example: parallel) add component mainType,\n // add suffix 'Series'.\n var themeSubType = this.subType;\n if (ComponentModel.hasClass(themeSubType)) {\n themeSubType += 'Series';\n }\n zrUtil.merge(option, ecModel.getTheme().get(this.subType));\n zrUtil.merge(option, this.getDefaultOption());\n // Default label emphasis `show`\n modelUtil.defaultEmphasis(option, 'label', ['show']);\n this.fillDataTextStyle(option.data);\n if (layoutMode) {\n mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n };\n SeriesModel.prototype.mergeOption = function (newSeriesOption, ecModel) {\n // this.settingTask.dirty();\n newSeriesOption = zrUtil.merge(this.option, newSeriesOption, true);\n this.fillDataTextStyle(newSeriesOption.data);\n var layoutMode = fetchLayoutMode(this);\n if (layoutMode) {\n mergeLayoutParam(this.option, newSeriesOption, layoutMode);\n }\n var sourceManager = inner(this).sourceManager;\n sourceManager.dirty();\n sourceManager.prepareSource();\n var data = this.getInitialData(newSeriesOption, ecModel);\n wrapData(data, this);\n this.dataTask.dirty();\n this.dataTask.context.data = data;\n inner(this).dataBeforeProcessed = data;\n autoSeriesName(this);\n this._initSelectedMapFromData(data);\n };\n SeriesModel.prototype.fillDataTextStyle = function (data) {\n // Default data label emphasis `show`\n // FIXME Tree structure data ?\n // FIXME Performance ?\n if (data && !zrUtil.isTypedArray(data)) {\n var props = ['show'];\n for (var i = 0; i < data.length; i++) {\n if (data[i] && data[i].label) {\n modelUtil.defaultEmphasis(data[i], 'label', props);\n }\n }\n }\n };\n /**\n * Init a data structure from data related option in series\n * Must be overridden.\n */\n SeriesModel.prototype.getInitialData = function (option, ecModel) {\n return;\n };\n /**\n * Append data to list\n */\n SeriesModel.prototype.appendData = function (params) {\n // FIXME ???\n // (1) If data from dataset, forbidden append.\n // (2) support append data of dataset.\n var data = this.getRawData();\n data.appendData(params.data);\n };\n /**\n * Consider some method like `filter`, `map` need make new data,\n * We should make sure that `seriesModel.getData()` get correct\n * data in the stream procedure. So we fetch data from upstream\n * each time `task.perform` called.\n */\n SeriesModel.prototype.getData = function (dataType) {\n var task = getCurrentTask(this);\n if (task) {\n var data = task.context.data;\n return dataType == null ? data : data.getLinkedData(dataType);\n } else {\n // When series is not alive (that may happen when click toolbox\n // restore or setOption with not merge mode), series data may\n // be still need to judge animation or something when graphic\n // elements want to know whether fade out.\n return inner(this).data;\n }\n };\n SeriesModel.prototype.getAllData = function () {\n var mainData = this.getData();\n return mainData && mainData.getLinkedDataAll ? mainData.getLinkedDataAll() : [{\n data: mainData\n }];\n };\n SeriesModel.prototype.setData = function (data) {\n var task = getCurrentTask(this);\n if (task) {\n var context = task.context;\n // Consider case: filter, data sample.\n // FIXME:TS never used, so comment it\n // if (context.data !== data && task.modifyOutputEnd) {\n // task.setOutputEnd(data.count());\n // }\n context.outputData = data;\n // Caution: setData should update context.data,\n // Because getData may be called multiply in a\n // single stage and expect to get the data just\n // set. (For example, AxisProxy, x y both call\n // getData and setDate sequentially).\n // So the context.data should be fetched from\n // upstream each time when a stage starts to be\n // performed.\n if (task !== this.dataTask) {\n context.data = data;\n }\n }\n inner(this).data = data;\n };\n SeriesModel.prototype.getEncode = function () {\n var encode = this.get('encode', true);\n if (encode) {\n return zrUtil.createHashMap(encode);\n }\n };\n SeriesModel.prototype.getSourceManager = function () {\n return inner(this).sourceManager;\n };\n SeriesModel.prototype.getSource = function () {\n return this.getSourceManager().getSource();\n };\n /**\n * Get data before processed\n */\n SeriesModel.prototype.getRawData = function () {\n return inner(this).dataBeforeProcessed;\n };\n SeriesModel.prototype.getColorBy = function () {\n var colorBy = this.get('colorBy');\n return colorBy || 'series';\n };\n SeriesModel.prototype.isColorBySeries = function () {\n return this.getColorBy() === 'series';\n };\n /**\n * Get base axis if has coordinate system and has axis.\n * By default use coordSys.getBaseAxis();\n * Can be overridden for some chart.\n * @return {type} description\n */\n SeriesModel.prototype.getBaseAxis = function () {\n var coordSys = this.coordinateSystem;\n // @ts-ignore\n return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();\n };\n /**\n * Default tooltip formatter\n *\n * @param dataIndex\n * @param multipleSeries\n * @param dataType\n * @param renderMode valid values: 'html'(by default) and 'richText'.\n * 'html' is used for rendering tooltip in extra DOM form, and the result\n * string is used as DOM HTML content.\n * 'richText' is used for rendering tooltip in rich text form, for those where\n * DOM operation is not supported.\n * @return formatted tooltip with `html` and `markers`\n * Notice: The override method can also return string\n */\n SeriesModel.prototype.formatTooltip = function (dataIndex, multipleSeries, dataType) {\n return defaultSeriesFormatTooltip({\n series: this,\n dataIndex: dataIndex,\n multipleSeries: multipleSeries\n });\n };\n SeriesModel.prototype.isAnimationEnabled = function () {\n var ecModel = this.ecModel;\n // Disable animation if using echarts in node but not give ssr flag.\n // In ssr mode, renderToString will generate svg with css animation.\n if (env.node && !(ecModel && ecModel.ssr)) {\n return false;\n }\n var animationEnabled = this.getShallow('animation');\n if (animationEnabled) {\n if (this.getData().count() > this.getShallow('animationThreshold')) {\n animationEnabled = false;\n }\n }\n return !!animationEnabled;\n };\n SeriesModel.prototype.restoreData = function () {\n this.dataTask.dirty();\n };\n SeriesModel.prototype.getColorFromPalette = function (name, scope, requestColorNum) {\n var ecModel = this.ecModel;\n // PENDING\n var color = PaletteMixin.prototype.getColorFromPalette.call(this, name, scope, requestColorNum);\n if (!color) {\n color = ecModel.getColorFromPalette(name, scope, requestColorNum);\n }\n return color;\n };\n /**\n * Use `data.mapDimensionsAll(coordDim)` instead.\n * @deprecated\n */\n SeriesModel.prototype.coordDimToDataDim = function (coordDim) {\n return this.getRawData().mapDimensionsAll(coordDim);\n };\n /**\n * Get progressive rendering count each step\n */\n SeriesModel.prototype.getProgressive = function () {\n return this.get('progressive');\n };\n /**\n * Get progressive rendering count each step\n */\n SeriesModel.prototype.getProgressiveThreshold = function () {\n return this.get('progressiveThreshold');\n };\n // PENGING If selectedMode is null ?\n SeriesModel.prototype.select = function (innerDataIndices, dataType) {\n this._innerSelect(this.getData(dataType), innerDataIndices);\n };\n SeriesModel.prototype.unselect = function (innerDataIndices, dataType) {\n var selectedMap = this.option.selectedMap;\n if (!selectedMap) {\n return;\n }\n var selectedMode = this.option.selectedMode;\n var data = this.getData(dataType);\n if (selectedMode === 'series' || selectedMap === 'all') {\n this.option.selectedMap = {};\n this._selectedDataIndicesMap = {};\n return;\n }\n for (var i = 0; i < innerDataIndices.length; i++) {\n var dataIndex = innerDataIndices[i];\n var nameOrId = getSelectionKey(data, dataIndex);\n selectedMap[nameOrId] = false;\n this._selectedDataIndicesMap[nameOrId] = -1;\n }\n };\n SeriesModel.prototype.toggleSelect = function (innerDataIndices, dataType) {\n var tmpArr = [];\n for (var i = 0; i < innerDataIndices.length; i++) {\n tmpArr[0] = innerDataIndices[i];\n this.isSelected(innerDataIndices[i], dataType) ? this.unselect(tmpArr, dataType) : this.select(tmpArr, dataType);\n }\n };\n SeriesModel.prototype.getSelectedDataIndices = function () {\n if (this.option.selectedMap === 'all') {\n return [].slice.call(this.getData().getIndices());\n }\n var selectedDataIndicesMap = this._selectedDataIndicesMap;\n var nameOrIds = zrUtil.keys(selectedDataIndicesMap);\n var dataIndices = [];\n for (var i = 0; i < nameOrIds.length; i++) {\n var dataIndex = selectedDataIndicesMap[nameOrIds[i]];\n if (dataIndex >= 0) {\n dataIndices.push(dataIndex);\n }\n }\n return dataIndices;\n };\n SeriesModel.prototype.isSelected = function (dataIndex, dataType) {\n var selectedMap = this.option.selectedMap;\n if (!selectedMap) {\n return false;\n }\n var data = this.getData(dataType);\n return (selectedMap === 'all' || selectedMap[getSelectionKey(data, dataIndex)]) && !data.getItemModel(dataIndex).get(['select', 'disabled']);\n };\n SeriesModel.prototype.isUniversalTransitionEnabled = function () {\n if (this[SERIES_UNIVERSAL_TRANSITION_PROP]) {\n return true;\n }\n var universalTransitionOpt = this.option.universalTransition;\n // Quick reject\n if (!universalTransitionOpt) {\n return false;\n }\n if (universalTransitionOpt === true) {\n return true;\n }\n // Can be simply 'universalTransition: true'\n return universalTransitionOpt && universalTransitionOpt.enabled;\n };\n SeriesModel.prototype._innerSelect = function (data, innerDataIndices) {\n var _a, _b;\n var option = this.option;\n var selectedMode = option.selectedMode;\n var len = innerDataIndices.length;\n if (!selectedMode || !len) {\n return;\n }\n if (selectedMode === 'series') {\n option.selectedMap = 'all';\n } else if (selectedMode === 'multiple') {\n if (!zrUtil.isObject(option.selectedMap)) {\n option.selectedMap = {};\n }\n var selectedMap = option.selectedMap;\n for (var i = 0; i < len; i++) {\n var dataIndex = innerDataIndices[i];\n // TODO different types of data share same object.\n var nameOrId = getSelectionKey(data, dataIndex);\n selectedMap[nameOrId] = true;\n this._selectedDataIndicesMap[nameOrId] = data.getRawIndex(dataIndex);\n }\n } else if (selectedMode === 'single' || selectedMode === true) {\n var lastDataIndex = innerDataIndices[len - 1];\n var nameOrId = getSelectionKey(data, lastDataIndex);\n option.selectedMap = (_a = {}, _a[nameOrId] = true, _a);\n this._selectedDataIndicesMap = (_b = {}, _b[nameOrId] = data.getRawIndex(lastDataIndex), _b);\n }\n };\n SeriesModel.prototype._initSelectedMapFromData = function (data) {\n // Ignore select info in data if selectedMap exists.\n // NOTE It's only for legacy usage. edge data is not supported.\n if (this.option.selectedMap) {\n return;\n }\n var dataIndices = [];\n if (data.hasItemOption) {\n data.each(function (idx) {\n var rawItem = data.getRawDataItem(idx);\n if (rawItem && rawItem.selected) {\n dataIndices.push(idx);\n }\n });\n }\n if (dataIndices.length > 0) {\n this._innerSelect(data, dataIndices);\n }\n };\n // /**\n // * @see {module:echarts/stream/Scheduler}\n // */\n // abstract pipeTask: null\n SeriesModel.registerClass = function (clz) {\n return ComponentModel.registerClass(clz);\n };\n SeriesModel.protoInitialize = function () {\n var proto = SeriesModel.prototype;\n proto.type = 'series.__base__';\n proto.seriesIndex = 0;\n proto.ignoreStyleOnData = false;\n proto.hasSymbolVisual = false;\n proto.defaultSymbol = 'circle';\n // Make sure the values can be accessed!\n proto.visualStyleAccessPath = 'itemStyle';\n proto.visualDrawType = 'fill';\n }();\n return SeriesModel;\n}(ComponentModel);\nzrUtil.mixin(SeriesModel, DataFormatMixin);\nzrUtil.mixin(SeriesModel, PaletteMixin);\nmountExtend(SeriesModel, ComponentModel);\n/**\n * MUST be called after `prepareSource` called\n * Here we need to make auto series, especially for auto legend. But we\n * do not modify series.name in option to avoid side effects.\n */\nfunction autoSeriesName(seriesModel) {\n // User specified name has higher priority, otherwise it may cause\n // series can not be queried unexpectedly.\n var name = seriesModel.name;\n if (!modelUtil.isNameSpecified(seriesModel)) {\n seriesModel.name = getSeriesAutoName(seriesModel) || name;\n }\n}\nfunction getSeriesAutoName(seriesModel) {\n var data = seriesModel.getRawData();\n var dataDims = data.mapDimensionsAll('seriesName');\n var nameArr = [];\n zrUtil.each(dataDims, function (dataDim) {\n var dimInfo = data.getDimensionInfo(dataDim);\n dimInfo.displayName && nameArr.push(dimInfo.displayName);\n });\n return nameArr.join(' ');\n}\nfunction dataTaskCount(context) {\n return context.model.getRawData().count();\n}\nfunction dataTaskReset(context) {\n var seriesModel = context.model;\n seriesModel.setData(seriesModel.getRawData().cloneShallow());\n return dataTaskProgress;\n}\nfunction dataTaskProgress(param, context) {\n // Avoid repeat cloneShallow when data just created in reset.\n if (context.outputData && param.end > context.outputData.count()) {\n context.model.getRawData().cloneShallow(context.outputData);\n }\n}\n// TODO refactor\nfunction wrapData(data, seriesModel) {\n zrUtil.each(zrUtil.concatArray(data.CHANGABLE_METHODS, data.DOWNSAMPLE_METHODS), function (methodName) {\n data.wrapMethod(methodName, zrUtil.curry(onDataChange, seriesModel));\n });\n}\nfunction onDataChange(seriesModel, newList) {\n var task = getCurrentTask(seriesModel);\n if (task) {\n // Consider case: filter, selectRange\n task.setOutputEnd((newList || this).count());\n }\n return newList;\n}\nfunction getCurrentTask(seriesModel) {\n var scheduler = (seriesModel.ecModel || {}).scheduler;\n var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);\n if (pipeline) {\n // When pipline finished, the currrentTask keep the last\n // task (renderTask).\n var task = pipeline.currentTask;\n if (task) {\n var agentStubMap = task.agentStubMap;\n if (agentStubMap) {\n task = agentStubMap.get(seriesModel.uid);\n }\n }\n return task;\n }\n}\nexport default SeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport Group from 'zrender/lib/graphic/Group.js';\nimport * as componentUtil from '../util/component.js';\nimport * as clazzUtil from '../util/clazz.js';\nvar ComponentView = /** @class */function () {\n function ComponentView() {\n this.group = new Group();\n this.uid = componentUtil.getUID('viewComponent');\n }\n ComponentView.prototype.init = function (ecModel, api) {};\n ComponentView.prototype.render = function (model, ecModel, api, payload) {};\n ComponentView.prototype.dispose = function (ecModel, api) {};\n ComponentView.prototype.updateView = function (model, ecModel, api, payload) {\n // Do nothing;\n };\n ComponentView.prototype.updateLayout = function (model, ecModel, api, payload) {\n // Do nothing;\n };\n ComponentView.prototype.updateVisual = function (model, ecModel, api, payload) {\n // Do nothing;\n };\n /**\n * Hook for toggle blur target series.\n * Can be used in marker for blur or leave blur the markers\n */\n ComponentView.prototype.toggleBlurSeries = function (seriesModels, isBlur, ecModel) {\n // Do nothing;\n };\n /**\n * Traverse the new rendered elements.\n *\n * It will traverse the new added element in progressive rendering.\n * And traverse all in normal rendering.\n */\n ComponentView.prototype.eachRendered = function (cb) {\n var group = this.group;\n if (group) {\n group.traverse(cb);\n }\n };\n return ComponentView;\n}();\n;\nclazzUtil.enableClassExtend(ComponentView);\nclazzUtil.enableClassManagement(ComponentView);\nexport default ComponentView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from '../../util/model.js';\n/**\n * @return {string} If large mode changed, return string 'reset';\n */\nexport default function createRenderPlanner() {\n var inner = makeInner();\n return function (seriesModel) {\n var fields = inner(seriesModel);\n var pipelineContext = seriesModel.pipelineContext;\n var originalLarge = !!fields.large;\n var originalProgressive = !!fields.progressiveRender;\n // FIXME: if the planner works on a filtered series, `pipelineContext` does not\n // exists. See #11611 . Probably we need to modify this structure, see the comment\n // on `performRawSeries` in `Schedular.js`.\n var large = fields.large = !!(pipelineContext && pipelineContext.large);\n var progressive = fields.progressiveRender = !!(pipelineContext && pipelineContext.progressiveRender);\n return !!(originalLarge !== large || originalProgressive !== progressive) && 'reset';\n };\n}","import PathProxy from '../core/PathProxy.js';\nimport { applyTransform as v2ApplyTransform } from '../core/vector.js';\nvar CMD = PathProxy.CMD;\nvar points = [[], [], []];\nvar mathSqrt = Math.sqrt;\nvar mathAtan2 = Math.atan2;\nexport default function transformPath(path, m) {\n if (!m) {\n return;\n }\n var data = path.data;\n var len = path.len();\n var cmd;\n var nPoint;\n var i;\n var j;\n var k;\n var p;\n var M = CMD.M;\n var C = CMD.C;\n var L = CMD.L;\n var R = CMD.R;\n var A = CMD.A;\n var Q = CMD.Q;\n for (i = 0, j = 0; i < len;) {\n cmd = data[i++];\n j = i;\n nPoint = 0;\n switch (cmd) {\n case M:\n nPoint = 1;\n break;\n case L:\n nPoint = 1;\n break;\n case C:\n nPoint = 3;\n break;\n case Q:\n nPoint = 2;\n break;\n case A:\n var x = m[4];\n var y = m[5];\n var sx = mathSqrt(m[0] * m[0] + m[1] * m[1]);\n var sy = mathSqrt(m[2] * m[2] + m[3] * m[3]);\n var angle = mathAtan2(-m[1] / sy, m[0] / sx);\n data[i] *= sx;\n data[i++] += x;\n data[i] *= sy;\n data[i++] += y;\n data[i++] *= sx;\n data[i++] *= sy;\n data[i++] += angle;\n data[i++] += angle;\n i += 2;\n j = i;\n break;\n case R:\n p[0] = data[i++];\n p[1] = data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n p[0] += data[i++];\n p[1] += data[i++];\n v2ApplyTransform(p, p, m);\n data[j++] = p[0];\n data[j++] = p[1];\n }\n for (k = 0; k < nPoint; k++) {\n var p_1 = points[k];\n p_1[0] = data[i++];\n p_1[1] = data[i++];\n v2ApplyTransform(p_1, p_1, m);\n data[j++] = p_1[0];\n data[j++] = p_1[1];\n }\n }\n path.increaseVersion();\n}\n","import { __extends } from \"tslib\";\nimport Path from '../graphic/Path.js';\nimport PathProxy from '../core/PathProxy.js';\nimport transformPath from './transformPath.js';\nimport { extend } from '../core/util.js';\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\nfunction vMag(v) {\n return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n}\n;\nfunction vRatio(u, v) {\n return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n}\n;\nfunction vAngle(u, v) {\n return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n * Math.acos(vRatio(u, v));\n}\n;\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n var psi = psiDeg * (PI / 180.0);\n var xp = mathCos(psi) * (x1 - x2) / 2.0\n + mathSin(psi) * (y1 - y2) / 2.0;\n var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n + mathCos(psi) * (y1 - y2) / 2.0;\n var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n if (lambda > 1) {\n rx *= mathSqrt(lambda);\n ry *= mathSqrt(lambda);\n }\n var f = (fa === fs ? -1 : 1)\n * mathSqrt((((rx * rx) * (ry * ry))\n - ((rx * rx) * (yp * yp))\n - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n + (ry * ry) * (xp * xp))) || 0;\n var cxp = f * rx * yp / ry;\n var cyp = f * -ry * xp / rx;\n var cx = (x1 + x2) / 2.0\n + mathCos(psi) * cxp\n - mathSin(psi) * cyp;\n var cy = (y1 + y2) / 2.0\n + mathSin(psi) * cxp\n + mathCos(psi) * cyp;\n var theta = vAngle([1, 0], [(xp - cxp) / rx, (yp - cyp) / ry]);\n var u = [(xp - cxp) / rx, (yp - cyp) / ry];\n var v = [(-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry];\n var dTheta = vAngle(u, v);\n if (vRatio(u, v) <= -1) {\n dTheta = PI;\n }\n if (vRatio(u, v) >= 1) {\n dTheta = 0;\n }\n if (dTheta < 0) {\n var n = Math.round(dTheta / PI * 1e6) / 1e6;\n dTheta = PI * 2 + (n % 2) * PI;\n }\n path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\nfunction createPathProxyFromString(data) {\n var path = new PathProxy();\n if (!data) {\n return path;\n }\n var cpx = 0;\n var cpy = 0;\n var subpathX = cpx;\n var subpathY = cpy;\n var prevCmd;\n var CMD = PathProxy.CMD;\n var cmdList = data.match(commandReg);\n if (!cmdList) {\n return path;\n }\n for (var l = 0; l < cmdList.length; l++) {\n var cmdText = cmdList[l];\n var cmdStr = cmdText.charAt(0);\n var cmd = void 0;\n var p = cmdText.match(numberReg) || [];\n var pLen = p.length;\n for (var i = 0; i < pLen; i++) {\n p[i] = parseFloat(p[i]);\n }\n var off = 0;\n while (off < pLen) {\n var ctlPtx = void 0;\n var ctlPty = void 0;\n var rx = void 0;\n var ry = void 0;\n var psi = void 0;\n var fa = void 0;\n var fs = void 0;\n var x1 = cpx;\n var y1 = cpy;\n var len = void 0;\n var pathData = void 0;\n switch (cmdStr) {\n case 'l':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'L':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'm':\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'l';\n break;\n case 'M':\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.M;\n path.addData(cmd, cpx, cpy);\n subpathX = cpx;\n subpathY = cpy;\n cmdStr = 'L';\n break;\n case 'h':\n cpx += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'H':\n cpx = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'v':\n cpy += p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'V':\n cpy = p[off++];\n cmd = CMD.L;\n path.addData(cmd, cpx, cpy);\n break;\n case 'C':\n cmd = CMD.C;\n path.addData(cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]);\n cpx = p[off - 2];\n cpy = p[off - 1];\n break;\n case 'c':\n cmd = CMD.C;\n path.addData(cmd, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy, p[off++] + cpx, p[off++] + cpy);\n cpx += p[off - 2];\n cpy += p[off - 1];\n break;\n case 'S':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 's':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.C) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cmd = CMD.C;\n x1 = cpx + p[off++];\n y1 = cpy + p[off++];\n cpx += p[off++];\n cpy += p[off++];\n path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n break;\n case 'Q':\n x1 = p[off++];\n y1 = p[off++];\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'q':\n x1 = p[off++] + cpx;\n y1 = p[off++] + cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, x1, y1, cpx, cpy);\n break;\n case 'T':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 't':\n ctlPtx = cpx;\n ctlPty = cpy;\n len = path.len();\n pathData = path.data;\n if (prevCmd === CMD.Q) {\n ctlPtx += cpx - pathData[len - 4];\n ctlPty += cpy - pathData[len - 3];\n }\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.Q;\n path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n break;\n case 'A':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx = p[off++];\n cpy = p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n case 'a':\n rx = p[off++];\n ry = p[off++];\n psi = p[off++];\n fa = p[off++];\n fs = p[off++];\n x1 = cpx, y1 = cpy;\n cpx += p[off++];\n cpy += p[off++];\n cmd = CMD.A;\n processArc(x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path);\n break;\n }\n }\n if (cmdStr === 'z' || cmdStr === 'Z') {\n cmd = CMD.Z;\n path.addData(cmd);\n cpx = subpathX;\n cpy = subpathY;\n }\n prevCmd = cmd;\n }\n path.toStatic();\n return path;\n}\nvar SVGPath = (function (_super) {\n __extends(SVGPath, _super);\n function SVGPath() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SVGPath.prototype.applyTransform = function (m) { };\n return SVGPath;\n}(Path));\nfunction isPathProxy(path) {\n return path.setData != null;\n}\nfunction createPathOptions(str, opts) {\n var pathProxy = createPathProxyFromString(str);\n var innerOpts = extend({}, opts);\n innerOpts.buildPath = function (path) {\n if (isPathProxy(path)) {\n path.setData(pathProxy.data);\n var ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n else {\n var ctx = path;\n pathProxy.rebuildPath(ctx, 1);\n }\n };\n innerOpts.applyTransform = function (m) {\n transformPath(pathProxy, m);\n this.dirtyShape();\n };\n return innerOpts;\n}\nexport function createFromString(str, opts) {\n return new SVGPath(createPathOptions(str, opts));\n}\nexport function extendFromString(str, defaultOpts) {\n var innerOpts = createPathOptions(str, defaultOpts);\n var Sub = (function (_super) {\n __extends(Sub, _super);\n function Sub(opts) {\n var _this = _super.call(this, opts) || this;\n _this.applyTransform = innerOpts.applyTransform;\n _this.buildPath = innerOpts.buildPath;\n return _this;\n }\n return Sub;\n }(SVGPath));\n return Sub;\n}\nexport function mergePath(pathEls, opts) {\n var pathList = [];\n var len = pathEls.length;\n for (var i = 0; i < len; i++) {\n var pathEl = pathEls[i];\n pathList.push(pathEl.getUpdatedPathProxy(true));\n }\n var pathBundle = new Path(opts);\n pathBundle.createPathProxy();\n pathBundle.buildPath = function (path) {\n if (isPathProxy(path)) {\n path.appendPath(pathList);\n var ctx = path.getContext();\n if (ctx) {\n path.rebuildPath(ctx, 1);\n }\n }\n };\n return pathBundle;\n}\nexport function clonePath(sourcePath, opts) {\n opts = opts || {};\n var path = new Path();\n if (sourcePath.shape) {\n path.setShape(sourcePath.shape);\n }\n path.setStyle(sourcePath.style);\n if (opts.bakeTransform) {\n transformPath(path.path, sourcePath.getComputedTransform());\n }\n else {\n if (opts.toLocal) {\n path.setLocalTransform(sourcePath.getComputedTransform());\n }\n else {\n path.copyTransform(sourcePath);\n }\n }\n path.buildPath = sourcePath.buildPath;\n path.applyTransform = path.applyTransform;\n path.z = sourcePath.z;\n path.z2 = sourcePath.z2;\n path.zlevel = sourcePath.zlevel;\n return path;\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nvar CircleShape = (function () {\n function CircleShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n }\n return CircleShape;\n}());\nexport { CircleShape };\nvar Circle = (function (_super) {\n __extends(Circle, _super);\n function Circle(opts) {\n return _super.call(this, opts) || this;\n }\n Circle.prototype.getDefaultShape = function () {\n return new CircleShape();\n };\n Circle.prototype.buildPath = function (ctx, shape) {\n ctx.moveTo(shape.cx + shape.r, shape.cy);\n ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2);\n };\n return Circle;\n}(Path));\n;\nCircle.prototype.type = 'circle';\nexport default Circle;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nvar EllipseShape = (function () {\n function EllipseShape() {\n this.cx = 0;\n this.cy = 0;\n this.rx = 0;\n this.ry = 0;\n }\n return EllipseShape;\n}());\nexport { EllipseShape };\nvar Ellipse = (function (_super) {\n __extends(Ellipse, _super);\n function Ellipse(opts) {\n return _super.call(this, opts) || this;\n }\n Ellipse.prototype.getDefaultShape = function () {\n return new EllipseShape();\n };\n Ellipse.prototype.buildPath = function (ctx, shape) {\n var k = 0.5522848;\n var x = shape.cx;\n var y = shape.cy;\n var a = shape.rx;\n var b = shape.ry;\n var ox = a * k;\n var oy = b * k;\n ctx.moveTo(x - a, y);\n ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n ctx.closePath();\n };\n return Ellipse;\n}(Path));\nEllipse.prototype.type = 'ellipse';\nexport default Ellipse;\n","import { isArray } from '../../core/util.js';\nvar PI = Math.PI;\nvar PI2 = PI * 2;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar mathACos = Math.acos;\nvar mathATan2 = Math.atan2;\nvar mathAbs = Math.abs;\nvar mathSqrt = Math.sqrt;\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar e = 1e-4;\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var dx10 = x1 - x0;\n var dy10 = y1 - y0;\n var dx32 = x3 - x2;\n var dy32 = y3 - y2;\n var t = dy32 * dx10 - dx32 * dy10;\n if (t * t < e) {\n return;\n }\n t = (dx32 * (y0 - y2) - dy32 * (x0 - x2)) / t;\n return [x0 + t * dx10, y0 + t * dy10];\n}\nfunction computeCornerTangents(x0, y0, x1, y1, radius, cr, clockwise) {\n var x01 = x0 - x1;\n var y01 = y0 - y1;\n var lo = (clockwise ? cr : -cr) / mathSqrt(x01 * x01 + y01 * y01);\n var ox = lo * y01;\n var oy = -lo * x01;\n var x11 = x0 + ox;\n var y11 = y0 + oy;\n var x10 = x1 + ox;\n var y10 = y1 + oy;\n var x00 = (x11 + x10) / 2;\n var y00 = (y11 + y10) / 2;\n var dx = x10 - x11;\n var dy = y10 - y11;\n var d2 = dx * dx + dy * dy;\n var r = radius - cr;\n var s = x11 * y10 - x10 * y11;\n var d = (dy < 0 ? -1 : 1) * mathSqrt(mathMax(0, r * r * d2 - s * s));\n var cx0 = (s * dy - dx * d) / d2;\n var cy0 = (-s * dx - dy * d) / d2;\n var cx1 = (s * dy + dx * d) / d2;\n var cy1 = (-s * dx + dy * d) / d2;\n var dx0 = cx0 - x00;\n var dy0 = cy0 - y00;\n var dx1 = cx1 - x00;\n var dy1 = cy1 - y00;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) {\n cx0 = cx1;\n cy0 = cy1;\n }\n return {\n cx: cx0,\n cy: cy0,\n x0: -ox,\n y0: -oy,\n x1: cx0 * (radius / r - 1),\n y1: cy0 * (radius / r - 1)\n };\n}\nfunction normalizeCornerRadius(cr) {\n var arr;\n if (isArray(cr)) {\n var len = cr.length;\n if (!len) {\n return cr;\n }\n if (len === 1) {\n arr = [cr[0], cr[0], 0, 0];\n }\n else if (len === 2) {\n arr = [cr[0], cr[0], cr[1], cr[1]];\n }\n else if (len === 3) {\n arr = cr.concat(cr[2]);\n }\n else {\n arr = cr;\n }\n }\n else {\n arr = [cr, cr, cr, cr];\n }\n return arr;\n}\nexport function buildPath(ctx, shape) {\n var _a;\n var radius = mathMax(shape.r, 0);\n var innerRadius = mathMax(shape.r0 || 0, 0);\n var hasRadius = radius > 0;\n var hasInnerRadius = innerRadius > 0;\n if (!hasRadius && !hasInnerRadius) {\n return;\n }\n if (!hasRadius) {\n radius = innerRadius;\n innerRadius = 0;\n }\n if (innerRadius > radius) {\n var tmp = radius;\n radius = innerRadius;\n innerRadius = tmp;\n }\n var startAngle = shape.startAngle, endAngle = shape.endAngle;\n if (isNaN(startAngle) || isNaN(endAngle)) {\n return;\n }\n var cx = shape.cx, cy = shape.cy;\n var clockwise = !!shape.clockwise;\n var arc = mathAbs(endAngle - startAngle);\n var mod = arc > PI2 && arc % PI2;\n mod > e && (arc = mod);\n if (!(radius > e)) {\n ctx.moveTo(cx, cy);\n }\n else if (arc > PI2 - e) {\n ctx.moveTo(cx + radius * mathCos(startAngle), cy + radius * mathSin(startAngle));\n ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise);\n if (innerRadius > e) {\n ctx.moveTo(cx + innerRadius * mathCos(endAngle), cy + innerRadius * mathSin(endAngle));\n ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n else {\n var icrStart = void 0;\n var icrEnd = void 0;\n var ocrStart = void 0;\n var ocrEnd = void 0;\n var ocrs = void 0;\n var ocre = void 0;\n var icrs = void 0;\n var icre = void 0;\n var ocrMax = void 0;\n var icrMax = void 0;\n var limitedOcrMax = void 0;\n var limitedIcrMax = void 0;\n var xre = void 0;\n var yre = void 0;\n var xirs = void 0;\n var yirs = void 0;\n var xrs = radius * mathCos(startAngle);\n var yrs = radius * mathSin(startAngle);\n var xire = innerRadius * mathCos(endAngle);\n var yire = innerRadius * mathSin(endAngle);\n var hasArc = arc > e;\n if (hasArc) {\n var cornerRadius = shape.cornerRadius;\n if (cornerRadius) {\n _a = normalizeCornerRadius(cornerRadius), icrStart = _a[0], icrEnd = _a[1], ocrStart = _a[2], ocrEnd = _a[3];\n }\n var halfRd = mathAbs(radius - innerRadius) / 2;\n ocrs = mathMin(halfRd, ocrStart);\n ocre = mathMin(halfRd, ocrEnd);\n icrs = mathMin(halfRd, icrStart);\n icre = mathMin(halfRd, icrEnd);\n limitedOcrMax = ocrMax = mathMax(ocrs, ocre);\n limitedIcrMax = icrMax = mathMax(icrs, icre);\n if (ocrMax > e || icrMax > e) {\n xre = radius * mathCos(endAngle);\n yre = radius * mathSin(endAngle);\n xirs = innerRadius * mathCos(startAngle);\n yirs = innerRadius * mathSin(startAngle);\n if (arc < PI) {\n var it_1 = intersect(xrs, yrs, xirs, yirs, xre, yre, xire, yire);\n if (it_1) {\n var x0 = xrs - it_1[0];\n var y0 = yrs - it_1[1];\n var x1 = xre - it_1[0];\n var y1 = yre - it_1[1];\n var a = 1 / mathSin(mathACos((x0 * x1 + y0 * y1) / (mathSqrt(x0 * x0 + y0 * y0) * mathSqrt(x1 * x1 + y1 * y1))) / 2);\n var b = mathSqrt(it_1[0] * it_1[0] + it_1[1] * it_1[1]);\n limitedOcrMax = mathMin(ocrMax, (radius - b) / (a + 1));\n limitedIcrMax = mathMin(icrMax, (innerRadius - b) / (a - 1));\n }\n }\n }\n }\n if (!hasArc) {\n ctx.moveTo(cx + xrs, cy + yrs);\n }\n else if (limitedOcrMax > e) {\n var crStart = mathMin(ocrStart, limitedOcrMax);\n var crEnd = mathMin(ocrEnd, limitedOcrMax);\n var ct0 = computeCornerTangents(xirs, yirs, xrs, yrs, radius, crStart, clockwise);\n var ct1 = computeCornerTangents(xre, yre, xire, yire, radius, crEnd, clockwise);\n ctx.moveTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0);\n if (limitedOcrMax < ocrMax && crStart === crEnd) {\n ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedOcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise);\n }\n else {\n crStart > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crStart, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise);\n ctx.arc(cx, cy, radius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), !clockwise);\n crEnd > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crEnd, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise);\n }\n }\n else {\n ctx.moveTo(cx + xrs, cy + yrs);\n ctx.arc(cx, cy, radius, startAngle, endAngle, !clockwise);\n }\n if (!(innerRadius > e) || !hasArc) {\n ctx.lineTo(cx + xire, cy + yire);\n }\n else if (limitedIcrMax > e) {\n var crStart = mathMin(icrStart, limitedIcrMax);\n var crEnd = mathMin(icrEnd, limitedIcrMax);\n var ct0 = computeCornerTangents(xire, yire, xre, yre, innerRadius, -crEnd, clockwise);\n var ct1 = computeCornerTangents(xrs, yrs, xirs, yirs, innerRadius, -crStart, clockwise);\n ctx.lineTo(cx + ct0.cx + ct0.x0, cy + ct0.cy + ct0.y0);\n if (limitedIcrMax < icrMax && crStart === crEnd) {\n ctx.arc(cx + ct0.cx, cy + ct0.cy, limitedIcrMax, mathATan2(ct0.y0, ct0.x0), mathATan2(ct1.y0, ct1.x0), !clockwise);\n }\n else {\n crEnd > 0 && ctx.arc(cx + ct0.cx, cy + ct0.cy, crEnd, mathATan2(ct0.y0, ct0.x0), mathATan2(ct0.y1, ct0.x1), !clockwise);\n ctx.arc(cx, cy, innerRadius, mathATan2(ct0.cy + ct0.y1, ct0.cx + ct0.x1), mathATan2(ct1.cy + ct1.y1, ct1.cx + ct1.x1), clockwise);\n crStart > 0 && ctx.arc(cx + ct1.cx, cy + ct1.cy, crStart, mathATan2(ct1.y1, ct1.x1), mathATan2(ct1.y0, ct1.x0), !clockwise);\n }\n }\n else {\n ctx.lineTo(cx + xire, cy + yire);\n ctx.arc(cx, cy, innerRadius, endAngle, startAngle, clockwise);\n }\n }\n ctx.closePath();\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport * as roundSectorHelper from '../helper/roundSector.js';\nvar SectorShape = (function () {\n function SectorShape() {\n this.cx = 0;\n this.cy = 0;\n this.r0 = 0;\n this.r = 0;\n this.startAngle = 0;\n this.endAngle = Math.PI * 2;\n this.clockwise = true;\n this.cornerRadius = 0;\n }\n return SectorShape;\n}());\nexport { SectorShape };\nvar Sector = (function (_super) {\n __extends(Sector, _super);\n function Sector(opts) {\n return _super.call(this, opts) || this;\n }\n Sector.prototype.getDefaultShape = function () {\n return new SectorShape();\n };\n Sector.prototype.buildPath = function (ctx, shape) {\n roundSectorHelper.buildPath(ctx, shape);\n };\n Sector.prototype.isZeroArea = function () {\n return this.shape.startAngle === this.shape.endAngle\n || this.shape.r === this.shape.r0;\n };\n return Sector;\n}(Path));\nSector.prototype.type = 'sector';\nexport default Sector;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nvar RingShape = (function () {\n function RingShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n this.r0 = 0;\n }\n return RingShape;\n}());\nexport { RingShape };\nvar Ring = (function (_super) {\n __extends(Ring, _super);\n function Ring(opts) {\n return _super.call(this, opts) || this;\n }\n Ring.prototype.getDefaultShape = function () {\n return new RingShape();\n };\n Ring.prototype.buildPath = function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var PI2 = Math.PI * 2;\n ctx.moveTo(x + shape.r, y);\n ctx.arc(x, y, shape.r, 0, PI2, false);\n ctx.moveTo(x + shape.r0, y);\n ctx.arc(x, y, shape.r0, 0, PI2, true);\n };\n return Ring;\n}(Path));\nRing.prototype.type = 'ring';\nexport default Ring;\n","import { min as v2Min, max as v2Max, scale as v2Scale, distance as v2Distance, add as v2Add, clone as v2Clone, sub as v2Sub } from '../../core/vector.js';\nexport default function smoothBezier(points, smooth, isLoop, constraint) {\n var cps = [];\n var v = [];\n var v1 = [];\n var v2 = [];\n var prevPoint;\n var nextPoint;\n var min;\n var max;\n if (constraint) {\n min = [Infinity, Infinity];\n max = [-Infinity, -Infinity];\n for (var i = 0, len = points.length; i < len; i++) {\n v2Min(min, min, points[i]);\n v2Max(max, max, points[i]);\n }\n v2Min(min, min, constraint[0]);\n v2Max(max, max, constraint[1]);\n }\n for (var i = 0, len = points.length; i < len; i++) {\n var point = points[i];\n if (isLoop) {\n prevPoint = points[i ? i - 1 : len - 1];\n nextPoint = points[(i + 1) % len];\n }\n else {\n if (i === 0 || i === len - 1) {\n cps.push(v2Clone(points[i]));\n continue;\n }\n else {\n prevPoint = points[i - 1];\n nextPoint = points[i + 1];\n }\n }\n v2Sub(v, nextPoint, prevPoint);\n v2Scale(v, v, smooth);\n var d0 = v2Distance(point, prevPoint);\n var d1 = v2Distance(point, nextPoint);\n var sum = d0 + d1;\n if (sum !== 0) {\n d0 /= sum;\n d1 /= sum;\n }\n v2Scale(v1, v, -d0);\n v2Scale(v2, v, d1);\n var cp0 = v2Add([], point, v1);\n var cp1 = v2Add([], point, v2);\n if (constraint) {\n v2Max(cp0, cp0, min);\n v2Min(cp0, cp0, max);\n v2Max(cp1, cp1, min);\n v2Min(cp1, cp1, max);\n }\n cps.push(cp0);\n cps.push(cp1);\n }\n if (isLoop) {\n cps.push(cps.shift());\n }\n return cps;\n}\n","import smoothBezier from './smoothBezier.js';\nexport function buildPath(ctx, shape, closePath) {\n var smooth = shape.smooth;\n var points = shape.points;\n if (points && points.length >= 2) {\n if (smooth) {\n var controlPoints = smoothBezier(points, smooth, closePath, shape.smoothConstraint);\n ctx.moveTo(points[0][0], points[0][1]);\n var len = points.length;\n for (var i = 0; i < (closePath ? len : len - 1); i++) {\n var cp1 = controlPoints[i * 2];\n var cp2 = controlPoints[i * 2 + 1];\n var p = points[(i + 1) % len];\n ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);\n }\n }\n else {\n ctx.moveTo(points[0][0], points[0][1]);\n for (var i = 1, l = points.length; i < l; i++) {\n ctx.lineTo(points[i][0], points[i][1]);\n }\n }\n closePath && ctx.closePath();\n }\n}\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport * as polyHelper from '../helper/poly.js';\nvar PolygonShape = (function () {\n function PolygonShape() {\n this.points = null;\n this.smooth = 0;\n this.smoothConstraint = null;\n }\n return PolygonShape;\n}());\nexport { PolygonShape };\nvar Polygon = (function (_super) {\n __extends(Polygon, _super);\n function Polygon(opts) {\n return _super.call(this, opts) || this;\n }\n Polygon.prototype.getDefaultShape = function () {\n return new PolygonShape();\n };\n Polygon.prototype.buildPath = function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, true);\n };\n return Polygon;\n}(Path));\n;\nPolygon.prototype.type = 'polygon';\nexport default Polygon;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport * as polyHelper from '../helper/poly.js';\nvar PolylineShape = (function () {\n function PolylineShape() {\n this.points = null;\n this.percent = 1;\n this.smooth = 0;\n this.smoothConstraint = null;\n }\n return PolylineShape;\n}());\nexport { PolylineShape };\nvar Polyline = (function (_super) {\n __extends(Polyline, _super);\n function Polyline(opts) {\n return _super.call(this, opts) || this;\n }\n Polyline.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Polyline.prototype.getDefaultShape = function () {\n return new PolylineShape();\n };\n Polyline.prototype.buildPath = function (ctx, shape) {\n polyHelper.buildPath(ctx, shape, false);\n };\n return Polyline;\n}(Path));\nPolyline.prototype.type = 'polyline';\nexport default Polyline;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport { subPixelOptimizeLine } from '../helper/subPixelOptimize.js';\nvar subPixelOptimizeOutputShape = {};\nvar LineShape = (function () {\n function LineShape() {\n this.x1 = 0;\n this.y1 = 0;\n this.x2 = 0;\n this.y2 = 0;\n this.percent = 1;\n }\n return LineShape;\n}());\nexport { LineShape };\nvar Line = (function (_super) {\n __extends(Line, _super);\n function Line(opts) {\n return _super.call(this, opts) || this;\n }\n Line.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Line.prototype.getDefaultShape = function () {\n return new LineShape();\n };\n Line.prototype.buildPath = function (ctx, shape) {\n var x1;\n var y1;\n var x2;\n var y2;\n if (this.subPixelOptimize) {\n var optimizedShape = subPixelOptimizeLine(subPixelOptimizeOutputShape, shape, this.style);\n x1 = optimizedShape.x1;\n y1 = optimizedShape.y1;\n x2 = optimizedShape.x2;\n y2 = optimizedShape.y2;\n }\n else {\n x1 = shape.x1;\n y1 = shape.y1;\n x2 = shape.x2;\n y2 = shape.y2;\n }\n var percent = shape.percent;\n if (percent === 0) {\n return;\n }\n ctx.moveTo(x1, y1);\n if (percent < 1) {\n x2 = x1 * (1 - percent) + x2 * percent;\n y2 = y1 * (1 - percent) + y2 * percent;\n }\n ctx.lineTo(x2, y2);\n };\n Line.prototype.pointAt = function (p) {\n var shape = this.shape;\n return [\n shape.x1 * (1 - p) + shape.x2 * p,\n shape.y1 * (1 - p) + shape.y2 * p\n ];\n };\n return Line;\n}(Path));\nLine.prototype.type = 'line';\nexport default Line;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nimport * as vec2 from '../../core/vector.js';\nimport { quadraticSubdivide, cubicSubdivide, quadraticAt, cubicAt, quadraticDerivativeAt, cubicDerivativeAt } from '../../core/curve.js';\nvar out = [];\nvar BezierCurveShape = (function () {\n function BezierCurveShape() {\n this.x1 = 0;\n this.y1 = 0;\n this.x2 = 0;\n this.y2 = 0;\n this.cpx1 = 0;\n this.cpy1 = 0;\n this.percent = 1;\n }\n return BezierCurveShape;\n}());\nexport { BezierCurveShape };\nfunction someVectorAt(shape, t, isTangent) {\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n if (cpx2 != null || cpy2 != null) {\n return [\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n ];\n }\n else {\n return [\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n ];\n }\n}\nvar BezierCurve = (function (_super) {\n __extends(BezierCurve, _super);\n function BezierCurve(opts) {\n return _super.call(this, opts) || this;\n }\n BezierCurve.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n BezierCurve.prototype.getDefaultShape = function () {\n return new BezierCurveShape();\n };\n BezierCurve.prototype.buildPath = function (ctx, shape) {\n var x1 = shape.x1;\n var y1 = shape.y1;\n var x2 = shape.x2;\n var y2 = shape.y2;\n var cpx1 = shape.cpx1;\n var cpy1 = shape.cpy1;\n var cpx2 = shape.cpx2;\n var cpy2 = shape.cpy2;\n var percent = shape.percent;\n if (percent === 0) {\n return;\n }\n ctx.moveTo(x1, y1);\n if (cpx2 == null || cpy2 == null) {\n if (percent < 1) {\n quadraticSubdivide(x1, cpx1, x2, percent, out);\n cpx1 = out[1];\n x2 = out[2];\n quadraticSubdivide(y1, cpy1, y2, percent, out);\n cpy1 = out[1];\n y2 = out[2];\n }\n ctx.quadraticCurveTo(cpx1, cpy1, x2, y2);\n }\n else {\n if (percent < 1) {\n cubicSubdivide(x1, cpx1, cpx2, x2, percent, out);\n cpx1 = out[1];\n cpx2 = out[2];\n x2 = out[3];\n cubicSubdivide(y1, cpy1, cpy2, y2, percent, out);\n cpy1 = out[1];\n cpy2 = out[2];\n y2 = out[3];\n }\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n }\n };\n BezierCurve.prototype.pointAt = function (t) {\n return someVectorAt(this.shape, t, false);\n };\n BezierCurve.prototype.tangentAt = function (t) {\n var p = someVectorAt(this.shape, t, true);\n return vec2.normalize(p, p);\n };\n return BezierCurve;\n}(Path));\n;\nBezierCurve.prototype.type = 'bezier-curve';\nexport default BezierCurve;\n","import { __extends } from \"tslib\";\nimport Path from '../Path.js';\nvar ArcShape = (function () {\n function ArcShape() {\n this.cx = 0;\n this.cy = 0;\n this.r = 0;\n this.startAngle = 0;\n this.endAngle = Math.PI * 2;\n this.clockwise = true;\n }\n return ArcShape;\n}());\nexport { ArcShape };\nvar Arc = (function (_super) {\n __extends(Arc, _super);\n function Arc(opts) {\n return _super.call(this, opts) || this;\n }\n Arc.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n Arc.prototype.getDefaultShape = function () {\n return new ArcShape();\n };\n Arc.prototype.buildPath = function (ctx, shape) {\n var x = shape.cx;\n var y = shape.cy;\n var r = Math.max(shape.r, 0);\n var startAngle = shape.startAngle;\n var endAngle = shape.endAngle;\n var clockwise = shape.clockwise;\n var unitX = Math.cos(startAngle);\n var unitY = Math.sin(startAngle);\n ctx.moveTo(unitX * r + x, unitY * r + y);\n ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n };\n return Arc;\n}(Path));\nArc.prototype.type = 'arc';\nexport default Arc;\n","import { __extends } from \"tslib\";\nimport Path from './Path.js';\nvar CompoundPath = (function (_super) {\n __extends(CompoundPath, _super);\n function CompoundPath() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'compound';\n return _this;\n }\n CompoundPath.prototype._updatePathDirty = function () {\n var paths = this.shape.paths;\n var dirtyPath = this.shapeChanged();\n for (var i = 0; i < paths.length; i++) {\n dirtyPath = dirtyPath || paths[i].shapeChanged();\n }\n if (dirtyPath) {\n this.dirtyShape();\n }\n };\n CompoundPath.prototype.beforeBrush = function () {\n this._updatePathDirty();\n var paths = this.shape.paths || [];\n var scale = this.getGlobalScale();\n for (var i = 0; i < paths.length; i++) {\n if (!paths[i].path) {\n paths[i].createPathProxy();\n }\n paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n }\n };\n CompoundPath.prototype.buildPath = function (ctx, shape) {\n var paths = shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].buildPath(ctx, paths[i].shape, true);\n }\n };\n CompoundPath.prototype.afterBrush = function () {\n var paths = this.shape.paths || [];\n for (var i = 0; i < paths.length; i++) {\n paths[i].pathUpdated();\n }\n };\n CompoundPath.prototype.getBoundingRect = function () {\n this._updatePathDirty.call(this);\n return Path.prototype.getBoundingRect.call(this);\n };\n return CompoundPath;\n}(Path));\nexport default CompoundPath;\n","var Gradient = (function () {\n function Gradient(colorStops) {\n this.colorStops = colorStops || [];\n }\n Gradient.prototype.addColorStop = function (offset, color) {\n this.colorStops.push({\n offset: offset,\n color: color\n });\n };\n return Gradient;\n}());\nexport default Gradient;\n","import { __extends } from \"tslib\";\nimport Gradient from './Gradient.js';\nvar LinearGradient = (function (_super) {\n __extends(LinearGradient, _super);\n function LinearGradient(x, y, x2, y2, colorStops, globalCoord) {\n var _this = _super.call(this, colorStops) || this;\n _this.x = x == null ? 0 : x;\n _this.y = y == null ? 0 : y;\n _this.x2 = x2 == null ? 1 : x2;\n _this.y2 = y2 == null ? 0 : y2;\n _this.type = 'linear';\n _this.global = globalCoord || false;\n return _this;\n }\n return LinearGradient;\n}(Gradient));\nexport default LinearGradient;\n;\n","import { __extends } from \"tslib\";\nimport Gradient from './Gradient.js';\nvar RadialGradient = (function (_super) {\n __extends(RadialGradient, _super);\n function RadialGradient(x, y, r, colorStops, globalCoord) {\n var _this = _super.call(this, colorStops) || this;\n _this.x = x == null ? 0.5 : x;\n _this.y = y == null ? 0.5 : y;\n _this.r = r == null ? 0.5 : r;\n _this.type = 'radial';\n _this.global = globalCoord || false;\n return _this;\n }\n return RadialGradient;\n}(Gradient));\nexport default RadialGradient;\n","import Point from './Point.js';\nvar extent = [0, 0];\nvar extent2 = [0, 0];\nvar minTv = new Point();\nvar maxTv = new Point();\nvar OrientedBoundingRect = (function () {\n function OrientedBoundingRect(rect, transform) {\n this._corners = [];\n this._axes = [];\n this._origin = [0, 0];\n for (var i = 0; i < 4; i++) {\n this._corners[i] = new Point();\n }\n for (var i = 0; i < 2; i++) {\n this._axes[i] = new Point();\n }\n if (rect) {\n this.fromBoundingRect(rect, transform);\n }\n }\n OrientedBoundingRect.prototype.fromBoundingRect = function (rect, transform) {\n var corners = this._corners;\n var axes = this._axes;\n var x = rect.x;\n var y = rect.y;\n var x2 = x + rect.width;\n var y2 = y + rect.height;\n corners[0].set(x, y);\n corners[1].set(x2, y);\n corners[2].set(x2, y2);\n corners[3].set(x, y2);\n if (transform) {\n for (var i = 0; i < 4; i++) {\n corners[i].transform(transform);\n }\n }\n Point.sub(axes[0], corners[1], corners[0]);\n Point.sub(axes[1], corners[3], corners[0]);\n axes[0].normalize();\n axes[1].normalize();\n for (var i = 0; i < 2; i++) {\n this._origin[i] = axes[i].dot(corners[0]);\n }\n };\n OrientedBoundingRect.prototype.intersect = function (other, mtv) {\n var overlapped = true;\n var noMtv = !mtv;\n minTv.set(Infinity, Infinity);\n maxTv.set(0, 0);\n if (!this._intersectCheckOneSide(this, other, minTv, maxTv, noMtv, 1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n if (!this._intersectCheckOneSide(other, this, minTv, maxTv, noMtv, -1)) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n }\n if (!noMtv) {\n Point.copy(mtv, overlapped ? minTv : maxTv);\n }\n return overlapped;\n };\n OrientedBoundingRect.prototype._intersectCheckOneSide = function (self, other, minTv, maxTv, noMtv, inverse) {\n var overlapped = true;\n for (var i = 0; i < 2; i++) {\n var axis = this._axes[i];\n this._getProjMinMaxOnAxis(i, self._corners, extent);\n this._getProjMinMaxOnAxis(i, other._corners, extent2);\n if (extent[1] < extent2[0] || extent[0] > extent2[1]) {\n overlapped = false;\n if (noMtv) {\n return overlapped;\n }\n var dist0 = Math.abs(extent2[0] - extent[1]);\n var dist1 = Math.abs(extent[0] - extent2[1]);\n if (Math.min(dist0, dist1) > maxTv.len()) {\n if (dist0 < dist1) {\n Point.scale(maxTv, axis, -dist0 * inverse);\n }\n else {\n Point.scale(maxTv, axis, dist1 * inverse);\n }\n }\n }\n else if (minTv) {\n var dist0 = Math.abs(extent2[0] - extent[1]);\n var dist1 = Math.abs(extent[0] - extent2[1]);\n if (Math.min(dist0, dist1) < minTv.len()) {\n if (dist0 < dist1) {\n Point.scale(minTv, axis, dist0 * inverse);\n }\n else {\n Point.scale(minTv, axis, -dist1 * inverse);\n }\n }\n }\n }\n return overlapped;\n };\n OrientedBoundingRect.prototype._getProjMinMaxOnAxis = function (dim, corners, out) {\n var axis = this._axes[dim];\n var origin = this._origin;\n var proj = corners[0].dot(axis) + origin[dim];\n var min = proj;\n var max = proj;\n for (var i = 1; i < corners.length; i++) {\n var proj_1 = corners[i].dot(axis) + origin[dim];\n min = Math.min(proj_1, min);\n max = Math.max(proj_1, max);\n }\n out[0] = min;\n out[1] = max;\n };\n return OrientedBoundingRect;\n}());\nexport default OrientedBoundingRect;\n","import { __extends } from \"tslib\";\nimport Displayble from './Displayable.js';\nimport BoundingRect from '../core/BoundingRect.js';\nvar m = [];\nvar IncrementalDisplayable = (function (_super) {\n __extends(IncrementalDisplayable, _super);\n function IncrementalDisplayable() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.notClear = true;\n _this.incremental = true;\n _this._displayables = [];\n _this._temporaryDisplayables = [];\n _this._cursor = 0;\n return _this;\n }\n IncrementalDisplayable.prototype.traverse = function (cb, context) {\n cb.call(context, this);\n };\n IncrementalDisplayable.prototype.useStyle = function () {\n this.style = {};\n };\n IncrementalDisplayable.prototype.getCursor = function () {\n return this._cursor;\n };\n IncrementalDisplayable.prototype.innerAfterBrush = function () {\n this._cursor = this._displayables.length;\n };\n IncrementalDisplayable.prototype.clearDisplaybles = function () {\n this._displayables = [];\n this._temporaryDisplayables = [];\n this._cursor = 0;\n this.markRedraw();\n this.notClear = false;\n };\n IncrementalDisplayable.prototype.clearTemporalDisplayables = function () {\n this._temporaryDisplayables = [];\n };\n IncrementalDisplayable.prototype.addDisplayable = function (displayable, notPersistent) {\n if (notPersistent) {\n this._temporaryDisplayables.push(displayable);\n }\n else {\n this._displayables.push(displayable);\n }\n this.markRedraw();\n };\n IncrementalDisplayable.prototype.addDisplayables = function (displayables, notPersistent) {\n notPersistent = notPersistent || false;\n for (var i = 0; i < displayables.length; i++) {\n this.addDisplayable(displayables[i], notPersistent);\n }\n };\n IncrementalDisplayable.prototype.getDisplayables = function () {\n return this._displayables;\n };\n IncrementalDisplayable.prototype.getTemporalDisplayables = function () {\n return this._temporaryDisplayables;\n };\n IncrementalDisplayable.prototype.eachPendingDisplayable = function (cb) {\n for (var i = this._cursor; i < this._displayables.length; i++) {\n cb && cb(this._displayables[i]);\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n cb && cb(this._temporaryDisplayables[i]);\n }\n };\n IncrementalDisplayable.prototype.update = function () {\n this.updateTransform();\n for (var i = this._cursor; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n var displayable = this._temporaryDisplayables[i];\n displayable.parent = this;\n displayable.update();\n displayable.parent = null;\n }\n };\n IncrementalDisplayable.prototype.getBoundingRect = function () {\n if (!this._rect) {\n var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n var childRect = displayable.getBoundingRect().clone();\n if (displayable.needLocalTransform()) {\n childRect.applyTransform(displayable.getLocalTransform(m));\n }\n rect.union(childRect);\n }\n this._rect = rect;\n }\n return this._rect;\n };\n IncrementalDisplayable.prototype.contain = function (x, y) {\n var localPos = this.transformCoordToLocal(x, y);\n var rect = this.getBoundingRect();\n if (rect.contain(localPos[0], localPos[1])) {\n for (var i = 0; i < this._displayables.length; i++) {\n var displayable = this._displayables[i];\n if (displayable.contain(x, y)) {\n return true;\n }\n }\n }\n return false;\n };\n return IncrementalDisplayable;\n}(Displayble));\nexport default IncrementalDisplayable;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as pathTool from 'zrender/lib/tool/path.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport Path from 'zrender/lib/graphic/Path.js';\nimport Transformable from 'zrender/lib/core/Transformable.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport Group from 'zrender/lib/graphic/Group.js';\nimport ZRText from 'zrender/lib/graphic/Text.js';\nimport Circle from 'zrender/lib/graphic/shape/Circle.js';\nimport Ellipse from 'zrender/lib/graphic/shape/Ellipse.js';\nimport Sector from 'zrender/lib/graphic/shape/Sector.js';\nimport Ring from 'zrender/lib/graphic/shape/Ring.js';\nimport Polygon from 'zrender/lib/graphic/shape/Polygon.js';\nimport Polyline from 'zrender/lib/graphic/shape/Polyline.js';\nimport Rect from 'zrender/lib/graphic/shape/Rect.js';\nimport Line from 'zrender/lib/graphic/shape/Line.js';\nimport BezierCurve from 'zrender/lib/graphic/shape/BezierCurve.js';\nimport Arc from 'zrender/lib/graphic/shape/Arc.js';\nimport CompoundPath from 'zrender/lib/graphic/CompoundPath.js';\nimport LinearGradient from 'zrender/lib/graphic/LinearGradient.js';\nimport RadialGradient from 'zrender/lib/graphic/RadialGradient.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport OrientedBoundingRect from 'zrender/lib/core/OrientedBoundingRect.js';\nimport Point from 'zrender/lib/core/Point.js';\nimport IncrementalDisplayable from 'zrender/lib/graphic/IncrementalDisplayable.js';\nimport * as subPixelOptimizeUtil from 'zrender/lib/graphic/helper/subPixelOptimize.js';\nimport { extend, isArrayLike, map, defaults, isString, keys, each, hasOwn, isArray } from 'zrender/lib/core/util.js';\nimport { getECData } from './innerStore.js';\nimport { updateProps, initProps, removeElement, removeElementWithFadeOut, isElementRemoved } from '../animation/basicTransition.js';\n/**\n * @deprecated export for compatitable reason\n */\nexport { updateProps, initProps, removeElement, removeElementWithFadeOut, isElementRemoved };\nvar mathMax = Math.max;\nvar mathMin = Math.min;\nvar _customShapeMap = {};\n/**\n * Extend shape with parameters\n */\nexport function extendShape(opts) {\n return Path.extend(opts);\n}\nvar extendPathFromString = pathTool.extendFromString;\n/**\n * Extend path\n */\nexport function extendPath(pathData, opts) {\n return extendPathFromString(pathData, opts);\n}\n/**\n * Register a user defined shape.\n * The shape class can be fetched by `getShapeClass`\n * This method will overwrite the registered shapes, including\n * the registered built-in shapes, if using the same `name`.\n * The shape can be used in `custom series` and\n * `graphic component` by declaring `{type: name}`.\n *\n * @param name\n * @param ShapeClass Can be generated by `extendShape`.\n */\nexport function registerShape(name, ShapeClass) {\n _customShapeMap[name] = ShapeClass;\n}\n/**\n * Find shape class registered by `registerShape`. Usually used in\n * fetching user defined shape.\n *\n * [Caution]:\n * (1) This method **MUST NOT be used inside echarts !!!**, unless it is prepared\n * to use user registered shapes.\n * Because the built-in shape (see `getBuiltInShape`) will be registered by\n * `registerShape` by default. That enables users to get both built-in\n * shapes as well as the shapes belonging to themsleves. But users can overwrite\n * the built-in shapes by using names like 'circle', 'rect' via calling\n * `registerShape`. So the echarts inner featrues should not fetch shapes from here\n * in case that it is overwritten by users, except that some features, like\n * `custom series`, `graphic component`, do it deliberately.\n *\n * (2) In the features like `custom series`, `graphic component`, the user input\n * `{tpye: 'xxx'}` does not only specify shapes but also specify other graphic\n * elements like `'group'`, `'text'`, `'image'` or event `'path'`. Those names\n * are reserved names, that is, if some user registers a shape named `'image'`,\n * the shape will not be used. If we intending to add some more reserved names\n * in feature, that might bring break changes (disable some existing user shape\n * names). But that case probably rarely happens. So we don't make more mechanism\n * to resolve this issue here.\n *\n * @param name\n * @return The shape class. If not found, return nothing.\n */\nexport function getShapeClass(name) {\n if (_customShapeMap.hasOwnProperty(name)) {\n return _customShapeMap[name];\n }\n}\n/**\n * Create a path element from path data string\n * @param pathData\n * @param opts\n * @param rect\n * @param layout 'center' or 'cover' default to be cover\n */\nexport function makePath(pathData, opts, rect, layout) {\n var path = pathTool.createFromString(pathData, opts);\n if (rect) {\n if (layout === 'center') {\n rect = centerGraphic(rect, path.getBoundingRect());\n }\n resizePath(path, rect);\n }\n return path;\n}\n/**\n * Create a image element from image url\n * @param imageUrl image url\n * @param opts options\n * @param rect constrain rect\n * @param layout 'center' or 'cover'. Default to be 'cover'\n */\nexport function makeImage(imageUrl, rect, layout) {\n var zrImg = new ZRImage({\n style: {\n image: imageUrl,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height\n },\n onload: function (img) {\n if (layout === 'center') {\n var boundingRect = {\n width: img.width,\n height: img.height\n };\n zrImg.setStyle(centerGraphic(rect, boundingRect));\n }\n }\n });\n return zrImg;\n}\n/**\n * Get position of centered element in bounding box.\n *\n * @param rect element local bounding box\n * @param boundingRect constraint bounding box\n * @return element position containing x, y, width, and height\n */\nfunction centerGraphic(rect, boundingRect) {\n // Set rect to center, keep width / height ratio.\n var aspect = boundingRect.width / boundingRect.height;\n var width = rect.height * aspect;\n var height;\n if (width <= rect.width) {\n height = rect.height;\n } else {\n width = rect.width;\n height = width / aspect;\n }\n var cx = rect.x + rect.width / 2;\n var cy = rect.y + rect.height / 2;\n return {\n x: cx - width / 2,\n y: cy - height / 2,\n width: width,\n height: height\n };\n}\nexport var mergePath = pathTool.mergePath;\n/**\n * Resize a path to fit the rect\n * @param path\n * @param rect\n */\nexport function resizePath(path, rect) {\n if (!path.applyTransform) {\n return;\n }\n var pathRect = path.getBoundingRect();\n var m = pathRect.calculateTransform(rect);\n path.applyTransform(m);\n}\n/**\n * Sub pixel optimize line for canvas\n */\nexport function subPixelOptimizeLine(shape, lineWidth) {\n subPixelOptimizeUtil.subPixelOptimizeLine(shape, shape, {\n lineWidth: lineWidth\n });\n return shape;\n}\n/**\n * Sub pixel optimize rect for canvas\n */\nexport function subPixelOptimizeRect(param) {\n subPixelOptimizeUtil.subPixelOptimizeRect(param.shape, param.shape, param.style);\n return param;\n}\n/**\n * Sub pixel optimize for canvas\n *\n * @param position Coordinate, such as x, y\n * @param lineWidth Should be nonnegative integer.\n * @param positiveOrNegative Default false (negative).\n * @return Optimized position.\n */\nexport var subPixelOptimize = subPixelOptimizeUtil.subPixelOptimize;\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param target\n * @param [ancestor]\n */\nexport function getTransform(target, ancestor) {\n var mat = matrix.identity([]);\n while (target && target !== ancestor) {\n matrix.mul(mat, target.getLocalTransform(), mat);\n target = target.parent;\n }\n return mat;\n}\n/**\n * Apply transform to an vertex.\n * @param target [x, y]\n * @param transform Can be:\n * + Transform matrix: like [1, 0, 0, 1, 0, 0]\n * + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param invert Whether use invert matrix.\n * @return [x, y]\n */\nexport function applyTransform(target, transform, invert) {\n if (transform && !isArrayLike(transform)) {\n transform = Transformable.getLocalTransform(transform);\n }\n if (invert) {\n transform = matrix.invert([], transform);\n }\n return vector.applyTransform([], target, transform);\n}\n/**\n * @param direction 'left' 'right' 'top' 'bottom'\n * @param transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param invert Whether use invert matrix.\n * @return Transformed direction. 'left' 'right' 'top' 'bottom'\n */\nexport function transformDirection(direction, transform, invert) {\n // Pick a base, ensure that transform result will not be (0, 0).\n var hBase = transform[4] === 0 || transform[5] === 0 || transform[0] === 0 ? 1 : Math.abs(2 * transform[4] / transform[0]);\n var vBase = transform[4] === 0 || transform[5] === 0 || transform[2] === 0 ? 1 : Math.abs(2 * transform[4] / transform[2]);\n var vertex = [direction === 'left' ? -hBase : direction === 'right' ? hBase : 0, direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0];\n vertex = applyTransform(vertex, transform, invert);\n return Math.abs(vertex[0]) > Math.abs(vertex[1]) ? vertex[0] > 0 ? 'right' : 'left' : vertex[1] > 0 ? 'bottom' : 'top';\n}\nfunction isNotGroup(el) {\n return !el.isGroup;\n}\nfunction isPath(el) {\n return el.shape != null;\n}\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\nexport function groupTransition(g1, g2, animatableModel) {\n if (!g1 || !g2) {\n return;\n }\n function getElMap(g) {\n var elMap = {};\n g.traverse(function (el) {\n if (isNotGroup(el) && el.anid) {\n elMap[el.anid] = el;\n }\n });\n return elMap;\n }\n function getAnimatableProps(el) {\n var obj = {\n x: el.x,\n y: el.y,\n rotation: el.rotation\n };\n if (isPath(el)) {\n obj.shape = extend({}, el.shape);\n }\n return obj;\n }\n var elMap1 = getElMap(g1);\n g2.traverse(function (el) {\n if (isNotGroup(el) && el.anid) {\n var oldEl = elMap1[el.anid];\n if (oldEl) {\n var newProp = getAnimatableProps(el);\n el.attr(getAnimatableProps(oldEl));\n updateProps(el, newProp, animatableModel, getECData(el).dataIndex);\n }\n }\n });\n}\nexport function clipPointsByRect(points, rect) {\n // FIXME: This way might be incorrect when graphic clipped by a corner\n // and when element has a border.\n return map(points, function (point) {\n var x = point[0];\n x = mathMax(x, rect.x);\n x = mathMin(x, rect.x + rect.width);\n var y = point[1];\n y = mathMax(y, rect.y);\n y = mathMin(y, rect.y + rect.height);\n return [x, y];\n });\n}\n/**\n * Return a new clipped rect. If rect size are negative, return undefined.\n */\nexport function clipRectByRect(targetRect, rect) {\n var x = mathMax(targetRect.x, rect.x);\n var x2 = mathMin(targetRect.x + targetRect.width, rect.x + rect.width);\n var y = mathMax(targetRect.y, rect.y);\n var y2 = mathMin(targetRect.y + targetRect.height, rect.y + rect.height);\n // If the total rect is cliped, nothing, including the border,\n // should be painted. So return undefined.\n if (x2 >= x && y2 >= y) {\n return {\n x: x,\n y: y,\n width: x2 - x,\n height: y2 - y\n };\n }\n}\nexport function createIcon(iconStr,\n// Support 'image://' or 'path://' or direct svg path.\nopt, rect) {\n var innerOpts = extend({\n rectHover: true\n }, opt);\n var style = innerOpts.style = {\n strokeNoScale: true\n };\n rect = rect || {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n };\n if (iconStr) {\n return iconStr.indexOf('image://') === 0 ? (style.image = iconStr.slice(8), defaults(style, rect), new ZRImage(innerOpts)) : makePath(iconStr.replace('path://', ''), innerOpts, rect, 'center');\n }\n}\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\nexport function linePolygonIntersect(a1x, a1y, a2x, a2y, points) {\n for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n var p = points[i];\n if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) {\n return true;\n }\n p2 = p;\n }\n}\n/**\n * Return `true` if the given two lines (line `a` and line `b`)\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n */\nexport function lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n // let `vec_m` to be `vec_a2 - vec_a1` and `vec_n` to be `vec_b2 - vec_b1`.\n var mx = a2x - a1x;\n var my = a2y - a1y;\n var nx = b2x - b1x;\n var ny = b2y - b1y;\n // `vec_m` and `vec_n` are parallel iff\n // existing `k` such that `vec_m = k · vec_n`, equivalent to `vec_m X vec_n = 0`.\n var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n if (nearZero(nmCrossProduct)) {\n return false;\n }\n // `vec_m` and `vec_n` are intersect iff\n // existing `p` and `q` in [0, 1] such that `vec_a1 + p * vec_m = vec_b1 + q * vec_n`,\n // such that `q = ((vec_a1 - vec_b1) X vec_m) / (vec_n X vec_m)`\n // and `p = ((vec_a1 - vec_b1) X vec_n) / (vec_n X vec_m)`.\n var b1a1x = a1x - b1x;\n var b1a1y = a1y - b1y;\n var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct;\n if (q < 0 || q > 1) {\n return false;\n }\n var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n if (p < 0 || p > 1) {\n return false;\n }\n return true;\n}\n/**\n * Cross product of 2-dimension vector.\n */\nfunction crossProduct2d(x1, y1, x2, y2) {\n return x1 * y2 - x2 * y1;\n}\nfunction nearZero(val) {\n return val <= 1e-6 && val >= -1e-6;\n}\nexport function setTooltipConfig(opt) {\n var itemTooltipOption = opt.itemTooltipOption;\n var componentModel = opt.componentModel;\n var itemName = opt.itemName;\n var itemTooltipOptionObj = isString(itemTooltipOption) ? {\n formatter: itemTooltipOption\n } : itemTooltipOption;\n var mainType = componentModel.mainType;\n var componentIndex = componentModel.componentIndex;\n var formatterParams = {\n componentType: mainType,\n name: itemName,\n $vars: ['name']\n };\n formatterParams[mainType + 'Index'] = componentIndex;\n var formatterParamsExtra = opt.formatterParamsExtra;\n if (formatterParamsExtra) {\n each(keys(formatterParamsExtra), function (key) {\n if (!hasOwn(formatterParams, key)) {\n formatterParams[key] = formatterParamsExtra[key];\n formatterParams.$vars.push(key);\n }\n });\n }\n var ecData = getECData(opt.el);\n ecData.componentMainType = mainType;\n ecData.componentIndex = componentIndex;\n ecData.tooltipConfig = {\n name: itemName,\n option: defaults({\n content: itemName,\n formatterParams: formatterParams\n }, itemTooltipOptionObj)\n };\n}\nfunction traverseElement(el, cb) {\n var stopped;\n // TODO\n // Polyfill for fixing zrender group traverse don't visit it's root issue.\n if (el.isGroup) {\n stopped = cb(el);\n }\n if (!stopped) {\n el.traverse(cb);\n }\n}\nexport function traverseElements(els, cb) {\n if (els) {\n if (isArray(els)) {\n for (var i = 0; i < els.length; i++) {\n traverseElement(els[i], cb);\n }\n } else {\n traverseElement(els, cb);\n }\n }\n}\n// Register built-in shapes. These shapes might be overwritten\n// by users, although we do not recommend that.\nregisterShape('circle', Circle);\nregisterShape('ellipse', Ellipse);\nregisterShape('sector', Sector);\nregisterShape('ring', Ring);\nregisterShape('polygon', Polygon);\nregisterShape('polyline', Polyline);\nregisterShape('rect', Rect);\nregisterShape('line', Line);\nregisterShape('bezierCurve', BezierCurve);\nregisterShape('arc', Arc);\nexport { Group, ZRImage as Image, ZRText as Text, Circle, Ellipse, Sector, Ring, Polygon, Polyline, Rect, Line, BezierCurve, Arc, IncrementalDisplayable, CompoundPath, LinearGradient, RadialGradient, BoundingRect, OrientedBoundingRect, Point, Path };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each } from 'zrender/lib/core/util.js';\nimport Group from 'zrender/lib/graphic/Group.js';\nimport * as componentUtil from '../util/component.js';\nimport * as clazzUtil from '../util/clazz.js';\nimport * as modelUtil from '../util/model.js';\nimport { enterEmphasis, leaveEmphasis, getHighlightDigit, isHighDownDispatcher } from '../util/states.js';\nimport { createTask } from '../core/task.js';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner.js';\nimport { traverseElements } from '../util/graphic.js';\nimport { error } from '../util/log.js';\nvar inner = modelUtil.makeInner();\nvar renderPlanner = createRenderPlanner();\nvar ChartView = /** @class */function () {\n function ChartView() {\n this.group = new Group();\n this.uid = componentUtil.getUID('viewChart');\n this.renderTask = createTask({\n plan: renderTaskPlan,\n reset: renderTaskReset\n });\n this.renderTask.context = {\n view: this\n };\n }\n ChartView.prototype.init = function (ecModel, api) {};\n ChartView.prototype.render = function (seriesModel, ecModel, api, payload) {\n if (process.env.NODE_ENV !== 'production') {\n throw new Error('render method must been implemented');\n }\n };\n /**\n * Highlight series or specified data item.\n */\n ChartView.prototype.highlight = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData(payload && payload.dataType);\n if (!data) {\n if (process.env.NODE_ENV !== 'production') {\n error(\"Unknown dataType \" + payload.dataType);\n }\n return;\n }\n toggleHighlight(data, payload, 'emphasis');\n };\n /**\n * Downplay series or specified data item.\n */\n ChartView.prototype.downplay = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData(payload && payload.dataType);\n if (!data) {\n if (process.env.NODE_ENV !== 'production') {\n error(\"Unknown dataType \" + payload.dataType);\n }\n return;\n }\n toggleHighlight(data, payload, 'normal');\n };\n /**\n * Remove self.\n */\n ChartView.prototype.remove = function (ecModel, api) {\n this.group.removeAll();\n };\n /**\n * Dispose self.\n */\n ChartView.prototype.dispose = function (ecModel, api) {};\n ChartView.prototype.updateView = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n };\n // FIXME never used?\n ChartView.prototype.updateLayout = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n };\n // FIXME never used?\n ChartView.prototype.updateVisual = function (seriesModel, ecModel, api, payload) {\n this.render(seriesModel, ecModel, api, payload);\n };\n /**\n * Traverse the new rendered elements.\n *\n * It will traverse the new added element in progressive rendering.\n * And traverse all in normal rendering.\n */\n ChartView.prototype.eachRendered = function (cb) {\n traverseElements(this.group, cb);\n };\n ChartView.markUpdateMethod = function (payload, methodName) {\n inner(payload).updateMethod = methodName;\n };\n ChartView.protoInitialize = function () {\n var proto = ChartView.prototype;\n proto.type = 'chart';\n }();\n return ChartView;\n}();\n;\n/**\n * Set state of single element\n */\nfunction elSetState(el, state, highlightDigit) {\n if (el && isHighDownDispatcher(el)) {\n (state === 'emphasis' ? enterEmphasis : leaveEmphasis)(el, highlightDigit);\n }\n}\nfunction toggleHighlight(data, payload, state) {\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n var highlightDigit = payload && payload.highlightKey != null ? getHighlightDigit(payload.highlightKey) : null;\n if (dataIndex != null) {\n each(modelUtil.normalizeToArray(dataIndex), function (dataIdx) {\n elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);\n });\n } else {\n data.eachItemGraphicEl(function (el) {\n elSetState(el, state, highlightDigit);\n });\n }\n}\nclazzUtil.enableClassExtend(ChartView, ['dispose']);\nclazzUtil.enableClassManagement(ChartView);\nfunction renderTaskPlan(context) {\n return renderPlanner(context.model);\n}\nfunction renderTaskReset(context) {\n var seriesModel = context.model;\n var ecModel = context.ecModel;\n var api = context.api;\n var payload = context.payload;\n // FIXME: remove updateView updateVisual\n var progressiveRender = seriesModel.pipelineContext.progressiveRender;\n var view = context.view;\n var updateMethod = payload && inner(payload).updateMethod;\n var methodName = progressiveRender ? 'incrementalPrepareRender' : updateMethod && view[updateMethod] ? updateMethod\n // `appendData` is also supported when data amount\n // is less than progressive threshold.\n : 'render';\n if (methodName !== 'render') {\n view[methodName](seriesModel, ecModel, api, payload);\n }\n return progressMethodMap[methodName];\n}\nvar progressMethodMap = {\n incrementalPrepareRender: {\n progress: function (params, context) {\n context.view.incrementalRender(params, context.model, context.ecModel, context.api, context.payload);\n }\n },\n render: {\n // Put view.render in `progress` to support appendData. But in this case\n // view.render should not be called in reset, otherwise it will be called\n // twise. Use `forceFirstProgress` to make sure that view.render is called\n // in any cases.\n forceFirstProgress: true,\n progress: function (params, context) {\n context.view.render(context.model, context.ecModel, context.api, context.payload);\n }\n }\n};\nexport default ChartView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar ORIGIN_METHOD = '\\0__throttleOriginMethod';\nvar RATE = '\\0__throttleRate';\nvar THROTTLE_TYPE = '\\0__throttleType';\n;\n/**\n * @public\n * @param {(Function)} fn\n * @param {number} [delay=0] Unit: ms.\n * @param {boolean} [debounce=false]\n * true: If call interval less than `delay`, only the last call works.\n * false: If call interval less than `delay, call works on fixed rate.\n * @return {(Function)} throttled fn.\n */\nexport function throttle(fn, delay, debounce) {\n var currCall;\n var lastCall = 0;\n var lastExec = 0;\n var timer = null;\n var diff;\n var scope;\n var args;\n var debounceNextCall;\n delay = delay || 0;\n function exec() {\n lastExec = new Date().getTime();\n timer = null;\n fn.apply(scope, args || []);\n }\n var cb = function () {\n var cbArgs = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n cbArgs[_i] = arguments[_i];\n }\n currCall = new Date().getTime();\n scope = this;\n args = cbArgs;\n var thisDelay = debounceNextCall || delay;\n var thisDebounce = debounceNextCall || debounce;\n debounceNextCall = null;\n diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;\n clearTimeout(timer);\n // Here we should make sure that: the `exec` SHOULD NOT be called later\n // than a new call of `cb`, that is, preserving the command order. Consider\n // calculating \"scale rate\" when roaming as an example. When a call of `cb`\n // happens, either the `exec` is called dierectly, or the call is delayed.\n // But the delayed call should never be later than next call of `cb`. Under\n // this assurance, we can simply update view state each time `dispatchAction`\n // triggered by user roaming, but not need to add extra code to avoid the\n // state being \"rolled-back\".\n if (thisDebounce) {\n timer = setTimeout(exec, thisDelay);\n } else {\n if (diff >= 0) {\n exec();\n } else {\n timer = setTimeout(exec, -diff);\n }\n }\n lastCall = currCall;\n };\n /**\n * Clear throttle.\n * @public\n */\n cb.clear = function () {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n };\n /**\n * Enable debounce once.\n */\n cb.debounceNextCall = function (debounceDelay) {\n debounceNextCall = debounceDelay;\n };\n return cb;\n}\n/**\n * Create throttle method or update throttle rate.\n *\n * @example\n * ComponentView.prototype.render = function () {\n * ...\n * throttle.createOrUpdate(\n * this,\n * '_dispatchAction',\n * this.model.get('throttle'),\n * 'fixRate'\n * );\n * };\n * ComponentView.prototype.remove = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n * ComponentView.prototype.dispose = function () {\n * throttle.clear(this, '_dispatchAction');\n * };\n *\n */\nexport function createOrUpdate(obj, fnAttr, rate, throttleType) {\n var fn = obj[fnAttr];\n if (!fn) {\n return;\n }\n var originFn = fn[ORIGIN_METHOD] || fn;\n var lastThrottleType = fn[THROTTLE_TYPE];\n var lastRate = fn[RATE];\n if (lastRate !== rate || lastThrottleType !== throttleType) {\n if (rate == null || !throttleType) {\n return obj[fnAttr] = originFn;\n }\n fn = obj[fnAttr] = throttle(originFn, rate, throttleType === 'debounce');\n fn[ORIGIN_METHOD] = originFn;\n fn[THROTTLE_TYPE] = throttleType;\n fn[RATE] = rate;\n }\n return fn;\n}\n/**\n * Clear throttle. Example see throttle.createOrUpdate.\n */\nexport function clear(obj, fnAttr) {\n var fn = obj[fnAttr];\n if (fn && fn[ORIGIN_METHOD]) {\n // Clear throttle\n fn.clear && fn.clear();\n obj[fnAttr] = fn[ORIGIN_METHOD];\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isFunction, extend, createHashMap } from 'zrender/lib/core/util.js';\nimport makeStyleMapper from '../model/mixin/makeStyleMapper.js';\nimport { ITEM_STYLE_KEY_MAP } from '../model/mixin/itemStyle.js';\nimport { LINE_STYLE_KEY_MAP } from '../model/mixin/lineStyle.js';\nimport Model from '../model/Model.js';\nimport { makeInner } from '../util/model.js';\nvar inner = makeInner();\nvar defaultStyleMappers = {\n itemStyle: makeStyleMapper(ITEM_STYLE_KEY_MAP, true),\n lineStyle: makeStyleMapper(LINE_STYLE_KEY_MAP, true)\n};\nvar defaultColorKey = {\n lineStyle: 'stroke',\n itemStyle: 'fill'\n};\nfunction getStyleMapper(seriesModel, stylePath) {\n var styleMapper = seriesModel.visualStyleMapper || defaultStyleMappers[stylePath];\n if (!styleMapper) {\n console.warn(\"Unknown style type '\" + stylePath + \"'.\");\n return defaultStyleMappers.itemStyle;\n }\n return styleMapper;\n}\nfunction getDefaultColorKey(seriesModel, stylePath) {\n // return defaultColorKey[stylePath] ||\n var colorKey = seriesModel.visualDrawType || defaultColorKey[stylePath];\n if (!colorKey) {\n console.warn(\"Unknown style type '\" + stylePath + \"'.\");\n return 'fill';\n }\n return colorKey;\n}\nvar seriesStyleTask = {\n createOnAllSeries: true,\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle';\n // Set in itemStyle\n var styleModel = seriesModel.getModel(stylePath);\n var getStyle = getStyleMapper(seriesModel, stylePath);\n var globalStyle = getStyle(styleModel);\n var decalOption = styleModel.getShallow('decal');\n if (decalOption) {\n data.setVisual('decal', decalOption);\n decalOption.dirty = true;\n }\n // TODO\n var colorKey = getDefaultColorKey(seriesModel, stylePath);\n var color = globalStyle[colorKey];\n // TODO style callback\n var colorCallback = isFunction(color) ? color : null;\n var hasAutoColor = globalStyle.fill === 'auto' || globalStyle.stroke === 'auto';\n // Get from color palette by default.\n if (!globalStyle[colorKey] || colorCallback || hasAutoColor) {\n // Note: If some series has color specified (e.g., by itemStyle.color), we DO NOT\n // make it effect palette. Because some scenarios users need to make some series\n // transparent or as background, which should better not effect the palette.\n var colorPalette = seriesModel.getColorFromPalette(\n // TODO series count changed.\n seriesModel.name, null, ecModel.getSeriesCount());\n if (!globalStyle[colorKey]) {\n globalStyle[colorKey] = colorPalette;\n data.setVisual('colorFromPalette', true);\n }\n globalStyle.fill = globalStyle.fill === 'auto' || isFunction(globalStyle.fill) ? colorPalette : globalStyle.fill;\n globalStyle.stroke = globalStyle.stroke === 'auto' || isFunction(globalStyle.stroke) ? colorPalette : globalStyle.stroke;\n }\n data.setVisual('style', globalStyle);\n data.setVisual('drawType', colorKey);\n // Only visible series has each data be visual encoded\n if (!ecModel.isSeriesFiltered(seriesModel) && colorCallback) {\n data.setVisual('colorFromPalette', false);\n return {\n dataEach: function (data, idx) {\n var dataParams = seriesModel.getDataParams(idx);\n var itemStyle = extend({}, globalStyle);\n itemStyle[colorKey] = colorCallback(dataParams);\n data.setItemVisual(idx, 'style', itemStyle);\n }\n };\n }\n }\n};\nvar sharedModel = new Model();\nvar dataStyleTask = {\n createOnAllSeries: true,\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n if (seriesModel.ignoreStyleOnData || ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n var data = seriesModel.getData();\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle';\n // Set in itemStyle\n var getStyle = getStyleMapper(seriesModel, stylePath);\n var colorKey = data.getVisual('drawType');\n return {\n dataEach: data.hasItemOption ? function (data, idx) {\n // Not use getItemModel for performance considuration\n var rawItem = data.getRawDataItem(idx);\n if (rawItem && rawItem[stylePath]) {\n sharedModel.option = rawItem[stylePath];\n var style = getStyle(sharedModel);\n var existsStyle = data.ensureUniqueItemVisual(idx, 'style');\n extend(existsStyle, style);\n if (sharedModel.option.decal) {\n data.setItemVisual(idx, 'decal', sharedModel.option.decal);\n sharedModel.option.decal.dirty = true;\n }\n if (colorKey in style) {\n data.setItemVisual(idx, 'colorFromPalette', false);\n }\n }\n } : null\n };\n }\n};\n// Pick color from palette for the data which has not been set with color yet.\n// Note: do not support stream rendering. No such cases yet.\nvar dataColorPaletteTask = {\n performRawSeries: true,\n overallReset: function (ecModel) {\n // Each type of series uses one scope.\n // Pie and funnel are using different scopes.\n var paletteScopeGroupByType = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var colorBy = seriesModel.getColorBy();\n if (seriesModel.isColorBySeries()) {\n return;\n }\n var key = seriesModel.type + '-' + colorBy;\n var colorScope = paletteScopeGroupByType.get(key);\n if (!colorScope) {\n colorScope = {};\n paletteScopeGroupByType.set(key, colorScope);\n }\n inner(seriesModel).scope = colorScope;\n });\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.isColorBySeries() || ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n var dataAll = seriesModel.getRawData();\n var idxMap = {};\n var data = seriesModel.getData();\n var colorScope = inner(seriesModel).scope;\n var stylePath = seriesModel.visualStyleAccessPath || 'itemStyle';\n var colorKey = getDefaultColorKey(seriesModel, stylePath);\n data.each(function (idx) {\n var rawIdx = data.getRawIndex(idx);\n idxMap[rawIdx] = idx;\n });\n // Iterate on data before filtered. To make sure color from palette can be\n // Consistent when toggling legend.\n dataAll.each(function (rawIdx) {\n var idx = idxMap[rawIdx];\n var fromPalette = data.getItemVisual(idx, 'colorFromPalette');\n // Get color from palette for each data only when the color is inherited from series color, which is\n // also picked from color palette. So following situation is not in the case:\n // 1. series.itemStyle.color is set\n // 2. color is encoded by visualMap\n if (fromPalette) {\n var itemStyle = data.ensureUniqueItemVisual(idx, 'style');\n var name_1 = dataAll.getName(rawIdx) || rawIdx + '';\n var dataCount = dataAll.count();\n itemStyle[colorKey] = seriesModel.getColorFromPalette(name_1, colorScope, dataCount);\n }\n });\n });\n }\n};\nexport { seriesStyleTask, dataStyleTask, dataColorPaletteTask };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../util/graphic.js';\nvar PI = Math.PI;\n/**\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} [opts]\n * @param {string} [opts.text]\n * @param {string} [opts.color]\n * @param {string} [opts.textColor]\n * @return {module:zrender/Element}\n */\nexport default function defaultLoading(api, opts) {\n opts = opts || {};\n zrUtil.defaults(opts, {\n text: 'loading',\n textColor: '#000',\n fontSize: 12,\n fontWeight: 'normal',\n fontStyle: 'normal',\n fontFamily: 'sans-serif',\n maskColor: 'rgba(255, 255, 255, 0.8)',\n showSpinner: true,\n color: '#5470c6',\n spinnerRadius: 10,\n lineWidth: 5,\n zlevel: 0\n });\n var group = new graphic.Group();\n var mask = new graphic.Rect({\n style: {\n fill: opts.maskColor\n },\n zlevel: opts.zlevel,\n z: 10000\n });\n group.add(mask);\n var textContent = new graphic.Text({\n style: {\n text: opts.text,\n fill: opts.textColor,\n fontSize: opts.fontSize,\n fontWeight: opts.fontWeight,\n fontStyle: opts.fontStyle,\n fontFamily: opts.fontFamily\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n var labelRect = new graphic.Rect({\n style: {\n fill: 'none'\n },\n textContent: textContent,\n textConfig: {\n position: 'right',\n distance: 10\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n group.add(labelRect);\n var arc;\n if (opts.showSpinner) {\n arc = new graphic.Arc({\n shape: {\n startAngle: -PI / 2,\n endAngle: -PI / 2 + 0.1,\n r: opts.spinnerRadius\n },\n style: {\n stroke: opts.color,\n lineCap: 'round',\n lineWidth: opts.lineWidth\n },\n zlevel: opts.zlevel,\n z: 10001\n });\n arc.animateShape(true).when(1000, {\n endAngle: PI * 3 / 2\n }).start('circularInOut');\n arc.animateShape(true).when(1000, {\n startAngle: PI * 3 / 2\n }).delay(300).start('circularInOut');\n group.add(arc);\n }\n // Inject resize\n group.resize = function () {\n var textWidth = textContent.getBoundingRect().width;\n var r = opts.showSpinner ? opts.spinnerRadius : 0;\n // cx = (containerWidth - arcDiameter - textDistance - textWidth) / 2\n // textDistance needs to be calculated when both animation and text exist\n var cx = (api.getWidth() - r * 2 - (opts.showSpinner && textWidth ? 10 : 0) - textWidth) / 2 - (opts.showSpinner && textWidth ? 0 : 5 + textWidth / 2)\n // only show the text\n + (opts.showSpinner ? 0 : textWidth / 2)\n // only show the spinner\n + (textWidth ? 0 : r);\n var cy = api.getHeight() / 2;\n opts.showSpinner && arc.setShape({\n cx: cx,\n cy: cy\n });\n labelRect.setShape({\n x: cx - r,\n y: cy - r,\n width: r * 2,\n height: r * 2\n });\n mask.setShape({\n x: 0,\n y: 0,\n width: api.getWidth(),\n height: api.getHeight()\n });\n };\n group.resize();\n return group;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, map, isFunction, createHashMap, noop, assert } from 'zrender/lib/core/util.js';\nimport { createTask } from './task.js';\nimport { getUID } from '../util/component.js';\nimport GlobalModel from '../model/Global.js';\nimport ExtensionAPI from './ExtensionAPI.js';\nimport { normalizeToArray } from '../util/model.js';\n;\nvar Scheduler = /** @class */function () {\n function Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) {\n // key: handlerUID\n this._stageTaskMap = createHashMap();\n this.ecInstance = ecInstance;\n this.api = api;\n // Fix current processors in case that in some rear cases that\n // processors might be registered after echarts instance created.\n // Register processors incrementally for a echarts instance is\n // not supported by this stream architecture.\n dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice();\n visualHandlers = this._visualHandlers = visualHandlers.slice();\n this._allHandlers = dataProcessorHandlers.concat(visualHandlers);\n }\n Scheduler.prototype.restoreData = function (ecModel, payload) {\n // TODO: Only restore needed series and components, but not all components.\n // Currently `restoreData` of all of the series and component will be called.\n // But some independent components like `title`, `legend`, `graphic`, `toolbox`,\n // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`,\n // and some components like coordinate system, axes, dataZoom, visualMap only\n // need their target series refresh.\n // (1) If we are implementing this feature some day, we should consider these cases:\n // if a data processor depends on a component (e.g., dataZoomProcessor depends\n // on the settings of `dataZoom`), it should be re-performed if the component\n // is modified by `setOption`.\n // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`,\n // it should be re-performed when the result array of `getTargetSeries` changed.\n // We use `dependencies` to cover these issues.\n // (3) How to update target series when coordinate system related components modified.\n // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty,\n // and this case all of the tasks will be set as dirty.\n ecModel.restoreData(payload);\n // Theoretically an overall task not only depends on each of its target series, but also\n // depends on all of the series.\n // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks\n // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure\n // that the overall task is set as dirty and to be performed, otherwise it probably cause\n // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it\n // probably cause state chaos (consider `dataZoomProcessor`).\n this._stageTaskMap.each(function (taskRecord) {\n var overallTask = taskRecord.overallTask;\n overallTask && overallTask.dirty();\n });\n };\n // If seriesModel provided, incremental threshold is check by series data.\n Scheduler.prototype.getPerformArgs = function (task, isBlock) {\n // For overall task\n if (!task.__pipeline) {\n return;\n }\n var pipeline = this._pipelineMap.get(task.__pipeline.id);\n var pCtx = pipeline.context;\n var incremental = !isBlock && pipeline.progressiveEnabled && (!pCtx || pCtx.progressiveRender) && task.__idxInPipeline > pipeline.blockIndex;\n var step = incremental ? pipeline.step : null;\n var modDataCount = pCtx && pCtx.modDataCount;\n var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null;\n return {\n step: step,\n modBy: modBy,\n modDataCount: modDataCount\n };\n };\n Scheduler.prototype.getPipeline = function (pipelineId) {\n return this._pipelineMap.get(pipelineId);\n };\n /**\n * Current, progressive rendering starts from visual and layout.\n * Always detect render mode in the same stage, avoiding that incorrect\n * detection caused by data filtering.\n * Caution:\n * `updateStreamModes` use `seriesModel.getData()`.\n */\n Scheduler.prototype.updateStreamModes = function (seriesModel, view) {\n var pipeline = this._pipelineMap.get(seriesModel.uid);\n var data = seriesModel.getData();\n var dataLen = data.count();\n // `progressiveRender` means that can render progressively in each\n // animation frame. Note that some types of series do not provide\n // `view.incrementalPrepareRender` but support `chart.appendData`. We\n // use the term `incremental` but not `progressive` to describe the\n // case that `chart.appendData`.\n var progressiveRender = pipeline.progressiveEnabled && view.incrementalPrepareRender && dataLen >= pipeline.threshold;\n var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold');\n // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint.\n // see `test/candlestick-large3.html`\n var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null;\n seriesModel.pipelineContext = pipeline.context = {\n progressiveRender: progressiveRender,\n modDataCount: modDataCount,\n large: large\n };\n };\n Scheduler.prototype.restorePipelines = function (ecModel) {\n var scheduler = this;\n var pipelineMap = scheduler._pipelineMap = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var progressive = seriesModel.getProgressive();\n var pipelineId = seriesModel.uid;\n pipelineMap.set(pipelineId, {\n id: pipelineId,\n head: null,\n tail: null,\n threshold: seriesModel.getProgressiveThreshold(),\n progressiveEnabled: progressive && !(seriesModel.preventIncremental && seriesModel.preventIncremental()),\n blockIndex: -1,\n step: Math.round(progressive || 700),\n count: 0\n });\n scheduler._pipe(seriesModel, seriesModel.dataTask);\n });\n };\n Scheduler.prototype.prepareStageTasks = function () {\n var stageTaskMap = this._stageTaskMap;\n var ecModel = this.api.getModel();\n var api = this.api;\n each(this._allHandlers, function (handler) {\n var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, {});\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n // Currently do not need to support to sepecify them both.\n errMsg = '\"reset\" and \"overallReset\" must not be both specified.';\n }\n assert(!(handler.reset && handler.overallReset), errMsg);\n handler.reset && this._createSeriesStageTask(handler, record, ecModel, api);\n handler.overallReset && this._createOverallStageTask(handler, record, ecModel, api);\n }, this);\n };\n Scheduler.prototype.prepareView = function (view, model, ecModel, api) {\n var renderTask = view.renderTask;\n var context = renderTask.context;\n context.model = model;\n context.ecModel = ecModel;\n context.api = api;\n renderTask.__block = !view.incrementalPrepareRender;\n this._pipe(model, renderTask);\n };\n Scheduler.prototype.performDataProcessorTasks = function (ecModel, payload) {\n // If we do not use `block` here, it should be considered when to update modes.\n this._performStageTasks(this._dataProcessorHandlers, ecModel, payload, {\n block: true\n });\n };\n Scheduler.prototype.performVisualTasks = function (ecModel, payload, opt) {\n this._performStageTasks(this._visualHandlers, ecModel, payload, opt);\n };\n Scheduler.prototype._performStageTasks = function (stageHandlers, ecModel, payload, opt) {\n opt = opt || {};\n var unfinished = false;\n var scheduler = this;\n each(stageHandlers, function (stageHandler, idx) {\n if (opt.visualType && opt.visualType !== stageHandler.visualType) {\n return;\n }\n var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid);\n var seriesTaskMap = stageHandlerRecord.seriesTaskMap;\n var overallTask = stageHandlerRecord.overallTask;\n if (overallTask) {\n var overallNeedDirty_1;\n var agentStubMap = overallTask.agentStubMap;\n agentStubMap.each(function (stub) {\n if (needSetDirty(opt, stub)) {\n stub.dirty();\n overallNeedDirty_1 = true;\n }\n });\n overallNeedDirty_1 && overallTask.dirty();\n scheduler.updatePayload(overallTask, payload);\n var performArgs_1 = scheduler.getPerformArgs(overallTask, opt.block);\n // Execute stubs firstly, which may set the overall task dirty,\n // then execute the overall task. And stub will call seriesModel.setData,\n // which ensures that in the overallTask seriesModel.getData() will not\n // return incorrect data.\n agentStubMap.each(function (stub) {\n stub.perform(performArgs_1);\n });\n if (overallTask.perform(performArgs_1)) {\n unfinished = true;\n }\n } else if (seriesTaskMap) {\n seriesTaskMap.each(function (task, pipelineId) {\n if (needSetDirty(opt, task)) {\n task.dirty();\n }\n var performArgs = scheduler.getPerformArgs(task, opt.block);\n // FIXME\n // if intending to declare `performRawSeries` in handlers, only\n // stream-independent (specifically, data item independent) operations can be\n // performed. Because if a series is filtered, most of the tasks will not\n // be performed. A stream-dependent operation probably cause wrong biz logic.\n // Perhaps we should not provide a separate callback for this case instead\n // of providing the config `performRawSeries`. The stream-dependent operations\n // and stream-independent operations should better not be mixed.\n performArgs.skip = !stageHandler.performRawSeries && ecModel.isSeriesFiltered(task.context.model);\n scheduler.updatePayload(task, payload);\n if (task.perform(performArgs)) {\n unfinished = true;\n }\n });\n }\n });\n function needSetDirty(opt, task) {\n return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id));\n }\n this.unfinished = unfinished || this.unfinished;\n };\n Scheduler.prototype.performSeriesTasks = function (ecModel) {\n var unfinished;\n ecModel.eachSeries(function (seriesModel) {\n // Progress to the end for dataInit and dataRestore.\n unfinished = seriesModel.dataTask.perform() || unfinished;\n });\n this.unfinished = unfinished || this.unfinished;\n };\n Scheduler.prototype.plan = function () {\n // Travel pipelines, check block.\n this._pipelineMap.each(function (pipeline) {\n var task = pipeline.tail;\n do {\n if (task.__block) {\n pipeline.blockIndex = task.__idxInPipeline;\n break;\n }\n task = task.getUpstream();\n } while (task);\n });\n };\n Scheduler.prototype.updatePayload = function (task, payload) {\n payload !== 'remain' && (task.context.payload = payload);\n };\n Scheduler.prototype._createSeriesStageTask = function (stageHandler, stageHandlerRecord, ecModel, api) {\n var scheduler = this;\n var oldSeriesTaskMap = stageHandlerRecord.seriesTaskMap;\n // The count of stages are totally about only several dozen, so\n // do not need to reuse the map.\n var newSeriesTaskMap = stageHandlerRecord.seriesTaskMap = createHashMap();\n var seriesType = stageHandler.seriesType;\n var getTargetSeries = stageHandler.getTargetSeries;\n // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily,\n // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`,\n // it works but it may cause other irrelevant charts blocked.\n if (stageHandler.createOnAllSeries) {\n ecModel.eachRawSeries(create);\n } else if (seriesType) {\n ecModel.eachRawSeriesByType(seriesType, create);\n } else if (getTargetSeries) {\n getTargetSeries(ecModel, api).each(create);\n }\n function create(seriesModel) {\n var pipelineId = seriesModel.uid;\n // Init tasks for each seriesModel only once.\n // Reuse original task instance.\n var task = newSeriesTaskMap.set(pipelineId, oldSeriesTaskMap && oldSeriesTaskMap.get(pipelineId) || createTask({\n plan: seriesTaskPlan,\n reset: seriesTaskReset,\n count: seriesTaskCount\n }));\n task.context = {\n model: seriesModel,\n ecModel: ecModel,\n api: api,\n // PENDING: `useClearVisual` not used?\n useClearVisual: stageHandler.isVisual && !stageHandler.isLayout,\n plan: stageHandler.plan,\n reset: stageHandler.reset,\n scheduler: scheduler\n };\n scheduler._pipe(seriesModel, task);\n }\n };\n Scheduler.prototype._createOverallStageTask = function (stageHandler, stageHandlerRecord, ecModel, api) {\n var scheduler = this;\n var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask\n // For overall task, the function only be called on reset stage.\n || createTask({\n reset: overallTaskReset\n });\n overallTask.context = {\n ecModel: ecModel,\n api: api,\n overallReset: stageHandler.overallReset,\n scheduler: scheduler\n };\n var oldAgentStubMap = overallTask.agentStubMap;\n // The count of stages are totally about only several dozen, so\n // do not need to reuse the map.\n var newAgentStubMap = overallTask.agentStubMap = createHashMap();\n var seriesType = stageHandler.seriesType;\n var getTargetSeries = stageHandler.getTargetSeries;\n var overallProgress = true;\n var shouldOverallTaskDirty = false;\n // FIXME:TS never used, so comment it\n // let modifyOutputEnd = stageHandler.modifyOutputEnd;\n // An overall task with seriesType detected or has `getTargetSeries`, we add\n // stub in each pipelines, it will set the overall task dirty when the pipeline\n // progress. Moreover, to avoid call the overall task each frame (too frequent),\n // we set the pipeline block.\n var errMsg = '';\n if (process.env.NODE_ENV !== 'production') {\n errMsg = '\"createOnAllSeries\" is not supported for \"overallReset\", ' + 'because it will block all streams.';\n }\n assert(!stageHandler.createOnAllSeries, errMsg);\n if (seriesType) {\n ecModel.eachRawSeriesByType(seriesType, createStub);\n } else if (getTargetSeries) {\n getTargetSeries(ecModel, api).each(createStub);\n }\n // Otherwise, (usually it is legacy case), the overall task will only be\n // executed when upstream is dirty. Otherwise the progressive rendering of all\n // pipelines will be disabled unexpectedly. But it still needs stubs to receive\n // dirty info from upstream.\n else {\n overallProgress = false;\n each(ecModel.getSeries(), createStub);\n }\n function createStub(seriesModel) {\n var pipelineId = seriesModel.uid;\n var stub = newAgentStubMap.set(pipelineId, oldAgentStubMap && oldAgentStubMap.get(pipelineId) || (\n // When the result of `getTargetSeries` changed, the overallTask\n // should be set as dirty and re-performed.\n shouldOverallTaskDirty = true, createTask({\n reset: stubReset,\n onDirty: stubOnDirty\n })));\n stub.context = {\n model: seriesModel,\n overallProgress: overallProgress\n // FIXME:TS never used, so comment it\n // modifyOutputEnd: modifyOutputEnd\n };\n\n stub.agent = overallTask;\n stub.__block = overallProgress;\n scheduler._pipe(seriesModel, stub);\n }\n if (shouldOverallTaskDirty) {\n overallTask.dirty();\n }\n };\n Scheduler.prototype._pipe = function (seriesModel, task) {\n var pipelineId = seriesModel.uid;\n var pipeline = this._pipelineMap.get(pipelineId);\n !pipeline.head && (pipeline.head = task);\n pipeline.tail && pipeline.tail.pipe(task);\n pipeline.tail = task;\n task.__idxInPipeline = pipeline.count++;\n task.__pipeline = pipeline;\n };\n Scheduler.wrapStageHandler = function (stageHandler, visualType) {\n if (isFunction(stageHandler)) {\n stageHandler = {\n overallReset: stageHandler,\n seriesType: detectSeriseType(stageHandler)\n };\n }\n stageHandler.uid = getUID('stageHandler');\n visualType && (stageHandler.visualType = visualType);\n return stageHandler;\n };\n ;\n return Scheduler;\n}();\nfunction overallTaskReset(context) {\n context.overallReset(context.ecModel, context.api, context.payload);\n}\nfunction stubReset(context) {\n return context.overallProgress && stubProgress;\n}\nfunction stubProgress() {\n this.agent.dirty();\n this.getDownstream().dirty();\n}\nfunction stubOnDirty() {\n this.agent && this.agent.dirty();\n}\nfunction seriesTaskPlan(context) {\n return context.plan ? context.plan(context.model, context.ecModel, context.api, context.payload) : null;\n}\nfunction seriesTaskReset(context) {\n if (context.useClearVisual) {\n context.data.clearAllVisual();\n }\n var resetDefines = context.resetDefines = normalizeToArray(context.reset(context.model, context.ecModel, context.api, context.payload));\n return resetDefines.length > 1 ? map(resetDefines, function (v, idx) {\n return makeSeriesTaskProgress(idx);\n }) : singleSeriesTaskProgress;\n}\nvar singleSeriesTaskProgress = makeSeriesTaskProgress(0);\nfunction makeSeriesTaskProgress(resetDefineIdx) {\n return function (params, context) {\n var data = context.data;\n var resetDefine = context.resetDefines[resetDefineIdx];\n if (resetDefine && resetDefine.dataEach) {\n for (var i = params.start; i < params.end; i++) {\n resetDefine.dataEach(data, i);\n }\n } else if (resetDefine && resetDefine.progress) {\n resetDefine.progress(params, data);\n }\n };\n}\nfunction seriesTaskCount(context) {\n return context.data.count();\n}\n/**\n * Only some legacy stage handlers (usually in echarts extensions) are pure function.\n * To ensure that they can work normally, they should work in block mode, that is,\n * they should not be started util the previous tasks finished. So they cause the\n * progressive rendering disabled. We try to detect the series type, to narrow down\n * the block range to only the series type they concern, but not all series.\n */\nfunction detectSeriseType(legacyFunc) {\n seriesType = null;\n try {\n // Assume there is no async when calling `eachSeriesByType`.\n legacyFunc(ecModelMock, apiMock);\n } catch (e) {}\n return seriesType;\n}\nvar ecModelMock = {};\nvar apiMock = {};\nvar seriesType;\nmockMethods(ecModelMock, GlobalModel);\nmockMethods(apiMock, ExtensionAPI);\necModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) {\n seriesType = type;\n};\necModelMock.eachComponent = function (cond) {\n if (cond.mainType === 'series' && cond.subType) {\n seriesType = cond.subType;\n }\n};\nfunction mockMethods(target, Clz) {\n /* eslint-disable */\n for (var name_1 in Clz.prototype) {\n // Do not use hasOwnProperty\n target[name_1] = noop;\n }\n /* eslint-enable */\n}\n\nexport default Scheduler;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar colorAll = ['#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'];\nexport default {\n color: colorAll,\n colorLayer: [['#37A2DA', '#ffd85c', '#fd7b5f'], ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'], ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'], colorAll]\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar contrastColor = '#B9B8CE';\nvar backgroundColor = '#100C2A';\nvar axisCommon = function () {\n return {\n axisLine: {\n lineStyle: {\n color: contrastColor\n }\n },\n splitLine: {\n lineStyle: {\n color: '#484753'\n }\n },\n splitArea: {\n areaStyle: {\n color: ['rgba(255,255,255,0.02)', 'rgba(255,255,255,0.05)']\n }\n },\n minorSplitLine: {\n lineStyle: {\n color: '#20203B'\n }\n }\n };\n};\nvar colorPalette = ['#4992ff', '#7cffb2', '#fddd60', '#ff6e76', '#58d9f9', '#05c091', '#ff8a45', '#8d48e3', '#dd79ff'];\nvar theme = {\n darkMode: true,\n color: colorPalette,\n backgroundColor: backgroundColor,\n axisPointer: {\n lineStyle: {\n color: '#817f91'\n },\n crossStyle: {\n color: '#817f91'\n },\n label: {\n // TODO Contrast of label backgorundColor\n color: '#fff'\n }\n },\n legend: {\n textStyle: {\n color: contrastColor\n }\n },\n textStyle: {\n color: contrastColor\n },\n title: {\n textStyle: {\n color: '#EEF1FA'\n },\n subtextStyle: {\n color: '#B9B8CE'\n }\n },\n toolbox: {\n iconStyle: {\n borderColor: contrastColor\n }\n },\n dataZoom: {\n borderColor: '#71708A',\n textStyle: {\n color: contrastColor\n },\n brushStyle: {\n color: 'rgba(135,163,206,0.3)'\n },\n handleStyle: {\n color: '#353450',\n borderColor: '#C5CBE3'\n },\n moveHandleStyle: {\n color: '#B0B6C3',\n opacity: 0.3\n },\n fillerColor: 'rgba(135,163,206,0.2)',\n emphasis: {\n handleStyle: {\n borderColor: '#91B7F2',\n color: '#4D587D'\n },\n moveHandleStyle: {\n color: '#636D9A',\n opacity: 0.7\n }\n },\n dataBackground: {\n lineStyle: {\n color: '#71708A',\n width: 1\n },\n areaStyle: {\n color: '#71708A'\n }\n },\n selectedDataBackground: {\n lineStyle: {\n color: '#87A3CE'\n },\n areaStyle: {\n color: '#87A3CE'\n }\n }\n },\n visualMap: {\n textStyle: {\n color: contrastColor\n }\n },\n timeline: {\n lineStyle: {\n color: contrastColor\n },\n label: {\n color: contrastColor\n },\n controlStyle: {\n color: contrastColor,\n borderColor: contrastColor\n }\n },\n calendar: {\n itemStyle: {\n color: backgroundColor\n },\n dayLabel: {\n color: contrastColor\n },\n monthLabel: {\n color: contrastColor\n },\n yearLabel: {\n color: contrastColor\n }\n },\n timeAxis: axisCommon(),\n logAxis: axisCommon(),\n valueAxis: axisCommon(),\n categoryAxis: axisCommon(),\n line: {\n symbol: 'circle'\n },\n graph: {\n color: colorPalette\n },\n gauge: {\n title: {\n color: contrastColor\n },\n axisLine: {\n lineStyle: {\n color: [[1, 'rgba(207,212,219,0.2)']]\n }\n },\n axisLabel: {\n color: contrastColor\n },\n detail: {\n color: '#EEF1FA'\n }\n },\n candlestick: {\n itemStyle: {\n color: '#f64e56',\n color0: '#54ea92',\n borderColor: '#f64e56',\n borderColor0: '#54ea92'\n // borderColor: '#ca2824',\n // borderColor0: '#09a443'\n }\n }\n};\n\ntheme.categoryAxis.splitLine.show = false;\nexport default theme;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { parseClassType } from './clazz.js';\n/**\n * Usage of query:\n * `chart.on('click', query, handler);`\n * The `query` can be:\n * + The component type query string, only `mainType` or `mainType.subType`,\n * like: 'xAxis', 'series', 'xAxis.category' or 'series.line'.\n * + The component query object, like:\n * `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`,\n * `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`.\n * + The data query object, like:\n * `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`.\n * + The other query object (cmponent customized query), like:\n * `{element: 'some'}` (only available in custom series).\n *\n * Caveat: If a prop in the `query` object is `null/undefined`, it is the\n * same as there is no such prop in the `query` object.\n */\nvar ECEventProcessor = /** @class */function () {\n function ECEventProcessor() {}\n ECEventProcessor.prototype.normalizeQuery = function (query) {\n var cptQuery = {};\n var dataQuery = {};\n var otherQuery = {};\n // `query` is `mainType` or `mainType.subType` of component.\n if (zrUtil.isString(query)) {\n var condCptType = parseClassType(query);\n // `.main` and `.sub` may be ''.\n cptQuery.mainType = condCptType.main || null;\n cptQuery.subType = condCptType.sub || null;\n }\n // `query` is an object, convert to {mainType, index, name, id}.\n else {\n // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved,\n // can not be used in `compomentModel.filterForExposedEvent`.\n var suffixes_1 = ['Index', 'Name', 'Id'];\n var dataKeys_1 = {\n name: 1,\n dataIndex: 1,\n dataType: 1\n };\n zrUtil.each(query, function (val, key) {\n var reserved = false;\n for (var i = 0; i < suffixes_1.length; i++) {\n var propSuffix = suffixes_1[i];\n var suffixPos = key.lastIndexOf(propSuffix);\n if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {\n var mainType = key.slice(0, suffixPos);\n // Consider `dataIndex`.\n if (mainType !== 'data') {\n cptQuery.mainType = mainType;\n cptQuery[propSuffix.toLowerCase()] = val;\n reserved = true;\n }\n }\n }\n if (dataKeys_1.hasOwnProperty(key)) {\n dataQuery[key] = val;\n reserved = true;\n }\n if (!reserved) {\n otherQuery[key] = val;\n }\n });\n }\n return {\n cptQuery: cptQuery,\n dataQuery: dataQuery,\n otherQuery: otherQuery\n };\n };\n ECEventProcessor.prototype.filter = function (eventType, query) {\n // They should be assigned before each trigger call.\n var eventInfo = this.eventInfo;\n if (!eventInfo) {\n return true;\n }\n var targetEl = eventInfo.targetEl;\n var packedEvent = eventInfo.packedEvent;\n var model = eventInfo.model;\n var view = eventInfo.view;\n // For event like 'globalout'.\n if (!model || !view) {\n return true;\n }\n var cptQuery = query.cptQuery;\n var dataQuery = query.dataQuery;\n return check(cptQuery, model, 'mainType') && check(cptQuery, model, 'subType') && check(cptQuery, model, 'index', 'componentIndex') && check(cptQuery, model, 'name') && check(cptQuery, model, 'id') && check(dataQuery, packedEvent, 'name') && check(dataQuery, packedEvent, 'dataIndex') && check(dataQuery, packedEvent, 'dataType') && (!view.filterForExposedEvent || view.filterForExposedEvent(eventType, query.otherQuery, targetEl, packedEvent));\n function check(query, host, prop, propOnHost) {\n return query[prop] == null || host[propOnHost || prop] === query[prop];\n }\n };\n ECEventProcessor.prototype.afterTrigger = function () {\n // Make sure the eventInfo won't be used in next trigger.\n this.eventInfo = null;\n };\n return ECEventProcessor;\n}();\nexport { ECEventProcessor };\n;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend, isFunction, keys } from 'zrender/lib/core/util.js';\nvar SYMBOL_PROPS_WITH_CB = ['symbol', 'symbolSize', 'symbolRotate', 'symbolOffset'];\nvar SYMBOL_PROPS = SYMBOL_PROPS_WITH_CB.concat(['symbolKeepAspect']);\n// Encoding visual for all series include which is filtered for legend drawing\nvar seriesSymbolTask = {\n createOnAllSeries: true,\n // For legend.\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n if (seriesModel.legendIcon) {\n data.setVisual('legendIcon', seriesModel.legendIcon);\n }\n if (!seriesModel.hasSymbolVisual) {\n return;\n }\n var symbolOptions = {};\n var symbolOptionsCb = {};\n var hasCallback = false;\n for (var i = 0; i < SYMBOL_PROPS_WITH_CB.length; i++) {\n var symbolPropName = SYMBOL_PROPS_WITH_CB[i];\n var val = seriesModel.get(symbolPropName);\n if (isFunction(val)) {\n hasCallback = true;\n symbolOptionsCb[symbolPropName] = val;\n } else {\n symbolOptions[symbolPropName] = val;\n }\n }\n symbolOptions.symbol = symbolOptions.symbol || seriesModel.defaultSymbol;\n data.setVisual(extend({\n legendIcon: seriesModel.legendIcon || symbolOptions.symbol,\n symbolKeepAspect: seriesModel.get('symbolKeepAspect')\n }, symbolOptions));\n // Only visible series has each data be visual encoded\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n var symbolPropsCb = keys(symbolOptionsCb);\n function dataEach(data, idx) {\n var rawValue = seriesModel.getRawValue(idx);\n var params = seriesModel.getDataParams(idx);\n for (var i = 0; i < symbolPropsCb.length; i++) {\n var symbolPropName = symbolPropsCb[i];\n data.setItemVisual(idx, symbolPropName, symbolOptionsCb[symbolPropName](rawValue, params));\n }\n }\n return {\n dataEach: hasCallback ? dataEach : null\n };\n }\n};\nvar dataSymbolTask = {\n createOnAllSeries: true,\n // For legend.\n performRawSeries: true,\n reset: function (seriesModel, ecModel) {\n if (!seriesModel.hasSymbolVisual) {\n return;\n }\n // Only visible series has each data be visual encoded\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n var data = seriesModel.getData();\n function dataEach(data, idx) {\n var itemModel = data.getItemModel(idx);\n for (var i = 0; i < SYMBOL_PROPS.length; i++) {\n var symbolPropName = SYMBOL_PROPS[i];\n var val = itemModel.getShallow(symbolPropName, true);\n if (val != null) {\n data.setItemVisual(idx, symbolPropName, val);\n }\n }\n }\n return {\n dataEach: data.hasItemOption ? dataEach : null\n };\n }\n};\nexport { seriesSymbolTask, dataSymbolTask };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport function getItemVisualFromData(data, dataIndex, key) {\n switch (key) {\n case 'color':\n var style = data.getItemVisual(dataIndex, 'style');\n return style[data.getVisual('drawType')];\n case 'opacity':\n return data.getItemVisual(dataIndex, 'style').opacity;\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n return data.getItemVisual(dataIndex, key);\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n }\n}\nexport function getVisualFromData(data, key) {\n switch (key) {\n case 'color':\n var style = data.getVisual('style');\n return style[data.getVisual('drawType')];\n case 'opacity':\n return data.getVisual('style').opacity;\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n return data.getVisual(key);\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n }\n}\nexport function setItemVisualFromData(data, dataIndex, key, value) {\n switch (key) {\n case 'color':\n // Make sure not sharing style object.\n var style = data.ensureUniqueItemVisual(dataIndex, 'style');\n style[data.getVisual('drawType')] = value;\n // Mark the color has been changed, not from palette anymore\n data.setItemVisual(dataIndex, 'colorFromPalette', false);\n break;\n case 'opacity':\n data.ensureUniqueItemVisual(dataIndex, 'style').opacity = value;\n break;\n case 'symbol':\n case 'symbolSize':\n case 'liftZ':\n data.setItemVisual(dataIndex, key, value);\n break;\n default:\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\"Unknown visual type \" + key);\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { extend, each, isArray, isString } from 'zrender/lib/core/util.js';\nimport { deprecateReplaceLog, deprecateLog } from '../util/log.js';\nimport { queryDataIndex } from '../util/model.js';\n// Legacy data selection action.\n// Includes: pieSelect, pieUnSelect, pieToggleSelect, mapSelect, mapUnSelect, mapToggleSelect\nexport function createLegacyDataSelectAction(seriesType, ecRegisterAction) {\n function getSeriesIndices(ecModel, payload) {\n var seriesIndices = [];\n ecModel.eachComponent({\n mainType: 'series',\n subType: seriesType,\n query: payload\n }, function (seriesModel) {\n seriesIndices.push(seriesModel.seriesIndex);\n });\n return seriesIndices;\n }\n each([[seriesType + 'ToggleSelect', 'toggleSelect'], [seriesType + 'Select', 'select'], [seriesType + 'UnSelect', 'unselect']], function (eventsMap) {\n ecRegisterAction(eventsMap[0], function (payload, ecModel, api) {\n payload = extend({}, payload);\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog(payload.type, eventsMap[1]);\n }\n api.dispatchAction(extend(payload, {\n type: eventsMap[1],\n seriesIndex: getSeriesIndices(ecModel, payload)\n }));\n });\n });\n}\nfunction handleSeriesLegacySelectEvents(type, eventPostfix, ecIns, ecModel, payload) {\n var legacyEventName = type + eventPostfix;\n if (!ecIns.isSilent(legacyEventName)) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog(\"event \" + legacyEventName + \" is deprecated.\");\n }\n ecModel.eachComponent({\n mainType: 'series',\n subType: 'pie'\n }, function (seriesModel) {\n var seriesIndex = seriesModel.seriesIndex;\n var selectedMap = seriesModel.option.selectedMap;\n var selected = payload.selected;\n for (var i = 0; i < selected.length; i++) {\n if (selected[i].seriesIndex === seriesIndex) {\n var data = seriesModel.getData();\n var dataIndex = queryDataIndex(data, payload.fromActionPayload);\n ecIns.trigger(legacyEventName, {\n type: legacyEventName,\n seriesId: seriesModel.id,\n name: isArray(dataIndex) ? data.getName(dataIndex[0]) : data.getName(dataIndex),\n selected: isString(selectedMap) ? selectedMap : extend({}, selectedMap)\n });\n }\n }\n });\n }\n}\nexport function handleLegacySelectEvents(messageCenter, ecIns, api) {\n messageCenter.on('selectchanged', function (params) {\n var ecModel = api.getModel();\n if (params.isFromClick) {\n handleSeriesLegacySelectEvents('map', 'selectchanged', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selectchanged', ecIns, ecModel, params);\n } else if (params.fromAction === 'select') {\n handleSeriesLegacySelectEvents('map', 'selected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'selected', ecIns, ecModel, params);\n } else if (params.fromAction === 'unselect') {\n handleSeriesLegacySelectEvents('map', 'unselected', ecIns, ecModel, params);\n handleSeriesLegacySelectEvents('pie', 'unselected', ecIns, ecModel, params);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport function findEventDispatcher(target, det, returnFirstMatch) {\n var found;\n while (target) {\n if (det(target)) {\n found = target;\n if (returnFirstMatch) {\n break;\n }\n }\n target = target.__hostTarget || target.parent;\n }\n return found;\n}","var wmUniqueIndex = Math.round(Math.random() * 9);\nvar supportDefineProperty = typeof Object.defineProperty === 'function';\nvar WeakMap = (function () {\n function WeakMap() {\n this._id = '__ec_inner_' + wmUniqueIndex++;\n }\n WeakMap.prototype.get = function (key) {\n return this._guard(key)[this._id];\n };\n WeakMap.prototype.set = function (key, value) {\n var target = this._guard(key);\n if (supportDefineProperty) {\n Object.defineProperty(target, this._id, {\n value: value,\n enumerable: false,\n configurable: true\n });\n }\n else {\n target[this._id] = value;\n }\n return this;\n };\n WeakMap.prototype[\"delete\"] = function (key) {\n if (this.has(key)) {\n delete this._guard(key)[this._id];\n return true;\n }\n return false;\n };\n WeakMap.prototype.has = function (key) {\n return !!this._guard(key)[this._id];\n };\n WeakMap.prototype._guard = function (key) {\n if (key !== Object(key)) {\n throw TypeError('Value of WeakMap is not a non-null object.');\n }\n return key;\n };\n return WeakMap;\n}());\nexport default WeakMap;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Symbol factory\nimport { each, isArray, retrieve2 } from 'zrender/lib/core/util.js';\nimport * as graphic from './graphic.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { calculateTextPosition } from 'zrender/lib/contain/text.js';\nimport { parsePercent } from './number.js';\n/**\n * Triangle shape\n * @inner\n */\nvar Triangle = graphic.Path.extend({\n type: 'triangle',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy + height);\n path.lineTo(cx - width, cy + height);\n path.closePath();\n }\n});\n/**\n * Diamond shape\n * @inner\n */\nvar Diamond = graphic.Path.extend({\n type: 'diamond',\n shape: {\n cx: 0,\n cy: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var cx = shape.cx;\n var cy = shape.cy;\n var width = shape.width / 2;\n var height = shape.height / 2;\n path.moveTo(cx, cy - height);\n path.lineTo(cx + width, cy);\n path.lineTo(cx, cy + height);\n path.lineTo(cx - width, cy);\n path.closePath();\n }\n});\n/**\n * Pin shape\n * @inner\n */\nvar Pin = graphic.Path.extend({\n type: 'pin',\n shape: {\n // x, y on the cusp\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (path, shape) {\n var x = shape.x;\n var y = shape.y;\n var w = shape.width / 5 * 3;\n // Height must be larger than width\n var h = Math.max(w, shape.height);\n var r = w / 2;\n // Dist on y with tangent point and circle center\n var dy = r * r / (h - r);\n var cy = y - h + r + dy;\n var angle = Math.asin(dy / r);\n // Dist on x with tangent point and circle center\n var dx = Math.cos(angle) * r;\n var tanX = Math.sin(angle);\n var tanY = Math.cos(angle);\n var cpLen = r * 0.6;\n var cpLen2 = r * 0.7;\n path.moveTo(x - dx, cy + dy);\n path.arc(x, cy, r, Math.PI - angle, Math.PI * 2 + angle);\n path.bezierCurveTo(x + dx - tanX * cpLen, cy + dy + tanY * cpLen, x, y - cpLen2, x, y);\n path.bezierCurveTo(x, y - cpLen2, x - dx + tanX * cpLen, cy + dy + tanY * cpLen, x - dx, cy + dy);\n path.closePath();\n }\n});\n/**\n * Arrow shape\n * @inner\n */\nvar Arrow = graphic.Path.extend({\n type: 'arrow',\n shape: {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n buildPath: function (ctx, shape) {\n var height = shape.height;\n var width = shape.width;\n var x = shape.x;\n var y = shape.y;\n var dx = width / 3 * 2;\n ctx.moveTo(x, y);\n ctx.lineTo(x + dx, y + height);\n ctx.lineTo(x, y + height / 4 * 3);\n ctx.lineTo(x - dx, y + height);\n ctx.lineTo(x, y);\n ctx.closePath();\n }\n});\n/**\n * Map of path constructors\n */\n// TODO Use function to build symbol path.\nvar symbolCtors = {\n line: graphic.Line,\n rect: graphic.Rect,\n roundRect: graphic.Rect,\n square: graphic.Rect,\n circle: graphic.Circle,\n diamond: Diamond,\n pin: Pin,\n arrow: Arrow,\n triangle: Triangle\n};\nvar symbolShapeMakers = {\n line: function (x, y, w, h, shape) {\n shape.x1 = x;\n shape.y1 = y + h / 2;\n shape.x2 = x + w;\n shape.y2 = y + h / 2;\n },\n rect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n },\n roundRect: function (x, y, w, h, shape) {\n shape.x = x;\n shape.y = y;\n shape.width = w;\n shape.height = h;\n shape.r = Math.min(w, h) / 4;\n },\n square: function (x, y, w, h, shape) {\n var size = Math.min(w, h);\n shape.x = x;\n shape.y = y;\n shape.width = size;\n shape.height = size;\n },\n circle: function (x, y, w, h, shape) {\n // Put circle in the center of square\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.r = Math.min(w, h) / 2;\n },\n diamond: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n pin: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n arrow: function (x, y, w, h, shape) {\n shape.x = x + w / 2;\n shape.y = y + h / 2;\n shape.width = w;\n shape.height = h;\n },\n triangle: function (x, y, w, h, shape) {\n shape.cx = x + w / 2;\n shape.cy = y + h / 2;\n shape.width = w;\n shape.height = h;\n }\n};\nexport var symbolBuildProxies = {};\neach(symbolCtors, function (Ctor, name) {\n symbolBuildProxies[name] = new Ctor();\n});\nvar SymbolClz = graphic.Path.extend({\n type: 'symbol',\n shape: {\n symbolType: '',\n x: 0,\n y: 0,\n width: 0,\n height: 0\n },\n calculateTextPosition: function (out, config, rect) {\n var res = calculateTextPosition(out, config, rect);\n var shape = this.shape;\n if (shape && shape.symbolType === 'pin' && config.position === 'inside') {\n res.y = rect.y + rect.height * 0.4;\n }\n return res;\n },\n buildPath: function (ctx, shape, inBundle) {\n var symbolType = shape.symbolType;\n if (symbolType !== 'none') {\n var proxySymbol = symbolBuildProxies[symbolType];\n if (!proxySymbol) {\n // Default rect\n symbolType = 'rect';\n proxySymbol = symbolBuildProxies[symbolType];\n }\n symbolShapeMakers[symbolType](shape.x, shape.y, shape.width, shape.height, proxySymbol.shape);\n proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n }\n }\n});\n// Provide setColor helper method to avoid determine if set the fill or stroke outside\nfunction symbolPathSetColor(color, innerColor) {\n if (this.type !== 'image') {\n var symbolStyle = this.style;\n if (this.__isEmptyBrush) {\n symbolStyle.stroke = color;\n symbolStyle.fill = innerColor || '#fff';\n // TODO Same width with lineStyle in LineView\n symbolStyle.lineWidth = 2;\n } else if (this.shape.symbolType === 'line') {\n symbolStyle.stroke = color;\n } else {\n symbolStyle.fill = color;\n }\n this.markRedraw();\n }\n}\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n */\nexport function createSymbol(symbolType, x, y, w, h, color,\n// whether to keep the ratio of w/h,\nkeepAspect) {\n // TODO Support image object, DynamicImage.\n var isEmpty = symbolType.indexOf('empty') === 0;\n if (isEmpty) {\n symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n }\n var symbolPath;\n if (symbolType.indexOf('image://') === 0) {\n symbolPath = graphic.makeImage(symbolType.slice(8), new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else if (symbolType.indexOf('path://') === 0) {\n symbolPath = graphic.makePath(symbolType.slice(7), {}, new BoundingRect(x, y, w, h), keepAspect ? 'center' : 'cover');\n } else {\n symbolPath = new SymbolClz({\n shape: {\n symbolType: symbolType,\n x: x,\n y: y,\n width: w,\n height: h\n }\n });\n }\n symbolPath.__isEmptyBrush = isEmpty;\n // TODO Should deprecate setColor\n symbolPath.setColor = symbolPathSetColor;\n if (color) {\n symbolPath.setColor(color);\n }\n return symbolPath;\n}\nexport function normalizeSymbolSize(symbolSize) {\n if (!isArray(symbolSize)) {\n symbolSize = [+symbolSize, +symbolSize];\n }\n return [symbolSize[0] || 0, symbolSize[1] || 0];\n}\nexport function normalizeSymbolOffset(symbolOffset, symbolSize) {\n if (symbolOffset == null) {\n return;\n }\n if (!isArray(symbolOffset)) {\n symbolOffset = [symbolOffset, symbolOffset];\n }\n return [parsePercent(symbolOffset[0], symbolSize[0]) || 0, parsePercent(retrieve2(symbolOffset[1], symbolOffset[0]), symbolSize[1]) || 0];\n}","function isSafeNum(num) {\n return isFinite(num);\n}\nexport function createLinearGradient(ctx, obj, rect) {\n var x = obj.x == null ? 0 : obj.x;\n var x2 = obj.x2 == null ? 1 : obj.x2;\n var y = obj.y == null ? 0 : obj.y;\n var y2 = obj.y2 == null ? 0 : obj.y2;\n if (!obj.global) {\n x = x * rect.width + rect.x;\n x2 = x2 * rect.width + rect.x;\n y = y * rect.height + rect.y;\n y2 = y2 * rect.height + rect.y;\n }\n x = isSafeNum(x) ? x : 0;\n x2 = isSafeNum(x2) ? x2 : 1;\n y = isSafeNum(y) ? y : 0;\n y2 = isSafeNum(y2) ? y2 : 0;\n var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n return canvasGradient;\n}\nexport function createRadialGradient(ctx, obj, rect) {\n var width = rect.width;\n var height = rect.height;\n var min = Math.min(width, height);\n var x = obj.x == null ? 0.5 : obj.x;\n var y = obj.y == null ? 0.5 : obj.y;\n var r = obj.r == null ? 0.5 : obj.r;\n if (!obj.global) {\n x = x * width + rect.x;\n y = y * height + rect.y;\n r = r * min;\n }\n x = isSafeNum(x) ? x : 0.5;\n y = isSafeNum(y) ? y : 0.5;\n r = r >= 0 && isSafeNum(r) ? r : 0.5;\n var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n return canvasGradient;\n}\nexport function getCanvasGradient(ctx, obj, rect) {\n var canvasGradient = obj.type === 'radial'\n ? createRadialGradient(ctx, obj, rect)\n : createLinearGradient(ctx, obj, rect);\n var colorStops = obj.colorStops;\n for (var i = 0; i < colorStops.length; i++) {\n canvasGradient.addColorStop(colorStops[i].offset, colorStops[i].color);\n }\n return canvasGradient;\n}\nexport function isClipPathChanged(clipPaths, prevClipPaths) {\n if (clipPaths === prevClipPaths || (!clipPaths && !prevClipPaths)) {\n return false;\n }\n if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n return true;\n }\n for (var i = 0; i < clipPaths.length; i++) {\n if (clipPaths[i] !== prevClipPaths[i]) {\n return true;\n }\n }\n return false;\n}\nfunction parseInt10(val) {\n return parseInt(val, 10);\n}\nexport function getSize(root, whIdx, opts) {\n var wh = ['width', 'height'][whIdx];\n var cwh = ['clientWidth', 'clientHeight'][whIdx];\n var plt = ['paddingLeft', 'paddingTop'][whIdx];\n var prb = ['paddingRight', 'paddingBottom'][whIdx];\n if (opts[wh] != null && opts[wh] !== 'auto') {\n return parseFloat(opts[wh]);\n }\n var stl = document.defaultView.getComputedStyle(root);\n return ((root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n - (parseInt10(stl[plt]) || 0)\n - (parseInt10(stl[prb]) || 0)) | 0;\n}\n","import { isArray, isNumber, map } from '../core/util.js';\nexport function normalizeLineDash(lineType, lineWidth) {\n if (!lineType || lineType === 'solid' || !(lineWidth > 0)) {\n return null;\n }\n return lineType === 'dashed'\n ? [4 * lineWidth, 2 * lineWidth]\n : lineType === 'dotted'\n ? [lineWidth]\n : isNumber(lineType)\n ? [lineType] : isArray(lineType) ? lineType : null;\n}\nexport function getLineDash(el) {\n var style = el.style;\n var lineDash = style.lineDash && style.lineWidth > 0 && normalizeLineDash(style.lineDash, style.lineWidth);\n var lineDashOffset = style.lineDashOffset;\n if (lineDash) {\n var lineScale_1 = (style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1;\n if (lineScale_1 && lineScale_1 !== 1) {\n lineDash = map(lineDash, function (rawVal) {\n return rawVal / lineScale_1;\n });\n lineDashOffset /= lineScale_1;\n }\n }\n return [lineDash, lineDashOffset];\n}\n","import { DEFAULT_COMMON_STYLE } from '../graphic/Displayable.js';\nimport PathProxy from '../core/PathProxy.js';\nimport { createOrUpdateImage, isImageReady } from '../graphic/helper/image.js';\nimport { getCanvasGradient, isClipPathChanged } from './helper.js';\nimport Path from '../graphic/Path.js';\nimport ZRImage from '../graphic/Image.js';\nimport TSpan from '../graphic/TSpan.js';\nimport { RADIAN_TO_DEGREE } from '../core/util.js';\nimport { getLineDash } from './dashStyle.js';\nimport { REDRAW_BIT, SHAPE_CHANGED_BIT } from '../graphic/constants.js';\nimport { DEFAULT_FONT } from '../core/platform.js';\nvar pathProxyForDraw = new PathProxy(true);\nfunction styleHasStroke(style) {\n var stroke = style.stroke;\n return !(stroke == null || stroke === 'none' || !(style.lineWidth > 0));\n}\nfunction isValidStrokeFillStyle(strokeOrFill) {\n return typeof strokeOrFill === 'string' && strokeOrFill !== 'none';\n}\nfunction styleHasFill(style) {\n var fill = style.fill;\n return fill != null && fill !== 'none';\n}\nfunction doFillPath(ctx, style) {\n if (style.fillOpacity != null && style.fillOpacity !== 1) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.fillOpacity * style.opacity;\n ctx.fill();\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.fill();\n }\n}\nfunction doStrokePath(ctx, style) {\n if (style.strokeOpacity != null && style.strokeOpacity !== 1) {\n var originalGlobalAlpha = ctx.globalAlpha;\n ctx.globalAlpha = style.strokeOpacity * style.opacity;\n ctx.stroke();\n ctx.globalAlpha = originalGlobalAlpha;\n }\n else {\n ctx.stroke();\n }\n}\nexport function createCanvasPattern(ctx, pattern, el) {\n var image = createOrUpdateImage(pattern.image, pattern.__image, el);\n if (isImageReady(image)) {\n var canvasPattern = ctx.createPattern(image, pattern.repeat || 'repeat');\n if (typeof DOMMatrix === 'function'\n && canvasPattern\n && canvasPattern.setTransform) {\n var matrix = new DOMMatrix();\n matrix.translateSelf((pattern.x || 0), (pattern.y || 0));\n matrix.rotateSelf(0, 0, (pattern.rotation || 0) * RADIAN_TO_DEGREE);\n matrix.scaleSelf((pattern.scaleX || 1), (pattern.scaleY || 1));\n canvasPattern.setTransform(matrix);\n }\n return canvasPattern;\n }\n}\nfunction brushPath(ctx, el, style, inBatch) {\n var _a;\n var hasStroke = styleHasStroke(style);\n var hasFill = styleHasFill(style);\n var strokePercent = style.strokePercent;\n var strokePart = strokePercent < 1;\n var firstDraw = !el.path;\n if ((!el.silent || strokePart) && firstDraw) {\n el.createPathProxy();\n }\n var path = el.path || pathProxyForDraw;\n var dirtyFlag = el.__dirty;\n if (!inBatch) {\n var fill = style.fill;\n var stroke = style.stroke;\n var hasFillGradient = hasFill && !!fill.colorStops;\n var hasStrokeGradient = hasStroke && !!stroke.colorStops;\n var hasFillPattern = hasFill && !!fill.image;\n var hasStrokePattern = hasStroke && !!stroke.image;\n var fillGradient = void 0;\n var strokeGradient = void 0;\n var fillPattern = void 0;\n var strokePattern = void 0;\n var rect = void 0;\n if (hasFillGradient || hasStrokeGradient) {\n rect = el.getBoundingRect();\n }\n if (hasFillGradient) {\n fillGradient = dirtyFlag\n ? getCanvasGradient(ctx, fill, rect)\n : el.__canvasFillGradient;\n el.__canvasFillGradient = fillGradient;\n }\n if (hasStrokeGradient) {\n strokeGradient = dirtyFlag\n ? getCanvasGradient(ctx, stroke, rect)\n : el.__canvasStrokeGradient;\n el.__canvasStrokeGradient = strokeGradient;\n }\n if (hasFillPattern) {\n fillPattern = (dirtyFlag || !el.__canvasFillPattern)\n ? createCanvasPattern(ctx, fill, el)\n : el.__canvasFillPattern;\n el.__canvasFillPattern = fillPattern;\n }\n if (hasStrokePattern) {\n strokePattern = (dirtyFlag || !el.__canvasStrokePattern)\n ? createCanvasPattern(ctx, stroke, el)\n : el.__canvasStrokePattern;\n el.__canvasStrokePattern = fillPattern;\n }\n if (hasFillGradient) {\n ctx.fillStyle = fillGradient;\n }\n else if (hasFillPattern) {\n if (fillPattern) {\n ctx.fillStyle = fillPattern;\n }\n else {\n hasFill = false;\n }\n }\n if (hasStrokeGradient) {\n ctx.strokeStyle = strokeGradient;\n }\n else if (hasStrokePattern) {\n if (strokePattern) {\n ctx.strokeStyle = strokePattern;\n }\n else {\n hasStroke = false;\n }\n }\n }\n var scale = el.getGlobalScale();\n path.setScale(scale[0], scale[1], el.segmentIgnoreThreshold);\n var lineDash;\n var lineDashOffset;\n if (ctx.setLineDash && style.lineDash) {\n _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1];\n }\n var needsRebuild = true;\n if (firstDraw || (dirtyFlag & SHAPE_CHANGED_BIT)) {\n path.setDPR(ctx.dpr);\n if (strokePart) {\n path.setContext(null);\n }\n else {\n path.setContext(ctx);\n needsRebuild = false;\n }\n path.reset();\n el.buildPath(path, el.shape, inBatch);\n path.toStatic();\n el.pathUpdated();\n }\n if (needsRebuild) {\n path.rebuildPath(ctx, strokePart ? strokePercent : 1);\n }\n if (lineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n if (!inBatch) {\n if (style.strokeFirst) {\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n if (hasFill) {\n doFillPath(ctx, style);\n }\n }\n else {\n if (hasFill) {\n doFillPath(ctx, style);\n }\n if (hasStroke) {\n doStrokePath(ctx, style);\n }\n }\n }\n if (lineDash) {\n ctx.setLineDash([]);\n }\n}\nfunction brushImage(ctx, el, style) {\n var image = el.__image = createOrUpdateImage(style.image, el.__image, el, el.onload);\n if (!image || !isImageReady(image)) {\n return;\n }\n var x = style.x || 0;\n var y = style.y || 0;\n var width = el.getWidth();\n var height = el.getHeight();\n var aspect = image.width / image.height;\n if (width == null && height != null) {\n width = height * aspect;\n }\n else if (height == null && width != null) {\n height = width / aspect;\n }\n else if (width == null && height == null) {\n width = image.width;\n height = image.height;\n }\n if (style.sWidth && style.sHeight) {\n var sx = style.sx || 0;\n var sy = style.sy || 0;\n ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);\n }\n else if (style.sx && style.sy) {\n var sx = style.sx;\n var sy = style.sy;\n var sWidth = width - sx;\n var sHeight = height - sy;\n ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);\n }\n else {\n ctx.drawImage(image, x, y, width, height);\n }\n}\nfunction brushText(ctx, el, style) {\n var _a;\n var text = style.text;\n text != null && (text += '');\n if (text) {\n ctx.font = style.font || DEFAULT_FONT;\n ctx.textAlign = style.textAlign;\n ctx.textBaseline = style.textBaseline;\n var lineDash = void 0;\n var lineDashOffset = void 0;\n if (ctx.setLineDash && style.lineDash) {\n _a = getLineDash(el), lineDash = _a[0], lineDashOffset = _a[1];\n }\n if (lineDash) {\n ctx.setLineDash(lineDash);\n ctx.lineDashOffset = lineDashOffset;\n }\n if (style.strokeFirst) {\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n }\n else {\n if (styleHasFill(style)) {\n ctx.fillText(text, style.x, style.y);\n }\n if (styleHasStroke(style)) {\n ctx.strokeText(text, style.x, style.y);\n }\n }\n if (lineDash) {\n ctx.setLineDash([]);\n }\n }\n}\nvar SHADOW_NUMBER_PROPS = ['shadowBlur', 'shadowOffsetX', 'shadowOffsetY'];\nvar STROKE_PROPS = [\n ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n];\nfunction bindCommonProps(ctx, style, prevStyle, forceSetAll, scope) {\n var styleChanged = false;\n if (!forceSetAll) {\n prevStyle = prevStyle || {};\n if (style === prevStyle) {\n return false;\n }\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n var opacity = Math.max(Math.min(style.opacity, 1), 0);\n ctx.globalAlpha = isNaN(opacity) ? DEFAULT_COMMON_STYLE.opacity : opacity;\n }\n if (forceSetAll || style.blend !== prevStyle.blend) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalCompositeOperation = style.blend || DEFAULT_COMMON_STYLE.blend;\n }\n for (var i = 0; i < SHADOW_NUMBER_PROPS.length; i++) {\n var propName = SHADOW_NUMBER_PROPS[i];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx[propName] = ctx.dpr * (style[propName] || 0);\n }\n }\n if (forceSetAll || style.shadowColor !== prevStyle.shadowColor) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.shadowColor = style.shadowColor || DEFAULT_COMMON_STYLE.shadowColor;\n }\n return styleChanged;\n}\nfunction bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetAll, scope) {\n var style = getStyle(el, scope.inHover);\n var prevStyle = forceSetAll\n ? null\n : (prevEl && getStyle(prevEl, scope.inHover) || {});\n if (style === prevStyle) {\n return false;\n }\n var styleChanged = bindCommonProps(ctx, style, prevStyle, forceSetAll, scope);\n if (forceSetAll || style.fill !== prevStyle.fill) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.fill) && (ctx.fillStyle = style.fill);\n }\n if (forceSetAll || style.stroke !== prevStyle.stroke) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n isValidStrokeFillStyle(style.stroke) && (ctx.strokeStyle = style.stroke);\n }\n if (forceSetAll || style.opacity !== prevStyle.opacity) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n }\n if (el.hasStroke()) {\n var lineWidth = style.lineWidth;\n var newLineWidth = lineWidth / ((style.strokeNoScale && el.getLineScale) ? el.getLineScale() : 1);\n if (ctx.lineWidth !== newLineWidth) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx.lineWidth = newLineWidth;\n }\n }\n for (var i = 0; i < STROKE_PROPS.length; i++) {\n var prop = STROKE_PROPS[i];\n var propName = prop[0];\n if (forceSetAll || style[propName] !== prevStyle[propName]) {\n if (!styleChanged) {\n flushPathDrawn(ctx, scope);\n styleChanged = true;\n }\n ctx[propName] = style[propName] || prop[1];\n }\n }\n return styleChanged;\n}\nfunction bindImageStyle(ctx, el, prevEl, forceSetAll, scope) {\n return bindCommonProps(ctx, getStyle(el, scope.inHover), prevEl && getStyle(prevEl, scope.inHover), forceSetAll, scope);\n}\nfunction setContextTransform(ctx, el) {\n var m = el.transform;\n var dpr = ctx.dpr || 1;\n if (m) {\n ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n }\n else {\n ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n }\n}\nfunction updateClipStatus(clipPaths, ctx, scope) {\n var allClipped = false;\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n allClipped = allClipped || clipPath.isZeroArea();\n setContextTransform(ctx, clipPath);\n ctx.beginPath();\n clipPath.buildPath(ctx, clipPath.shape);\n ctx.clip();\n }\n scope.allClipped = allClipped;\n}\nfunction isTransformChanged(m0, m1) {\n if (m0 && m1) {\n return m0[0] !== m1[0]\n || m0[1] !== m1[1]\n || m0[2] !== m1[2]\n || m0[3] !== m1[3]\n || m0[4] !== m1[4]\n || m0[5] !== m1[5];\n }\n else if (!m0 && !m1) {\n return false;\n }\n return true;\n}\nvar DRAW_TYPE_PATH = 1;\nvar DRAW_TYPE_IMAGE = 2;\nvar DRAW_TYPE_TEXT = 3;\nvar DRAW_TYPE_INCREMENTAL = 4;\nfunction canPathBatch(style) {\n var hasFill = styleHasFill(style);\n var hasStroke = styleHasStroke(style);\n return !(style.lineDash\n || !(+hasFill ^ +hasStroke)\n || (hasFill && typeof style.fill !== 'string')\n || (hasStroke && typeof style.stroke !== 'string')\n || style.strokePercent < 1\n || style.strokeOpacity < 1\n || style.fillOpacity < 1);\n}\nfunction flushPathDrawn(ctx, scope) {\n scope.batchFill && ctx.fill();\n scope.batchStroke && ctx.stroke();\n scope.batchFill = '';\n scope.batchStroke = '';\n}\nfunction getStyle(el, inHover) {\n return inHover ? (el.__hoverStyle || el.style) : el.style;\n}\nexport function brushSingle(ctx, el) {\n brush(ctx, el, { inHover: false, viewWidth: 0, viewHeight: 0 }, true);\n}\nexport function brush(ctx, el, scope, isLast) {\n var m = el.transform;\n if (!el.shouldBePainted(scope.viewWidth, scope.viewHeight, false, false)) {\n el.__dirty &= ~REDRAW_BIT;\n el.__isRendered = false;\n return;\n }\n var clipPaths = el.__clipPaths;\n var prevElClipPaths = scope.prevElClipPaths;\n var forceSetTransform = false;\n var forceSetStyle = false;\n if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n if (prevElClipPaths && prevElClipPaths.length) {\n flushPathDrawn(ctx, scope);\n ctx.restore();\n forceSetStyle = forceSetTransform = true;\n scope.prevElClipPaths = null;\n scope.allClipped = false;\n scope.prevEl = null;\n }\n if (clipPaths && clipPaths.length) {\n flushPathDrawn(ctx, scope);\n ctx.save();\n updateClipStatus(clipPaths, ctx, scope);\n forceSetTransform = true;\n }\n scope.prevElClipPaths = clipPaths;\n }\n if (scope.allClipped) {\n el.__isRendered = false;\n return;\n }\n el.beforeBrush && el.beforeBrush();\n el.innerBeforeBrush();\n var prevEl = scope.prevEl;\n if (!prevEl) {\n forceSetStyle = forceSetTransform = true;\n }\n var canBatchPath = el instanceof Path\n && el.autoBatch\n && canPathBatch(el.style);\n if (forceSetTransform || isTransformChanged(m, prevEl.transform)) {\n flushPathDrawn(ctx, scope);\n setContextTransform(ctx, el);\n }\n else if (!canBatchPath) {\n flushPathDrawn(ctx, scope);\n }\n var style = getStyle(el, scope.inHover);\n if (el instanceof Path) {\n if (scope.lastDrawType !== DRAW_TYPE_PATH) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_PATH;\n }\n bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope);\n if (!canBatchPath || (!scope.batchFill && !scope.batchStroke)) {\n ctx.beginPath();\n }\n brushPath(ctx, el, style, canBatchPath);\n if (canBatchPath) {\n scope.batchFill = style.fill || '';\n scope.batchStroke = style.stroke || '';\n }\n }\n else {\n if (el instanceof TSpan) {\n if (scope.lastDrawType !== DRAW_TYPE_TEXT) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_TEXT;\n }\n bindPathAndTextCommonStyle(ctx, el, prevEl, forceSetStyle, scope);\n brushText(ctx, el, style);\n }\n else if (el instanceof ZRImage) {\n if (scope.lastDrawType !== DRAW_TYPE_IMAGE) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_IMAGE;\n }\n bindImageStyle(ctx, el, prevEl, forceSetStyle, scope);\n brushImage(ctx, el, style);\n }\n else if (el.getTemporalDisplayables) {\n if (scope.lastDrawType !== DRAW_TYPE_INCREMENTAL) {\n forceSetStyle = true;\n scope.lastDrawType = DRAW_TYPE_INCREMENTAL;\n }\n brushIncremental(ctx, el, scope);\n }\n }\n if (canBatchPath && isLast) {\n flushPathDrawn(ctx, scope);\n }\n el.innerAfterBrush();\n el.afterBrush && el.afterBrush();\n scope.prevEl = el;\n el.__dirty = 0;\n el.__isRendered = true;\n}\nfunction brushIncremental(ctx, el, scope) {\n var displayables = el.getDisplayables();\n var temporalDisplayables = el.getTemporalDisplayables();\n ctx.save();\n var innerScope = {\n prevElClipPaths: null,\n prevEl: null,\n allClipped: false,\n viewWidth: scope.viewWidth,\n viewHeight: scope.viewHeight,\n inHover: scope.inHover\n };\n var i;\n var len;\n for (i = el.getCursor(), len = displayables.length; i < len; i++) {\n var displayable = displayables[i];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i === len - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n for (var i_1 = 0, len_1 = temporalDisplayables.length; i_1 < len_1; i_1++) {\n var displayable = temporalDisplayables[i_1];\n displayable.beforeBrush && displayable.beforeBrush();\n displayable.innerBeforeBrush();\n brush(ctx, displayable, innerScope, i_1 === len_1 - 1);\n displayable.innerAfterBrush();\n displayable.afterBrush && displayable.afterBrush();\n innerScope.prevEl = displayable;\n }\n el.clearTemporalDisplayables();\n el.notClear = true;\n ctx.restore();\n}\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport WeakMap from 'zrender/lib/core/WeakMap.js';\nimport LRU from 'zrender/lib/core/LRU.js';\nimport { defaults, map, isArray, isString, isNumber } from 'zrender/lib/core/util.js';\nimport { getLeastCommonMultiple } from './number.js';\nimport { createSymbol } from './symbol.js';\nimport { brushSingle } from 'zrender/lib/canvas/graphic.js';\nimport { platformApi } from 'zrender/lib/core/platform.js';\nvar decalMap = new WeakMap();\nvar decalCache = new LRU(100);\nvar decalKeys = ['symbol', 'symbolSize', 'symbolKeepAspect', 'color', 'backgroundColor', 'dashArrayX', 'dashArrayY', 'maxTileWidth', 'maxTileHeight'];\n/**\n * Create or update pattern image from decal options\n *\n * @param {InnerDecalObject | 'none'} decalObject decal options, 'none' if no decal\n * @return {Pattern} pattern with generated image, null if no decal\n */\nexport function createOrUpdatePatternFromDecal(decalObject, api) {\n if (decalObject === 'none') {\n return null;\n }\n var dpr = api.getDevicePixelRatio();\n var zr = api.getZr();\n var isSVG = zr.painter.type === 'svg';\n if (decalObject.dirty) {\n decalMap[\"delete\"](decalObject);\n }\n var oldPattern = decalMap.get(decalObject);\n if (oldPattern) {\n return oldPattern;\n }\n var decalOpt = defaults(decalObject, {\n symbol: 'rect',\n symbolSize: 1,\n symbolKeepAspect: true,\n color: 'rgba(0, 0, 0, 0.2)',\n backgroundColor: null,\n dashArrayX: 5,\n dashArrayY: 5,\n rotation: 0,\n maxTileWidth: 512,\n maxTileHeight: 512\n });\n if (decalOpt.backgroundColor === 'none') {\n decalOpt.backgroundColor = null;\n }\n var pattern = {\n repeat: 'repeat'\n };\n setPatternnSource(pattern);\n pattern.rotation = decalOpt.rotation;\n pattern.scaleX = pattern.scaleY = isSVG ? 1 : 1 / dpr;\n decalMap.set(decalObject, pattern);\n decalObject.dirty = false;\n return pattern;\n function setPatternnSource(pattern) {\n var keys = [dpr];\n var isValidKey = true;\n for (var i = 0; i < decalKeys.length; ++i) {\n var value = decalOpt[decalKeys[i]];\n if (value != null && !isArray(value) && !isString(value) && !isNumber(value) && typeof value !== 'boolean') {\n isValidKey = false;\n break;\n }\n keys.push(value);\n }\n var cacheKey;\n if (isValidKey) {\n cacheKey = keys.join(',') + (isSVG ? '-svg' : '');\n var cache = decalCache.get(cacheKey);\n if (cache) {\n isSVG ? pattern.svgElement = cache : pattern.image = cache;\n }\n }\n var dashArrayX = normalizeDashArrayX(decalOpt.dashArrayX);\n var dashArrayY = normalizeDashArrayY(decalOpt.dashArrayY);\n var symbolArray = normalizeSymbolArray(decalOpt.symbol);\n var lineBlockLengthsX = getLineBlockLengthX(dashArrayX);\n var lineBlockLengthY = getLineBlockLengthY(dashArrayY);\n var canvas = !isSVG && platformApi.createCanvas();\n var svgRoot = isSVG && {\n tag: 'g',\n attrs: {},\n key: 'dcl',\n children: []\n };\n var pSize = getPatternSize();\n var ctx;\n if (canvas) {\n canvas.width = pSize.width * dpr;\n canvas.height = pSize.height * dpr;\n ctx = canvas.getContext('2d');\n }\n brushDecal();\n if (isValidKey) {\n decalCache.put(cacheKey, canvas || svgRoot);\n }\n pattern.image = canvas;\n pattern.svgElement = svgRoot;\n pattern.svgWidth = pSize.width;\n pattern.svgHeight = pSize.height;\n /**\n * Get minimum length that can make a repeatable pattern.\n *\n * @return {Object} pattern width and height\n */\n function getPatternSize() {\n /**\n * For example, if dash is [[3, 2], [2, 1]] for X, it looks like\n * |--- --- --- --- --- ...\n * |-- -- -- -- -- -- -- -- ...\n * |--- --- --- --- --- ...\n * |-- -- -- -- -- -- -- -- ...\n * So the minimum length of X is 15,\n * which is the least common multiple of `3 + 2` and `2 + 1`\n * |--- --- --- |--- --- ...\n * |-- -- -- -- -- |-- -- -- ...\n */\n var width = 1;\n for (var i = 0, xlen = lineBlockLengthsX.length; i < xlen; ++i) {\n width = getLeastCommonMultiple(width, lineBlockLengthsX[i]);\n }\n var symbolRepeats = 1;\n for (var i = 0, xlen = symbolArray.length; i < xlen; ++i) {\n symbolRepeats = getLeastCommonMultiple(symbolRepeats, symbolArray[i].length);\n }\n width *= symbolRepeats;\n var height = lineBlockLengthY * lineBlockLengthsX.length * symbolArray.length;\n if (process.env.NODE_ENV !== 'production') {\n var warn = function (attrName) {\n /* eslint-disable-next-line */\n console.warn(\"Calculated decal size is greater than \" + attrName + \" due to decal option settings so \" + attrName + \" is used for the decal size. Please consider changing the decal option to make a smaller decal or set \" + attrName + \" to be larger to avoid incontinuity.\");\n };\n if (width > decalOpt.maxTileWidth) {\n warn('maxTileWidth');\n }\n if (height > decalOpt.maxTileHeight) {\n warn('maxTileHeight');\n }\n }\n return {\n width: Math.max(1, Math.min(width, decalOpt.maxTileWidth)),\n height: Math.max(1, Math.min(height, decalOpt.maxTileHeight))\n };\n }\n function brushDecal() {\n if (ctx) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n if (decalOpt.backgroundColor) {\n ctx.fillStyle = decalOpt.backgroundColor;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n }\n var ySum = 0;\n for (var i = 0; i < dashArrayY.length; ++i) {\n ySum += dashArrayY[i];\n }\n if (ySum <= 0) {\n // dashArrayY is 0, draw nothing\n return;\n }\n var y = -lineBlockLengthY;\n var yId = 0;\n var yIdTotal = 0;\n var xId0 = 0;\n while (y < pSize.height) {\n if (yId % 2 === 0) {\n var symbolYId = yIdTotal / 2 % symbolArray.length;\n var x = 0;\n var xId1 = 0;\n var xId1Total = 0;\n while (x < pSize.width * 2) {\n var xSum = 0;\n for (var i = 0; i < dashArrayX[xId0].length; ++i) {\n xSum += dashArrayX[xId0][i];\n }\n if (xSum <= 0) {\n // Skip empty line\n break;\n }\n // E.g., [15, 5, 20, 5] draws only for 15 and 20\n if (xId1 % 2 === 0) {\n var size = (1 - decalOpt.symbolSize) * 0.5;\n var left = x + dashArrayX[xId0][xId1] * size;\n var top_1 = y + dashArrayY[yId] * size;\n var width = dashArrayX[xId0][xId1] * decalOpt.symbolSize;\n var height = dashArrayY[yId] * decalOpt.symbolSize;\n var symbolXId = xId1Total / 2 % symbolArray[symbolYId].length;\n brushSymbol(left, top_1, width, height, symbolArray[symbolYId][symbolXId]);\n }\n x += dashArrayX[xId0][xId1];\n ++xId1Total;\n ++xId1;\n if (xId1 === dashArrayX[xId0].length) {\n xId1 = 0;\n }\n }\n ++xId0;\n if (xId0 === dashArrayX.length) {\n xId0 = 0;\n }\n }\n y += dashArrayY[yId];\n ++yIdTotal;\n ++yId;\n if (yId === dashArrayY.length) {\n yId = 0;\n }\n }\n function brushSymbol(x, y, width, height, symbolType) {\n var scale = isSVG ? 1 : dpr;\n var symbol = createSymbol(symbolType, x * scale, y * scale, width * scale, height * scale, decalOpt.color, decalOpt.symbolKeepAspect);\n if (isSVG) {\n var symbolVNode = zr.painter.renderOneToVNode(symbol);\n if (symbolVNode) {\n svgRoot.children.push(symbolVNode);\n }\n } else {\n // Paint to canvas for all other renderers.\n brushSingle(ctx, symbol);\n }\n }\n }\n }\n}\n/**\n * Convert symbol array into normalized array\n *\n * @param {string | (string | string[])[]} symbol symbol input\n * @return {string[][]} normolized symbol array\n */\nfunction normalizeSymbolArray(symbol) {\n if (!symbol || symbol.length === 0) {\n return [['rect']];\n }\n if (isString(symbol)) {\n return [[symbol]];\n }\n var isAllString = true;\n for (var i = 0; i < symbol.length; ++i) {\n if (!isString(symbol[i])) {\n isAllString = false;\n break;\n }\n }\n if (isAllString) {\n return normalizeSymbolArray([symbol]);\n }\n var result = [];\n for (var i = 0; i < symbol.length; ++i) {\n if (isString(symbol[i])) {\n result.push([symbol[i]]);\n } else {\n result.push(symbol[i]);\n }\n }\n return result;\n}\n/**\n * Convert dash input into dashArray\n *\n * @param {DecalDashArrayX} dash dash input\n * @return {number[][]} normolized dash array\n */\nfunction normalizeDashArrayX(dash) {\n if (!dash || dash.length === 0) {\n return [[0, 0]];\n }\n if (isNumber(dash)) {\n var dashValue = Math.ceil(dash);\n return [[dashValue, dashValue]];\n }\n /**\n * [20, 5] should be normalized into [[20, 5]],\n * while [20, [5, 10]] should be normalized into [[20, 20], [5, 10]]\n */\n var isAllNumber = true;\n for (var i = 0; i < dash.length; ++i) {\n if (!isNumber(dash[i])) {\n isAllNumber = false;\n break;\n }\n }\n if (isAllNumber) {\n return normalizeDashArrayX([dash]);\n }\n var result = [];\n for (var i = 0; i < dash.length; ++i) {\n if (isNumber(dash[i])) {\n var dashValue = Math.ceil(dash[i]);\n result.push([dashValue, dashValue]);\n } else {\n var dashValue = map(dash[i], function (n) {\n return Math.ceil(n);\n });\n if (dashValue.length % 2 === 1) {\n // [4, 2, 1] means |---- - -- |---- - -- |\n // so normalize it to be [4, 2, 1, 4, 2, 1]\n result.push(dashValue.concat(dashValue));\n } else {\n result.push(dashValue);\n }\n }\n }\n return result;\n}\n/**\n * Convert dash input into dashArray\n *\n * @param {DecalDashArrayY} dash dash input\n * @return {number[]} normolized dash array\n */\nfunction normalizeDashArrayY(dash) {\n if (!dash || typeof dash === 'object' && dash.length === 0) {\n return [0, 0];\n }\n if (isNumber(dash)) {\n var dashValue_1 = Math.ceil(dash);\n return [dashValue_1, dashValue_1];\n }\n var dashValue = map(dash, function (n) {\n return Math.ceil(n);\n });\n return dash.length % 2 ? dashValue.concat(dashValue) : dashValue;\n}\n/**\n * Get block length of each line. A block is the length of dash line and space.\n * For example, a line with [4, 1] has a dash line of 4 and a space of 1 after\n * that, so the block length of this line is 5.\n *\n * @param {number[][]} dash dash array of X or Y\n * @return {number[]} block length of each line\n */\nfunction getLineBlockLengthX(dash) {\n return map(dash, function (line) {\n return getLineBlockLengthY(line);\n });\n}\nfunction getLineBlockLengthY(dash) {\n var blockLength = 0;\n for (var i = 0; i < dash.length; ++i) {\n blockLength += dash[i];\n }\n if (dash.length % 2 === 1) {\n // [4, 2, 1] means |---- - -- |---- - -- |\n // So total length is (4 + 2 + 1) * 2\n return blockLength * 2;\n }\n return blockLength;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createOrUpdatePatternFromDecal } from '../util/decal.js';\nexport default function decalVisual(ecModel, api) {\n ecModel.eachRawSeries(function (seriesModel) {\n if (ecModel.isSeriesFiltered(seriesModel)) {\n return;\n }\n var data = seriesModel.getData();\n if (data.hasItemVisual()) {\n data.each(function (idx) {\n var decal = data.getItemVisual(idx, 'decal');\n if (decal) {\n var itemStyle = data.ensureUniqueItemVisual(idx, 'style');\n itemStyle.decal = createOrUpdatePatternFromDecal(decal, api);\n }\n });\n }\n var decal = data.getVisual('decal');\n if (decal) {\n var style = data.getVisual('style');\n style.decal = createOrUpdatePatternFromDecal(decal, api);\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport Eventful from 'zrender/lib/core/Eventful.js';\n;\nvar lifecycle = new Eventful();\nexport default lifecycle;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { error } from '../util/log.js';\n// Implementation of exported APIs. For example registerMap, getMap.\n// The implementations will be registered when installing the component.\n// Avoid these code being bundled to the core module.\nvar implsStore = {};\n// TODO Type\nexport function registerImpl(name, impl) {\n if (process.env.NODE_ENV !== 'production') {\n if (implsStore[name]) {\n error(\"Already has an implementation of \" + name + \".\");\n }\n }\n implsStore[name] = impl;\n}\nexport function getImpl(name) {\n if (process.env.NODE_ENV !== 'production') {\n if (!implsStore[name]) {\n error(\"Implementation of \" + name + \" doesn't exists.\");\n }\n }\n return implsStore[name];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport { __extends } from \"tslib\";\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrender from 'zrender/lib/zrender.js';\nimport { assert, each, isFunction, isObject, indexOf, bind, clone, setAsPrimitive, extend, createHashMap, map, defaults, isDom, isArray, noop, isString, retrieve2 } from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport timsort from 'zrender/lib/core/timsort.js';\nimport Eventful from 'zrender/lib/core/Eventful.js';\nimport GlobalModel from '../model/Global.js';\nimport ExtensionAPI from './ExtensionAPI.js';\nimport CoordinateSystemManager from './CoordinateSystem.js';\nimport OptionManager from '../model/OptionManager.js';\nimport backwardCompat from '../preprocessor/backwardCompat.js';\nimport dataStack from '../processor/dataStack.js';\nimport SeriesModel from '../model/Series.js';\nimport ComponentView from '../view/Component.js';\nimport ChartView from '../view/Chart.js';\nimport * as graphic from '../util/graphic.js';\nimport { getECData } from '../util/innerStore.js';\nimport { isHighDownDispatcher, HOVER_STATE_EMPHASIS, HOVER_STATE_BLUR, blurSeriesFromHighlightPayload, toggleSelectionFromPayload, updateSeriesElementSelection, getAllSelectedIndices, isSelectChangePayload, isHighDownPayload, HIGHLIGHT_ACTION_TYPE, DOWNPLAY_ACTION_TYPE, SELECT_ACTION_TYPE, UNSELECT_ACTION_TYPE, TOGGLE_SELECT_ACTION_TYPE, savePathStates, enterEmphasis, leaveEmphasis, leaveBlur, enterSelect, leaveSelect, enterBlur, allLeaveBlur, findComponentHighDownDispatchers, blurComponent, handleGlobalMouseOverForHighDown, handleGlobalMouseOutForHighDown } from '../util/states.js';\nimport * as modelUtil from '../util/model.js';\nimport { throttle } from '../util/throttle.js';\nimport { seriesStyleTask, dataStyleTask, dataColorPaletteTask } from '../visual/style.js';\nimport loadingDefault from '../loading/default.js';\nimport Scheduler from './Scheduler.js';\nimport lightTheme from '../theme/light.js';\nimport darkTheme from '../theme/dark.js';\nimport { parseClassType } from '../util/clazz.js';\nimport { ECEventProcessor } from '../util/ECEventProcessor.js';\nimport { seriesSymbolTask, dataSymbolTask } from '../visual/symbol.js';\nimport { getVisualFromData, getItemVisualFromData } from '../visual/helper.js';\nimport { deprecateLog, deprecateReplaceLog, error, warn } from '../util/log.js';\nimport { handleLegacySelectEvents } from '../legacy/dataSelectAction.js';\nimport { registerExternalTransform } from '../data/helper/transform.js';\nimport { createLocaleObject, SYSTEM_LANG } from './locale.js';\nimport { findEventDispatcher } from '../util/event.js';\nimport decal from '../visual/decal.js';\nimport lifecycle from './lifecycle.js';\nimport { platformApi, setPlatformAPI } from 'zrender/lib/core/platform.js';\nimport { getImpl } from './impl.js';\nexport var version = '5.5.0';\nexport var dependencies = {\n zrender: '5.5.0'\n};\nvar TEST_FRAME_REMAIN_TIME = 1;\nvar PRIORITY_PROCESSOR_SERIES_FILTER = 800;\n// Some data processors depends on the stack result dimension (to calculate data extent).\n// So data stack stage should be in front of data processing stage.\nvar PRIORITY_PROCESSOR_DATASTACK = 900;\n// \"Data filter\" will block the stream, so it should be\n// put at the beginning of data processing.\nvar PRIORITY_PROCESSOR_FILTER = 1000;\nvar PRIORITY_PROCESSOR_DEFAULT = 2000;\nvar PRIORITY_PROCESSOR_STATISTIC = 5000;\nvar PRIORITY_VISUAL_LAYOUT = 1000;\nvar PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100;\nvar PRIORITY_VISUAL_GLOBAL = 2000;\nvar PRIORITY_VISUAL_CHART = 3000;\nvar PRIORITY_VISUAL_COMPONENT = 4000;\n// Visual property in data. Greater than `PRIORITY_VISUAL_COMPONENT` to enable to\n// overwrite the viusal result of component (like `visualMap`)\n// using data item specific setting (like itemStyle.xxx on data item)\nvar PRIORITY_VISUAL_CHART_DATA_CUSTOM = 4500;\n// Greater than `PRIORITY_VISUAL_CHART_DATA_CUSTOM` to enable to layout based on\n// visual result like `symbolSize`.\nvar PRIORITY_VISUAL_POST_CHART_LAYOUT = 4600;\nvar PRIORITY_VISUAL_BRUSH = 5000;\nvar PRIORITY_VISUAL_ARIA = 6000;\nvar PRIORITY_VISUAL_DECAL = 7000;\nexport var PRIORITY = {\n PROCESSOR: {\n FILTER: PRIORITY_PROCESSOR_FILTER,\n SERIES_FILTER: PRIORITY_PROCESSOR_SERIES_FILTER,\n STATISTIC: PRIORITY_PROCESSOR_STATISTIC\n },\n VISUAL: {\n LAYOUT: PRIORITY_VISUAL_LAYOUT,\n PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT,\n GLOBAL: PRIORITY_VISUAL_GLOBAL,\n CHART: PRIORITY_VISUAL_CHART,\n POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT,\n COMPONENT: PRIORITY_VISUAL_COMPONENT,\n BRUSH: PRIORITY_VISUAL_BRUSH,\n CHART_ITEM: PRIORITY_VISUAL_CHART_DATA_CUSTOM,\n ARIA: PRIORITY_VISUAL_ARIA,\n DECAL: PRIORITY_VISUAL_DECAL\n }\n};\n// Main process have three entries: `setOption`, `dispatchAction` and `resize`,\n// where they must not be invoked nestedly, except the only case: invoke\n// dispatchAction with updateMethod \"none\" in main process.\n// This flag is used to carry out this rule.\n// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).\nvar IN_MAIN_PROCESS_KEY = '__flagInMainProcess';\nvar PENDING_UPDATE = '__pendingUpdate';\nvar STATUS_NEEDS_UPDATE_KEY = '__needsUpdateStatus';\nvar ACTION_REG = /^[a-zA-Z0-9_]+$/;\nvar CONNECT_STATUS_KEY = '__connectUpdateStatus';\nvar CONNECT_STATUS_PENDING = 0;\nvar CONNECT_STATUS_UPDATING = 1;\nvar CONNECT_STATUS_UPDATED = 2;\n;\n;\nfunction createRegisterEventWithLowercaseECharts(method) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (this.isDisposed()) {\n disposedWarning(this.id);\n return;\n }\n return toLowercaseNameAndCallEventful(this, method, args);\n };\n}\nfunction createRegisterEventWithLowercaseMessageCenter(method) {\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return toLowercaseNameAndCallEventful(this, method, args);\n };\n}\nfunction toLowercaseNameAndCallEventful(host, method, args) {\n // `args[0]` is event name. Event name is all lowercase.\n args[0] = args[0] && args[0].toLowerCase();\n return Eventful.prototype[method].apply(host, args);\n}\nvar MessageCenter = /** @class */function (_super) {\n __extends(MessageCenter, _super);\n function MessageCenter() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return MessageCenter;\n}(Eventful);\nvar messageCenterProto = MessageCenter.prototype;\nmessageCenterProto.on = createRegisterEventWithLowercaseMessageCenter('on');\nmessageCenterProto.off = createRegisterEventWithLowercaseMessageCenter('off');\n// ---------------------------------------\n// Internal method names for class ECharts\n// ---------------------------------------\nvar prepare;\nvar prepareView;\nvar updateDirectly;\nvar updateMethods;\nvar doConvertPixel;\nvar updateStreamModes;\nvar doDispatchAction;\nvar flushPendingActions;\nvar triggerUpdatedEvent;\nvar bindRenderedEvent;\nvar bindMouseEvent;\nvar render;\nvar renderComponents;\nvar renderSeries;\nvar createExtensionAPI;\nvar enableConnect;\nvar markStatusToUpdate;\nvar applyChangedStates;\nvar ECharts = /** @class */function (_super) {\n __extends(ECharts, _super);\n function ECharts(dom,\n // Theme name or themeOption.\n theme, opts) {\n var _this = _super.call(this, new ECEventProcessor()) || this;\n _this._chartsViews = [];\n _this._chartsMap = {};\n _this._componentsViews = [];\n _this._componentsMap = {};\n // Can't dispatch action during rendering procedure\n _this._pendingActions = [];\n opts = opts || {};\n // Get theme by name\n if (isString(theme)) {\n theme = themeStorage[theme];\n }\n _this._dom = dom;\n var defaultRenderer = 'canvas';\n var defaultCoarsePointer = 'auto';\n var defaultUseDirtyRect = false;\n if (process.env.NODE_ENV !== 'production') {\n var root = /* eslint-disable-next-line */\n env.hasGlobalWindow ? window : global;\n if (root) {\n defaultRenderer = retrieve2(root.__ECHARTS__DEFAULT__RENDERER__, defaultRenderer);\n defaultCoarsePointer = retrieve2(root.__ECHARTS__DEFAULT__COARSE_POINTER, defaultCoarsePointer);\n defaultUseDirtyRect = retrieve2(root.__ECHARTS__DEFAULT__USE_DIRTY_RECT__, defaultUseDirtyRect);\n }\n }\n if (opts.ssr) {\n zrender.registerSSRDataGetter(function (el) {\n var ecData = getECData(el);\n var dataIndex = ecData.dataIndex;\n if (dataIndex == null) {\n return;\n }\n var hashMap = createHashMap();\n hashMap.set('series_index', ecData.seriesIndex);\n hashMap.set('data_index', dataIndex);\n ecData.ssrType && hashMap.set('ssr_type', ecData.ssrType);\n return hashMap;\n });\n }\n var zr = _this._zr = zrender.init(dom, {\n renderer: opts.renderer || defaultRenderer,\n devicePixelRatio: opts.devicePixelRatio,\n width: opts.width,\n height: opts.height,\n ssr: opts.ssr,\n useDirtyRect: retrieve2(opts.useDirtyRect, defaultUseDirtyRect),\n useCoarsePointer: retrieve2(opts.useCoarsePointer, defaultCoarsePointer),\n pointerSize: opts.pointerSize\n });\n _this._ssr = opts.ssr;\n // Expect 60 fps.\n _this._throttledZrFlush = throttle(bind(zr.flush, zr), 17);\n theme = clone(theme);\n theme && backwardCompat(theme, true);\n _this._theme = theme;\n _this._locale = createLocaleObject(opts.locale || SYSTEM_LANG);\n _this._coordSysMgr = new CoordinateSystemManager();\n var api = _this._api = createExtensionAPI(_this);\n // Sort on demand\n function prioritySortFunc(a, b) {\n return a.__prio - b.__prio;\n }\n timsort(visualFuncs, prioritySortFunc);\n timsort(dataProcessorFuncs, prioritySortFunc);\n _this._scheduler = new Scheduler(_this, api, dataProcessorFuncs, visualFuncs);\n _this._messageCenter = new MessageCenter();\n // Init mouse events\n _this._initEvents();\n // In case some people write `window.onresize = chart.resize`\n _this.resize = bind(_this.resize, _this);\n zr.animation.on('frame', _this._onframe, _this);\n bindRenderedEvent(zr, _this);\n bindMouseEvent(zr, _this);\n // ECharts instance can be used as value.\n setAsPrimitive(_this);\n return _this;\n }\n ECharts.prototype._onframe = function () {\n if (this._disposed) {\n return;\n }\n applyChangedStates(this);\n var scheduler = this._scheduler;\n // Lazy update\n if (this[PENDING_UPDATE]) {\n var silent = this[PENDING_UPDATE].silent;\n this[IN_MAIN_PROCESS_KEY] = true;\n try {\n prepare(this);\n updateMethods.update.call(this, null, this[PENDING_UPDATE].updateParams);\n } catch (e) {\n this[IN_MAIN_PROCESS_KEY] = false;\n this[PENDING_UPDATE] = null;\n throw e;\n }\n // At present, in each frame, zrender performs:\n // (1) animation step forward.\n // (2) trigger('frame') (where this `_onframe` is called)\n // (3) zrender flush (render).\n // If we do nothing here, since we use `setToFinal: true`, the step (3) above\n // will render the final state of the elements before the real animation started.\n this._zr.flush();\n this[IN_MAIN_PROCESS_KEY] = false;\n this[PENDING_UPDATE] = null;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n }\n // Avoid do both lazy update and progress in one frame.\n else if (scheduler.unfinished) {\n // Stream progress.\n var remainTime = TEST_FRAME_REMAIN_TIME;\n var ecModel = this._model;\n var api = this._api;\n scheduler.unfinished = false;\n do {\n var startTime = +new Date();\n scheduler.performSeriesTasks(ecModel);\n // Currently dataProcessorFuncs do not check threshold.\n scheduler.performDataProcessorTasks(ecModel);\n updateStreamModes(this, ecModel);\n // Do not update coordinate system here. Because that coord system update in\n // each frame is not a good user experience. So we follow the rule that\n // the extent of the coordinate system is determined in the first frame (the\n // frame is executed immediately after task reset.\n // this._coordSysMgr.update(ecModel, api);\n // console.log('--- ec frame visual ---', remainTime);\n scheduler.performVisualTasks(ecModel);\n renderSeries(this, this._model, api, 'remain', {});\n remainTime -= +new Date() - startTime;\n } while (remainTime > 0 && scheduler.unfinished);\n // Call flush explicitly for trigger finished event.\n if (!scheduler.unfinished) {\n this._zr.flush();\n }\n // Else, zr flushing be ensue within the same frame,\n // because zr flushing is after onframe event.\n }\n };\n\n ECharts.prototype.getDom = function () {\n return this._dom;\n };\n ECharts.prototype.getId = function () {\n return this.id;\n };\n ECharts.prototype.getZr = function () {\n return this._zr;\n };\n ECharts.prototype.isSSR = function () {\n return this._ssr;\n };\n /* eslint-disable-next-line */\n ECharts.prototype.setOption = function (option, notMerge, lazyUpdate) {\n if (this[IN_MAIN_PROCESS_KEY]) {\n if (process.env.NODE_ENV !== 'production') {\n error('`setOption` should not be called during main process.');\n }\n return;\n }\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n var silent;\n var replaceMerge;\n var transitionOpt;\n if (isObject(notMerge)) {\n lazyUpdate = notMerge.lazyUpdate;\n silent = notMerge.silent;\n replaceMerge = notMerge.replaceMerge;\n transitionOpt = notMerge.transition;\n notMerge = notMerge.notMerge;\n }\n this[IN_MAIN_PROCESS_KEY] = true;\n if (!this._model || notMerge) {\n var optionManager = new OptionManager(this._api);\n var theme = this._theme;\n var ecModel = this._model = new GlobalModel();\n ecModel.scheduler = this._scheduler;\n ecModel.ssr = this._ssr;\n ecModel.init(null, null, null, theme, this._locale, optionManager);\n }\n this._model.setOption(option, {\n replaceMerge: replaceMerge\n }, optionPreprocessorFuncs);\n var updateParams = {\n seriesTransition: transitionOpt,\n optionChanged: true\n };\n if (lazyUpdate) {\n this[PENDING_UPDATE] = {\n silent: silent,\n updateParams: updateParams\n };\n this[IN_MAIN_PROCESS_KEY] = false;\n // `setOption(option, {lazyMode: true})` may be called when zrender has been slept.\n // It should wake it up to make sure zrender start to render at the next frame.\n this.getZr().wakeUp();\n } else {\n try {\n prepare(this);\n updateMethods.update.call(this, null, updateParams);\n } catch (e) {\n this[PENDING_UPDATE] = null;\n this[IN_MAIN_PROCESS_KEY] = false;\n throw e;\n }\n // Ensure zr refresh sychronously, and then pixel in canvas can be\n // fetched after `setOption`.\n if (!this._ssr) {\n // not use flush when using ssr mode.\n this._zr.flush();\n }\n this[PENDING_UPDATE] = null;\n this[IN_MAIN_PROCESS_KEY] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n }\n };\n /**\n * @deprecated\n */\n ECharts.prototype.setTheme = function () {\n deprecateLog('ECharts#setTheme() is DEPRECATED in ECharts 3.0');\n };\n // We don't want developers to use getModel directly.\n ECharts.prototype.getModel = function () {\n return this._model;\n };\n ECharts.prototype.getOption = function () {\n return this._model && this._model.getOption();\n };\n ECharts.prototype.getWidth = function () {\n return this._zr.getWidth();\n };\n ECharts.prototype.getHeight = function () {\n return this._zr.getHeight();\n };\n ECharts.prototype.getDevicePixelRatio = function () {\n return this._zr.painter.dpr\n /* eslint-disable-next-line */ || env.hasGlobalWindow && window.devicePixelRatio || 1;\n };\n /**\n * Get canvas which has all thing rendered\n * @deprecated Use renderToCanvas instead.\n */\n ECharts.prototype.getRenderedCanvas = function (opts) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateReplaceLog('getRenderedCanvas', 'renderToCanvas');\n }\n return this.renderToCanvas(opts);\n };\n ECharts.prototype.renderToCanvas = function (opts) {\n opts = opts || {};\n var painter = this._zr.painter;\n if (process.env.NODE_ENV !== 'production') {\n if (painter.type !== 'canvas') {\n throw new Error('renderToCanvas can only be used in the canvas renderer.');\n }\n }\n return painter.getRenderedCanvas({\n backgroundColor: opts.backgroundColor || this._model.get('backgroundColor'),\n pixelRatio: opts.pixelRatio || this.getDevicePixelRatio()\n });\n };\n ECharts.prototype.renderToSVGString = function (opts) {\n opts = opts || {};\n var painter = this._zr.painter;\n if (process.env.NODE_ENV !== 'production') {\n if (painter.type !== 'svg') {\n throw new Error('renderToSVGString can only be used in the svg renderer.');\n }\n }\n return painter.renderToString({\n useViewBox: opts.useViewBox\n });\n };\n /**\n * Get svg data url\n */\n ECharts.prototype.getSvgDataURL = function () {\n if (!env.svgSupported) {\n return;\n }\n var zr = this._zr;\n var list = zr.storage.getDisplayList();\n // Stop animations\n each(list, function (el) {\n el.stopAnimation(null, true);\n });\n return zr.painter.toDataURL();\n };\n ECharts.prototype.getDataURL = function (opts) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n opts = opts || {};\n var excludeComponents = opts.excludeComponents;\n var ecModel = this._model;\n var excludesComponentViews = [];\n var self = this;\n each(excludeComponents, function (componentType) {\n ecModel.eachComponent({\n mainType: componentType\n }, function (component) {\n var view = self._componentsMap[component.__viewId];\n if (!view.group.ignore) {\n excludesComponentViews.push(view);\n view.group.ignore = true;\n }\n });\n });\n var url = this._zr.painter.getType() === 'svg' ? this.getSvgDataURL() : this.renderToCanvas(opts).toDataURL('image/' + (opts && opts.type || 'png'));\n each(excludesComponentViews, function (view) {\n view.group.ignore = false;\n });\n return url;\n };\n ECharts.prototype.getConnectedDataURL = function (opts) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n var isSvg = opts.type === 'svg';\n var groupId = this.group;\n var mathMin = Math.min;\n var mathMax = Math.max;\n var MAX_NUMBER = Infinity;\n if (connectedGroups[groupId]) {\n var left_1 = MAX_NUMBER;\n var top_1 = MAX_NUMBER;\n var right_1 = -MAX_NUMBER;\n var bottom_1 = -MAX_NUMBER;\n var canvasList_1 = [];\n var dpr_1 = opts && opts.pixelRatio || this.getDevicePixelRatio();\n each(instances, function (chart, id) {\n if (chart.group === groupId) {\n var canvas = isSvg ? chart.getZr().painter.getSvgDom().innerHTML : chart.renderToCanvas(clone(opts));\n var boundingRect = chart.getDom().getBoundingClientRect();\n left_1 = mathMin(boundingRect.left, left_1);\n top_1 = mathMin(boundingRect.top, top_1);\n right_1 = mathMax(boundingRect.right, right_1);\n bottom_1 = mathMax(boundingRect.bottom, bottom_1);\n canvasList_1.push({\n dom: canvas,\n left: boundingRect.left,\n top: boundingRect.top\n });\n }\n });\n left_1 *= dpr_1;\n top_1 *= dpr_1;\n right_1 *= dpr_1;\n bottom_1 *= dpr_1;\n var width = right_1 - left_1;\n var height = bottom_1 - top_1;\n var targetCanvas = platformApi.createCanvas();\n var zr_1 = zrender.init(targetCanvas, {\n renderer: isSvg ? 'svg' : 'canvas'\n });\n zr_1.resize({\n width: width,\n height: height\n });\n if (isSvg) {\n var content_1 = '';\n each(canvasList_1, function (item) {\n var x = item.left - left_1;\n var y = item.top - top_1;\n content_1 += '' + item.dom + '';\n });\n zr_1.painter.getSvgRoot().innerHTML = content_1;\n if (opts.connectedBackgroundColor) {\n zr_1.painter.setBackgroundColor(opts.connectedBackgroundColor);\n }\n zr_1.refreshImmediately();\n return zr_1.painter.toDataURL();\n } else {\n // Background between the charts\n if (opts.connectedBackgroundColor) {\n zr_1.add(new graphic.Rect({\n shape: {\n x: 0,\n y: 0,\n width: width,\n height: height\n },\n style: {\n fill: opts.connectedBackgroundColor\n }\n }));\n }\n each(canvasList_1, function (item) {\n var img = new graphic.Image({\n style: {\n x: item.left * dpr_1 - left_1,\n y: item.top * dpr_1 - top_1,\n image: item.dom\n }\n });\n zr_1.add(img);\n });\n zr_1.refreshImmediately();\n return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));\n }\n } else {\n return this.getDataURL(opts);\n }\n };\n ECharts.prototype.convertToPixel = function (finder, value) {\n return doConvertPixel(this, 'convertToPixel', finder, value);\n };\n ECharts.prototype.convertFromPixel = function (finder, value) {\n return doConvertPixel(this, 'convertFromPixel', finder, value);\n };\n /**\n * Is the specified coordinate systems or components contain the given pixel point.\n * @param {Array|number} value\n * @return {boolean} result\n */\n ECharts.prototype.containPixel = function (finder, value) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n var ecModel = this._model;\n var result;\n var findResult = modelUtil.parseFinder(ecModel, finder);\n each(findResult, function (models, key) {\n key.indexOf('Models') >= 0 && each(models, function (model) {\n var coordSys = model.coordinateSystem;\n if (coordSys && coordSys.containPoint) {\n result = result || !!coordSys.containPoint(value);\n } else if (key === 'seriesModels') {\n var view = this._chartsMap[model.__viewId];\n if (view && view.containPoint) {\n result = result || view.containPoint(value, model);\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(key + ': ' + (view ? 'The found component do not support containPoint.' : 'No view mapping to the found component.'));\n }\n }\n } else {\n if (process.env.NODE_ENV !== 'production') {\n warn(key + ': containPoint is not supported');\n }\n }\n }, this);\n }, this);\n return !!result;\n };\n /**\n * Get visual from series or data.\n * @param finder\n * If string, e.g., 'series', means {seriesIndex: 0}.\n * If Object, could contain some of these properties below:\n * {\n * seriesIndex / seriesId / seriesName,\n * dataIndex / dataIndexInside\n * }\n * If dataIndex is not specified, series visual will be fetched,\n * but not data item visual.\n * If all of seriesIndex, seriesId, seriesName are not specified,\n * visual will be fetched from first series.\n * @param visualType 'color', 'symbol', 'symbolSize'\n */\n ECharts.prototype.getVisual = function (finder, visualType) {\n var ecModel = this._model;\n var parsedFinder = modelUtil.parseFinder(ecModel, finder, {\n defaultMainType: 'series'\n });\n var seriesModel = parsedFinder.seriesModel;\n if (process.env.NODE_ENV !== 'production') {\n if (!seriesModel) {\n warn('There is no specified series model');\n }\n }\n var data = seriesModel.getData();\n var dataIndexInside = parsedFinder.hasOwnProperty('dataIndexInside') ? parsedFinder.dataIndexInside : parsedFinder.hasOwnProperty('dataIndex') ? data.indexOfRawIndex(parsedFinder.dataIndex) : null;\n return dataIndexInside != null ? getItemVisualFromData(data, dataIndexInside, visualType) : getVisualFromData(data, visualType);\n };\n /**\n * Get view of corresponding component model\n */\n ECharts.prototype.getViewOfComponentModel = function (componentModel) {\n return this._componentsMap[componentModel.__viewId];\n };\n /**\n * Get view of corresponding series model\n */\n ECharts.prototype.getViewOfSeriesModel = function (seriesModel) {\n return this._chartsMap[seriesModel.__viewId];\n };\n ECharts.prototype._initEvents = function () {\n var _this = this;\n each(MOUSE_EVENT_NAMES, function (eveName) {\n var handler = function (e) {\n var ecModel = _this.getModel();\n var el = e.target;\n var params;\n var isGlobalOut = eveName === 'globalout';\n // no e.target when 'globalout'.\n if (isGlobalOut) {\n params = {};\n } else {\n el && findEventDispatcher(el, function (parent) {\n var ecData = getECData(parent);\n if (ecData && ecData.dataIndex != null) {\n var dataModel = ecData.dataModel || ecModel.getSeriesByIndex(ecData.seriesIndex);\n params = dataModel && dataModel.getDataParams(ecData.dataIndex, ecData.dataType, el) || {};\n return true;\n }\n // If element has custom eventData of components\n else if (ecData.eventData) {\n params = extend({}, ecData.eventData);\n return true;\n }\n }, true);\n }\n // Contract: if params prepared in mouse event,\n // these properties must be specified:\n // {\n // componentType: string (component main type)\n // componentIndex: number\n // }\n // Otherwise event query can not work.\n if (params) {\n var componentType = params.componentType;\n var componentIndex = params.componentIndex;\n // Special handling for historic reason: when trigger by\n // markLine/markPoint/markArea, the componentType is\n // 'markLine'/'markPoint'/'markArea', but we should better\n // enable them to be queried by seriesIndex, since their\n // option is set in each series.\n if (componentType === 'markLine' || componentType === 'markPoint' || componentType === 'markArea') {\n componentType = 'series';\n componentIndex = params.seriesIndex;\n }\n var model = componentType && componentIndex != null && ecModel.getComponent(componentType, componentIndex);\n var view = model && _this[model.mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId];\n if (process.env.NODE_ENV !== 'production') {\n // `event.componentType` and `event[componentTpype + 'Index']` must not\n // be missed, otherwise there is no way to distinguish source component.\n // See `dataFormat.getDataParams`.\n if (!isGlobalOut && !(model && view)) {\n warn('model or view can not be found by params');\n }\n }\n params.event = e;\n params.type = eveName;\n _this._$eventProcessor.eventInfo = {\n targetEl: el,\n packedEvent: params,\n model: model,\n view: view\n };\n _this.trigger(eveName, params);\n }\n };\n // Consider that some component (like tooltip, brush, ...)\n // register zr event handler, but user event handler might\n // do anything, such as call `setOption` or `dispatchAction`,\n // which probably update any of the content and probably\n // cause problem if it is called previous other inner handlers.\n handler.zrEventfulCallAtLast = true;\n _this._zr.on(eveName, handler, _this);\n });\n each(eventActionMap, function (actionType, eventType) {\n _this._messageCenter.on(eventType, function (event) {\n this.trigger(eventType, event);\n }, _this);\n });\n // Extra events\n // TODO register?\n each(['selectchanged'], function (eventType) {\n _this._messageCenter.on(eventType, function (event) {\n this.trigger(eventType, event);\n }, _this);\n });\n handleLegacySelectEvents(this._messageCenter, this, this._api);\n };\n ECharts.prototype.isDisposed = function () {\n return this._disposed;\n };\n ECharts.prototype.clear = function () {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n this.setOption({\n series: []\n }, true);\n };\n ECharts.prototype.dispose = function () {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n this._disposed = true;\n var dom = this.getDom();\n if (dom) {\n modelUtil.setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');\n }\n var chart = this;\n var api = chart._api;\n var ecModel = chart._model;\n each(chart._componentsViews, function (component) {\n component.dispose(ecModel, api);\n });\n each(chart._chartsViews, function (chart) {\n chart.dispose(ecModel, api);\n });\n // Dispose after all views disposed\n chart._zr.dispose();\n // Set properties to null.\n // To reduce the memory cost in case the top code still holds this instance unexpectedly.\n chart._dom = chart._model = chart._chartsMap = chart._componentsMap = chart._chartsViews = chart._componentsViews = chart._scheduler = chart._api = chart._zr = chart._throttledZrFlush = chart._theme = chart._coordSysMgr = chart._messageCenter = null;\n delete instances[chart.id];\n };\n /**\n * Resize the chart\n */\n ECharts.prototype.resize = function (opts) {\n if (this[IN_MAIN_PROCESS_KEY]) {\n if (process.env.NODE_ENV !== 'production') {\n error('`resize` should not be called during main process.');\n }\n return;\n }\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n this._zr.resize(opts);\n var ecModel = this._model;\n // Resize loading effect\n this._loadingFX && this._loadingFX.resize();\n if (!ecModel) {\n return;\n }\n var needPrepare = ecModel.resetOption('media');\n var silent = opts && opts.silent;\n // There is some real cases that:\n // chart.setOption(option, { lazyUpdate: true });\n // chart.resize();\n if (this[PENDING_UPDATE]) {\n if (silent == null) {\n silent = this[PENDING_UPDATE].silent;\n }\n needPrepare = true;\n this[PENDING_UPDATE] = null;\n }\n this[IN_MAIN_PROCESS_KEY] = true;\n try {\n needPrepare && prepare(this);\n updateMethods.update.call(this, {\n type: 'resize',\n animation: extend({\n // Disable animation\n duration: 0\n }, opts && opts.animation)\n });\n } catch (e) {\n this[IN_MAIN_PROCESS_KEY] = false;\n throw e;\n }\n this[IN_MAIN_PROCESS_KEY] = false;\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n };\n ECharts.prototype.showLoading = function (name, cfg) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n if (isObject(name)) {\n cfg = name;\n name = '';\n }\n name = name || 'default';\n this.hideLoading();\n if (!loadingEffects[name]) {\n if (process.env.NODE_ENV !== 'production') {\n warn('Loading effects ' + name + ' not exists.');\n }\n return;\n }\n var el = loadingEffects[name](this._api, cfg);\n var zr = this._zr;\n this._loadingFX = el;\n zr.add(el);\n };\n /**\n * Hide loading effect\n */\n ECharts.prototype.hideLoading = function () {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n this._loadingFX && this._zr.remove(this._loadingFX);\n this._loadingFX = null;\n };\n ECharts.prototype.makeActionFromEvent = function (eventObj) {\n var payload = extend({}, eventObj);\n payload.type = eventActionMap[eventObj.type];\n return payload;\n };\n /**\n * @param opt If pass boolean, means opt.silent\n * @param opt.silent Default `false`. Whether trigger events.\n * @param opt.flush Default `undefined`.\n * true: Flush immediately, and then pixel in canvas can be fetched\n * immediately. Caution: it might affect performance.\n * false: Not flush.\n * undefined: Auto decide whether perform flush.\n */\n ECharts.prototype.dispatchAction = function (payload, opt) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n if (!isObject(opt)) {\n opt = {\n silent: !!opt\n };\n }\n if (!actions[payload.type]) {\n return;\n }\n // Avoid dispatch action before setOption. Especially in `connect`.\n if (!this._model) {\n return;\n }\n // May dispatchAction in rendering procedure\n if (this[IN_MAIN_PROCESS_KEY]) {\n this._pendingActions.push(payload);\n return;\n }\n var silent = opt.silent;\n doDispatchAction.call(this, payload, silent);\n var flush = opt.flush;\n if (flush) {\n this._zr.flush();\n } else if (flush !== false && env.browser.weChat) {\n // In WeChat embedded browser, `requestAnimationFrame` and `setInterval`\n // hang when sliding page (on touch event), which cause that zr does not\n // refresh until user interaction finished, which is not expected.\n // But `dispatchAction` may be called too frequently when pan on touch\n // screen, which impacts performance if do not throttle them.\n this._throttledZrFlush();\n }\n flushPendingActions.call(this, silent);\n triggerUpdatedEvent.call(this, silent);\n };\n ECharts.prototype.updateLabelLayout = function () {\n lifecycle.trigger('series:layoutlabels', this._model, this._api, {\n // Not adding series labels.\n // TODO\n updatedSeries: []\n });\n };\n ECharts.prototype.appendData = function (params) {\n if (this._disposed) {\n disposedWarning(this.id);\n return;\n }\n var seriesIndex = params.seriesIndex;\n var ecModel = this.getModel();\n var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n if (process.env.NODE_ENV !== 'production') {\n assert(params.data && seriesModel);\n }\n seriesModel.appendData(params);\n // Note: `appendData` does not support that update extent of coordinate\n // system, util some scenario require that. In the expected usage of\n // `appendData`, the initial extent of coordinate system should better\n // be fixed by axis `min`/`max` setting or initial data, otherwise if\n // the extent changed while `appendData`, the location of the painted\n // graphic elements have to be changed, which make the usage of\n // `appendData` meaningless.\n this._scheduler.unfinished = true;\n this.getZr().wakeUp();\n };\n // A work around for no `internal` modifier in ts yet but\n // need to strictly hide private methods to JS users.\n ECharts.internalField = function () {\n prepare = function (ecIns) {\n var scheduler = ecIns._scheduler;\n scheduler.restorePipelines(ecIns._model);\n scheduler.prepareStageTasks();\n prepareView(ecIns, true);\n prepareView(ecIns, false);\n scheduler.plan();\n };\n /**\n * Prepare view instances of charts and components\n */\n prepareView = function (ecIns, isComponent) {\n var ecModel = ecIns._model;\n var scheduler = ecIns._scheduler;\n var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;\n var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;\n var zr = ecIns._zr;\n var api = ecIns._api;\n for (var i = 0; i < viewList.length; i++) {\n viewList[i].__alive = false;\n }\n isComponent ? ecModel.eachComponent(function (componentType, model) {\n componentType !== 'series' && doPrepare(model);\n }) : ecModel.eachSeries(doPrepare);\n function doPrepare(model) {\n // By default view will be reused if possible for the case that `setOption` with \"notMerge\"\n // mode and need to enable transition animation. (Usually, when they have the same id, or\n // especially no id but have the same type & name & index. See the `model.id` generation\n // rule in `makeIdAndName` and `viewId` generation rule here).\n // But in `replaceMerge` mode, this feature should be able to disabled when it is clear that\n // the new model has nothing to do with the old model.\n var requireNewView = model.__requireNewView;\n // This command should not work twice.\n model.__requireNewView = false;\n // Consider: id same and type changed.\n var viewId = '_ec_' + model.id + '_' + model.type;\n var view = !requireNewView && viewMap[viewId];\n if (!view) {\n var classType = parseClassType(model.type);\n var Clazz = isComponent ? ComponentView.getClass(classType.main, classType.sub) :\n // FIXME:TS\n // (ChartView as ChartViewConstructor).getClass('series', classType.sub)\n // For backward compat, still support a chart type declared as only subType\n // like \"liquidfill\", but recommend \"series.liquidfill\"\n // But need a base class to make a type series.\n ChartView.getClass(classType.sub);\n if (process.env.NODE_ENV !== 'production') {\n assert(Clazz, classType.sub + ' does not exist.');\n }\n view = new Clazz();\n view.init(ecModel, api);\n viewMap[viewId] = view;\n viewList.push(view);\n zr.add(view.group);\n }\n model.__viewId = view.__id = viewId;\n view.__alive = true;\n view.__model = model;\n view.group.__ecComponentInfo = {\n mainType: model.mainType,\n index: model.componentIndex\n };\n !isComponent && scheduler.prepareView(view, model, ecModel, api);\n }\n for (var i = 0; i < viewList.length;) {\n var view = viewList[i];\n if (!view.__alive) {\n !isComponent && view.renderTask.dispose();\n zr.remove(view.group);\n view.dispose(ecModel, api);\n viewList.splice(i, 1);\n if (viewMap[view.__id] === view) {\n delete viewMap[view.__id];\n }\n view.__id = view.group.__ecComponentInfo = null;\n } else {\n i++;\n }\n }\n };\n updateDirectly = function (ecIns, method, payload, mainType, subType) {\n var ecModel = ecIns._model;\n ecModel.setUpdatePayload(payload);\n // broadcast\n if (!mainType) {\n // FIXME\n // Chart will not be update directly here, except set dirty.\n // But there is no such scenario now.\n each([].concat(ecIns._componentsViews).concat(ecIns._chartsViews), callView);\n return;\n }\n var query = {};\n query[mainType + 'Id'] = payload[mainType + 'Id'];\n query[mainType + 'Index'] = payload[mainType + 'Index'];\n query[mainType + 'Name'] = payload[mainType + 'Name'];\n var condition = {\n mainType: mainType,\n query: query\n };\n subType && (condition.subType = subType); // subType may be '' by parseClassType;\n var excludeSeriesId = payload.excludeSeriesId;\n var excludeSeriesIdMap;\n if (excludeSeriesId != null) {\n excludeSeriesIdMap = createHashMap();\n each(modelUtil.normalizeToArray(excludeSeriesId), function (id) {\n var modelId = modelUtil.convertOptionIdName(id, null);\n if (modelId != null) {\n excludeSeriesIdMap.set(modelId, true);\n }\n });\n }\n // If dispatchAction before setOption, do nothing.\n ecModel && ecModel.eachComponent(condition, function (model) {\n var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null;\n if (isExcluded) {\n return;\n }\n ;\n if (isHighDownPayload(payload)) {\n if (model instanceof SeriesModel) {\n if (payload.type === HIGHLIGHT_ACTION_TYPE && !payload.notBlur && !model.get(['emphasis', 'disabled'])) {\n blurSeriesFromHighlightPayload(model, payload, ecIns._api);\n }\n } else {\n var _a = findComponentHighDownDispatchers(model.mainType, model.componentIndex, payload.name, ecIns._api),\n focusSelf = _a.focusSelf,\n dispatchers = _a.dispatchers;\n if (payload.type === HIGHLIGHT_ACTION_TYPE && focusSelf && !payload.notBlur) {\n blurComponent(model.mainType, model.componentIndex, ecIns._api);\n }\n // PENDING:\n // Whether to put this \"enter emphasis\" code in `ComponentView`,\n // which will be the same as `ChartView` but might be not necessary\n // and will be far from this logic.\n if (dispatchers) {\n each(dispatchers, function (dispatcher) {\n payload.type === HIGHLIGHT_ACTION_TYPE ? enterEmphasis(dispatcher) : leaveEmphasis(dispatcher);\n });\n }\n }\n } else if (isSelectChangePayload(payload)) {\n // TODO geo\n if (model instanceof SeriesModel) {\n toggleSelectionFromPayload(model, payload, ecIns._api);\n updateSeriesElementSelection(model);\n markStatusToUpdate(ecIns);\n }\n }\n }, ecIns);\n ecModel && ecModel.eachComponent(condition, function (model) {\n var isExcluded = excludeSeriesIdMap && excludeSeriesIdMap.get(model.id) != null;\n if (isExcluded) {\n return;\n }\n ;\n callView(ecIns[mainType === 'series' ? '_chartsMap' : '_componentsMap'][model.__viewId]);\n }, ecIns);\n function callView(view) {\n view && view.__alive && view[method] && view[method](view.__model, ecModel, ecIns._api, payload);\n }\n };\n updateMethods = {\n prepareAndUpdate: function (payload) {\n prepare(this);\n updateMethods.update.call(this, payload, {\n // Needs to mark option changed if newOption is given.\n // It's from MagicType.\n // TODO If use a separate flag optionChanged in payload?\n optionChanged: payload.newOption != null\n });\n },\n update: function (payload, updateParams) {\n var ecModel = this._model;\n var api = this._api;\n var zr = this._zr;\n var coordSysMgr = this._coordSysMgr;\n var scheduler = this._scheduler;\n // update before setOption\n if (!ecModel) {\n return;\n }\n ecModel.setUpdatePayload(payload);\n scheduler.restoreData(ecModel, payload);\n scheduler.performSeriesTasks(ecModel);\n // TODO\n // Save total ecModel here for undo/redo (after restoring data and before processing data).\n // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call.\n // Create new coordinate system each update\n // In LineView may save the old coordinate system and use it to get the original point.\n coordSysMgr.create(ecModel, api);\n scheduler.performDataProcessorTasks(ecModel, payload);\n // Current stream render is not supported in data process. So we can update\n // stream modes after data processing, where the filtered data is used to\n // determine whether to use progressive rendering.\n updateStreamModes(this, ecModel);\n // We update stream modes before coordinate system updated, then the modes info\n // can be fetched when coord sys updating (consider the barGrid extent fix). But\n // the drawback is the full coord info can not be fetched. Fortunately this full\n // coord is not required in stream mode updater currently.\n coordSysMgr.update(ecModel, api);\n clearColorPalette(ecModel);\n scheduler.performVisualTasks(ecModel, payload);\n render(this, ecModel, api, payload, updateParams);\n // Set background\n var backgroundColor = ecModel.get('backgroundColor') || 'transparent';\n var darkMode = ecModel.get('darkMode');\n zr.setBackgroundColor(backgroundColor);\n // Force set dark mode.\n if (darkMode != null && darkMode !== 'auto') {\n zr.setDarkMode(darkMode);\n }\n lifecycle.trigger('afterupdate', ecModel, api);\n },\n updateTransform: function (payload) {\n var _this = this;\n var ecModel = this._model;\n var api = this._api;\n // update before setOption\n if (!ecModel) {\n return;\n }\n ecModel.setUpdatePayload(payload);\n // ChartView.markUpdateMethod(payload, 'updateTransform');\n var componentDirtyList = [];\n ecModel.eachComponent(function (componentType, componentModel) {\n if (componentType === 'series') {\n return;\n }\n var componentView = _this.getViewOfComponentModel(componentModel);\n if (componentView && componentView.__alive) {\n if (componentView.updateTransform) {\n var result = componentView.updateTransform(componentModel, ecModel, api, payload);\n result && result.update && componentDirtyList.push(componentView);\n } else {\n componentDirtyList.push(componentView);\n }\n }\n });\n var seriesDirtyMap = createHashMap();\n ecModel.eachSeries(function (seriesModel) {\n var chartView = _this._chartsMap[seriesModel.__viewId];\n if (chartView.updateTransform) {\n var result = chartView.updateTransform(seriesModel, ecModel, api, payload);\n result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);\n } else {\n seriesDirtyMap.set(seriesModel.uid, 1);\n }\n });\n clearColorPalette(ecModel);\n // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);\n this._scheduler.performVisualTasks(ecModel, payload, {\n setDirty: true,\n dirtyMap: seriesDirtyMap\n });\n // Currently, not call render of components. Geo render cost a lot.\n // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);\n renderSeries(this, ecModel, api, payload, {}, seriesDirtyMap);\n lifecycle.trigger('afterupdate', ecModel, api);\n },\n updateView: function (payload) {\n var ecModel = this._model;\n // update before setOption\n if (!ecModel) {\n return;\n }\n ecModel.setUpdatePayload(payload);\n ChartView.markUpdateMethod(payload, 'updateView');\n clearColorPalette(ecModel);\n // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n this._scheduler.performVisualTasks(ecModel, payload, {\n setDirty: true\n });\n render(this, ecModel, this._api, payload, {});\n lifecycle.trigger('afterupdate', ecModel, this._api);\n },\n updateVisual: function (payload) {\n // updateMethods.update.call(this, payload);\n var _this = this;\n var ecModel = this._model;\n // update before setOption\n if (!ecModel) {\n return;\n }\n ecModel.setUpdatePayload(payload);\n // clear all visual\n ecModel.eachSeries(function (seriesModel) {\n seriesModel.getData().clearAllVisual();\n });\n // Perform visual\n ChartView.markUpdateMethod(payload, 'updateVisual');\n clearColorPalette(ecModel);\n // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n this._scheduler.performVisualTasks(ecModel, payload, {\n visualType: 'visual',\n setDirty: true\n });\n ecModel.eachComponent(function (componentType, componentModel) {\n if (componentType !== 'series') {\n var componentView = _this.getViewOfComponentModel(componentModel);\n componentView && componentView.__alive && componentView.updateVisual(componentModel, ecModel, _this._api, payload);\n }\n });\n ecModel.eachSeries(function (seriesModel) {\n var chartView = _this._chartsMap[seriesModel.__viewId];\n chartView.updateVisual(seriesModel, ecModel, _this._api, payload);\n });\n lifecycle.trigger('afterupdate', ecModel, this._api);\n },\n updateLayout: function (payload) {\n updateMethods.update.call(this, payload);\n }\n };\n doConvertPixel = function (ecIns, methodName, finder, value) {\n if (ecIns._disposed) {\n disposedWarning(ecIns.id);\n return;\n }\n var ecModel = ecIns._model;\n var coordSysList = ecIns._coordSysMgr.getCoordinateSystems();\n var result;\n var parsedFinder = modelUtil.parseFinder(ecModel, finder);\n for (var i = 0; i < coordSysList.length; i++) {\n var coordSys = coordSysList[i];\n if (coordSys[methodName] && (result = coordSys[methodName](ecModel, parsedFinder, value)) != null) {\n return result;\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n warn('No coordinate system that supports ' + methodName + ' found by the given finder.');\n }\n };\n updateStreamModes = function (ecIns, ecModel) {\n var chartsMap = ecIns._chartsMap;\n var scheduler = ecIns._scheduler;\n ecModel.eachSeries(function (seriesModel) {\n scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);\n });\n };\n doDispatchAction = function (payload, silent) {\n var _this = this;\n var ecModel = this.getModel();\n var payloadType = payload.type;\n var escapeConnect = payload.escapeConnect;\n var actionWrap = actions[payloadType];\n var actionInfo = actionWrap.actionInfo;\n var cptTypeTmp = (actionInfo.update || 'update').split(':');\n var updateMethod = cptTypeTmp.pop();\n var cptType = cptTypeTmp[0] != null && parseClassType(cptTypeTmp[0]);\n this[IN_MAIN_PROCESS_KEY] = true;\n var payloads = [payload];\n var batched = false;\n // Batch action\n if (payload.batch) {\n batched = true;\n payloads = map(payload.batch, function (item) {\n item = defaults(extend({}, item), payload);\n item.batch = null;\n return item;\n });\n }\n var eventObjBatch = [];\n var eventObj;\n var isSelectChange = isSelectChangePayload(payload);\n var isHighDown = isHighDownPayload(payload);\n // Only leave blur once if there are multiple batches.\n if (isHighDown) {\n allLeaveBlur(this._api);\n }\n each(payloads, function (batchItem) {\n // Action can specify the event by return it.\n eventObj = actionWrap.action(batchItem, _this._model, _this._api);\n // Emit event outside\n eventObj = eventObj || extend({}, batchItem);\n // Convert type to eventType\n eventObj.type = actionInfo.event || eventObj.type;\n eventObjBatch.push(eventObj);\n // light update does not perform data process, layout and visual.\n if (isHighDown) {\n var _a = modelUtil.preParseFinder(payload),\n queryOptionMap = _a.queryOptionMap,\n mainTypeSpecified = _a.mainTypeSpecified;\n var componentMainType = mainTypeSpecified ? queryOptionMap.keys()[0] : 'series';\n updateDirectly(_this, updateMethod, batchItem, componentMainType);\n markStatusToUpdate(_this);\n } else if (isSelectChange) {\n // At present `dispatchAction({ type: 'select', ... })` is not supported on components.\n // geo still use 'geoselect'.\n updateDirectly(_this, updateMethod, batchItem, 'series');\n markStatusToUpdate(_this);\n } else if (cptType) {\n updateDirectly(_this, updateMethod, batchItem, cptType.main, cptType.sub);\n }\n });\n if (updateMethod !== 'none' && !isHighDown && !isSelectChange && !cptType) {\n try {\n // Still dirty\n if (this[PENDING_UPDATE]) {\n prepare(this);\n updateMethods.update.call(this, payload);\n this[PENDING_UPDATE] = null;\n } else {\n updateMethods[updateMethod].call(this, payload);\n }\n } catch (e) {\n this[IN_MAIN_PROCESS_KEY] = false;\n throw e;\n }\n }\n // Follow the rule of action batch\n if (batched) {\n eventObj = {\n type: actionInfo.event || payloadType,\n escapeConnect: escapeConnect,\n batch: eventObjBatch\n };\n } else {\n eventObj = eventObjBatch[0];\n }\n this[IN_MAIN_PROCESS_KEY] = false;\n if (!silent) {\n var messageCenter = this._messageCenter;\n messageCenter.trigger(eventObj.type, eventObj);\n // Extra triggered 'selectchanged' event\n if (isSelectChange) {\n var newObj = {\n type: 'selectchanged',\n escapeConnect: escapeConnect,\n selected: getAllSelectedIndices(ecModel),\n isFromClick: payload.isFromClick || false,\n fromAction: payload.type,\n fromActionPayload: payload\n };\n messageCenter.trigger(newObj.type, newObj);\n }\n }\n };\n flushPendingActions = function (silent) {\n var pendingActions = this._pendingActions;\n while (pendingActions.length) {\n var payload = pendingActions.shift();\n doDispatchAction.call(this, payload, silent);\n }\n };\n triggerUpdatedEvent = function (silent) {\n !silent && this.trigger('updated');\n };\n /**\n * Event `rendered` is triggered when zr\n * rendered. It is useful for realtime\n * snapshot (reflect animation).\n *\n * Event `finished` is triggered when:\n * (1) zrender rendering finished.\n * (2) initial animation finished.\n * (3) progressive rendering finished.\n * (4) no pending action.\n * (5) no delayed setOption needs to be processed.\n */\n bindRenderedEvent = function (zr, ecIns) {\n zr.on('rendered', function (params) {\n ecIns.trigger('rendered', params);\n // The `finished` event should not be triggered repeatedly,\n // so it should only be triggered when rendering indeed happens\n // in zrender. (Consider the case that dipatchAction is keep\n // triggering when mouse move).\n if (\n // Although zr is dirty if initial animation is not finished\n // and this checking is called on frame, we also check\n // animation finished for robustness.\n zr.animation.isFinished() && !ecIns[PENDING_UPDATE] && !ecIns._scheduler.unfinished && !ecIns._pendingActions.length) {\n ecIns.trigger('finished');\n }\n });\n };\n bindMouseEvent = function (zr, ecIns) {\n zr.on('mouseover', function (e) {\n var el = e.target;\n var dispatcher = findEventDispatcher(el, isHighDownDispatcher);\n if (dispatcher) {\n handleGlobalMouseOverForHighDown(dispatcher, e, ecIns._api);\n markStatusToUpdate(ecIns);\n }\n }).on('mouseout', function (e) {\n var el = e.target;\n var dispatcher = findEventDispatcher(el, isHighDownDispatcher);\n if (dispatcher) {\n handleGlobalMouseOutForHighDown(dispatcher, e, ecIns._api);\n markStatusToUpdate(ecIns);\n }\n }).on('click', function (e) {\n var el = e.target;\n var dispatcher = findEventDispatcher(el, function (target) {\n return getECData(target).dataIndex != null;\n }, true);\n if (dispatcher) {\n var actionType = dispatcher.selected ? 'unselect' : 'select';\n var ecData = getECData(dispatcher);\n ecIns._api.dispatchAction({\n type: actionType,\n dataType: ecData.dataType,\n dataIndexInside: ecData.dataIndex,\n seriesIndex: ecData.seriesIndex,\n isFromClick: true\n });\n }\n });\n };\n function clearColorPalette(ecModel) {\n ecModel.clearColorPalette();\n ecModel.eachSeries(function (seriesModel) {\n seriesModel.clearColorPalette();\n });\n }\n ;\n // Allocate zlevels for series and components\n function allocateZlevels(ecModel) {\n ;\n var componentZLevels = [];\n var seriesZLevels = [];\n var hasSeparateZLevel = false;\n ecModel.eachComponent(function (componentType, componentModel) {\n var zlevel = componentModel.get('zlevel') || 0;\n var z = componentModel.get('z') || 0;\n var zlevelKey = componentModel.getZLevelKey();\n hasSeparateZLevel = hasSeparateZLevel || !!zlevelKey;\n (componentType === 'series' ? seriesZLevels : componentZLevels).push({\n zlevel: zlevel,\n z: z,\n idx: componentModel.componentIndex,\n type: componentType,\n key: zlevelKey\n });\n });\n if (hasSeparateZLevel) {\n // Series after component\n var zLevels = componentZLevels.concat(seriesZLevels);\n var lastSeriesZLevel_1;\n var lastSeriesKey_1;\n timsort(zLevels, function (a, b) {\n if (a.zlevel === b.zlevel) {\n return a.z - b.z;\n }\n return a.zlevel - b.zlevel;\n });\n each(zLevels, function (item) {\n var componentModel = ecModel.getComponent(item.type, item.idx);\n var zlevel = item.zlevel;\n var key = item.key;\n if (lastSeriesZLevel_1 != null) {\n zlevel = Math.max(lastSeriesZLevel_1, zlevel);\n }\n if (key) {\n if (zlevel === lastSeriesZLevel_1 && key !== lastSeriesKey_1) {\n zlevel++;\n }\n lastSeriesKey_1 = key;\n } else if (lastSeriesKey_1) {\n if (zlevel === lastSeriesZLevel_1) {\n zlevel++;\n }\n lastSeriesKey_1 = '';\n }\n lastSeriesZLevel_1 = zlevel;\n componentModel.setZLevel(zlevel);\n });\n }\n }\n render = function (ecIns, ecModel, api, payload, updateParams) {\n allocateZlevels(ecModel);\n renderComponents(ecIns, ecModel, api, payload, updateParams);\n each(ecIns._chartsViews, function (chart) {\n chart.__alive = false;\n });\n renderSeries(ecIns, ecModel, api, payload, updateParams);\n // Remove groups of unrendered charts\n each(ecIns._chartsViews, function (chart) {\n if (!chart.__alive) {\n chart.remove(ecModel, api);\n }\n });\n };\n renderComponents = function (ecIns, ecModel, api, payload, updateParams, dirtyList) {\n each(dirtyList || ecIns._componentsViews, function (componentView) {\n var componentModel = componentView.__model;\n clearStates(componentModel, componentView);\n componentView.render(componentModel, ecModel, api, payload);\n updateZ(componentModel, componentView);\n updateStates(componentModel, componentView);\n });\n };\n /**\n * Render each chart and component\n */\n renderSeries = function (ecIns, ecModel, api, payload, updateParams, dirtyMap) {\n // Render all charts\n var scheduler = ecIns._scheduler;\n updateParams = extend(updateParams || {}, {\n updatedSeries: ecModel.getSeries()\n });\n // TODO progressive?\n lifecycle.trigger('series:beforeupdate', ecModel, api, updateParams);\n var unfinished = false;\n ecModel.eachSeries(function (seriesModel) {\n var chartView = ecIns._chartsMap[seriesModel.__viewId];\n chartView.__alive = true;\n var renderTask = chartView.renderTask;\n scheduler.updatePayload(renderTask, payload);\n // TODO states on marker.\n clearStates(seriesModel, chartView);\n if (dirtyMap && dirtyMap.get(seriesModel.uid)) {\n renderTask.dirty();\n }\n if (renderTask.perform(scheduler.getPerformArgs(renderTask))) {\n unfinished = true;\n }\n chartView.group.silent = !!seriesModel.get('silent');\n // Should not call markRedraw on group, because it will disable zrender\n // incremental render (always render from the __startIndex each frame)\n // chartView.group.markRedraw();\n updateBlend(seriesModel, chartView);\n updateSeriesElementSelection(seriesModel);\n });\n scheduler.unfinished = unfinished || scheduler.unfinished;\n lifecycle.trigger('series:layoutlabels', ecModel, api, updateParams);\n // transition after label is layouted.\n lifecycle.trigger('series:transition', ecModel, api, updateParams);\n ecModel.eachSeries(function (seriesModel) {\n var chartView = ecIns._chartsMap[seriesModel.__viewId];\n // Update Z after labels updated. Before applying states.\n updateZ(seriesModel, chartView);\n // NOTE: Update states after label is updated.\n // label should be in normal status when layouting.\n updateStates(seriesModel, chartView);\n });\n // If use hover layer\n updateHoverLayerStatus(ecIns, ecModel);\n lifecycle.trigger('series:afterupdate', ecModel, api, updateParams);\n };\n markStatusToUpdate = function (ecIns) {\n ecIns[STATUS_NEEDS_UPDATE_KEY] = true;\n // Wake up zrender if it's sleep. Let it update states in the next frame.\n ecIns.getZr().wakeUp();\n };\n applyChangedStates = function (ecIns) {\n if (!ecIns[STATUS_NEEDS_UPDATE_KEY]) {\n return;\n }\n ecIns.getZr().storage.traverse(function (el) {\n // Not applied on removed elements, it may still in fading.\n if (graphic.isElementRemoved(el)) {\n return;\n }\n applyElementStates(el);\n });\n ecIns[STATUS_NEEDS_UPDATE_KEY] = false;\n };\n function applyElementStates(el) {\n var newStates = [];\n var oldStates = el.currentStates;\n // Keep other states.\n for (var i = 0; i < oldStates.length; i++) {\n var stateName = oldStates[i];\n if (!(stateName === 'emphasis' || stateName === 'blur' || stateName === 'select')) {\n newStates.push(stateName);\n }\n }\n // Only use states when it's exists.\n if (el.selected && el.states.select) {\n newStates.push('select');\n }\n if (el.hoverState === HOVER_STATE_EMPHASIS && el.states.emphasis) {\n newStates.push('emphasis');\n } else if (el.hoverState === HOVER_STATE_BLUR && el.states.blur) {\n newStates.push('blur');\n }\n el.useStates(newStates);\n }\n function updateHoverLayerStatus(ecIns, ecModel) {\n var zr = ecIns._zr;\n var storage = zr.storage;\n var elCount = 0;\n storage.traverse(function (el) {\n if (!el.isGroup) {\n elCount++;\n }\n });\n if (elCount > ecModel.get('hoverLayerThreshold') && !env.node && !env.worker) {\n ecModel.eachSeries(function (seriesModel) {\n if (seriesModel.preventUsingHoverLayer) {\n return;\n }\n var chartView = ecIns._chartsMap[seriesModel.__viewId];\n if (chartView.__alive) {\n chartView.eachRendered(function (el) {\n if (el.states.emphasis) {\n el.states.emphasis.hoverLayer = true;\n }\n });\n }\n });\n }\n }\n ;\n /**\n * Update chart and blend.\n */\n function updateBlend(seriesModel, chartView) {\n var blendMode = seriesModel.get('blendMode') || null;\n chartView.eachRendered(function (el) {\n // FIXME marker and other components\n if (!el.isGroup) {\n // DON'T mark the element dirty. In case element is incremental and don't want to rerender.\n el.style.blend = blendMode;\n }\n });\n }\n ;\n function updateZ(model, view) {\n if (model.preventAutoZ) {\n return;\n }\n var z = model.get('z') || 0;\n var zlevel = model.get('zlevel') || 0;\n // Set z and zlevel\n view.eachRendered(function (el) {\n doUpdateZ(el, z, zlevel, -Infinity);\n // Don't traverse the children because it has been traversed in _updateZ.\n return true;\n });\n }\n ;\n function doUpdateZ(el, z, zlevel, maxZ2) {\n // Group may also have textContent\n var label = el.getTextContent();\n var labelLine = el.getTextGuideLine();\n var isGroup = el.isGroup;\n if (isGroup) {\n // set z & zlevel of children elements of Group\n var children = el.childrenRef();\n for (var i = 0; i < children.length; i++) {\n maxZ2 = Math.max(doUpdateZ(children[i], z, zlevel, maxZ2), maxZ2);\n }\n } else {\n // not Group\n el.z = z;\n el.zlevel = zlevel;\n maxZ2 = Math.max(el.z2, maxZ2);\n }\n // always set z and zlevel if label/labelLine exists\n if (label) {\n label.z = z;\n label.zlevel = zlevel;\n // lift z2 of text content\n // TODO if el.emphasis.z2 is spcefied, what about textContent.\n isFinite(maxZ2) && (label.z2 = maxZ2 + 2);\n }\n if (labelLine) {\n var textGuideLineConfig = el.textGuideLineConfig;\n labelLine.z = z;\n labelLine.zlevel = zlevel;\n isFinite(maxZ2) && (labelLine.z2 = maxZ2 + (textGuideLineConfig && textGuideLineConfig.showAbove ? 1 : -1));\n }\n return maxZ2;\n }\n // Clear states without animation.\n // TODO States on component.\n function clearStates(model, view) {\n view.eachRendered(function (el) {\n // Not applied on removed elements, it may still in fading.\n if (graphic.isElementRemoved(el)) {\n return;\n }\n var textContent = el.getTextContent();\n var textGuide = el.getTextGuideLine();\n if (el.stateTransition) {\n el.stateTransition = null;\n }\n if (textContent && textContent.stateTransition) {\n textContent.stateTransition = null;\n }\n if (textGuide && textGuide.stateTransition) {\n textGuide.stateTransition = null;\n }\n // TODO If el is incremental.\n if (el.hasState()) {\n el.prevStates = el.currentStates;\n el.clearStates();\n } else if (el.prevStates) {\n el.prevStates = null;\n }\n });\n }\n function updateStates(model, view) {\n var stateAnimationModel = model.getModel('stateAnimation');\n var enableAnimation = model.isAnimationEnabled();\n var duration = stateAnimationModel.get('duration');\n var stateTransition = duration > 0 ? {\n duration: duration,\n delay: stateAnimationModel.get('delay'),\n easing: stateAnimationModel.get('easing')\n // additive: stateAnimationModel.get('additive')\n } : null;\n view.eachRendered(function (el) {\n if (el.states && el.states.emphasis) {\n // Not applied on removed elements, it may still in fading.\n if (graphic.isElementRemoved(el)) {\n return;\n }\n if (el instanceof graphic.Path) {\n savePathStates(el);\n }\n // Only updated on changed element. In case element is incremental and don't want to rerender.\n // TODO, a more proper way?\n if (el.__dirty) {\n var prevStates = el.prevStates;\n // Restore states without animation\n if (prevStates) {\n el.useStates(prevStates);\n }\n }\n // Update state transition and enable animation again.\n if (enableAnimation) {\n el.stateTransition = stateTransition;\n var textContent = el.getTextContent();\n var textGuide = el.getTextGuideLine();\n // TODO Is it necessary to animate label?\n if (textContent) {\n textContent.stateTransition = stateTransition;\n }\n if (textGuide) {\n textGuide.stateTransition = stateTransition;\n }\n }\n // Use highlighted and selected flag to toggle states.\n if (el.__dirty) {\n applyElementStates(el);\n }\n }\n });\n }\n ;\n createExtensionAPI = function (ecIns) {\n return new ( /** @class */function (_super) {\n __extends(class_1, _super);\n function class_1() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n class_1.prototype.getCoordinateSystems = function () {\n return ecIns._coordSysMgr.getCoordinateSystems();\n };\n class_1.prototype.getComponentByElement = function (el) {\n while (el) {\n var modelInfo = el.__ecComponentInfo;\n if (modelInfo != null) {\n return ecIns._model.getComponent(modelInfo.mainType, modelInfo.index);\n }\n el = el.parent;\n }\n };\n class_1.prototype.enterEmphasis = function (el, highlightDigit) {\n enterEmphasis(el, highlightDigit);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.leaveEmphasis = function (el, highlightDigit) {\n leaveEmphasis(el, highlightDigit);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.enterBlur = function (el) {\n enterBlur(el);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.leaveBlur = function (el) {\n leaveBlur(el);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.enterSelect = function (el) {\n enterSelect(el);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.leaveSelect = function (el) {\n leaveSelect(el);\n markStatusToUpdate(ecIns);\n };\n class_1.prototype.getModel = function () {\n return ecIns.getModel();\n };\n class_1.prototype.getViewOfComponentModel = function (componentModel) {\n return ecIns.getViewOfComponentModel(componentModel);\n };\n class_1.prototype.getViewOfSeriesModel = function (seriesModel) {\n return ecIns.getViewOfSeriesModel(seriesModel);\n };\n return class_1;\n }(ExtensionAPI))(ecIns);\n };\n enableConnect = function (chart) {\n function updateConnectedChartsStatus(charts, status) {\n for (var i = 0; i < charts.length; i++) {\n var otherChart = charts[i];\n otherChart[CONNECT_STATUS_KEY] = status;\n }\n }\n each(eventActionMap, function (actionType, eventType) {\n chart._messageCenter.on(eventType, function (event) {\n if (connectedGroups[chart.group] && chart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_PENDING) {\n if (event && event.escapeConnect) {\n return;\n }\n var action_1 = chart.makeActionFromEvent(event);\n var otherCharts_1 = [];\n each(instances, function (otherChart) {\n if (otherChart !== chart && otherChart.group === chart.group) {\n otherCharts_1.push(otherChart);\n }\n });\n updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_PENDING);\n each(otherCharts_1, function (otherChart) {\n if (otherChart[CONNECT_STATUS_KEY] !== CONNECT_STATUS_UPDATING) {\n otherChart.dispatchAction(action_1);\n }\n });\n updateConnectedChartsStatus(otherCharts_1, CONNECT_STATUS_UPDATED);\n }\n });\n });\n };\n }();\n return ECharts;\n}(Eventful);\nvar echartsProto = ECharts.prototype;\nechartsProto.on = createRegisterEventWithLowercaseECharts('on');\nechartsProto.off = createRegisterEventWithLowercaseECharts('off');\n/**\n * @deprecated\n */\n// @ts-ignore\nechartsProto.one = function (eventName, cb, ctx) {\n var self = this;\n deprecateLog('ECharts#one is deprecated.');\n function wrapped() {\n var args2 = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args2[_i] = arguments[_i];\n }\n cb && cb.apply && cb.apply(this, args2);\n // @ts-ignore\n self.off(eventName, wrapped);\n }\n ;\n // @ts-ignore\n this.on.call(this, eventName, wrapped, ctx);\n};\nvar MOUSE_EVENT_NAMES = ['click', 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'mouseup', 'globalout', 'contextmenu'];\nfunction disposedWarning(id) {\n if (process.env.NODE_ENV !== 'production') {\n warn('Instance ' + id + ' has been disposed');\n }\n}\nvar actions = {};\n/**\n * Map eventType to actionType\n */\nvar eventActionMap = {};\nvar dataProcessorFuncs = [];\nvar optionPreprocessorFuncs = [];\nvar visualFuncs = [];\nvar themeStorage = {};\nvar loadingEffects = {};\nvar instances = {};\nvar connectedGroups = {};\nvar idBase = +new Date() - 0;\nvar groupIdBase = +new Date() - 0;\nvar DOM_ATTRIBUTE_KEY = '_echarts_instance_';\n/**\n * @param opts.devicePixelRatio Use window.devicePixelRatio by default\n * @param opts.renderer Can choose 'canvas' or 'svg' to render the chart.\n * @param opts.width Use clientWidth of the input `dom` by default.\n * Can be 'auto' (the same as null/undefined)\n * @param opts.height Use clientHeight of the input `dom` by default.\n * Can be 'auto' (the same as null/undefined)\n * @param opts.locale Specify the locale.\n * @param opts.useDirtyRect Enable dirty rectangle rendering or not.\n */\nexport function init(dom, theme, opts) {\n var isClient = !(opts && opts.ssr);\n if (isClient) {\n if (process.env.NODE_ENV !== 'production') {\n if (!dom) {\n throw new Error('Initialize failed: invalid dom.');\n }\n }\n var existInstance = getInstanceByDom(dom);\n if (existInstance) {\n if (process.env.NODE_ENV !== 'production') {\n warn('There is a chart instance already initialized on the dom.');\n }\n return existInstance;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (isDom(dom) && dom.nodeName.toUpperCase() !== 'CANVAS' && (!dom.clientWidth && (!opts || opts.width == null) || !dom.clientHeight && (!opts || opts.height == null))) {\n warn('Can\\'t get DOM width or height. Please check ' + 'dom.clientWidth and dom.clientHeight. They should not be 0.' + 'For example, you may need to call this in the callback ' + 'of window.onload.');\n }\n }\n }\n var chart = new ECharts(dom, theme, opts);\n chart.id = 'ec_' + idBase++;\n instances[chart.id] = chart;\n isClient && modelUtil.setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);\n enableConnect(chart);\n lifecycle.trigger('afterinit', chart);\n return chart;\n}\n/**\n * @usage\n * (A)\n * ```js\n * let chart1 = echarts.init(dom1);\n * let chart2 = echarts.init(dom2);\n * chart1.group = 'xxx';\n * chart2.group = 'xxx';\n * echarts.connect('xxx');\n * ```\n * (B)\n * ```js\n * let chart1 = echarts.init(dom1);\n * let chart2 = echarts.init(dom2);\n * echarts.connect('xxx', [chart1, chart2]);\n * ```\n */\nexport function connect(groupId) {\n // Is array of charts\n if (isArray(groupId)) {\n var charts = groupId;\n groupId = null;\n // If any chart has group\n each(charts, function (chart) {\n if (chart.group != null) {\n groupId = chart.group;\n }\n });\n groupId = groupId || 'g_' + groupIdBase++;\n each(charts, function (chart) {\n chart.group = groupId;\n });\n }\n connectedGroups[groupId] = true;\n return groupId;\n}\nexport function disconnect(groupId) {\n connectedGroups[groupId] = false;\n}\n/**\n * Alias and backward compatibility\n * @deprecated\n */\nexport var disConnect = disconnect;\n/**\n * Dispose a chart instance\n */\nexport function dispose(chart) {\n if (isString(chart)) {\n chart = instances[chart];\n } else if (!(chart instanceof ECharts)) {\n // Try to treat as dom\n chart = getInstanceByDom(chart);\n }\n if (chart instanceof ECharts && !chart.isDisposed()) {\n chart.dispose();\n }\n}\nexport function getInstanceByDom(dom) {\n return instances[modelUtil.getAttribute(dom, DOM_ATTRIBUTE_KEY)];\n}\nexport function getInstanceById(key) {\n return instances[key];\n}\n/**\n * Register theme\n */\nexport function registerTheme(name, theme) {\n themeStorage[name] = theme;\n}\n/**\n * Register option preprocessor\n */\nexport function registerPreprocessor(preprocessorFunc) {\n if (indexOf(optionPreprocessorFuncs, preprocessorFunc) < 0) {\n optionPreprocessorFuncs.push(preprocessorFunc);\n }\n}\nexport function registerProcessor(priority, processor) {\n normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_DEFAULT);\n}\n/**\n * Register postIniter\n * @param {Function} postInitFunc\n */\nexport function registerPostInit(postInitFunc) {\n registerUpdateLifecycle('afterinit', postInitFunc);\n}\n/**\n * Register postUpdater\n * @param {Function} postUpdateFunc\n */\nexport function registerPostUpdate(postUpdateFunc) {\n registerUpdateLifecycle('afterupdate', postUpdateFunc);\n}\nexport function registerUpdateLifecycle(name, cb) {\n lifecycle.on(name, cb);\n}\nexport function registerAction(actionInfo, eventName, action) {\n if (isFunction(eventName)) {\n action = eventName;\n eventName = '';\n }\n var actionType = isObject(actionInfo) ? actionInfo.type : [actionInfo, actionInfo = {\n event: eventName\n }][0];\n // Event name is all lowercase\n actionInfo.event = (actionInfo.event || actionType).toLowerCase();\n eventName = actionInfo.event;\n if (eventActionMap[eventName]) {\n // Already registered.\n return;\n }\n // Validate action type and event name.\n assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));\n if (!actions[actionType]) {\n actions[actionType] = {\n action: action,\n actionInfo: actionInfo\n };\n }\n eventActionMap[eventName] = actionType;\n}\nexport function registerCoordinateSystem(type, coordSysCreator) {\n CoordinateSystemManager.register(type, coordSysCreator);\n}\n/**\n * Get dimensions of specified coordinate system.\n * @param {string} type\n * @return {Array.}\n */\nexport function getCoordinateSystemDimensions(type) {\n var coordSysCreator = CoordinateSystemManager.get(type);\n if (coordSysCreator) {\n return coordSysCreator.getDimensionsInfo ? coordSysCreator.getDimensionsInfo() : coordSysCreator.dimensions.slice();\n }\n}\nexport { registerLocale } from './locale.js';\nfunction registerLayout(priority, layoutTask) {\n normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');\n}\nfunction registerVisual(priority, visualTask) {\n normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');\n}\nexport { registerLayout, registerVisual };\nvar registeredTasks = [];\nfunction normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {\n if (isFunction(priority) || isObject(priority)) {\n fn = priority;\n priority = defaultPriority;\n }\n if (process.env.NODE_ENV !== 'production') {\n if (isNaN(priority) || priority == null) {\n throw new Error('Illegal priority');\n }\n // Check duplicate\n each(targetList, function (wrap) {\n assert(wrap.__raw !== fn);\n });\n }\n // Already registered\n if (indexOf(registeredTasks, fn) >= 0) {\n return;\n }\n registeredTasks.push(fn);\n var stageHandler = Scheduler.wrapStageHandler(fn, visualType);\n stageHandler.__prio = priority;\n stageHandler.__raw = fn;\n targetList.push(stageHandler);\n}\nexport function registerLoading(name, loadingFx) {\n loadingEffects[name] = loadingFx;\n}\n/**\n * ZRender need a canvas context to do measureText.\n * But in node environment canvas may be created by node-canvas.\n * So we need to specify how to create a canvas instead of using document.createElement('canvas')\n *\n *\n * @deprecated use setPlatformAPI({ createCanvas }) instead.\n *\n * @example\n * let Canvas = require('canvas');\n * let echarts = require('echarts');\n * echarts.setCanvasCreator(function () {\n * // Small size is enough.\n * return new Canvas(32, 32);\n * });\n */\nexport function setCanvasCreator(creator) {\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('setCanvasCreator is deprecated. Use setPlatformAPI({ createCanvas }) instead.');\n }\n setPlatformAPI({\n createCanvas: creator\n });\n}\n/**\n * The parameters and usage: see `geoSourceManager.registerMap`.\n * Compatible with previous `echarts.registerMap`.\n */\nexport function registerMap(mapName, geoJson, specialAreas) {\n var registerMap = getImpl('registerMap');\n registerMap && registerMap(mapName, geoJson, specialAreas);\n}\nexport function getMap(mapName) {\n var getMap = getImpl('getMap');\n return getMap && getMap(mapName);\n}\nexport var registerTransform = registerExternalTransform;\n/**\n * Globa dispatchAction to a specified chart instance.\n */\n// export function dispatchAction(payload: { chartId: string } & Payload, opt?: Parameters[1]) {\n// if (!payload || !payload.chartId) {\n// // Must have chartId to find chart\n// return;\n// }\n// const chart = instances[payload.chartId];\n// if (chart) {\n// chart.dispatchAction(payload, opt);\n// }\n// }\n// Builtin global visual\nregisterVisual(PRIORITY_VISUAL_GLOBAL, seriesStyleTask);\nregisterVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataStyleTask);\nregisterVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataColorPaletteTask);\nregisterVisual(PRIORITY_VISUAL_GLOBAL, seriesSymbolTask);\nregisterVisual(PRIORITY_VISUAL_CHART_DATA_CUSTOM, dataSymbolTask);\nregisterVisual(PRIORITY_VISUAL_DECAL, decal);\nregisterPreprocessor(backwardCompat);\nregisterProcessor(PRIORITY_PROCESSOR_DATASTACK, dataStack);\nregisterLoading('default', loadingDefault);\n// Default actions\nregisterAction({\n type: HIGHLIGHT_ACTION_TYPE,\n event: HIGHLIGHT_ACTION_TYPE,\n update: HIGHLIGHT_ACTION_TYPE\n}, noop);\nregisterAction({\n type: DOWNPLAY_ACTION_TYPE,\n event: DOWNPLAY_ACTION_TYPE,\n update: DOWNPLAY_ACTION_TYPE\n}, noop);\nregisterAction({\n type: SELECT_ACTION_TYPE,\n event: SELECT_ACTION_TYPE,\n update: SELECT_ACTION_TYPE\n}, noop);\nregisterAction({\n type: UNSELECT_ACTION_TYPE,\n event: UNSELECT_ACTION_TYPE,\n update: UNSELECT_ACTION_TYPE\n}, noop);\nregisterAction({\n type: TOGGLE_SELECT_ACTION_TYPE,\n event: TOGGLE_SELECT_ACTION_TYPE,\n update: TOGGLE_SELECT_ACTION_TYPE\n}, noop);\n// Default theme\nregisterTheme('light', lightTheme);\nregisterTheme('dark', darkTheme);\n// For backward compatibility, where the namespace `dataTool` will\n// be mounted on `echarts` is the extension `dataTool` is imported.\nexport var dataTool = {};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { registerPreprocessor, registerProcessor, registerPostInit, registerPostUpdate, registerAction, registerCoordinateSystem, registerLayout, registerVisual, registerTransform, registerLoading, registerMap, registerUpdateLifecycle, PRIORITY } from './core/echarts.js';\nimport ComponentView from './view/Component.js';\nimport ChartView from './view/Chart.js';\nimport ComponentModel from './model/Component.js';\nimport SeriesModel from './model/Series.js';\nimport { isFunction, indexOf, isArray, each } from 'zrender/lib/core/util.js';\nimport { registerImpl } from './core/impl.js';\nimport { registerPainter } from 'zrender/lib/zrender.js';\nvar extensions = [];\nvar extensionRegisters = {\n registerPreprocessor: registerPreprocessor,\n registerProcessor: registerProcessor,\n registerPostInit: registerPostInit,\n registerPostUpdate: registerPostUpdate,\n registerUpdateLifecycle: registerUpdateLifecycle,\n registerAction: registerAction,\n registerCoordinateSystem: registerCoordinateSystem,\n registerLayout: registerLayout,\n registerVisual: registerVisual,\n registerTransform: registerTransform,\n registerLoading: registerLoading,\n registerMap: registerMap,\n registerImpl: registerImpl,\n PRIORITY: PRIORITY,\n ComponentModel: ComponentModel,\n ComponentView: ComponentView,\n SeriesModel: SeriesModel,\n ChartView: ChartView,\n // TODO Use ComponentModel and SeriesModel instead of Constructor\n registerComponentModel: function (ComponentModelClass) {\n ComponentModel.registerClass(ComponentModelClass);\n },\n registerComponentView: function (ComponentViewClass) {\n ComponentView.registerClass(ComponentViewClass);\n },\n registerSeriesModel: function (SeriesModelClass) {\n SeriesModel.registerClass(SeriesModelClass);\n },\n registerChartView: function (ChartViewClass) {\n ChartView.registerClass(ChartViewClass);\n },\n registerSubTypeDefaulter: function (componentType, defaulter) {\n ComponentModel.registerSubTypeDefaulter(componentType, defaulter);\n },\n registerPainter: function (painterType, PainterCtor) {\n registerPainter(painterType, PainterCtor);\n }\n};\nexport function use(ext) {\n if (isArray(ext)) {\n // use([ChartLine, ChartBar]);\n each(ext, function (singleExt) {\n use(singleExt);\n });\n return;\n }\n if (indexOf(extensions, ext) >= 0) {\n return;\n }\n extensions.push(ext);\n if (isFunction(ext)) {\n ext = {\n install: ext\n };\n }\n ext.install(extensionRegisters);\n}","import { __extends } from \"tslib\";\nimport * as util from '../core/util.js';\nimport { devicePixelRatio } from '../config.js';\nimport Eventful from '../core/Eventful.js';\nimport { getCanvasGradient } from './helper.js';\nimport { createCanvasPattern } from './graphic.js';\nimport BoundingRect from '../core/BoundingRect.js';\nimport { REDRAW_BIT } from '../graphic/constants.js';\nimport { platformApi } from '../core/platform.js';\nfunction createDom(id, painter, dpr) {\n var newDom = platformApi.createCanvas();\n var width = painter.getWidth();\n var height = painter.getHeight();\n var newDomStyle = newDom.style;\n if (newDomStyle) {\n newDomStyle.position = 'absolute';\n newDomStyle.left = '0';\n newDomStyle.top = '0';\n newDomStyle.width = width + 'px';\n newDomStyle.height = height + 'px';\n newDom.setAttribute('data-zr-dom-id', id);\n }\n newDom.width = width * dpr;\n newDom.height = height * dpr;\n return newDom;\n}\n;\nvar Layer = (function (_super) {\n __extends(Layer, _super);\n function Layer(id, painter, dpr) {\n var _this = _super.call(this) || this;\n _this.motionBlur = false;\n _this.lastFrameAlpha = 0.7;\n _this.dpr = 1;\n _this.virtual = false;\n _this.config = {};\n _this.incremental = false;\n _this.zlevel = 0;\n _this.maxRepaintRectCount = 5;\n _this.__dirty = true;\n _this.__firstTimePaint = true;\n _this.__used = false;\n _this.__drawIndex = 0;\n _this.__startIndex = 0;\n _this.__endIndex = 0;\n _this.__prevStartIndex = null;\n _this.__prevEndIndex = null;\n var dom;\n dpr = dpr || devicePixelRatio;\n if (typeof id === 'string') {\n dom = createDom(id, painter, dpr);\n }\n else if (util.isObject(id)) {\n dom = id;\n id = dom.id;\n }\n _this.id = id;\n _this.dom = dom;\n var domStyle = dom.style;\n if (domStyle) {\n util.disableUserSelect(dom);\n dom.onselectstart = function () { return false; };\n domStyle.padding = '0';\n domStyle.margin = '0';\n domStyle.borderWidth = '0';\n }\n _this.painter = painter;\n _this.dpr = dpr;\n return _this;\n }\n Layer.prototype.getElementCount = function () {\n return this.__endIndex - this.__startIndex;\n };\n Layer.prototype.afterBrush = function () {\n this.__prevStartIndex = this.__startIndex;\n this.__prevEndIndex = this.__endIndex;\n };\n Layer.prototype.initContext = function () {\n this.ctx = this.dom.getContext('2d');\n this.ctx.dpr = this.dpr;\n };\n Layer.prototype.setUnpainted = function () {\n this.__firstTimePaint = true;\n };\n Layer.prototype.createBackBuffer = function () {\n var dpr = this.dpr;\n this.domBack = createDom('back-' + this.id, this.painter, dpr);\n this.ctxBack = this.domBack.getContext('2d');\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n };\n Layer.prototype.createRepaintRects = function (displayList, prevList, viewWidth, viewHeight) {\n if (this.__firstTimePaint) {\n this.__firstTimePaint = false;\n return null;\n }\n var mergedRepaintRects = [];\n var maxRepaintRectCount = this.maxRepaintRectCount;\n var full = false;\n var pendingRect = new BoundingRect(0, 0, 0, 0);\n function addRectToMergePool(rect) {\n if (!rect.isFinite() || rect.isZero()) {\n return;\n }\n if (mergedRepaintRects.length === 0) {\n var boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n else {\n var isMerged = false;\n var minDeltaArea = Infinity;\n var bestRectToMergeIdx = 0;\n for (var i = 0; i < mergedRepaintRects.length; ++i) {\n var mergedRect = mergedRepaintRects[i];\n if (mergedRect.intersect(rect)) {\n var pendingRect_1 = new BoundingRect(0, 0, 0, 0);\n pendingRect_1.copy(mergedRect);\n pendingRect_1.union(rect);\n mergedRepaintRects[i] = pendingRect_1;\n isMerged = true;\n break;\n }\n else if (full) {\n pendingRect.copy(rect);\n pendingRect.union(mergedRect);\n var aArea = rect.width * rect.height;\n var bArea = mergedRect.width * mergedRect.height;\n var pendingArea = pendingRect.width * pendingRect.height;\n var deltaArea = pendingArea - aArea - bArea;\n if (deltaArea < minDeltaArea) {\n minDeltaArea = deltaArea;\n bestRectToMergeIdx = i;\n }\n }\n }\n if (full) {\n mergedRepaintRects[bestRectToMergeIdx].union(rect);\n isMerged = true;\n }\n if (!isMerged) {\n var boundingRect = new BoundingRect(0, 0, 0, 0);\n boundingRect.copy(rect);\n mergedRepaintRects.push(boundingRect);\n }\n if (!full) {\n full = mergedRepaintRects.length >= maxRepaintRectCount;\n }\n }\n }\n for (var i = this.__startIndex; i < this.__endIndex; ++i) {\n var el = displayList[i];\n if (el) {\n var shouldPaint = el.shouldBePainted(viewWidth, viewHeight, true, true);\n var prevRect = el.__isRendered && ((el.__dirty & REDRAW_BIT) || !shouldPaint)\n ? el.getPrevPaintRect()\n : null;\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n var curRect = shouldPaint && ((el.__dirty & REDRAW_BIT) || !el.__isRendered)\n ? el.getPaintRect()\n : null;\n if (curRect) {\n addRectToMergePool(curRect);\n }\n }\n }\n for (var i = this.__prevStartIndex; i < this.__prevEndIndex; ++i) {\n var el = prevList[i];\n var shouldPaint = el && el.shouldBePainted(viewWidth, viewHeight, true, true);\n if (el && (!shouldPaint || !el.__zr) && el.__isRendered) {\n var prevRect = el.getPrevPaintRect();\n if (prevRect) {\n addRectToMergePool(prevRect);\n }\n }\n }\n var hasIntersections;\n do {\n hasIntersections = false;\n for (var i = 0; i < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].isZero()) {\n mergedRepaintRects.splice(i, 1);\n continue;\n }\n for (var j = i + 1; j < mergedRepaintRects.length;) {\n if (mergedRepaintRects[i].intersect(mergedRepaintRects[j])) {\n hasIntersections = true;\n mergedRepaintRects[i].union(mergedRepaintRects[j]);\n mergedRepaintRects.splice(j, 1);\n }\n else {\n j++;\n }\n }\n i++;\n }\n } while (hasIntersections);\n this._paintRects = mergedRepaintRects;\n return mergedRepaintRects;\n };\n Layer.prototype.debugGetPaintRects = function () {\n return (this._paintRects || []).slice();\n };\n Layer.prototype.resize = function (width, height) {\n var dpr = this.dpr;\n var dom = this.dom;\n var domStyle = dom.style;\n var domBack = this.domBack;\n if (domStyle) {\n domStyle.width = width + 'px';\n domStyle.height = height + 'px';\n }\n dom.width = width * dpr;\n dom.height = height * dpr;\n if (domBack) {\n domBack.width = width * dpr;\n domBack.height = height * dpr;\n if (dpr !== 1) {\n this.ctxBack.scale(dpr, dpr);\n }\n }\n };\n Layer.prototype.clear = function (clearAll, clearColor, repaintRects) {\n var dom = this.dom;\n var ctx = this.ctx;\n var width = dom.width;\n var height = dom.height;\n clearColor = clearColor || this.clearColor;\n var haveMotionBLur = this.motionBlur && !clearAll;\n var lastFrameAlpha = this.lastFrameAlpha;\n var dpr = this.dpr;\n var self = this;\n if (haveMotionBLur) {\n if (!this.domBack) {\n this.createBackBuffer();\n }\n this.ctxBack.globalCompositeOperation = 'copy';\n this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);\n }\n var domBack = this.domBack;\n function doClear(x, y, width, height) {\n ctx.clearRect(x, y, width, height);\n if (clearColor && clearColor !== 'transparent') {\n var clearColorGradientOrPattern = void 0;\n if (util.isGradientObject(clearColor)) {\n var shouldCache = clearColor.global || (clearColor.__width === width\n && clearColor.__height === height);\n clearColorGradientOrPattern = shouldCache\n && clearColor.__canvasGradient\n || getCanvasGradient(ctx, clearColor, {\n x: 0,\n y: 0,\n width: width,\n height: height\n });\n clearColor.__canvasGradient = clearColorGradientOrPattern;\n clearColor.__width = width;\n clearColor.__height = height;\n }\n else if (util.isImagePatternObject(clearColor)) {\n clearColor.scaleX = clearColor.scaleX || dpr;\n clearColor.scaleY = clearColor.scaleY || dpr;\n clearColorGradientOrPattern = createCanvasPattern(ctx, clearColor, {\n dirty: function () {\n self.setUnpainted();\n self.painter.refresh();\n }\n });\n }\n ctx.save();\n ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n ctx.fillRect(x, y, width, height);\n ctx.restore();\n }\n if (haveMotionBLur) {\n ctx.save();\n ctx.globalAlpha = lastFrameAlpha;\n ctx.drawImage(domBack, x, y, width, height);\n ctx.restore();\n }\n }\n ;\n if (!repaintRects || haveMotionBLur) {\n doClear(0, 0, width, height);\n }\n else if (repaintRects.length) {\n util.each(repaintRects, function (rect) {\n doClear(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr);\n });\n }\n };\n return Layer;\n}(Eventful));\nexport default Layer;\n","import { devicePixelRatio } from '../config.js';\nimport * as util from '../core/util.js';\nimport Layer from './Layer.js';\nimport requestAnimationFrame from '../animation/requestAnimationFrame.js';\nimport env from '../core/env.js';\nimport { brush, brushSingle } from './graphic.js';\nimport { REDRAW_BIT } from '../graphic/constants.js';\nimport { getSize } from './helper.js';\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\nfunction isLayerValid(layer) {\n if (!layer) {\n return false;\n }\n if (layer.__builtin__) {\n return true;\n }\n if (typeof (layer.resize) !== 'function'\n || typeof (layer.refresh) !== 'function') {\n return false;\n }\n return true;\n}\nfunction createRoot(width, height) {\n var domRoot = document.createElement('div');\n domRoot.style.cssText = [\n 'position:relative',\n 'width:' + width + 'px',\n 'height:' + height + 'px',\n 'padding:0',\n 'margin:0',\n 'border-width:0'\n ].join(';') + ';';\n return domRoot;\n}\nvar CanvasPainter = (function () {\n function CanvasPainter(root, storage, opts, id) {\n this.type = 'canvas';\n this._zlevelList = [];\n this._prevDisplayList = [];\n this._layers = {};\n this._layerConfig = {};\n this._needsManuallyCompositing = false;\n this.type = 'canvas';\n var singleCanvas = !root.nodeName\n || root.nodeName.toUpperCase() === 'CANVAS';\n this._opts = opts = util.extend({}, opts || {});\n this.dpr = opts.devicePixelRatio || devicePixelRatio;\n this._singleCanvas = singleCanvas;\n this.root = root;\n var rootStyle = root.style;\n if (rootStyle) {\n util.disableUserSelect(root);\n root.innerHTML = '';\n }\n this.storage = storage;\n var zlevelList = this._zlevelList;\n this._prevDisplayList = [];\n var layers = this._layers;\n if (!singleCanvas) {\n this._width = getSize(root, 0, opts);\n this._height = getSize(root, 1, opts);\n var domRoot = this._domRoot = createRoot(this._width, this._height);\n root.appendChild(domRoot);\n }\n else {\n var rootCanvas = root;\n var width = rootCanvas.width;\n var height = rootCanvas.height;\n if (opts.width != null) {\n width = opts.width;\n }\n if (opts.height != null) {\n height = opts.height;\n }\n this.dpr = opts.devicePixelRatio || 1;\n rootCanvas.width = width * this.dpr;\n rootCanvas.height = height * this.dpr;\n this._width = width;\n this._height = height;\n var mainLayer = new Layer(rootCanvas, this, this.dpr);\n mainLayer.__builtin__ = true;\n mainLayer.initContext();\n layers[CANVAS_ZLEVEL] = mainLayer;\n mainLayer.zlevel = CANVAS_ZLEVEL;\n zlevelList.push(CANVAS_ZLEVEL);\n this._domRoot = root;\n }\n }\n CanvasPainter.prototype.getType = function () {\n return 'canvas';\n };\n CanvasPainter.prototype.isSingleCanvas = function () {\n return this._singleCanvas;\n };\n CanvasPainter.prototype.getViewportRoot = function () {\n return this._domRoot;\n };\n CanvasPainter.prototype.getViewportRootOffset = function () {\n var viewportRoot = this.getViewportRoot();\n if (viewportRoot) {\n return {\n offsetLeft: viewportRoot.offsetLeft || 0,\n offsetTop: viewportRoot.offsetTop || 0\n };\n }\n };\n CanvasPainter.prototype.refresh = function (paintAll) {\n var list = this.storage.getDisplayList(true);\n var prevList = this._prevDisplayList;\n var zlevelList = this._zlevelList;\n this._redrawId = Math.random();\n this._paintList(list, prevList, paintAll, this._redrawId);\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (!layer.__builtin__ && layer.refresh) {\n var clearColor = i === 0 ? this._backgroundColor : null;\n layer.refresh(clearColor);\n }\n }\n if (this._opts.useDirtyRect) {\n this._prevDisplayList = list.slice();\n }\n return this;\n };\n CanvasPainter.prototype.refreshHover = function () {\n this._paintHoverList(this.storage.getDisplayList(false));\n };\n CanvasPainter.prototype._paintHoverList = function (list) {\n var len = list.length;\n var hoverLayer = this._hoverlayer;\n hoverLayer && hoverLayer.clear();\n if (!len) {\n return;\n }\n var scope = {\n inHover: true,\n viewWidth: this._width,\n viewHeight: this._height\n };\n var ctx;\n for (var i = 0; i < len; i++) {\n var el = list[i];\n if (el.__inHover) {\n if (!hoverLayer) {\n hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n }\n if (!ctx) {\n ctx = hoverLayer.ctx;\n ctx.save();\n }\n brush(ctx, el, scope, i === len - 1);\n }\n }\n if (ctx) {\n ctx.restore();\n }\n };\n CanvasPainter.prototype.getHoverLayer = function () {\n return this.getLayer(HOVER_LAYER_ZLEVEL);\n };\n CanvasPainter.prototype.paintOne = function (ctx, el) {\n brushSingle(ctx, el);\n };\n CanvasPainter.prototype._paintList = function (list, prevList, paintAll, redrawId) {\n if (this._redrawId !== redrawId) {\n return;\n }\n paintAll = paintAll || false;\n this._updateLayerStatus(list);\n var _a = this._doPaintList(list, prevList, paintAll), finished = _a.finished, needsRefreshHover = _a.needsRefreshHover;\n if (this._needsManuallyCompositing) {\n this._compositeManually();\n }\n if (needsRefreshHover) {\n this._paintHoverList(list);\n }\n if (!finished) {\n var self_1 = this;\n requestAnimationFrame(function () {\n self_1._paintList(list, prevList, paintAll, redrawId);\n });\n }\n else {\n this.eachLayer(function (layer) {\n layer.afterBrush && layer.afterBrush();\n });\n }\n };\n CanvasPainter.prototype._compositeManually = function () {\n var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n var width = this._domRoot.width;\n var height = this._domRoot.height;\n ctx.clearRect(0, 0, width, height);\n this.eachBuiltinLayer(function (layer) {\n if (layer.virtual) {\n ctx.drawImage(layer.dom, 0, 0, width, height);\n }\n });\n };\n CanvasPainter.prototype._doPaintList = function (list, prevList, paintAll) {\n var _this = this;\n var layerList = [];\n var useDirtyRect = this._opts.useDirtyRect;\n for (var zi = 0; zi < this._zlevelList.length; zi++) {\n var zlevel = this._zlevelList[zi];\n var layer = this._layers[zlevel];\n if (layer.__builtin__\n && layer !== this._hoverlayer\n && (layer.__dirty || paintAll)) {\n layerList.push(layer);\n }\n }\n var finished = true;\n var needsRefreshHover = false;\n var _loop_1 = function (k) {\n var layer = layerList[k];\n var ctx = layer.ctx;\n var repaintRects = useDirtyRect\n && layer.createRepaintRects(list, prevList, this_1._width, this_1._height);\n var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n var useTimer = !paintAll && layer.incremental && Date.now;\n var startTime = useTimer && Date.now();\n var clearColor = layer.zlevel === this_1._zlevelList[0]\n ? this_1._backgroundColor : null;\n if (layer.__startIndex === layer.__endIndex) {\n layer.clear(false, clearColor, repaintRects);\n }\n else if (start === layer.__startIndex) {\n var firstEl = list[start];\n if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n layer.clear(false, clearColor, repaintRects);\n }\n }\n if (start === -1) {\n console.error('For some unknown reason. drawIndex is -1');\n start = layer.__startIndex;\n }\n var i;\n var repaint = function (repaintRect) {\n var scope = {\n inHover: false,\n allClipped: false,\n prevEl: null,\n viewWidth: _this._width,\n viewHeight: _this._height\n };\n for (i = start; i < layer.__endIndex; i++) {\n var el = list[i];\n if (el.__inHover) {\n needsRefreshHover = true;\n }\n _this._doPaintEl(el, layer, useDirtyRect, repaintRect, scope, i === layer.__endIndex - 1);\n if (useTimer) {\n var dTime = Date.now() - startTime;\n if (dTime > 15) {\n break;\n }\n }\n }\n if (scope.prevElClipPaths) {\n ctx.restore();\n }\n };\n if (repaintRects) {\n if (repaintRects.length === 0) {\n i = layer.__endIndex;\n }\n else {\n var dpr = this_1.dpr;\n for (var r = 0; r < repaintRects.length; ++r) {\n var rect = repaintRects[r];\n ctx.save();\n ctx.beginPath();\n ctx.rect(rect.x * dpr, rect.y * dpr, rect.width * dpr, rect.height * dpr);\n ctx.clip();\n repaint(rect);\n ctx.restore();\n }\n }\n }\n else {\n ctx.save();\n repaint();\n ctx.restore();\n }\n layer.__drawIndex = i;\n if (layer.__drawIndex < layer.__endIndex) {\n finished = false;\n }\n };\n var this_1 = this;\n for (var k = 0; k < layerList.length; k++) {\n _loop_1(k);\n }\n if (env.wxa) {\n util.each(this._layers, function (layer) {\n if (layer && layer.ctx && layer.ctx.draw) {\n layer.ctx.draw();\n }\n });\n }\n return {\n finished: finished,\n needsRefreshHover: needsRefreshHover\n };\n };\n CanvasPainter.prototype._doPaintEl = function (el, currentLayer, useDirtyRect, repaintRect, scope, isLast) {\n var ctx = currentLayer.ctx;\n if (useDirtyRect) {\n var paintRect = el.getPaintRect();\n if (!repaintRect || paintRect && paintRect.intersect(repaintRect)) {\n brush(ctx, el, scope, isLast);\n el.setPrevPaintRect(paintRect);\n }\n }\n else {\n brush(ctx, el, scope, isLast);\n }\n };\n CanvasPainter.prototype.getLayer = function (zlevel, virtual) {\n if (this._singleCanvas && !this._needsManuallyCompositing) {\n zlevel = CANVAS_ZLEVEL;\n }\n var layer = this._layers[zlevel];\n if (!layer) {\n layer = new Layer('zr_' + zlevel, this, this.dpr);\n layer.zlevel = zlevel;\n layer.__builtin__ = true;\n if (this._layerConfig[zlevel]) {\n util.merge(layer, this._layerConfig[zlevel], true);\n }\n else if (this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC]) {\n util.merge(layer, this._layerConfig[zlevel - EL_AFTER_INCREMENTAL_INC], true);\n }\n if (virtual) {\n layer.virtual = virtual;\n }\n this.insertLayer(zlevel, layer);\n layer.initContext();\n }\n return layer;\n };\n CanvasPainter.prototype.insertLayer = function (zlevel, layer) {\n var layersMap = this._layers;\n var zlevelList = this._zlevelList;\n var len = zlevelList.length;\n var domRoot = this._domRoot;\n var prevLayer = null;\n var i = -1;\n if (layersMap[zlevel]) {\n if (process.env.NODE_ENV !== 'production') {\n util.logError('ZLevel ' + zlevel + ' has been used already');\n }\n return;\n }\n if (!isLayerValid(layer)) {\n if (process.env.NODE_ENV !== 'production') {\n util.logError('Layer of zlevel ' + zlevel + ' is not valid');\n }\n return;\n }\n if (len > 0 && zlevel > zlevelList[0]) {\n for (i = 0; i < len - 1; i++) {\n if (zlevelList[i] < zlevel\n && zlevelList[i + 1] > zlevel) {\n break;\n }\n }\n prevLayer = layersMap[zlevelList[i]];\n }\n zlevelList.splice(i + 1, 0, zlevel);\n layersMap[zlevel] = layer;\n if (!layer.virtual) {\n if (prevLayer) {\n var prevDom = prevLayer.dom;\n if (prevDom.nextSibling) {\n domRoot.insertBefore(layer.dom, prevDom.nextSibling);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n else {\n if (domRoot.firstChild) {\n domRoot.insertBefore(layer.dom, domRoot.firstChild);\n }\n else {\n domRoot.appendChild(layer.dom);\n }\n }\n }\n layer.painter || (layer.painter = this);\n };\n CanvasPainter.prototype.eachLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n cb.call(context, this._layers[z], z);\n }\n };\n CanvasPainter.prototype.eachBuiltinLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n };\n CanvasPainter.prototype.eachOtherLayer = function (cb, context) {\n var zlevelList = this._zlevelList;\n for (var i = 0; i < zlevelList.length; i++) {\n var z = zlevelList[i];\n var layer = this._layers[z];\n if (!layer.__builtin__) {\n cb.call(context, layer, z);\n }\n }\n };\n CanvasPainter.prototype.getLayers = function () {\n return this._layers;\n };\n CanvasPainter.prototype._updateLayerStatus = function (list) {\n this.eachBuiltinLayer(function (layer, z) {\n layer.__dirty = layer.__used = false;\n });\n function updatePrevLayer(idx) {\n if (prevLayer) {\n if (prevLayer.__endIndex !== idx) {\n prevLayer.__dirty = true;\n }\n prevLayer.__endIndex = idx;\n }\n }\n if (this._singleCanvas) {\n for (var i_1 = 1; i_1 < list.length; i_1++) {\n var el = list[i_1];\n if (el.zlevel !== list[i_1 - 1].zlevel || el.incremental) {\n this._needsManuallyCompositing = true;\n break;\n }\n }\n }\n var prevLayer = null;\n var incrementalLayerCount = 0;\n var prevZlevel;\n var i;\n for (i = 0; i < list.length; i++) {\n var el = list[i];\n var zlevel = el.zlevel;\n var layer = void 0;\n if (prevZlevel !== zlevel) {\n prevZlevel = zlevel;\n incrementalLayerCount = 0;\n }\n if (el.incremental) {\n layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n layer.incremental = true;\n incrementalLayerCount = 1;\n }\n else {\n layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n }\n if (!layer.__builtin__) {\n util.logError('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n }\n if (layer !== prevLayer) {\n layer.__used = true;\n if (layer.__startIndex !== i) {\n layer.__dirty = true;\n }\n layer.__startIndex = i;\n if (!layer.incremental) {\n layer.__drawIndex = i;\n }\n else {\n layer.__drawIndex = -1;\n }\n updatePrevLayer(i);\n prevLayer = layer;\n }\n if ((el.__dirty & REDRAW_BIT) && !el.__inHover) {\n layer.__dirty = true;\n if (layer.incremental && layer.__drawIndex < 0) {\n layer.__drawIndex = i;\n }\n }\n }\n updatePrevLayer(i);\n this.eachBuiltinLayer(function (layer, z) {\n if (!layer.__used && layer.getElementCount() > 0) {\n layer.__dirty = true;\n layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n }\n if (layer.__dirty && layer.__drawIndex < 0) {\n layer.__drawIndex = layer.__startIndex;\n }\n });\n };\n CanvasPainter.prototype.clear = function () {\n this.eachBuiltinLayer(this._clearLayer);\n return this;\n };\n CanvasPainter.prototype._clearLayer = function (layer) {\n layer.clear();\n };\n CanvasPainter.prototype.setBackgroundColor = function (backgroundColor) {\n this._backgroundColor = backgroundColor;\n util.each(this._layers, function (layer) {\n layer.setUnpainted();\n });\n };\n CanvasPainter.prototype.configLayer = function (zlevel, config) {\n if (config) {\n var layerConfig = this._layerConfig;\n if (!layerConfig[zlevel]) {\n layerConfig[zlevel] = config;\n }\n else {\n util.merge(layerConfig[zlevel], config, true);\n }\n for (var i = 0; i < this._zlevelList.length; i++) {\n var _zlevel = this._zlevelList[i];\n if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n var layer = this._layers[_zlevel];\n util.merge(layer, layerConfig[zlevel], true);\n }\n }\n }\n };\n CanvasPainter.prototype.delLayer = function (zlevel) {\n var layers = this._layers;\n var zlevelList = this._zlevelList;\n var layer = layers[zlevel];\n if (!layer) {\n return;\n }\n layer.dom.parentNode.removeChild(layer.dom);\n delete layers[zlevel];\n zlevelList.splice(util.indexOf(zlevelList, zlevel), 1);\n };\n CanvasPainter.prototype.resize = function (width, height) {\n if (!this._domRoot.style) {\n if (width == null || height == null) {\n return;\n }\n this._width = width;\n this._height = height;\n this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n }\n else {\n var domRoot = this._domRoot;\n domRoot.style.display = 'none';\n var opts = this._opts;\n var root = this.root;\n width != null && (opts.width = width);\n height != null && (opts.height = height);\n width = getSize(root, 0, opts);\n height = getSize(root, 1, opts);\n domRoot.style.display = '';\n if (this._width !== width || height !== this._height) {\n domRoot.style.width = width + 'px';\n domRoot.style.height = height + 'px';\n for (var id in this._layers) {\n if (this._layers.hasOwnProperty(id)) {\n this._layers[id].resize(width, height);\n }\n }\n this.refresh(true);\n }\n this._width = width;\n this._height = height;\n }\n return this;\n };\n CanvasPainter.prototype.clearLayer = function (zlevel) {\n var layer = this._layers[zlevel];\n if (layer) {\n layer.clear();\n }\n };\n CanvasPainter.prototype.dispose = function () {\n this.root.innerHTML = '';\n this.root =\n this.storage =\n this._domRoot =\n this._layers = null;\n };\n CanvasPainter.prototype.getRenderedCanvas = function (opts) {\n opts = opts || {};\n if (this._singleCanvas && !this._compositeManually) {\n return this._layers[CANVAS_ZLEVEL].dom;\n }\n var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n imageLayer.initContext();\n imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n var ctx = imageLayer.ctx;\n if (opts.pixelRatio <= this.dpr) {\n this.refresh();\n var width_1 = imageLayer.dom.width;\n var height_1 = imageLayer.dom.height;\n this.eachLayer(function (layer) {\n if (layer.__builtin__) {\n ctx.drawImage(layer.dom, 0, 0, width_1, height_1);\n }\n else if (layer.renderToCanvas) {\n ctx.save();\n layer.renderToCanvas(ctx);\n ctx.restore();\n }\n });\n }\n else {\n var scope = {\n inHover: false,\n viewWidth: this._width,\n viewHeight: this._height\n };\n var displayList = this.storage.getDisplayList(true);\n for (var i = 0, len = displayList.length; i < len; i++) {\n var el = displayList[i];\n brush(ctx, el, scope, i === len - 1);\n }\n }\n return imageLayer.dom;\n };\n CanvasPainter.prototype.getWidth = function () {\n return this._width;\n };\n CanvasPainter.prototype.getHeight = function () {\n return this._height;\n };\n return CanvasPainter;\n}());\nexport default CanvasPainter;\n;\n","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport CanvasPainter from 'zrender/lib/canvas/Painter.js';\nexport function install(registers) {\n registers.registerPainter('canvas', CanvasPainter);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nfunction dataIndexMapValueLength(valNumOrArrLengthMoreThan2) {\n return valNumOrArrLengthMoreThan2 == null ? 0 : valNumOrArrLengthMoreThan2.length || 1;\n}\nfunction defaultKeyGetter(item) {\n return item;\n}\nvar DataDiffer = /** @class */function () {\n /**\n * @param context Can be visited by this.context in callback.\n */\n function DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context,\n // By default: 'oneToOne'.\n diffMode) {\n this._old = oldArr;\n this._new = newArr;\n this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;\n this._newKeyGetter = newKeyGetter || defaultKeyGetter;\n // Visible in callback via `this.context`;\n this.context = context;\n this._diffModeMultiple = diffMode === 'multiple';\n }\n /**\n * Callback function when add a data\n */\n DataDiffer.prototype.add = function (func) {\n this._add = func;\n return this;\n };\n /**\n * Callback function when update a data\n */\n DataDiffer.prototype.update = function (func) {\n this._update = func;\n return this;\n };\n /**\n * Callback function when update a data and only work in `cbMode: 'byKey'`.\n */\n DataDiffer.prototype.updateManyToOne = function (func) {\n this._updateManyToOne = func;\n return this;\n };\n /**\n * Callback function when update a data and only work in `cbMode: 'byKey'`.\n */\n DataDiffer.prototype.updateOneToMany = function (func) {\n this._updateOneToMany = func;\n return this;\n };\n /**\n * Callback function when update a data and only work in `cbMode: 'byKey'`.\n */\n DataDiffer.prototype.updateManyToMany = function (func) {\n this._updateManyToMany = func;\n return this;\n };\n /**\n * Callback function when remove a data\n */\n DataDiffer.prototype.remove = function (func) {\n this._remove = func;\n return this;\n };\n DataDiffer.prototype.execute = function () {\n this[this._diffModeMultiple ? '_executeMultiple' : '_executeOneToOne']();\n };\n DataDiffer.prototype._executeOneToOne = function () {\n var oldArr = this._old;\n var newArr = this._new;\n var newDataIndexMap = {};\n var oldDataKeyArr = new Array(oldArr.length);\n var newDataKeyArr = new Array(newArr.length);\n this._initIndexMap(oldArr, null, oldDataKeyArr, '_oldKeyGetter');\n this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter');\n for (var i = 0; i < oldArr.length; i++) {\n var oldKey = oldDataKeyArr[i];\n var newIdxMapVal = newDataIndexMap[oldKey];\n var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal);\n // idx can never be empty array here. see 'set null' logic below.\n if (newIdxMapValLen > 1) {\n // Consider there is duplicate key (for example, use dataItem.name as key).\n // We should make sure every item in newArr and oldArr can be visited.\n var newIdx = newIdxMapVal.shift();\n if (newIdxMapVal.length === 1) {\n newDataIndexMap[oldKey] = newIdxMapVal[0];\n }\n this._update && this._update(newIdx, i);\n } else if (newIdxMapValLen === 1) {\n newDataIndexMap[oldKey] = null;\n this._update && this._update(newIdxMapVal, i);\n } else {\n this._remove && this._remove(i);\n }\n }\n this._performRestAdd(newDataKeyArr, newDataIndexMap);\n };\n /**\n * For example, consider the case:\n * oldData: [o0, o1, o2, o3, o4, o5, o6, o7],\n * newData: [n0, n1, n2, n3, n4, n5, n6, n7, n8],\n * Where:\n * o0, o1, n0 has key 'a' (many to one)\n * o5, n4, n5, n6 has key 'b' (one to many)\n * o2, n1 has key 'c' (one to one)\n * n2, n3 has key 'd' (add)\n * o3, o4 has key 'e' (remove)\n * o6, o7, n7, n8 has key 'f' (many to many, treated as add and remove)\n * Then:\n * (The order of the following directives are not ensured.)\n * this._updateManyToOne(n0, [o0, o1]);\n * this._updateOneToMany([n4, n5, n6], o5);\n * this._update(n1, o2);\n * this._remove(o3);\n * this._remove(o4);\n * this._remove(o6);\n * this._remove(o7);\n * this._add(n2);\n * this._add(n3);\n * this._add(n7);\n * this._add(n8);\n */\n DataDiffer.prototype._executeMultiple = function () {\n var oldArr = this._old;\n var newArr = this._new;\n var oldDataIndexMap = {};\n var newDataIndexMap = {};\n var oldDataKeyArr = [];\n var newDataKeyArr = [];\n this._initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter');\n this._initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter');\n for (var i = 0; i < oldDataKeyArr.length; i++) {\n var oldKey = oldDataKeyArr[i];\n var oldIdxMapVal = oldDataIndexMap[oldKey];\n var newIdxMapVal = newDataIndexMap[oldKey];\n var oldIdxMapValLen = dataIndexMapValueLength(oldIdxMapVal);\n var newIdxMapValLen = dataIndexMapValueLength(newIdxMapVal);\n if (oldIdxMapValLen > 1 && newIdxMapValLen === 1) {\n this._updateManyToOne && this._updateManyToOne(newIdxMapVal, oldIdxMapVal);\n newDataIndexMap[oldKey] = null;\n } else if (oldIdxMapValLen === 1 && newIdxMapValLen > 1) {\n this._updateOneToMany && this._updateOneToMany(newIdxMapVal, oldIdxMapVal);\n newDataIndexMap[oldKey] = null;\n } else if (oldIdxMapValLen === 1 && newIdxMapValLen === 1) {\n this._update && this._update(newIdxMapVal, oldIdxMapVal);\n newDataIndexMap[oldKey] = null;\n } else if (oldIdxMapValLen > 1 && newIdxMapValLen > 1) {\n this._updateManyToMany && this._updateManyToMany(newIdxMapVal, oldIdxMapVal);\n newDataIndexMap[oldKey] = null;\n } else if (oldIdxMapValLen > 1) {\n for (var i_1 = 0; i_1 < oldIdxMapValLen; i_1++) {\n this._remove && this._remove(oldIdxMapVal[i_1]);\n }\n } else {\n this._remove && this._remove(oldIdxMapVal);\n }\n }\n this._performRestAdd(newDataKeyArr, newDataIndexMap);\n };\n DataDiffer.prototype._performRestAdd = function (newDataKeyArr, newDataIndexMap) {\n for (var i = 0; i < newDataKeyArr.length; i++) {\n var newKey = newDataKeyArr[i];\n var newIdxMapVal = newDataIndexMap[newKey];\n var idxMapValLen = dataIndexMapValueLength(newIdxMapVal);\n if (idxMapValLen > 1) {\n for (var j = 0; j < idxMapValLen; j++) {\n this._add && this._add(newIdxMapVal[j]);\n }\n } else if (idxMapValLen === 1) {\n this._add && this._add(newIdxMapVal);\n }\n // Support both `newDataKeyArr` are duplication removed or not removed.\n newDataIndexMap[newKey] = null;\n }\n };\n DataDiffer.prototype._initIndexMap = function (arr,\n // Can be null.\n map,\n // In 'byKey', the output `keyArr` is duplication removed.\n // In 'byIndex', the output `keyArr` is not duplication removed and\n // its indices are accurately corresponding to `arr`.\n keyArr, keyGetterName) {\n var cbModeMultiple = this._diffModeMultiple;\n for (var i = 0; i < arr.length; i++) {\n // Add prefix to avoid conflict with Object.prototype.\n var key = '_ec_' + this[keyGetterName](arr[i], i);\n if (!cbModeMultiple) {\n keyArr[i] = key;\n }\n if (!map) {\n continue;\n }\n var idxMapVal = map[key];\n var idxMapValLen = dataIndexMapValueLength(idxMapVal);\n if (idxMapValLen === 0) {\n // Simple optimize: in most cases, one index has one key,\n // do not need array.\n map[key] = i;\n if (cbModeMultiple) {\n keyArr.push(key);\n }\n } else if (idxMapValLen === 1) {\n map[key] = [idxMapVal, i];\n } else {\n idxMapVal.push(i);\n }\n }\n };\n return DataDiffer;\n}();\nexport default DataDiffer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, createHashMap, assert, map } from 'zrender/lib/core/util.js';\nimport { VISUAL_DIMENSIONS } from '../../util/types.js';\nvar DimensionUserOuput = /** @class */function () {\n function DimensionUserOuput(encode, dimRequest) {\n this._encode = encode;\n this._schema = dimRequest;\n }\n DimensionUserOuput.prototype.get = function () {\n return {\n // Do not generate full dimension name until fist used.\n fullDimensions: this._getFullDimensionNames(),\n encode: this._encode\n };\n };\n /**\n * Get all data store dimension names.\n * Theoretically a series data store is defined both by series and used dataset (if any).\n * If some dimensions are omitted for performance reason in `this.dimensions`,\n * the dimension name may not be auto-generated if user does not specify a dimension name.\n * In this case, the dimension name is `null`/`undefined`.\n */\n DimensionUserOuput.prototype._getFullDimensionNames = function () {\n if (!this._cachedDimNames) {\n this._cachedDimNames = this._schema ? this._schema.makeOutputDimensionNames() : [];\n }\n return this._cachedDimNames;\n };\n return DimensionUserOuput;\n}();\n;\nexport function summarizeDimensions(data, schema) {\n var summary = {};\n var encode = summary.encode = {};\n var notExtraCoordDimMap = createHashMap();\n var defaultedLabel = [];\n var defaultedTooltip = [];\n var userOutputEncode = {};\n each(data.dimensions, function (dimName) {\n var dimItem = data.getDimensionInfo(dimName);\n var coordDim = dimItem.coordDim;\n if (coordDim) {\n if (process.env.NODE_ENV !== 'production') {\n assert(VISUAL_DIMENSIONS.get(coordDim) == null);\n }\n var coordDimIndex = dimItem.coordDimIndex;\n getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;\n if (!dimItem.isExtraCoord) {\n notExtraCoordDimMap.set(coordDim, 1);\n // Use the last coord dim (and label friendly) as default label,\n // because when dataset is used, it is hard to guess which dimension\n // can be value dimension. If both show x, y on label is not look good,\n // and conventionally y axis is focused more.\n if (mayLabelDimType(dimItem.type)) {\n defaultedLabel[0] = dimName;\n }\n // User output encode do not contain generated coords.\n // And it only has index. User can use index to retrieve value from the raw item array.\n getOrCreateEncodeArr(userOutputEncode, coordDim)[coordDimIndex] = data.getDimensionIndex(dimItem.name);\n }\n if (dimItem.defaultTooltip) {\n defaultedTooltip.push(dimName);\n }\n }\n VISUAL_DIMENSIONS.each(function (v, otherDim) {\n var encodeArr = getOrCreateEncodeArr(encode, otherDim);\n var dimIndex = dimItem.otherDims[otherDim];\n if (dimIndex != null && dimIndex !== false) {\n encodeArr[dimIndex] = dimItem.name;\n }\n });\n });\n var dataDimsOnCoord = [];\n var encodeFirstDimNotExtra = {};\n notExtraCoordDimMap.each(function (v, coordDim) {\n var dimArr = encode[coordDim];\n encodeFirstDimNotExtra[coordDim] = dimArr[0];\n // Not necessary to remove duplicate, because a data\n // dim canot on more than one coordDim.\n dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);\n });\n summary.dataDimsOnCoord = dataDimsOnCoord;\n summary.dataDimIndicesOnCoord = map(dataDimsOnCoord, function (dimName) {\n return data.getDimensionInfo(dimName).storeDimIndex;\n });\n summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;\n var encodeLabel = encode.label;\n // FIXME `encode.label` is not recommended, because formatter cannot be set\n // in this way. Use label.formatter instead. Maybe remove this approach someday.\n if (encodeLabel && encodeLabel.length) {\n defaultedLabel = encodeLabel.slice();\n }\n var encodeTooltip = encode.tooltip;\n if (encodeTooltip && encodeTooltip.length) {\n defaultedTooltip = encodeTooltip.slice();\n } else if (!defaultedTooltip.length) {\n defaultedTooltip = defaultedLabel.slice();\n }\n encode.defaultedLabel = defaultedLabel;\n encode.defaultedTooltip = defaultedTooltip;\n summary.userOutput = new DimensionUserOuput(userOutputEncode, schema);\n return summary;\n}\nfunction getOrCreateEncodeArr(encode, dim) {\n if (!encode.hasOwnProperty(dim)) {\n encode[dim] = [];\n }\n return encode[dim];\n}\n// FIXME:TS should be type `AxisType`\nexport function getDimensionTypeByAxis(axisType) {\n return axisType === 'category' ? 'ordinal' : axisType === 'time' ? 'time' : 'float';\n}\nfunction mayLabelDimType(dimType) {\n // In most cases, ordinal and time do not suitable for label.\n // Ordinal info can be displayed on axis. Time is too long.\n return !(dimType === 'ordinal' || dimType === 'time');\n}\n// function findTheLastDimMayLabel(data) {\n// // Get last value dim\n// let dimensions = data.dimensions.slice();\n// let valueType;\n// let valueDim;\n// while (dimensions.length && (\n// valueDim = dimensions.pop(),\n// valueType = data.getDimensionInfo(valueDim).type,\n// valueType === 'ordinal' || valueType === 'time'\n// )) {} // jshint ignore:line\n// return valueDim;\n// }","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar SeriesDimensionDefine = /** @class */function () {\n /**\n * @param opt All of the fields will be shallow copied.\n */\n function SeriesDimensionDefine(opt) {\n /**\n * The format of `otherDims` is:\n * ```js\n * {\n * tooltip?: number\n * label?: number\n * itemName?: number\n * seriesName?: number\n * }\n * ```\n *\n * A `series.encode` can specified these fields:\n * ```js\n * encode: {\n * // \"3, 1, 5\" is the index of data dimension.\n * tooltip: [3, 1, 5],\n * label: [0, 3],\n * ...\n * }\n * ```\n * `otherDims` is the parse result of the `series.encode` above, like:\n * ```js\n * // Suppose the index of this data dimension is `3`.\n * this.otherDims = {\n * // `3` is at the index `0` of the `encode.tooltip`\n * tooltip: 0,\n * // `3` is at the index `1` of the `encode.label`\n * label: 1\n * };\n * ```\n *\n * This prop should never be `null`/`undefined` after initialized.\n */\n this.otherDims = {};\n if (opt != null) {\n zrUtil.extend(this, opt);\n }\n }\n return SeriesDimensionDefine;\n}();\n;\nexport default SeriesDimensionDefine;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, isObject, retrieve2 } from 'zrender/lib/core/util.js';\nimport { makeInner } from '../../util/model.js';\nimport { shouldRetrieveDataByName } from '../Source.js';\nvar inner = makeInner();\nvar dimTypeShort = {\n float: 'f',\n int: 'i',\n ordinal: 'o',\n number: 'n',\n time: 't'\n};\n/**\n * Represents the dimension requirement of a series.\n *\n * NOTICE:\n * When there are too many dimensions in dataset and many series, only the used dimensions\n * (i.e., used by coord sys and declared in `series.encode`) are add to `dimensionDefineList`.\n * But users may query data by other unused dimension names.\n * In this case, users can only query data if and only if they have defined dimension names\n * via ec option, so we provide `getDimensionIndexFromSource`, which only query them from\n * `source` dimensions.\n */\nvar SeriesDataSchema = /** @class */function () {\n function SeriesDataSchema(opt) {\n this.dimensions = opt.dimensions;\n this._dimOmitted = opt.dimensionOmitted;\n this.source = opt.source;\n this._fullDimCount = opt.fullDimensionCount;\n this._updateDimOmitted(opt.dimensionOmitted);\n }\n SeriesDataSchema.prototype.isDimensionOmitted = function () {\n return this._dimOmitted;\n };\n SeriesDataSchema.prototype._updateDimOmitted = function (dimensionOmitted) {\n this._dimOmitted = dimensionOmitted;\n if (!dimensionOmitted) {\n return;\n }\n if (!this._dimNameMap) {\n this._dimNameMap = ensureSourceDimNameMap(this.source);\n }\n };\n /**\n * @caution Can only be used when `dimensionOmitted: true`.\n *\n * Get index by user defined dimension name (i.e., not internal generate name).\n * That is, get index from `dimensionsDefine`.\n * If no `dimensionsDefine`, or no name get, return -1.\n */\n SeriesDataSchema.prototype.getSourceDimensionIndex = function (dimName) {\n return retrieve2(this._dimNameMap.get(dimName), -1);\n };\n /**\n * @caution Can only be used when `dimensionOmitted: true`.\n *\n * Notice: may return `null`/`undefined` if user not specify dimension names.\n */\n SeriesDataSchema.prototype.getSourceDimension = function (dimIndex) {\n var dimensionsDefine = this.source.dimensionsDefine;\n if (dimensionsDefine) {\n return dimensionsDefine[dimIndex];\n }\n };\n SeriesDataSchema.prototype.makeStoreSchema = function () {\n var dimCount = this._fullDimCount;\n var willRetrieveDataByName = shouldRetrieveDataByName(this.source);\n var makeHashStrict = !shouldOmitUnusedDimensions(dimCount);\n // If source don't have dimensions or series don't omit unsed dimensions.\n // Generate from seriesDimList directly\n var dimHash = '';\n var dims = [];\n for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < dimCount; fullDimIdx++) {\n var property = void 0;\n var type = void 0;\n var ordinalMeta = void 0;\n var seriesDimDef = this.dimensions[seriesDimIdx];\n // The list has been sorted by `storeDimIndex` asc.\n if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) {\n property = willRetrieveDataByName ? seriesDimDef.name : null;\n type = seriesDimDef.type;\n ordinalMeta = seriesDimDef.ordinalMeta;\n seriesDimIdx++;\n } else {\n var sourceDimDef = this.getSourceDimension(fullDimIdx);\n if (sourceDimDef) {\n property = willRetrieveDataByName ? sourceDimDef.name : null;\n type = sourceDimDef.type;\n }\n }\n dims.push({\n property: property,\n type: type,\n ordinalMeta: ordinalMeta\n });\n // If retrieving data by index,\n // use to determine whether data can be shared.\n // (Because in this case there might be no dimension name defined in dataset, but indices always exists).\n // (Indices are always 0, 1, 2, ..., so we can ignore them to shorten the hash).\n // Otherwise if retrieving data by property name (like `data: [{aa: 123, bb: 765}, ...]`),\n // use in hash.\n if (willRetrieveDataByName && property != null\n // For data stack, we have make sure each series has its own dim on this store.\n // So we do not add property to hash to make sure they can share this store.\n && (!seriesDimDef || !seriesDimDef.isCalculationCoord)) {\n dimHash += makeHashStrict\n // Use escape character '`' in case that property name contains '$'.\n ? property.replace(/\\`/g, '`1').replace(/\\$/g, '`2')\n // For better performance, when there are large dimensions, tolerant this defects that hardly meet.\n : property;\n }\n dimHash += '$';\n dimHash += dimTypeShort[type] || 'f';\n if (ordinalMeta) {\n dimHash += ordinalMeta.uid;\n }\n dimHash += '$';\n }\n // Source from endpoint(usually series) will be read differently\n // when seriesLayoutBy or startIndex(which is affected by sourceHeader) are different.\n // So we use this three props as key.\n var source = this.source;\n var hash = [source.seriesLayoutBy, source.startIndex, dimHash].join('$$');\n return {\n dimensions: dims,\n hash: hash\n };\n };\n SeriesDataSchema.prototype.makeOutputDimensionNames = function () {\n var result = [];\n for (var fullDimIdx = 0, seriesDimIdx = 0; fullDimIdx < this._fullDimCount; fullDimIdx++) {\n var name_1 = void 0;\n var seriesDimDef = this.dimensions[seriesDimIdx];\n // The list has been sorted by `storeDimIndex` asc.\n if (seriesDimDef && seriesDimDef.storeDimIndex === fullDimIdx) {\n if (!seriesDimDef.isCalculationCoord) {\n name_1 = seriesDimDef.name;\n }\n seriesDimIdx++;\n } else {\n var sourceDimDef = this.getSourceDimension(fullDimIdx);\n if (sourceDimDef) {\n name_1 = sourceDimDef.name;\n }\n }\n result.push(name_1);\n }\n return result;\n };\n SeriesDataSchema.prototype.appendCalculationDimension = function (dimDef) {\n this.dimensions.push(dimDef);\n dimDef.isCalculationCoord = true;\n this._fullDimCount++;\n // If append dimension on a data store, consider the store\n // might be shared by different series, series dimensions not\n // really map to store dimensions.\n this._updateDimOmitted(true);\n };\n return SeriesDataSchema;\n}();\nexport { SeriesDataSchema };\nexport function isSeriesDataSchema(schema) {\n return schema instanceof SeriesDataSchema;\n}\nexport function createDimNameMap(dimsDef) {\n var dataDimNameMap = createHashMap();\n for (var i = 0; i < (dimsDef || []).length; i++) {\n var dimDefItemRaw = dimsDef[i];\n var userDimName = isObject(dimDefItemRaw) ? dimDefItemRaw.name : dimDefItemRaw;\n if (userDimName != null && dataDimNameMap.get(userDimName) == null) {\n dataDimNameMap.set(userDimName, i);\n }\n }\n return dataDimNameMap;\n}\nexport function ensureSourceDimNameMap(source) {\n var innerSource = inner(source);\n return innerSource.dimNameMap || (innerSource.dimNameMap = createDimNameMap(source.dimensionsDefine));\n}\nexport function shouldOmitUnusedDimensions(dimCount) {\n return dimCount > 30;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/* global Int32Array */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Model from '../model/Model.js';\nimport DataDiffer from './DataDiffer.js';\nimport { DefaultDataProvider } from './helper/dataProvider.js';\nimport { summarizeDimensions } from './helper/dimensionHelper.js';\nimport SeriesDimensionDefine from './SeriesDimensionDefine.js';\nimport { SOURCE_FORMAT_TYPED_ARRAY, SOURCE_FORMAT_ORIGINAL } from '../util/types.js';\nimport { convertOptionIdName, isDataItemOption } from '../util/model.js';\nimport { setCommonECData } from '../util/innerStore.js';\nimport { isSourceInstance } from './Source.js';\nimport DataStore from './DataStore.js';\nimport { isSeriesDataSchema } from './helper/SeriesDataSchema.js';\nvar isObject = zrUtil.isObject;\nvar map = zrUtil.map;\nvar CtorInt32Array = typeof Int32Array === 'undefined' ? Array : Int32Array;\n// Use prefix to avoid index to be the same as otherIdList[idx],\n// which will cause weird update animation.\nvar ID_PREFIX = 'e\\0\\0';\nvar INDEX_NOT_FOUND = -1;\n// type SeriesDimensionIndex = DimensionIndex;\nvar TRANSFERABLE_PROPERTIES = ['hasItemOption', '_nameList', '_idList', '_invertedIndicesMap', '_dimSummary', 'userOutput', '_rawData', '_dimValueGetter', '_nameDimIdx', '_idDimIdx', '_nameRepeatCount'];\nvar CLONE_PROPERTIES = ['_approximateExtent'];\n// -----------------------------\n// Internal method declarations:\n// -----------------------------\nvar prepareInvertedIndex;\nvar getId;\nvar getIdNameFromStore;\nvar normalizeDimensions;\nvar transferProperties;\nvar cloneListForMapAndSample;\nvar makeIdFromName;\nvar SeriesData = /** @class */function () {\n /**\n * @param dimensionsInput.dimensions\n * For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].\n * Dimensions should be concrete names like x, y, z, lng, lat, angle, radius\n */\n function SeriesData(dimensionsInput, hostModel) {\n this.type = 'list';\n this._dimOmitted = false;\n this._nameList = [];\n this._idList = [];\n // Models of data option is stored sparse for optimizing memory cost\n // Never used yet (not used yet).\n // private _optionModels: Model[] = [];\n // Global visual properties after visual coding\n this._visual = {};\n // Global layout properties.\n this._layout = {};\n // Item visual properties after visual coding\n this._itemVisuals = [];\n // Item layout properties after layout\n this._itemLayouts = [];\n // Graphic elements\n this._graphicEls = [];\n // key: dim, value: extent\n this._approximateExtent = {};\n this._calculationInfo = {};\n // Having detected that there is data item is non primitive type\n // (in type `OptionDataItemObject`).\n // Like `data: [ { value: xx, itemStyle: {...} }, ...]`\n // At present it only happen in `SOURCE_FORMAT_ORIGINAL`.\n this.hasItemOption = false;\n // Methods that create a new list based on this list should be listed here.\n // Notice that those method should `RETURN` the new list.\n this.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'lttbDownSample', 'map'];\n // Methods that change indices of this list should be listed here.\n this.CHANGABLE_METHODS = ['filterSelf', 'selectRange'];\n this.DOWNSAMPLE_METHODS = ['downSample', 'lttbDownSample'];\n var dimensions;\n var assignStoreDimIdx = false;\n if (isSeriesDataSchema(dimensionsInput)) {\n dimensions = dimensionsInput.dimensions;\n this._dimOmitted = dimensionsInput.isDimensionOmitted();\n this._schema = dimensionsInput;\n } else {\n assignStoreDimIdx = true;\n dimensions = dimensionsInput;\n }\n dimensions = dimensions || ['x', 'y'];\n var dimensionInfos = {};\n var dimensionNames = [];\n var invertedIndicesMap = {};\n var needsHasOwn = false;\n var emptyObj = {};\n for (var i = 0; i < dimensions.length; i++) {\n // Use the original dimensions[i], where other flag props may exists.\n var dimInfoInput = dimensions[i];\n var dimensionInfo = zrUtil.isString(dimInfoInput) ? new SeriesDimensionDefine({\n name: dimInfoInput\n }) : !(dimInfoInput instanceof SeriesDimensionDefine) ? new SeriesDimensionDefine(dimInfoInput) : dimInfoInput;\n var dimensionName = dimensionInfo.name;\n dimensionInfo.type = dimensionInfo.type || 'float';\n if (!dimensionInfo.coordDim) {\n dimensionInfo.coordDim = dimensionName;\n dimensionInfo.coordDimIndex = 0;\n }\n var otherDims = dimensionInfo.otherDims = dimensionInfo.otherDims || {};\n dimensionNames.push(dimensionName);\n dimensionInfos[dimensionName] = dimensionInfo;\n if (emptyObj[dimensionName] != null) {\n needsHasOwn = true;\n }\n if (dimensionInfo.createInvertedIndices) {\n invertedIndicesMap[dimensionName] = [];\n }\n if (otherDims.itemName === 0) {\n this._nameDimIdx = i;\n }\n if (otherDims.itemId === 0) {\n this._idDimIdx = i;\n }\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.assert(assignStoreDimIdx || dimensionInfo.storeDimIndex >= 0);\n }\n if (assignStoreDimIdx) {\n dimensionInfo.storeDimIndex = i;\n }\n }\n this.dimensions = dimensionNames;\n this._dimInfos = dimensionInfos;\n this._initGetDimensionInfo(needsHasOwn);\n this.hostModel = hostModel;\n this._invertedIndicesMap = invertedIndicesMap;\n if (this._dimOmitted) {\n var dimIdxToName_1 = this._dimIdxToName = zrUtil.createHashMap();\n zrUtil.each(dimensionNames, function (dimName) {\n dimIdxToName_1.set(dimensionInfos[dimName].storeDimIndex, dimName);\n });\n }\n }\n /**\n *\n * Get concrete dimension name by dimension name or dimension index.\n * If input a dimension name, do not validate whether the dimension name exits.\n *\n * @caution\n * @param dim Must make sure the dimension is `SeriesDimensionLoose`.\n * Because only those dimensions will have auto-generated dimension names if not\n * have a user-specified name, and other dimensions will get a return of null/undefined.\n *\n * @notice Because of this reason, should better use `getDimensionIndex` instead, for examples:\n * ```js\n * const val = data.getStore().get(data.getDimensionIndex(dim), dataIdx);\n * ```\n *\n * @return Concrete dim name.\n */\n SeriesData.prototype.getDimension = function (dim) {\n var dimIdx = this._recognizeDimIndex(dim);\n if (dimIdx == null) {\n return dim;\n }\n dimIdx = dim;\n if (!this._dimOmitted) {\n return this.dimensions[dimIdx];\n }\n // Retrieve from series dimension definition because it probably contains\n // generated dimension name (like 'x', 'y').\n var dimName = this._dimIdxToName.get(dimIdx);\n if (dimName != null) {\n return dimName;\n }\n var sourceDimDef = this._schema.getSourceDimension(dimIdx);\n if (sourceDimDef) {\n return sourceDimDef.name;\n }\n };\n /**\n * Get dimension index in data store. Return -1 if not found.\n * Can be used to index value from getRawValue.\n */\n SeriesData.prototype.getDimensionIndex = function (dim) {\n var dimIdx = this._recognizeDimIndex(dim);\n if (dimIdx != null) {\n return dimIdx;\n }\n if (dim == null) {\n return -1;\n }\n var dimInfo = this._getDimInfo(dim);\n return dimInfo ? dimInfo.storeDimIndex : this._dimOmitted ? this._schema.getSourceDimensionIndex(dim) : -1;\n };\n /**\n * The meanings of the input parameter `dim`:\n *\n * + If dim is a number (e.g., `1`), it means the index of the dimension.\n * For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'.\n * + If dim is a number-like string (e.g., `\"1\"`):\n * + If there is the same concrete dim name defined in `series.dimensions` or `dataset.dimensions`,\n * it means that concrete name.\n * + If not, it will be converted to a number, which means the index of the dimension.\n * (why? because of the backward compatibility. We have been tolerating number-like string in\n * dimension setting, although now it seems that it is not a good idea.)\n * For example, `visualMap[i].dimension: \"1\"` is the same meaning as `visualMap[i].dimension: 1`,\n * if no dimension name is defined as `\"1\"`.\n * + If dim is a not-number-like string, it means the concrete dim name.\n * For example, it can be be default name `\"x\"`, `\"y\"`, `\"z\"`, `\"lng\"`, `\"lat\"`, `\"angle\"`, `\"radius\"`,\n * or customized in `dimensions` property of option like `\"age\"`.\n *\n * @return recognized `DimensionIndex`. Otherwise return null/undefined (means that dim is `DimensionName`).\n */\n SeriesData.prototype._recognizeDimIndex = function (dim) {\n if (zrUtil.isNumber(dim)\n // If being a number-like string but not being defined as a dimension name.\n || dim != null && !isNaN(dim) && !this._getDimInfo(dim) && (!this._dimOmitted || this._schema.getSourceDimensionIndex(dim) < 0)) {\n return +dim;\n }\n };\n SeriesData.prototype._getStoreDimIndex = function (dim) {\n var dimIdx = this.getDimensionIndex(dim);\n if (process.env.NODE_ENV !== 'production') {\n if (dimIdx == null) {\n throw new Error('Unknown dimension ' + dim);\n }\n }\n return dimIdx;\n };\n /**\n * Get type and calculation info of particular dimension\n * @param dim\n * Dimension can be concrete names like x, y, z, lng, lat, angle, radius\n * Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'\n */\n SeriesData.prototype.getDimensionInfo = function (dim) {\n // Do not clone, because there may be categories in dimInfo.\n return this._getDimInfo(this.getDimension(dim));\n };\n SeriesData.prototype._initGetDimensionInfo = function (needsHasOwn) {\n var dimensionInfos = this._dimInfos;\n this._getDimInfo = needsHasOwn ? function (dimName) {\n return dimensionInfos.hasOwnProperty(dimName) ? dimensionInfos[dimName] : undefined;\n } : function (dimName) {\n return dimensionInfos[dimName];\n };\n };\n /**\n * concrete dimension name list on coord.\n */\n SeriesData.prototype.getDimensionsOnCoord = function () {\n return this._dimSummary.dataDimsOnCoord.slice();\n };\n SeriesData.prototype.mapDimension = function (coordDim, idx) {\n var dimensionsSummary = this._dimSummary;\n if (idx == null) {\n return dimensionsSummary.encodeFirstDimNotExtra[coordDim];\n }\n var dims = dimensionsSummary.encode[coordDim];\n return dims ? dims[idx] : null;\n };\n SeriesData.prototype.mapDimensionsAll = function (coordDim) {\n var dimensionsSummary = this._dimSummary;\n var dims = dimensionsSummary.encode[coordDim];\n return (dims || []).slice();\n };\n SeriesData.prototype.getStore = function () {\n return this._store;\n };\n /**\n * Initialize from data\n * @param data source or data or data store.\n * @param nameList The name of a datum is used on data diff and\n * default label/tooltip.\n * A name can be specified in encode.itemName,\n * or dataItem.name (only for series option data),\n * or provided in nameList from outside.\n */\n SeriesData.prototype.initData = function (data, nameList, dimValueGetter) {\n var _this = this;\n var store;\n if (data instanceof DataStore) {\n store = data;\n }\n if (!store) {\n var dimensions = this.dimensions;\n var provider = isSourceInstance(data) || zrUtil.isArrayLike(data) ? new DefaultDataProvider(data, dimensions.length) : data;\n store = new DataStore();\n var dimensionInfos = map(dimensions, function (dimName) {\n return {\n type: _this._dimInfos[dimName].type,\n property: dimName\n };\n });\n store.initData(provider, dimensionInfos, dimValueGetter);\n }\n this._store = store;\n // Reset\n this._nameList = (nameList || []).slice();\n this._idList = [];\n this._nameRepeatCount = {};\n this._doInit(0, store.count());\n // Cache summary info for fast visit. See \"dimensionHelper\".\n // Needs to be initialized after store is prepared.\n this._dimSummary = summarizeDimensions(this, this._schema);\n this.userOutput = this._dimSummary.userOutput;\n };\n /**\n * Caution: Can be only called on raw data (before `this._indices` created).\n */\n SeriesData.prototype.appendData = function (data) {\n var range = this._store.appendData(data);\n this._doInit(range[0], range[1]);\n };\n /**\n * Caution: Can be only called on raw data (before `this._indices` created).\n * This method does not modify `rawData` (`dataProvider`), but only\n * add values to store.\n *\n * The final count will be increased by `Math.max(values.length, names.length)`.\n *\n * @param values That is the SourceType: 'arrayRows', like\n * [\n * [12, 33, 44],\n * [NaN, 43, 1],\n * ['-', 'asdf', 0]\n * ]\n * Each item is exactly corresponding to a dimension.\n */\n SeriesData.prototype.appendValues = function (values, names) {\n var _a = this._store.appendValues(values, names.length),\n start = _a.start,\n end = _a.end;\n var shouldMakeIdFromName = this._shouldMakeIdFromName();\n this._updateOrdinalMeta();\n if (names) {\n for (var idx = start; idx < end; idx++) {\n var sourceIdx = idx - start;\n this._nameList[idx] = names[sourceIdx];\n if (shouldMakeIdFromName) {\n makeIdFromName(this, idx);\n }\n }\n }\n };\n SeriesData.prototype._updateOrdinalMeta = function () {\n var store = this._store;\n var dimensions = this.dimensions;\n for (var i = 0; i < dimensions.length; i++) {\n var dimInfo = this._dimInfos[dimensions[i]];\n if (dimInfo.ordinalMeta) {\n store.collectOrdinalMeta(dimInfo.storeDimIndex, dimInfo.ordinalMeta);\n }\n }\n };\n SeriesData.prototype._shouldMakeIdFromName = function () {\n var provider = this._store.getProvider();\n return this._idDimIdx == null && provider.getSource().sourceFormat !== SOURCE_FORMAT_TYPED_ARRAY && !provider.fillStorage;\n };\n SeriesData.prototype._doInit = function (start, end) {\n if (start >= end) {\n return;\n }\n var store = this._store;\n var provider = store.getProvider();\n this._updateOrdinalMeta();\n var nameList = this._nameList;\n var idList = this._idList;\n var sourceFormat = provider.getSource().sourceFormat;\n var isFormatOriginal = sourceFormat === SOURCE_FORMAT_ORIGINAL;\n // Each data item is value\n // [1, 2]\n // 2\n // Bar chart, line chart which uses category axis\n // only gives the 'y' value. 'x' value is the indices of category\n // Use a tempValue to normalize the value to be a (x, y) value\n // If dataItem is {name: ...} or {id: ...}, it has highest priority.\n // This kind of ids and names are always stored `_nameList` and `_idList`.\n if (isFormatOriginal && !provider.pure) {\n var sharedDataItem = [];\n for (var idx = start; idx < end; idx++) {\n // NOTICE: Try not to write things into dataItem\n var dataItem = provider.getItem(idx, sharedDataItem);\n if (!this.hasItemOption && isDataItemOption(dataItem)) {\n this.hasItemOption = true;\n }\n if (dataItem) {\n var itemName = dataItem.name;\n if (nameList[idx] == null && itemName != null) {\n nameList[idx] = convertOptionIdName(itemName, null);\n }\n var itemId = dataItem.id;\n if (idList[idx] == null && itemId != null) {\n idList[idx] = convertOptionIdName(itemId, null);\n }\n }\n }\n }\n if (this._shouldMakeIdFromName()) {\n for (var idx = start; idx < end; idx++) {\n makeIdFromName(this, idx);\n }\n }\n prepareInvertedIndex(this);\n };\n /**\n * PENDING: In fact currently this function is only used to short-circuit\n * the calling of `scale.unionExtentFromData` when data have been filtered by modules\n * like \"dataZoom\". `scale.unionExtentFromData` is used to calculate data extent for series on\n * an axis, but if a \"axis related data filter module\" is used, the extent of the axis have\n * been fixed and no need to calling `scale.unionExtentFromData` actually.\n * But if we add \"custom data filter\" in future, which is not \"axis related\", this method may\n * be still needed.\n *\n * Optimize for the scenario that data is filtered by a given extent.\n * Consider that if data amount is more than hundreds of thousand,\n * extent calculation will cost more than 10ms and the cache will\n * be erased because of the filtering.\n */\n SeriesData.prototype.getApproximateExtent = function (dim) {\n return this._approximateExtent[dim] || this._store.getDataExtent(this._getStoreDimIndex(dim));\n };\n /**\n * Calculate extent on a filtered data might be time consuming.\n * Approximate extent is only used for: calculate extent of filtered data outside.\n */\n SeriesData.prototype.setApproximateExtent = function (extent, dim) {\n dim = this.getDimension(dim);\n this._approximateExtent[dim] = extent.slice();\n };\n SeriesData.prototype.getCalculationInfo = function (key) {\n return this._calculationInfo[key];\n };\n SeriesData.prototype.setCalculationInfo = function (key, value) {\n isObject(key) ? zrUtil.extend(this._calculationInfo, key) : this._calculationInfo[key] = value;\n };\n /**\n * @return Never be null/undefined. `number` will be converted to string. Because:\n * In most cases, name is used in display, where returning a string is more convenient.\n * In other cases, name is used in query (see `indexOfName`), where we can keep the\n * rule that name `2` equals to name `'2'`.\n */\n SeriesData.prototype.getName = function (idx) {\n var rawIndex = this.getRawIndex(idx);\n var name = this._nameList[rawIndex];\n if (name == null && this._nameDimIdx != null) {\n name = getIdNameFromStore(this, this._nameDimIdx, rawIndex);\n }\n if (name == null) {\n name = '';\n }\n return name;\n };\n SeriesData.prototype._getCategory = function (dimIdx, idx) {\n var ordinal = this._store.get(dimIdx, idx);\n var ordinalMeta = this._store.getOrdinalMeta(dimIdx);\n if (ordinalMeta) {\n return ordinalMeta.categories[ordinal];\n }\n return ordinal;\n };\n /**\n * @return Never null/undefined. `number` will be converted to string. Because:\n * In all cases having encountered at present, id is used in making diff comparison, which\n * are usually based on hash map. We can keep the rule that the internal id are always string\n * (treat `2` is the same as `'2'`) to make the related logic simple.\n */\n SeriesData.prototype.getId = function (idx) {\n return getId(this, this.getRawIndex(idx));\n };\n SeriesData.prototype.count = function () {\n return this._store.count();\n };\n /**\n * Get value. Return NaN if idx is out of range.\n *\n * @notice Should better to use `data.getStore().get(dimIndex, dataIdx)` instead.\n */\n SeriesData.prototype.get = function (dim, idx) {\n var store = this._store;\n var dimInfo = this._dimInfos[dim];\n if (dimInfo) {\n return store.get(dimInfo.storeDimIndex, idx);\n }\n };\n /**\n * @notice Should better to use `data.getStore().getByRawIndex(dimIndex, dataIdx)` instead.\n */\n SeriesData.prototype.getByRawIndex = function (dim, rawIdx) {\n var store = this._store;\n var dimInfo = this._dimInfos[dim];\n if (dimInfo) {\n return store.getByRawIndex(dimInfo.storeDimIndex, rawIdx);\n }\n };\n SeriesData.prototype.getIndices = function () {\n return this._store.getIndices();\n };\n SeriesData.prototype.getDataExtent = function (dim) {\n return this._store.getDataExtent(this._getStoreDimIndex(dim));\n };\n SeriesData.prototype.getSum = function (dim) {\n return this._store.getSum(this._getStoreDimIndex(dim));\n };\n SeriesData.prototype.getMedian = function (dim) {\n return this._store.getMedian(this._getStoreDimIndex(dim));\n };\n SeriesData.prototype.getValues = function (dimensions, idx) {\n var _this = this;\n var store = this._store;\n return zrUtil.isArray(dimensions) ? store.getValues(map(dimensions, function (dim) {\n return _this._getStoreDimIndex(dim);\n }), idx) : store.getValues(dimensions);\n };\n /**\n * If value is NaN. Including '-'\n * Only check the coord dimensions.\n */\n SeriesData.prototype.hasValue = function (idx) {\n var dataDimIndicesOnCoord = this._dimSummary.dataDimIndicesOnCoord;\n for (var i = 0, len = dataDimIndicesOnCoord.length; i < len; i++) {\n // Ordinal type originally can be string or number.\n // But when an ordinal type is used on coord, it can\n // not be string but only number. So we can also use isNaN.\n if (isNaN(this._store.get(dataDimIndicesOnCoord[i], idx))) {\n return false;\n }\n }\n return true;\n };\n /**\n * Retrieve the index with given name\n */\n SeriesData.prototype.indexOfName = function (name) {\n for (var i = 0, len = this._store.count(); i < len; i++) {\n if (this.getName(i) === name) {\n return i;\n }\n }\n return -1;\n };\n SeriesData.prototype.getRawIndex = function (idx) {\n return this._store.getRawIndex(idx);\n };\n SeriesData.prototype.indexOfRawIndex = function (rawIndex) {\n return this._store.indexOfRawIndex(rawIndex);\n };\n /**\n * Only support the dimension which inverted index created.\n * Do not support other cases until required.\n * @param dim concrete dim\n * @param value ordinal index\n * @return rawIndex\n */\n SeriesData.prototype.rawIndexOf = function (dim, value) {\n var invertedIndices = dim && this._invertedIndicesMap[dim];\n if (process.env.NODE_ENV !== 'production') {\n if (!invertedIndices) {\n throw new Error('Do not supported yet');\n }\n }\n var rawIndex = invertedIndices[value];\n if (rawIndex == null || isNaN(rawIndex)) {\n return INDEX_NOT_FOUND;\n }\n return rawIndex;\n };\n /**\n * Retrieve the index of nearest value\n * @param dim\n * @param value\n * @param [maxDistance=Infinity]\n * @return If and only if multiple indices has\n * the same value, they are put to the result.\n */\n SeriesData.prototype.indicesOfNearest = function (dim, value, maxDistance) {\n return this._store.indicesOfNearest(this._getStoreDimIndex(dim), value, maxDistance);\n };\n SeriesData.prototype.each = function (dims, cb, ctx) {\n 'use strict';\n\n if (zrUtil.isFunction(dims)) {\n ctx = cb;\n cb = dims;\n dims = [];\n }\n // ctxCompat just for compat echarts3\n var fCtx = ctx || this;\n var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);\n this._store.each(dimIndices, fCtx ? zrUtil.bind(cb, fCtx) : cb);\n };\n SeriesData.prototype.filterSelf = function (dims, cb, ctx) {\n 'use strict';\n\n if (zrUtil.isFunction(dims)) {\n ctx = cb;\n cb = dims;\n dims = [];\n }\n // ctxCompat just for compat echarts3\n var fCtx = ctx || this;\n var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);\n this._store = this._store.filter(dimIndices, fCtx ? zrUtil.bind(cb, fCtx) : cb);\n return this;\n };\n /**\n * Select data in range. (For optimization of filter)\n * (Manually inline code, support 5 million data filtering in data zoom.)\n */\n SeriesData.prototype.selectRange = function (range) {\n 'use strict';\n\n var _this = this;\n var innerRange = {};\n var dims = zrUtil.keys(range);\n var dimIndices = [];\n zrUtil.each(dims, function (dim) {\n var dimIdx = _this._getStoreDimIndex(dim);\n innerRange[dimIdx] = range[dim];\n dimIndices.push(dimIdx);\n });\n this._store = this._store.selectRange(innerRange);\n return this;\n };\n /* eslint-enable max-len */\n SeriesData.prototype.mapArray = function (dims, cb, ctx) {\n 'use strict';\n\n if (zrUtil.isFunction(dims)) {\n ctx = cb;\n cb = dims;\n dims = [];\n }\n // ctxCompat just for compat echarts3\n ctx = ctx || this;\n var result = [];\n this.each(dims, function () {\n result.push(cb && cb.apply(this, arguments));\n }, ctx);\n return result;\n };\n SeriesData.prototype.map = function (dims, cb, ctx, ctxCompat) {\n 'use strict';\n\n // ctxCompat just for compat echarts3\n var fCtx = ctx || ctxCompat || this;\n var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);\n var list = cloneListForMapAndSample(this);\n list._store = this._store.map(dimIndices, fCtx ? zrUtil.bind(cb, fCtx) : cb);\n return list;\n };\n SeriesData.prototype.modify = function (dims, cb, ctx, ctxCompat) {\n var _this = this;\n // ctxCompat just for compat echarts3\n var fCtx = ctx || ctxCompat || this;\n if (process.env.NODE_ENV !== 'production') {\n zrUtil.each(normalizeDimensions(dims), function (dim) {\n var dimInfo = _this.getDimensionInfo(dim);\n if (!dimInfo.isCalculationCoord) {\n console.error('Danger: only stack dimension can be modified');\n }\n });\n }\n var dimIndices = map(normalizeDimensions(dims), this._getStoreDimIndex, this);\n // If do shallow clone here, if there are too many stacked series,\n // it still cost lots of memory, because `_store.dimensions` are not shared.\n // We should consider there probably be shallow clone happen in each series\n // in consequent filter/map.\n this._store.modify(dimIndices, fCtx ? zrUtil.bind(cb, fCtx) : cb);\n };\n /**\n * Large data down sampling on given dimension\n * @param sampleIndex Sample index for name and id\n */\n SeriesData.prototype.downSample = function (dimension, rate, sampleValue, sampleIndex) {\n var list = cloneListForMapAndSample(this);\n list._store = this._store.downSample(this._getStoreDimIndex(dimension), rate, sampleValue, sampleIndex);\n return list;\n };\n /**\n * Large data down sampling using largest-triangle-three-buckets\n * @param {string} valueDimension\n * @param {number} targetCount\n */\n SeriesData.prototype.lttbDownSample = function (valueDimension, rate) {\n var list = cloneListForMapAndSample(this);\n list._store = this._store.lttbDownSample(this._getStoreDimIndex(valueDimension), rate);\n return list;\n };\n SeriesData.prototype.getRawDataItem = function (idx) {\n return this._store.getRawDataItem(idx);\n };\n /**\n * Get model of one data item.\n */\n // TODO: Type of data item\n SeriesData.prototype.getItemModel = function (idx) {\n var hostModel = this.hostModel;\n var dataItem = this.getRawDataItem(idx);\n return new Model(dataItem, hostModel, hostModel && hostModel.ecModel);\n };\n /**\n * Create a data differ\n */\n SeriesData.prototype.diff = function (otherList) {\n var thisList = this;\n return new DataDiffer(otherList ? otherList.getStore().getIndices() : [], this.getStore().getIndices(), function (idx) {\n return getId(otherList, idx);\n }, function (idx) {\n return getId(thisList, idx);\n });\n };\n /**\n * Get visual property.\n */\n SeriesData.prototype.getVisual = function (key) {\n var visual = this._visual;\n return visual && visual[key];\n };\n SeriesData.prototype.setVisual = function (kvObj, val) {\n this._visual = this._visual || {};\n if (isObject(kvObj)) {\n zrUtil.extend(this._visual, kvObj);\n } else {\n this._visual[kvObj] = val;\n }\n };\n /**\n * Get visual property of single data item\n */\n // eslint-disable-next-line\n SeriesData.prototype.getItemVisual = function (idx, key) {\n var itemVisual = this._itemVisuals[idx];\n var val = itemVisual && itemVisual[key];\n if (val == null) {\n // Use global visual property\n return this.getVisual(key);\n }\n return val;\n };\n /**\n * If exists visual property of single data item\n */\n SeriesData.prototype.hasItemVisual = function () {\n return this._itemVisuals.length > 0;\n };\n /**\n * Make sure itemVisual property is unique\n */\n // TODO: use key to save visual to reduce memory.\n SeriesData.prototype.ensureUniqueItemVisual = function (idx, key) {\n var itemVisuals = this._itemVisuals;\n var itemVisual = itemVisuals[idx];\n if (!itemVisual) {\n itemVisual = itemVisuals[idx] = {};\n }\n var val = itemVisual[key];\n if (val == null) {\n val = this.getVisual(key);\n // TODO Performance?\n if (zrUtil.isArray(val)) {\n val = val.slice();\n } else if (isObject(val)) {\n val = zrUtil.extend({}, val);\n }\n itemVisual[key] = val;\n }\n return val;\n };\n // eslint-disable-next-line\n SeriesData.prototype.setItemVisual = function (idx, key, value) {\n var itemVisual = this._itemVisuals[idx] || {};\n this._itemVisuals[idx] = itemVisual;\n if (isObject(key)) {\n zrUtil.extend(itemVisual, key);\n } else {\n itemVisual[key] = value;\n }\n };\n /**\n * Clear itemVisuals and list visual.\n */\n SeriesData.prototype.clearAllVisual = function () {\n this._visual = {};\n this._itemVisuals = [];\n };\n SeriesData.prototype.setLayout = function (key, val) {\n isObject(key) ? zrUtil.extend(this._layout, key) : this._layout[key] = val;\n };\n /**\n * Get layout property.\n */\n SeriesData.prototype.getLayout = function (key) {\n return this._layout[key];\n };\n /**\n * Get layout of single data item\n */\n SeriesData.prototype.getItemLayout = function (idx) {\n return this._itemLayouts[idx];\n };\n /**\n * Set layout of single data item\n */\n SeriesData.prototype.setItemLayout = function (idx, layout, merge) {\n this._itemLayouts[idx] = merge ? zrUtil.extend(this._itemLayouts[idx] || {}, layout) : layout;\n };\n /**\n * Clear all layout of single data item\n */\n SeriesData.prototype.clearItemLayouts = function () {\n this._itemLayouts.length = 0;\n };\n /**\n * Set graphic element relative to data. It can be set as null\n */\n SeriesData.prototype.setItemGraphicEl = function (idx, el) {\n var seriesIndex = this.hostModel && this.hostModel.seriesIndex;\n setCommonECData(seriesIndex, this.dataType, idx, el);\n this._graphicEls[idx] = el;\n };\n SeriesData.prototype.getItemGraphicEl = function (idx) {\n return this._graphicEls[idx];\n };\n SeriesData.prototype.eachItemGraphicEl = function (cb, context) {\n zrUtil.each(this._graphicEls, function (el, idx) {\n if (el) {\n cb && cb.call(context, el, idx);\n }\n });\n };\n /**\n * Shallow clone a new list except visual and layout properties, and graph elements.\n * New list only change the indices.\n */\n SeriesData.prototype.cloneShallow = function (list) {\n if (!list) {\n list = new SeriesData(this._schema ? this._schema : map(this.dimensions, this._getDimInfo, this), this.hostModel);\n }\n transferProperties(list, this);\n list._store = this._store;\n return list;\n };\n /**\n * Wrap some method to add more feature\n */\n SeriesData.prototype.wrapMethod = function (methodName, injectFunction) {\n var originalMethod = this[methodName];\n if (!zrUtil.isFunction(originalMethod)) {\n return;\n }\n this.__wrappedMethods = this.__wrappedMethods || [];\n this.__wrappedMethods.push(methodName);\n this[methodName] = function () {\n var res = originalMethod.apply(this, arguments);\n return injectFunction.apply(this, [res].concat(zrUtil.slice(arguments)));\n };\n };\n // ----------------------------------------------------------\n // A work around for internal method visiting private member.\n // ----------------------------------------------------------\n SeriesData.internalField = function () {\n prepareInvertedIndex = function (data) {\n var invertedIndicesMap = data._invertedIndicesMap;\n zrUtil.each(invertedIndicesMap, function (invertedIndices, dim) {\n var dimInfo = data._dimInfos[dim];\n // Currently, only dimensions that has ordinalMeta can create inverted indices.\n var ordinalMeta = dimInfo.ordinalMeta;\n var store = data._store;\n if (ordinalMeta) {\n invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(ordinalMeta.categories.length);\n // The default value of TypedArray is 0. To avoid miss\n // mapping to 0, we should set it as INDEX_NOT_FOUND.\n for (var i = 0; i < invertedIndices.length; i++) {\n invertedIndices[i] = INDEX_NOT_FOUND;\n }\n for (var i = 0; i < store.count(); i++) {\n // Only support the case that all values are distinct.\n invertedIndices[store.get(dimInfo.storeDimIndex, i)] = i;\n }\n }\n });\n };\n getIdNameFromStore = function (data, dimIdx, idx) {\n return convertOptionIdName(data._getCategory(dimIdx, idx), null);\n };\n /**\n * @see the comment of `List['getId']`.\n */\n getId = function (data, rawIndex) {\n var id = data._idList[rawIndex];\n if (id == null && data._idDimIdx != null) {\n id = getIdNameFromStore(data, data._idDimIdx, rawIndex);\n }\n if (id == null) {\n id = ID_PREFIX + rawIndex;\n }\n return id;\n };\n normalizeDimensions = function (dimensions) {\n if (!zrUtil.isArray(dimensions)) {\n dimensions = dimensions != null ? [dimensions] : [];\n }\n return dimensions;\n };\n /**\n * Data in excludeDimensions is copied, otherwise transferred.\n */\n cloneListForMapAndSample = function (original) {\n var list = new SeriesData(original._schema ? original._schema : map(original.dimensions, original._getDimInfo, original), original.hostModel);\n // FIXME If needs stackedOn, value may already been stacked\n transferProperties(list, original);\n return list;\n };\n transferProperties = function (target, source) {\n zrUtil.each(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) {\n if (source.hasOwnProperty(propName)) {\n target[propName] = source[propName];\n }\n });\n target.__wrappedMethods = source.__wrappedMethods;\n zrUtil.each(CLONE_PROPERTIES, function (propName) {\n target[propName] = zrUtil.clone(source[propName]);\n });\n target._calculationInfo = zrUtil.extend({}, source._calculationInfo);\n };\n makeIdFromName = function (data, idx) {\n var nameList = data._nameList;\n var idList = data._idList;\n var nameDimIdx = data._nameDimIdx;\n var idDimIdx = data._idDimIdx;\n var name = nameList[idx];\n var id = idList[idx];\n if (name == null && nameDimIdx != null) {\n nameList[idx] = name = getIdNameFromStore(data, nameDimIdx, idx);\n }\n if (id == null && idDimIdx != null) {\n idList[idx] = id = getIdNameFromStore(data, idDimIdx, idx);\n }\n if (id == null && name != null) {\n var nameRepeatCount = data._nameRepeatCount;\n var nmCnt = nameRepeatCount[name] = (nameRepeatCount[name] || 0) + 1;\n id = name;\n if (nmCnt > 1) {\n id += '__ec__' + nmCnt;\n }\n idList[idx] = id;\n }\n };\n }();\n return SeriesData;\n}();\nexport default SeriesData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { VISUAL_DIMENSIONS } from '../../util/types.js';\nimport SeriesDimensionDefine from '../SeriesDimensionDefine.js';\nimport { createHashMap, defaults, each, extend, isObject, isString } from 'zrender/lib/core/util.js';\nimport { createSourceFromSeriesDataOption, isSourceInstance } from '../Source.js';\nimport { CtorInt32Array } from '../DataStore.js';\nimport { normalizeToArray } from '../../util/model.js';\nimport { BE_ORDINAL, guessOrdinal } from './sourceHelper.js';\nimport { createDimNameMap, ensureSourceDimNameMap, SeriesDataSchema, shouldOmitUnusedDimensions } from './SeriesDataSchema.js';\n/**\n * For outside usage compat (like echarts-gl are using it).\n */\nexport function createDimensions(source, opt) {\n return prepareSeriesDataSchema(source, opt).dimensions;\n}\n/**\n * This method builds the relationship between:\n * + \"what the coord sys or series requires (see `coordDimensions`)\",\n * + \"what the user defines (in `encode` and `dimensions`, see `opt.dimensionsDefine` and `opt.encodeDefine`)\"\n * + \"what the data source provids (see `source`)\".\n *\n * Some guess strategy will be adapted if user does not define something.\n * If no 'value' dimension specified, the first no-named dimension will be\n * named as 'value'.\n *\n * @return The results are always sorted by `storeDimIndex` asc.\n */\nexport default function prepareSeriesDataSchema(\n// TODO: TYPE completeDimensions type\nsource, opt) {\n if (!isSourceInstance(source)) {\n source = createSourceFromSeriesDataOption(source);\n }\n opt = opt || {};\n var sysDims = opt.coordDimensions || [];\n var dimsDef = opt.dimensionsDefine || source.dimensionsDefine || [];\n var coordDimNameMap = createHashMap();\n var resultList = [];\n var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimensionsCount);\n // Try to ignore unused dimensions if sharing a high dimension datastore\n // 30 is an experience value.\n var omitUnusedDimensions = opt.canOmitUnusedDimensions && shouldOmitUnusedDimensions(dimCount);\n var isUsingSourceDimensionsDef = dimsDef === source.dimensionsDefine;\n var dataDimNameMap = isUsingSourceDimensionsDef ? ensureSourceDimNameMap(source) : createDimNameMap(dimsDef);\n var encodeDef = opt.encodeDefine;\n if (!encodeDef && opt.encodeDefaulter) {\n encodeDef = opt.encodeDefaulter(source, dimCount);\n }\n var encodeDefMap = createHashMap(encodeDef);\n var indicesMap = new CtorInt32Array(dimCount);\n for (var i = 0; i < indicesMap.length; i++) {\n indicesMap[i] = -1;\n }\n function getResultItem(dimIdx) {\n var idx = indicesMap[dimIdx];\n if (idx < 0) {\n var dimDefItemRaw = dimsDef[dimIdx];\n var dimDefItem = isObject(dimDefItemRaw) ? dimDefItemRaw : {\n name: dimDefItemRaw\n };\n var resultItem = new SeriesDimensionDefine();\n var userDimName = dimDefItem.name;\n if (userDimName != null && dataDimNameMap.get(userDimName) != null) {\n // Only if `series.dimensions` is defined in option\n // displayName, will be set, and dimension will be displayed vertically in\n // tooltip by default.\n resultItem.name = resultItem.displayName = userDimName;\n }\n dimDefItem.type != null && (resultItem.type = dimDefItem.type);\n dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName);\n var newIdx = resultList.length;\n indicesMap[dimIdx] = newIdx;\n resultItem.storeDimIndex = dimIdx;\n resultList.push(resultItem);\n return resultItem;\n }\n return resultList[idx];\n }\n if (!omitUnusedDimensions) {\n for (var i = 0; i < dimCount; i++) {\n getResultItem(i);\n }\n }\n // Set `coordDim` and `coordDimIndex` by `encodeDefMap` and normalize `encodeDefMap`.\n encodeDefMap.each(function (dataDimsRaw, coordDim) {\n var dataDims = normalizeToArray(dataDimsRaw).slice();\n // Note: It is allowed that `dataDims.length` is `0`, e.g., options is\n // `{encode: {x: -1, y: 1}}`. Should not filter anything in\n // this case.\n if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {\n encodeDefMap.set(coordDim, false);\n return;\n }\n var validDataDims = encodeDefMap.set(coordDim, []);\n each(dataDims, function (resultDimIdxOrName, idx) {\n // The input resultDimIdx can be dim name or index.\n var resultDimIdx = isString(resultDimIdxOrName) ? dataDimNameMap.get(resultDimIdxOrName) : resultDimIdxOrName;\n if (resultDimIdx != null && resultDimIdx < dimCount) {\n validDataDims[idx] = resultDimIdx;\n applyDim(getResultItem(resultDimIdx), coordDim, idx);\n }\n });\n });\n // Apply templates and default order from `sysDims`.\n var availDimIdx = 0;\n each(sysDims, function (sysDimItemRaw) {\n var coordDim;\n var sysDimItemDimsDef;\n var sysDimItemOtherDims;\n var sysDimItem;\n if (isString(sysDimItemRaw)) {\n coordDim = sysDimItemRaw;\n sysDimItem = {};\n } else {\n sysDimItem = sysDimItemRaw;\n coordDim = sysDimItem.name;\n var ordinalMeta = sysDimItem.ordinalMeta;\n sysDimItem.ordinalMeta = null;\n sysDimItem = extend({}, sysDimItem);\n sysDimItem.ordinalMeta = ordinalMeta;\n // `coordDimIndex` should not be set directly.\n sysDimItemDimsDef = sysDimItem.dimsDef;\n sysDimItemOtherDims = sysDimItem.otherDims;\n sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex = sysDimItem.dimsDef = sysDimItem.otherDims = null;\n }\n var dataDims = encodeDefMap.get(coordDim);\n // negative resultDimIdx means no need to mapping.\n if (dataDims === false) {\n return;\n }\n dataDims = normalizeToArray(dataDims);\n // dimensions provides default dim sequences.\n if (!dataDims.length) {\n for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {\n while (availDimIdx < dimCount && getResultItem(availDimIdx).coordDim != null) {\n availDimIdx++;\n }\n availDimIdx < dimCount && dataDims.push(availDimIdx++);\n }\n }\n // Apply templates.\n each(dataDims, function (resultDimIdx, coordDimIndex) {\n var resultItem = getResultItem(resultDimIdx);\n // Coordinate system has a higher priority on dim type than source.\n if (isUsingSourceDimensionsDef && sysDimItem.type != null) {\n resultItem.type = sysDimItem.type;\n }\n applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);\n if (resultItem.name == null && sysDimItemDimsDef) {\n var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];\n !isObject(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {\n name: sysDimItemDimsDefItem\n });\n resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name;\n resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;\n }\n // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}\n sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);\n });\n });\n function applyDim(resultItem, coordDim, coordDimIndex) {\n if (VISUAL_DIMENSIONS.get(coordDim) != null) {\n resultItem.otherDims[coordDim] = coordDimIndex;\n } else {\n resultItem.coordDim = coordDim;\n resultItem.coordDimIndex = coordDimIndex;\n coordDimNameMap.set(coordDim, true);\n }\n }\n // Make sure the first extra dim is 'value'.\n var generateCoord = opt.generateCoord;\n var generateCoordCount = opt.generateCoordCount;\n var fromZero = generateCoordCount != null;\n generateCoordCount = generateCoord ? generateCoordCount || 1 : 0;\n var extra = generateCoord || 'value';\n function ifNoNameFillWithCoordName(resultItem) {\n if (resultItem.name == null) {\n // Duplication will be removed in the next step.\n resultItem.name = resultItem.coordDim;\n }\n }\n // Set dim `name` and other `coordDim` and other props.\n if (!omitUnusedDimensions) {\n for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {\n var resultItem = getResultItem(resultDimIdx);\n var coordDim = resultItem.coordDim;\n if (coordDim == null) {\n // TODO no need to generate coordDim for isExtraCoord?\n resultItem.coordDim = genCoordDimName(extra, coordDimNameMap, fromZero);\n resultItem.coordDimIndex = 0;\n // Series specified generateCoord is using out.\n if (!generateCoord || generateCoordCount <= 0) {\n resultItem.isExtraCoord = true;\n }\n generateCoordCount--;\n }\n ifNoNameFillWithCoordName(resultItem);\n if (resultItem.type == null && (guessOrdinal(source, resultDimIdx) === BE_ORDINAL.Must\n // Consider the case:\n // {\n // dataset: {source: [\n // ['2001', 123],\n // ['2002', 456],\n // ...\n // ['The others', 987],\n // ]},\n // series: {type: 'pie'}\n // }\n // The first column should better be treated as a \"ordinal\" although it\n // might not be detected as an \"ordinal\" by `guessOrdinal`.\n || resultItem.isExtraCoord && (resultItem.otherDims.itemName != null || resultItem.otherDims.seriesName != null))) {\n resultItem.type = 'ordinal';\n }\n }\n } else {\n each(resultList, function (resultItem) {\n // PENDING: guessOrdinal or let user specify type: 'ordinal' manually?\n ifNoNameFillWithCoordName(resultItem);\n });\n // Sort dimensions: there are some rule that use the last dim as label,\n // and for some latter travel process easier.\n resultList.sort(function (item0, item1) {\n return item0.storeDimIndex - item1.storeDimIndex;\n });\n }\n removeDuplication(resultList);\n return new SeriesDataSchema({\n source: source,\n dimensions: resultList,\n fullDimensionCount: dimCount,\n dimensionOmitted: omitUnusedDimensions\n });\n}\nfunction removeDuplication(result) {\n var duplicationMap = createHashMap();\n for (var i = 0; i < result.length; i++) {\n var dim = result[i];\n var dimOriginalName = dim.name;\n var count = duplicationMap.get(dimOriginalName) || 0;\n if (count > 0) {\n // Starts from 0.\n dim.name = dimOriginalName + (count - 1);\n }\n count++;\n duplicationMap.set(dimOriginalName, count);\n }\n}\n// ??? TODO\n// Originally detect dimCount by data[0]. Should we\n// optimize it to only by sysDims and dimensions and encode.\n// So only necessary dims will be initialized.\n// But\n// (1) custom series should be considered. where other dims\n// may be visited.\n// (2) sometimes user need to calculate bubble size or use visualMap\n// on other dimensions besides coordSys needed.\n// So, dims that is not used by system, should be shared in data store?\nfunction getDimCount(source, sysDims, dimsDef, optDimCount) {\n // Note that the result dimCount should not small than columns count\n // of data, otherwise `dataDimNameMap` checking will be incorrect.\n var dimCount = Math.max(source.dimensionsDetectedCount || 1, sysDims.length, dimsDef.length, optDimCount || 0);\n each(sysDims, function (sysDimItem) {\n var sysDimItemDimsDef;\n if (isObject(sysDimItem) && (sysDimItemDimsDef = sysDimItem.dimsDef)) {\n dimCount = Math.max(dimCount, sysDimItemDimsDef.length);\n }\n });\n return dimCount;\n}\nfunction genCoordDimName(name, map, fromZero) {\n if (fromZero || map.hasKey(name)) {\n var i = 0;\n while (map.hasKey(name + i)) {\n i++;\n }\n name += i;\n }\n map.set(name, true);\n return name;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/**\n * Helper for model references.\n * There are many manners to refer axis/coordSys.\n */\n// TODO\n// merge relevant logic to this file?\n// check: \"modelHelper\" of tooltip and \"BrushTargetManager\".\nimport { createHashMap, retrieve, each } from 'zrender/lib/core/util.js';\nimport { SINGLE_REFERRING } from '../util/model.js';\n/**\n * @class\n * For example:\n * {\n * coordSysName: 'cartesian2d',\n * coordSysDims: ['x', 'y', ...],\n * axisMap: HashMap({\n * x: xAxisModel,\n * y: yAxisModel\n * }),\n * categoryAxisMap: HashMap({\n * x: xAxisModel,\n * y: undefined\n * }),\n * // The index of the first category axis in `coordSysDims`.\n * // `null/undefined` means no category axis exists.\n * firstCategoryDimIndex: 1,\n * // To replace user specified encode.\n * }\n */\nvar CoordSysInfo = /** @class */function () {\n function CoordSysInfo(coordSysName) {\n this.coordSysDims = [];\n this.axisMap = createHashMap();\n this.categoryAxisMap = createHashMap();\n this.coordSysName = coordSysName;\n }\n return CoordSysInfo;\n}();\nexport function getCoordSysInfoBySeries(seriesModel) {\n var coordSysName = seriesModel.get('coordinateSystem');\n var result = new CoordSysInfo(coordSysName);\n var fetch = fetchers[coordSysName];\n if (fetch) {\n fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);\n return result;\n }\n}\nvar fetchers = {\n cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {\n var xAxisModel = seriesModel.getReferringComponents('xAxis', SINGLE_REFERRING).models[0];\n var yAxisModel = seriesModel.getReferringComponents('yAxis', SINGLE_REFERRING).models[0];\n if (process.env.NODE_ENV !== 'production') {\n if (!xAxisModel) {\n throw new Error('xAxis \"' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('xAxisId'), 0) + '\" not found');\n }\n if (!yAxisModel) {\n throw new Error('yAxis \"' + retrieve(seriesModel.get('xAxisIndex'), seriesModel.get('yAxisId'), 0) + '\" not found');\n }\n }\n result.coordSysDims = ['x', 'y'];\n axisMap.set('x', xAxisModel);\n axisMap.set('y', yAxisModel);\n if (isCategory(xAxisModel)) {\n categoryAxisMap.set('x', xAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n if (isCategory(yAxisModel)) {\n categoryAxisMap.set('y', yAxisModel);\n result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);\n }\n },\n singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {\n var singleAxisModel = seriesModel.getReferringComponents('singleAxis', SINGLE_REFERRING).models[0];\n if (process.env.NODE_ENV !== 'production') {\n if (!singleAxisModel) {\n throw new Error('singleAxis should be specified.');\n }\n }\n result.coordSysDims = ['single'];\n axisMap.set('single', singleAxisModel);\n if (isCategory(singleAxisModel)) {\n categoryAxisMap.set('single', singleAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n },\n polar: function (seriesModel, result, axisMap, categoryAxisMap) {\n var polarModel = seriesModel.getReferringComponents('polar', SINGLE_REFERRING).models[0];\n var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n var angleAxisModel = polarModel.findAxisModel('angleAxis');\n if (process.env.NODE_ENV !== 'production') {\n if (!angleAxisModel) {\n throw new Error('angleAxis option not found');\n }\n if (!radiusAxisModel) {\n throw new Error('radiusAxis option not found');\n }\n }\n result.coordSysDims = ['radius', 'angle'];\n axisMap.set('radius', radiusAxisModel);\n axisMap.set('angle', angleAxisModel);\n if (isCategory(radiusAxisModel)) {\n categoryAxisMap.set('radius', radiusAxisModel);\n result.firstCategoryDimIndex = 0;\n }\n if (isCategory(angleAxisModel)) {\n categoryAxisMap.set('angle', angleAxisModel);\n result.firstCategoryDimIndex == null && (result.firstCategoryDimIndex = 1);\n }\n },\n geo: function (seriesModel, result, axisMap, categoryAxisMap) {\n result.coordSysDims = ['lng', 'lat'];\n },\n parallel: function (seriesModel, result, axisMap, categoryAxisMap) {\n var ecModel = seriesModel.ecModel;\n var parallelModel = ecModel.getComponent('parallel', seriesModel.get('parallelIndex'));\n var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();\n each(parallelModel.parallelAxisIndex, function (axisIndex, index) {\n var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n var axisDim = coordSysDims[index];\n axisMap.set(axisDim, axisModel);\n if (isCategory(axisModel)) {\n categoryAxisMap.set(axisDim, axisModel);\n if (result.firstCategoryDimIndex == null) {\n result.firstCategoryDimIndex = index;\n }\n }\n });\n }\n};\nfunction isCategory(axisModel) {\n return axisModel.get('type') === 'category';\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, isString } from 'zrender/lib/core/util.js';\nimport { isSeriesDataSchema } from './SeriesDataSchema.js';\n/**\n * Note that it is too complicated to support 3d stack by value\n * (have to create two-dimension inverted index), so in 3d case\n * we just support that stacked by index.\n *\n * @param seriesModel\n * @param dimensionsInput The same as the input of .\n * The input will be modified.\n * @param opt\n * @param opt.stackedCoordDimension Specify a coord dimension if needed.\n * @param opt.byIndex=false\n * @return calculationInfo\n * {\n * stackedDimension: string\n * stackedByDimension: string\n * isStackedByIndex: boolean\n * stackedOverDimension: string\n * stackResultDimension: string\n * }\n */\nexport function enableDataStack(seriesModel, dimensionsInput, opt) {\n opt = opt || {};\n var byIndex = opt.byIndex;\n var stackedCoordDimension = opt.stackedCoordDimension;\n var dimensionDefineList;\n var schema;\n var store;\n if (isLegacyDimensionsInput(dimensionsInput)) {\n dimensionDefineList = dimensionsInput;\n } else {\n schema = dimensionsInput.schema;\n dimensionDefineList = schema.dimensions;\n store = dimensionsInput.store;\n }\n // Compatibal: when `stack` is set as '', do not stack.\n var mayStack = !!(seriesModel && seriesModel.get('stack'));\n var stackedByDimInfo;\n var stackedDimInfo;\n var stackResultDimension;\n var stackedOverDimension;\n each(dimensionDefineList, function (dimensionInfo, index) {\n if (isString(dimensionInfo)) {\n dimensionDefineList[index] = dimensionInfo = {\n name: dimensionInfo\n };\n }\n if (mayStack && !dimensionInfo.isExtraCoord) {\n // Find the first ordinal dimension as the stackedByDimInfo.\n if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {\n stackedByDimInfo = dimensionInfo;\n }\n // Find the first stackable dimension as the stackedDimInfo.\n if (!stackedDimInfo && dimensionInfo.type !== 'ordinal' && dimensionInfo.type !== 'time' && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)) {\n stackedDimInfo = dimensionInfo;\n }\n }\n });\n if (stackedDimInfo && !byIndex && !stackedByDimInfo) {\n // Compatible with previous design, value axis (time axis) only stack by index.\n // It may make sense if the user provides elaborately constructed data.\n byIndex = true;\n }\n // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`.\n // That put stack logic in List is for using conveniently in echarts extensions, but it\n // might not be a good way.\n if (stackedDimInfo) {\n // Use a weird name that not duplicated with other names.\n // Also need to use seriesModel.id as postfix because different\n // series may share same data store. The stack dimension needs to be distinguished.\n stackResultDimension = '__\\0ecstackresult_' + seriesModel.id;\n stackedOverDimension = '__\\0ecstackedover_' + seriesModel.id;\n // Create inverted index to fast query index by value.\n if (stackedByDimInfo) {\n stackedByDimInfo.createInvertedIndices = true;\n }\n var stackedDimCoordDim_1 = stackedDimInfo.coordDim;\n var stackedDimType = stackedDimInfo.type;\n var stackedDimCoordIndex_1 = 0;\n each(dimensionDefineList, function (dimensionInfo) {\n if (dimensionInfo.coordDim === stackedDimCoordDim_1) {\n stackedDimCoordIndex_1++;\n }\n });\n var stackedOverDimensionDefine = {\n name: stackResultDimension,\n coordDim: stackedDimCoordDim_1,\n coordDimIndex: stackedDimCoordIndex_1,\n type: stackedDimType,\n isExtraCoord: true,\n isCalculationCoord: true,\n storeDimIndex: dimensionDefineList.length\n };\n var stackResultDimensionDefine = {\n name: stackedOverDimension,\n // This dimension contains stack base (generally, 0), so do not set it as\n // `stackedDimCoordDim` to avoid extent calculation, consider log scale.\n coordDim: stackedOverDimension,\n coordDimIndex: stackedDimCoordIndex_1 + 1,\n type: stackedDimType,\n isExtraCoord: true,\n isCalculationCoord: true,\n storeDimIndex: dimensionDefineList.length + 1\n };\n if (schema) {\n if (store) {\n stackedOverDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackedOverDimension, stackedDimType);\n stackResultDimensionDefine.storeDimIndex = store.ensureCalculationDimension(stackResultDimension, stackedDimType);\n }\n schema.appendCalculationDimension(stackedOverDimensionDefine);\n schema.appendCalculationDimension(stackResultDimensionDefine);\n } else {\n dimensionDefineList.push(stackedOverDimensionDefine);\n dimensionDefineList.push(stackResultDimensionDefine);\n }\n }\n return {\n stackedDimension: stackedDimInfo && stackedDimInfo.name,\n stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,\n isStackedByIndex: byIndex,\n stackedOverDimension: stackedOverDimension,\n stackResultDimension: stackResultDimension\n };\n}\nfunction isLegacyDimensionsInput(dimensionsInput) {\n return !isSeriesDataSchema(dimensionsInput.schema);\n}\nexport function isDimensionStacked(data, stackedDim) {\n // Each single series only maps to one pair of axis. So we do not need to\n // check stackByDim, whatever stacked by a dimension or stacked by index.\n return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension');\n}\nexport function getStackedDimension(data, targetDim) {\n return isDimensionStacked(data, targetDim) ? data.getCalculationInfo('stackResultDimension') : targetDim;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport { getDimensionTypeByAxis } from '../../data/helper/dimensionHelper.js';\nimport { getDataItemValue } from '../../util/model.js';\nimport CoordinateSystem from '../../core/CoordinateSystem.js';\nimport { getCoordSysInfoBySeries } from '../../model/referHelper.js';\nimport { createSourceFromSeriesDataOption } from '../../data/Source.js';\nimport { enableDataStack } from '../../data/helper/dataStackHelper.js';\nimport { makeSeriesEncodeForAxisCoordSys } from '../../data/helper/sourceHelper.js';\nimport { SOURCE_FORMAT_ORIGINAL } from '../../util/types.js';\nfunction getCoordSysDimDefs(seriesModel, coordSysInfo) {\n var coordSysName = seriesModel.get('coordinateSystem');\n var registeredCoordSys = CoordinateSystem.get(coordSysName);\n var coordSysDimDefs;\n if (coordSysInfo && coordSysInfo.coordSysDims) {\n coordSysDimDefs = zrUtil.map(coordSysInfo.coordSysDims, function (dim) {\n var dimInfo = {\n name: dim\n };\n var axisModel = coordSysInfo.axisMap.get(dim);\n if (axisModel) {\n var axisType = axisModel.get('type');\n dimInfo.type = getDimensionTypeByAxis(axisType);\n }\n return dimInfo;\n });\n }\n if (!coordSysDimDefs) {\n // Get dimensions from registered coordinate system\n coordSysDimDefs = registeredCoordSys && (registeredCoordSys.getDimensionsInfo ? registeredCoordSys.getDimensionsInfo() : registeredCoordSys.dimensions.slice()) || ['x', 'y'];\n }\n return coordSysDimDefs;\n}\nfunction injectOrdinalMeta(dimInfoList, createInvertedIndices, coordSysInfo) {\n var firstCategoryDimIndex;\n var hasNameEncode;\n coordSysInfo && zrUtil.each(dimInfoList, function (dimInfo, dimIndex) {\n var coordDim = dimInfo.coordDim;\n var categoryAxisModel = coordSysInfo.categoryAxisMap.get(coordDim);\n if (categoryAxisModel) {\n if (firstCategoryDimIndex == null) {\n firstCategoryDimIndex = dimIndex;\n }\n dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();\n if (createInvertedIndices) {\n dimInfo.createInvertedIndices = true;\n }\n }\n if (dimInfo.otherDims.itemName != null) {\n hasNameEncode = true;\n }\n });\n if (!hasNameEncode && firstCategoryDimIndex != null) {\n dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;\n }\n return firstCategoryDimIndex;\n}\n/**\n * Caution: there are side effects to `sourceManager` in this method.\n * Should better only be called in `Series['getInitialData']`.\n */\nfunction createSeriesData(sourceRaw, seriesModel, opt) {\n opt = opt || {};\n var sourceManager = seriesModel.getSourceManager();\n var source;\n var isOriginalSource = false;\n if (sourceRaw) {\n isOriginalSource = true;\n source = createSourceFromSeriesDataOption(sourceRaw);\n } else {\n source = sourceManager.getSource();\n // Is series.data. not dataset.\n isOriginalSource = source.sourceFormat === SOURCE_FORMAT_ORIGINAL;\n }\n var coordSysInfo = getCoordSysInfoBySeries(seriesModel);\n var coordSysDimDefs = getCoordSysDimDefs(seriesModel, coordSysInfo);\n var useEncodeDefaulter = opt.useEncodeDefaulter;\n var encodeDefaulter = zrUtil.isFunction(useEncodeDefaulter) ? useEncodeDefaulter : useEncodeDefaulter ? zrUtil.curry(makeSeriesEncodeForAxisCoordSys, coordSysDimDefs, seriesModel) : null;\n var createDimensionOptions = {\n coordDimensions: coordSysDimDefs,\n generateCoord: opt.generateCoord,\n encodeDefine: seriesModel.getEncode(),\n encodeDefaulter: encodeDefaulter,\n canOmitUnusedDimensions: !isOriginalSource\n };\n var schema = prepareSeriesDataSchema(source, createDimensionOptions);\n var firstCategoryDimIndex = injectOrdinalMeta(schema.dimensions, opt.createInvertedIndices, coordSysInfo);\n var store = !isOriginalSource ? sourceManager.getSharedDataStore(schema) : null;\n var stackCalculationInfo = enableDataStack(seriesModel, {\n schema: schema,\n store: store\n });\n var data = new SeriesData(schema, seriesModel);\n data.setCalculationInfo(stackCalculationInfo);\n var dimValueGetter = firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source) ? function (itemOpt, dimName, dataIndex, dimIndex) {\n // Use dataIndex as ordinal value in categoryAxis\n return dimIndex === firstCategoryDimIndex ? dataIndex : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);\n } : null;\n data.hasItemOption = false;\n data.initData(\n // Try to reuse the data store in sourceManager if using dataset.\n isOriginalSource ? source : store, null, dimValueGetter);\n return data;\n}\nfunction isNeedCompleteOrdinalData(source) {\n if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n var sampleItem = firstDataNotNull(source.data || []);\n return !zrUtil.isArray(getDataItemValue(sampleItem));\n }\n}\nfunction firstDataNotNull(arr) {\n var i = 0;\n while (i < arr.length && arr[i] == null) {\n i++;\n }\n return arr[i];\n}\nexport default createSeriesData;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesData from '../helper/createSeriesData.js';\nimport SeriesModel from '../../model/Series.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport { Group } from '../../util/graphic.js';\nvar LineSeriesModel = /** @class */function (_super) {\n __extends(LineSeriesModel, _super);\n function LineSeriesModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = LineSeriesModel.type;\n _this.hasSymbolVisual = true;\n return _this;\n }\n LineSeriesModel.prototype.getInitialData = function (option) {\n if (process.env.NODE_ENV !== 'production') {\n var coordSys = option.coordinateSystem;\n if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {\n throw new Error('Line not support coordinateSystem besides cartesian and polar');\n }\n }\n return createSeriesData(null, this, {\n useEncodeDefaulter: true\n });\n };\n LineSeriesModel.prototype.getLegendIcon = function (opt) {\n var group = new Group();\n var line = createSymbol('line', 0, opt.itemHeight / 2, opt.itemWidth, 0, opt.lineStyle.stroke, false);\n group.add(line);\n line.setStyle(opt.lineStyle);\n var visualType = this.getData().getVisual('symbol');\n var visualRotate = this.getData().getVisual('symbolRotate');\n var symbolType = visualType === 'none' ? 'circle' : visualType;\n // Symbol size is 80% when there is a line\n var size = opt.itemHeight * 0.8;\n var symbol = createSymbol(symbolType, (opt.itemWidth - size) / 2, (opt.itemHeight - size) / 2, size, size, opt.itemStyle.fill);\n group.add(symbol);\n symbol.setStyle(opt.itemStyle);\n var symbolRotate = opt.iconRotate === 'inherit' ? visualRotate : opt.iconRotate || 0;\n symbol.rotation = symbolRotate * Math.PI / 180;\n symbol.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]);\n if (symbolType.indexOf('empty') > -1) {\n symbol.style.stroke = symbol.style.fill;\n symbol.style.fill = '#fff';\n symbol.style.lineWidth = 2;\n }\n return group;\n };\n LineSeriesModel.type = 'series.line';\n LineSeriesModel.dependencies = ['grid', 'polar'];\n LineSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 3,\n coordinateSystem: 'cartesian2d',\n legendHoverLink: true,\n clip: true,\n label: {\n position: 'top'\n },\n // itemStyle: {\n // },\n endLabel: {\n show: false,\n valueAnimation: true,\n distance: 8\n },\n lineStyle: {\n width: 2,\n type: 'solid'\n },\n emphasis: {\n scale: true\n },\n // areaStyle: {\n // origin of areaStyle. Valid values:\n // `'auto'/null/undefined`: from axisLine to data\n // `'start'`: from min to data\n // `'end'`: from data to max\n // origin: 'auto'\n // },\n // false, 'start', 'end', 'middle'\n step: false,\n // Disabled if step is true\n smooth: false,\n smoothMonotone: null,\n symbol: 'emptyCircle',\n symbolSize: 4,\n symbolRotate: null,\n showSymbol: true,\n // `false`: follow the label interval strategy.\n // `true`: show all symbols.\n // `'auto'`: If possible, show all symbols, otherwise\n // follow the label interval strategy.\n showAllSymbol: 'auto',\n // Whether to connect break point.\n connectNulls: false,\n // Sampling for large data. Can be: 'average', 'max', 'min', 'sum', 'lttb'.\n sampling: 'none',\n animationEasing: 'linear',\n // Disable progressive\n progressive: 0,\n hoverLayerThreshold: Infinity,\n universalTransition: {\n divideShape: 'clone'\n },\n triggerLineEvent: false\n };\n return LineSeriesModel;\n}(SeriesModel);\nexport default LineSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { retrieveRawValue } from '../../data/helper/dataProvider.js';\nimport { isArray } from 'zrender/lib/core/util.js';\n/**\n * @return label string. Not null/undefined\n */\nexport function getDefaultLabel(data, dataIndex) {\n var labelDims = data.mapDimensionsAll('defaultedLabel');\n var len = labelDims.length;\n // Simple optimization (in lots of cases, label dims length is 1)\n if (len === 1) {\n var rawVal = retrieveRawValue(data, dataIndex, labelDims[0]);\n return rawVal != null ? rawVal + '' : null;\n } else if (len) {\n var vals = [];\n for (var i = 0; i < labelDims.length; i++) {\n vals.push(retrieveRawValue(data, dataIndex, labelDims[i]));\n }\n return vals.join(' ');\n }\n}\nexport function getDefaultInterpolatedLabel(data, interpolatedValue) {\n var labelDims = data.mapDimensionsAll('defaultedLabel');\n if (!isArray(interpolatedValue)) {\n return interpolatedValue + '';\n }\n var vals = [];\n for (var i = 0; i < labelDims.length; i++) {\n var dimIndex = data.getDimensionIndex(labelDims[i]);\n if (dimIndex >= 0) {\n vals.push(interpolatedValue[dimIndex]);\n }\n }\n return vals.join(' ');\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { createSymbol, normalizeSymbolOffset, normalizeSymbolSize } from '../../util/symbol.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { enterEmphasis, leaveEmphasis, toggleHoverEmphasis } from '../../util/states.js';\nimport { getDefaultLabel } from './labelHelper.js';\nimport { extend } from 'zrender/lib/core/util.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport ZRImage from 'zrender/lib/graphic/Image.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nvar Symbol = /** @class */function (_super) {\n __extends(Symbol, _super);\n function Symbol(data, idx, seriesScope, opts) {\n var _this = _super.call(this) || this;\n _this.updateData(data, idx, seriesScope, opts);\n return _this;\n }\n Symbol.prototype._createSymbol = function (symbolType, data, idx, symbolSize, keepAspect) {\n // Remove paths created before\n this.removeAll();\n // let symbolPath = createSymbol(\n // symbolType, -0.5, -0.5, 1, 1, color\n // );\n // If width/height are set too small (e.g., set to 1) on ios10\n // and macOS Sierra, a circle stroke become a rect, no matter what\n // the scale is set. So we set width/height as 2. See #4150.\n var symbolPath = createSymbol(symbolType, -1, -1, 2, 2, null, keepAspect);\n symbolPath.attr({\n z2: 100,\n culling: true,\n scaleX: symbolSize[0] / 2,\n scaleY: symbolSize[1] / 2\n });\n // Rewrite drift method\n symbolPath.drift = driftSymbol;\n this._symbolType = symbolType;\n this.add(symbolPath);\n };\n /**\n * Stop animation\n * @param {boolean} toLastFrame\n */\n Symbol.prototype.stopSymbolAnimation = function (toLastFrame) {\n this.childAt(0).stopAnimation(null, toLastFrame);\n };\n Symbol.prototype.getSymbolType = function () {\n return this._symbolType;\n };\n /**\n * FIXME:\n * Caution: This method breaks the encapsulation of this module,\n * but it indeed brings convenience. So do not use the method\n * unless you detailedly know all the implements of `Symbol`,\n * especially animation.\n *\n * Get symbol path element.\n */\n Symbol.prototype.getSymbolPath = function () {\n return this.childAt(0);\n };\n /**\n * Highlight symbol\n */\n Symbol.prototype.highlight = function () {\n enterEmphasis(this.childAt(0));\n };\n /**\n * Downplay symbol\n */\n Symbol.prototype.downplay = function () {\n leaveEmphasis(this.childAt(0));\n };\n /**\n * @param {number} zlevel\n * @param {number} z\n */\n Symbol.prototype.setZ = function (zlevel, z) {\n var symbolPath = this.childAt(0);\n symbolPath.zlevel = zlevel;\n symbolPath.z = z;\n };\n Symbol.prototype.setDraggable = function (draggable, hasCursorOption) {\n var symbolPath = this.childAt(0);\n symbolPath.draggable = draggable;\n symbolPath.cursor = !hasCursorOption && draggable ? 'move' : symbolPath.cursor;\n };\n /**\n * Update symbol properties\n */\n Symbol.prototype.updateData = function (data, idx, seriesScope, opts) {\n this.silent = false;\n var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n var seriesModel = data.hostModel;\n var symbolSize = Symbol.getSymbolSize(data, idx);\n var isInit = symbolType !== this._symbolType;\n var disableAnimation = opts && opts.disableAnimation;\n if (isInit) {\n var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');\n this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);\n } else {\n var symbolPath = this.childAt(0);\n symbolPath.silent = false;\n var target = {\n scaleX: symbolSize[0] / 2,\n scaleY: symbolSize[1] / 2\n };\n disableAnimation ? symbolPath.attr(target) : graphic.updateProps(symbolPath, target, seriesModel, idx);\n saveOldStyle(symbolPath);\n }\n this._updateCommon(data, idx, symbolSize, seriesScope, opts);\n if (isInit) {\n var symbolPath = this.childAt(0);\n if (!disableAnimation) {\n var target = {\n scaleX: this._sizeX,\n scaleY: this._sizeY,\n style: {\n // Always fadeIn. Because it has fadeOut animation when symbol is removed..\n opacity: symbolPath.style.opacity\n }\n };\n symbolPath.scaleX = symbolPath.scaleY = 0;\n symbolPath.style.opacity = 0;\n graphic.initProps(symbolPath, target, seriesModel, idx);\n }\n }\n if (disableAnimation) {\n // Must stop leave transition manually if don't call initProps or updateProps.\n this.childAt(0).stopAnimation('leave');\n }\n };\n Symbol.prototype._updateCommon = function (data, idx, symbolSize, seriesScope, opts) {\n var symbolPath = this.childAt(0);\n var seriesModel = data.hostModel;\n var emphasisItemStyle;\n var blurItemStyle;\n var selectItemStyle;\n var focus;\n var blurScope;\n var emphasisDisabled;\n var labelStatesModels;\n var hoverScale;\n var cursorStyle;\n if (seriesScope) {\n emphasisItemStyle = seriesScope.emphasisItemStyle;\n blurItemStyle = seriesScope.blurItemStyle;\n selectItemStyle = seriesScope.selectItemStyle;\n focus = seriesScope.focus;\n blurScope = seriesScope.blurScope;\n labelStatesModels = seriesScope.labelStatesModels;\n hoverScale = seriesScope.hoverScale;\n cursorStyle = seriesScope.cursorStyle;\n emphasisDisabled = seriesScope.emphasisDisabled;\n }\n if (!seriesScope || data.hasItemOption) {\n var itemModel = seriesScope && seriesScope.itemModel ? seriesScope.itemModel : data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n emphasisItemStyle = emphasisModel.getModel('itemStyle').getItemStyle();\n selectItemStyle = itemModel.getModel(['select', 'itemStyle']).getItemStyle();\n blurItemStyle = itemModel.getModel(['blur', 'itemStyle']).getItemStyle();\n focus = emphasisModel.get('focus');\n blurScope = emphasisModel.get('blurScope');\n emphasisDisabled = emphasisModel.get('disabled');\n labelStatesModels = getLabelStatesModels(itemModel);\n hoverScale = emphasisModel.getShallow('scale');\n cursorStyle = itemModel.getShallow('cursor');\n }\n var symbolRotate = data.getItemVisual(idx, 'symbolRotate');\n symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n var symbolOffset = normalizeSymbolOffset(data.getItemVisual(idx, 'symbolOffset'), symbolSize);\n if (symbolOffset) {\n symbolPath.x = symbolOffset[0];\n symbolPath.y = symbolOffset[1];\n }\n cursorStyle && symbolPath.attr('cursor', cursorStyle);\n var symbolStyle = data.getItemVisual(idx, 'style');\n var visualColor = symbolStyle.fill;\n if (symbolPath instanceof ZRImage) {\n var pathStyle = symbolPath.style;\n symbolPath.useStyle(extend({\n // TODO other properties like x, y ?\n image: pathStyle.image,\n x: pathStyle.x,\n y: pathStyle.y,\n width: pathStyle.width,\n height: pathStyle.height\n }, symbolStyle));\n } else {\n if (symbolPath.__isEmptyBrush) {\n // fill and stroke will be swapped if it's empty.\n // So we cloned a new style to avoid it affecting the original style in visual storage.\n // TODO Better implementation. No empty logic!\n symbolPath.useStyle(extend({}, symbolStyle));\n } else {\n symbolPath.useStyle(symbolStyle);\n }\n // Disable decal because symbol scale will been applied on the decal.\n symbolPath.style.decal = null;\n symbolPath.setColor(visualColor, opts && opts.symbolInnerColor);\n symbolPath.style.strokeNoScale = true;\n }\n var liftZ = data.getItemVisual(idx, 'liftZ');\n var z2Origin = this._z2;\n if (liftZ != null) {\n if (z2Origin == null) {\n this._z2 = symbolPath.z2;\n symbolPath.z2 += liftZ;\n }\n } else if (z2Origin != null) {\n symbolPath.z2 = z2Origin;\n this._z2 = null;\n }\n var useNameLabel = opts && opts.useNameLabel;\n setLabelStyle(symbolPath, labelStatesModels, {\n labelFetcher: seriesModel,\n labelDataIndex: idx,\n defaultText: getLabelDefaultText,\n inheritColor: visualColor,\n defaultOpacity: symbolStyle.opacity\n });\n // Do not execute util needed.\n function getLabelDefaultText(idx) {\n return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);\n }\n this._sizeX = symbolSize[0] / 2;\n this._sizeY = symbolSize[1] / 2;\n var emphasisState = symbolPath.ensureState('emphasis');\n emphasisState.style = emphasisItemStyle;\n symbolPath.ensureState('select').style = selectItemStyle;\n symbolPath.ensureState('blur').style = blurItemStyle;\n // null / undefined / true means to use default strategy.\n // 0 / false / negative number / NaN / Infinity means no scale.\n var scaleRatio = hoverScale == null || hoverScale === true ? Math.max(1.1, 3 / this._sizeY)\n // PENDING: restrict hoverScale > 1? It seems unreasonable to scale down\n : isFinite(hoverScale) && hoverScale > 0 ? +hoverScale : 1;\n // always set scale to allow resetting\n emphasisState.scaleX = this._sizeX * scaleRatio;\n emphasisState.scaleY = this._sizeY * scaleRatio;\n this.setSymbolScale(1);\n toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled);\n };\n Symbol.prototype.setSymbolScale = function (scale) {\n this.scaleX = this.scaleY = scale;\n };\n Symbol.prototype.fadeOut = function (cb, seriesModel, opt) {\n var symbolPath = this.childAt(0);\n var dataIndex = getECData(this).dataIndex;\n var animationOpt = opt && opt.animation;\n // Avoid mistaken hover when fading out\n this.silent = symbolPath.silent = true;\n // Not show text when animating\n if (opt && opt.fadeLabel) {\n var textContent = symbolPath.getTextContent();\n if (textContent) {\n graphic.removeElement(textContent, {\n style: {\n opacity: 0\n }\n }, seriesModel, {\n dataIndex: dataIndex,\n removeOpt: animationOpt,\n cb: function () {\n symbolPath.removeTextContent();\n }\n });\n }\n } else {\n symbolPath.removeTextContent();\n }\n graphic.removeElement(symbolPath, {\n style: {\n opacity: 0\n },\n scaleX: 0,\n scaleY: 0\n }, seriesModel, {\n dataIndex: dataIndex,\n cb: cb,\n removeOpt: animationOpt\n });\n };\n Symbol.getSymbolSize = function (data, idx) {\n return normalizeSymbolSize(data.getItemVisual(idx, 'symbolSize'));\n };\n return Symbol;\n}(graphic.Group);\nfunction driftSymbol(dx, dy) {\n this.parent.drift(dx, dy);\n}\nexport default Symbol;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic.js';\nimport SymbolClz from './Symbol.js';\nimport { isObject } from 'zrender/lib/core/util.js';\nimport { getLabelStatesModels } from '../../label/labelStyle.js';\nfunction symbolNeedsDraw(data, point, idx, opt) {\n return point && !isNaN(point[0]) && !isNaN(point[1]) && !(opt.isIgnore && opt.isIgnore(idx))\n // We do not set clipShape on group, because it will cut part of\n // the symbol element shape. We use the same clip shape here as\n // the line clip.\n && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1])) && data.getItemVisual(idx, 'symbol') !== 'none';\n}\nfunction normalizeUpdateOpt(opt) {\n if (opt != null && !isObject(opt)) {\n opt = {\n isIgnore: opt\n };\n }\n return opt || {};\n}\nfunction makeSeriesScope(data) {\n var seriesModel = data.hostModel;\n var emphasisModel = seriesModel.getModel('emphasis');\n return {\n emphasisItemStyle: emphasisModel.getModel('itemStyle').getItemStyle(),\n blurItemStyle: seriesModel.getModel(['blur', 'itemStyle']).getItemStyle(),\n selectItemStyle: seriesModel.getModel(['select', 'itemStyle']).getItemStyle(),\n focus: emphasisModel.get('focus'),\n blurScope: emphasisModel.get('blurScope'),\n emphasisDisabled: emphasisModel.get('disabled'),\n hoverScale: emphasisModel.get('scale'),\n labelStatesModels: getLabelStatesModels(seriesModel),\n cursorStyle: seriesModel.get('cursor')\n };\n}\nvar SymbolDraw = /** @class */function () {\n function SymbolDraw(SymbolCtor) {\n this.group = new graphic.Group();\n this._SymbolCtor = SymbolCtor || SymbolClz;\n }\n /**\n * Update symbols draw by new data\n */\n SymbolDraw.prototype.updateData = function (data, opt) {\n // Remove progressive els.\n this._progressiveEls = null;\n opt = normalizeUpdateOpt(opt);\n var group = this.group;\n var seriesModel = data.hostModel;\n var oldData = this._data;\n var SymbolCtor = this._SymbolCtor;\n var disableAnimation = opt.disableAnimation;\n var seriesScope = makeSeriesScope(data);\n var symbolUpdateOpt = {\n disableAnimation: disableAnimation\n };\n var getSymbolPoint = opt.getSymbolPoint || function (idx) {\n return data.getItemLayout(idx);\n };\n // There is no oldLineData only when first rendering or switching from\n // stream mode to normal mode, where previous elements should be removed.\n if (!oldData) {\n group.removeAll();\n }\n data.diff(oldData).add(function (newIdx) {\n var point = getSymbolPoint(newIdx);\n if (symbolNeedsDraw(data, point, newIdx, opt)) {\n var symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);\n symbolEl.setPosition(point);\n data.setItemGraphicEl(newIdx, symbolEl);\n group.add(symbolEl);\n }\n }).update(function (newIdx, oldIdx) {\n var symbolEl = oldData.getItemGraphicEl(oldIdx);\n var point = getSymbolPoint(newIdx);\n if (!symbolNeedsDraw(data, point, newIdx, opt)) {\n group.remove(symbolEl);\n return;\n }\n var newSymbolType = data.getItemVisual(newIdx, 'symbol') || 'circle';\n var oldSymbolType = symbolEl && symbolEl.getSymbolType && symbolEl.getSymbolType();\n if (!symbolEl\n // Create a new if symbol type changed.\n || oldSymbolType && oldSymbolType !== newSymbolType) {\n group.remove(symbolEl);\n symbolEl = new SymbolCtor(data, newIdx, seriesScope, symbolUpdateOpt);\n symbolEl.setPosition(point);\n } else {\n symbolEl.updateData(data, newIdx, seriesScope, symbolUpdateOpt);\n var target = {\n x: point[0],\n y: point[1]\n };\n disableAnimation ? symbolEl.attr(target) : graphic.updateProps(symbolEl, target, seriesModel);\n }\n // Add back\n group.add(symbolEl);\n data.setItemGraphicEl(newIdx, symbolEl);\n }).remove(function (oldIdx) {\n var el = oldData.getItemGraphicEl(oldIdx);\n el && el.fadeOut(function () {\n group.remove(el);\n }, seriesModel);\n }).execute();\n this._getSymbolPoint = getSymbolPoint;\n this._data = data;\n };\n ;\n SymbolDraw.prototype.updateLayout = function () {\n var _this = this;\n var data = this._data;\n if (data) {\n // Not use animation\n data.eachItemGraphicEl(function (el, idx) {\n var point = _this._getSymbolPoint(idx);\n el.setPosition(point);\n el.markRedraw();\n });\n }\n };\n ;\n SymbolDraw.prototype.incrementalPrepareUpdate = function (data) {\n this._seriesScope = makeSeriesScope(data);\n this._data = null;\n this.group.removeAll();\n };\n ;\n /**\n * Update symbols draw by new data\n */\n SymbolDraw.prototype.incrementalUpdate = function (taskParams, data, opt) {\n // Clear\n this._progressiveEls = [];\n opt = normalizeUpdateOpt(opt);\n function updateIncrementalAndHover(el) {\n if (!el.isGroup) {\n el.incremental = true;\n el.ensureState('emphasis').hoverLayer = true;\n }\n }\n for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n var point = data.getItemLayout(idx);\n if (symbolNeedsDraw(data, point, idx, opt)) {\n var el = new this._SymbolCtor(data, idx, this._seriesScope);\n el.traverse(updateIncrementalAndHover);\n el.setPosition(point);\n this.group.add(el);\n data.setItemGraphicEl(idx, el);\n this._progressiveEls.push(el);\n }\n }\n };\n ;\n SymbolDraw.prototype.eachRendered = function (cb) {\n graphic.traverseElements(this._progressiveEls || this.group, cb);\n };\n SymbolDraw.prototype.remove = function (enableAnimation) {\n var group = this.group;\n var data = this._data;\n // Incremental model do not have this._data.\n if (data && enableAnimation) {\n data.eachItemGraphicEl(function (el) {\n el.fadeOut(function () {\n group.remove(el);\n }, data.hostModel);\n });\n } else {\n group.removeAll();\n }\n };\n ;\n return SymbolDraw;\n}();\nexport default SymbolDraw;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isDimensionStacked } from '../../data/helper/dataStackHelper.js';\nimport { isNumber, map } from 'zrender/lib/core/util.js';\nexport function prepareDataCoordInfo(coordSys, data, valueOrigin) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueStart = getValueStart(valueAxis, valueOrigin);\n var baseAxisDim = baseAxis.dim;\n var valueAxisDim = valueAxis.dim;\n var valueDim = data.mapDimension(valueAxisDim);\n var baseDim = data.mapDimension(baseAxisDim);\n var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n var dims = map(coordSys.dimensions, function (coordDim) {\n return data.mapDimension(coordDim);\n });\n var stacked = false;\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n if (isDimensionStacked(data, dims[0] /* , dims[1] */)) {\n // jshint ignore:line\n stacked = true;\n dims[0] = stackResultDim;\n }\n if (isDimensionStacked(data, dims[1] /* , dims[0] */)) {\n // jshint ignore:line\n stacked = true;\n dims[1] = stackResultDim;\n }\n return {\n dataDimsForPoint: dims,\n valueStart: valueStart,\n valueAxisDim: valueAxisDim,\n baseAxisDim: baseAxisDim,\n stacked: !!stacked,\n valueDim: valueDim,\n baseDim: baseDim,\n baseDataOffset: baseDataOffset,\n stackedOverDimension: data.getCalculationInfo('stackedOverDimension')\n };\n}\nfunction getValueStart(valueAxis, valueOrigin) {\n var valueStart = 0;\n var extent = valueAxis.scale.getExtent();\n if (valueOrigin === 'start') {\n valueStart = extent[0];\n } else if (valueOrigin === 'end') {\n valueStart = extent[1];\n }\n // If origin is specified as a number, use it as\n // valueStart directly\n else if (isNumber(valueOrigin) && !isNaN(valueOrigin)) {\n valueStart = valueOrigin;\n }\n // auto\n else {\n // Both positive\n if (extent[0] > 0) {\n valueStart = extent[0];\n }\n // Both negative\n else if (extent[1] < 0) {\n valueStart = extent[1];\n }\n // If is one positive, and one negative, onZero shall be true\n }\n\n return valueStart;\n}\nexport function getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n var value = NaN;\n if (dataCoordInfo.stacked) {\n value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\n }\n if (isNaN(value)) {\n value = dataCoordInfo.valueStart;\n }\n var baseDataOffset = dataCoordInfo.baseDataOffset;\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);\n stackedData[1 - baseDataOffset] = value;\n return coordSys.dataToPoint(stackedData);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isArray } from 'zrender/lib/core/util.js';\n/* global Float32Array */\nvar supportFloat32Array = typeof Float32Array !== 'undefined';\nvar Float32ArrayCtor = !supportFloat32Array ? Array : Float32Array;\nexport function createFloat32Array(arg) {\n if (isArray(arg)) {\n // Return self directly if don't support TypedArray.\n return supportFloat32Array ? new Float32Array(arg) : arg;\n }\n // Else is number\n return new Float32ArrayCtor(arg);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { prepareDataCoordInfo, getStackedOnPoint } from './helper.js';\nimport { createFloat32Array } from '../../util/vendor.js';\nfunction diffData(oldData, newData) {\n var diffResult = [];\n newData.diff(oldData).add(function (idx) {\n diffResult.push({\n cmd: '+',\n idx: idx\n });\n }).update(function (newIdx, oldIdx) {\n diffResult.push({\n cmd: '=',\n idx: oldIdx,\n idx1: newIdx\n });\n }).remove(function (idx) {\n diffResult.push({\n cmd: '-',\n idx: idx\n });\n }).execute();\n return diffResult;\n}\nexport default function lineAnimationDiff(oldData, newData, oldStackedOnPoints, newStackedOnPoints, oldCoordSys, newCoordSys, oldValueOrigin, newValueOrigin) {\n var diff = diffData(oldData, newData);\n // let newIdList = newData.mapArray(newData.getId);\n // let oldIdList = oldData.mapArray(oldData.getId);\n // convertToIntId(newIdList, oldIdList);\n // // FIXME One data ?\n // diff = arrayDiff(oldIdList, newIdList);\n var currPoints = [];\n var nextPoints = [];\n // Points for stacking base line\n var currStackedPoints = [];\n var nextStackedPoints = [];\n var status = [];\n var sortedIndices = [];\n var rawIndices = [];\n var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);\n // const oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);\n var oldPoints = oldData.getLayout('points') || [];\n var newPoints = newData.getLayout('points') || [];\n for (var i = 0; i < diff.length; i++) {\n var diffItem = diff[i];\n var pointAdded = true;\n var oldIdx2 = void 0;\n var newIdx2 = void 0;\n // FIXME, animation is not so perfect when dataZoom window moves fast\n // Which is in case remvoing or add more than one data in the tail or head\n switch (diffItem.cmd) {\n case '=':\n oldIdx2 = diffItem.idx * 2;\n newIdx2 = diffItem.idx1 * 2;\n var currentX = oldPoints[oldIdx2];\n var currentY = oldPoints[oldIdx2 + 1];\n var nextX = newPoints[newIdx2];\n var nextY = newPoints[newIdx2 + 1];\n // If previous data is NaN, use next point directly\n if (isNaN(currentX) || isNaN(currentY)) {\n currentX = nextX;\n currentY = nextY;\n }\n currPoints.push(currentX, currentY);\n nextPoints.push(nextX, nextY);\n currStackedPoints.push(oldStackedOnPoints[oldIdx2], oldStackedOnPoints[oldIdx2 + 1]);\n nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);\n rawIndices.push(newData.getRawIndex(diffItem.idx1));\n break;\n case '+':\n var newIdx = diffItem.idx;\n var newDataDimsForPoint = newDataOldCoordInfo.dataDimsForPoint;\n var oldPt = oldCoordSys.dataToPoint([newData.get(newDataDimsForPoint[0], newIdx), newData.get(newDataDimsForPoint[1], newIdx)]);\n newIdx2 = newIdx * 2;\n currPoints.push(oldPt[0], oldPt[1]);\n nextPoints.push(newPoints[newIdx2], newPoints[newIdx2 + 1]);\n var stackedOnPoint = getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, newIdx);\n currStackedPoints.push(stackedOnPoint[0], stackedOnPoint[1]);\n nextStackedPoints.push(newStackedOnPoints[newIdx2], newStackedOnPoints[newIdx2 + 1]);\n rawIndices.push(newData.getRawIndex(newIdx));\n break;\n case '-':\n pointAdded = false;\n }\n // Original indices\n if (pointAdded) {\n status.push(diffItem);\n sortedIndices.push(sortedIndices.length);\n }\n }\n // Diff result may be crossed if all items are changed\n // Sort by data index\n sortedIndices.sort(function (a, b) {\n return rawIndices[a] - rawIndices[b];\n });\n var len = currPoints.length;\n var sortedCurrPoints = createFloat32Array(len);\n var sortedNextPoints = createFloat32Array(len);\n var sortedCurrStackedPoints = createFloat32Array(len);\n var sortedNextStackedPoints = createFloat32Array(len);\n var sortedStatus = [];\n for (var i = 0; i < sortedIndices.length; i++) {\n var idx = sortedIndices[i];\n var i2 = i * 2;\n var idx2 = idx * 2;\n sortedCurrPoints[i2] = currPoints[idx2];\n sortedCurrPoints[i2 + 1] = currPoints[idx2 + 1];\n sortedNextPoints[i2] = nextPoints[idx2];\n sortedNextPoints[i2 + 1] = nextPoints[idx2 + 1];\n sortedCurrStackedPoints[i2] = currStackedPoints[idx2];\n sortedCurrStackedPoints[i2 + 1] = currStackedPoints[idx2 + 1];\n sortedNextStackedPoints[i2] = nextStackedPoints[idx2];\n sortedNextStackedPoints[i2 + 1] = nextStackedPoints[idx2 + 1];\n sortedStatus[i] = status[idx];\n }\n return {\n current: sortedCurrPoints,\n next: sortedNextPoints,\n stackedOnCurrent: sortedCurrStackedPoints,\n stackedOnNext: sortedNextStackedPoints,\n status: sortedStatus\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n// Poly path support NaN point\nimport Path from 'zrender/lib/graphic/Path.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { cubicRootAt, cubicAt } from 'zrender/lib/core/curve.js';\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nfunction isPointNull(x, y) {\n return isNaN(x) || isNaN(y);\n}\n/**\n * Draw smoothed line in non-monotone, in may cause undesired curve in extreme\n * situations. This should be used when points are non-monotone neither in x or\n * y dimension.\n */\nfunction drawSegment(ctx, points, start, segLen, allLen, dir, smooth, smoothMonotone, connectNulls) {\n var prevX;\n var prevY;\n var cpx0;\n var cpy0;\n var cpx1;\n var cpy1;\n var idx = start;\n var k = 0;\n for (; k < segLen; k++) {\n var x = points[idx * 2];\n var y = points[idx * 2 + 1];\n if (idx >= allLen || idx < 0) {\n break;\n }\n if (isPointNull(x, y)) {\n if (connectNulls) {\n idx += dir;\n continue;\n }\n break;\n }\n if (idx === start) {\n ctx[dir > 0 ? 'moveTo' : 'lineTo'](x, y);\n cpx0 = x;\n cpy0 = y;\n } else {\n var dx = x - prevX;\n var dy = y - prevY;\n // Ignore tiny segment.\n if (dx * dx + dy * dy < 0.5) {\n idx += dir;\n continue;\n }\n if (smooth > 0) {\n var nextIdx = idx + dir;\n var nextX = points[nextIdx * 2];\n var nextY = points[nextIdx * 2 + 1];\n // Ignore duplicate point\n while (nextX === x && nextY === y && k < segLen) {\n k++;\n nextIdx += dir;\n idx += dir;\n nextX = points[nextIdx * 2];\n nextY = points[nextIdx * 2 + 1];\n x = points[idx * 2];\n y = points[idx * 2 + 1];\n dx = x - prevX;\n dy = y - prevY;\n }\n var tmpK = k + 1;\n if (connectNulls) {\n // Find next point not null\n while (isPointNull(nextX, nextY) && tmpK < segLen) {\n tmpK++;\n nextIdx += dir;\n nextX = points[nextIdx * 2];\n nextY = points[nextIdx * 2 + 1];\n }\n }\n var ratioNextSeg = 0.5;\n var vx = 0;\n var vy = 0;\n var nextCpx0 = void 0;\n var nextCpy0 = void 0;\n // Is last point\n if (tmpK >= segLen || isPointNull(nextX, nextY)) {\n cpx1 = x;\n cpy1 = y;\n } else {\n vx = nextX - prevX;\n vy = nextY - prevY;\n var dx0 = x - prevX;\n var dx1 = nextX - x;\n var dy0 = y - prevY;\n var dy1 = nextY - y;\n var lenPrevSeg = void 0;\n var lenNextSeg = void 0;\n if (smoothMonotone === 'x') {\n lenPrevSeg = Math.abs(dx0);\n lenNextSeg = Math.abs(dx1);\n var dir_1 = vx > 0 ? 1 : -1;\n cpx1 = x - dir_1 * lenPrevSeg * smooth;\n cpy1 = y;\n nextCpx0 = x + dir_1 * lenNextSeg * smooth;\n nextCpy0 = y;\n } else if (smoothMonotone === 'y') {\n lenPrevSeg = Math.abs(dy0);\n lenNextSeg = Math.abs(dy1);\n var dir_2 = vy > 0 ? 1 : -1;\n cpx1 = x;\n cpy1 = y - dir_2 * lenPrevSeg * smooth;\n nextCpx0 = x;\n nextCpy0 = y + dir_2 * lenNextSeg * smooth;\n } else {\n lenPrevSeg = Math.sqrt(dx0 * dx0 + dy0 * dy0);\n lenNextSeg = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n // Use ratio of seg length\n ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n cpx1 = x - vx * smooth * (1 - ratioNextSeg);\n cpy1 = y - vy * smooth * (1 - ratioNextSeg);\n // cp0 of next segment\n nextCpx0 = x + vx * smooth * ratioNextSeg;\n nextCpy0 = y + vy * smooth * ratioNextSeg;\n // Smooth constraint between point and next point.\n // Avoid exceeding extreme after smoothing.\n nextCpx0 = mathMin(nextCpx0, mathMax(nextX, x));\n nextCpy0 = mathMin(nextCpy0, mathMax(nextY, y));\n nextCpx0 = mathMax(nextCpx0, mathMin(nextX, x));\n nextCpy0 = mathMax(nextCpy0, mathMin(nextY, y));\n // Reclaculate cp1 based on the adjusted cp0 of next seg.\n vx = nextCpx0 - x;\n vy = nextCpy0 - y;\n cpx1 = x - vx * lenPrevSeg / lenNextSeg;\n cpy1 = y - vy * lenPrevSeg / lenNextSeg;\n // Smooth constraint between point and prev point.\n // Avoid exceeding extreme after smoothing.\n cpx1 = mathMin(cpx1, mathMax(prevX, x));\n cpy1 = mathMin(cpy1, mathMax(prevY, y));\n cpx1 = mathMax(cpx1, mathMin(prevX, x));\n cpy1 = mathMax(cpy1, mathMin(prevY, y));\n // Adjust next cp0 again.\n vx = x - cpx1;\n vy = y - cpy1;\n nextCpx0 = x + vx * lenNextSeg / lenPrevSeg;\n nextCpy0 = y + vy * lenNextSeg / lenPrevSeg;\n }\n }\n ctx.bezierCurveTo(cpx0, cpy0, cpx1, cpy1, x, y);\n cpx0 = nextCpx0;\n cpy0 = nextCpy0;\n } else {\n ctx.lineTo(x, y);\n }\n }\n prevX = x;\n prevY = y;\n idx += dir;\n }\n return k;\n}\nvar ECPolylineShape = /** @class */function () {\n function ECPolylineShape() {\n this.smooth = 0;\n this.smoothConstraint = true;\n }\n return ECPolylineShape;\n}();\nvar ECPolyline = /** @class */function (_super) {\n __extends(ECPolyline, _super);\n function ECPolyline(opts) {\n var _this = _super.call(this, opts) || this;\n _this.type = 'ec-polyline';\n return _this;\n }\n ECPolyline.prototype.getDefaultStyle = function () {\n return {\n stroke: '#000',\n fill: null\n };\n };\n ECPolyline.prototype.getDefaultShape = function () {\n return new ECPolylineShape();\n };\n ECPolyline.prototype.buildPath = function (ctx, shape) {\n var points = shape.points;\n var i = 0;\n var len = points.length / 2;\n // const result = getBoundingBox(points, shape.smoothConstraint);\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n for (; i < len; i++) {\n if (!isPointNull(points[i * 2], points[i * 2 + 1])) {\n break;\n }\n }\n }\n while (i < len) {\n i += drawSegment(ctx, points, i, len, len, 1, shape.smooth, shape.smoothMonotone, shape.connectNulls) + 1;\n }\n };\n ECPolyline.prototype.getPointOn = function (xOrY, dim) {\n if (!this.path) {\n this.createPathProxy();\n this.buildPath(this.path, this.shape);\n }\n var path = this.path;\n var data = path.data;\n var CMD = PathProxy.CMD;\n var x0;\n var y0;\n var isDimX = dim === 'x';\n var roots = [];\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n var x = void 0;\n var y = void 0;\n var x2 = void 0;\n var y2 = void 0;\n var x3 = void 0;\n var y3 = void 0;\n var t = void 0;\n switch (cmd) {\n case CMD.M:\n x0 = data[i++];\n y0 = data[i++];\n break;\n case CMD.L:\n x = data[i++];\n y = data[i++];\n t = isDimX ? (xOrY - x0) / (x - x0) : (xOrY - y0) / (y - y0);\n if (t <= 1 && t >= 0) {\n var val = isDimX ? (y - y0) * t + y0 : (x - x0) * t + x0;\n return isDimX ? [xOrY, val] : [val, xOrY];\n }\n x0 = x;\n y0 = y;\n break;\n case CMD.C:\n x = data[i++];\n y = data[i++];\n x2 = data[i++];\n y2 = data[i++];\n x3 = data[i++];\n y3 = data[i++];\n var nRoot = isDimX ? cubicRootAt(x0, x, x2, x3, xOrY, roots) : cubicRootAt(y0, y, y2, y3, xOrY, roots);\n if (nRoot > 0) {\n for (var i_1 = 0; i_1 < nRoot; i_1++) {\n var t_1 = roots[i_1];\n if (t_1 <= 1 && t_1 >= 0) {\n var val = isDimX ? cubicAt(y0, y, y2, y3, t_1) : cubicAt(x0, x, x2, x3, t_1);\n return isDimX ? [xOrY, val] : [val, xOrY];\n }\n }\n }\n x0 = x3;\n y0 = y3;\n break;\n }\n }\n };\n return ECPolyline;\n}(Path);\nexport { ECPolyline };\nvar ECPolygonShape = /** @class */function (_super) {\n __extends(ECPolygonShape, _super);\n function ECPolygonShape() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return ECPolygonShape;\n}(ECPolylineShape);\nvar ECPolygon = /** @class */function (_super) {\n __extends(ECPolygon, _super);\n function ECPolygon(opts) {\n var _this = _super.call(this, opts) || this;\n _this.type = 'ec-polygon';\n return _this;\n }\n ECPolygon.prototype.getDefaultShape = function () {\n return new ECPolygonShape();\n };\n ECPolygon.prototype.buildPath = function (ctx, shape) {\n var points = shape.points;\n var stackedOnPoints = shape.stackedOnPoints;\n var i = 0;\n var len = points.length / 2;\n var smoothMonotone = shape.smoothMonotone;\n if (shape.connectNulls) {\n // Must remove first and last null values avoid draw error in polygon\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n for (; i < len; i++) {\n if (!isPointNull(points[i * 2], points[i * 2 + 1])) {\n break;\n }\n }\n }\n while (i < len) {\n var k = drawSegment(ctx, points, i, len, len, 1, shape.smooth, smoothMonotone, shape.connectNulls);\n drawSegment(ctx, stackedOnPoints, i + k - 1, k, len, -1, shape.stackedOnSmooth, smoothMonotone, shape.connectNulls);\n i += k + 1;\n ctx.closePath();\n }\n };\n return ECPolygon;\n}(Path);\nexport { ECPolygon };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as graphic from '../../util/graphic.js';\nimport { round } from '../../util/number.js';\nimport { isFunction } from 'zrender/lib/core/util.js';\nfunction createGridClipPath(cartesian, hasAnimation, seriesModel, done, during) {\n var rect = cartesian.getArea();\n var x = rect.x;\n var y = rect.y;\n var width = rect.width;\n var height = rect.height;\n var lineWidth = seriesModel.get(['lineStyle', 'width']) || 2;\n // Expand the clip path a bit to avoid the border is clipped and looks thinner\n x -= lineWidth / 2;\n y -= lineWidth / 2;\n width += lineWidth;\n height += lineWidth;\n // fix: https://github.com/apache/incubator-echarts/issues/11369\n width = Math.ceil(width);\n if (x !== Math.floor(x)) {\n x = Math.floor(x);\n // if no extra 1px on `width`, it will still be clipped since `x` is floored\n width++;\n }\n var clipPath = new graphic.Rect({\n shape: {\n x: x,\n y: y,\n width: width,\n height: height\n }\n });\n if (hasAnimation) {\n var baseAxis = cartesian.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isAxisInversed = baseAxis.inverse;\n if (isHorizontal) {\n if (isAxisInversed) {\n clipPath.shape.x += width;\n }\n clipPath.shape.width = 0;\n } else {\n if (!isAxisInversed) {\n clipPath.shape.y += height;\n }\n clipPath.shape.height = 0;\n }\n var duringCb = isFunction(during) ? function (percent) {\n during(percent, clipPath);\n } : null;\n graphic.initProps(clipPath, {\n shape: {\n width: width,\n height: height,\n x: x,\n y: y\n }\n }, seriesModel, null, done, duringCb);\n }\n return clipPath;\n}\nfunction createPolarClipPath(polar, hasAnimation, seriesModel) {\n var sectorArea = polar.getArea();\n // Avoid float number rounding error for symbol on the edge of axis extent.\n var r0 = round(sectorArea.r0, 1);\n var r = round(sectorArea.r, 1);\n var clipPath = new graphic.Sector({\n shape: {\n cx: round(polar.cx, 1),\n cy: round(polar.cy, 1),\n r0: r0,\n r: r,\n startAngle: sectorArea.startAngle,\n endAngle: sectorArea.endAngle,\n clockwise: sectorArea.clockwise\n }\n });\n if (hasAnimation) {\n var isRadial = polar.getBaseAxis().dim === 'angle';\n if (isRadial) {\n clipPath.shape.endAngle = sectorArea.startAngle;\n } else {\n clipPath.shape.r = r0;\n }\n graphic.initProps(clipPath, {\n shape: {\n endAngle: sectorArea.endAngle,\n r: r\n }\n }, seriesModel);\n }\n return clipPath;\n}\nfunction createClipPath(coordSys, hasAnimation, seriesModel, done, during) {\n if (!coordSys) {\n return null;\n } else if (coordSys.type === 'polar') {\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n } else if (coordSys.type === 'cartesian2d') {\n return createGridClipPath(coordSys, hasAnimation, seriesModel, done, during);\n }\n return null;\n}\nexport { createGridClipPath, createPolarClipPath, createClipPath };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport function isCoordinateSystemType(coordSys, type) {\n return coordSys.type === type;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n// FIXME step not support polar\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport SymbolDraw from '../helper/SymbolDraw.js';\nimport SymbolClz from '../helper/Symbol.js';\nimport lineAnimationDiff from './lineAnimationDiff.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as modelUtil from '../../util/model.js';\nimport { ECPolyline, ECPolygon } from './poly.js';\nimport ChartView from '../../view/Chart.js';\nimport { prepareDataCoordInfo, getStackedOnPoint } from './helper.js';\nimport { createGridClipPath, createPolarClipPath } from '../helper/createClipPathFromCoordSys.js';\nimport { isCoordinateSystemType } from '../../coord/CoordinateSystem.js';\nimport { setStatesStylesFromModel, setStatesFlag, toggleHoverEmphasis, SPECIAL_STATES } from '../../util/states.js';\nimport { setLabelStyle, getLabelStatesModels, labelInner } from '../../label/labelStyle.js';\nimport { getDefaultLabel, getDefaultInterpolatedLabel } from '../helper/labelHelper.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createFloat32Array } from '../../util/vendor.js';\nimport { convertToColorString } from '../../util/format.js';\nimport { lerp } from 'zrender/lib/tool/color.js';\nfunction isPointsSame(points1, points2) {\n if (points1.length !== points2.length) {\n return;\n }\n for (var i = 0; i < points1.length; i++) {\n if (points1[i] !== points2[i]) {\n return;\n }\n }\n return true;\n}\nfunction bboxFromPoints(points) {\n var minX = Infinity;\n var minY = Infinity;\n var maxX = -Infinity;\n var maxY = -Infinity;\n for (var i = 0; i < points.length;) {\n var x = points[i++];\n var y = points[i++];\n if (!isNaN(x)) {\n minX = Math.min(x, minX);\n maxX = Math.max(x, maxX);\n }\n if (!isNaN(y)) {\n minY = Math.min(y, minY);\n maxY = Math.max(y, maxY);\n }\n }\n return [[minX, minY], [maxX, maxY]];\n}\nfunction getBoundingDiff(points1, points2) {\n var _a = bboxFromPoints(points1),\n min1 = _a[0],\n max1 = _a[1];\n var _b = bboxFromPoints(points2),\n min2 = _b[0],\n max2 = _b[1];\n // Get a max value from each corner of two boundings.\n return Math.max(Math.abs(min1[0] - min2[0]), Math.abs(min1[1] - min2[1]), Math.abs(max1[0] - max2[0]), Math.abs(max1[1] - max2[1]));\n}\nfunction getSmooth(smooth) {\n return zrUtil.isNumber(smooth) ? smooth : smooth ? 0.5 : 0;\n}\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n if (!dataCoordInfo.valueDim) {\n return [];\n }\n var len = data.count();\n var points = createFloat32Array(len * 2);\n for (var idx = 0; idx < len; idx++) {\n var pt = getStackedOnPoint(dataCoordInfo, coordSys, data, idx);\n points[idx * 2] = pt[0];\n points[idx * 2 + 1] = pt[1];\n }\n return points;\n}\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt, connectNulls) {\n var baseAxis = coordSys.getBaseAxis();\n var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n var stepPoints = [];\n var i = 0;\n var stepPt = [];\n var pt = [];\n var nextPt = [];\n var filteredPoints = [];\n if (connectNulls) {\n for (i = 0; i < points.length; i += 2) {\n if (!isNaN(points[i]) && !isNaN(points[i + 1])) {\n filteredPoints.push(points[i], points[i + 1]);\n }\n }\n points = filteredPoints;\n }\n for (i = 0; i < points.length - 2; i += 2) {\n nextPt[0] = points[i + 2];\n nextPt[1] = points[i + 3];\n pt[0] = points[i];\n pt[1] = points[i + 1];\n stepPoints.push(pt[0], pt[1]);\n switch (stepTurnAt) {\n case 'end':\n stepPt[baseIndex] = nextPt[baseIndex];\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n break;\n case 'middle':\n var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n var stepPt2 = [];\n stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n stepPt[1 - baseIndex] = pt[1 - baseIndex];\n stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n stepPoints.push(stepPt2[0], stepPt2[1]);\n break;\n default:\n // default is start\n stepPt[baseIndex] = pt[baseIndex];\n stepPt[1 - baseIndex] = nextPt[1 - baseIndex];\n stepPoints.push(stepPt[0], stepPt[1]);\n }\n }\n // Last points\n stepPoints.push(points[i++], points[i++]);\n return stepPoints;\n}\n/**\n * Clip color stops to edge. Avoid creating too large gradients.\n * Which may lead to blurry when GPU acceleration is enabled. See #15680\n *\n * The stops has been sorted from small to large.\n */\nfunction clipColorStops(colorStops, maxSize) {\n var newColorStops = [];\n var len = colorStops.length;\n // coord will always < 0 in prevOutOfRangeColorStop.\n var prevOutOfRangeColorStop;\n var prevInRangeColorStop;\n function lerpStop(stop0, stop1, clippedCoord) {\n var coord0 = stop0.coord;\n var p = (clippedCoord - coord0) / (stop1.coord - coord0);\n var color = lerp(p, [stop0.color, stop1.color]);\n return {\n coord: clippedCoord,\n color: color\n };\n }\n for (var i = 0; i < len; i++) {\n var stop_1 = colorStops[i];\n var coord = stop_1.coord;\n if (coord < 0) {\n prevOutOfRangeColorStop = stop_1;\n } else if (coord > maxSize) {\n if (prevInRangeColorStop) {\n newColorStops.push(lerpStop(prevInRangeColorStop, stop_1, maxSize));\n } else if (prevOutOfRangeColorStop) {\n // If there are two stops and coord range is between these two stops\n newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0), lerpStop(prevOutOfRangeColorStop, stop_1, maxSize));\n }\n // All following stop will be out of range. So just ignore them.\n break;\n } else {\n if (prevOutOfRangeColorStop) {\n newColorStops.push(lerpStop(prevOutOfRangeColorStop, stop_1, 0));\n // Reset\n prevOutOfRangeColorStop = null;\n }\n newColorStops.push(stop_1);\n prevInRangeColorStop = stop_1;\n }\n }\n return newColorStops;\n}\nfunction getVisualGradient(data, coordSys, api) {\n var visualMetaList = data.getVisual('visualMeta');\n if (!visualMetaList || !visualMetaList.length || !data.count()) {\n // When data.count() is 0, gradient range can not be calculated.\n return;\n }\n if (coordSys.type !== 'cartesian2d') {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Visual map on line style is only supported on cartesian2d.');\n }\n return;\n }\n var coordDim;\n var visualMeta;\n for (var i = visualMetaList.length - 1; i >= 0; i--) {\n var dimInfo = data.getDimensionInfo(visualMetaList[i].dimension);\n coordDim = dimInfo && dimInfo.coordDim;\n // Can only be x or y\n if (coordDim === 'x' || coordDim === 'y') {\n visualMeta = visualMetaList[i];\n break;\n }\n }\n if (!visualMeta) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Visual map on line style only support x or y dimension.');\n }\n return;\n }\n // If the area to be rendered is bigger than area defined by LinearGradient,\n // the canvas spec prescribes that the color of the first stop and the last\n // stop should be used. But if two stops are added at offset 0, in effect\n // browsers use the color of the second stop to render area outside\n // LinearGradient. So we can only infinitesimally extend area defined in\n // LinearGradient to render `outerColors`.\n var axis = coordSys.getAxis(coordDim);\n // dataToCoord mapping may not be linear, but must be monotonic.\n var colorStops = zrUtil.map(visualMeta.stops, function (stop) {\n // offset will be calculated later.\n return {\n coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),\n color: stop.color\n };\n });\n var stopLen = colorStops.length;\n var outerColors = visualMeta.outerColors.slice();\n if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n colorStops.reverse();\n outerColors.reverse();\n }\n var colorStopsInRange = clipColorStops(colorStops, coordDim === 'x' ? api.getWidth() : api.getHeight());\n var inRangeStopLen = colorStopsInRange.length;\n if (!inRangeStopLen && stopLen) {\n // All stops are out of range. All will be the same color.\n return colorStops[0].coord < 0 ? outerColors[1] ? outerColors[1] : colorStops[stopLen - 1].color : outerColors[0] ? outerColors[0] : colorStops[0].color;\n }\n var tinyExtent = 10; // Arbitrary value: 10px\n var minCoord = colorStopsInRange[0].coord - tinyExtent;\n var maxCoord = colorStopsInRange[inRangeStopLen - 1].coord + tinyExtent;\n var coordSpan = maxCoord - minCoord;\n if (coordSpan < 1e-3) {\n return 'transparent';\n }\n zrUtil.each(colorStopsInRange, function (stop) {\n stop.offset = (stop.coord - minCoord) / coordSpan;\n });\n colorStopsInRange.push({\n // NOTE: inRangeStopLen may still be 0 if stoplen is zero.\n offset: inRangeStopLen ? colorStopsInRange[inRangeStopLen - 1].offset : 0.5,\n color: outerColors[1] || 'transparent'\n });\n colorStopsInRange.unshift({\n offset: inRangeStopLen ? colorStopsInRange[0].offset : 0.5,\n color: outerColors[0] || 'transparent'\n });\n var gradient = new graphic.LinearGradient(0, 0, 0, 0, colorStopsInRange, true);\n gradient[coordDim] = minCoord;\n gradient[coordDim + '2'] = maxCoord;\n return gradient;\n}\nfunction getIsIgnoreFunc(seriesModel, data, coordSys) {\n var showAllSymbol = seriesModel.get('showAllSymbol');\n var isAuto = showAllSymbol === 'auto';\n if (showAllSymbol && !isAuto) {\n return;\n }\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n if (!categoryAxis) {\n return;\n }\n // Note that category label interval strategy might bring some weird effect\n // in some scenario: users may wonder why some of the symbols are not\n // displayed. So we show all symbols as possible as we can.\n if (isAuto\n // Simplify the logic, do not determine label overlap here.\n && canShowAllSymbolForCategory(categoryAxis, data)) {\n return;\n }\n // Otherwise follow the label interval strategy on category axis.\n var categoryDataDim = data.mapDimension(categoryAxis.dim);\n var labelMap = {};\n zrUtil.each(categoryAxis.getViewLabels(), function (labelItem) {\n var ordinalNumber = categoryAxis.scale.getRawOrdinalNumber(labelItem.tickValue);\n labelMap[ordinalNumber] = 1;\n });\n return function (dataIndex) {\n return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));\n };\n}\nfunction canShowAllSymbolForCategory(categoryAxis, data) {\n // In most cases, line is monotonous on category axis, and the label size\n // is close with each other. So we check the symbol size and some of the\n // label size alone with the category axis to estimate whether all symbol\n // can be shown without overlap.\n var axisExtent = categoryAxis.getExtent();\n var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();\n isNaN(availSize) && (availSize = 0); // 0/0 is NaN.\n // Sampling some points, max 5.\n var dataLen = data.count();\n var step = Math.max(1, Math.round(dataLen / 5));\n for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n if (SymbolClz.getSymbolSize(data, dataIndex\n // Only for cartesian, where `isHorizontal` exists.\n )[categoryAxis.isHorizontal() ? 1 : 0]\n // Empirical number\n * 1.5 > availSize) {\n return false;\n }\n }\n return true;\n}\nfunction isPointNull(x, y) {\n return isNaN(x) || isNaN(y);\n}\nfunction getLastIndexNotNull(points) {\n var len = points.length / 2;\n for (; len > 0; len--) {\n if (!isPointNull(points[len * 2 - 2], points[len * 2 - 1])) {\n break;\n }\n }\n return len - 1;\n}\nfunction getPointAtIndex(points, idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n}\nfunction getIndexRange(points, xOrY, dim) {\n var len = points.length / 2;\n var dimIdx = dim === 'x' ? 0 : 1;\n var a;\n var b;\n var prevIndex = 0;\n var nextIndex = -1;\n for (var i = 0; i < len; i++) {\n b = points[i * 2 + dimIdx];\n if (isNaN(b) || isNaN(points[i * 2 + 1 - dimIdx])) {\n continue;\n }\n if (i === 0) {\n a = b;\n continue;\n }\n if (a <= xOrY && b >= xOrY || a >= xOrY && b <= xOrY) {\n nextIndex = i;\n break;\n }\n prevIndex = i;\n a = b;\n }\n return {\n range: [prevIndex, nextIndex],\n t: (xOrY - a) / (b - a)\n };\n}\nfunction anyStateShowEndLabel(seriesModel) {\n if (seriesModel.get(['endLabel', 'show'])) {\n return true;\n }\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n if (seriesModel.get([SPECIAL_STATES[i], 'endLabel', 'show'])) {\n return true;\n }\n }\n return false;\n}\nfunction createLineClipPath(lineView, coordSys, hasAnimation, seriesModel) {\n if (isCoordinateSystemType(coordSys, 'cartesian2d')) {\n var endLabelModel_1 = seriesModel.getModel('endLabel');\n var valueAnimation_1 = endLabelModel_1.get('valueAnimation');\n var data_1 = seriesModel.getData();\n var labelAnimationRecord_1 = {\n lastFrameIndex: 0\n };\n var during = anyStateShowEndLabel(seriesModel) ? function (percent, clipRect) {\n lineView._endLabelOnDuring(percent, clipRect, data_1, labelAnimationRecord_1, valueAnimation_1, endLabelModel_1, coordSys);\n } : null;\n var isHorizontal = coordSys.getBaseAxis().isHorizontal();\n var clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, function () {\n var endLabel = lineView._endLabel;\n if (endLabel && hasAnimation) {\n if (labelAnimationRecord_1.originalX != null) {\n endLabel.attr({\n x: labelAnimationRecord_1.originalX,\n y: labelAnimationRecord_1.originalY\n });\n }\n }\n }, during);\n // Expand clip shape to avoid clipping when line value exceeds axis\n if (!seriesModel.get('clip', true)) {\n var rectShape = clipPath.shape;\n var expandSize = Math.max(rectShape.width, rectShape.height);\n if (isHorizontal) {\n rectShape.y -= expandSize;\n rectShape.height += expandSize * 2;\n } else {\n rectShape.x -= expandSize;\n rectShape.width += expandSize * 2;\n }\n }\n // Set to the final frame. To make sure label layout is right.\n if (during) {\n during(1, clipPath);\n }\n return clipPath;\n } else {\n if (process.env.NODE_ENV !== 'production') {\n if (seriesModel.get(['endLabel', 'show'])) {\n console.warn('endLabel is not supported for lines in polar systems.');\n }\n }\n return createPolarClipPath(coordSys, hasAnimation, seriesModel);\n }\n}\nfunction getEndLabelStateSpecified(endLabelModel, coordSys) {\n var baseAxis = coordSys.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isBaseInversed = baseAxis.inverse;\n var align = isHorizontal ? isBaseInversed ? 'right' : 'left' : 'center';\n var verticalAlign = isHorizontal ? 'middle' : isBaseInversed ? 'top' : 'bottom';\n return {\n normal: {\n align: endLabelModel.get('align') || align,\n verticalAlign: endLabelModel.get('verticalAlign') || verticalAlign\n }\n };\n}\nvar LineView = /** @class */function (_super) {\n __extends(LineView, _super);\n function LineView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n LineView.prototype.init = function () {\n var lineGroup = new graphic.Group();\n var symbolDraw = new SymbolDraw();\n this.group.add(symbolDraw.group);\n this._symbolDraw = symbolDraw;\n this._lineGroup = lineGroup;\n };\n LineView.prototype.render = function (seriesModel, ecModel, api) {\n var _this = this;\n var coordSys = seriesModel.coordinateSystem;\n var group = this.group;\n var data = seriesModel.getData();\n var lineStyleModel = seriesModel.getModel('lineStyle');\n var areaStyleModel = seriesModel.getModel('areaStyle');\n var points = data.getLayout('points') || [];\n var isCoordSysPolar = coordSys.type === 'polar';\n var prevCoordSys = this._coordSys;\n var symbolDraw = this._symbolDraw;\n var polyline = this._polyline;\n var polygon = this._polygon;\n var lineGroup = this._lineGroup;\n var hasAnimation = !ecModel.ssr && seriesModel.get('animation');\n var isAreaChart = !areaStyleModel.isEmpty();\n var valueOrigin = areaStyleModel.get('origin');\n var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n var stackedOnPoints = isAreaChart && getStackedOnPoints(coordSys, data, dataCoordInfo);\n var showSymbol = seriesModel.get('showSymbol');\n var connectNulls = seriesModel.get('connectNulls');\n var isIgnoreFunc = showSymbol && !isCoordSysPolar && getIsIgnoreFunc(seriesModel, data, coordSys);\n // Remove temporary symbols\n var oldData = this._data;\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n });\n // Remove previous created symbols if showSymbol changed to false\n if (!showSymbol) {\n symbolDraw.remove();\n }\n group.add(lineGroup);\n // FIXME step not support polar\n var step = !isCoordSysPolar ? seriesModel.get('step') : false;\n var clipShapeForSymbol;\n if (coordSys && coordSys.getArea && seriesModel.get('clip', true)) {\n clipShapeForSymbol = coordSys.getArea();\n // Avoid float number rounding error for symbol on the edge of axis extent.\n // See #7913 and `test/dataZoom-clip.html`.\n if (clipShapeForSymbol.width != null) {\n clipShapeForSymbol.x -= 0.1;\n clipShapeForSymbol.y -= 0.1;\n clipShapeForSymbol.width += 0.2;\n clipShapeForSymbol.height += 0.2;\n } else if (clipShapeForSymbol.r0) {\n clipShapeForSymbol.r0 -= 0.5;\n clipShapeForSymbol.r += 0.5;\n }\n }\n this._clipShapeForSymbol = clipShapeForSymbol;\n var visualColor = getVisualGradient(data, coordSys, api) || data.getVisual('style')[data.getVisual('drawType')];\n // Initialization animation or coordinate system changed\n if (!(polyline && prevCoordSys.type === coordSys.type && step === this._step)) {\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol,\n disableAnimation: true,\n getSymbolPoint: function (idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n }\n });\n hasAnimation && this._initSymbolLabelAnimation(data, coordSys, clipShapeForSymbol);\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step, connectNulls);\n if (stackedOnPoints) {\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step, connectNulls);\n }\n }\n polyline = this._newPolyline(points);\n if (isAreaChart) {\n polygon = this._newPolygon(points, stackedOnPoints);\n } // If areaStyle is removed\n else if (polygon) {\n lineGroup.remove(polygon);\n polygon = this._polygon = null;\n }\n // NOTE: Must update _endLabel before setClipPath.\n if (!isCoordSysPolar) {\n this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));\n }\n lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel));\n } else {\n if (isAreaChart && !polygon) {\n // If areaStyle is added\n polygon = this._newPolygon(points, stackedOnPoints);\n } else if (polygon && !isAreaChart) {\n // If areaStyle is removed\n lineGroup.remove(polygon);\n polygon = this._polygon = null;\n }\n // NOTE: Must update _endLabel before setClipPath.\n if (!isCoordSysPolar) {\n this._initOrUpdateEndLabel(seriesModel, coordSys, convertToColorString(visualColor));\n }\n // Update clipPath\n var oldClipPath = lineGroup.getClipPath();\n if (oldClipPath) {\n var newClipPath = createLineClipPath(this, coordSys, false, seriesModel);\n graphic.initProps(oldClipPath, {\n shape: newClipPath.shape\n }, seriesModel);\n } else {\n lineGroup.setClipPath(createLineClipPath(this, coordSys, true, seriesModel));\n }\n // Always update, or it is wrong in the case turning on legend\n // because points are not changed.\n showSymbol && symbolDraw.updateData(data, {\n isIgnore: isIgnoreFunc,\n clipShape: clipShapeForSymbol,\n disableAnimation: true,\n getSymbolPoint: function (idx) {\n return [points[idx * 2], points[idx * 2 + 1]];\n }\n });\n // In the case data zoom triggered refreshing frequently\n // Data may not change if line has a category axis. So it should animate nothing.\n if (!isPointsSame(this._stackedOnPoints, stackedOnPoints) || !isPointsSame(this._points, points)) {\n if (hasAnimation) {\n this._doUpdateAnimation(data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls);\n } else {\n // Not do it in update with animation\n if (step) {\n // TODO If stacked series is not step\n points = turnPointsIntoStep(points, coordSys, step, connectNulls);\n if (stackedOnPoints) {\n stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step, connectNulls);\n }\n }\n polyline.setShape({\n points: points\n });\n polygon && polygon.setShape({\n points: points,\n stackedOnPoints: stackedOnPoints\n });\n }\n }\n }\n var emphasisModel = seriesModel.getModel('emphasis');\n var focus = emphasisModel.get('focus');\n var blurScope = emphasisModel.get('blurScope');\n var emphasisDisabled = emphasisModel.get('disabled');\n polyline.useStyle(zrUtil.defaults(\n // Use color in lineStyle first\n lineStyleModel.getLineStyle(), {\n fill: 'none',\n stroke: visualColor,\n lineJoin: 'bevel'\n }));\n setStatesStylesFromModel(polyline, seriesModel, 'lineStyle');\n if (polyline.style.lineWidth > 0 && seriesModel.get(['emphasis', 'lineStyle', 'width']) === 'bolder') {\n var emphasisLineStyle = polyline.getState('emphasis').style;\n emphasisLineStyle.lineWidth = +polyline.style.lineWidth + 1;\n }\n // Needs seriesIndex for focus\n getECData(polyline).seriesIndex = seriesModel.seriesIndex;\n toggleHoverEmphasis(polyline, focus, blurScope, emphasisDisabled);\n var smooth = getSmooth(seriesModel.get('smooth'));\n var smoothMonotone = seriesModel.get('smoothMonotone');\n polyline.setShape({\n smooth: smooth,\n smoothMonotone: smoothMonotone,\n connectNulls: connectNulls\n });\n if (polygon) {\n var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n var stackedOnSmooth = 0;\n polygon.useStyle(zrUtil.defaults(areaStyleModel.getAreaStyle(), {\n fill: visualColor,\n opacity: 0.7,\n lineJoin: 'bevel',\n decal: data.getVisual('style').decal\n }));\n if (stackedOnSeries) {\n stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n }\n polygon.setShape({\n smooth: smooth,\n stackedOnSmooth: stackedOnSmooth,\n smoothMonotone: smoothMonotone,\n connectNulls: connectNulls\n });\n setStatesStylesFromModel(polygon, seriesModel, 'areaStyle');\n // Needs seriesIndex for focus\n getECData(polygon).seriesIndex = seriesModel.seriesIndex;\n toggleHoverEmphasis(polygon, focus, blurScope, emphasisDisabled);\n }\n var changePolyState = function (toState) {\n _this._changePolyState(toState);\n };\n data.eachItemGraphicEl(function (el) {\n // Switch polyline / polygon state if element changed its state.\n el && (el.onHoverStateChange = changePolyState);\n });\n this._polyline.onHoverStateChange = changePolyState;\n this._data = data;\n // Save the coordinate system for transition animation when data changed\n this._coordSys = coordSys;\n this._stackedOnPoints = stackedOnPoints;\n this._points = points;\n this._step = step;\n this._valueOrigin = valueOrigin;\n if (seriesModel.get('triggerLineEvent')) {\n this.packEventData(seriesModel, polyline);\n polygon && this.packEventData(seriesModel, polygon);\n }\n };\n LineView.prototype.packEventData = function (seriesModel, el) {\n getECData(el).eventData = {\n componentType: 'series',\n componentSubType: 'line',\n componentIndex: seriesModel.componentIndex,\n seriesIndex: seriesModel.seriesIndex,\n seriesName: seriesModel.name,\n seriesType: 'line'\n };\n };\n LineView.prototype.highlight = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n this._changePolyState('emphasis');\n if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n var points = data.getLayout('points');\n var symbol = data.getItemGraphicEl(dataIndex);\n if (!symbol) {\n // Create a temporary symbol if it is not exists\n var x = points[dataIndex * 2];\n var y = points[dataIndex * 2 + 1];\n if (isNaN(x) || isNaN(y)) {\n // Null data\n return;\n }\n // fix #11360: shouldn't draw symbol outside clipShapeForSymbol\n if (this._clipShapeForSymbol && !this._clipShapeForSymbol.contain(x, y)) {\n return;\n }\n var zlevel = seriesModel.get('zlevel') || 0;\n var z = seriesModel.get('z') || 0;\n symbol = new SymbolClz(data, dataIndex);\n symbol.x = x;\n symbol.y = y;\n symbol.setZ(zlevel, z);\n // ensure label text of the temporary symbol is in front of line and area polygon\n var symbolLabel = symbol.getSymbolPath().getTextContent();\n if (symbolLabel) {\n symbolLabel.zlevel = zlevel;\n symbolLabel.z = z;\n symbolLabel.z2 = this._polyline.z2 + 1;\n }\n symbol.__temp = true;\n data.setItemGraphicEl(dataIndex, symbol);\n // Stop scale animation\n symbol.stopSymbolAnimation(true);\n this.group.add(symbol);\n }\n symbol.highlight();\n } else {\n // Highlight whole series\n ChartView.prototype.highlight.call(this, seriesModel, ecModel, api, payload);\n }\n };\n LineView.prototype.downplay = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, payload);\n this._changePolyState('normal');\n if (dataIndex != null && dataIndex >= 0) {\n var symbol = data.getItemGraphicEl(dataIndex);\n if (symbol) {\n if (symbol.__temp) {\n data.setItemGraphicEl(dataIndex, null);\n this.group.remove(symbol);\n } else {\n symbol.downplay();\n }\n }\n } else {\n // FIXME\n // can not downplay completely.\n // Downplay whole series\n ChartView.prototype.downplay.call(this, seriesModel, ecModel, api, payload);\n }\n };\n LineView.prototype._changePolyState = function (toState) {\n var polygon = this._polygon;\n setStatesFlag(this._polyline, toState);\n polygon && setStatesFlag(polygon, toState);\n };\n LineView.prototype._newPolyline = function (points) {\n var polyline = this._polyline;\n // Remove previous created polyline\n if (polyline) {\n this._lineGroup.remove(polyline);\n }\n polyline = new ECPolyline({\n shape: {\n points: points\n },\n segmentIgnoreThreshold: 2,\n z2: 10\n });\n this._lineGroup.add(polyline);\n this._polyline = polyline;\n return polyline;\n };\n LineView.prototype._newPolygon = function (points, stackedOnPoints) {\n var polygon = this._polygon;\n // Remove previous created polygon\n if (polygon) {\n this._lineGroup.remove(polygon);\n }\n polygon = new ECPolygon({\n shape: {\n points: points,\n stackedOnPoints: stackedOnPoints\n },\n segmentIgnoreThreshold: 2\n });\n this._lineGroup.add(polygon);\n this._polygon = polygon;\n return polygon;\n };\n LineView.prototype._initSymbolLabelAnimation = function (data, coordSys, clipShape) {\n var isHorizontalOrRadial;\n var isCoordSysPolar;\n var baseAxis = coordSys.getBaseAxis();\n var isAxisInverse = baseAxis.inverse;\n if (coordSys.type === 'cartesian2d') {\n isHorizontalOrRadial = baseAxis.isHorizontal();\n isCoordSysPolar = false;\n } else if (coordSys.type === 'polar') {\n isHorizontalOrRadial = baseAxis.dim === 'angle';\n isCoordSysPolar = true;\n }\n var seriesModel = data.hostModel;\n var seriesDuration = seriesModel.get('animationDuration');\n if (zrUtil.isFunction(seriesDuration)) {\n seriesDuration = seriesDuration(null);\n }\n var seriesDelay = seriesModel.get('animationDelay') || 0;\n var seriesDelayValue = zrUtil.isFunction(seriesDelay) ? seriesDelay(null) : seriesDelay;\n data.eachItemGraphicEl(function (symbol, idx) {\n var el = symbol;\n if (el) {\n var point = [symbol.x, symbol.y];\n var start = void 0;\n var end = void 0;\n var current = void 0;\n if (clipShape) {\n if (isCoordSysPolar) {\n var polarClip = clipShape;\n var coord = coordSys.pointToCoord(point);\n if (isHorizontalOrRadial) {\n start = polarClip.startAngle;\n end = polarClip.endAngle;\n current = -coord[1] / 180 * Math.PI;\n } else {\n start = polarClip.r0;\n end = polarClip.r;\n current = coord[0];\n }\n } else {\n var gridClip = clipShape;\n if (isHorizontalOrRadial) {\n start = gridClip.x;\n end = gridClip.x + gridClip.width;\n current = symbol.x;\n } else {\n start = gridClip.y + gridClip.height;\n end = gridClip.y;\n current = symbol.y;\n }\n }\n }\n var ratio = end === start ? 0 : (current - start) / (end - start);\n if (isAxisInverse) {\n ratio = 1 - ratio;\n }\n var delay = zrUtil.isFunction(seriesDelay) ? seriesDelay(idx) : seriesDuration * ratio + seriesDelayValue;\n var symbolPath = el.getSymbolPath();\n var text = symbolPath.getTextContent();\n el.attr({\n scaleX: 0,\n scaleY: 0\n });\n el.animateTo({\n scaleX: 1,\n scaleY: 1\n }, {\n duration: 200,\n setToFinal: true,\n delay: delay\n });\n if (text) {\n text.animateFrom({\n style: {\n opacity: 0\n }\n }, {\n duration: 300,\n delay: delay\n });\n }\n symbolPath.disableLabelAnimation = true;\n }\n });\n };\n LineView.prototype._initOrUpdateEndLabel = function (seriesModel, coordSys, inheritColor) {\n var endLabelModel = seriesModel.getModel('endLabel');\n if (anyStateShowEndLabel(seriesModel)) {\n var data_2 = seriesModel.getData();\n var polyline = this._polyline;\n // series may be filtered.\n var points = data_2.getLayout('points');\n if (!points) {\n polyline.removeTextContent();\n this._endLabel = null;\n return;\n }\n var endLabel = this._endLabel;\n if (!endLabel) {\n endLabel = this._endLabel = new graphic.Text({\n z2: 200 // should be higher than item symbol\n });\n\n endLabel.ignoreClip = true;\n polyline.setTextContent(this._endLabel);\n polyline.disableLabelAnimation = true;\n }\n // Find last non-NaN data to display data\n var dataIndex = getLastIndexNotNull(points);\n if (dataIndex >= 0) {\n setLabelStyle(polyline, getLabelStatesModels(seriesModel, 'endLabel'), {\n inheritColor: inheritColor,\n labelFetcher: seriesModel,\n labelDataIndex: dataIndex,\n defaultText: function (dataIndex, opt, interpolatedValue) {\n return interpolatedValue != null ? getDefaultInterpolatedLabel(data_2, interpolatedValue) : getDefaultLabel(data_2, dataIndex);\n },\n enableTextSetter: true\n }, getEndLabelStateSpecified(endLabelModel, coordSys));\n polyline.textConfig.position = null;\n }\n } else if (this._endLabel) {\n this._polyline.removeTextContent();\n this._endLabel = null;\n }\n };\n LineView.prototype._endLabelOnDuring = function (percent, clipRect, data, animationRecord, valueAnimation, endLabelModel, coordSys) {\n var endLabel = this._endLabel;\n var polyline = this._polyline;\n if (endLabel) {\n // NOTE: Don't remove percent < 1. percent === 1 means the first frame during render.\n // The label is not prepared at this time.\n if (percent < 1 && animationRecord.originalX == null) {\n animationRecord.originalX = endLabel.x;\n animationRecord.originalY = endLabel.y;\n }\n var points = data.getLayout('points');\n var seriesModel = data.hostModel;\n var connectNulls = seriesModel.get('connectNulls');\n var precision = endLabelModel.get('precision');\n var distance = endLabelModel.get('distance') || 0;\n var baseAxis = coordSys.getBaseAxis();\n var isHorizontal = baseAxis.isHorizontal();\n var isBaseInversed = baseAxis.inverse;\n var clipShape = clipRect.shape;\n var xOrY = isBaseInversed ? isHorizontal ? clipShape.x : clipShape.y + clipShape.height : isHorizontal ? clipShape.x + clipShape.width : clipShape.y;\n var distanceX = (isHorizontal ? distance : 0) * (isBaseInversed ? -1 : 1);\n var distanceY = (isHorizontal ? 0 : -distance) * (isBaseInversed ? -1 : 1);\n var dim = isHorizontal ? 'x' : 'y';\n var dataIndexRange = getIndexRange(points, xOrY, dim);\n var indices = dataIndexRange.range;\n var diff = indices[1] - indices[0];\n var value = void 0;\n if (diff >= 1) {\n // diff > 1 && connectNulls, which is on the null data.\n if (diff > 1 && !connectNulls) {\n var pt = getPointAtIndex(points, indices[0]);\n endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n valueAnimation && (value = seriesModel.getRawValue(indices[0]));\n } else {\n var pt = polyline.getPointOn(xOrY, dim);\n pt && endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n var startValue = seriesModel.getRawValue(indices[0]);\n var endValue = seriesModel.getRawValue(indices[1]);\n valueAnimation && (value = modelUtil.interpolateRawValues(data, precision, startValue, endValue, dataIndexRange.t));\n }\n animationRecord.lastFrameIndex = indices[0];\n } else {\n // If diff <= 0, which is the range is not found(Include NaN)\n // Choose the first point or last point.\n var idx = percent === 1 || animationRecord.lastFrameIndex > 0 ? indices[0] : 0;\n var pt = getPointAtIndex(points, idx);\n valueAnimation && (value = seriesModel.getRawValue(idx));\n endLabel.attr({\n x: pt[0] + distanceX,\n y: pt[1] + distanceY\n });\n }\n if (valueAnimation) {\n var inner = labelInner(endLabel);\n if (typeof inner.setLabelText === 'function') {\n inner.setLabelText(value);\n }\n }\n }\n };\n /**\n * @private\n */\n // FIXME Two value axis\n LineView.prototype._doUpdateAnimation = function (data, stackedOnPoints, coordSys, api, step, valueOrigin, connectNulls) {\n var polyline = this._polyline;\n var polygon = this._polygon;\n var seriesModel = data.hostModel;\n var diff = lineAnimationDiff(this._data, data, this._stackedOnPoints, stackedOnPoints, this._coordSys, coordSys, this._valueOrigin, valueOrigin);\n var current = diff.current;\n var stackedOnCurrent = diff.stackedOnCurrent;\n var next = diff.next;\n var stackedOnNext = diff.stackedOnNext;\n if (step) {\n // TODO If stacked series is not step\n current = turnPointsIntoStep(diff.current, coordSys, step, connectNulls);\n stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step, connectNulls);\n next = turnPointsIntoStep(diff.next, coordSys, step, connectNulls);\n stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step, connectNulls);\n }\n // Don't apply animation if diff is large.\n // For better result and avoid memory explosion problems like\n // https://github.com/apache/incubator-echarts/issues/12229\n if (getBoundingDiff(current, next) > 3000 || polygon && getBoundingDiff(stackedOnCurrent, stackedOnNext) > 3000) {\n polyline.stopAnimation();\n polyline.setShape({\n points: next\n });\n if (polygon) {\n polygon.stopAnimation();\n polygon.setShape({\n points: next,\n stackedOnPoints: stackedOnNext\n });\n }\n return;\n }\n polyline.shape.__points = diff.current;\n polyline.shape.points = current;\n var target = {\n shape: {\n points: next\n }\n };\n // Also animate the original points.\n // If points reference is changed when turning into step line.\n if (diff.current !== current) {\n target.shape.__points = diff.next;\n }\n // Stop previous animation.\n polyline.stopAnimation();\n graphic.updateProps(polyline, target, seriesModel);\n if (polygon) {\n polygon.setShape({\n // Reuse the points with polyline.\n points: current,\n stackedOnPoints: stackedOnCurrent\n });\n polygon.stopAnimation();\n graphic.updateProps(polygon, {\n shape: {\n stackedOnPoints: stackedOnNext\n }\n }, seriesModel);\n // If use attr directly in updateProps.\n if (polyline.shape.points !== polygon.shape.points) {\n polygon.shape.points = polyline.shape.points;\n }\n }\n var updatedDataInfo = [];\n var diffStatus = diff.status;\n for (var i = 0; i < diffStatus.length; i++) {\n var cmd = diffStatus[i].cmd;\n if (cmd === '=') {\n var el = data.getItemGraphicEl(diffStatus[i].idx1);\n if (el) {\n updatedDataInfo.push({\n el: el,\n ptIdx: i // Index of points\n });\n }\n }\n }\n\n if (polyline.animators && polyline.animators.length) {\n polyline.animators[0].during(function () {\n polygon && polygon.dirtyShape();\n var points = polyline.shape.__points;\n for (var i = 0; i < updatedDataInfo.length; i++) {\n var el = updatedDataInfo[i].el;\n var offset = updatedDataInfo[i].ptIdx * 2;\n el.x = points[offset];\n el.y = points[offset + 1];\n el.markRedraw();\n }\n });\n }\n };\n LineView.prototype.remove = function (ecModel) {\n var group = this.group;\n var oldData = this._data;\n this._lineGroup.removeAll();\n this._symbolDraw.remove(true);\n // Remove temporary created elements when highlighting\n oldData && oldData.eachItemGraphicEl(function (el, idx) {\n if (el.__temp) {\n group.remove(el);\n oldData.setItemGraphicEl(idx, null);\n }\n });\n this._polyline = this._polygon = this._coordSys = this._points = this._stackedOnPoints = this._endLabel = this._data = null;\n };\n LineView.type = 'line';\n return LineView;\n}(ChartView);\nexport default LineView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { map } from 'zrender/lib/core/util.js';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner.js';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper.js';\nimport { createFloat32Array } from '../util/vendor.js';\nexport default function pointsLayout(seriesType, forceStoreInTypedArray) {\n return {\n seriesType: seriesType,\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n var data = seriesModel.getData();\n var coordSys = seriesModel.coordinateSystem;\n var pipelineContext = seriesModel.pipelineContext;\n var useTypedArray = forceStoreInTypedArray || pipelineContext.large;\n if (!coordSys) {\n return;\n }\n var dims = map(coordSys.dimensions, function (dim) {\n return data.mapDimension(dim);\n }).slice(0, 2);\n var dimLen = dims.length;\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n if (isDimensionStacked(data, dims[0])) {\n dims[0] = stackResultDim;\n }\n if (isDimensionStacked(data, dims[1])) {\n dims[1] = stackResultDim;\n }\n var store = data.getStore();\n var dimIdx0 = data.getDimensionIndex(dims[0]);\n var dimIdx1 = data.getDimensionIndex(dims[1]);\n return dimLen && {\n progress: function (params, data) {\n var segCount = params.end - params.start;\n var points = useTypedArray && createFloat32Array(segCount * dimLen);\n var tmpIn = [];\n var tmpOut = [];\n for (var i = params.start, offset = 0; i < params.end; i++) {\n var point = void 0;\n if (dimLen === 1) {\n var x = store.get(dimIdx0, i);\n // NOTE: Make sure the second parameter is null to use default strategy.\n point = coordSys.dataToPoint(x, null, tmpOut);\n } else {\n tmpIn[0] = store.get(dimIdx0, i);\n tmpIn[1] = store.get(dimIdx1, i);\n // Let coordinate system to handle the NaN data.\n point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n }\n if (useTypedArray) {\n points[offset++] = point[0];\n points[offset++] = point[1];\n } else {\n data.setItemLayout(i, point.slice());\n }\n }\n useTypedArray && data.setLayout('points', points);\n }\n };\n }\n };\n}\n;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isFunction, isString } from 'zrender/lib/core/util.js';\nvar samplers = {\n average: function (frame) {\n var sum = 0;\n var count = 0;\n for (var i = 0; i < frame.length; i++) {\n if (!isNaN(frame[i])) {\n sum += frame[i];\n count++;\n }\n }\n // Return NaN if count is 0\n return count === 0 ? NaN : sum / count;\n },\n sum: function (frame) {\n var sum = 0;\n for (var i = 0; i < frame.length; i++) {\n // Ignore NaN\n sum += frame[i] || 0;\n }\n return sum;\n },\n max: function (frame) {\n var max = -Infinity;\n for (var i = 0; i < frame.length; i++) {\n frame[i] > max && (max = frame[i]);\n }\n // NaN will cause illegal axis extent.\n return isFinite(max) ? max : NaN;\n },\n min: function (frame) {\n var min = Infinity;\n for (var i = 0; i < frame.length; i++) {\n frame[i] < min && (min = frame[i]);\n }\n // NaN will cause illegal axis extent.\n return isFinite(min) ? min : NaN;\n },\n minmax: function (frame) {\n var turningPointAbsoluteValue = -Infinity;\n var turningPointOriginalValue = -Infinity;\n for (var i = 0; i < frame.length; i++) {\n var originalValue = frame[i];\n var absoluteValue = Math.abs(originalValue);\n if (absoluteValue > turningPointAbsoluteValue) {\n turningPointAbsoluteValue = absoluteValue;\n turningPointOriginalValue = originalValue;\n }\n }\n return isFinite(turningPointOriginalValue) ? turningPointOriginalValue : NaN;\n },\n // TODO\n // Median\n nearest: function (frame) {\n return frame[0];\n }\n};\nvar indexSampler = function (frame) {\n return Math.round(frame.length / 2);\n};\nexport default function dataSample(seriesType) {\n return {\n seriesType: seriesType,\n // FIXME:TS never used, so comment it\n // modifyOutputEnd: true,\n reset: function (seriesModel, ecModel, api) {\n var data = seriesModel.getData();\n var sampling = seriesModel.get('sampling');\n var coordSys = seriesModel.coordinateSystem;\n var count = data.count();\n // Only cartesian2d support down sampling. Disable it when there is few data.\n if (count > 10 && coordSys.type === 'cartesian2d' && sampling) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var extent = baseAxis.getExtent();\n var dpr = api.getDevicePixelRatio();\n // Coordinste system has been resized\n var size = Math.abs(extent[1] - extent[0]) * (dpr || 1);\n var rate = Math.round(count / size);\n if (isFinite(rate) && rate > 1) {\n if (sampling === 'lttb') {\n seriesModel.setData(data.lttbDownSample(data.mapDimension(valueAxis.dim), 1 / rate));\n }\n var sampler = void 0;\n if (isString(sampling)) {\n sampler = samplers[sampling];\n } else if (isFunction(sampling)) {\n sampler = sampling;\n }\n if (sampler) {\n // Only support sample the first dim mapped from value axis.\n seriesModel.setData(data.downSample(data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler));\n }\n }\n }\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport LineSeries from './LineSeries.js';\nimport LineView from './LineView.js';\n// In case developer forget to include grid component\nimport layoutPoints from '../../layout/points.js';\nimport dataSample from '../../processor/dataSample.js';\nexport function install(registers) {\n registers.registerChartView(LineView);\n registers.registerSeriesModel(LineSeries);\n registers.registerLayout(layoutPoints('line', true));\n registers.registerVisual({\n seriesType: 'line',\n reset: function (seriesModel) {\n var data = seriesModel.getData();\n // Visual coding for legend\n var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();\n if (lineStyle && !lineStyle.stroke) {\n // Fill in visual should be palette color if\n // has color callback\n lineStyle.stroke = data.getVisual('style').fill;\n }\n data.setVisual('legendLineStyle', lineStyle);\n }\n });\n // Down sample after filter\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, dataSample('line'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport ComponentModel from '../../model/Component.js';\nimport ComponentView from '../../view/Component.js';\nimport { windowOpen } from '../../util/format.js';\nvar TitleModel = /** @class */function (_super) {\n __extends(TitleModel, _super);\n function TitleModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = TitleModel.type;\n _this.layoutMode = {\n type: 'box',\n ignoreSize: true\n };\n return _this;\n }\n TitleModel.type = 'title';\n TitleModel.defaultOption = {\n // zlevel: 0,\n z: 6,\n show: true,\n text: '',\n target: 'blank',\n subtext: '',\n subtarget: 'blank',\n left: 0,\n top: 0,\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n borderWidth: 0,\n padding: 5,\n itemGap: 10,\n textStyle: {\n fontSize: 18,\n fontWeight: 'bold',\n color: '#464646'\n },\n subtextStyle: {\n fontSize: 12,\n color: '#6E7079'\n }\n };\n return TitleModel;\n}(ComponentModel);\n// View\nvar TitleView = /** @class */function (_super) {\n __extends(TitleView, _super);\n function TitleView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = TitleView.type;\n return _this;\n }\n TitleView.prototype.render = function (titleModel, ecModel, api) {\n this.group.removeAll();\n if (!titleModel.get('show')) {\n return;\n }\n var group = this.group;\n var textStyleModel = titleModel.getModel('textStyle');\n var subtextStyleModel = titleModel.getModel('subtextStyle');\n var textAlign = titleModel.get('textAlign');\n var textVerticalAlign = zrUtil.retrieve2(titleModel.get('textBaseline'), titleModel.get('textVerticalAlign'));\n var textEl = new graphic.Text({\n style: createTextStyle(textStyleModel, {\n text: titleModel.get('text'),\n fill: textStyleModel.getTextColor()\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var textRect = textEl.getBoundingRect();\n var subText = titleModel.get('subtext');\n var subTextEl = new graphic.Text({\n style: createTextStyle(subtextStyleModel, {\n text: subText,\n fill: subtextStyleModel.getTextColor(),\n y: textRect.height + titleModel.get('itemGap'),\n verticalAlign: 'top'\n }, {\n disableBox: true\n }),\n z2: 10\n });\n var link = titleModel.get('link');\n var sublink = titleModel.get('sublink');\n var triggerEvent = titleModel.get('triggerEvent', true);\n textEl.silent = !link && !triggerEvent;\n subTextEl.silent = !sublink && !triggerEvent;\n if (link) {\n textEl.on('click', function () {\n windowOpen(link, '_' + titleModel.get('target'));\n });\n }\n if (sublink) {\n subTextEl.on('click', function () {\n windowOpen(sublink, '_' + titleModel.get('subtarget'));\n });\n }\n getECData(textEl).eventData = getECData(subTextEl).eventData = triggerEvent ? {\n componentType: 'title',\n componentIndex: titleModel.componentIndex\n } : null;\n group.add(textEl);\n subText && group.add(subTextEl);\n // If no subText, but add subTextEl, there will be an empty line.\n var groupRect = group.getBoundingRect();\n var layoutOption = titleModel.getBoxLayoutParams();\n layoutOption.width = groupRect.width;\n layoutOption.height = groupRect.height;\n var layoutRect = getLayoutRect(layoutOption, {\n width: api.getWidth(),\n height: api.getHeight()\n }, titleModel.get('padding'));\n // Adjust text align based on position\n if (!textAlign) {\n // Align left if title is on the left. center and right is same\n textAlign = titleModel.get('left') || titleModel.get('right');\n // @ts-ignore\n if (textAlign === 'middle') {\n textAlign = 'center';\n }\n // Adjust layout by text align\n if (textAlign === 'right') {\n layoutRect.x += layoutRect.width;\n } else if (textAlign === 'center') {\n layoutRect.x += layoutRect.width / 2;\n }\n }\n if (!textVerticalAlign) {\n textVerticalAlign = titleModel.get('top') || titleModel.get('bottom');\n // @ts-ignore\n if (textVerticalAlign === 'center') {\n textVerticalAlign = 'middle';\n }\n if (textVerticalAlign === 'bottom') {\n layoutRect.y += layoutRect.height;\n } else if (textVerticalAlign === 'middle') {\n layoutRect.y += layoutRect.height / 2;\n }\n textVerticalAlign = textVerticalAlign || 'top';\n }\n group.x = layoutRect.x;\n group.y = layoutRect.y;\n group.markRedraw();\n var alignStyle = {\n align: textAlign,\n verticalAlign: textVerticalAlign\n };\n textEl.setStyle(alignStyle);\n subTextEl.setStyle(alignStyle);\n // Render background\n // Get groupRect again because textAlign has been changed\n groupRect = group.getBoundingRect();\n var padding = layoutRect.margin;\n var style = titleModel.getItemStyle(['color', 'opacity']);\n style.fill = titleModel.get('backgroundColor');\n var rect = new graphic.Rect({\n shape: {\n x: groupRect.x - padding[3],\n y: groupRect.y - padding[0],\n width: groupRect.width + padding[1] + padding[3],\n height: groupRect.height + padding[0] + padding[2],\n r: titleModel.get('borderRadius')\n },\n style: style,\n subPixelOptimize: true,\n silent: true\n });\n group.add(rect);\n };\n TitleView.type = 'title';\n return TitleView;\n}(ComponentView);\nexport function install(registers) {\n registers.registerComponentModel(TitleModel);\n registers.registerComponentView(TitleView);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport Model from '../../model/Model.js';\nimport { each, curry, clone, defaults, isArray, indexOf } from 'zrender/lib/core/util.js';\n// Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n// allAxesInfo should be updated when setOption performed.\nexport function collect(ecModel, api) {\n var result = {\n /**\n * key: makeKey(axis.model)\n * value: {\n * axis,\n * coordSys,\n * axisPointerModel,\n * triggerTooltip,\n * triggerEmphasis,\n * involveSeries,\n * snap,\n * seriesModels,\n * seriesDataCount\n * }\n */\n axesInfo: {},\n seriesInvolved: false,\n /**\n * key: makeKey(coordSys.model)\n * value: Object: key makeKey(axis.model), value: axisInfo\n */\n coordSysAxesInfo: {},\n coordSysMap: {}\n };\n collectAxesInfo(result, ecModel, api);\n // Check seriesInvolved for performance, in case too many series in some chart.\n result.seriesInvolved && collectSeriesInfo(result, ecModel);\n return result;\n}\nfunction collectAxesInfo(result, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var globalAxisPointerModel = ecModel.getComponent('axisPointer');\n // links can only be set on global.\n var linksOption = globalAxisPointerModel.get('link', true) || [];\n var linkGroups = [];\n // Collect axes info.\n each(api.getCoordinateSystems(), function (coordSys) {\n // Some coordinate system do not support axes, like geo.\n if (!coordSys.axisPointerEnabled) {\n return;\n }\n var coordSysKey = makeKey(coordSys.model);\n var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};\n result.coordSysMap[coordSysKey] = coordSys;\n // Set tooltip (like 'cross') is a convenient way to show axisPointer\n // for user. So we enable setting tooltip on coordSys model.\n var coordSysModel = coordSys.model;\n var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);\n each(coordSys.getAxes(), curry(saveTooltipAxisInfo, false, null));\n // If axis tooltip used, choose tooltip axis for each coordSys.\n // Notice this case: coordSys is `grid` but not `cartesian2D` here.\n if (coordSys.getTooltipAxes && globalTooltipModel\n // If tooltip.showContent is set as false, tooltip will not\n // show but axisPointer will show as normal.\n && baseTooltipModel.get('show')) {\n // Compatible with previous logic. But series.tooltip.trigger: 'axis'\n // or series.data[n].tooltip.trigger: 'axis' are not support any more.\n var triggerAxis = baseTooltipModel.get('trigger') === 'axis';\n var cross = baseTooltipModel.get(['axisPointer', 'type']) === 'cross';\n var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get(['axisPointer', 'axis']));\n if (triggerAxis || cross) {\n each(tooltipAxes.baseAxes, curry(saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis));\n }\n if (cross) {\n each(tooltipAxes.otherAxes, curry(saveTooltipAxisInfo, 'cross', false));\n }\n }\n // fromTooltip: true | false | 'cross'\n // triggerTooltip: true | false | null\n function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {\n var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);\n var axisPointerShow = axisPointerModel.get('show');\n if (!axisPointerShow || axisPointerShow === 'auto' && !fromTooltip && !isHandleTrigger(axisPointerModel)) {\n return;\n }\n if (triggerTooltip == null) {\n triggerTooltip = axisPointerModel.get('triggerTooltip');\n }\n axisPointerModel = fromTooltip ? makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) : axisPointerModel;\n var snap = axisPointerModel.get('snap');\n var triggerEmphasis = axisPointerModel.get('triggerEmphasis');\n var axisKey = makeKey(axis.model);\n var involveSeries = triggerTooltip || snap || axis.type === 'category';\n // If result.axesInfo[key] exist, override it (tooltip has higher priority).\n var axisInfo = result.axesInfo[axisKey] = {\n key: axisKey,\n axis: axis,\n coordSys: coordSys,\n axisPointerModel: axisPointerModel,\n triggerTooltip: triggerTooltip,\n triggerEmphasis: triggerEmphasis,\n involveSeries: involveSeries,\n snap: snap,\n useHandle: isHandleTrigger(axisPointerModel),\n seriesModels: [],\n linkGroup: null\n };\n axesInfoInCoordSys[axisKey] = axisInfo;\n result.seriesInvolved = result.seriesInvolved || involveSeries;\n var groupIndex = getLinkGroupIndex(linksOption, axis);\n if (groupIndex != null) {\n var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {\n axesInfo: {}\n });\n linkGroup.axesInfo[axisKey] = axisInfo;\n linkGroup.mapper = linksOption[groupIndex].mapper;\n axisInfo.linkGroup = linkGroup;\n }\n }\n });\n}\nfunction makeAxisPointerModel(axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip) {\n var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');\n var fields = ['type', 'snap', 'lineStyle', 'shadowStyle', 'label', 'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'];\n var volatileOption = {};\n each(fields, function (field) {\n volatileOption[field] = clone(tooltipAxisPointerModel.get(field));\n });\n // category axis do not auto snap, otherwise some tick that do not\n // has value can not be hovered. value/time/log axis default snap if\n // triggered from tooltip and trigger tooltip.\n volatileOption.snap = axis.type !== 'category' && !!triggerTooltip;\n // Compatible with previous behavior, tooltip axis does not show label by default.\n // Only these properties can be overridden from tooltip to axisPointer.\n if (tooltipAxisPointerModel.get('type') === 'cross') {\n volatileOption.type = 'line';\n }\n var labelOption = volatileOption.label || (volatileOption.label = {});\n // Follow the convention, do not show label when triggered by tooltip by default.\n labelOption.show == null && (labelOption.show = false);\n if (fromTooltip === 'cross') {\n // When 'cross', both axes show labels.\n var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get(['label', 'show']);\n labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true;\n // If triggerTooltip, this is a base axis, which should better not use cross style\n // (cross style is dashed by default)\n if (!triggerTooltip) {\n var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle');\n crossStyle && defaults(labelOption, crossStyle.textStyle);\n }\n }\n return axis.model.getModel('axisPointer', new Model(volatileOption, globalAxisPointerModel, ecModel));\n}\nfunction collectSeriesInfo(result, ecModel) {\n // Prepare data for axis trigger\n ecModel.eachSeries(function (seriesModel) {\n // Notice this case: this coordSys is `cartesian2D` but not `grid`.\n var coordSys = seriesModel.coordinateSystem;\n var seriesTooltipTrigger = seriesModel.get(['tooltip', 'trigger'], true);\n var seriesTooltipShow = seriesModel.get(['tooltip', 'show'], true);\n if (!coordSys || seriesTooltipTrigger === 'none' || seriesTooltipTrigger === false || seriesTooltipTrigger === 'item' || seriesTooltipShow === false || seriesModel.get(['axisPointer', 'show'], true) === false) {\n return;\n }\n each(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {\n var axis = axisInfo.axis;\n if (coordSys.getAxis(axis.dim) === axis) {\n axisInfo.seriesModels.push(seriesModel);\n axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);\n axisInfo.seriesDataCount += seriesModel.getData().count();\n }\n });\n });\n}\n/**\n * For example:\n * {\n * axisPointer: {\n * links: [{\n * xAxisIndex: [2, 4],\n * yAxisIndex: 'all'\n * }, {\n * xAxisId: ['a5', 'a7'],\n * xAxisName: 'xxx'\n * }]\n * }\n * }\n */\nfunction getLinkGroupIndex(linksOption, axis) {\n var axisModel = axis.model;\n var dim = axis.dim;\n for (var i = 0; i < linksOption.length; i++) {\n var linkOption = linksOption[i] || {};\n if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id) || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex) || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)) {\n return i;\n }\n }\n}\nfunction checkPropInLink(linkPropValue, axisPropValue) {\n return linkPropValue === 'all' || isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0 || linkPropValue === axisPropValue;\n}\nexport function fixValue(axisModel) {\n var axisInfo = getAxisInfo(axisModel);\n if (!axisInfo) {\n return;\n }\n var axisPointerModel = axisInfo.axisPointerModel;\n var scale = axisInfo.axis.scale;\n var option = axisPointerModel.option;\n var status = axisPointerModel.get('status');\n var value = axisPointerModel.get('value');\n // Parse init value for category and time axis.\n if (value != null) {\n value = scale.parse(value);\n }\n var useHandle = isHandleTrigger(axisPointerModel);\n // If `handle` used, `axisPointer` will always be displayed, so value\n // and status should be initialized.\n if (status == null) {\n option.status = useHandle ? 'show' : 'hide';\n }\n var extent = scale.getExtent().slice();\n extent[0] > extent[1] && extent.reverse();\n if (\n // Pick a value on axis when initializing.\n value == null\n // If both `handle` and `dataZoom` are used, value may be out of axis extent,\n // where we should re-pick a value to keep `handle` displaying normally.\n || value > extent[1]) {\n // Make handle displayed on the end of the axis when init, which looks better.\n value = extent[1];\n }\n if (value < extent[0]) {\n value = extent[0];\n }\n option.value = value;\n if (useHandle) {\n option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show';\n }\n}\nexport function getAxisInfo(axisModel) {\n var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;\n return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];\n}\nexport function getAxisPointerModel(axisModel) {\n var axisInfo = getAxisInfo(axisModel);\n return axisInfo && axisInfo.axisPointerModel;\n}\nfunction isHandleTrigger(axisPointerModel) {\n return !!axisPointerModel.get(['handle', 'show']);\n}\n/**\n * @param {module:echarts/model/Model} model\n * @return {string} unique key\n */\nexport function makeKey(model) {\n return model.type + '||' + model.id;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as axisPointerModelHelper from '../axisPointer/modelHelper.js';\nimport ComponentView from '../../view/Component.js';\nvar axisPointerClazz = {};\n/**\n * Base class of AxisView.\n */\nvar AxisView = /** @class */function (_super) {\n __extends(AxisView, _super);\n function AxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = AxisView.type;\n return _this;\n }\n /**\n * @override\n */\n AxisView.prototype.render = function (axisModel, ecModel, api, payload) {\n // FIXME\n // This process should proformed after coordinate systems updated\n // (axis scale updated), and should be performed each time update.\n // So put it here temporarily, although it is not appropriate to\n // put a model-writing procedure in `view`.\n this.axisPointerClass && axisPointerModelHelper.fixValue(axisModel);\n _super.prototype.render.apply(this, arguments);\n this._doUpdateAxisPointerClass(axisModel, api, true);\n };\n /**\n * Action handler.\n */\n AxisView.prototype.updateAxisPointer = function (axisModel, ecModel, api, payload) {\n this._doUpdateAxisPointerClass(axisModel, api, false);\n };\n /**\n * @override\n */\n AxisView.prototype.remove = function (ecModel, api) {\n var axisPointer = this._axisPointer;\n axisPointer && axisPointer.remove(api);\n };\n /**\n * @override\n */\n AxisView.prototype.dispose = function (ecModel, api) {\n this._disposeAxisPointer(api);\n _super.prototype.dispose.apply(this, arguments);\n };\n AxisView.prototype._doUpdateAxisPointerClass = function (axisModel, api, forceRender) {\n var Clazz = AxisView.getAxisPointerClass(this.axisPointerClass);\n if (!Clazz) {\n return;\n }\n var axisPointerModel = axisPointerModelHelper.getAxisPointerModel(axisModel);\n axisPointerModel ? (this._axisPointer || (this._axisPointer = new Clazz())).render(axisModel, axisPointerModel, api, forceRender) : this._disposeAxisPointer(api);\n };\n AxisView.prototype._disposeAxisPointer = function (api) {\n this._axisPointer && this._axisPointer.dispose(api);\n this._axisPointer = null;\n };\n AxisView.registerAxisPointerClass = function (type, clazz) {\n if (process.env.NODE_ENV !== 'production') {\n if (axisPointerClazz[type]) {\n throw new Error('axisPointer ' + type + ' exists');\n }\n }\n axisPointerClazz[type] = clazz;\n };\n ;\n AxisView.getAxisPointerClass = function (type) {\n return type && axisPointerClazz[type];\n };\n ;\n AxisView.type = 'axis';\n return AxisView;\n}(ComponentView);\nexport default AxisView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as axisPointerModelHelper from './modelHelper.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport * as throttleUtil from '../../util/throttle.js';\nimport { makeInner } from '../../util/model.js';\nvar inner = makeInner();\nvar clone = zrUtil.clone;\nvar bind = zrUtil.bind;\n/**\n * Base axis pointer class in 2D.\n */\nvar BaseAxisPointer = /** @class */function () {\n function BaseAxisPointer() {\n this._dragging = false;\n /**\n * In px, arbitrary value. Do not set too small,\n * no animation is ok for most cases.\n */\n this.animationThreshold = 15;\n }\n /**\n * @implement\n */\n BaseAxisPointer.prototype.render = function (axisModel, axisPointerModel, api, forceRender) {\n var value = axisPointerModel.get('value');\n var status = axisPointerModel.get('status');\n // Bind them to `this`, not in closure, otherwise they will not\n // be replaced when user calling setOption in not merge mode.\n this._axisModel = axisModel;\n this._axisPointerModel = axisPointerModel;\n this._api = api;\n // Optimize: `render` will be called repeatedly during mouse move.\n // So it is power consuming if performing `render` each time,\n // especially on mobile device.\n if (!forceRender && this._lastValue === value && this._lastStatus === status) {\n return;\n }\n this._lastValue = value;\n this._lastStatus = status;\n var group = this._group;\n var handle = this._handle;\n if (!status || status === 'hide') {\n // Do not clear here, for animation better.\n group && group.hide();\n handle && handle.hide();\n return;\n }\n group && group.show();\n handle && handle.show();\n // Otherwise status is 'show'\n var elOption = {};\n this.makeElOption(elOption, value, axisModel, axisPointerModel, api);\n // Enable change axis pointer type.\n var graphicKey = elOption.graphicKey;\n if (graphicKey !== this._lastGraphicKey) {\n this.clear(api);\n }\n this._lastGraphicKey = graphicKey;\n var moveAnimation = this._moveAnimation = this.determineAnimation(axisModel, axisPointerModel);\n if (!group) {\n group = this._group = new graphic.Group();\n this.createPointerEl(group, elOption, axisModel, axisPointerModel);\n this.createLabelEl(group, elOption, axisModel, axisPointerModel);\n api.getZr().add(group);\n } else {\n var doUpdateProps = zrUtil.curry(updateProps, axisPointerModel, moveAnimation);\n this.updatePointerEl(group, elOption, doUpdateProps);\n this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);\n }\n updateMandatoryProps(group, axisPointerModel, true);\n this._renderHandle(value);\n };\n /**\n * @implement\n */\n BaseAxisPointer.prototype.remove = function (api) {\n this.clear(api);\n };\n /**\n * @implement\n */\n BaseAxisPointer.prototype.dispose = function (api) {\n this.clear(api);\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.determineAnimation = function (axisModel, axisPointerModel) {\n var animation = axisPointerModel.get('animation');\n var axis = axisModel.axis;\n var isCategoryAxis = axis.type === 'category';\n var useSnap = axisPointerModel.get('snap');\n // Value axis without snap always do not snap.\n if (!useSnap && !isCategoryAxis) {\n return false;\n }\n if (animation === 'auto' || animation == null) {\n var animationThreshold = this.animationThreshold;\n if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {\n return true;\n }\n // It is important to auto animation when snap used. Consider if there is\n // a dataZoom, animation will be disabled when too many points exist, while\n // it will be enabled for better visual effect when little points exist.\n if (useSnap) {\n var seriesDataCount = axisPointerModelHelper.getAxisInfo(axisModel).seriesDataCount;\n var axisExtent = axis.getExtent();\n // Approximate band width\n return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;\n }\n return false;\n }\n return animation === true;\n };\n /**\n * add {pointer, label, graphicKey} to elOption\n * @protected\n */\n BaseAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) {\n // Should be implemenented by sub-class.\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.createPointerEl = function (group, elOption, axisModel, axisPointerModel) {\n var pointerOption = elOption.pointer;\n if (pointerOption) {\n var pointerEl = inner(group).pointerEl = new graphic[pointerOption.type](clone(elOption.pointer));\n group.add(pointerEl);\n }\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.createLabelEl = function (group, elOption, axisModel, axisPointerModel) {\n if (elOption.label) {\n var labelEl = inner(group).labelEl = new graphic.Text(clone(elOption.label));\n group.add(labelEl);\n updateLabelShowHide(labelEl, axisPointerModel);\n }\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.updatePointerEl = function (group, elOption, updateProps) {\n var pointerEl = inner(group).pointerEl;\n if (pointerEl && elOption.pointer) {\n pointerEl.setStyle(elOption.pointer.style);\n updateProps(pointerEl, {\n shape: elOption.pointer.shape\n });\n }\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.updateLabelEl = function (group, elOption, updateProps, axisPointerModel) {\n var labelEl = inner(group).labelEl;\n if (labelEl) {\n labelEl.setStyle(elOption.label.style);\n updateProps(labelEl, {\n // Consider text length change in vertical axis, animation should\n // be used on shape, otherwise the effect will be weird.\n // TODOTODO\n // shape: elOption.label.shape,\n x: elOption.label.x,\n y: elOption.label.y\n });\n updateLabelShowHide(labelEl, axisPointerModel);\n }\n };\n /**\n * @private\n */\n BaseAxisPointer.prototype._renderHandle = function (value) {\n if (this._dragging || !this.updateHandleTransform) {\n return;\n }\n var axisPointerModel = this._axisPointerModel;\n var zr = this._api.getZr();\n var handle = this._handle;\n var handleModel = axisPointerModel.getModel('handle');\n var status = axisPointerModel.get('status');\n if (!handleModel.get('show') || !status || status === 'hide') {\n handle && zr.remove(handle);\n this._handle = null;\n return;\n }\n var isInit;\n if (!this._handle) {\n isInit = true;\n handle = this._handle = graphic.createIcon(handleModel.get('icon'), {\n cursor: 'move',\n draggable: true,\n onmousemove: function (e) {\n // For mobile device, prevent screen slider on the button.\n eventTool.stop(e.event);\n },\n onmousedown: bind(this._onHandleDragMove, this, 0, 0),\n drift: bind(this._onHandleDragMove, this),\n ondragend: bind(this._onHandleDragEnd, this)\n });\n zr.add(handle);\n }\n updateMandatoryProps(handle, axisPointerModel, false);\n // update style\n handle.setStyle(handleModel.getItemStyle(null, ['color', 'borderColor', 'borderWidth', 'opacity', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY']));\n // update position\n var handleSize = handleModel.get('size');\n if (!zrUtil.isArray(handleSize)) {\n handleSize = [handleSize, handleSize];\n }\n handle.scaleX = handleSize[0] / 2;\n handle.scaleY = handleSize[1] / 2;\n throttleUtil.createOrUpdate(this, '_doDispatchAxisPointer', handleModel.get('throttle') || 0, 'fixRate');\n this._moveHandleToValue(value, isInit);\n };\n BaseAxisPointer.prototype._moveHandleToValue = function (value, isInit) {\n updateProps(this._axisPointerModel, !isInit && this._moveAnimation, this._handle, getHandleTransProps(this.getHandleTransform(value, this._axisModel, this._axisPointerModel)));\n };\n BaseAxisPointer.prototype._onHandleDragMove = function (dx, dy) {\n var handle = this._handle;\n if (!handle) {\n return;\n }\n this._dragging = true;\n // Persistent for throttle.\n var trans = this.updateHandleTransform(getHandleTransProps(handle), [dx, dy], this._axisModel, this._axisPointerModel);\n this._payloadInfo = trans;\n handle.stopAnimation();\n handle.attr(getHandleTransProps(trans));\n inner(handle).lastProp = null;\n this._doDispatchAxisPointer();\n };\n /**\n * Throttled method.\n */\n BaseAxisPointer.prototype._doDispatchAxisPointer = function () {\n var handle = this._handle;\n if (!handle) {\n return;\n }\n var payloadInfo = this._payloadInfo;\n var axisModel = this._axisModel;\n this._api.dispatchAction({\n type: 'updateAxisPointer',\n x: payloadInfo.cursorPoint[0],\n y: payloadInfo.cursorPoint[1],\n tooltipOption: payloadInfo.tooltipOption,\n axesInfo: [{\n axisDim: axisModel.axis.dim,\n axisIndex: axisModel.componentIndex\n }]\n });\n };\n BaseAxisPointer.prototype._onHandleDragEnd = function () {\n this._dragging = false;\n var handle = this._handle;\n if (!handle) {\n return;\n }\n var value = this._axisPointerModel.get('value');\n // Consider snap or categroy axis, handle may be not consistent with\n // axisPointer. So move handle to align the exact value position when\n // drag ended.\n this._moveHandleToValue(value);\n // For the effect: tooltip will be shown when finger holding on handle\n // button, and will be hidden after finger left handle button.\n this._api.dispatchAction({\n type: 'hideTip'\n });\n };\n /**\n * @private\n */\n BaseAxisPointer.prototype.clear = function (api) {\n this._lastValue = null;\n this._lastStatus = null;\n var zr = api.getZr();\n var group = this._group;\n var handle = this._handle;\n if (zr && group) {\n this._lastGraphicKey = null;\n group && zr.remove(group);\n handle && zr.remove(handle);\n this._group = null;\n this._handle = null;\n this._payloadInfo = null;\n }\n throttleUtil.clear(this, '_doDispatchAxisPointer');\n };\n /**\n * @protected\n */\n BaseAxisPointer.prototype.doClear = function () {\n // Implemented by sub-class if necessary.\n };\n BaseAxisPointer.prototype.buildLabel = function (xy, wh, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x: xy[xDimIndex],\n y: xy[1 - xDimIndex],\n width: wh[xDimIndex],\n height: wh[1 - xDimIndex]\n };\n };\n return BaseAxisPointer;\n}();\nfunction updateProps(animationModel, moveAnimation, el, props) {\n // Animation optimize.\n if (!propsEqual(inner(el).lastProp, props)) {\n inner(el).lastProp = props;\n moveAnimation ? graphic.updateProps(el, props, animationModel) : (el.stopAnimation(), el.attr(props));\n }\n}\nfunction propsEqual(lastProps, newProps) {\n if (zrUtil.isObject(lastProps) && zrUtil.isObject(newProps)) {\n var equals_1 = true;\n zrUtil.each(newProps, function (item, key) {\n equals_1 = equals_1 && propsEqual(lastProps[key], item);\n });\n return !!equals_1;\n } else {\n return lastProps === newProps;\n }\n}\nfunction updateLabelShowHide(labelEl, axisPointerModel) {\n labelEl[axisPointerModel.get(['label', 'show']) ? 'show' : 'hide']();\n}\nfunction getHandleTransProps(trans) {\n return {\n x: trans.x || 0,\n y: trans.y || 0,\n rotation: trans.rotation || 0\n };\n}\nfunction updateMandatoryProps(group, axisPointerModel, silent) {\n var z = axisPointerModel.get('z');\n var zlevel = axisPointerModel.get('zlevel');\n group && group.traverse(function (el) {\n if (el.type !== 'group') {\n z != null && (el.z = z);\n zlevel != null && (el.zlevel = zlevel);\n el.silent = silent;\n }\n });\n}\nexport default BaseAxisPointer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as clazzUtil from '../util/clazz.js';\nvar Scale = /** @class */function () {\n function Scale(setting) {\n this._setting = setting || {};\n this._extent = [Infinity, -Infinity];\n }\n Scale.prototype.getSetting = function (name) {\n return this._setting[name];\n };\n /**\n * Set extent from data\n */\n Scale.prototype.unionExtent = function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]);\n // not setExtent because in log axis it may transformed to power\n // this.setExtent(extent[0], extent[1]);\n };\n /**\n * Set extent from data\n */\n Scale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * Get extent\n *\n * Extent is always in increase order.\n */\n Scale.prototype.getExtent = function () {\n return this._extent.slice();\n };\n /**\n * Set extent\n */\n Scale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent;\n if (!isNaN(start)) {\n thisExtent[0] = start;\n }\n if (!isNaN(end)) {\n thisExtent[1] = end;\n }\n };\n /**\n * If value is in extent range\n */\n Scale.prototype.isInExtentRange = function (value) {\n return this._extent[0] <= value && this._extent[1] >= value;\n };\n /**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\n Scale.prototype.isBlank = function () {\n return this._isBlank;\n };\n /**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\n Scale.prototype.setBlank = function (isBlank) {\n this._isBlank = isBlank;\n };\n return Scale;\n}();\nclazzUtil.enableClassManagement(Scale);\nexport default Scale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, isObject, map, isString } from 'zrender/lib/core/util.js';\nvar uidBase = 0;\nvar OrdinalMeta = /** @class */function () {\n function OrdinalMeta(opt) {\n this.categories = opt.categories || [];\n this._needCollect = opt.needCollect;\n this._deduplication = opt.deduplication;\n this.uid = ++uidBase;\n }\n OrdinalMeta.createByAxisModel = function (axisModel) {\n var option = axisModel.option;\n var data = option.data;\n var categories = data && map(data, getName);\n return new OrdinalMeta({\n categories: categories,\n needCollect: !categories,\n // deduplication is default in axis.\n deduplication: option.dedplication !== false\n });\n };\n ;\n OrdinalMeta.prototype.getOrdinal = function (category) {\n // @ts-ignore\n return this._getOrCreateMap().get(category);\n };\n /**\n * @return The ordinal. If not found, return NaN.\n */\n OrdinalMeta.prototype.parseAndCollect = function (category) {\n var index;\n var needCollect = this._needCollect;\n // The value of category dim can be the index of the given category set.\n // This feature is only supported when !needCollect, because we should\n // consider a common case: a value is 2017, which is a number but is\n // expected to be tread as a category. This case usually happen in dataset,\n // where it happent to be no need of the index feature.\n if (!isString(category) && !needCollect) {\n return category;\n }\n // Optimize for the scenario:\n // category is ['2012-01-01', '2012-01-02', ...], where the input\n // data has been ensured not duplicate and is large data.\n // Notice, if a dataset dimension provide categroies, usually echarts\n // should remove duplication except user tell echarts dont do that\n // (set axis.deduplication = false), because echarts do not know whether\n // the values in the category dimension has duplication (consider the\n // parallel-aqi example)\n if (needCollect && !this._deduplication) {\n index = this.categories.length;\n this.categories[index] = category;\n return index;\n }\n var map = this._getOrCreateMap();\n // @ts-ignore\n index = map.get(category);\n if (index == null) {\n if (needCollect) {\n index = this.categories.length;\n this.categories[index] = category;\n // @ts-ignore\n map.set(category, index);\n } else {\n index = NaN;\n }\n }\n return index;\n };\n // Consider big data, do not create map until needed.\n OrdinalMeta.prototype._getOrCreateMap = function () {\n return this._map || (this._map = createHashMap(this.categories));\n };\n return OrdinalMeta;\n}();\nfunction getName(obj) {\n if (isObject(obj) && obj.value != null) {\n return obj.value;\n } else {\n return obj + '';\n }\n}\nexport default OrdinalMeta;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getPrecision, round, nice, quantityExponent } from '../util/number.js';\nexport function isValueNice(val) {\n var exp10 = Math.pow(10, quantityExponent(Math.abs(val)));\n var f = Math.abs(val / exp10);\n return f === 0 || f === 1 || f === 2 || f === 3 || f === 5;\n}\nexport function isIntervalOrLogScale(scale) {\n return scale.type === 'interval' || scale.type === 'log';\n}\n/**\n * @param extent Both extent[0] and extent[1] should be valid number.\n * Should be extent[0] < extent[1].\n * @param splitNumber splitNumber should be >= 1.\n */\nexport function intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n var result = {};\n var span = extent[1] - extent[0];\n var interval = result.interval = nice(span / splitNumber, true);\n if (minInterval != null && interval < minInterval) {\n interval = result.interval = minInterval;\n }\n if (maxInterval != null && interval > maxInterval) {\n interval = result.interval = maxInterval;\n }\n // Tow more digital for tick.\n var precision = result.intervalPrecision = getIntervalPrecision(interval);\n // Niced extent inside original extent\n var niceTickExtent = result.niceTickExtent = [round(Math.ceil(extent[0] / interval) * interval, precision), round(Math.floor(extent[1] / interval) * interval, precision)];\n fixExtent(niceTickExtent, extent);\n return result;\n}\nexport function increaseInterval(interval) {\n var exp10 = Math.pow(10, quantityExponent(interval));\n // Increase interval\n var f = interval / exp10;\n if (!f) {\n f = 1;\n } else if (f === 2) {\n f = 3;\n } else if (f === 3) {\n f = 5;\n } else {\n // f is 1 or 5\n f *= 2;\n }\n return round(f * exp10);\n}\n/**\n * @return interval precision\n */\nexport function getIntervalPrecision(interval) {\n // Tow more digital for tick.\n return getPrecision(interval) + 2;\n}\nfunction clamp(niceTickExtent, idx, extent) {\n niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);\n}\n// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\nexport function fixExtent(niceTickExtent, extent) {\n !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);\n !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);\n clamp(niceTickExtent, 0, extent);\n clamp(niceTickExtent, 1, extent);\n if (niceTickExtent[0] > niceTickExtent[1]) {\n niceTickExtent[0] = niceTickExtent[1];\n }\n}\nexport function contain(val, extent) {\n return val >= extent[0] && val <= extent[1];\n}\nexport function normalize(val, extent) {\n if (extent[1] === extent[0]) {\n return 0.5;\n }\n return (val - extent[0]) / (extent[1] - extent[0]);\n}\nexport function scale(val, extent) {\n return val * (extent[1] - extent[0]) + extent[0];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Linear continuous scale\n * http://en.wikipedia.org/wiki/Level_of_measurement\n */\n// FIXME only one data\nimport Scale from './Scale.js';\nimport OrdinalMeta from '../data/OrdinalMeta.js';\nimport * as scaleHelper from './helper.js';\nimport { isArray, map, isObject, isString } from 'zrender/lib/core/util.js';\nvar OrdinalScale = /** @class */function (_super) {\n __extends(OrdinalScale, _super);\n function OrdinalScale(setting) {\n var _this = _super.call(this, setting) || this;\n _this.type = 'ordinal';\n var ordinalMeta = _this.getSetting('ordinalMeta');\n // Caution: Should not use instanceof, consider ec-extensions using\n // import approach to get OrdinalMeta class.\n if (!ordinalMeta) {\n ordinalMeta = new OrdinalMeta({});\n }\n if (isArray(ordinalMeta)) {\n ordinalMeta = new OrdinalMeta({\n categories: map(ordinalMeta, function (item) {\n return isObject(item) ? item.value : item;\n })\n });\n }\n _this._ordinalMeta = ordinalMeta;\n _this._extent = _this.getSetting('extent') || [0, ordinalMeta.categories.length - 1];\n return _this;\n }\n OrdinalScale.prototype.parse = function (val) {\n // Caution: Math.round(null) will return `0` rather than `NaN`\n if (val == null) {\n return NaN;\n }\n return isString(val) ? this._ordinalMeta.getOrdinal(val)\n // val might be float.\n : Math.round(val);\n };\n OrdinalScale.prototype.contain = function (rank) {\n rank = this.parse(rank);\n return scaleHelper.contain(rank, this._extent) && this._ordinalMeta.categories[rank] != null;\n };\n /**\n * Normalize given rank or name to linear [0, 1]\n * @param val raw ordinal number.\n * @return normalized value in [0, 1].\n */\n OrdinalScale.prototype.normalize = function (val) {\n val = this._getTickNumber(this.parse(val));\n return scaleHelper.normalize(val, this._extent);\n };\n /**\n * @param val normalized value in [0, 1].\n * @return raw ordinal number.\n */\n OrdinalScale.prototype.scale = function (val) {\n val = Math.round(scaleHelper.scale(val, this._extent));\n return this.getRawOrdinalNumber(val);\n };\n OrdinalScale.prototype.getTicks = function () {\n var ticks = [];\n var extent = this._extent;\n var rank = extent[0];\n while (rank <= extent[1]) {\n ticks.push({\n value: rank\n });\n rank++;\n }\n return ticks;\n };\n OrdinalScale.prototype.getMinorTicks = function (splitNumber) {\n // Not support.\n return;\n };\n /**\n * @see `Ordinal['_ordinalNumbersByTick']`\n */\n OrdinalScale.prototype.setSortInfo = function (info) {\n if (info == null) {\n this._ordinalNumbersByTick = this._ticksByOrdinalNumber = null;\n return;\n }\n var infoOrdinalNumbers = info.ordinalNumbers;\n var ordinalsByTick = this._ordinalNumbersByTick = [];\n var ticksByOrdinal = this._ticksByOrdinalNumber = [];\n // Unnecessary support negative tick in `realtimeSort`.\n var tickNum = 0;\n var allCategoryLen = this._ordinalMeta.categories.length;\n for (var len = Math.min(allCategoryLen, infoOrdinalNumbers.length); tickNum < len; ++tickNum) {\n var ordinalNumber = infoOrdinalNumbers[tickNum];\n ordinalsByTick[tickNum] = ordinalNumber;\n ticksByOrdinal[ordinalNumber] = tickNum;\n }\n // Handle that `series.data` only covers part of the `axis.category.data`.\n var unusedOrdinal = 0;\n for (; tickNum < allCategoryLen; ++tickNum) {\n while (ticksByOrdinal[unusedOrdinal] != null) {\n unusedOrdinal++;\n }\n ;\n ordinalsByTick.push(unusedOrdinal);\n ticksByOrdinal[unusedOrdinal] = tickNum;\n }\n };\n OrdinalScale.prototype._getTickNumber = function (ordinal) {\n var ticksByOrdinalNumber = this._ticksByOrdinalNumber;\n // also support ordinal out of range of `ordinalMeta.categories.length`,\n // where ordinal numbers are used as tick value directly.\n return ticksByOrdinalNumber && ordinal >= 0 && ordinal < ticksByOrdinalNumber.length ? ticksByOrdinalNumber[ordinal] : ordinal;\n };\n /**\n * @usage\n * ```js\n * const ordinalNumber = ordinalScale.getRawOrdinalNumber(tickVal);\n *\n * // case0\n * const rawOrdinalValue = axisModel.getCategories()[ordinalNumber];\n * // case1\n * const rawOrdinalValue = this._ordinalMeta.categories[ordinalNumber];\n * // case2\n * const coord = axis.dataToCoord(ordinalNumber);\n * ```\n *\n * @param {OrdinalNumber} tickNumber index of display\n */\n OrdinalScale.prototype.getRawOrdinalNumber = function (tickNumber) {\n var ordinalNumbersByTick = this._ordinalNumbersByTick;\n // tickNumber may be out of range, e.g., when axis max is larger than `ordinalMeta.categories.length`.,\n // where ordinal numbers are used as tick value directly.\n return ordinalNumbersByTick && tickNumber >= 0 && tickNumber < ordinalNumbersByTick.length ? ordinalNumbersByTick[tickNumber] : tickNumber;\n };\n /**\n * Get item on tick\n */\n OrdinalScale.prototype.getLabel = function (tick) {\n if (!this.isBlank()) {\n var ordinalNumber = this.getRawOrdinalNumber(tick.value);\n var cateogry = this._ordinalMeta.categories[ordinalNumber];\n // Note that if no data, ordinalMeta.categories is an empty array.\n // Return empty if it's not exist.\n return cateogry == null ? '' : cateogry + '';\n }\n };\n OrdinalScale.prototype.count = function () {\n return this._extent[1] - this._extent[0] + 1;\n };\n OrdinalScale.prototype.unionExtentFromData = function (data, dim) {\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * @override\n * If value is in extent range\n */\n OrdinalScale.prototype.isInExtentRange = function (value) {\n value = this._getTickNumber(value);\n return this._extent[0] <= value && this._extent[1] >= value;\n };\n OrdinalScale.prototype.getOrdinalMeta = function () {\n return this._ordinalMeta;\n };\n OrdinalScale.prototype.calcNiceTicks = function () {};\n OrdinalScale.prototype.calcNiceExtent = function () {};\n OrdinalScale.type = 'ordinal';\n return OrdinalScale;\n}(Scale);\nScale.registerClass(OrdinalScale);\nexport default OrdinalScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as numberUtil from '../util/number.js';\nimport * as formatUtil from '../util/format.js';\nimport Scale from './Scale.js';\nimport * as helper from './helper.js';\nvar roundNumber = numberUtil.round;\nvar IntervalScale = /** @class */function (_super) {\n __extends(IntervalScale, _super);\n function IntervalScale() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'interval';\n // Step is calculated in adjustExtent.\n _this._interval = 0;\n _this._intervalPrecision = 2;\n return _this;\n }\n IntervalScale.prototype.parse = function (val) {\n return val;\n };\n IntervalScale.prototype.contain = function (val) {\n return helper.contain(val, this._extent);\n };\n IntervalScale.prototype.normalize = function (val) {\n return helper.normalize(val, this._extent);\n };\n IntervalScale.prototype.scale = function (val) {\n return helper.scale(val, this._extent);\n };\n IntervalScale.prototype.setExtent = function (start, end) {\n var thisExtent = this._extent;\n // start,end may be a Number like '25',so...\n if (!isNaN(start)) {\n thisExtent[0] = parseFloat(start);\n }\n if (!isNaN(end)) {\n thisExtent[1] = parseFloat(end);\n }\n };\n IntervalScale.prototype.unionExtent = function (other) {\n var extent = this._extent;\n other[0] < extent[0] && (extent[0] = other[0]);\n other[1] > extent[1] && (extent[1] = other[1]);\n // unionExtent may called by it's sub classes\n this.setExtent(extent[0], extent[1]);\n };\n IntervalScale.prototype.getInterval = function () {\n return this._interval;\n };\n IntervalScale.prototype.setInterval = function (interval) {\n this._interval = interval;\n // Dropped auto calculated niceExtent and use user-set extent.\n // We assume user wants to set both interval, min, max to get a better result.\n this._niceExtent = this._extent.slice();\n this._intervalPrecision = helper.getIntervalPrecision(interval);\n };\n /**\n * @param expandToNicedExtent Whether expand the ticks to niced extent.\n */\n IntervalScale.prototype.getTicks = function (expandToNicedExtent) {\n var interval = this._interval;\n var extent = this._extent;\n var niceTickExtent = this._niceExtent;\n var intervalPrecision = this._intervalPrecision;\n var ticks = [];\n // If interval is 0, return [];\n if (!interval) {\n return ticks;\n }\n // Consider this case: using dataZoom toolbox, zoom and zoom.\n var safeLimit = 10000;\n if (extent[0] < niceTickExtent[0]) {\n if (expandToNicedExtent) {\n ticks.push({\n value: roundNumber(niceTickExtent[0] - interval, intervalPrecision)\n });\n } else {\n ticks.push({\n value: extent[0]\n });\n }\n }\n var tick = niceTickExtent[0];\n while (tick <= niceTickExtent[1]) {\n ticks.push({\n value: tick\n });\n // Avoid rounding error\n tick = roundNumber(tick + interval, intervalPrecision);\n if (tick === ticks[ticks.length - 1].value) {\n // Consider out of safe float point, e.g.,\n // -3711126.9907707 + 2e-10 === -3711126.9907707\n break;\n }\n if (ticks.length > safeLimit) {\n return [];\n }\n }\n // Consider this case: the last item of ticks is smaller\n // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n var lastNiceTick = ticks.length ? ticks[ticks.length - 1].value : niceTickExtent[1];\n if (extent[1] > lastNiceTick) {\n if (expandToNicedExtent) {\n ticks.push({\n value: roundNumber(lastNiceTick + interval, intervalPrecision)\n });\n } else {\n ticks.push({\n value: extent[1]\n });\n }\n }\n return ticks;\n };\n IntervalScale.prototype.getMinorTicks = function (splitNumber) {\n var ticks = this.getTicks(true);\n var minorTicks = [];\n var extent = this.getExtent();\n for (var i = 1; i < ticks.length; i++) {\n var nextTick = ticks[i];\n var prevTick = ticks[i - 1];\n var count = 0;\n var minorTicksGroup = [];\n var interval = nextTick.value - prevTick.value;\n var minorInterval = interval / splitNumber;\n while (count < splitNumber - 1) {\n var minorTick = roundNumber(prevTick.value + (count + 1) * minorInterval);\n // For the first and last interval. The count may be less than splitNumber.\n if (minorTick > extent[0] && minorTick < extent[1]) {\n minorTicksGroup.push(minorTick);\n }\n count++;\n }\n minorTicks.push(minorTicksGroup);\n }\n return minorTicks;\n };\n /**\n * @param opt.precision If 'auto', use nice presision.\n * @param opt.pad returns 1.50 but not 1.5 if precision is 2.\n */\n IntervalScale.prototype.getLabel = function (data, opt) {\n if (data == null) {\n return '';\n }\n var precision = opt && opt.precision;\n if (precision == null) {\n precision = numberUtil.getPrecision(data.value) || 0;\n } else if (precision === 'auto') {\n // Should be more precise then tick.\n precision = this._intervalPrecision;\n }\n // (1) If `precision` is set, 12.005 should be display as '12.00500'.\n // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.\n var dataNum = roundNumber(data.value, precision, true);\n return formatUtil.addCommas(dataNum);\n };\n /**\n * @param splitNumber By default `5`.\n */\n IntervalScale.prototype.calcNiceTicks = function (splitNumber, minInterval, maxInterval) {\n splitNumber = splitNumber || 5;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n if (!isFinite(span)) {\n return;\n }\n // User may set axis min 0 and data are all negative\n // FIXME If it needs to reverse ?\n if (span < 0) {\n span = -span;\n extent.reverse();\n }\n var result = helper.intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval);\n this._intervalPrecision = result.intervalPrecision;\n this._interval = result.interval;\n this._niceExtent = result.niceTickExtent;\n };\n IntervalScale.prototype.calcNiceExtent = function (opt) {\n var extent = this._extent;\n // If extent start and end are same, expand them\n if (extent[0] === extent[1]) {\n if (extent[0] !== 0) {\n // Expand extent\n // Note that extents can be both negative. See #13154\n var expandSize = Math.abs(extent[0]);\n // In the fowllowing case\n // Axis has been fixed max 100\n // Plus data are all 100 and axis extent are [100, 100].\n // Extend to the both side will cause expanded max is larger than fixed max.\n // So only expand to the smaller side.\n if (!opt.fixMax) {\n extent[1] += expandSize / 2;\n extent[0] -= expandSize / 2;\n } else {\n extent[0] -= expandSize / 2;\n }\n } else {\n extent[1] = 1;\n }\n }\n var span = extent[1] - extent[0];\n // If there are no data and extent are [Infinity, -Infinity]\n if (!isFinite(span)) {\n extent[0] = 0;\n extent[1] = 1;\n }\n this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n // let extent = this._extent;\n var interval = this._interval;\n if (!opt.fixMin) {\n extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n }\n if (!opt.fixMax) {\n extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n }\n };\n IntervalScale.prototype.setNiceExtent = function (min, max) {\n this._niceExtent = [min, max];\n };\n IntervalScale.type = 'interval';\n return IntervalScale;\n}(Scale);\nScale.registerClass(IntervalScale);\nexport default IntervalScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, defaults, keys } from 'zrender/lib/core/util.js';\nimport { parsePercent } from '../util/number.js';\nimport { isDimensionStacked } from '../data/helper/dataStackHelper.js';\nimport createRenderPlanner from '../chart/helper/createRenderPlanner.js';\nimport { createFloat32Array } from '../util/vendor.js';\nvar STACK_PREFIX = '__ec_stack_';\nfunction getSeriesStackId(seriesModel) {\n return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\nfunction getAxisKey(axis) {\n return axis.dim + axis.index;\n}\n/**\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\nexport function getLayoutOnAxis(opt) {\n var params = [];\n var baseAxis = opt.axis;\n var axisKey = 'axis0';\n if (baseAxis.type !== 'category') {\n return;\n }\n var bandWidth = baseAxis.getBandWidth();\n for (var i = 0; i < opt.count || 0; i++) {\n params.push(defaults({\n bandWidth: bandWidth,\n axisKey: axisKey,\n stackId: STACK_PREFIX + i\n }, opt));\n }\n var widthAndOffsets = doCalBarWidthAndOffset(params);\n var result = [];\n for (var i = 0; i < opt.count; i++) {\n var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n item.offsetCenter = item.offset + item.width / 2;\n result.push(item);\n }\n return result;\n}\nexport function prepareLayoutBarSeries(seriesType, ecModel) {\n var seriesModels = [];\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n // Check series coordinate, do layout for cartesian2d only\n if (isOnCartesian(seriesModel)) {\n seriesModels.push(seriesModel);\n }\n });\n return seriesModels;\n}\n/**\n * Map from (baseAxis.dim + '_' + baseAxis.index) to min gap of two adjacent\n * values.\n * This works for time axes, value axes, and log axes.\n * For a single time axis, return value is in the form like\n * {'x_0': [1000000]}.\n * The value of 1000000 is in milliseconds.\n */\nfunction getValueAxesMinGaps(barSeries) {\n /**\n * Map from axis.index to values.\n * For a single time axis, axisValues is in the form like\n * {'x_0': [1495555200000, 1495641600000, 1495728000000]}.\n * Items in axisValues[x], e.g. 1495555200000, are time values of all\n * series.\n */\n var axisValues = {};\n each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n if (baseAxis.type !== 'time' && baseAxis.type !== 'value') {\n return;\n }\n var data = seriesModel.getData();\n var key = baseAxis.dim + '_' + baseAxis.index;\n var dimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim));\n var store = data.getStore();\n for (var i = 0, cnt = store.count(); i < cnt; ++i) {\n var value = store.get(dimIdx, i);\n if (!axisValues[key]) {\n // No previous data for the axis\n axisValues[key] = [value];\n } else {\n // No value in previous series\n axisValues[key].push(value);\n }\n // Ignore duplicated time values in the same axis\n }\n });\n\n var axisMinGaps = {};\n for (var key in axisValues) {\n if (axisValues.hasOwnProperty(key)) {\n var valuesInAxis = axisValues[key];\n if (valuesInAxis) {\n // Sort axis values into ascending order to calculate gaps\n valuesInAxis.sort(function (a, b) {\n return a - b;\n });\n var min = null;\n for (var j = 1; j < valuesInAxis.length; ++j) {\n var delta = valuesInAxis[j] - valuesInAxis[j - 1];\n if (delta > 0) {\n // Ignore 0 delta because they are of the same axis value\n min = min === null ? delta : Math.min(min, delta);\n }\n }\n // Set to null if only have one data\n axisMinGaps[key] = min;\n }\n }\n }\n return axisMinGaps;\n}\nexport function makeColumnLayout(barSeries) {\n var axisMinGaps = getValueAxesMinGaps(barSeries);\n var seriesInfoList = [];\n each(barSeries, function (seriesModel) {\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var axisExtent = baseAxis.getExtent();\n var bandWidth;\n if (baseAxis.type === 'category') {\n bandWidth = baseAxis.getBandWidth();\n } else if (baseAxis.type === 'value' || baseAxis.type === 'time') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n var minGap = axisMinGaps[key];\n var extentSpan = Math.abs(axisExtent[1] - axisExtent[0]);\n var scale = baseAxis.scale.getExtent();\n var scaleSpan = Math.abs(scale[1] - scale[0]);\n bandWidth = minGap ? extentSpan / scaleSpan * minGap : extentSpan; // When there is only one data value\n } else {\n var data = seriesModel.getData();\n bandWidth = Math.abs(axisExtent[1] - axisExtent[0]) / data.count();\n }\n var barWidth = parsePercent(seriesModel.get('barWidth'), bandWidth);\n var barMaxWidth = parsePercent(seriesModel.get('barMaxWidth'), bandWidth);\n var barMinWidth = parsePercent(\n // barMinWidth by default is 0.5 / 1 in cartesian. Because in value axis,\n // the auto-calculated bar width might be less than 0.5 / 1.\n seriesModel.get('barMinWidth') || (isInLargeMode(seriesModel) ? 0.5 : 1), bandWidth);\n var barGap = seriesModel.get('barGap');\n var barCategoryGap = seriesModel.get('barCategoryGap');\n seriesInfoList.push({\n bandWidth: bandWidth,\n barWidth: barWidth,\n barMaxWidth: barMaxWidth,\n barMinWidth: barMinWidth,\n barGap: barGap,\n barCategoryGap: barCategoryGap,\n axisKey: getAxisKey(baseAxis),\n stackId: getSeriesStackId(seriesModel)\n });\n });\n return doCalBarWidthAndOffset(seriesInfoList);\n}\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n // Columns info on each category axis. Key is cartesian name\n var columnsMap = {};\n each(seriesInfoList, function (seriesInfo, idx) {\n var axisKey = seriesInfo.axisKey;\n var bandWidth = seriesInfo.bandWidth;\n var columnsOnAxis = columnsMap[axisKey] || {\n bandWidth: bandWidth,\n remainedWidth: bandWidth,\n autoWidthCount: 0,\n categoryGap: null,\n gap: '20%',\n stacks: {}\n };\n var stacks = columnsOnAxis.stacks;\n columnsMap[axisKey] = columnsOnAxis;\n var stackId = seriesInfo.stackId;\n if (!stacks[stackId]) {\n columnsOnAxis.autoWidthCount++;\n }\n stacks[stackId] = stacks[stackId] || {\n width: 0,\n maxWidth: 0\n };\n // Caution: In a single coordinate system, these barGrid attributes\n // will be shared by series. Consider that they have default values,\n // only the attributes set on the last series will work.\n // Do not change this fact unless there will be a break change.\n var barWidth = seriesInfo.barWidth;\n if (barWidth && !stacks[stackId].width) {\n // See #6312, do not restrict width.\n stacks[stackId].width = barWidth;\n barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n columnsOnAxis.remainedWidth -= barWidth;\n }\n var barMaxWidth = seriesInfo.barMaxWidth;\n barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n var barMinWidth = seriesInfo.barMinWidth;\n barMinWidth && (stacks[stackId].minWidth = barMinWidth);\n var barGap = seriesInfo.barGap;\n barGap != null && (columnsOnAxis.gap = barGap);\n var barCategoryGap = seriesInfo.barCategoryGap;\n barCategoryGap != null && (columnsOnAxis.categoryGap = barCategoryGap);\n });\n var result = {};\n each(columnsMap, function (columnsOnAxis, coordSysName) {\n result[coordSysName] = {};\n var stacks = columnsOnAxis.stacks;\n var bandWidth = columnsOnAxis.bandWidth;\n var categoryGapPercent = columnsOnAxis.categoryGap;\n if (categoryGapPercent == null) {\n var columnCount = keys(stacks).length;\n // More columns in one group\n // the spaces between group is smaller. Or the column will be too thin.\n categoryGapPercent = Math.max(35 - columnCount * 4, 15) + '%';\n }\n var categoryGap = parsePercent(categoryGapPercent, bandWidth);\n var barGapPercent = parsePercent(columnsOnAxis.gap, 1);\n var remainedWidth = columnsOnAxis.remainedWidth;\n var autoWidthCount = columnsOnAxis.autoWidthCount;\n var autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n // Find if any auto calculated bar exceeded maxBarWidth\n each(stacks, function (column) {\n var maxWidth = column.maxWidth;\n var minWidth = column.minWidth;\n if (!column.width) {\n var finalWidth = autoWidth;\n if (maxWidth && maxWidth < finalWidth) {\n finalWidth = Math.min(maxWidth, remainedWidth);\n }\n // `minWidth` has higher priority. `minWidth` decide that whether the\n // bar is able to be visible. So `minWidth` should not be restricted\n // by `maxWidth` or `remainedWidth` (which is from `bandWidth`). In\n // the extreme cases for `value` axis, bars are allowed to overlap\n // with each other if `minWidth` specified.\n if (minWidth && minWidth > finalWidth) {\n finalWidth = minWidth;\n }\n if (finalWidth !== autoWidth) {\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n } else {\n // `barMinWidth/barMaxWidth` has higher priority than `barWidth`, as\n // CSS does. Because barWidth can be a percent value, where\n // `barMaxWidth` can be used to restrict the final width.\n var finalWidth = column.width;\n if (maxWidth) {\n finalWidth = Math.min(finalWidth, maxWidth);\n }\n // `minWidth` has higher priority, as described above\n if (minWidth) {\n finalWidth = Math.max(finalWidth, minWidth);\n }\n column.width = finalWidth;\n remainedWidth -= finalWidth + barGapPercent * finalWidth;\n autoWidthCount--;\n }\n });\n // Recalculate width again\n autoWidth = (remainedWidth - categoryGap) / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n autoWidth = Math.max(autoWidth, 0);\n var widthSum = 0;\n var lastColumn;\n each(stacks, function (column, idx) {\n if (!column.width) {\n column.width = autoWidth;\n }\n lastColumn = column;\n widthSum += column.width * (1 + barGapPercent);\n });\n if (lastColumn) {\n widthSum -= lastColumn.width * barGapPercent;\n }\n var offset = -widthSum / 2;\n each(stacks, function (column, stackId) {\n result[coordSysName][stackId] = result[coordSysName][stackId] || {\n bandWidth: bandWidth,\n offset: offset,\n width: column.width\n };\n offset += column.width * (1 + barGapPercent);\n });\n });\n return result;\n}\nfunction retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n if (barWidthAndOffset && axis) {\n var result = barWidthAndOffset[getAxisKey(axis)];\n if (result != null && seriesModel != null) {\n return result[getSeriesStackId(seriesModel)];\n }\n return result;\n }\n}\nexport { retrieveColumnLayout };\nexport function layout(seriesType, ecModel) {\n var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n var barWidthAndOffset = makeColumnLayout(seriesModels);\n each(seriesModels, function (seriesModel) {\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var stackId = getSeriesStackId(seriesModel);\n var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n var columnOffset = columnLayoutInfo.offset;\n var columnWidth = columnLayoutInfo.width;\n data.setLayout({\n bandWidth: columnLayoutInfo.bandWidth,\n offset: columnOffset,\n size: columnWidth\n });\n });\n}\n// TODO: Do not support stack in large mode yet.\nexport function createProgressiveLayout(seriesType) {\n return {\n seriesType: seriesType,\n plan: createRenderPlanner(),\n reset: function (seriesModel) {\n if (!isOnCartesian(seriesModel)) {\n return;\n }\n var data = seriesModel.getData();\n var cartesian = seriesModel.coordinateSystem;\n var baseAxis = cartesian.getBaseAxis();\n var valueAxis = cartesian.getOtherAxis(baseAxis);\n var valueDimIdx = data.getDimensionIndex(data.mapDimension(valueAxis.dim));\n var baseDimIdx = data.getDimensionIndex(data.mapDimension(baseAxis.dim));\n var drawBackground = seriesModel.get('showBackground', true);\n var valueDim = data.mapDimension(valueAxis.dim);\n var stackResultDim = data.getCalculationInfo('stackResultDimension');\n var stacked = isDimensionStacked(data, valueDim) && !!data.getCalculationInfo('stackedOnSeries');\n var isValueAxisH = valueAxis.isHorizontal();\n var valueAxisStart = getValueAxisStart(baseAxis, valueAxis);\n var isLarge = isInLargeMode(seriesModel);\n var barMinHeight = seriesModel.get('barMinHeight') || 0;\n var stackedDimIdx = stackResultDim && data.getDimensionIndex(stackResultDim);\n // Layout info.\n var columnWidth = data.getLayout('size');\n var columnOffset = data.getLayout('offset');\n return {\n progress: function (params, data) {\n var count = params.count;\n var largePoints = isLarge && createFloat32Array(count * 3);\n var largeBackgroundPoints = isLarge && drawBackground && createFloat32Array(count * 3);\n var largeDataIndices = isLarge && createFloat32Array(count);\n var coordLayout = cartesian.master.getRect();\n var bgSize = isValueAxisH ? coordLayout.width : coordLayout.height;\n var dataIndex;\n var store = data.getStore();\n var idxOffset = 0;\n while ((dataIndex = params.next()) != null) {\n var value = store.get(stacked ? stackedDimIdx : valueDimIdx, dataIndex);\n var baseValue = store.get(baseDimIdx, dataIndex);\n var baseCoord = valueAxisStart;\n var startValue = void 0;\n // Because of the barMinHeight, we can not use the value in\n // stackResultDimension directly.\n if (stacked) {\n startValue = +value - store.get(valueDimIdx, dataIndex);\n }\n var x = void 0;\n var y = void 0;\n var width = void 0;\n var height = void 0;\n if (isValueAxisH) {\n var coord = cartesian.dataToPoint([value, baseValue]);\n if (stacked) {\n var startCoord = cartesian.dataToPoint([startValue, baseValue]);\n baseCoord = startCoord[0];\n }\n x = baseCoord;\n y = coord[1] + columnOffset;\n width = coord[0] - baseCoord;\n height = columnWidth;\n if (Math.abs(width) < barMinHeight) {\n width = (width < 0 ? -1 : 1) * barMinHeight;\n }\n } else {\n var coord = cartesian.dataToPoint([baseValue, value]);\n if (stacked) {\n var startCoord = cartesian.dataToPoint([baseValue, startValue]);\n baseCoord = startCoord[1];\n }\n x = coord[0] + columnOffset;\n y = baseCoord;\n width = columnWidth;\n height = coord[1] - baseCoord;\n if (Math.abs(height) < barMinHeight) {\n // Include zero to has a positive bar\n height = (height <= 0 ? -1 : 1) * barMinHeight;\n }\n }\n if (!isLarge) {\n data.setItemLayout(dataIndex, {\n x: x,\n y: y,\n width: width,\n height: height\n });\n } else {\n largePoints[idxOffset] = x;\n largePoints[idxOffset + 1] = y;\n largePoints[idxOffset + 2] = isValueAxisH ? width : height;\n if (largeBackgroundPoints) {\n largeBackgroundPoints[idxOffset] = isValueAxisH ? coordLayout.x : x;\n largeBackgroundPoints[idxOffset + 1] = isValueAxisH ? y : coordLayout.y;\n largeBackgroundPoints[idxOffset + 2] = bgSize;\n }\n largeDataIndices[dataIndex] = dataIndex;\n }\n idxOffset += 3;\n }\n if (isLarge) {\n data.setLayout({\n largePoints: largePoints,\n largeDataIndices: largeDataIndices,\n largeBackgroundPoints: largeBackgroundPoints,\n valueAxisHorizontal: isValueAxisH\n });\n }\n }\n };\n }\n };\n}\nfunction isOnCartesian(seriesModel) {\n return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n}\nfunction isInLargeMode(seriesModel) {\n return seriesModel.pipelineContext && seriesModel.pipelineContext.large;\n}\n// See cases in `test/bar-start.html` and `#7412`, `#8747`.\nfunction getValueAxisStart(baseAxis, valueAxis) {\n return valueAxis.toGlobalCoord(valueAxis.dataToCoord(valueAxis.type === 'log' ? 1 : 0));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/*\n* A third-party license is embedded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* ).\n*/\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design has\n// considered these common cases:\n// (1) Time that is persistent in server is in UTC, but it is needed to be displayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\nimport * as numberUtil from '../util/number.js';\nimport { ONE_SECOND, ONE_MINUTE, ONE_HOUR, ONE_DAY, ONE_YEAR, format, leveledFormat, getUnitValue, timeUnits, fullLeveledFormatter, getPrimaryTimeUnit, isPrimaryTimeUnit, getDefaultFormatPrecisionOfInterval, fullYearGetterName, monthSetterName, fullYearSetterName, dateSetterName, hoursGetterName, hoursSetterName, minutesSetterName, secondsSetterName, millisecondsSetterName, monthGetterName, dateGetterName, minutesGetterName, secondsGetterName, millisecondsGetterName } from '../util/time.js';\nimport * as scaleHelper from './helper.js';\nimport IntervalScale from './Interval.js';\nimport Scale from './Scale.js';\nimport { warn } from '../util/log.js';\nimport { filter, isNumber, map } from 'zrender/lib/core/util.js';\n// FIXME 公用?\nvar bisect = function (a, x, lo, hi) {\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (a[mid][1] < x) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n};\nvar TimeScale = /** @class */function (_super) {\n __extends(TimeScale, _super);\n function TimeScale(settings) {\n var _this = _super.call(this, settings) || this;\n _this.type = 'time';\n return _this;\n }\n /**\n * Get label is mainly for other components like dataZoom, tooltip.\n */\n TimeScale.prototype.getLabel = function (tick) {\n var useUTC = this.getSetting('useUTC');\n return format(tick.value, fullLeveledFormatter[getDefaultFormatPrecisionOfInterval(getPrimaryTimeUnit(this._minLevelUnit))] || fullLeveledFormatter.second, useUTC, this.getSetting('locale'));\n };\n TimeScale.prototype.getFormattedLabel = function (tick, idx, labelFormatter) {\n var isUTC = this.getSetting('useUTC');\n var lang = this.getSetting('locale');\n return leveledFormat(tick, idx, labelFormatter, lang, isUTC);\n };\n /**\n * @override\n */\n TimeScale.prototype.getTicks = function () {\n var interval = this._interval;\n var extent = this._extent;\n var ticks = [];\n // If interval is 0, return [];\n if (!interval) {\n return ticks;\n }\n ticks.push({\n value: extent[0],\n level: 0\n });\n var useUTC = this.getSetting('useUTC');\n var innerTicks = getIntervalTicks(this._minLevelUnit, this._approxInterval, useUTC, extent);\n ticks = ticks.concat(innerTicks);\n ticks.push({\n value: extent[1],\n level: 0\n });\n return ticks;\n };\n TimeScale.prototype.calcNiceExtent = function (opt) {\n var extent = this._extent;\n // If extent start and end are same, expand them\n if (extent[0] === extent[1]) {\n // Expand extent\n extent[0] -= ONE_DAY;\n extent[1] += ONE_DAY;\n }\n // If there are no data and extent are [Infinity, -Infinity]\n if (extent[1] === -Infinity && extent[0] === Infinity) {\n var d = new Date();\n extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n extent[0] = extent[1] - ONE_DAY;\n }\n this.calcNiceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n };\n TimeScale.prototype.calcNiceTicks = function (approxTickNum, minInterval, maxInterval) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n this._approxInterval = span / approxTickNum;\n if (minInterval != null && this._approxInterval < minInterval) {\n this._approxInterval = minInterval;\n }\n if (maxInterval != null && this._approxInterval > maxInterval) {\n this._approxInterval = maxInterval;\n }\n var scaleIntervalsLen = scaleIntervals.length;\n var idx = Math.min(bisect(scaleIntervals, this._approxInterval, 0, scaleIntervalsLen), scaleIntervalsLen - 1);\n // Interval that can be used to calculate ticks\n this._interval = scaleIntervals[idx][1];\n // Min level used when picking ticks from top down.\n // We check one more level to avoid the ticks are to sparse in some case.\n this._minLevelUnit = scaleIntervals[Math.max(idx - 1, 0)][0];\n };\n TimeScale.prototype.parse = function (val) {\n // val might be float.\n return isNumber(val) ? val : +numberUtil.parseDate(val);\n };\n TimeScale.prototype.contain = function (val) {\n return scaleHelper.contain(this.parse(val), this._extent);\n };\n TimeScale.prototype.normalize = function (val) {\n return scaleHelper.normalize(this.parse(val), this._extent);\n };\n TimeScale.prototype.scale = function (val) {\n return scaleHelper.scale(val, this._extent);\n };\n TimeScale.type = 'time';\n return TimeScale;\n}(IntervalScale);\n/**\n * This implementation was originally copied from \"d3.js\"\n * \n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\nvar scaleIntervals = [\n// Format interval\n['second', ONE_SECOND], ['minute', ONE_MINUTE], ['hour', ONE_HOUR], ['quarter-day', ONE_HOUR * 6], ['half-day', ONE_HOUR * 12], ['day', ONE_DAY * 1.2], ['half-week', ONE_DAY * 3.5], ['week', ONE_DAY * 7], ['month', ONE_DAY * 31], ['quarter', ONE_DAY * 95], ['half-year', ONE_YEAR / 2], ['year', ONE_YEAR] // 1Y\n];\n\nfunction isUnitValueSame(unit, valueA, valueB, isUTC) {\n var dateA = numberUtil.parseDate(valueA);\n var dateB = numberUtil.parseDate(valueB);\n var isSame = function (unit) {\n return getUnitValue(dateA, unit, isUTC) === getUnitValue(dateB, unit, isUTC);\n };\n var isSameYear = function () {\n return isSame('year');\n };\n // const isSameHalfYear = () => isSameYear() && isSame('half-year');\n // const isSameQuater = () => isSameYear() && isSame('quarter');\n var isSameMonth = function () {\n return isSameYear() && isSame('month');\n };\n var isSameDay = function () {\n return isSameMonth() && isSame('day');\n };\n // const isSameHalfDay = () => isSameDay() && isSame('half-day');\n var isSameHour = function () {\n return isSameDay() && isSame('hour');\n };\n var isSameMinute = function () {\n return isSameHour() && isSame('minute');\n };\n var isSameSecond = function () {\n return isSameMinute() && isSame('second');\n };\n var isSameMilliSecond = function () {\n return isSameSecond() && isSame('millisecond');\n };\n switch (unit) {\n case 'year':\n return isSameYear();\n case 'month':\n return isSameMonth();\n case 'day':\n return isSameDay();\n case 'hour':\n return isSameHour();\n case 'minute':\n return isSameMinute();\n case 'second':\n return isSameSecond();\n case 'millisecond':\n return isSameMilliSecond();\n }\n}\n// const primaryUnitGetters = {\n// year: fullYearGetterName(),\n// month: monthGetterName(),\n// day: dateGetterName(),\n// hour: hoursGetterName(),\n// minute: minutesGetterName(),\n// second: secondsGetterName(),\n// millisecond: millisecondsGetterName()\n// };\n// const primaryUnitUTCGetters = {\n// year: fullYearGetterName(true),\n// month: monthGetterName(true),\n// day: dateGetterName(true),\n// hour: hoursGetterName(true),\n// minute: minutesGetterName(true),\n// second: secondsGetterName(true),\n// millisecond: millisecondsGetterName(true)\n// };\n// function moveTick(date: Date, unitName: TimeUnit, step: number, isUTC: boolean) {\n// step = step || 1;\n// switch (getPrimaryTimeUnit(unitName)) {\n// case 'year':\n// date[fullYearSetterName(isUTC)](date[fullYearGetterName(isUTC)]() + step);\n// break;\n// case 'month':\n// date[monthSetterName(isUTC)](date[monthGetterName(isUTC)]() + step);\n// break;\n// case 'day':\n// date[dateSetterName(isUTC)](date[dateGetterName(isUTC)]() + step);\n// break;\n// case 'hour':\n// date[hoursSetterName(isUTC)](date[hoursGetterName(isUTC)]() + step);\n// break;\n// case 'minute':\n// date[minutesSetterName(isUTC)](date[minutesGetterName(isUTC)]() + step);\n// break;\n// case 'second':\n// date[secondsSetterName(isUTC)](date[secondsGetterName(isUTC)]() + step);\n// break;\n// case 'millisecond':\n// date[millisecondsSetterName(isUTC)](date[millisecondsGetterName(isUTC)]() + step);\n// break;\n// }\n// return date.getTime();\n// }\n// const DATE_INTERVALS = [[8, 7.5], [4, 3.5], [2, 1.5]];\n// const MONTH_INTERVALS = [[6, 5.5], [3, 2.5], [2, 1.5]];\n// const MINUTES_SECONDS_INTERVALS = [[30, 30], [20, 20], [15, 15], [10, 10], [5, 5], [2, 2]];\nfunction getDateInterval(approxInterval, daysInMonth) {\n approxInterval /= ONE_DAY;\n return approxInterval > 16 ? 16\n // Math.floor(daysInMonth / 2) + 1 // In this case we only want one tick between two months.\n : approxInterval > 7.5 ? 7 // TODO week 7 or day 8?\n : approxInterval > 3.5 ? 4 : approxInterval > 1.5 ? 2 : 1;\n}\nfunction getMonthInterval(approxInterval) {\n var APPROX_ONE_MONTH = 30 * ONE_DAY;\n approxInterval /= APPROX_ONE_MONTH;\n return approxInterval > 6 ? 6 : approxInterval > 3 ? 3 : approxInterval > 2 ? 2 : 1;\n}\nfunction getHourInterval(approxInterval) {\n approxInterval /= ONE_HOUR;\n return approxInterval > 12 ? 12 : approxInterval > 6 ? 6 : approxInterval > 3.5 ? 4 : approxInterval > 2 ? 2 : 1;\n}\nfunction getMinutesAndSecondsInterval(approxInterval, isMinutes) {\n approxInterval /= isMinutes ? ONE_MINUTE : ONE_SECOND;\n return approxInterval > 30 ? 30 : approxInterval > 20 ? 20 : approxInterval > 15 ? 15 : approxInterval > 10 ? 10 : approxInterval > 5 ? 5 : approxInterval > 2 ? 2 : 1;\n}\nfunction getMillisecondsInterval(approxInterval) {\n return numberUtil.nice(approxInterval, true);\n}\nfunction getFirstTimestampOfUnit(date, unitName, isUTC) {\n var outDate = new Date(date);\n switch (getPrimaryTimeUnit(unitName)) {\n case 'year':\n case 'month':\n outDate[monthSetterName(isUTC)](0);\n case 'day':\n outDate[dateSetterName(isUTC)](1);\n case 'hour':\n outDate[hoursSetterName(isUTC)](0);\n case 'minute':\n outDate[minutesSetterName(isUTC)](0);\n case 'second':\n outDate[secondsSetterName(isUTC)](0);\n outDate[millisecondsSetterName(isUTC)](0);\n }\n return outDate.getTime();\n}\nfunction getIntervalTicks(bottomUnitName, approxInterval, isUTC, extent) {\n var safeLimit = 10000;\n var unitNames = timeUnits;\n var iter = 0;\n function addTicksInSpan(interval, minTimestamp, maxTimestamp, getMethodName, setMethodName, isDate, out) {\n var date = new Date(minTimestamp);\n var dateTime = minTimestamp;\n var d = date[getMethodName]();\n // if (isDate) {\n // d -= 1; // Starts with 0; PENDING\n // }\n while (dateTime < maxTimestamp && dateTime <= extent[1]) {\n out.push({\n value: dateTime\n });\n d += interval;\n date[setMethodName](d);\n dateTime = date.getTime();\n }\n // This extra tick is for calcuating ticks of next level. Will not been added to the final result\n out.push({\n value: dateTime,\n notAdd: true\n });\n }\n function addLevelTicks(unitName, lastLevelTicks, levelTicks) {\n var newAddedTicks = [];\n var isFirstLevel = !lastLevelTicks.length;\n if (isUnitValueSame(getPrimaryTimeUnit(unitName), extent[0], extent[1], isUTC)) {\n return;\n }\n if (isFirstLevel) {\n lastLevelTicks = [{\n // TODO Optimize. Not include so may ticks.\n value: getFirstTimestampOfUnit(new Date(extent[0]), unitName, isUTC)\n }, {\n value: extent[1]\n }];\n }\n for (var i = 0; i < lastLevelTicks.length - 1; i++) {\n var startTick = lastLevelTicks[i].value;\n var endTick = lastLevelTicks[i + 1].value;\n if (startTick === endTick) {\n continue;\n }\n var interval = void 0;\n var getterName = void 0;\n var setterName = void 0;\n var isDate = false;\n switch (unitName) {\n case 'year':\n interval = Math.max(1, Math.round(approxInterval / ONE_DAY / 365));\n getterName = fullYearGetterName(isUTC);\n setterName = fullYearSetterName(isUTC);\n break;\n case 'half-year':\n case 'quarter':\n case 'month':\n interval = getMonthInterval(approxInterval);\n getterName = monthGetterName(isUTC);\n setterName = monthSetterName(isUTC);\n break;\n case 'week': // PENDING If week is added. Ignore day.\n case 'half-week':\n case 'day':\n interval = getDateInterval(approxInterval, 31); // Use 32 days and let interval been 16\n getterName = dateGetterName(isUTC);\n setterName = dateSetterName(isUTC);\n isDate = true;\n break;\n case 'half-day':\n case 'quarter-day':\n case 'hour':\n interval = getHourInterval(approxInterval);\n getterName = hoursGetterName(isUTC);\n setterName = hoursSetterName(isUTC);\n break;\n case 'minute':\n interval = getMinutesAndSecondsInterval(approxInterval, true);\n getterName = minutesGetterName(isUTC);\n setterName = minutesSetterName(isUTC);\n break;\n case 'second':\n interval = getMinutesAndSecondsInterval(approxInterval, false);\n getterName = secondsGetterName(isUTC);\n setterName = secondsSetterName(isUTC);\n break;\n case 'millisecond':\n interval = getMillisecondsInterval(approxInterval);\n getterName = millisecondsGetterName(isUTC);\n setterName = millisecondsSetterName(isUTC);\n break;\n }\n addTicksInSpan(interval, startTick, endTick, getterName, setterName, isDate, newAddedTicks);\n if (unitName === 'year' && levelTicks.length > 1 && i === 0) {\n // Add nearest years to the left extent.\n levelTicks.unshift({\n value: levelTicks[0].value - interval\n });\n }\n }\n for (var i = 0; i < newAddedTicks.length; i++) {\n levelTicks.push(newAddedTicks[i]);\n }\n // newAddedTicks.length && console.log(unitName, newAddedTicks);\n return newAddedTicks;\n }\n var levelsTicks = [];\n var currentLevelTicks = [];\n var tickCount = 0;\n var lastLevelTickCount = 0;\n for (var i = 0; i < unitNames.length && iter++ < safeLimit; ++i) {\n var primaryTimeUnit = getPrimaryTimeUnit(unitNames[i]);\n if (!isPrimaryTimeUnit(unitNames[i])) {\n // TODO\n continue;\n }\n addLevelTicks(unitNames[i], levelsTicks[levelsTicks.length - 1] || [], currentLevelTicks);\n var nextPrimaryTimeUnit = unitNames[i + 1] ? getPrimaryTimeUnit(unitNames[i + 1]) : null;\n if (primaryTimeUnit !== nextPrimaryTimeUnit) {\n if (currentLevelTicks.length) {\n lastLevelTickCount = tickCount;\n // Remove the duplicate so the tick count can be precisely.\n currentLevelTicks.sort(function (a, b) {\n return a.value - b.value;\n });\n var levelTicksRemoveDuplicated = [];\n for (var i_1 = 0; i_1 < currentLevelTicks.length; ++i_1) {\n var tickValue = currentLevelTicks[i_1].value;\n if (i_1 === 0 || currentLevelTicks[i_1 - 1].value !== tickValue) {\n levelTicksRemoveDuplicated.push(currentLevelTicks[i_1]);\n if (tickValue >= extent[0] && tickValue <= extent[1]) {\n tickCount++;\n }\n }\n }\n var targetTickNum = (extent[1] - extent[0]) / approxInterval;\n // Added too much in this level and not too less in last level\n if (tickCount > targetTickNum * 1.5 && lastLevelTickCount > targetTickNum / 1.5) {\n break;\n }\n // Only treat primary time unit as one level.\n levelsTicks.push(levelTicksRemoveDuplicated);\n if (tickCount > targetTickNum || bottomUnitName === unitNames[i]) {\n break;\n }\n }\n // Reset if next unitName is primary\n currentLevelTicks = [];\n }\n }\n if (process.env.NODE_ENV !== 'production') {\n if (iter >= safeLimit) {\n warn('Exceed safe limit.');\n }\n }\n var levelsTicksInExtent = filter(map(levelsTicks, function (levelTicks) {\n return filter(levelTicks, function (tick) {\n return tick.value >= extent[0] && tick.value <= extent[1] && !tick.notAdd;\n });\n }), function (levelTicks) {\n return levelTicks.length > 0;\n });\n var ticks = [];\n var maxLevel = levelsTicksInExtent.length - 1;\n for (var i = 0; i < levelsTicksInExtent.length; ++i) {\n var levelTicks = levelsTicksInExtent[i];\n for (var k = 0; k < levelTicks.length; ++k) {\n ticks.push({\n value: levelTicks[k].value,\n level: maxLevel - i\n });\n }\n }\n ticks.sort(function (a, b) {\n return a.value - b.value;\n });\n // Remove duplicates\n var result = [];\n for (var i = 0; i < ticks.length; ++i) {\n if (i === 0 || ticks[i].value !== ticks[i - 1].value) {\n result.push(ticks[i]);\n }\n }\n return result;\n}\nScale.registerClass(TimeScale);\nexport default TimeScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Scale from './Scale.js';\nimport * as numberUtil from '../util/number.js';\nimport * as scaleHelper from './helper.js';\n// Use some method of IntervalScale\nimport IntervalScale from './Interval.js';\nvar scaleProto = Scale.prototype;\n// FIXME:TS refactor: not good to call it directly with `this`?\nvar intervalScaleProto = IntervalScale.prototype;\nvar roundingErrorFix = numberUtil.round;\nvar mathFloor = Math.floor;\nvar mathCeil = Math.ceil;\nvar mathPow = Math.pow;\nvar mathLog = Math.log;\nvar LogScale = /** @class */function (_super) {\n __extends(LogScale, _super);\n function LogScale() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'log';\n _this.base = 10;\n _this._originalScale = new IntervalScale();\n // FIXME:TS actually used by `IntervalScale`\n _this._interval = 0;\n return _this;\n }\n /**\n * @param Whether expand the ticks to niced extent.\n */\n LogScale.prototype.getTicks = function (expandToNicedExtent) {\n var originalScale = this._originalScale;\n var extent = this._extent;\n var originalExtent = originalScale.getExtent();\n var ticks = intervalScaleProto.getTicks.call(this, expandToNicedExtent);\n return zrUtil.map(ticks, function (tick) {\n var val = tick.value;\n var powVal = numberUtil.round(mathPow(this.base, val));\n // Fix #4158\n powVal = val === extent[0] && this._fixMin ? fixRoundingError(powVal, originalExtent[0]) : powVal;\n powVal = val === extent[1] && this._fixMax ? fixRoundingError(powVal, originalExtent[1]) : powVal;\n return {\n value: powVal\n };\n }, this);\n };\n LogScale.prototype.setExtent = function (start, end) {\n var base = mathLog(this.base);\n // log(-Infinity) is NaN, so safe guard here\n start = mathLog(Math.max(0, start)) / base;\n end = mathLog(Math.max(0, end)) / base;\n intervalScaleProto.setExtent.call(this, start, end);\n };\n /**\n * @return {number} end\n */\n LogScale.prototype.getExtent = function () {\n var base = this.base;\n var extent = scaleProto.getExtent.call(this);\n extent[0] = mathPow(base, extent[0]);\n extent[1] = mathPow(base, extent[1]);\n // Fix #4158\n var originalScale = this._originalScale;\n var originalExtent = originalScale.getExtent();\n this._fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));\n this._fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));\n return extent;\n };\n LogScale.prototype.unionExtent = function (extent) {\n this._originalScale.unionExtent(extent);\n var base = this.base;\n extent[0] = mathLog(extent[0]) / mathLog(base);\n extent[1] = mathLog(extent[1]) / mathLog(base);\n scaleProto.unionExtent.call(this, extent);\n };\n LogScale.prototype.unionExtentFromData = function (data, dim) {\n // TODO\n // filter value that <= 0\n this.unionExtent(data.getApproximateExtent(dim));\n };\n /**\n * Update interval and extent of intervals for nice ticks\n * @param approxTickNum default 10 Given approx tick number\n */\n LogScale.prototype.calcNiceTicks = function (approxTickNum) {\n approxTickNum = approxTickNum || 10;\n var extent = this._extent;\n var span = extent[1] - extent[0];\n if (span === Infinity || span <= 0) {\n return;\n }\n var interval = numberUtil.quantity(span);\n var err = approxTickNum / span * interval;\n // Filter ticks to get closer to the desired count.\n if (err <= 0.5) {\n interval *= 10;\n }\n // Interval should be integer\n while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n interval *= 10;\n }\n var niceExtent = [numberUtil.round(mathCeil(extent[0] / interval) * interval), numberUtil.round(mathFloor(extent[1] / interval) * interval)];\n this._interval = interval;\n this._niceExtent = niceExtent;\n };\n LogScale.prototype.calcNiceExtent = function (opt) {\n intervalScaleProto.calcNiceExtent.call(this, opt);\n this._fixMin = opt.fixMin;\n this._fixMax = opt.fixMax;\n };\n LogScale.prototype.parse = function (val) {\n return val;\n };\n LogScale.prototype.contain = function (val) {\n val = mathLog(val) / mathLog(this.base);\n return scaleHelper.contain(val, this._extent);\n };\n LogScale.prototype.normalize = function (val) {\n val = mathLog(val) / mathLog(this.base);\n return scaleHelper.normalize(val, this._extent);\n };\n LogScale.prototype.scale = function (val) {\n val = scaleHelper.scale(val, this._extent);\n return mathPow(this.base, val);\n };\n LogScale.type = 'log';\n return LogScale;\n}(Scale);\nvar proto = LogScale.prototype;\nproto.getMinorTicks = intervalScaleProto.getMinorTicks;\nproto.getLabel = intervalScaleProto.getLabel;\nfunction fixRoundingError(val, originalVal) {\n return roundingErrorFix(val, numberUtil.getPrecision(originalVal));\n}\nScale.registerClass(LogScale);\nexport default LogScale;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { assert, isArray, eqNaN, isFunction } from 'zrender/lib/core/util.js';\nimport { parsePercent } from 'zrender/lib/contain/text.js';\nvar ScaleRawExtentInfo = /** @class */function () {\n function ScaleRawExtentInfo(scale, model,\n // Usually: data extent from all series on this axis.\n originalExtent) {\n this._prepareParams(scale, model, originalExtent);\n }\n /**\n * Parameters depending on outside (like model, user callback)\n * are prepared and fixed here.\n */\n ScaleRawExtentInfo.prototype._prepareParams = function (scale, model,\n // Usually: data extent from all series on this axis.\n dataExtent) {\n if (dataExtent[1] < dataExtent[0]) {\n dataExtent = [NaN, NaN];\n }\n this._dataMin = dataExtent[0];\n this._dataMax = dataExtent[1];\n var isOrdinal = this._isOrdinal = scale.type === 'ordinal';\n this._needCrossZero = scale.type === 'interval' && model.getNeedCrossZero && model.getNeedCrossZero();\n var modelMinRaw = this._modelMinRaw = model.get('min', true);\n if (isFunction(modelMinRaw)) {\n // This callback always provides users the full data extent (before data is filtered).\n this._modelMinNum = parseAxisModelMinMax(scale, modelMinRaw({\n min: dataExtent[0],\n max: dataExtent[1]\n }));\n } else if (modelMinRaw !== 'dataMin') {\n this._modelMinNum = parseAxisModelMinMax(scale, modelMinRaw);\n }\n var modelMaxRaw = this._modelMaxRaw = model.get('max', true);\n if (isFunction(modelMaxRaw)) {\n // This callback always provides users the full data extent (before data is filtered).\n this._modelMaxNum = parseAxisModelMinMax(scale, modelMaxRaw({\n min: dataExtent[0],\n max: dataExtent[1]\n }));\n } else if (modelMaxRaw !== 'dataMax') {\n this._modelMaxNum = parseAxisModelMinMax(scale, modelMaxRaw);\n }\n if (isOrdinal) {\n // FIXME: there is a flaw here: if there is no \"block\" data processor like `dataZoom`,\n // and progressive rendering is using, here the category result might just only contain\n // the processed chunk rather than the entire result.\n this._axisDataLen = model.getCategories().length;\n } else {\n var boundaryGap = model.get('boundaryGap');\n var boundaryGapArr = isArray(boundaryGap) ? boundaryGap : [boundaryGap || 0, boundaryGap || 0];\n if (typeof boundaryGapArr[0] === 'boolean' || typeof boundaryGapArr[1] === 'boolean') {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('Boolean type for boundaryGap is only ' + 'allowed for ordinal axis. Please use string in ' + 'percentage instead, e.g., \"20%\". Currently, ' + 'boundaryGap is set to be 0.');\n }\n this._boundaryGapInner = [0, 0];\n } else {\n this._boundaryGapInner = [parsePercent(boundaryGapArr[0], 1), parsePercent(boundaryGapArr[1], 1)];\n }\n }\n };\n /**\n * Calculate extent by prepared parameters.\n * This method has no external dependency and can be called duplicatedly,\n * getting the same result.\n * If parameters changed, should call this method to recalcuate.\n */\n ScaleRawExtentInfo.prototype.calculate = function () {\n // Notice: When min/max is not set (that is, when there are null/undefined,\n // which is the most common case), these cases should be ensured:\n // (1) For 'ordinal', show all axis.data.\n // (2) For others:\n // + `boundaryGap` is applied (if min/max set, boundaryGap is\n // disabled).\n // + If `needCrossZero`, min/max should be zero, otherwise, min/max should\n // be the result that originalExtent enlarged by boundaryGap.\n // (3) If no data, it should be ensured that `scale.setBlank` is set.\n var isOrdinal = this._isOrdinal;\n var dataMin = this._dataMin;\n var dataMax = this._dataMax;\n var axisDataLen = this._axisDataLen;\n var boundaryGapInner = this._boundaryGapInner;\n var span = !isOrdinal ? dataMax - dataMin || Math.abs(dataMin) : null;\n // Currently if a `'value'` axis model min is specified as 'dataMin'/'dataMax',\n // `boundaryGap` will not be used. It's the different from specifying as `null`/`undefined`.\n var min = this._modelMinRaw === 'dataMin' ? dataMin : this._modelMinNum;\n var max = this._modelMaxRaw === 'dataMax' ? dataMax : this._modelMaxNum;\n // If `_modelMinNum`/`_modelMaxNum` is `null`/`undefined`, should not be fixed.\n var minFixed = min != null;\n var maxFixed = max != null;\n if (min == null) {\n min = isOrdinal ? axisDataLen ? 0 : NaN : dataMin - boundaryGapInner[0] * span;\n }\n if (max == null) {\n max = isOrdinal ? axisDataLen ? axisDataLen - 1 : NaN : dataMax + boundaryGapInner[1] * span;\n }\n (min == null || !isFinite(min)) && (min = NaN);\n (max == null || !isFinite(max)) && (max = NaN);\n var isBlank = eqNaN(min) || eqNaN(max) || isOrdinal && !axisDataLen;\n // If data extent modified, need to recalculated to ensure cross zero.\n if (this._needCrossZero) {\n // Axis is over zero and min is not set\n if (min > 0 && max > 0 && !minFixed) {\n min = 0;\n // minFixed = true;\n }\n // Axis is under zero and max is not set\n if (min < 0 && max < 0 && !maxFixed) {\n max = 0;\n // maxFixed = true;\n }\n // PENDING:\n // When `needCrossZero` and all data is positive/negative, should it be ensured\n // that the results processed by boundaryGap are positive/negative?\n // If so, here `minFixed`/`maxFixed` need to be set.\n }\n\n var determinedMin = this._determinedMin;\n var determinedMax = this._determinedMax;\n if (determinedMin != null) {\n min = determinedMin;\n minFixed = true;\n }\n if (determinedMax != null) {\n max = determinedMax;\n maxFixed = true;\n }\n // Ensure min/max be finite number or NaN here. (not to be null/undefined)\n // `NaN` means min/max axis is blank.\n return {\n min: min,\n max: max,\n minFixed: minFixed,\n maxFixed: maxFixed,\n isBlank: isBlank\n };\n };\n ScaleRawExtentInfo.prototype.modifyDataMinMax = function (minMaxName, val) {\n if (process.env.NODE_ENV !== 'production') {\n assert(!this.frozen);\n }\n this[DATA_MIN_MAX_ATTR[minMaxName]] = val;\n };\n ScaleRawExtentInfo.prototype.setDeterminedMinMax = function (minMaxName, val) {\n var attr = DETERMINED_MIN_MAX_ATTR[minMaxName];\n if (process.env.NODE_ENV !== 'production') {\n assert(!this.frozen\n // Earse them usually means logic flaw.\n && this[attr] == null);\n }\n this[attr] = val;\n };\n ScaleRawExtentInfo.prototype.freeze = function () {\n // @ts-ignore\n this.frozen = true;\n };\n return ScaleRawExtentInfo;\n}();\nexport { ScaleRawExtentInfo };\nvar DETERMINED_MIN_MAX_ATTR = {\n min: '_determinedMin',\n max: '_determinedMax'\n};\nvar DATA_MIN_MAX_ATTR = {\n min: '_dataMin',\n max: '_dataMax'\n};\n/**\n * Get scale min max and related info only depends on model settings.\n * This method can be called after coordinate system created.\n * For example, in data processing stage.\n *\n * Scale extent info probably be required multiple times during a workflow.\n * For example:\n * (1) `dataZoom` depends it to get the axis extent in \"100%\" state.\n * (2) `processor/extentCalculator` depends it to make sure whether axis extent is specified.\n * (3) `coordSys.update` use it to finally decide the scale extent.\n * But the callback of `min`/`max` should not be called multiple times.\n * The code below should not be implemented repeatedly either.\n * So we cache the result in the scale instance, which will be recreated at the beginning\n * of the workflow (because `scale` instance will be recreated each round of the workflow).\n */\nexport function ensureScaleRawExtentInfo(scale, model,\n// Usually: data extent from all series on this axis.\noriginalExtent) {\n // Do not permit to recreate.\n var rawExtentInfo = scale.rawExtentInfo;\n if (rawExtentInfo) {\n return rawExtentInfo;\n }\n rawExtentInfo = new ScaleRawExtentInfo(scale, model, originalExtent);\n // @ts-ignore\n scale.rawExtentInfo = rawExtentInfo;\n return rawExtentInfo;\n}\nexport function parseAxisModelMinMax(scale, minMax) {\n return minMax == null ? null : eqNaN(minMax) ? NaN : scale.parse(minMax);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport OrdinalScale from '../scale/Ordinal.js';\nimport IntervalScale from '../scale/Interval.js';\nimport Scale from '../scale/Scale.js';\nimport { prepareLayoutBarSeries, makeColumnLayout, retrieveColumnLayout } from '../layout/barGrid.js';\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport TimeScale from '../scale/Time.js';\nimport LogScale from '../scale/Log.js';\nimport { getStackedDimension } from '../data/helper/dataStackHelper.js';\nimport { ensureScaleRawExtentInfo } from './scaleRawExtentInfo.js';\n/**\n * Get axis scale extent before niced.\n * Item of returned array can only be number (including Infinity and NaN).\n *\n * Caution:\n * Precondition of calling this method:\n * The scale extent has been initialized using series data extent via\n * `scale.setExtent` or `scale.unionExtentFromData`;\n */\nexport function getScaleExtent(scale, model) {\n var scaleType = scale.type;\n var rawExtentResult = ensureScaleRawExtentInfo(scale, model, scale.getExtent()).calculate();\n scale.setBlank(rawExtentResult.isBlank);\n var min = rawExtentResult.min;\n var max = rawExtentResult.max;\n // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis\n // is base axis\n // FIXME\n // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly.\n // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent?\n // Should not depend on series type `bar`?\n // (3) Fix that might overlap when using dataZoom.\n // (4) Consider other chart types using `barGrid`?\n // See #6728, #4862, `test/bar-overflow-time-plot.html`\n var ecModel = model.ecModel;\n if (ecModel && scaleType === 'time' /* || scaleType === 'interval' */) {\n var barSeriesModels = prepareLayoutBarSeries('bar', ecModel);\n var isBaseAxisAndHasBarSeries_1 = false;\n zrUtil.each(barSeriesModels, function (seriesModel) {\n isBaseAxisAndHasBarSeries_1 = isBaseAxisAndHasBarSeries_1 || seriesModel.getBaseAxis() === model.axis;\n });\n if (isBaseAxisAndHasBarSeries_1) {\n // Calculate placement of bars on axis. TODO should be decoupled\n // with barLayout\n var barWidthAndOffset = makeColumnLayout(barSeriesModels);\n // Adjust axis min and max to account for overflow\n var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset);\n min = adjustedScale.min;\n max = adjustedScale.max;\n }\n }\n return {\n extent: [min, max],\n // \"fix\" means \"fixed\", the value should not be\n // changed in the subsequent steps.\n fixMin: rawExtentResult.minFixed,\n fixMax: rawExtentResult.maxFixed\n };\n}\nfunction adjustScaleForOverflow(min, max, model,\n// Only support cartesian coord yet.\nbarWidthAndOffset) {\n // Get Axis Length\n var axisExtent = model.axis.getExtent();\n var axisLength = axisExtent[1] - axisExtent[0];\n // Get bars on current base axis and calculate min and max overflow\n var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);\n if (barsOnCurrentAxis === undefined) {\n return {\n min: min,\n max: max\n };\n }\n var minOverflow = Infinity;\n zrUtil.each(barsOnCurrentAxis, function (item) {\n minOverflow = Math.min(item.offset, minOverflow);\n });\n var maxOverflow = -Infinity;\n zrUtil.each(barsOnCurrentAxis, function (item) {\n maxOverflow = Math.max(item.offset + item.width, maxOverflow);\n });\n minOverflow = Math.abs(minOverflow);\n maxOverflow = Math.abs(maxOverflow);\n var totalOverFlow = minOverflow + maxOverflow;\n // Calculate required buffer based on old range and overflow\n var oldRange = max - min;\n var oldRangePercentOfNew = 1 - (minOverflow + maxOverflow) / axisLength;\n var overflowBuffer = oldRange / oldRangePercentOfNew - oldRange;\n max += overflowBuffer * (maxOverflow / totalOverFlow);\n min -= overflowBuffer * (minOverflow / totalOverFlow);\n return {\n min: min,\n max: max\n };\n}\n// Precondition of calling this method:\n// The scale extent has been initialized using series data extent via\n// `scale.setExtent` or `scale.unionExtentFromData`;\nexport function niceScaleExtent(scale, inModel) {\n var model = inModel;\n var extentInfo = getScaleExtent(scale, model);\n var extent = extentInfo.extent;\n var splitNumber = model.get('splitNumber');\n if (scale instanceof LogScale) {\n scale.base = model.get('logBase');\n }\n var scaleType = scale.type;\n var interval = model.get('interval');\n var isIntervalOrTime = scaleType === 'interval' || scaleType === 'time';\n scale.setExtent(extent[0], extent[1]);\n scale.calcNiceExtent({\n splitNumber: splitNumber,\n fixMin: extentInfo.fixMin,\n fixMax: extentInfo.fixMax,\n minInterval: isIntervalOrTime ? model.get('minInterval') : null,\n maxInterval: isIntervalOrTime ? model.get('maxInterval') : null\n });\n // If some one specified the min, max. And the default calculated interval\n // is not good enough. He can specify the interval. It is often appeared\n // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard\n // to be 60.\n // FIXME\n if (interval != null) {\n scale.setInterval && scale.setInterval(interval);\n }\n}\n/**\n * @param axisType Default retrieve from model.type\n */\nexport function createScaleByModel(model, axisType) {\n axisType = axisType || model.get('type');\n if (axisType) {\n switch (axisType) {\n // Buildin scale\n case 'category':\n return new OrdinalScale({\n ordinalMeta: model.getOrdinalMeta ? model.getOrdinalMeta() : model.getCategories(),\n extent: [Infinity, -Infinity]\n });\n case 'time':\n return new TimeScale({\n locale: model.ecModel.getLocaleModel(),\n useUTC: model.ecModel.get('useUTC')\n });\n default:\n // case 'value'/'interval', 'log', or others.\n return new (Scale.getClass(axisType) || IntervalScale)();\n }\n }\n}\n/**\n * Check if the axis cross 0\n */\nexport function ifAxisCrossZero(axis) {\n var dataExtent = axis.scale.getExtent();\n var min = dataExtent[0];\n var max = dataExtent[1];\n return !(min > 0 && max > 0 || min < 0 && max < 0);\n}\n/**\n * @param axis\n * @return Label formatter function.\n * param: {number} tickValue,\n * param: {number} idx, the index in all ticks.\n * If category axis, this param is not required.\n * return: {string} label string.\n */\nexport function makeLabelFormatter(axis) {\n var labelFormatter = axis.getLabelModel().get('formatter');\n var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null;\n if (axis.scale.type === 'time') {\n return function (tpl) {\n return function (tick, idx) {\n return axis.scale.getFormattedLabel(tick, idx, tpl);\n };\n }(labelFormatter);\n } else if (zrUtil.isString(labelFormatter)) {\n return function (tpl) {\n return function (tick) {\n // For category axis, get raw value; for numeric axis,\n // get formatted label like '1,333,444'.\n var label = axis.scale.getLabel(tick);\n var text = tpl.replace('{value}', label != null ? label : '');\n return text;\n };\n }(labelFormatter);\n } else if (zrUtil.isFunction(labelFormatter)) {\n return function (cb) {\n return function (tick, idx) {\n // The original intention of `idx` is \"the index of the tick in all ticks\".\n // But the previous implementation of category axis do not consider the\n // `axisLabel.interval`, which cause that, for example, the `interval` is\n // `1`, then the ticks \"name5\", \"name7\", \"name9\" are displayed, where the\n // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep\n // the definition here for back compatibility.\n if (categoryTickStart != null) {\n idx = tick.value - categoryTickStart;\n }\n return cb(getAxisRawValue(axis, tick), idx, tick.level != null ? {\n level: tick.level\n } : null);\n };\n }(labelFormatter);\n } else {\n return function (tick) {\n return axis.scale.getLabel(tick);\n };\n }\n}\nexport function getAxisRawValue(axis, tick) {\n // In category axis with data zoom, tick is not the original\n // index of axis.data. So tick should not be exposed to user\n // in category axis.\n return axis.type === 'category' ? axis.scale.getLabel(tick) : tick.value;\n}\n/**\n * @param axis\n * @return Be null/undefined if no labels.\n */\nexport function estimateLabelUnionRect(axis) {\n var axisModel = axis.model;\n var scale = axis.scale;\n if (!axisModel.get(['axisLabel', 'show']) || scale.isBlank()) {\n return;\n }\n var realNumberScaleTicks;\n var tickCount;\n var categoryScaleExtent = scale.getExtent();\n // Optimize for large category data, avoid call `getTicks()`.\n if (scale instanceof OrdinalScale) {\n tickCount = scale.count();\n } else {\n realNumberScaleTicks = scale.getTicks();\n tickCount = realNumberScaleTicks.length;\n }\n var axisLabelModel = axis.getLabelModel();\n var labelFormatter = makeLabelFormatter(axis);\n var rect;\n var step = 1;\n // Simple optimization for large amount of labels\n if (tickCount > 40) {\n step = Math.ceil(tickCount / 40);\n }\n for (var i = 0; i < tickCount; i += step) {\n var tick = realNumberScaleTicks ? realNumberScaleTicks[i] : {\n value: categoryScaleExtent[0] + i\n };\n var label = labelFormatter(tick, i);\n var unrotatedSingleRect = axisLabelModel.getTextRect(label);\n var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);\n rect ? rect.union(singleRect) : rect = singleRect;\n }\n return rect;\n}\nfunction rotateTextRect(textRect, rotate) {\n var rotateRadians = rotate * Math.PI / 180;\n var beforeWidth = textRect.width;\n var beforeHeight = textRect.height;\n var afterWidth = beforeWidth * Math.abs(Math.cos(rotateRadians)) + Math.abs(beforeHeight * Math.sin(rotateRadians));\n var afterHeight = beforeWidth * Math.abs(Math.sin(rotateRadians)) + Math.abs(beforeHeight * Math.cos(rotateRadians));\n var rotatedRect = new BoundingRect(textRect.x, textRect.y, afterWidth, afterHeight);\n return rotatedRect;\n}\n/**\n * @param model axisLabelModel or axisTickModel\n * @return {number|String} Can be null|'auto'|number|function\n */\nexport function getOptionCategoryInterval(model) {\n var interval = model.get('interval');\n return interval == null ? 'auto' : interval;\n}\n/**\n * Set `categoryInterval` as 0 implicitly indicates that\n * show all labels regardless of overlap.\n * @param {Object} axis axisModel.axis\n */\nexport function shouldShowAllLabels(axis) {\n return axis.type === 'category' && getOptionCategoryInterval(axis.getLabelModel()) === 0;\n}\nexport function getDataDimensionsOnAxis(data, axisDim) {\n // Remove duplicated dat dimensions caused by `getStackedDimension`.\n var dataDimMap = {};\n // Currently `mapDimensionsAll` will contain stack result dimension ('__\\0ecstackresult').\n // PENDING: is it reasonable? Do we need to remove the original dim from \"coord dim\" since\n // there has been stacked result dim?\n zrUtil.each(data.mapDimensionsAll(axisDim), function (dataDim) {\n // For example, the extent of the original dimension\n // is [0.1, 0.5], the extent of the `stackResultDimension`\n // is [7, 9], the final extent should NOT include [0.1, 0.5],\n // because there is no graphic corresponding to [0.1, 0.5].\n // See the case in `test/area-stack.html` `main1`, where area line\n // stack needs `yAxis` not start from 0.\n dataDimMap[getStackedDimension(data, dataDim)] = true;\n });\n return zrUtil.keys(dataDimMap);\n}\nexport function unionAxisExtentFromData(dataExtent, data, axisDim) {\n if (data) {\n zrUtil.each(getDataDimensionsOnAxis(data, axisDim), function (dim) {\n var seriesExtent = data.getApproximateExtent(dim);\n seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);\n seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);\n });\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { BoundingRect, OrientedBoundingRect } from '../util/graphic.js';\nexport function prepareLayoutList(input) {\n var list = [];\n for (var i = 0; i < input.length; i++) {\n var rawItem = input[i];\n if (rawItem.defaultAttr.ignore) {\n continue;\n }\n var label = rawItem.label;\n var transform = label.getComputedTransform();\n // NOTE: Get bounding rect after getComputedTransform, or label may not been updated by the host el.\n var localRect = label.getBoundingRect();\n var isAxisAligned = !transform || transform[1] < 1e-5 && transform[2] < 1e-5;\n var minMargin = label.style.margin || 0;\n var globalRect = localRect.clone();\n globalRect.applyTransform(transform);\n globalRect.x -= minMargin / 2;\n globalRect.y -= minMargin / 2;\n globalRect.width += minMargin;\n globalRect.height += minMargin;\n var obb = isAxisAligned ? new OrientedBoundingRect(localRect, transform) : null;\n list.push({\n label: label,\n labelLine: rawItem.labelLine,\n rect: globalRect,\n localRect: localRect,\n obb: obb,\n priority: rawItem.priority,\n defaultAttr: rawItem.defaultAttr,\n layoutOption: rawItem.computedLayoutOption,\n axisAligned: isAxisAligned,\n transform: transform\n });\n }\n return list;\n}\nfunction shiftLayout(list, xyDim, sizeDim, minBound, maxBound, balanceShift) {\n var len = list.length;\n if (len < 2) {\n return;\n }\n list.sort(function (a, b) {\n return a.rect[xyDim] - b.rect[xyDim];\n });\n var lastPos = 0;\n var delta;\n var adjusted = false;\n var shifts = [];\n var totalShifts = 0;\n for (var i = 0; i < len; i++) {\n var item = list[i];\n var rect = item.rect;\n delta = rect[xyDim] - lastPos;\n if (delta < 0) {\n // shiftForward(i, len, -delta);\n rect[xyDim] -= delta;\n item.label[xyDim] -= delta;\n adjusted = true;\n }\n var shift = Math.max(-delta, 0);\n shifts.push(shift);\n totalShifts += shift;\n lastPos = rect[xyDim] + rect[sizeDim];\n }\n if (totalShifts > 0 && balanceShift) {\n // Shift back to make the distribution more equally.\n shiftList(-totalShifts / len, 0, len);\n }\n // TODO bleedMargin?\n var first = list[0];\n var last = list[len - 1];\n var minGap;\n var maxGap;\n updateMinMaxGap();\n // If ends exceed two bounds, squeeze at most 80%, then take the gap of two bounds.\n minGap < 0 && squeezeGaps(-minGap, 0.8);\n maxGap < 0 && squeezeGaps(maxGap, 0.8);\n updateMinMaxGap();\n takeBoundsGap(minGap, maxGap, 1);\n takeBoundsGap(maxGap, minGap, -1);\n // Handle bailout when there is not enough space.\n updateMinMaxGap();\n if (minGap < 0) {\n squeezeWhenBailout(-minGap);\n }\n if (maxGap < 0) {\n squeezeWhenBailout(maxGap);\n }\n function updateMinMaxGap() {\n minGap = first.rect[xyDim] - minBound;\n maxGap = maxBound - last.rect[xyDim] - last.rect[sizeDim];\n }\n function takeBoundsGap(gapThisBound, gapOtherBound, moveDir) {\n if (gapThisBound < 0) {\n // Move from other gap if can.\n var moveFromMaxGap = Math.min(gapOtherBound, -gapThisBound);\n if (moveFromMaxGap > 0) {\n shiftList(moveFromMaxGap * moveDir, 0, len);\n var remained = moveFromMaxGap + gapThisBound;\n if (remained < 0) {\n squeezeGaps(-remained * moveDir, 1);\n }\n } else {\n squeezeGaps(-gapThisBound * moveDir, 1);\n }\n }\n }\n function shiftList(delta, start, end) {\n if (delta !== 0) {\n adjusted = true;\n }\n for (var i = start; i < end; i++) {\n var item = list[i];\n var rect = item.rect;\n rect[xyDim] += delta;\n item.label[xyDim] += delta;\n }\n }\n // Squeeze gaps if the labels exceed margin.\n function squeezeGaps(delta, maxSqeezePercent) {\n var gaps = [];\n var totalGaps = 0;\n for (var i = 1; i < len; i++) {\n var prevItemRect = list[i - 1].rect;\n var gap = Math.max(list[i].rect[xyDim] - prevItemRect[xyDim] - prevItemRect[sizeDim], 0);\n gaps.push(gap);\n totalGaps += gap;\n }\n if (!totalGaps) {\n return;\n }\n var squeezePercent = Math.min(Math.abs(delta) / totalGaps, maxSqeezePercent);\n if (delta > 0) {\n for (var i = 0; i < len - 1; i++) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i] * squeezePercent;\n // Forward\n shiftList(movement, 0, i + 1);\n }\n } else {\n // Backward\n for (var i = len - 1; i > 0; i--) {\n // Distribute the shift delta to all gaps.\n var movement = gaps[i - 1] * squeezePercent;\n shiftList(-movement, i, len);\n }\n }\n }\n /**\n * Squeeze to allow overlap if there is no more space available.\n * Let other overlapping strategy like hideOverlap do the job instead of keep exceeding the bounds.\n */\n function squeezeWhenBailout(delta) {\n var dir = delta < 0 ? -1 : 1;\n delta = Math.abs(delta);\n var moveForEachLabel = Math.ceil(delta / (len - 1));\n for (var i = 0; i < len - 1; i++) {\n if (dir > 0) {\n // Forward\n shiftList(moveForEachLabel, 0, i + 1);\n } else {\n // Backward\n shiftList(-moveForEachLabel, len - i - 1, len);\n }\n delta -= moveForEachLabel;\n if (delta <= 0) {\n return;\n }\n }\n }\n return adjusted;\n}\n/**\n * Adjust labels on x direction to avoid overlap.\n */\nexport function shiftLayoutOnX(list, leftBound, rightBound,\n// If average the shifts on all labels and add them to 0\n// TODO: Not sure if should enable it.\n// Pros: The angle of lines will distribute more equally\n// Cons: In some layout. It may not what user wanted. like in pie. the label of last sector is usually changed unexpectedly.\nbalanceShift) {\n return shiftLayout(list, 'x', 'width', leftBound, rightBound, balanceShift);\n}\n/**\n * Adjust labels on y direction to avoid overlap.\n */\nexport function shiftLayoutOnY(list, topBound, bottomBound,\n// If average the shifts on all labels and add them to 0\nbalanceShift) {\n return shiftLayout(list, 'y', 'height', topBound, bottomBound, balanceShift);\n}\nexport function hideOverlap(labelList) {\n var displayedLabels = [];\n // TODO, render overflow visible first, put in the displayedLabels.\n labelList.sort(function (a, b) {\n return b.priority - a.priority;\n });\n var globalRect = new BoundingRect(0, 0, 0, 0);\n function hideEl(el) {\n if (!el.ignore) {\n // Show on emphasis.\n var emphasisState = el.ensureState('emphasis');\n if (emphasisState.ignore == null) {\n emphasisState.ignore = false;\n }\n }\n el.ignore = true;\n }\n for (var i = 0; i < labelList.length; i++) {\n var labelItem = labelList[i];\n var isAxisAligned = labelItem.axisAligned;\n var localRect = labelItem.localRect;\n var transform = labelItem.transform;\n var label = labelItem.label;\n var labelLine = labelItem.labelLine;\n globalRect.copy(labelItem.rect);\n // Add a threshold because layout may be aligned precisely.\n globalRect.width -= 0.1;\n globalRect.height -= 0.1;\n globalRect.x += 0.05;\n globalRect.y += 0.05;\n var obb = labelItem.obb;\n var overlapped = false;\n for (var j = 0; j < displayedLabels.length; j++) {\n var existsTextCfg = displayedLabels[j];\n // Fast rejection.\n if (!globalRect.intersect(existsTextCfg.rect)) {\n continue;\n }\n if (isAxisAligned && existsTextCfg.axisAligned) {\n // Is overlapped\n overlapped = true;\n break;\n }\n if (!existsTextCfg.obb) {\n // If self is not axis aligned. But other is.\n existsTextCfg.obb = new OrientedBoundingRect(existsTextCfg.localRect, existsTextCfg.transform);\n }\n if (!obb) {\n // If self is axis aligned. But other is not.\n obb = new OrientedBoundingRect(localRect, transform);\n }\n if (obb.intersect(existsTextCfg.obb)) {\n overlapped = true;\n break;\n }\n }\n // TODO Callback to determine if this overlap should be handled?\n if (overlapped) {\n hideEl(label);\n labelLine && hideEl(labelLine);\n } else {\n label.attr('ignore', labelItem.defaultAttr.ignore);\n labelLine && labelLine.attr('ignore', labelItem.defaultAttr.labelGuideIgnore);\n displayedLabels.push(labelItem);\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { retrieve, defaults, extend, each, isObject, map, isString, isNumber, isFunction, retrieve2 } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nimport Model from '../../model/Model.js';\nimport { isRadianAroundZero, remRadian } from '../../util/number.js';\nimport { createSymbol, normalizeSymbolOffset } from '../../util/symbol.js';\nimport * as matrixUtil from 'zrender/lib/core/matrix.js';\nimport { applyTransform as v2ApplyTransform } from 'zrender/lib/core/vector.js';\nimport { shouldShowAllLabels } from '../../coord/axisHelper.js';\nimport { prepareLayoutList, hideOverlap } from '../../label/labelLayoutHelper.js';\nvar PI = Math.PI;\n/**\n * A final axis is translated and rotated from a \"standard axis\".\n * So opt.position and opt.rotation is required.\n *\n * A standard axis is and axis from [0, 0] to [0, axisExtent[1]],\n * for example: (0, 0) ------------> (0, 50)\n *\n * nameDirection or tickDirection or labelDirection is 1 means tick\n * or label is below the standard axis, whereas is -1 means above\n * the standard axis. labelOffset means offset between label and axis,\n * which is useful when 'onZero', where axisLabel is in the grid and\n * label in outside grid.\n *\n * Tips: like always,\n * positive rotation represents anticlockwise, and negative rotation\n * represents clockwise.\n * The direction of position coordinate is the same as the direction\n * of screen coordinate.\n *\n * Do not need to consider axis 'inverse', which is auto processed by\n * axis extent.\n */\nvar AxisBuilder = /** @class */function () {\n function AxisBuilder(axisModel, opt) {\n this.group = new graphic.Group();\n this.opt = opt;\n this.axisModel = axisModel;\n // Default value\n defaults(opt, {\n labelOffset: 0,\n nameDirection: 1,\n tickDirection: 1,\n labelDirection: 1,\n silent: true,\n handleAutoShown: function () {\n return true;\n }\n });\n // FIXME Not use a separate text group?\n var transformGroup = new graphic.Group({\n x: opt.position[0],\n y: opt.position[1],\n rotation: opt.rotation\n });\n // this.group.add(transformGroup);\n // this._transformGroup = transformGroup;\n transformGroup.updateTransform();\n this._transformGroup = transformGroup;\n }\n AxisBuilder.prototype.hasBuilder = function (name) {\n return !!builders[name];\n };\n AxisBuilder.prototype.add = function (name) {\n builders[name](this.opt, this.axisModel, this.group, this._transformGroup);\n };\n AxisBuilder.prototype.getGroup = function () {\n return this.group;\n };\n AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) {\n var rotationDiff = remRadian(textRotation - axisRotation);\n var textAlign;\n var textVerticalAlign;\n if (isRadianAroundZero(rotationDiff)) {\n // Label is parallel with axis line.\n textVerticalAlign = direction > 0 ? 'top' : 'bottom';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI)) {\n // Label is inverse parallel with axis line.\n textVerticalAlign = direction > 0 ? 'bottom' : 'top';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n if (rotationDiff > 0 && rotationDiff < PI) {\n textAlign = direction > 0 ? 'right' : 'left';\n } else {\n textAlign = direction > 0 ? 'left' : 'right';\n }\n }\n return {\n rotation: rotationDiff,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n };\n AxisBuilder.makeAxisEventDataBase = function (axisModel) {\n var eventData = {\n componentType: axisModel.mainType,\n componentIndex: axisModel.componentIndex\n };\n eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex;\n return eventData;\n };\n AxisBuilder.isLabelSilent = function (axisModel) {\n var tooltipOpt = axisModel.get('tooltip');\n return axisModel.get('silent')\n // Consider mouse cursor, add these restrictions.\n || !(axisModel.get('triggerEvent') || tooltipOpt && tooltipOpt.show);\n };\n return AxisBuilder;\n}();\n;\nvar builders = {\n axisLine: function (opt, axisModel, group, transformGroup) {\n var shown = axisModel.get(['axisLine', 'show']);\n if (shown === 'auto' && opt.handleAutoShown) {\n shown = opt.handleAutoShown('axisLine');\n }\n if (!shown) {\n return;\n }\n var extent = axisModel.axis.getExtent();\n var matrix = transformGroup.transform;\n var pt1 = [extent[0], 0];\n var pt2 = [extent[1], 0];\n var inverse = pt1[0] > pt2[0];\n if (matrix) {\n v2ApplyTransform(pt1, pt1, matrix);\n v2ApplyTransform(pt2, pt2, matrix);\n }\n var lineStyle = extend({\n lineCap: 'round'\n }, axisModel.getModel(['axisLine', 'lineStyle']).getLineStyle());\n var line = new graphic.Line({\n shape: {\n x1: pt1[0],\n y1: pt1[1],\n x2: pt2[0],\n y2: pt2[1]\n },\n style: lineStyle,\n strokeContainThreshold: opt.strokeContainThreshold || 5,\n silent: true,\n z2: 1\n });\n graphic.subPixelOptimizeLine(line.shape, line.style.lineWidth);\n line.anid = 'line';\n group.add(line);\n var arrows = axisModel.get(['axisLine', 'symbol']);\n if (arrows != null) {\n var arrowSize = axisModel.get(['axisLine', 'symbolSize']);\n if (isString(arrows)) {\n // Use the same arrow for start and end point\n arrows = [arrows, arrows];\n }\n if (isString(arrowSize) || isNumber(arrowSize)) {\n // Use the same size for width and height\n arrowSize = [arrowSize, arrowSize];\n }\n var arrowOffset = normalizeSymbolOffset(axisModel.get(['axisLine', 'symbolOffset']) || 0, arrowSize);\n var symbolWidth_1 = arrowSize[0];\n var symbolHeight_1 = arrowSize[1];\n each([{\n rotate: opt.rotation + Math.PI / 2,\n offset: arrowOffset[0],\n r: 0\n }, {\n rotate: opt.rotation - Math.PI / 2,\n offset: arrowOffset[1],\n r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0]) + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1]))\n }], function (point, index) {\n if (arrows[index] !== 'none' && arrows[index] != null) {\n var symbol = createSymbol(arrows[index], -symbolWidth_1 / 2, -symbolHeight_1 / 2, symbolWidth_1, symbolHeight_1, lineStyle.stroke, true);\n // Calculate arrow position with offset\n var r = point.r + point.offset;\n var pt = inverse ? pt2 : pt1;\n symbol.attr({\n rotation: point.rotate,\n x: pt[0] + r * Math.cos(opt.rotation),\n y: pt[1] - r * Math.sin(opt.rotation),\n silent: true,\n z2: 11\n });\n group.add(symbol);\n }\n });\n }\n },\n axisTickLabel: function (opt, axisModel, group, transformGroup) {\n var ticksEls = buildAxisMajorTicks(group, transformGroup, axisModel, opt);\n var labelEls = buildAxisLabel(group, transformGroup, axisModel, opt);\n fixMinMaxLabelShow(axisModel, labelEls, ticksEls);\n buildAxisMinorTicks(group, transformGroup, axisModel, opt.tickDirection);\n // This bit fixes the label overlap issue for the time chart.\n // See https://github.com/apache/echarts/issues/14266 for more.\n if (axisModel.get(['axisLabel', 'hideOverlap'])) {\n var labelList = prepareLayoutList(map(labelEls, function (label) {\n return {\n label: label,\n priority: label.z2,\n defaultAttr: {\n ignore: label.ignore\n }\n };\n }));\n hideOverlap(labelList);\n }\n },\n axisName: function (opt, axisModel, group, transformGroup) {\n var name = retrieve(opt.axisName, axisModel.get('name'));\n if (!name) {\n return;\n }\n var nameLocation = axisModel.get('nameLocation');\n var nameDirection = opt.nameDirection;\n var textStyleModel = axisModel.getModel('nameTextStyle');\n var gap = axisModel.get('nameGap') || 0;\n var extent = axisModel.axis.getExtent();\n var gapSignal = extent[0] > extent[1] ? -1 : 1;\n var pos = [nameLocation === 'start' ? extent[0] - gapSignal * gap : nameLocation === 'end' ? extent[1] + gapSignal * gap : (extent[0] + extent[1]) / 2,\n // Reuse labelOffset.\n isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0];\n var labelLayout;\n var nameRotation = axisModel.get('nameRotate');\n if (nameRotation != null) {\n nameRotation = nameRotation * PI / 180; // To radian.\n }\n\n var axisNameAvailableWidth;\n if (isNameLocationCenter(nameLocation)) {\n labelLayout = AxisBuilder.innerTextLayout(opt.rotation, nameRotation != null ? nameRotation : opt.rotation,\n // Adapt to axis.\n nameDirection);\n } else {\n labelLayout = endTextLayout(opt.rotation, nameLocation, nameRotation || 0, extent);\n axisNameAvailableWidth = opt.axisNameAvailableWidth;\n if (axisNameAvailableWidth != null) {\n axisNameAvailableWidth = Math.abs(axisNameAvailableWidth / Math.sin(labelLayout.rotation));\n !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);\n }\n }\n var textFont = textStyleModel.getFont();\n var truncateOpt = axisModel.get('nameTruncate', true) || {};\n var ellipsis = truncateOpt.ellipsis;\n var maxWidth = retrieve(opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth);\n var textEl = new graphic.Text({\n x: pos[0],\n y: pos[1],\n rotation: labelLayout.rotation,\n silent: AxisBuilder.isLabelSilent(axisModel),\n style: createTextStyle(textStyleModel, {\n text: name,\n font: textFont,\n overflow: 'truncate',\n width: maxWidth,\n ellipsis: ellipsis,\n fill: textStyleModel.getTextColor() || axisModel.get(['axisLine', 'lineStyle', 'color']),\n align: textStyleModel.get('align') || labelLayout.textAlign,\n verticalAlign: textStyleModel.get('verticalAlign') || labelLayout.textVerticalAlign\n }),\n z2: 1\n });\n graphic.setTooltipConfig({\n el: textEl,\n componentModel: axisModel,\n itemName: name\n });\n textEl.__fullText = name;\n // Id for animation\n textEl.anid = 'name';\n if (axisModel.get('triggerEvent')) {\n var eventData = AxisBuilder.makeAxisEventDataBase(axisModel);\n eventData.targetType = 'axisName';\n eventData.name = name;\n getECData(textEl).eventData = eventData;\n }\n // FIXME\n transformGroup.add(textEl);\n textEl.updateTransform();\n group.add(textEl);\n textEl.decomposeTransform();\n }\n};\nfunction endTextLayout(rotation, textPosition, textRotate, extent) {\n var rotationDiff = remRadian(textRotate - rotation);\n var textAlign;\n var textVerticalAlign;\n var inverse = extent[0] > extent[1];\n var onLeft = textPosition === 'start' && !inverse || textPosition !== 'start' && inverse;\n if (isRadianAroundZero(rotationDiff - PI / 2)) {\n textVerticalAlign = onLeft ? 'bottom' : 'top';\n textAlign = 'center';\n } else if (isRadianAroundZero(rotationDiff - PI * 1.5)) {\n textVerticalAlign = onLeft ? 'top' : 'bottom';\n textAlign = 'center';\n } else {\n textVerticalAlign = 'middle';\n if (rotationDiff < PI * 1.5 && rotationDiff > PI / 2) {\n textAlign = onLeft ? 'left' : 'right';\n } else {\n textAlign = onLeft ? 'right' : 'left';\n }\n }\n return {\n rotation: rotationDiff,\n textAlign: textAlign,\n textVerticalAlign: textVerticalAlign\n };\n}\nfunction fixMinMaxLabelShow(axisModel, labelEls, tickEls) {\n if (shouldShowAllLabels(axisModel.axis)) {\n return;\n }\n // If min or max are user set, we need to check\n // If the tick on min(max) are overlap on their neighbour tick\n // If they are overlapped, we need to hide the min(max) tick label\n var showMinLabel = axisModel.get(['axisLabel', 'showMinLabel']);\n var showMaxLabel = axisModel.get(['axisLabel', 'showMaxLabel']);\n // FIXME\n // Have not consider onBand yet, where tick els is more than label els.\n labelEls = labelEls || [];\n tickEls = tickEls || [];\n var firstLabel = labelEls[0];\n var nextLabel = labelEls[1];\n var lastLabel = labelEls[labelEls.length - 1];\n var prevLabel = labelEls[labelEls.length - 2];\n var firstTick = tickEls[0];\n var nextTick = tickEls[1];\n var lastTick = tickEls[tickEls.length - 1];\n var prevTick = tickEls[tickEls.length - 2];\n if (showMinLabel === false) {\n ignoreEl(firstLabel);\n ignoreEl(firstTick);\n } else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {\n if (showMinLabel) {\n ignoreEl(nextLabel);\n ignoreEl(nextTick);\n } else {\n ignoreEl(firstLabel);\n ignoreEl(firstTick);\n }\n }\n if (showMaxLabel === false) {\n ignoreEl(lastLabel);\n ignoreEl(lastTick);\n } else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {\n if (showMaxLabel) {\n ignoreEl(prevLabel);\n ignoreEl(prevTick);\n } else {\n ignoreEl(lastLabel);\n ignoreEl(lastTick);\n }\n }\n}\nfunction ignoreEl(el) {\n el && (el.ignore = true);\n}\nfunction isTwoLabelOverlapped(current, next) {\n // current and next has the same rotation.\n var firstRect = current && current.getBoundingRect().clone();\n var nextRect = next && next.getBoundingRect().clone();\n if (!firstRect || !nextRect) {\n return;\n }\n // When checking intersect of two rotated labels, we use mRotationBack\n // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.\n var mRotationBack = matrixUtil.identity([]);\n matrixUtil.rotate(mRotationBack, mRotationBack, -current.rotation);\n firstRect.applyTransform(matrixUtil.mul([], mRotationBack, current.getLocalTransform()));\n nextRect.applyTransform(matrixUtil.mul([], mRotationBack, next.getLocalTransform()));\n return firstRect.intersect(nextRect);\n}\nfunction isNameLocationCenter(nameLocation) {\n return nameLocation === 'middle' || nameLocation === 'center';\n}\nfunction createTicks(ticksCoords, tickTransform, tickEndCoord, tickLineStyle, anidPrefix) {\n var tickEls = [];\n var pt1 = [];\n var pt2 = [];\n for (var i = 0; i < ticksCoords.length; i++) {\n var tickCoord = ticksCoords[i].coord;\n pt1[0] = tickCoord;\n pt1[1] = 0;\n pt2[0] = tickCoord;\n pt2[1] = tickEndCoord;\n if (tickTransform) {\n v2ApplyTransform(pt1, pt1, tickTransform);\n v2ApplyTransform(pt2, pt2, tickTransform);\n }\n // Tick line, Not use group transform to have better line draw\n var tickEl = new graphic.Line({\n shape: {\n x1: pt1[0],\n y1: pt1[1],\n x2: pt2[0],\n y2: pt2[1]\n },\n style: tickLineStyle,\n z2: 2,\n autoBatch: true,\n silent: true\n });\n graphic.subPixelOptimizeLine(tickEl.shape, tickEl.style.lineWidth);\n tickEl.anid = anidPrefix + '_' + ticksCoords[i].tickValue;\n tickEls.push(tickEl);\n }\n return tickEls;\n}\nfunction buildAxisMajorTicks(group, transformGroup, axisModel, opt) {\n var axis = axisModel.axis;\n var tickModel = axisModel.getModel('axisTick');\n var shown = tickModel.get('show');\n if (shown === 'auto' && opt.handleAutoShown) {\n shown = opt.handleAutoShown('axisTick');\n }\n if (!shown || axis.scale.isBlank()) {\n return;\n }\n var lineStyleModel = tickModel.getModel('lineStyle');\n var tickEndCoord = opt.tickDirection * tickModel.get('length');\n var ticksCoords = axis.getTicksCoords();\n var ticksEls = createTicks(ticksCoords, transformGroup.transform, tickEndCoord, defaults(lineStyleModel.getLineStyle(), {\n stroke: axisModel.get(['axisLine', 'lineStyle', 'color'])\n }), 'ticks');\n for (var i = 0; i < ticksEls.length; i++) {\n group.add(ticksEls[i]);\n }\n return ticksEls;\n}\nfunction buildAxisMinorTicks(group, transformGroup, axisModel, tickDirection) {\n var axis = axisModel.axis;\n var minorTickModel = axisModel.getModel('minorTick');\n if (!minorTickModel.get('show') || axis.scale.isBlank()) {\n return;\n }\n var minorTicksCoords = axis.getMinorTicksCoords();\n if (!minorTicksCoords.length) {\n return;\n }\n var lineStyleModel = minorTickModel.getModel('lineStyle');\n var tickEndCoord = tickDirection * minorTickModel.get('length');\n var minorTickLineStyle = defaults(lineStyleModel.getLineStyle(), defaults(axisModel.getModel('axisTick').getLineStyle(), {\n stroke: axisModel.get(['axisLine', 'lineStyle', 'color'])\n }));\n for (var i = 0; i < minorTicksCoords.length; i++) {\n var minorTicksEls = createTicks(minorTicksCoords[i], transformGroup.transform, tickEndCoord, minorTickLineStyle, 'minorticks_' + i);\n for (var k = 0; k < minorTicksEls.length; k++) {\n group.add(minorTicksEls[k]);\n }\n }\n}\nfunction buildAxisLabel(group, transformGroup, axisModel, opt) {\n var axis = axisModel.axis;\n var show = retrieve(opt.axisLabelShow, axisModel.get(['axisLabel', 'show']));\n if (!show || axis.scale.isBlank()) {\n return;\n }\n var labelModel = axisModel.getModel('axisLabel');\n var labelMargin = labelModel.get('margin');\n var labels = axis.getViewLabels();\n // Special label rotate.\n var labelRotation = (retrieve(opt.labelRotate, labelModel.get('rotate')) || 0) * PI / 180;\n var labelLayout = AxisBuilder.innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);\n var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true);\n var labelEls = [];\n var silent = AxisBuilder.isLabelSilent(axisModel);\n var triggerEvent = axisModel.get('triggerEvent');\n each(labels, function (labelItem, index) {\n var tickValue = axis.scale.type === 'ordinal' ? axis.scale.getRawOrdinalNumber(labelItem.tickValue) : labelItem.tickValue;\n var formattedLabel = labelItem.formattedLabel;\n var rawLabel = labelItem.rawLabel;\n var itemLabelModel = labelModel;\n if (rawCategoryData && rawCategoryData[tickValue]) {\n var rawCategoryItem = rawCategoryData[tickValue];\n if (isObject(rawCategoryItem) && rawCategoryItem.textStyle) {\n itemLabelModel = new Model(rawCategoryItem.textStyle, labelModel, axisModel.ecModel);\n }\n }\n var textColor = itemLabelModel.getTextColor() || axisModel.get(['axisLine', 'lineStyle', 'color']);\n var tickCoord = axis.dataToCoord(tickValue);\n var align = itemLabelModel.getShallow('align', true) || labelLayout.textAlign;\n var alignMin = retrieve2(itemLabelModel.getShallow('alignMinLabel', true), align);\n var alignMax = retrieve2(itemLabelModel.getShallow('alignMaxLabel', true), align);\n var verticalAlign = itemLabelModel.getShallow('verticalAlign', true) || itemLabelModel.getShallow('baseline', true) || labelLayout.textVerticalAlign;\n var verticalAlignMin = retrieve2(itemLabelModel.getShallow('verticalAlignMinLabel', true), verticalAlign);\n var verticalAlignMax = retrieve2(itemLabelModel.getShallow('verticalAlignMaxLabel', true), verticalAlign);\n var textEl = new graphic.Text({\n x: tickCoord,\n y: opt.labelOffset + opt.labelDirection * labelMargin,\n rotation: labelLayout.rotation,\n silent: silent,\n z2: 10 + (labelItem.level || 0),\n style: createTextStyle(itemLabelModel, {\n text: formattedLabel,\n align: index === 0 ? alignMin : index === labels.length - 1 ? alignMax : align,\n verticalAlign: index === 0 ? verticalAlignMin : index === labels.length - 1 ? verticalAlignMax : verticalAlign,\n fill: isFunction(textColor) ? textColor(\n // (1) In category axis with data zoom, tick is not the original\n // index of axis.data. So tick should not be exposed to user\n // in category axis.\n // (2) Compatible with previous version, which always use formatted label as\n // input. But in interval scale the formatted label is like '223,445', which\n // maked user replace ','. So we modify it to return original val but remain\n // it as 'string' to avoid error in replacing.\n axis.type === 'category' ? rawLabel : axis.type === 'value' ? tickValue + '' : tickValue, index) : textColor\n })\n });\n textEl.anid = 'label_' + tickValue;\n // Pack data for mouse event\n if (triggerEvent) {\n var eventData = AxisBuilder.makeAxisEventDataBase(axisModel);\n eventData.targetType = 'axisLabel';\n eventData.value = rawLabel;\n eventData.tickIndex = index;\n if (axis.type === 'category') {\n eventData.dataIndex = tickValue;\n }\n getECData(textEl).eventData = eventData;\n }\n // FIXME\n transformGroup.add(textEl);\n textEl.updateTransform();\n labelEls.push(textEl);\n group.add(textEl);\n textEl.decomposeTransform();\n });\n return labelEls;\n}\nexport default AxisBuilder;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as textContain from 'zrender/lib/contain/text.js';\nimport * as formatUtil from '../../util/format.js';\nimport * as matrix from 'zrender/lib/core/matrix.js';\nimport * as axisHelper from '../../coord/axisHelper.js';\nimport AxisBuilder from '../axis/AxisBuilder.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nexport function buildElStyle(axisPointerModel) {\n var axisPointerType = axisPointerModel.get('type');\n var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');\n var style;\n if (axisPointerType === 'line') {\n style = styleModel.getLineStyle();\n style.fill = null;\n } else if (axisPointerType === 'shadow') {\n style = styleModel.getAreaStyle();\n style.stroke = null;\n }\n return style;\n}\n/**\n * @param {Function} labelPos {align, verticalAlign, position}\n */\nexport function buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos) {\n var value = axisPointerModel.get('value');\n var text = getValueLabel(value, axisModel.axis, axisModel.ecModel, axisPointerModel.get('seriesDataIndices'), {\n precision: axisPointerModel.get(['label', 'precision']),\n formatter: axisPointerModel.get(['label', 'formatter'])\n });\n var labelModel = axisPointerModel.getModel('label');\n var paddings = formatUtil.normalizeCssArray(labelModel.get('padding') || 0);\n var font = labelModel.getFont();\n var textRect = textContain.getBoundingRect(text, font);\n var position = labelPos.position;\n var width = textRect.width + paddings[1] + paddings[3];\n var height = textRect.height + paddings[0] + paddings[2];\n // Adjust by align.\n var align = labelPos.align;\n align === 'right' && (position[0] -= width);\n align === 'center' && (position[0] -= width / 2);\n var verticalAlign = labelPos.verticalAlign;\n verticalAlign === 'bottom' && (position[1] -= height);\n verticalAlign === 'middle' && (position[1] -= height / 2);\n // Not overflow ec container\n confineInContainer(position, width, height, api);\n var bgColor = labelModel.get('backgroundColor');\n if (!bgColor || bgColor === 'auto') {\n bgColor = axisModel.get(['axisLine', 'lineStyle', 'color']);\n }\n elOption.label = {\n // shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')},\n x: position[0],\n y: position[1],\n style: createTextStyle(labelModel, {\n text: text,\n font: font,\n fill: labelModel.getTextColor(),\n padding: paddings,\n backgroundColor: bgColor\n }),\n // Label should be over axisPointer.\n z2: 10\n };\n}\n// Do not overflow ec container\nfunction confineInContainer(position, width, height, api) {\n var viewWidth = api.getWidth();\n var viewHeight = api.getHeight();\n position[0] = Math.min(position[0] + width, viewWidth) - width;\n position[1] = Math.min(position[1] + height, viewHeight) - height;\n position[0] = Math.max(position[0], 0);\n position[1] = Math.max(position[1], 0);\n}\nexport function getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {\n value = axis.scale.parse(value);\n var text = axis.scale.getLabel({\n value: value\n }, {\n // If `precision` is set, width can be fixed (like '12.00500'), which\n // helps to debounce when when moving label.\n precision: opt.precision\n });\n var formatter = opt.formatter;\n if (formatter) {\n var params_1 = {\n value: axisHelper.getAxisRawValue(axis, {\n value: value\n }),\n axisDimension: axis.dim,\n axisIndex: axis.index,\n seriesData: []\n };\n zrUtil.each(seriesDataIndices, function (idxItem) {\n var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n var dataIndex = idxItem.dataIndexInside;\n var dataParams = series && series.getDataParams(dataIndex);\n dataParams && params_1.seriesData.push(dataParams);\n });\n if (zrUtil.isString(formatter)) {\n text = formatter.replace('{value}', text);\n } else if (zrUtil.isFunction(formatter)) {\n text = formatter(params_1);\n }\n }\n return text;\n}\nexport function getTransformedPosition(axis, value, layoutInfo) {\n var transform = matrix.create();\n matrix.rotate(transform, transform, layoutInfo.rotation);\n matrix.translate(transform, transform, layoutInfo.position);\n return graphic.applyTransform([axis.dataToCoord(value), (layoutInfo.labelOffset || 0) + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)], transform);\n}\nexport function buildCartesianSingleLabelElOption(value, elOption, layoutInfo, axisModel, axisPointerModel, api) {\n // @ts-ignore\n var textLayout = AxisBuilder.innerTextLayout(layoutInfo.rotation, 0, layoutInfo.labelDirection);\n layoutInfo.labelMargin = axisPointerModel.get(['label', 'margin']);\n buildLabelElOption(elOption, axisModel, axisPointerModel, api, {\n position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n align: textLayout.textAlign,\n verticalAlign: textLayout.textVerticalAlign\n });\n}\nexport function makeLineShape(p1, p2, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x1: p1[xDimIndex],\n y1: p1[1 - xDimIndex],\n x2: p2[xDimIndex],\n y2: p2[1 - xDimIndex]\n };\n}\nexport function makeRectShape(xy, wh, xDimIndex) {\n xDimIndex = xDimIndex || 0;\n return {\n x: xy[xDimIndex],\n y: xy[1 - xDimIndex],\n width: wh[xDimIndex],\n height: wh[1 - xDimIndex]\n };\n}\nexport function makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r,\n startAngle: startAngle,\n endAngle: endAngle,\n clockwise: true\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\n/**\n * Can only be called after coordinate system creation stage.\n * (Can be called before coordinate system update stage).\n */\nexport function layout(gridModel, axisModel, opt) {\n opt = opt || {};\n var grid = gridModel.coordinateSystem;\n var axis = axisModel.axis;\n var layout = {};\n var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];\n var rawAxisPosition = axis.position;\n var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;\n var axisDim = axis.dim;\n var rect = grid.getRect();\n var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n var idx = {\n left: 0,\n right: 1,\n top: 0,\n bottom: 1,\n onZero: 2\n };\n var axisOffset = axisModel.get('offset') || 0;\n var posBound = axisDim === 'x' ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset] : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];\n if (otherAxisOnZeroOf) {\n var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));\n posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);\n }\n // Axis position\n layout.position = [axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0], axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]];\n // Axis rotation\n layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1);\n // Tick and label direction, x y is axisDim\n var dirMap = {\n top: -1,\n bottom: 1,\n left: -1,\n right: 1\n };\n layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];\n layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0;\n if (axisModel.get(['axisTick', 'inside'])) {\n layout.tickDirection = -layout.tickDirection;\n }\n if (zrUtil.retrieve(opt.labelInside, axisModel.get(['axisLabel', 'inside']))) {\n layout.labelDirection = -layout.labelDirection;\n }\n // Special label rotation\n var labelRotate = axisModel.get(['axisLabel', 'rotate']);\n layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate;\n // Over splitLine and splitArea\n layout.z2 = 1;\n return layout;\n}\nexport function isCartesian2DSeries(seriesModel) {\n return seriesModel.get('coordinateSystem') === 'cartesian2d';\n}\nexport function findAxisModels(seriesModel) {\n var axisModelMap = {\n xAxisModel: null,\n yAxisModel: null\n };\n zrUtil.each(axisModelMap, function (v, key) {\n var axisType = key.replace(/Model$/, '');\n var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0];\n if (process.env.NODE_ENV !== 'production') {\n if (!axisModel) {\n throw new Error(axisType + ' \"' + zrUtil.retrieve3(seriesModel.get(axisType + 'Index'), seriesModel.get(axisType + 'Id'), 0) + '\" not found');\n }\n }\n axisModelMap[key] = axisModel;\n });\n return axisModelMap;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BaseAxisPointer from './BaseAxisPointer.js';\nimport * as viewHelper from './viewHelper.js';\nimport * as cartesianAxisHelper from '../../coord/cartesian/cartesianAxisHelper.js';\nvar CartesianAxisPointer = /** @class */function (_super) {\n __extends(CartesianAxisPointer, _super);\n function CartesianAxisPointer() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @override\n */\n CartesianAxisPointer.prototype.makeElOption = function (elOption, value, axisModel, axisPointerModel, api) {\n var axis = axisModel.axis;\n var grid = axis.grid;\n var axisPointerType = axisPointerModel.get('type');\n var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));\n if (axisPointerType && axisPointerType !== 'none') {\n var elStyle = viewHelper.buildElStyle(axisPointerModel);\n var pointerOption = pointerShapeBuilder[axisPointerType](axis, pixelValue, otherExtent);\n pointerOption.style = elStyle;\n elOption.graphicKey = pointerOption.type;\n elOption.pointer = pointerOption;\n }\n var layoutInfo = cartesianAxisHelper.layout(grid.model, axisModel);\n viewHelper.buildCartesianSingleLabelElOption(\n // @ts-ignore\n value, elOption, layoutInfo, axisModel, axisPointerModel, api);\n };\n /**\n * @override\n */\n CartesianAxisPointer.prototype.getHandleTransform = function (value, axisModel, axisPointerModel) {\n var layoutInfo = cartesianAxisHelper.layout(axisModel.axis.grid.model, axisModel, {\n labelInside: false\n });\n // @ts-ignore\n layoutInfo.labelMargin = axisPointerModel.get(['handle', 'margin']);\n var pos = viewHelper.getTransformedPosition(axisModel.axis, value, layoutInfo);\n return {\n x: pos[0],\n y: pos[1],\n rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n };\n };\n /**\n * @override\n */\n CartesianAxisPointer.prototype.updateHandleTransform = function (transform, delta, axisModel, axisPointerModel) {\n var axis = axisModel.axis;\n var grid = axis.grid;\n var axisExtent = axis.getGlobalExtent(true);\n var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n var dimIndex = axis.dim === 'x' ? 0 : 1;\n var currPosition = [transform.x, transform.y];\n currPosition[dimIndex] += delta[dimIndex];\n currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n var cursorPoint = [cursorOtherValue, cursorOtherValue];\n cursorPoint[dimIndex] = currPosition[dimIndex];\n // Make tooltip do not overlap axisPointer and in the middle of the grid.\n var tooltipOptions = [{\n verticalAlign: 'middle'\n }, {\n align: 'center'\n }];\n return {\n x: currPosition[0],\n y: currPosition[1],\n rotation: transform.rotation,\n cursorPoint: cursorPoint,\n tooltipOption: tooltipOptions[dimIndex]\n };\n };\n return CartesianAxisPointer;\n}(BaseAxisPointer);\nfunction getCartesian(grid, axis) {\n var opt = {};\n opt[axis.dim + 'AxisIndex'] = axis.index;\n return grid.getCartesian(opt);\n}\nvar pointerShapeBuilder = {\n line: function (axis, pixelValue, otherExtent) {\n var targetShape = viewHelper.makeLineShape([pixelValue, otherExtent[0]], [pixelValue, otherExtent[1]], getAxisDimIndex(axis));\n return {\n type: 'Line',\n subPixelOptimize: true,\n shape: targetShape\n };\n },\n shadow: function (axis, pixelValue, otherExtent) {\n var bandWidth = Math.max(1, axis.getBandWidth());\n var span = otherExtent[1] - otherExtent[0];\n return {\n type: 'Rect',\n shape: viewHelper.makeRectShape([pixelValue - bandWidth / 2, otherExtent[0]], [bandWidth, span], getAxisDimIndex(axis))\n };\n }\n};\nfunction getAxisDimIndex(axis) {\n return axis.dim === 'x' ? 0 : 1;\n}\nexport default CartesianAxisPointer;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\nvar AxisPointerModel = /** @class */function (_super) {\n __extends(AxisPointerModel, _super);\n function AxisPointerModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = AxisPointerModel.type;\n return _this;\n }\n AxisPointerModel.type = 'axisPointer';\n AxisPointerModel.defaultOption = {\n // 'auto' means that show when triggered by tooltip or handle.\n show: 'auto',\n // zlevel: 0,\n z: 50,\n type: 'line',\n // axispointer triggered by tootip determine snap automatically,\n // see `modelHelper`.\n snap: false,\n triggerTooltip: true,\n triggerEmphasis: true,\n value: null,\n status: null,\n link: [],\n // Do not set 'auto' here, otherwise global animation: false\n // will not effect at this axispointer.\n animation: null,\n animationDurationUpdate: 200,\n lineStyle: {\n color: '#B9BEC9',\n width: 1,\n type: 'dashed'\n },\n shadowStyle: {\n color: 'rgba(210,219,238,0.2)'\n },\n label: {\n show: true,\n formatter: null,\n precision: 'auto',\n margin: 3,\n color: '#fff',\n padding: [5, 7, 5, 7],\n backgroundColor: 'auto',\n borderColor: null,\n borderWidth: 0,\n borderRadius: 3\n },\n handle: {\n show: false,\n // eslint-disable-next-line\n icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z',\n size: 45,\n // handle margin is from symbol center to axis, which is stable when circular move.\n margin: 50,\n // color: '#1b8bbd'\n // color: '#2f4554'\n color: '#333',\n shadowBlur: 3,\n shadowColor: '#aaa',\n shadowOffsetX: 0,\n shadowOffsetY: 2,\n // For mobile performance\n throttle: 40\n }\n };\n return AxisPointerModel;\n}(ComponentModel);\nexport default AxisPointerModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport { makeInner } from '../../util/model.js';\nvar inner = makeInner();\nvar each = zrUtil.each;\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n * @param {Function} handler\n * param: {string} currTrigger\n * param: {Array.} point\n */\nexport function register(key, api, handler) {\n if (env.node) {\n return;\n }\n var zr = api.getZr();\n inner(zr).records || (inner(zr).records = {});\n initGlobalListeners(zr, api);\n var record = inner(zr).records[key] || (inner(zr).records[key] = {});\n record.handler = handler;\n}\nfunction initGlobalListeners(zr, api) {\n if (inner(zr).initialized) {\n return;\n }\n inner(zr).initialized = true;\n useHandler('click', zrUtil.curry(doEnter, 'click'));\n useHandler('mousemove', zrUtil.curry(doEnter, 'mousemove'));\n // useHandler('mouseout', onLeave);\n useHandler('globalout', onLeave);\n function useHandler(eventType, cb) {\n zr.on(eventType, function (e) {\n var dis = makeDispatchAction(api);\n each(inner(zr).records, function (record) {\n record && cb(record, e, dis.dispatchAction);\n });\n dispatchTooltipFinally(dis.pendings, api);\n });\n }\n}\nfunction dispatchTooltipFinally(pendings, api) {\n var showLen = pendings.showTip.length;\n var hideLen = pendings.hideTip.length;\n var actuallyPayload;\n if (showLen) {\n actuallyPayload = pendings.showTip[showLen - 1];\n } else if (hideLen) {\n actuallyPayload = pendings.hideTip[hideLen - 1];\n }\n if (actuallyPayload) {\n actuallyPayload.dispatchAction = null;\n api.dispatchAction(actuallyPayload);\n }\n}\nfunction onLeave(record, e, dispatchAction) {\n record.handler('leave', null, dispatchAction);\n}\nfunction doEnter(currTrigger, record, e, dispatchAction) {\n record.handler(currTrigger, e, dispatchAction);\n}\nfunction makeDispatchAction(api) {\n var pendings = {\n showTip: [],\n hideTip: []\n };\n // FIXME\n // better approach?\n // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip,\n // which may be conflict, (axisPointer call showTip but tooltip call hideTip);\n // So we have to add \"final stage\" to merge those dispatched actions.\n var dispatchAction = function (payload) {\n var pendingList = pendings[payload.type];\n if (pendingList) {\n pendingList.push(payload);\n } else {\n payload.dispatchAction = dispatchAction;\n api.dispatchAction(payload);\n }\n };\n return {\n dispatchAction: dispatchAction,\n pendings: pendings\n };\n}\nexport function unregister(key, api) {\n if (env.node) {\n return;\n }\n var zr = api.getZr();\n var record = (inner(zr).records || {})[key];\n if (record) {\n inner(zr).records[key] = null;\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as globalListener from './globalListener.js';\nimport ComponentView from '../../view/Component.js';\nvar AxisPointerView = /** @class */function (_super) {\n __extends(AxisPointerView, _super);\n function AxisPointerView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = AxisPointerView.type;\n return _this;\n }\n AxisPointerView.prototype.render = function (globalAxisPointerModel, ecModel, api) {\n var globalTooltipModel = ecModel.getComponent('tooltip');\n var triggerOn = globalAxisPointerModel.get('triggerOn') || globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click';\n // Register global listener in AxisPointerView to enable\n // AxisPointerView to be independent to Tooltip.\n globalListener.register('axisPointer', api, function (currTrigger, e, dispatchAction) {\n // If 'none', it is not controlled by mouse totally.\n if (triggerOn !== 'none' && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)) {\n dispatchAction({\n type: 'updateAxisPointer',\n currTrigger: currTrigger,\n x: e && e.offsetX,\n y: e && e.offsetY\n });\n }\n });\n };\n AxisPointerView.prototype.remove = function (ecModel, api) {\n globalListener.unregister('axisPointer', api);\n };\n AxisPointerView.prototype.dispose = function (ecModel, api) {\n globalListener.unregister('axisPointer', api);\n };\n AxisPointerView.type = 'axisPointer';\n return AxisPointerView;\n}(ComponentView);\nexport default AxisPointerView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\n/**\n * @param finder contains {seriesIndex, dataIndex, dataIndexInside}\n * @param ecModel\n * @return {point: [x, y], el: ...} point Will not be null.\n */\nexport default function findPointFromSeries(finder, ecModel) {\n var point = [];\n var seriesIndex = finder.seriesIndex;\n var seriesModel;\n if (seriesIndex == null || !(seriesModel = ecModel.getSeriesByIndex(seriesIndex))) {\n return {\n point: []\n };\n }\n var data = seriesModel.getData();\n var dataIndex = modelUtil.queryDataIndex(data, finder);\n if (dataIndex == null || dataIndex < 0 || zrUtil.isArray(dataIndex)) {\n return {\n point: []\n };\n }\n var el = data.getItemGraphicEl(dataIndex);\n var coordSys = seriesModel.coordinateSystem;\n if (seriesModel.getTooltipPosition) {\n point = seriesModel.getTooltipPosition(dataIndex) || [];\n } else if (coordSys && coordSys.dataToPoint) {\n if (finder.isStacked) {\n var baseAxis = coordSys.getBaseAxis();\n var valueAxis = coordSys.getOtherAxis(baseAxis);\n var valueAxisDim = valueAxis.dim;\n var baseAxisDim = baseAxis.dim;\n var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n var baseDim = data.mapDimension(baseAxisDim);\n var stackedData = [];\n stackedData[baseDataOffset] = data.get(baseDim, dataIndex);\n stackedData[1 - baseDataOffset] = data.get(data.getCalculationInfo('stackResultDimension'), dataIndex);\n point = coordSys.dataToPoint(stackedData) || [];\n } else {\n point = coordSys.dataToPoint(data.getValues(zrUtil.map(coordSys.dimensions, function (dim) {\n return data.mapDimension(dim);\n }), dataIndex)) || [];\n }\n } else if (el) {\n // Use graphic bounding rect\n var rect = el.getBoundingRect().clone();\n rect.applyTransform(el.transform);\n point = [rect.x + rect.width / 2, rect.y + rect.height / 2];\n }\n return {\n point: point,\n el: el\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { makeInner } from '../../util/model.js';\nimport * as modelHelper from './modelHelper.js';\nimport findPointFromSeries from './findPointFromSeries.js';\nimport { each, curry, bind, extend } from 'zrender/lib/core/util.js';\nvar inner = makeInner();\n/**\n * Basic logic: check all axis, if they do not demand show/highlight,\n * then hide/downplay them.\n *\n * @return content of event obj for echarts.connect.\n */\nexport default function axisTrigger(payload, ecModel, api) {\n var currTrigger = payload.currTrigger;\n var point = [payload.x, payload.y];\n var finder = payload;\n var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api);\n var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n // Pending\n // See #6121. But we are not able to reproduce it yet.\n if (!coordSysAxesInfo) {\n return;\n }\n if (illegalPoint(point)) {\n // Used in the default behavior of `connection`: use the sample seriesIndex\n // and dataIndex. And also used in the tooltipView trigger.\n point = findPointFromSeries({\n seriesIndex: finder.seriesIndex,\n // Do not use dataIndexInside from other ec instance.\n // FIXME: auto detect it?\n dataIndex: finder.dataIndex\n }, ecModel).point;\n }\n var isIllegalPoint = illegalPoint(point);\n // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}).\n // Notice: In this case, it is difficult to get the `point` (which is necessary to show\n // tooltip, so if point is not given, we just use the point found by sample seriesIndex\n // and dataIndex.\n var inputAxesInfo = finder.axesInfo;\n var axesInfo = coordSysAxesInfo.axesInfo;\n var shouldHide = currTrigger === 'leave' || illegalPoint(point);\n var outputPayload = {};\n var showValueMap = {};\n var dataByCoordSys = {\n list: [],\n map: {}\n };\n var updaters = {\n showPointer: curry(showPointer, showValueMap),\n showTooltip: curry(showTooltip, dataByCoordSys)\n };\n // Process for triggered axes.\n each(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) {\n // If a point given, it must be contained by the coordinate system.\n var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);\n each(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {\n var axis = axisInfo.axis;\n var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo);\n // If no inputAxesInfo, no axis is restricted.\n if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {\n var val = inputAxisInfo && inputAxisInfo.value;\n if (val == null && !isIllegalPoint) {\n val = axis.pointToData(point);\n }\n val != null && processOnAxis(axisInfo, val, updaters, false, outputPayload);\n }\n });\n });\n // Process for linked axes.\n var linkTriggers = {};\n each(axesInfo, function (tarAxisInfo, tarKey) {\n var linkGroup = tarAxisInfo.linkGroup;\n // If axis has been triggered in the previous stage, it should not be triggered by link.\n if (linkGroup && !showValueMap[tarKey]) {\n each(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {\n var srcValItem = showValueMap[srcKey];\n // If srcValItem exist, source axis is triggered, so link to target axis.\n if (srcAxisInfo !== tarAxisInfo && srcValItem) {\n var val = srcValItem.value;\n linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo))));\n linkTriggers[tarAxisInfo.key] = val;\n }\n });\n }\n });\n each(linkTriggers, function (val, tarKey) {\n processOnAxis(axesInfo[tarKey], val, updaters, true, outputPayload);\n });\n updateModelActually(showValueMap, axesInfo, outputPayload);\n dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);\n dispatchHighDownActually(axesInfo, dispatchAction, api);\n return outputPayload;\n}\nfunction processOnAxis(axisInfo, newValue, updaters, noSnap, outputFinder) {\n var axis = axisInfo.axis;\n if (axis.scale.isBlank() || !axis.containData(newValue)) {\n return;\n }\n if (!axisInfo.involveSeries) {\n updaters.showPointer(axisInfo, newValue);\n return;\n }\n // Heavy calculation. So put it after axis.containData checking.\n var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);\n var payloadBatch = payloadInfo.payloadBatch;\n var snapToValue = payloadInfo.snapToValue;\n // Fill content of event obj for echarts.connect.\n // By default use the first involved series data as a sample to connect.\n if (payloadBatch[0] && outputFinder.seriesIndex == null) {\n extend(outputFinder, payloadBatch[0]);\n }\n // If no linkSource input, this process is for collecting link\n // target, where snap should not be accepted.\n if (!noSnap && axisInfo.snap) {\n if (axis.containData(snapToValue) && snapToValue != null) {\n newValue = snapToValue;\n }\n }\n updaters.showPointer(axisInfo, newValue, payloadBatch);\n // Tooltip should always be snapToValue, otherwise there will be\n // incorrect \"axis value ~ series value\" mapping displayed in tooltip.\n updaters.showTooltip(axisInfo, payloadInfo, snapToValue);\n}\nfunction buildPayloadsBySeries(value, axisInfo) {\n var axis = axisInfo.axis;\n var dim = axis.dim;\n var snapToValue = value;\n var payloadBatch = [];\n var minDist = Number.MAX_VALUE;\n var minDiff = -1;\n each(axisInfo.seriesModels, function (series, idx) {\n var dataDim = series.getData().mapDimensionsAll(dim);\n var seriesNestestValue;\n var dataIndices;\n if (series.getAxisTooltipData) {\n var result = series.getAxisTooltipData(dataDim, value, axis);\n dataIndices = result.dataIndices;\n seriesNestestValue = result.nestestValue;\n } else {\n dataIndices = series.getData().indicesOfNearest(dataDim[0], value,\n // Add a threshold to avoid find the wrong dataIndex\n // when data length is not same.\n // false,\n axis.type === 'category' ? 0.5 : null);\n if (!dataIndices.length) {\n return;\n }\n seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);\n }\n if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {\n return;\n }\n var diff = value - seriesNestestValue;\n var dist = Math.abs(diff);\n // Consider category case\n if (dist <= minDist) {\n if (dist < minDist || diff >= 0 && minDiff < 0) {\n minDist = dist;\n minDiff = diff;\n snapToValue = seriesNestestValue;\n payloadBatch.length = 0;\n }\n each(dataIndices, function (dataIndex) {\n payloadBatch.push({\n seriesIndex: series.seriesIndex,\n dataIndexInside: dataIndex,\n dataIndex: series.getData().getRawIndex(dataIndex)\n });\n });\n }\n });\n return {\n payloadBatch: payloadBatch,\n snapToValue: snapToValue\n };\n}\nfunction showPointer(showValueMap, axisInfo, value, payloadBatch) {\n showValueMap[axisInfo.key] = {\n value: value,\n payloadBatch: payloadBatch\n };\n}\nfunction showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {\n var payloadBatch = payloadInfo.payloadBatch;\n var axis = axisInfo.axis;\n var axisModel = axis.model;\n var axisPointerModel = axisInfo.axisPointerModel;\n // If no data, do not create anything in dataByCoordSys,\n // whose length will be used to judge whether dispatch action.\n if (!axisInfo.triggerTooltip || !payloadBatch.length) {\n return;\n }\n var coordSysModel = axisInfo.coordSys.model;\n var coordSysKey = modelHelper.makeKey(coordSysModel);\n var coordSysItem = dataByCoordSys.map[coordSysKey];\n if (!coordSysItem) {\n coordSysItem = dataByCoordSys.map[coordSysKey] = {\n coordSysId: coordSysModel.id,\n coordSysIndex: coordSysModel.componentIndex,\n coordSysType: coordSysModel.type,\n coordSysMainType: coordSysModel.mainType,\n dataByAxis: []\n };\n dataByCoordSys.list.push(coordSysItem);\n }\n coordSysItem.dataByAxis.push({\n axisDim: axis.dim,\n axisIndex: axisModel.componentIndex,\n axisType: axisModel.type,\n axisId: axisModel.id,\n value: value,\n // Caustion: viewHelper.getValueLabel is actually on \"view stage\", which\n // depends that all models have been updated. So it should not be performed\n // here. Considering axisPointerModel used here is volatile, which is hard\n // to be retrieve in TooltipView, we prepare parameters here.\n valueLabelOpt: {\n precision: axisPointerModel.get(['label', 'precision']),\n formatter: axisPointerModel.get(['label', 'formatter'])\n },\n seriesDataIndices: payloadBatch.slice()\n });\n}\nfunction updateModelActually(showValueMap, axesInfo, outputPayload) {\n var outputAxesInfo = outputPayload.axesInfo = [];\n // Basic logic: If no 'show' required, 'hide' this axisPointer.\n each(axesInfo, function (axisInfo, key) {\n var option = axisInfo.axisPointerModel.option;\n var valItem = showValueMap[key];\n if (valItem) {\n !axisInfo.useHandle && (option.status = 'show');\n option.value = valItem.value;\n // For label formatter param and highlight.\n option.seriesDataIndices = (valItem.payloadBatch || []).slice();\n }\n // When always show (e.g., handle used), remain\n // original value and status.\n else {\n // If hide, value still need to be set, consider\n // click legend to toggle axis blank.\n !axisInfo.useHandle && (option.status = 'hide');\n }\n // If status is 'hide', should be no info in payload.\n option.status === 'show' && outputAxesInfo.push({\n axisDim: axisInfo.axis.dim,\n axisIndex: axisInfo.axis.model.componentIndex,\n value: option.value\n });\n });\n}\nfunction dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) {\n // Basic logic: If no showTip required, hideTip will be dispatched.\n if (illegalPoint(point) || !dataByCoordSys.list.length) {\n dispatchAction({\n type: 'hideTip'\n });\n return;\n }\n // In most case only one axis (or event one series is used). It is\n // convenient to fetch payload.seriesIndex and payload.dataIndex\n // directly. So put the first seriesIndex and dataIndex of the first\n // axis on the payload.\n var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};\n dispatchAction({\n type: 'showTip',\n escapeConnect: true,\n x: point[0],\n y: point[1],\n tooltipOption: payload.tooltipOption,\n position: payload.position,\n dataIndexInside: sampleItem.dataIndexInside,\n dataIndex: sampleItem.dataIndex,\n seriesIndex: sampleItem.seriesIndex,\n dataByCoordSys: dataByCoordSys.list\n });\n}\nfunction dispatchHighDownActually(axesInfo, dispatchAction, api) {\n // FIXME\n // highlight status modification should be a stage of main process?\n // (Consider confilct (e.g., legend and axisPointer) and setOption)\n var zr = api.getZr();\n var highDownKey = 'axisPointerLastHighlights';\n var lastHighlights = inner(zr)[highDownKey] || {};\n var newHighlights = inner(zr)[highDownKey] = {};\n // Update highlight/downplay status according to axisPointer model.\n // Build hash map and remove duplicate incidentally.\n each(axesInfo, function (axisInfo, key) {\n var option = axisInfo.axisPointerModel.option;\n option.status === 'show' && axisInfo.triggerEmphasis && each(option.seriesDataIndices, function (batchItem) {\n var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex;\n newHighlights[key] = batchItem;\n });\n });\n // Diff.\n var toHighlight = [];\n var toDownplay = [];\n each(lastHighlights, function (batchItem, key) {\n !newHighlights[key] && toDownplay.push(batchItem);\n });\n each(newHighlights, function (batchItem, key) {\n !lastHighlights[key] && toHighlight.push(batchItem);\n });\n toDownplay.length && api.dispatchAction({\n type: 'downplay',\n escapeConnect: true,\n // Not blur others when highlight in axisPointer.\n notBlur: true,\n batch: toDownplay\n });\n toHighlight.length && api.dispatchAction({\n type: 'highlight',\n escapeConnect: true,\n // Not blur others when highlight in axisPointer.\n notBlur: true,\n batch: toHighlight\n });\n}\nfunction findInputAxisInfo(inputAxesInfo, axisInfo) {\n for (var i = 0; i < (inputAxesInfo || []).length; i++) {\n var inputAxisInfo = inputAxesInfo[i];\n if (axisInfo.axis.dim === inputAxisInfo.axisDim && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex) {\n return inputAxisInfo;\n }\n }\n}\nfunction makeMapperParam(axisInfo) {\n var axisModel = axisInfo.axis.model;\n var item = {};\n var dim = item.axisDim = axisInfo.axis.dim;\n item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex;\n item.axisName = item[dim + 'AxisName'] = axisModel.name;\n item.axisId = item[dim + 'AxisId'] = axisModel.id;\n return item;\n}\nfunction illegalPoint(point) {\n return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport AxisView from '../axis/AxisView.js';\nimport CartesianAxisPointer from './CartesianAxisPointer.js';\nimport AxisPointerModel from './AxisPointerModel.js';\nimport AxisPointerView from './AxisPointerView.js';\nimport { isArray } from 'zrender/lib/core/util.js';\nimport { collect } from './modelHelper.js';\nimport axisTrigger from './axisTrigger.js';\nexport function install(registers) {\n // CartesianAxisPointer is not supposed to be required here. But consider\n // echarts.simple.js and online build tooltip, which only require gridSimple,\n // CartesianAxisPointer should be able to required somewhere.\n AxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);\n registers.registerComponentModel(AxisPointerModel);\n registers.registerComponentView(AxisPointerView);\n registers.registerPreprocessor(function (option) {\n // Always has a global axisPointerModel for default setting.\n if (option) {\n (!option.axisPointer || option.axisPointer.length === 0) && (option.axisPointer = {});\n var link = option.axisPointer.link;\n // Normalize to array to avoid object mergin. But if link\n // is not set, remain null/undefined, otherwise it will\n // override existent link setting.\n if (link && !isArray(link)) {\n option.axisPointer.link = [link];\n }\n }\n });\n // This process should proformed after coordinate systems created\n // and series data processed. So put it on statistic processing stage.\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) {\n // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n // allAxesInfo should be updated when setOption performed.\n ecModel.getComponent('axisPointer').coordSysAxesInfo = collect(ecModel, api);\n });\n // Broadcast to all views.\n registers.registerAction({\n type: 'updateAxisPointer',\n event: 'updateAxisPointer',\n update: ':updateAxisPointer'\n }, axisTrigger);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\nvar TooltipModel = /** @class */function (_super) {\n __extends(TooltipModel, _super);\n function TooltipModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = TooltipModel.type;\n return _this;\n }\n TooltipModel.type = 'tooltip';\n TooltipModel.dependencies = ['axisPointer'];\n TooltipModel.defaultOption = {\n // zlevel: 0,\n z: 60,\n show: true,\n // tooltip main content\n showContent: true,\n // 'trigger' only works on coordinate system.\n // 'item' | 'axis' | 'none'\n trigger: 'item',\n // 'click' | 'mousemove' | 'none'\n triggerOn: 'mousemove|click',\n alwaysShowContent: false,\n displayMode: 'single',\n renderMode: 'auto',\n // whether restraint content inside viewRect.\n // If renderMode: 'richText', default true.\n // If renderMode: 'html', defaut false (for backward compat).\n confine: null,\n showDelay: 0,\n hideDelay: 100,\n // Animation transition time, unit is second\n transitionDuration: 0.4,\n enterable: false,\n backgroundColor: '#fff',\n // box shadow\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, .2)',\n shadowOffsetX: 1,\n shadowOffsetY: 2,\n // tooltip border radius, unit is px, default is 4\n borderRadius: 4,\n // tooltip border width, unit is px, default is 0 (no border)\n borderWidth: 1,\n // Tooltip inside padding, default is 5 for all direction\n // Array is allowed to set up, right, bottom, left, same with css\n // The default value: See `tooltip/tooltipMarkup.ts#getPaddingFromTooltipModel`.\n padding: null,\n // Extra css text\n extraCssText: '',\n // axis indicator, trigger by axis\n axisPointer: {\n // default is line\n // legal values: 'line' | 'shadow' | 'cross'\n type: 'line',\n // Valid when type is line, appoint tooltip line locate on which line. Optional\n // legal values: 'x' | 'y' | 'angle' | 'radius' | 'auto'\n // default is 'auto', chose the axis which type is category.\n // for multiply y axis, cartesian coord chose x axis, polar chose angle axis\n axis: 'auto',\n animation: 'auto',\n animationDurationUpdate: 200,\n animationEasingUpdate: 'exponentialOut',\n crossStyle: {\n color: '#999',\n width: 1,\n type: 'dashed',\n // TODO formatter\n textStyle: {}\n }\n // lineStyle and shadowStyle should not be specified here,\n // otherwise it will always override those styles on option.axisPointer.\n },\n\n textStyle: {\n color: '#666',\n fontSize: 14\n }\n };\n return TooltipModel;\n}(ComponentModel);\nexport default TooltipModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { toCamelCase } from '../../util/format.js';\nimport env from 'zrender/lib/core/env.js';\n/* global document */\nexport function shouldTooltipConfine(tooltipModel) {\n var confineOption = tooltipModel.get('confine');\n return confineOption != null ? !!confineOption\n // In richText mode, the outside part can not be visible.\n : tooltipModel.get('renderMode') === 'richText';\n}\nfunction testStyle(styleProps) {\n if (!env.domSupported) {\n return;\n }\n var style = document.documentElement.style;\n for (var i = 0, len = styleProps.length; i < len; i++) {\n if (styleProps[i] in style) {\n return styleProps[i];\n }\n }\n}\nexport var TRANSFORM_VENDOR = testStyle(['transform', 'webkitTransform', 'OTransform', 'MozTransform', 'msTransform']);\nexport var TRANSITION_VENDOR = testStyle(['webkitTransition', 'transition', 'OTransition', 'MozTransition', 'msTransition']);\nexport function toCSSVendorPrefix(styleVendor, styleProp) {\n if (!styleVendor) {\n return styleProp;\n }\n styleProp = toCamelCase(styleProp, true);\n var idx = styleVendor.indexOf(styleProp);\n styleVendor = idx === -1 ? styleProp : \"-\" + styleVendor.slice(0, idx) + \"-\" + styleProp;\n return styleVendor.toLowerCase();\n}\nexport function getComputedStyle(el, style) {\n var stl = el.currentStyle || document.defaultView && document.defaultView.getComputedStyle(el);\n return stl ? style ? stl[style] : stl : null;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isString, indexOf, each, bind, isFunction, isArray, isDom } from 'zrender/lib/core/util.js';\nimport { normalizeEvent } from 'zrender/lib/core/event.js';\nimport { transformLocalCoord } from 'zrender/lib/core/dom.js';\nimport env from 'zrender/lib/core/env.js';\nimport { convertToColorString, toCamelCase, normalizeCssArray } from '../../util/format.js';\nimport { shouldTooltipConfine, toCSSVendorPrefix, getComputedStyle, TRANSFORM_VENDOR, TRANSITION_VENDOR } from './helper.js';\nimport { getPaddingFromTooltipModel } from './tooltipMarkup.js';\n/* global document, window */\nvar CSS_TRANSITION_VENDOR = toCSSVendorPrefix(TRANSITION_VENDOR, 'transition');\nvar CSS_TRANSFORM_VENDOR = toCSSVendorPrefix(TRANSFORM_VENDOR, 'transform');\n// eslint-disable-next-line\nvar gCssText = \"position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;\" + (env.transform3dSupported ? 'will-change:transform;' : '');\nfunction mirrorPos(pos) {\n pos = pos === 'left' ? 'right' : pos === 'right' ? 'left' : pos === 'top' ? 'bottom' : 'top';\n return pos;\n}\nfunction assembleArrow(tooltipModel, borderColor, arrowPosition) {\n if (!isString(arrowPosition) || arrowPosition === 'inside') {\n return '';\n }\n var backgroundColor = tooltipModel.get('backgroundColor');\n var borderWidth = tooltipModel.get('borderWidth');\n borderColor = convertToColorString(borderColor);\n var arrowPos = mirrorPos(arrowPosition);\n var arrowSize = Math.max(Math.round(borderWidth) * 1.5, 6);\n var positionStyle = '';\n var transformStyle = CSS_TRANSFORM_VENDOR + ':';\n var rotateDeg;\n if (indexOf(['left', 'right'], arrowPos) > -1) {\n positionStyle += 'top:50%';\n transformStyle += \"translateY(-50%) rotate(\" + (rotateDeg = arrowPos === 'left' ? -225 : -45) + \"deg)\";\n } else {\n positionStyle += 'left:50%';\n transformStyle += \"translateX(-50%) rotate(\" + (rotateDeg = arrowPos === 'top' ? 225 : 45) + \"deg)\";\n }\n var rotateRadian = rotateDeg * Math.PI / 180;\n var arrowWH = arrowSize + borderWidth;\n var rotatedWH = arrowWH * Math.abs(Math.cos(rotateRadian)) + arrowWH * Math.abs(Math.sin(rotateRadian));\n var arrowOffset = Math.round(((rotatedWH - Math.SQRT2 * borderWidth) / 2 + Math.SQRT2 * borderWidth - (rotatedWH - arrowWH) / 2) * 100) / 100;\n positionStyle += \";\" + arrowPos + \":-\" + arrowOffset + \"px\";\n var borderStyle = borderColor + \" solid \" + borderWidth + \"px;\";\n var styleCss = [\"position:absolute;width:\" + arrowSize + \"px;height:\" + arrowSize + \"px;z-index:-1;\", positionStyle + \";\" + transformStyle + \";\", \"border-bottom:\" + borderStyle, \"border-right:\" + borderStyle, \"background-color:\" + backgroundColor + \";\"];\n return \"
\";\n}\nfunction assembleTransition(duration, onlyFade) {\n var transitionCurve = 'cubic-bezier(0.23,1,0.32,1)';\n var transitionOption = \" \" + duration / 2 + \"s \" + transitionCurve;\n var transitionText = \"opacity\" + transitionOption + \",visibility\" + transitionOption;\n if (!onlyFade) {\n transitionOption = \" \" + duration + \"s \" + transitionCurve;\n transitionText += env.transformSupported ? \",\" + CSS_TRANSFORM_VENDOR + transitionOption : \",left\" + transitionOption + \",top\" + transitionOption;\n }\n return CSS_TRANSITION_VENDOR + ':' + transitionText;\n}\nfunction assembleTransform(x, y, toString) {\n // If using float on style, the final width of the dom might\n // keep changing slightly while mouse move. So `toFixed(0)` them.\n var x0 = x.toFixed(0) + 'px';\n var y0 = y.toFixed(0) + 'px';\n // not support transform, use `left` and `top` instead.\n if (!env.transformSupported) {\n return toString ? \"top:\" + y0 + \";left:\" + x0 + \";\" : [['top', y0], ['left', x0]];\n }\n // support transform\n var is3d = env.transform3dSupported;\n var translate = \"translate\" + (is3d ? '3d' : '') + \"(\" + x0 + \",\" + y0 + (is3d ? ',0' : '') + \")\";\n return toString ? 'top:0;left:0;' + CSS_TRANSFORM_VENDOR + ':' + translate + ';' : [['top', 0], ['left', 0], [TRANSFORM_VENDOR, translate]];\n}\n/**\n * @param {Object} textStyle\n * @return {string}\n * @inner\n */\nfunction assembleFont(textStyleModel) {\n var cssText = [];\n var fontSize = textStyleModel.get('fontSize');\n var color = textStyleModel.getTextColor();\n color && cssText.push('color:' + color);\n cssText.push('font:' + textStyleModel.getFont());\n fontSize\n // @ts-ignore, leave it to the tooltip refactor.\n && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');\n var shadowColor = textStyleModel.get('textShadowColor');\n var shadowBlur = textStyleModel.get('textShadowBlur') || 0;\n var shadowOffsetX = textStyleModel.get('textShadowOffsetX') || 0;\n var shadowOffsetY = textStyleModel.get('textShadowOffsetY') || 0;\n shadowColor && shadowBlur && cssText.push('text-shadow:' + shadowOffsetX + 'px ' + shadowOffsetY + 'px ' + shadowBlur + 'px ' + shadowColor);\n each(['decoration', 'align'], function (name) {\n var val = textStyleModel.get(name);\n val && cssText.push('text-' + name + ':' + val);\n });\n return cssText.join(';');\n}\nfunction assembleCssText(tooltipModel, enableTransition, onlyFade) {\n var cssText = [];\n var transitionDuration = tooltipModel.get('transitionDuration');\n var backgroundColor = tooltipModel.get('backgroundColor');\n var shadowBlur = tooltipModel.get('shadowBlur');\n var shadowColor = tooltipModel.get('shadowColor');\n var shadowOffsetX = tooltipModel.get('shadowOffsetX');\n var shadowOffsetY = tooltipModel.get('shadowOffsetY');\n var textStyleModel = tooltipModel.getModel('textStyle');\n var padding = getPaddingFromTooltipModel(tooltipModel, 'html');\n var boxShadow = shadowOffsetX + \"px \" + shadowOffsetY + \"px \" + shadowBlur + \"px \" + shadowColor;\n cssText.push('box-shadow:' + boxShadow);\n // Animation transition. Do not animate when transitionDuration is 0.\n enableTransition && transitionDuration && cssText.push(assembleTransition(transitionDuration, onlyFade));\n if (backgroundColor) {\n cssText.push('background-color:' + backgroundColor);\n }\n // Border style\n each(['width', 'color', 'radius'], function (name) {\n var borderName = 'border-' + name;\n var camelCase = toCamelCase(borderName);\n var val = tooltipModel.get(camelCase);\n val != null && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));\n });\n // Text style\n cssText.push(assembleFont(textStyleModel));\n // Padding\n if (padding != null) {\n cssText.push('padding:' + normalizeCssArray(padding).join('px ') + 'px');\n }\n return cssText.join(';') + ';';\n}\n// If not able to make, do not modify the input `out`.\nfunction makeStyleCoord(out, zr, container, zrX, zrY) {\n var zrPainter = zr && zr.painter;\n if (container) {\n var zrViewportRoot = zrPainter && zrPainter.getViewportRoot();\n if (zrViewportRoot) {\n // Some APPs might use scale on body, so we support CSS transform here.\n transformLocalCoord(out, zrViewportRoot, container, zrX, zrY);\n }\n } else {\n out[0] = zrX;\n out[1] = zrY;\n // xy should be based on canvas root. But tooltipContent is\n // the sibling of canvas root. So padding of ec container\n // should be considered here.\n var viewportRootOffset = zrPainter && zrPainter.getViewportRootOffset();\n if (viewportRootOffset) {\n out[0] += viewportRootOffset.offsetLeft;\n out[1] += viewportRootOffset.offsetTop;\n }\n }\n out[2] = out[0] / zr.getWidth();\n out[3] = out[1] / zr.getHeight();\n}\nvar TooltipHTMLContent = /** @class */function () {\n function TooltipHTMLContent(api, opt) {\n this._show = false;\n this._styleCoord = [0, 0, 0, 0];\n this._enterable = true;\n this._alwaysShowContent = false;\n this._firstShow = true;\n this._longHide = true;\n if (env.wxa) {\n return null;\n }\n var el = document.createElement('div');\n // TODO: TYPE\n el.domBelongToZr = true;\n this.el = el;\n var zr = this._zr = api.getZr();\n var appendTo = opt.appendTo;\n var container = appendTo && (isString(appendTo) ? document.querySelector(appendTo) : isDom(appendTo) ? appendTo : isFunction(appendTo) && appendTo(api.getDom()));\n makeStyleCoord(this._styleCoord, zr, container, api.getWidth() / 2, api.getHeight() / 2);\n (container || api.getDom()).appendChild(el);\n this._api = api;\n this._container = container;\n // FIXME\n // Is it needed to trigger zr event manually if\n // the browser do not support `pointer-events: none`.\n var self = this;\n el.onmouseenter = function () {\n // clear the timeout in hideLater and keep showing tooltip\n if (self._enterable) {\n clearTimeout(self._hideTimeout);\n self._show = true;\n }\n self._inContent = true;\n };\n el.onmousemove = function (e) {\n e = e || window.event;\n if (!self._enterable) {\n // `pointer-events: none` is set to tooltip content div\n // if `enterable` is set as `false`, and `el.onmousemove`\n // can not be triggered. But in browser that do not\n // support `pointer-events`, we need to do this:\n // Try trigger zrender event to avoid mouse\n // in and out shape too frequently\n var handler = zr.handler;\n var zrViewportRoot = zr.painter.getViewportRoot();\n normalizeEvent(zrViewportRoot, e, true);\n handler.dispatch('mousemove', e);\n }\n };\n el.onmouseleave = function () {\n // set `_inContent` to `false` before `hideLater`\n self._inContent = false;\n if (self._enterable) {\n if (self._show) {\n self.hideLater(self._hideDelay);\n }\n }\n };\n }\n /**\n * Update when tooltip is rendered\n */\n TooltipHTMLContent.prototype.update = function (tooltipModel) {\n // FIXME\n // Move this logic to ec main?\n if (!this._container) {\n var container = this._api.getDom();\n var position = getComputedStyle(container, 'position');\n var domStyle = container.style;\n if (domStyle.position !== 'absolute' && position !== 'absolute') {\n domStyle.position = 'relative';\n }\n }\n // move tooltip if chart resized\n var alwaysShowContent = tooltipModel.get('alwaysShowContent');\n alwaysShowContent && this._moveIfResized();\n // update alwaysShowContent\n this._alwaysShowContent = alwaysShowContent;\n // update className\n this.el.className = tooltipModel.get('className') || '';\n // Hide the tooltip\n // PENDING\n // this.hide();\n };\n\n TooltipHTMLContent.prototype.show = function (tooltipModel, nearPointColor) {\n clearTimeout(this._hideTimeout);\n clearTimeout(this._longHideTimeout);\n var el = this.el;\n var style = el.style;\n var styleCoord = this._styleCoord;\n if (!el.innerHTML) {\n style.display = 'none';\n } else {\n style.cssText = gCssText + assembleCssText(tooltipModel, !this._firstShow, this._longHide)\n // initial transform\n + assembleTransform(styleCoord[0], styleCoord[1], true) + (\"border-color:\" + convertToColorString(nearPointColor) + \";\") + (tooltipModel.get('extraCssText') || '')\n // If mouse occasionally move over the tooltip, a mouseout event will be\n // triggered by canvas, and cause some unexpectable result like dragging\n // stop, \"unfocusAdjacency\". Here `pointer-events: none` is used to solve\n // it. Although it is not supported by IE8~IE10, fortunately it is a rare\n // scenario.\n + (\";pointer-events:\" + (this._enterable ? 'auto' : 'none'));\n }\n this._show = true;\n this._firstShow = false;\n this._longHide = false;\n };\n TooltipHTMLContent.prototype.setContent = function (content, markers, tooltipModel, borderColor, arrowPosition) {\n var el = this.el;\n if (content == null) {\n el.innerHTML = '';\n return;\n }\n var arrow = '';\n if (isString(arrowPosition) && tooltipModel.get('trigger') === 'item' && !shouldTooltipConfine(tooltipModel)) {\n arrow = assembleArrow(tooltipModel, borderColor, arrowPosition);\n }\n if (isString(content)) {\n el.innerHTML = content + arrow;\n } else if (content) {\n // Clear previous\n el.innerHTML = '';\n if (!isArray(content)) {\n content = [content];\n }\n for (var i = 0; i < content.length; i++) {\n if (isDom(content[i]) && content[i].parentNode !== el) {\n el.appendChild(content[i]);\n }\n }\n // no arrow if empty\n if (arrow && el.childNodes.length) {\n // no need to create a new parent element, but it's not supported by IE 10 and older.\n // const arrowEl = document.createRange().createContextualFragment(arrow);\n var arrowEl = document.createElement('div');\n arrowEl.innerHTML = arrow;\n el.appendChild(arrowEl);\n }\n }\n };\n TooltipHTMLContent.prototype.setEnterable = function (enterable) {\n this._enterable = enterable;\n };\n TooltipHTMLContent.prototype.getSize = function () {\n var el = this.el;\n return [el.offsetWidth, el.offsetHeight];\n };\n TooltipHTMLContent.prototype.moveTo = function (zrX, zrY) {\n var styleCoord = this._styleCoord;\n makeStyleCoord(styleCoord, this._zr, this._container, zrX, zrY);\n if (styleCoord[0] != null && styleCoord[1] != null) {\n var style_1 = this.el.style;\n var transforms = assembleTransform(styleCoord[0], styleCoord[1]);\n each(transforms, function (transform) {\n style_1[transform[0]] = transform[1];\n });\n }\n };\n /**\n * when `alwaysShowContent` is true,\n * move the tooltip after chart resized\n */\n TooltipHTMLContent.prototype._moveIfResized = function () {\n // The ratio of left to width\n var ratioX = this._styleCoord[2];\n // The ratio of top to height\n var ratioY = this._styleCoord[3];\n this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight());\n };\n TooltipHTMLContent.prototype.hide = function () {\n var _this = this;\n var style = this.el.style;\n style.visibility = 'hidden';\n style.opacity = '0';\n env.transform3dSupported && (style.willChange = '');\n this._show = false;\n this._longHideTimeout = setTimeout(function () {\n return _this._longHide = true;\n }, 500);\n };\n TooltipHTMLContent.prototype.hideLater = function (time) {\n if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) {\n if (time) {\n this._hideDelay = time;\n // Set show false to avoid invoke hideLater multiple times\n this._show = false;\n this._hideTimeout = setTimeout(bind(this.hide, this), time);\n } else {\n this.hide();\n }\n }\n };\n TooltipHTMLContent.prototype.isShow = function () {\n return this._show;\n };\n TooltipHTMLContent.prototype.dispose = function () {\n clearTimeout(this._hideTimeout);\n clearTimeout(this._longHideTimeout);\n var parentNode = this.el.parentNode;\n parentNode && parentNode.removeChild(this.el);\n this.el = this._container = null;\n };\n return TooltipHTMLContent;\n}();\nexport default TooltipHTMLContent;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ZRText from 'zrender/lib/graphic/Text.js';\nimport { getPaddingFromTooltipModel } from './tooltipMarkup.js';\nimport { throwError } from '../../util/log.js';\nvar TooltipRichContent = /** @class */function () {\n function TooltipRichContent(api) {\n this._show = false;\n this._styleCoord = [0, 0, 0, 0];\n this._alwaysShowContent = false;\n this._enterable = true;\n this._zr = api.getZr();\n makeStyleCoord(this._styleCoord, this._zr, api.getWidth() / 2, api.getHeight() / 2);\n }\n /**\n * Update when tooltip is rendered\n */\n TooltipRichContent.prototype.update = function (tooltipModel) {\n var alwaysShowContent = tooltipModel.get('alwaysShowContent');\n alwaysShowContent && this._moveIfResized();\n // update alwaysShowContent\n this._alwaysShowContent = alwaysShowContent;\n };\n TooltipRichContent.prototype.show = function () {\n if (this._hideTimeout) {\n clearTimeout(this._hideTimeout);\n }\n this.el.show();\n this._show = true;\n };\n /**\n * Set tooltip content\n */\n TooltipRichContent.prototype.setContent = function (content, markupStyleCreator, tooltipModel, borderColor, arrowPosition) {\n var _this = this;\n if (zrUtil.isObject(content)) {\n throwError(process.env.NODE_ENV !== 'production' ? 'Passing DOM nodes as content is not supported in richText tooltip!' : '');\n }\n if (this.el) {\n this._zr.remove(this.el);\n }\n var textStyleModel = tooltipModel.getModel('textStyle');\n this.el = new ZRText({\n style: {\n rich: markupStyleCreator.richTextStyles,\n text: content,\n lineHeight: 22,\n borderWidth: 1,\n borderColor: borderColor,\n textShadowColor: textStyleModel.get('textShadowColor'),\n fill: tooltipModel.get(['textStyle', 'color']),\n padding: getPaddingFromTooltipModel(tooltipModel, 'richText'),\n verticalAlign: 'top',\n align: 'left'\n },\n z: tooltipModel.get('z')\n });\n zrUtil.each(['backgroundColor', 'borderRadius', 'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'], function (propName) {\n _this.el.style[propName] = tooltipModel.get(propName);\n });\n zrUtil.each(['textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY'], function (propName) {\n _this.el.style[propName] = textStyleModel.get(propName) || 0;\n });\n this._zr.add(this.el);\n var self = this;\n this.el.on('mouseover', function () {\n // clear the timeout in hideLater and keep showing tooltip\n if (self._enterable) {\n clearTimeout(self._hideTimeout);\n self._show = true;\n }\n self._inContent = true;\n });\n this.el.on('mouseout', function () {\n if (self._enterable) {\n if (self._show) {\n self.hideLater(self._hideDelay);\n }\n }\n self._inContent = false;\n });\n };\n TooltipRichContent.prototype.setEnterable = function (enterable) {\n this._enterable = enterable;\n };\n TooltipRichContent.prototype.getSize = function () {\n var el = this.el;\n var bounding = this.el.getBoundingRect();\n // bounding rect does not include shadow. For renderMode richText,\n // if overflow, it will be cut. So calculate them accurately.\n var shadowOuterSize = calcShadowOuterSize(el.style);\n return [bounding.width + shadowOuterSize.left + shadowOuterSize.right, bounding.height + shadowOuterSize.top + shadowOuterSize.bottom];\n };\n TooltipRichContent.prototype.moveTo = function (x, y) {\n var el = this.el;\n if (el) {\n var styleCoord = this._styleCoord;\n makeStyleCoord(styleCoord, this._zr, x, y);\n x = styleCoord[0];\n y = styleCoord[1];\n var style = el.style;\n var borderWidth = mathMaxWith0(style.borderWidth || 0);\n var shadowOuterSize = calcShadowOuterSize(style);\n // rich text x, y do not include border.\n el.x = x + borderWidth + shadowOuterSize.left;\n el.y = y + borderWidth + shadowOuterSize.top;\n el.markRedraw();\n }\n };\n /**\n * when `alwaysShowContent` is true,\n * move the tooltip after chart resized\n */\n TooltipRichContent.prototype._moveIfResized = function () {\n // The ratio of left to width\n var ratioX = this._styleCoord[2];\n // The ratio of top to height\n var ratioY = this._styleCoord[3];\n this.moveTo(ratioX * this._zr.getWidth(), ratioY * this._zr.getHeight());\n };\n TooltipRichContent.prototype.hide = function () {\n if (this.el) {\n this.el.hide();\n }\n this._show = false;\n };\n TooltipRichContent.prototype.hideLater = function (time) {\n if (this._show && !(this._inContent && this._enterable) && !this._alwaysShowContent) {\n if (time) {\n this._hideDelay = time;\n // Set show false to avoid invoke hideLater multiple times\n this._show = false;\n this._hideTimeout = setTimeout(zrUtil.bind(this.hide, this), time);\n } else {\n this.hide();\n }\n }\n };\n TooltipRichContent.prototype.isShow = function () {\n return this._show;\n };\n TooltipRichContent.prototype.dispose = function () {\n this._zr.remove(this.el);\n };\n return TooltipRichContent;\n}();\nfunction mathMaxWith0(val) {\n return Math.max(0, val);\n}\nfunction calcShadowOuterSize(style) {\n var shadowBlur = mathMaxWith0(style.shadowBlur || 0);\n var shadowOffsetX = mathMaxWith0(style.shadowOffsetX || 0);\n var shadowOffsetY = mathMaxWith0(style.shadowOffsetY || 0);\n return {\n left: mathMaxWith0(shadowBlur - shadowOffsetX),\n right: mathMaxWith0(shadowBlur + shadowOffsetX),\n top: mathMaxWith0(shadowBlur - shadowOffsetY),\n bottom: mathMaxWith0(shadowBlur + shadowOffsetY)\n };\n}\nfunction makeStyleCoord(out, zr, zrX, zrY) {\n out[0] = zrX;\n out[1] = zrY;\n out[2] = out[0] / zr.getWidth();\n out[3] = out[1] / zr.getHeight();\n}\nexport default TooltipRichContent;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nimport { __extends } from \"tslib\";\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { bind, each, clone, trim, isString, isFunction, isArray, isObject, extend } from 'zrender/lib/core/util.js';\nimport env from 'zrender/lib/core/env.js';\nimport TooltipHTMLContent from './TooltipHTMLContent.js';\nimport TooltipRichContent from './TooltipRichContent.js';\nimport { convertToColorString, formatTpl } from '../../util/format.js';\nimport { parsePercent } from '../../util/number.js';\nimport { Rect } from '../../util/graphic.js';\nimport findPointFromSeries from '../axisPointer/findPointFromSeries.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport Model from '../../model/Model.js';\nimport * as globalListener from '../axisPointer/globalListener.js';\nimport * as axisHelper from '../../coord/axisHelper.js';\nimport * as axisPointerViewHelper from '../axisPointer/viewHelper.js';\nimport { getTooltipRenderMode, preParseFinder, queryReferringComponents } from '../../util/model.js';\nimport ComponentView from '../../view/Component.js';\nimport { format as timeFormat } from '../../util/time.js';\nimport { getECData } from '../../util/innerStore.js';\nimport { shouldTooltipConfine } from './helper.js';\nimport { normalizeTooltipFormatResult } from '../../model/mixin/dataFormat.js';\nimport { createTooltipMarkup, buildTooltipMarkup, TooltipMarkupStyleCreator } from './tooltipMarkup.js';\nimport { findEventDispatcher } from '../../util/event.js';\nimport { clear, createOrUpdate } from '../../util/throttle.js';\nvar proxyRect = new Rect({\n shape: {\n x: -1,\n y: -1,\n width: 2,\n height: 2\n }\n});\nvar TooltipView = /** @class */function (_super) {\n __extends(TooltipView, _super);\n function TooltipView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = TooltipView.type;\n return _this;\n }\n TooltipView.prototype.init = function (ecModel, api) {\n if (env.node || !api.getDom()) {\n return;\n }\n var tooltipModel = ecModel.getComponent('tooltip');\n var renderMode = this._renderMode = getTooltipRenderMode(tooltipModel.get('renderMode'));\n this._tooltipContent = renderMode === 'richText' ? new TooltipRichContent(api) : new TooltipHTMLContent(api, {\n appendTo: tooltipModel.get('appendToBody', true) ? 'body' : tooltipModel.get('appendTo', true)\n });\n };\n TooltipView.prototype.render = function (tooltipModel, ecModel, api) {\n if (env.node || !api.getDom()) {\n return;\n }\n // Reset\n this.group.removeAll();\n this._tooltipModel = tooltipModel;\n this._ecModel = ecModel;\n this._api = api;\n var tooltipContent = this._tooltipContent;\n tooltipContent.update(tooltipModel);\n tooltipContent.setEnterable(tooltipModel.get('enterable'));\n this._initGlobalListener();\n this._keepShow();\n // PENDING\n // `mousemove` event will be triggered very frequently when the mouse moves fast,\n // which causes that the `updatePosition` function was also called frequently.\n // In Chrome with devtools open and Firefox, tooltip looks laggy and shakes. See #14695 #16101\n // To avoid frequent triggering,\n // consider throttling it in 50ms when transition is enabled\n if (this._renderMode !== 'richText' && tooltipModel.get('transitionDuration')) {\n createOrUpdate(this, '_updatePosition', 50, 'fixRate');\n } else {\n clear(this, '_updatePosition');\n }\n };\n TooltipView.prototype._initGlobalListener = function () {\n var tooltipModel = this._tooltipModel;\n var triggerOn = tooltipModel.get('triggerOn');\n globalListener.register('itemTooltip', this._api, bind(function (currTrigger, e, dispatchAction) {\n // If 'none', it is not controlled by mouse totally.\n if (triggerOn !== 'none') {\n if (triggerOn.indexOf(currTrigger) >= 0) {\n this._tryShow(e, dispatchAction);\n } else if (currTrigger === 'leave') {\n this._hide(dispatchAction);\n }\n }\n }, this));\n };\n TooltipView.prototype._keepShow = function () {\n var tooltipModel = this._tooltipModel;\n var ecModel = this._ecModel;\n var api = this._api;\n var triggerOn = tooltipModel.get('triggerOn');\n // Try to keep the tooltip show when refreshing\n if (this._lastX != null && this._lastY != null\n // When user is willing to control tooltip totally using API,\n // self.manuallyShowTip({x, y}) might cause tooltip hide,\n // which is not expected.\n && triggerOn !== 'none' && triggerOn !== 'click') {\n var self_1 = this;\n clearTimeout(this._refreshUpdateTimeout);\n this._refreshUpdateTimeout = setTimeout(function () {\n // Show tip next tick after other charts are rendered\n // In case highlight action has wrong result\n // FIXME\n !api.isDisposed() && self_1.manuallyShowTip(tooltipModel, ecModel, api, {\n x: self_1._lastX,\n y: self_1._lastY,\n dataByCoordSys: self_1._lastDataByCoordSys\n });\n });\n }\n };\n /**\n * Show tip manually by\n * dispatchAction({\n * type: 'showTip',\n * x: 10,\n * y: 10\n * });\n * Or\n * dispatchAction({\n * type: 'showTip',\n * seriesIndex: 0,\n * dataIndex or dataIndexInside or name\n * });\n *\n * TODO Batch\n */\n TooltipView.prototype.manuallyShowTip = function (tooltipModel, ecModel, api, payload) {\n if (payload.from === this.uid || env.node || !api.getDom()) {\n return;\n }\n var dispatchAction = makeDispatchAction(payload, api);\n // Reset ticket\n this._ticket = '';\n // When triggered from axisPointer.\n var dataByCoordSys = payload.dataByCoordSys;\n var cmptRef = findComponentReference(payload, ecModel, api);\n if (cmptRef) {\n var rect = cmptRef.el.getBoundingRect().clone();\n rect.applyTransform(cmptRef.el.transform);\n this._tryShow({\n offsetX: rect.x + rect.width / 2,\n offsetY: rect.y + rect.height / 2,\n target: cmptRef.el,\n position: payload.position,\n // When manully trigger, the mouse is not on the el, so we'd better to\n // position tooltip on the bottom of the el and display arrow is possible.\n positionDefault: 'bottom'\n }, dispatchAction);\n } else if (payload.tooltip && payload.x != null && payload.y != null) {\n var el = proxyRect;\n el.x = payload.x;\n el.y = payload.y;\n el.update();\n getECData(el).tooltipConfig = {\n name: null,\n option: payload.tooltip\n };\n // Manually show tooltip while view is not using zrender elements.\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n target: el\n }, dispatchAction);\n } else if (dataByCoordSys) {\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n position: payload.position,\n dataByCoordSys: dataByCoordSys,\n tooltipOption: payload.tooltipOption\n }, dispatchAction);\n } else if (payload.seriesIndex != null) {\n if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {\n return;\n }\n var pointInfo = findPointFromSeries(payload, ecModel);\n var cx = pointInfo.point[0];\n var cy = pointInfo.point[1];\n if (cx != null && cy != null) {\n this._tryShow({\n offsetX: cx,\n offsetY: cy,\n target: pointInfo.el,\n position: payload.position,\n // When manully trigger, the mouse is not on the el, so we'd better to\n // position tooltip on the bottom of the el and display arrow is possible.\n positionDefault: 'bottom'\n }, dispatchAction);\n }\n } else if (payload.x != null && payload.y != null) {\n // FIXME\n // should wrap dispatchAction like `axisPointer/globalListener` ?\n api.dispatchAction({\n type: 'updateAxisPointer',\n x: payload.x,\n y: payload.y\n });\n this._tryShow({\n offsetX: payload.x,\n offsetY: payload.y,\n position: payload.position,\n target: api.getZr().findHover(payload.x, payload.y).target\n }, dispatchAction);\n }\n };\n TooltipView.prototype.manuallyHideTip = function (tooltipModel, ecModel, api, payload) {\n var tooltipContent = this._tooltipContent;\n if (this._tooltipModel) {\n tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));\n }\n this._lastX = this._lastY = this._lastDataByCoordSys = null;\n if (payload.from !== this.uid) {\n this._hide(makeDispatchAction(payload, api));\n }\n };\n // Be compatible with previous design, that is, when tooltip.type is 'axis' and\n // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer\n // and tooltip.\n TooltipView.prototype._manuallyAxisShowTip = function (tooltipModel, ecModel, api, payload) {\n var seriesIndex = payload.seriesIndex;\n var dataIndex = payload.dataIndex;\n // @ts-ignore\n var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {\n return;\n }\n var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n if (!seriesModel) {\n return;\n }\n var data = seriesModel.getData();\n var tooltipCascadedModel = buildTooltipModel([data.getItemModel(dataIndex), seriesModel, (seriesModel.coordinateSystem || {}).model], this._tooltipModel);\n if (tooltipCascadedModel.get('trigger') !== 'axis') {\n return;\n }\n api.dispatchAction({\n type: 'updateAxisPointer',\n seriesIndex: seriesIndex,\n dataIndex: dataIndex,\n position: payload.position\n });\n return true;\n };\n TooltipView.prototype._tryShow = function (e, dispatchAction) {\n var el = e.target;\n var tooltipModel = this._tooltipModel;\n if (!tooltipModel) {\n return;\n }\n // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed\n this._lastX = e.offsetX;\n this._lastY = e.offsetY;\n var dataByCoordSys = e.dataByCoordSys;\n if (dataByCoordSys && dataByCoordSys.length) {\n this._showAxisTooltip(dataByCoordSys, e);\n } else if (el) {\n var ecData = getECData(el);\n if (ecData.ssrType === 'legend') {\n // Don't trigger tooltip for legend tooltip item\n return;\n }\n this._lastDataByCoordSys = null;\n var seriesDispatcher_1;\n var cmptDispatcher_1;\n findEventDispatcher(el, function (target) {\n // Always show item tooltip if mouse is on the element with dataIndex\n if (getECData(target).dataIndex != null) {\n seriesDispatcher_1 = target;\n return true;\n }\n // Tooltip provided directly. Like legend.\n if (getECData(target).tooltipConfig != null) {\n cmptDispatcher_1 = target;\n return true;\n }\n }, true);\n if (seriesDispatcher_1) {\n this._showSeriesItemTooltip(e, seriesDispatcher_1, dispatchAction);\n } else if (cmptDispatcher_1) {\n this._showComponentItemTooltip(e, cmptDispatcher_1, dispatchAction);\n } else {\n this._hide(dispatchAction);\n }\n } else {\n this._lastDataByCoordSys = null;\n this._hide(dispatchAction);\n }\n };\n TooltipView.prototype._showOrMove = function (tooltipModel, cb) {\n // showDelay is used in this case: tooltip.enterable is set\n // as true. User intent to move mouse into tooltip and click\n // something. `showDelay` makes it easier to enter the content\n // but tooltip do not move immediately.\n var delay = tooltipModel.get('showDelay');\n cb = bind(cb, this);\n clearTimeout(this._showTimout);\n delay > 0 ? this._showTimout = setTimeout(cb, delay) : cb();\n };\n TooltipView.prototype._showAxisTooltip = function (dataByCoordSys, e) {\n var ecModel = this._ecModel;\n var globalTooltipModel = this._tooltipModel;\n var point = [e.offsetX, e.offsetY];\n var singleTooltipModel = buildTooltipModel([e.tooltipOption], globalTooltipModel);\n var renderMode = this._renderMode;\n var cbParamsList = [];\n var articleMarkup = createTooltipMarkup('section', {\n blocks: [],\n noHeader: true\n });\n // Only for legacy: `Serise['formatTooltip']` returns a string.\n var markupTextArrLegacy = [];\n var markupStyleCreator = new TooltipMarkupStyleCreator();\n each(dataByCoordSys, function (itemCoordSys) {\n each(itemCoordSys.dataByAxis, function (axisItem) {\n var axisModel = ecModel.getComponent(axisItem.axisDim + 'Axis', axisItem.axisIndex);\n var axisValue = axisItem.value;\n if (!axisModel || axisValue == null) {\n return;\n }\n var axisValueLabel = axisPointerViewHelper.getValueLabel(axisValue, axisModel.axis, ecModel, axisItem.seriesDataIndices, axisItem.valueLabelOpt);\n var axisSectionMarkup = createTooltipMarkup('section', {\n header: axisValueLabel,\n noHeader: !trim(axisValueLabel),\n sortBlocks: true,\n blocks: []\n });\n articleMarkup.blocks.push(axisSectionMarkup);\n each(axisItem.seriesDataIndices, function (idxItem) {\n var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n var dataIndex = idxItem.dataIndexInside;\n var cbParams = series.getDataParams(dataIndex);\n // Can't find data.\n if (cbParams.dataIndex < 0) {\n return;\n }\n cbParams.axisDim = axisItem.axisDim;\n cbParams.axisIndex = axisItem.axisIndex;\n cbParams.axisType = axisItem.axisType;\n cbParams.axisId = axisItem.axisId;\n cbParams.axisValue = axisHelper.getAxisRawValue(axisModel.axis, {\n value: axisValue\n });\n cbParams.axisValueLabel = axisValueLabel;\n // Pre-create marker style for makers. Users can assemble richText\n // text in `formatter` callback and use those markers style.\n cbParams.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(cbParams.color), renderMode);\n var seriesTooltipResult = normalizeTooltipFormatResult(series.formatTooltip(dataIndex, true, null));\n var frag = seriesTooltipResult.frag;\n if (frag) {\n var valueFormatter = buildTooltipModel([series], globalTooltipModel).get('valueFormatter');\n axisSectionMarkup.blocks.push(valueFormatter ? extend({\n valueFormatter: valueFormatter\n }, frag) : frag);\n }\n if (seriesTooltipResult.text) {\n markupTextArrLegacy.push(seriesTooltipResult.text);\n }\n cbParamsList.push(cbParams);\n });\n });\n });\n // In most cases, the second axis is displays upper on the first one.\n // So we reverse it to look better.\n articleMarkup.blocks.reverse();\n markupTextArrLegacy.reverse();\n var positionExpr = e.position;\n var orderMode = singleTooltipModel.get('order');\n var builtMarkupText = buildTooltipMarkup(articleMarkup, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), singleTooltipModel.get('textStyle'));\n builtMarkupText && markupTextArrLegacy.unshift(builtMarkupText);\n var blockBreak = renderMode === 'richText' ? '\\n\\n' : '
';\n var allMarkupText = markupTextArrLegacy.join(blockBreak);\n this._showOrMove(singleTooltipModel, function () {\n if (this._updateContentNotChangedOnAxis(dataByCoordSys, cbParamsList)) {\n this._updatePosition(singleTooltipModel, positionExpr, point[0], point[1], this._tooltipContent, cbParamsList);\n } else {\n this._showTooltipContent(singleTooltipModel, allMarkupText, cbParamsList, Math.random() + '', point[0], point[1], positionExpr, null, markupStyleCreator);\n }\n });\n // Do not trigger events here, because this branch only be entered\n // from dispatchAction.\n };\n\n TooltipView.prototype._showSeriesItemTooltip = function (e, dispatcher, dispatchAction) {\n var ecModel = this._ecModel;\n var ecData = getECData(dispatcher);\n // Use dataModel in element if possible\n // Used when mouseover on a element like markPoint or edge\n // In which case, the data is not main data in series.\n var seriesIndex = ecData.seriesIndex;\n var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n // For example, graph link.\n var dataModel = ecData.dataModel || seriesModel;\n var dataIndex = ecData.dataIndex;\n var dataType = ecData.dataType;\n var data = dataModel.getData(dataType);\n var renderMode = this._renderMode;\n var positionDefault = e.positionDefault;\n var tooltipModel = buildTooltipModel([data.getItemModel(dataIndex), dataModel, seriesModel && (seriesModel.coordinateSystem || {}).model], this._tooltipModel, positionDefault ? {\n position: positionDefault\n } : null);\n var tooltipTrigger = tooltipModel.get('trigger');\n if (tooltipTrigger != null && tooltipTrigger !== 'item') {\n return;\n }\n var params = dataModel.getDataParams(dataIndex, dataType);\n var markupStyleCreator = new TooltipMarkupStyleCreator();\n // Pre-create marker style for makers. Users can assemble richText\n // text in `formatter` callback and use those markers style.\n params.marker = markupStyleCreator.makeTooltipMarker('item', convertToColorString(params.color), renderMode);\n var seriesTooltipResult = normalizeTooltipFormatResult(dataModel.formatTooltip(dataIndex, false, dataType));\n var orderMode = tooltipModel.get('order');\n var valueFormatter = tooltipModel.get('valueFormatter');\n var frag = seriesTooltipResult.frag;\n var markupText = frag ? buildTooltipMarkup(valueFormatter ? extend({\n valueFormatter: valueFormatter\n }, frag) : frag, markupStyleCreator, renderMode, orderMode, ecModel.get('useUTC'), tooltipModel.get('textStyle')) : seriesTooltipResult.text;\n var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;\n this._showOrMove(tooltipModel, function () {\n this._showTooltipContent(tooltipModel, markupText, params, asyncTicket, e.offsetX, e.offsetY, e.position, e.target, markupStyleCreator);\n });\n // FIXME\n // duplicated showtip if manuallyShowTip is called from dispatchAction.\n dispatchAction({\n type: 'showTip',\n dataIndexInside: dataIndex,\n dataIndex: data.getRawIndex(dataIndex),\n seriesIndex: seriesIndex,\n from: this.uid\n });\n };\n TooltipView.prototype._showComponentItemTooltip = function (e, el, dispatchAction) {\n var ecData = getECData(el);\n var tooltipConfig = ecData.tooltipConfig;\n var tooltipOpt = tooltipConfig.option || {};\n if (isString(tooltipOpt)) {\n var content = tooltipOpt;\n tooltipOpt = {\n content: content,\n // Fixed formatter\n formatter: content\n };\n }\n var tooltipModelCascade = [tooltipOpt];\n var cmpt = this._ecModel.getComponent(ecData.componentMainType, ecData.componentIndex);\n if (cmpt) {\n tooltipModelCascade.push(cmpt);\n }\n // In most cases, component tooltip formatter has different params with series tooltip formatter,\n // so that they cannot share the same formatter. Since the global tooltip formatter is used for series\n // by convention, we do not use it as the default formatter for component.\n tooltipModelCascade.push({\n formatter: tooltipOpt.content\n });\n var positionDefault = e.positionDefault;\n var subTooltipModel = buildTooltipModel(tooltipModelCascade, this._tooltipModel, positionDefault ? {\n position: positionDefault\n } : null);\n var defaultHtml = subTooltipModel.get('content');\n var asyncTicket = Math.random() + '';\n // PENDING: this case do not support richText style yet.\n var markupStyleCreator = new TooltipMarkupStyleCreator();\n // Do not check whether `trigger` is 'none' here, because `trigger`\n // only works on coordinate system. In fact, we have not found case\n // that requires setting `trigger` nothing on component yet.\n this._showOrMove(subTooltipModel, function () {\n // Use formatterParams from element defined in component\n // Avoid users modify it.\n var formatterParams = clone(subTooltipModel.get('formatterParams') || {});\n this._showTooltipContent(subTooltipModel, defaultHtml, formatterParams, asyncTicket, e.offsetX, e.offsetY, e.position, el, markupStyleCreator);\n });\n // If not dispatch showTip, tip may be hide triggered by axis.\n dispatchAction({\n type: 'showTip',\n from: this.uid\n });\n };\n TooltipView.prototype._showTooltipContent = function (\n // Use Model insteadof TooltipModel because this model may be from series or other options.\n // Instead of top level tooltip.\n tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markupStyleCreator) {\n // Reset ticket\n this._ticket = '';\n if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {\n return;\n }\n var tooltipContent = this._tooltipContent;\n tooltipContent.setEnterable(tooltipModel.get('enterable'));\n var formatter = tooltipModel.get('formatter');\n positionExpr = positionExpr || tooltipModel.get('position');\n var html = defaultHtml;\n var nearPoint = this._getNearestPoint([x, y], params, tooltipModel.get('trigger'), tooltipModel.get('borderColor'));\n var nearPointColor = nearPoint.color;\n if (formatter) {\n if (isString(formatter)) {\n var useUTC = tooltipModel.ecModel.get('useUTC');\n var params0 = isArray(params) ? params[0] : params;\n var isTimeAxis = params0 && params0.axisType && params0.axisType.indexOf('time') >= 0;\n html = formatter;\n if (isTimeAxis) {\n html = timeFormat(params0.axisValue, html, useUTC);\n }\n html = formatTpl(html, params, true);\n } else if (isFunction(formatter)) {\n var callback = bind(function (cbTicket, html) {\n if (cbTicket === this._ticket) {\n tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);\n this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);\n }\n }, this);\n this._ticket = asyncTicket;\n html = formatter(params, asyncTicket, callback);\n } else {\n html = formatter;\n }\n }\n tooltipContent.setContent(html, markupStyleCreator, tooltipModel, nearPointColor, positionExpr);\n tooltipContent.show(tooltipModel, nearPointColor);\n this._updatePosition(tooltipModel, positionExpr, x, y, tooltipContent, params, el);\n };\n TooltipView.prototype._getNearestPoint = function (point, tooltipDataParams, trigger, borderColor) {\n if (trigger === 'axis' || isArray(tooltipDataParams)) {\n return {\n color: borderColor || (this._renderMode === 'html' ? '#fff' : 'none')\n };\n }\n if (!isArray(tooltipDataParams)) {\n return {\n color: borderColor || tooltipDataParams.color || tooltipDataParams.borderColor\n };\n }\n };\n TooltipView.prototype._updatePosition = function (tooltipModel, positionExpr, x,\n // Mouse x\n y,\n // Mouse y\n content, params, el) {\n var viewWidth = this._api.getWidth();\n var viewHeight = this._api.getHeight();\n positionExpr = positionExpr || tooltipModel.get('position');\n var contentSize = content.getSize();\n var align = tooltipModel.get('align');\n var vAlign = tooltipModel.get('verticalAlign');\n var rect = el && el.getBoundingRect().clone();\n el && rect.applyTransform(el.transform);\n if (isFunction(positionExpr)) {\n // Callback of position can be an array or a string specify the position\n positionExpr = positionExpr([x, y], params, content.el, rect, {\n viewSize: [viewWidth, viewHeight],\n contentSize: contentSize.slice()\n });\n }\n if (isArray(positionExpr)) {\n x = parsePercent(positionExpr[0], viewWidth);\n y = parsePercent(positionExpr[1], viewHeight);\n } else if (isObject(positionExpr)) {\n var boxLayoutPosition = positionExpr;\n boxLayoutPosition.width = contentSize[0];\n boxLayoutPosition.height = contentSize[1];\n var layoutRect = getLayoutRect(boxLayoutPosition, {\n width: viewWidth,\n height: viewHeight\n });\n x = layoutRect.x;\n y = layoutRect.y;\n align = null;\n // When positionExpr is left/top/right/bottom,\n // align and verticalAlign will not work.\n vAlign = null;\n }\n // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element\n else if (isString(positionExpr) && el) {\n var pos = calcTooltipPosition(positionExpr, rect, contentSize, tooltipModel.get('borderWidth'));\n x = pos[0];\n y = pos[1];\n } else {\n var pos = refixTooltipPosition(x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20);\n x = pos[0];\n y = pos[1];\n }\n align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);\n vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);\n if (shouldTooltipConfine(tooltipModel)) {\n var pos = confineTooltipPosition(x, y, content, viewWidth, viewHeight);\n x = pos[0];\n y = pos[1];\n }\n content.moveTo(x, y);\n };\n // FIXME\n // Should we remove this but leave this to user?\n TooltipView.prototype._updateContentNotChangedOnAxis = function (dataByCoordSys, cbParamsList) {\n var lastCoordSys = this._lastDataByCoordSys;\n var lastCbParamsList = this._cbParamsList;\n var contentNotChanged = !!lastCoordSys && lastCoordSys.length === dataByCoordSys.length;\n contentNotChanged && each(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {\n var lastDataByAxis = lastItemCoordSys.dataByAxis || [];\n var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};\n var thisDataByAxis = thisItemCoordSys.dataByAxis || [];\n contentNotChanged = contentNotChanged && lastDataByAxis.length === thisDataByAxis.length;\n contentNotChanged && each(lastDataByAxis, function (lastItem, indexAxis) {\n var thisItem = thisDataByAxis[indexAxis] || {};\n var lastIndices = lastItem.seriesDataIndices || [];\n var newIndices = thisItem.seriesDataIndices || [];\n contentNotChanged = contentNotChanged && lastItem.value === thisItem.value && lastItem.axisType === thisItem.axisType && lastItem.axisId === thisItem.axisId && lastIndices.length === newIndices.length;\n contentNotChanged && each(lastIndices, function (lastIdxItem, j) {\n var newIdxItem = newIndices[j];\n contentNotChanged = contentNotChanged && lastIdxItem.seriesIndex === newIdxItem.seriesIndex && lastIdxItem.dataIndex === newIdxItem.dataIndex;\n });\n // check is cbParams data value changed\n lastCbParamsList && each(lastItem.seriesDataIndices, function (idxItem) {\n var seriesIdx = idxItem.seriesIndex;\n var cbParams = cbParamsList[seriesIdx];\n var lastCbParams = lastCbParamsList[seriesIdx];\n if (cbParams && lastCbParams && lastCbParams.data !== cbParams.data) {\n contentNotChanged = false;\n }\n });\n });\n });\n this._lastDataByCoordSys = dataByCoordSys;\n this._cbParamsList = cbParamsList;\n return !!contentNotChanged;\n };\n TooltipView.prototype._hide = function (dispatchAction) {\n // Do not directly hideLater here, because this behavior may be prevented\n // in dispatchAction when showTip is dispatched.\n // FIXME\n // duplicated hideTip if manuallyHideTip is called from dispatchAction.\n this._lastDataByCoordSys = null;\n dispatchAction({\n type: 'hideTip',\n from: this.uid\n });\n };\n TooltipView.prototype.dispose = function (ecModel, api) {\n if (env.node || !api.getDom()) {\n return;\n }\n clear(this, '_updatePosition');\n this._tooltipContent.dispose();\n globalListener.unregister('itemTooltip', api);\n };\n TooltipView.type = 'tooltip';\n return TooltipView;\n}(ComponentView);\n/**\n * From top to bottom. (the last one should be globalTooltipModel);\n */\nfunction buildTooltipModel(modelCascade, globalTooltipModel, defaultTooltipOption) {\n // Last is always tooltip model.\n var ecModel = globalTooltipModel.ecModel;\n var resultModel;\n if (defaultTooltipOption) {\n resultModel = new Model(defaultTooltipOption, ecModel, ecModel);\n resultModel = new Model(globalTooltipModel.option, resultModel, ecModel);\n } else {\n resultModel = globalTooltipModel;\n }\n for (var i = modelCascade.length - 1; i >= 0; i--) {\n var tooltipOpt = modelCascade[i];\n if (tooltipOpt) {\n if (tooltipOpt instanceof Model) {\n tooltipOpt = tooltipOpt.get('tooltip', true);\n }\n // In each data item tooltip can be simply write:\n // {\n // value: 10,\n // tooltip: 'Something you need to know'\n // }\n if (isString(tooltipOpt)) {\n tooltipOpt = {\n formatter: tooltipOpt\n };\n }\n if (tooltipOpt) {\n resultModel = new Model(tooltipOpt, resultModel, ecModel);\n }\n }\n }\n return resultModel;\n}\nfunction makeDispatchAction(payload, api) {\n return payload.dispatchAction || bind(api.dispatchAction, api);\n}\nfunction refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {\n var size = content.getSize();\n var width = size[0];\n var height = size[1];\n if (gapH != null) {\n // Add extra 2 pixels for this case:\n // At present the \"values\" in default tooltip are using CSS `float: right`.\n // When the right edge of the tooltip box is on the right side of the\n // viewport, the `float` layout might push the \"values\" to the second line.\n if (x + width + gapH + 2 > viewWidth) {\n x -= width + gapH;\n } else {\n x += gapH;\n }\n }\n if (gapV != null) {\n if (y + height + gapV > viewHeight) {\n y -= height + gapV;\n } else {\n y += gapV;\n }\n }\n return [x, y];\n}\nfunction confineTooltipPosition(x, y, content, viewWidth, viewHeight) {\n var size = content.getSize();\n var width = size[0];\n var height = size[1];\n x = Math.min(x + width, viewWidth) - width;\n y = Math.min(y + height, viewHeight) - height;\n x = Math.max(x, 0);\n y = Math.max(y, 0);\n return [x, y];\n}\nfunction calcTooltipPosition(position, rect, contentSize, borderWidth) {\n var domWidth = contentSize[0];\n var domHeight = contentSize[1];\n var offset = Math.ceil(Math.SQRT2 * borderWidth) + 8;\n var x = 0;\n var y = 0;\n var rectWidth = rect.width;\n var rectHeight = rect.height;\n switch (position) {\n case 'inside':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n break;\n case 'top':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y - domHeight - offset;\n break;\n case 'bottom':\n x = rect.x + rectWidth / 2 - domWidth / 2;\n y = rect.y + rectHeight + offset;\n break;\n case 'left':\n x = rect.x - domWidth - offset;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n break;\n case 'right':\n x = rect.x + rectWidth + offset;\n y = rect.y + rectHeight / 2 - domHeight / 2;\n }\n return [x, y];\n}\nfunction isCenterAlign(align) {\n return align === 'center' || align === 'middle';\n}\n/**\n * Find target component by payload like:\n * ```js\n * { legendId: 'some_id', name: 'xxx' }\n * { toolboxIndex: 1, name: 'xxx' }\n * { geoName: 'some_name', name: 'xxx' }\n * ```\n * PENDING: at present only\n *\n * If not found, return null/undefined.\n */\nfunction findComponentReference(payload, ecModel, api) {\n var queryOptionMap = preParseFinder(payload).queryOptionMap;\n var componentMainType = queryOptionMap.keys()[0];\n if (!componentMainType || componentMainType === 'series') {\n return;\n }\n var queryResult = queryReferringComponents(ecModel, componentMainType, queryOptionMap.get(componentMainType), {\n useDefault: false,\n enableAll: false,\n enableNone: false\n });\n var model = queryResult.models[0];\n if (!model) {\n return;\n }\n var view = api.getViewOfComponentModel(model);\n var el;\n view.group.traverse(function (subEl) {\n var tooltipConfig = getECData(subEl).tooltipConfig;\n if (tooltipConfig && tooltipConfig.name === payload.name) {\n el = subEl;\n return true; // stop\n }\n });\n\n if (el) {\n return {\n componentMainType: componentMainType,\n componentIndex: model.componentIndex,\n el: el\n };\n }\n}\nexport default TooltipView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { install as installAxisPointer } from '../axisPointer/install.js';\nimport { use } from '../../extension.js';\nimport TooltipModel from './TooltipModel.js';\nimport TooltipView from './TooltipView.js';\nimport { noop } from 'zrender/lib/core/util.js';\nexport function install(registers) {\n use(installAxisPointer);\n registers.registerComponentModel(TooltipModel);\n registers.registerComponentView(TooltipView);\n /**\n * @action\n * @property {string} type\n * @property {number} seriesIndex\n * @property {number} dataIndex\n * @property {number} [x]\n * @property {number} [y]\n */\n registers.registerAction({\n type: 'showTip',\n event: 'showTip',\n update: 'tooltip:manuallyShowTip'\n }, noop);\n registers.registerAction({\n type: 'hideTip',\n event: 'hideTip',\n update: 'tooltip:manuallyHideTip'\n }, noop);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport Model from '../../model/Model.js';\nimport { isNameSpecified } from '../../util/model.js';\nimport ComponentModel from '../../model/Component.js';\nvar getDefaultSelectorOptions = function (ecModel, type) {\n if (type === 'all') {\n return {\n type: 'all',\n title: ecModel.getLocaleModel().get(['legend', 'selector', 'all'])\n };\n } else if (type === 'inverse') {\n return {\n type: 'inverse',\n title: ecModel.getLocaleModel().get(['legend', 'selector', 'inverse'])\n };\n }\n};\nvar LegendModel = /** @class */function (_super) {\n __extends(LegendModel, _super);\n function LegendModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = LegendModel.type;\n _this.layoutMode = {\n type: 'box',\n // legend.width/height are maxWidth/maxHeight actually,\n // whereas real width/height is calculated by its content.\n // (Setting {left: 10, right: 10} does not make sense).\n // So consider the case:\n // `setOption({legend: {left: 10});`\n // then `setOption({legend: {right: 10});`\n // The previous `left` should be cleared by setting `ignoreSize`.\n ignoreSize: true\n };\n return _this;\n }\n LegendModel.prototype.init = function (option, parentModel, ecModel) {\n this.mergeDefaultAndTheme(option, ecModel);\n option.selected = option.selected || {};\n this._updateSelector(option);\n };\n LegendModel.prototype.mergeOption = function (option, ecModel) {\n _super.prototype.mergeOption.call(this, option, ecModel);\n this._updateSelector(option);\n };\n LegendModel.prototype._updateSelector = function (option) {\n var selector = option.selector;\n var ecModel = this.ecModel;\n if (selector === true) {\n selector = option.selector = ['all', 'inverse'];\n }\n if (zrUtil.isArray(selector)) {\n zrUtil.each(selector, function (item, index) {\n zrUtil.isString(item) && (item = {\n type: item\n });\n selector[index] = zrUtil.merge(item, getDefaultSelectorOptions(ecModel, item.type));\n });\n }\n };\n LegendModel.prototype.optionUpdated = function () {\n this._updateData(this.ecModel);\n var legendData = this._data;\n // If selectedMode is single, try to select one\n if (legendData[0] && this.get('selectedMode') === 'single') {\n var hasSelected = false;\n // If has any selected in option.selected\n for (var i = 0; i < legendData.length; i++) {\n var name_1 = legendData[i].get('name');\n if (this.isSelected(name_1)) {\n // Force to unselect others\n this.select(name_1);\n hasSelected = true;\n break;\n }\n }\n // Try select the first if selectedMode is single\n !hasSelected && this.select(legendData[0].get('name'));\n }\n };\n LegendModel.prototype._updateData = function (ecModel) {\n var potentialData = [];\n var availableNames = [];\n ecModel.eachRawSeries(function (seriesModel) {\n var seriesName = seriesModel.name;\n availableNames.push(seriesName);\n var isPotential;\n if (seriesModel.legendVisualProvider) {\n var provider = seriesModel.legendVisualProvider;\n var names = provider.getAllNames();\n if (!ecModel.isSeriesFiltered(seriesModel)) {\n availableNames = availableNames.concat(names);\n }\n if (names.length) {\n potentialData = potentialData.concat(names);\n } else {\n isPotential = true;\n }\n } else {\n isPotential = true;\n }\n if (isPotential && isNameSpecified(seriesModel)) {\n potentialData.push(seriesModel.name);\n }\n });\n /**\n * @type {Array.}\n * @private\n */\n this._availableNames = availableNames;\n // If legend.data is not specified in option, use availableNames as data,\n // which is convenient for user preparing option.\n var rawData = this.get('data') || potentialData;\n var legendNameMap = zrUtil.createHashMap();\n var legendData = zrUtil.map(rawData, function (dataItem) {\n // Can be string or number\n if (zrUtil.isString(dataItem) || zrUtil.isNumber(dataItem)) {\n dataItem = {\n name: dataItem\n };\n }\n if (legendNameMap.get(dataItem.name)) {\n // remove legend name duplicate\n return null;\n }\n legendNameMap.set(dataItem.name, true);\n return new Model(dataItem, this, this.ecModel);\n }, this);\n /**\n * @type {Array.}\n * @private\n */\n this._data = zrUtil.filter(legendData, function (item) {\n return !!item;\n });\n };\n LegendModel.prototype.getData = function () {\n return this._data;\n };\n LegendModel.prototype.select = function (name) {\n var selected = this.option.selected;\n var selectedMode = this.get('selectedMode');\n if (selectedMode === 'single') {\n var data = this._data;\n zrUtil.each(data, function (dataItem) {\n selected[dataItem.get('name')] = false;\n });\n }\n selected[name] = true;\n };\n LegendModel.prototype.unSelect = function (name) {\n if (this.get('selectedMode') !== 'single') {\n this.option.selected[name] = false;\n }\n };\n LegendModel.prototype.toggleSelected = function (name) {\n var selected = this.option.selected;\n // Default is true\n if (!selected.hasOwnProperty(name)) {\n selected[name] = true;\n }\n this[selected[name] ? 'unSelect' : 'select'](name);\n };\n LegendModel.prototype.allSelect = function () {\n var data = this._data;\n var selected = this.option.selected;\n zrUtil.each(data, function (dataItem) {\n selected[dataItem.get('name', true)] = true;\n });\n };\n LegendModel.prototype.inverseSelect = function () {\n var data = this._data;\n var selected = this.option.selected;\n zrUtil.each(data, function (dataItem) {\n var name = dataItem.get('name', true);\n // Initially, default value is true\n if (!selected.hasOwnProperty(name)) {\n selected[name] = true;\n }\n selected[name] = !selected[name];\n });\n };\n LegendModel.prototype.isSelected = function (name) {\n var selected = this.option.selected;\n return !(selected.hasOwnProperty(name) && !selected[name]) && zrUtil.indexOf(this._availableNames, name) >= 0;\n };\n LegendModel.prototype.getOrient = function () {\n return this.get('orient') === 'vertical' ? {\n index: 1,\n name: 'vertical'\n } : {\n index: 0,\n name: 'horizontal'\n };\n };\n LegendModel.type = 'legend.plain';\n LegendModel.dependencies = ['series'];\n LegendModel.defaultOption = {\n // zlevel: 0,\n z: 4,\n show: true,\n orient: 'horizontal',\n left: 'center',\n // right: 'center',\n top: 0,\n // bottom: null,\n align: 'auto',\n backgroundColor: 'rgba(0,0,0,0)',\n borderColor: '#ccc',\n borderRadius: 0,\n borderWidth: 0,\n padding: 5,\n itemGap: 10,\n itemWidth: 25,\n itemHeight: 14,\n symbolRotate: 'inherit',\n symbolKeepAspect: true,\n inactiveColor: '#ccc',\n inactiveBorderColor: '#ccc',\n inactiveBorderWidth: 'auto',\n itemStyle: {\n color: 'inherit',\n opacity: 'inherit',\n borderColor: 'inherit',\n borderWidth: 'auto',\n borderCap: 'inherit',\n borderJoin: 'inherit',\n borderDashOffset: 'inherit',\n borderMiterLimit: 'inherit'\n },\n lineStyle: {\n width: 'auto',\n color: 'inherit',\n inactiveColor: '#ccc',\n inactiveWidth: 2,\n opacity: 'inherit',\n type: 'inherit',\n cap: 'inherit',\n join: 'inherit',\n dashOffset: 'inherit',\n miterLimit: 'inherit'\n },\n textStyle: {\n color: '#333'\n },\n selectedMode: true,\n selector: false,\n selectorLabel: {\n show: true,\n borderRadius: 10,\n padding: [3, 5, 3, 5],\n fontSize: 12,\n fontFamily: 'sans-serif',\n color: '#666',\n borderWidth: 1,\n borderColor: '#666'\n },\n emphasis: {\n selectorLabel: {\n show: true,\n color: '#eee',\n backgroundColor: '#666'\n }\n },\n selectorPosition: 'auto',\n selectorItemGap: 7,\n selectorButtonGap: 10,\n tooltip: {\n show: false\n }\n };\n return LegendModel;\n}(ComponentModel);\nexport default LegendModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport { getLayoutRect, box as layoutBox, positionElement } from '../../util/layout.js';\nimport * as formatUtil from '../../util/format.js';\nimport * as graphic from '../../util/graphic.js';\n/**\n * Layout list like component.\n * It will box layout each items in group of component and then position the whole group in the viewport\n * @param {module:zrender/group/Group} group\n * @param {module:echarts/model/Component} componentModel\n * @param {module:echarts/ExtensionAPI}\n */\nexport function layout(group, componentModel, api) {\n var boxLayoutParams = componentModel.getBoxLayoutParams();\n var padding = componentModel.get('padding');\n var viewportSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var rect = getLayoutRect(boxLayoutParams, viewportSize, padding);\n layoutBox(componentModel.get('orient'), group, componentModel.get('itemGap'), rect.width, rect.height);\n positionElement(group, boxLayoutParams, viewportSize, padding);\n}\nexport function makeBackground(rect, componentModel) {\n var padding = formatUtil.normalizeCssArray(componentModel.get('padding'));\n var style = componentModel.getItemStyle(['color', 'opacity']);\n style.fill = componentModel.get('backgroundColor');\n rect = new graphic.Rect({\n shape: {\n x: rect.x - padding[3],\n y: rect.y - padding[0],\n width: rect.width + padding[1] + padding[3],\n height: rect.height + padding[0] + padding[2],\n r: componentModel.get('borderRadius')\n },\n style: style,\n silent: true,\n z2: -1\n });\n // FIXME\n // `subPixelOptimizeRect` may bring some gap between edge of viewpart\n // and background rect when setting like `left: 0`, `top: 0`.\n // graphic.subPixelOptimizeRect(rect);\n return rect;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { parse, stringify } from 'zrender/lib/tool/color.js';\nimport * as graphic from '../../util/graphic.js';\nimport { enableHoverEmphasis } from '../../util/states.js';\nimport { setLabelStyle, createTextStyle } from '../../label/labelStyle.js';\nimport { makeBackground } from '../helper/listComponent.js';\nimport * as layoutUtil from '../../util/layout.js';\nimport ComponentView from '../../view/Component.js';\nimport { createSymbol } from '../../util/symbol.js';\nimport { createOrUpdatePatternFromDecal } from '../../util/decal.js';\nimport { getECData } from '../../util/innerStore.js';\nvar curry = zrUtil.curry;\nvar each = zrUtil.each;\nvar Group = graphic.Group;\nvar LegendView = /** @class */function (_super) {\n __extends(LegendView, _super);\n function LegendView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = LegendView.type;\n _this.newlineDisabled = false;\n return _this;\n }\n LegendView.prototype.init = function () {\n this.group.add(this._contentGroup = new Group());\n this.group.add(this._selectorGroup = new Group());\n this._isFirstRender = true;\n };\n /**\n * @protected\n */\n LegendView.prototype.getContentGroup = function () {\n return this._contentGroup;\n };\n /**\n * @protected\n */\n LegendView.prototype.getSelectorGroup = function () {\n return this._selectorGroup;\n };\n /**\n * @override\n */\n LegendView.prototype.render = function (legendModel, ecModel, api) {\n var isFirstRender = this._isFirstRender;\n this._isFirstRender = false;\n this.resetInner();\n if (!legendModel.get('show', true)) {\n return;\n }\n var itemAlign = legendModel.get('align');\n var orient = legendModel.get('orient');\n if (!itemAlign || itemAlign === 'auto') {\n itemAlign = legendModel.get('left') === 'right' && orient === 'vertical' ? 'right' : 'left';\n }\n // selector has been normalized to an array in model\n var selector = legendModel.get('selector', true);\n var selectorPosition = legendModel.get('selectorPosition', true);\n if (selector && (!selectorPosition || selectorPosition === 'auto')) {\n selectorPosition = orient === 'horizontal' ? 'end' : 'start';\n }\n this.renderInner(itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition);\n // Perform layout.\n var positionInfo = legendModel.getBoxLayoutParams();\n var viewportSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n var padding = legendModel.get('padding');\n var maxSize = layoutUtil.getLayoutRect(positionInfo, viewportSize, padding);\n var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition);\n // Place mainGroup, based on the calculated `mainRect`.\n var layoutRect = layoutUtil.getLayoutRect(zrUtil.defaults({\n width: mainRect.width,\n height: mainRect.height\n }, positionInfo), viewportSize, padding);\n this.group.x = layoutRect.x - mainRect.x;\n this.group.y = layoutRect.y - mainRect.y;\n this.group.markRedraw();\n // Render background after group is layout.\n this.group.add(this._backgroundEl = makeBackground(mainRect, legendModel));\n };\n LegendView.prototype.resetInner = function () {\n this.getContentGroup().removeAll();\n this._backgroundEl && this.group.remove(this._backgroundEl);\n this.getSelectorGroup().removeAll();\n };\n LegendView.prototype.renderInner = function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) {\n var contentGroup = this.getContentGroup();\n var legendDrawnMap = zrUtil.createHashMap();\n var selectMode = legendModel.get('selectedMode');\n var excludeSeriesId = [];\n ecModel.eachRawSeries(function (seriesModel) {\n !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id);\n });\n each(legendModel.getData(), function (legendItemModel, dataIndex) {\n var name = legendItemModel.get('name');\n // Use empty string or \\n as a newline string\n if (!this.newlineDisabled && (name === '' || name === '\\n')) {\n var g = new Group();\n // @ts-ignore\n g.newline = true;\n contentGroup.add(g);\n return;\n }\n // Representitive series.\n var seriesModel = ecModel.getSeriesByName(name)[0];\n if (legendDrawnMap.get(name)) {\n // Have been drawn\n return;\n }\n // Legend to control series.\n if (seriesModel) {\n var data = seriesModel.getData();\n var lineVisualStyle = data.getVisual('legendLineStyle') || {};\n var legendIcon = data.getVisual('legendIcon');\n /**\n * `data.getVisual('style')` may be the color from the register\n * in series. For example, for line series,\n */\n var style = data.getVisual('style');\n var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, style, legendIcon, selectMode, api);\n itemGroup.on('click', curry(dispatchSelectAction, name, null, api, excludeSeriesId)).on('mouseover', curry(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId)).on('mouseout', curry(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId));\n if (ecModel.ssr) {\n itemGroup.eachChild(function (child) {\n var ecData = getECData(child);\n ecData.seriesIndex = seriesModel.seriesIndex;\n ecData.dataIndex = dataIndex;\n ecData.ssrType = 'legend';\n });\n }\n legendDrawnMap.set(name, true);\n } else {\n // Legend to control data. In pie and funnel.\n ecModel.eachRawSeries(function (seriesModel) {\n // In case multiple series has same data name\n if (legendDrawnMap.get(name)) {\n return;\n }\n if (seriesModel.legendVisualProvider) {\n var provider = seriesModel.legendVisualProvider;\n if (!provider.containName(name)) {\n return;\n }\n var idx = provider.indexOfName(name);\n var style = provider.getItemVisual(idx, 'style');\n var legendIcon = provider.getItemVisual(idx, 'legendIcon');\n var colorArr = parse(style.fill);\n // Color may be set to transparent in visualMap when data is out of range.\n // Do not show nothing.\n if (colorArr && colorArr[3] === 0) {\n colorArr[3] = 0.2;\n // TODO color is set to 0, 0, 0, 0. Should show correct RGBA\n style = zrUtil.extend(zrUtil.extend({}, style), {\n fill: stringify(colorArr, 'rgba')\n });\n }\n var itemGroup = this._createItem(seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, {}, style, legendIcon, selectMode, api);\n // FIXME: consider different series has items with the same name.\n itemGroup.on('click', curry(dispatchSelectAction, null, name, api, excludeSeriesId))\n // Should not specify the series name, consider legend controls\n // more than one pie series.\n .on('mouseover', curry(dispatchHighlightAction, null, name, api, excludeSeriesId)).on('mouseout', curry(dispatchDownplayAction, null, name, api, excludeSeriesId));\n if (ecModel.ssr) {\n itemGroup.eachChild(function (child) {\n var ecData = getECData(child);\n ecData.seriesIndex = seriesModel.seriesIndex;\n ecData.dataIndex = dataIndex;\n ecData.ssrType = 'legend';\n });\n }\n legendDrawnMap.set(name, true);\n }\n }, this);\n }\n if (process.env.NODE_ENV !== 'production') {\n if (!legendDrawnMap.get(name)) {\n console.warn(name + ' series not exists. Legend data should be same with series name or data name.');\n }\n }\n }, this);\n if (selector) {\n this._createSelector(selector, legendModel, api, orient, selectorPosition);\n }\n };\n LegendView.prototype._createSelector = function (selector, legendModel, api, orient, selectorPosition) {\n var selectorGroup = this.getSelectorGroup();\n each(selector, function createSelectorButton(selectorItem) {\n var type = selectorItem.type;\n var labelText = new graphic.Text({\n style: {\n x: 0,\n y: 0,\n align: 'center',\n verticalAlign: 'middle'\n },\n onclick: function () {\n api.dispatchAction({\n type: type === 'all' ? 'legendAllSelect' : 'legendInverseSelect'\n });\n }\n });\n selectorGroup.add(labelText);\n var labelModel = legendModel.getModel('selectorLabel');\n var emphasisLabelModel = legendModel.getModel(['emphasis', 'selectorLabel']);\n setLabelStyle(labelText, {\n normal: labelModel,\n emphasis: emphasisLabelModel\n }, {\n defaultText: selectorItem.title\n });\n enableHoverEmphasis(labelText);\n });\n };\n LegendView.prototype._createItem = function (seriesModel, name, dataIndex, legendItemModel, legendModel, itemAlign, lineVisualStyle, itemVisualStyle, legendIcon, selectMode, api) {\n var drawType = seriesModel.visualDrawType;\n var itemWidth = legendModel.get('itemWidth');\n var itemHeight = legendModel.get('itemHeight');\n var isSelected = legendModel.isSelected(name);\n var iconRotate = legendItemModel.get('symbolRotate');\n var symbolKeepAspect = legendItemModel.get('symbolKeepAspect');\n var legendIconType = legendItemModel.get('icon');\n legendIcon = legendIconType || legendIcon || 'roundRect';\n var style = getLegendStyle(legendIcon, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api);\n var itemGroup = new Group();\n var textStyleModel = legendItemModel.getModel('textStyle');\n if (zrUtil.isFunction(seriesModel.getLegendIcon) && (!legendIconType || legendIconType === 'inherit')) {\n // Series has specific way to define legend icon\n itemGroup.add(seriesModel.getLegendIcon({\n itemWidth: itemWidth,\n itemHeight: itemHeight,\n icon: legendIcon,\n iconRotate: iconRotate,\n itemStyle: style.itemStyle,\n lineStyle: style.lineStyle,\n symbolKeepAspect: symbolKeepAspect\n }));\n } else {\n // Use default legend icon policy for most series\n var rotate = legendIconType === 'inherit' && seriesModel.getData().getVisual('symbol') ? iconRotate === 'inherit' ? seriesModel.getData().getVisual('symbolRotate') : iconRotate : 0; // No rotation for no icon\n itemGroup.add(getDefaultLegendIcon({\n itemWidth: itemWidth,\n itemHeight: itemHeight,\n icon: legendIcon,\n iconRotate: rotate,\n itemStyle: style.itemStyle,\n lineStyle: style.lineStyle,\n symbolKeepAspect: symbolKeepAspect\n }));\n }\n var textX = itemAlign === 'left' ? itemWidth + 5 : -5;\n var textAlign = itemAlign;\n var formatter = legendModel.get('formatter');\n var content = name;\n if (zrUtil.isString(formatter) && formatter) {\n content = formatter.replace('{name}', name != null ? name : '');\n } else if (zrUtil.isFunction(formatter)) {\n content = formatter(name);\n }\n var textColor = isSelected ? textStyleModel.getTextColor() : legendItemModel.get('inactiveColor');\n itemGroup.add(new graphic.Text({\n style: createTextStyle(textStyleModel, {\n text: content,\n x: textX,\n y: itemHeight / 2,\n fill: textColor,\n align: textAlign,\n verticalAlign: 'middle'\n }, {\n inheritColor: textColor\n })\n }));\n // Add a invisible rect to increase the area of mouse hover\n var hitRect = new graphic.Rect({\n shape: itemGroup.getBoundingRect(),\n style: {\n // Cannot use 'invisible' because SVG SSR will miss the node\n fill: 'transparent'\n }\n });\n var tooltipModel = legendItemModel.getModel('tooltip');\n if (tooltipModel.get('show')) {\n graphic.setTooltipConfig({\n el: hitRect,\n componentModel: legendModel,\n itemName: name,\n itemTooltipOption: tooltipModel.option\n });\n }\n itemGroup.add(hitRect);\n itemGroup.eachChild(function (child) {\n child.silent = true;\n });\n hitRect.silent = !selectMode;\n this.getContentGroup().add(itemGroup);\n enableHoverEmphasis(itemGroup);\n // @ts-ignore\n itemGroup.__legendDataIndex = dataIndex;\n return itemGroup;\n };\n LegendView.prototype.layoutInner = function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) {\n var contentGroup = this.getContentGroup();\n var selectorGroup = this.getSelectorGroup();\n // Place items in contentGroup.\n layoutUtil.box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), maxSize.width, maxSize.height);\n var contentRect = contentGroup.getBoundingRect();\n var contentPos = [-contentRect.x, -contentRect.y];\n selectorGroup.markRedraw();\n contentGroup.markRedraw();\n if (selector) {\n // Place buttons in selectorGroup\n layoutUtil.box(\n // Buttons in selectorGroup always layout horizontally\n 'horizontal', selectorGroup, legendModel.get('selectorItemGap', true));\n var selectorRect = selectorGroup.getBoundingRect();\n var selectorPos = [-selectorRect.x, -selectorRect.y];\n var selectorButtonGap = legendModel.get('selectorButtonGap', true);\n var orientIdx = legendModel.getOrient().index;\n var wh = orientIdx === 0 ? 'width' : 'height';\n var hw = orientIdx === 0 ? 'height' : 'width';\n var yx = orientIdx === 0 ? 'y' : 'x';\n if (selectorPosition === 'end') {\n selectorPos[orientIdx] += contentRect[wh] + selectorButtonGap;\n } else {\n contentPos[orientIdx] += selectorRect[wh] + selectorButtonGap;\n }\n // Always align selector to content as 'middle'\n selectorPos[1 - orientIdx] += contentRect[hw] / 2 - selectorRect[hw] / 2;\n selectorGroup.x = selectorPos[0];\n selectorGroup.y = selectorPos[1];\n contentGroup.x = contentPos[0];\n contentGroup.y = contentPos[1];\n var mainRect = {\n x: 0,\n y: 0\n };\n mainRect[wh] = contentRect[wh] + selectorButtonGap + selectorRect[wh];\n mainRect[hw] = Math.max(contentRect[hw], selectorRect[hw]);\n mainRect[yx] = Math.min(0, selectorRect[yx] + selectorPos[1 - orientIdx]);\n return mainRect;\n } else {\n contentGroup.x = contentPos[0];\n contentGroup.y = contentPos[1];\n return this.group.getBoundingRect();\n }\n };\n /**\n * @protected\n */\n LegendView.prototype.remove = function () {\n this.getContentGroup().removeAll();\n this._isFirstRender = true;\n };\n LegendView.type = 'legend.plain';\n return LegendView;\n}(ComponentView);\nfunction getLegendStyle(iconType, legendItemModel, lineVisualStyle, itemVisualStyle, drawType, isSelected, api) {\n /**\n * Use series style if is inherit;\n * elsewise, use legend style\n */\n function handleCommonProps(style, visualStyle) {\n // If lineStyle.width is 'auto', it is set to be 2 if series has border\n if (style.lineWidth === 'auto') {\n style.lineWidth = visualStyle.lineWidth > 0 ? 2 : 0;\n }\n each(style, function (propVal, propName) {\n style[propName] === 'inherit' && (style[propName] = visualStyle[propName]);\n });\n }\n // itemStyle\n var itemStyleModel = legendItemModel.getModel('itemStyle');\n var itemStyle = itemStyleModel.getItemStyle();\n var iconBrushType = iconType.lastIndexOf('empty', 0) === 0 ? 'fill' : 'stroke';\n var decalStyle = itemStyleModel.getShallow('decal');\n itemStyle.decal = !decalStyle || decalStyle === 'inherit' ? itemVisualStyle.decal : createOrUpdatePatternFromDecal(decalStyle, api);\n if (itemStyle.fill === 'inherit') {\n /**\n * Series with visualDrawType as 'stroke' should have\n * series stroke as legend fill\n */\n itemStyle.fill = itemVisualStyle[drawType];\n }\n if (itemStyle.stroke === 'inherit') {\n /**\n * icon type with \"emptyXXX\" should use fill color\n * in visual style\n */\n itemStyle.stroke = itemVisualStyle[iconBrushType];\n }\n if (itemStyle.opacity === 'inherit') {\n /**\n * Use lineStyle.opacity if drawType is stroke\n */\n itemStyle.opacity = (drawType === 'fill' ? itemVisualStyle : lineVisualStyle).opacity;\n }\n handleCommonProps(itemStyle, itemVisualStyle);\n // lineStyle\n var legendLineModel = legendItemModel.getModel('lineStyle');\n var lineStyle = legendLineModel.getLineStyle();\n handleCommonProps(lineStyle, lineVisualStyle);\n // Fix auto color to real color\n itemStyle.fill === 'auto' && (itemStyle.fill = itemVisualStyle.fill);\n itemStyle.stroke === 'auto' && (itemStyle.stroke = itemVisualStyle.fill);\n lineStyle.stroke === 'auto' && (lineStyle.stroke = itemVisualStyle.fill);\n if (!isSelected) {\n var borderWidth = legendItemModel.get('inactiveBorderWidth');\n /**\n * Since stroke is set to be inactiveBorderColor, it may occur that\n * there is no border in series but border in legend, so we need to\n * use border only when series has border if is set to be auto\n */\n var visualHasBorder = itemStyle[iconBrushType];\n itemStyle.lineWidth = borderWidth === 'auto' ? itemVisualStyle.lineWidth > 0 && visualHasBorder ? 2 : 0 : itemStyle.lineWidth;\n itemStyle.fill = legendItemModel.get('inactiveColor');\n itemStyle.stroke = legendItemModel.get('inactiveBorderColor');\n lineStyle.stroke = legendLineModel.get('inactiveColor');\n lineStyle.lineWidth = legendLineModel.get('inactiveWidth');\n }\n return {\n itemStyle: itemStyle,\n lineStyle: lineStyle\n };\n}\nfunction getDefaultLegendIcon(opt) {\n var symboType = opt.icon || 'roundRect';\n var icon = createSymbol(symboType, 0, 0, opt.itemWidth, opt.itemHeight, opt.itemStyle.fill, opt.symbolKeepAspect);\n icon.setStyle(opt.itemStyle);\n icon.rotation = (opt.iconRotate || 0) * Math.PI / 180;\n icon.setOrigin([opt.itemWidth / 2, opt.itemHeight / 2]);\n if (symboType.indexOf('empty') > -1) {\n icon.style.stroke = icon.style.fill;\n icon.style.fill = '#fff';\n icon.style.lineWidth = 2;\n }\n return icon;\n}\nfunction dispatchSelectAction(seriesName, dataName, api, excludeSeriesId) {\n // downplay before unselect\n dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId);\n api.dispatchAction({\n type: 'legendToggleSelect',\n name: seriesName != null ? seriesName : dataName\n });\n // highlight after select\n // TODO highlight immediately may cause animation loss.\n dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId);\n}\nfunction isUseHoverLayer(api) {\n var list = api.getZr().storage.getDisplayList();\n var emphasisState;\n var i = 0;\n var len = list.length;\n while (i < len && !(emphasisState = list[i].states.emphasis)) {\n i++;\n }\n return emphasisState && emphasisState.hoverLayer;\n}\nfunction dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) {\n // If element hover will move to a hoverLayer.\n if (!isUseHoverLayer(api)) {\n api.dispatchAction({\n type: 'highlight',\n seriesName: seriesName,\n name: dataName,\n excludeSeriesId: excludeSeriesId\n });\n }\n}\nfunction dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) {\n // If element hover will move to a hoverLayer.\n if (!isUseHoverLayer(api)) {\n api.dispatchAction({\n type: 'downplay',\n seriesName: seriesName,\n name: dataName,\n excludeSeriesId: excludeSeriesId\n });\n }\n}\nexport default LegendView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function legendFilter(ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n if (legendModels && legendModels.length) {\n ecModel.filterSeries(function (series) {\n // If in any legend component the status is not selected.\n // Because in legend series is assumed selected when it is not in the legend data.\n for (var i = 0; i < legendModels.length; i++) {\n if (!legendModels[i].isSelected(series.name)) {\n return false;\n }\n }\n return true;\n });\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport { curry, each } from 'zrender/lib/core/util.js';\nfunction legendSelectActionHandler(methodName, payload, ecModel) {\n var selectedMap = {};\n var isToggleSelect = methodName === 'toggleSelected';\n var isSelected;\n // Update all legend components\n ecModel.eachComponent('legend', function (legendModel) {\n if (isToggleSelect && isSelected != null) {\n // Force other legend has same selected status\n // Or the first is toggled to true and other are toggled to false\n // In the case one legend has some item unSelected in option. And if other legend\n // doesn't has the item, they will assume it is selected.\n legendModel[isSelected ? 'select' : 'unSelect'](payload.name);\n } else if (methodName === 'allSelect' || methodName === 'inverseSelect') {\n legendModel[methodName]();\n } else {\n legendModel[methodName](payload.name);\n isSelected = legendModel.isSelected(payload.name);\n }\n var legendData = legendModel.getData();\n each(legendData, function (model) {\n var name = model.get('name');\n // Wrap element\n if (name === '\\n' || name === '') {\n return;\n }\n var isItemSelected = legendModel.isSelected(name);\n if (selectedMap.hasOwnProperty(name)) {\n // Unselected if any legend is unselected\n selectedMap[name] = selectedMap[name] && isItemSelected;\n } else {\n selectedMap[name] = isItemSelected;\n }\n });\n });\n // Return the event explicitly\n return methodName === 'allSelect' || methodName === 'inverseSelect' ? {\n selected: selectedMap\n } : {\n name: payload.name,\n selected: selectedMap\n };\n}\nexport function installLegendAction(registers) {\n /**\n * @event legendToggleSelect\n * @type {Object}\n * @property {string} type 'legendToggleSelect'\n * @property {string} [from]\n * @property {string} name Series name or data item name\n */\n registers.registerAction('legendToggleSelect', 'legendselectchanged', curry(legendSelectActionHandler, 'toggleSelected'));\n registers.registerAction('legendAllSelect', 'legendselectall', curry(legendSelectActionHandler, 'allSelect'));\n registers.registerAction('legendInverseSelect', 'legendinverseselect', curry(legendSelectActionHandler, 'inverseSelect'));\n /**\n * @event legendSelect\n * @type {Object}\n * @property {string} type 'legendSelect'\n * @property {string} name Series name or data item name\n */\n registers.registerAction('legendSelect', 'legendselected', curry(legendSelectActionHandler, 'select'));\n /**\n * @event legendUnSelect\n * @type {Object}\n * @property {string} type 'legendUnSelect'\n * @property {string} name Series name or data item name\n */\n registers.registerAction('legendUnSelect', 'legendunselected', curry(legendSelectActionHandler, 'unSelect'));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport LegendModel from './LegendModel.js';\nimport LegendView from './LegendView.js';\nimport legendFilter from './legendFilter.js';\nimport { installLegendAction } from './legendAction.js';\nexport function install(registers) {\n registers.registerComponentModel(LegendModel);\n registers.registerComponentView(LegendView);\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.SERIES_FILTER, legendFilter);\n registers.registerSubTypeDefaulter('legend', function () {\n return 'plain';\n });\n installLegendAction(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport LegendModel from './LegendModel.js';\nimport { mergeLayoutParam, getLayoutParams } from '../../util/layout.js';\nimport { inheritDefaultOption } from '../../util/component.js';\nvar ScrollableLegendModel = /** @class */function (_super) {\n __extends(ScrollableLegendModel, _super);\n function ScrollableLegendModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = ScrollableLegendModel.type;\n return _this;\n }\n /**\n * @param {number} scrollDataIndex\n */\n ScrollableLegendModel.prototype.setScrollDataIndex = function (scrollDataIndex) {\n this.option.scrollDataIndex = scrollDataIndex;\n };\n ScrollableLegendModel.prototype.init = function (option, parentModel, ecModel) {\n var inputPositionParams = getLayoutParams(option);\n _super.prototype.init.call(this, option, parentModel, ecModel);\n mergeAndNormalizeLayoutParams(this, option, inputPositionParams);\n };\n /**\n * @override\n */\n ScrollableLegendModel.prototype.mergeOption = function (option, ecModel) {\n _super.prototype.mergeOption.call(this, option, ecModel);\n mergeAndNormalizeLayoutParams(this, this.option, option);\n };\n ScrollableLegendModel.type = 'legend.scroll';\n ScrollableLegendModel.defaultOption = inheritDefaultOption(LegendModel.defaultOption, {\n scrollDataIndex: 0,\n pageButtonItemGap: 5,\n pageButtonGap: null,\n pageButtonPosition: 'end',\n pageFormatter: '{current}/{total}',\n pageIcons: {\n horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],\n vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']\n },\n pageIconColor: '#2f4554',\n pageIconInactiveColor: '#aaa',\n pageIconSize: 15,\n pageTextStyle: {\n color: '#333'\n },\n animationDurationUpdate: 800\n });\n return ScrollableLegendModel;\n}(LegendModel);\n;\n// Do not `ignoreSize` to enable setting {left: 10, right: 10}.\nfunction mergeAndNormalizeLayoutParams(legendModel, target, raw) {\n var orient = legendModel.getOrient();\n var ignoreSize = [1, 1];\n ignoreSize[orient.index] = 0;\n mergeLayoutParam(target, raw, {\n type: 'box',\n ignoreSize: !!ignoreSize\n });\n}\nexport default ScrollableLegendModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/**\n * Separate legend and scrollable legend to reduce package size.\n */\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as layoutUtil from '../../util/layout.js';\nimport LegendView from './LegendView.js';\nvar Group = graphic.Group;\nvar WH = ['width', 'height'];\nvar XY = ['x', 'y'];\nvar ScrollableLegendView = /** @class */function (_super) {\n __extends(ScrollableLegendView, _super);\n function ScrollableLegendView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = ScrollableLegendView.type;\n _this.newlineDisabled = true;\n _this._currentIndex = 0;\n return _this;\n }\n ScrollableLegendView.prototype.init = function () {\n _super.prototype.init.call(this);\n this.group.add(this._containerGroup = new Group());\n this._containerGroup.add(this.getContentGroup());\n this.group.add(this._controllerGroup = new Group());\n };\n /**\n * @override\n */\n ScrollableLegendView.prototype.resetInner = function () {\n _super.prototype.resetInner.call(this);\n this._controllerGroup.removeAll();\n this._containerGroup.removeClipPath();\n this._containerGroup.__rectSize = null;\n };\n /**\n * @override\n */\n ScrollableLegendView.prototype.renderInner = function (itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition) {\n var self = this;\n // Render content items.\n _super.prototype.renderInner.call(this, itemAlign, legendModel, ecModel, api, selector, orient, selectorPosition);\n var controllerGroup = this._controllerGroup;\n // FIXME: support be 'auto' adapt to size number text length,\n // e.g., '3/12345' should not overlap with the control arrow button.\n var pageIconSize = legendModel.get('pageIconSize', true);\n var pageIconSizeArr = zrUtil.isArray(pageIconSize) ? pageIconSize : [pageIconSize, pageIconSize];\n createPageButton('pagePrev', 0);\n var pageTextStyleModel = legendModel.getModel('pageTextStyle');\n controllerGroup.add(new graphic.Text({\n name: 'pageText',\n style: {\n // Placeholder to calculate a proper layout.\n text: 'xx/xx',\n fill: pageTextStyleModel.getTextColor(),\n font: pageTextStyleModel.getFont(),\n verticalAlign: 'middle',\n align: 'center'\n },\n silent: true\n }));\n createPageButton('pageNext', 1);\n function createPageButton(name, iconIdx) {\n var pageDataIndexName = name + 'DataIndex';\n var icon = graphic.createIcon(legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx], {\n // Buttons will be created in each render, so we do not need\n // to worry about avoiding using legendModel kept in scope.\n onclick: zrUtil.bind(self._pageGo, self, pageDataIndexName, legendModel, api)\n }, {\n x: -pageIconSizeArr[0] / 2,\n y: -pageIconSizeArr[1] / 2,\n width: pageIconSizeArr[0],\n height: pageIconSizeArr[1]\n });\n icon.name = name;\n controllerGroup.add(icon);\n }\n };\n /**\n * @override\n */\n ScrollableLegendView.prototype.layoutInner = function (legendModel, itemAlign, maxSize, isFirstRender, selector, selectorPosition) {\n var selectorGroup = this.getSelectorGroup();\n var orientIdx = legendModel.getOrient().index;\n var wh = WH[orientIdx];\n var xy = XY[orientIdx];\n var hw = WH[1 - orientIdx];\n var yx = XY[1 - orientIdx];\n selector && layoutUtil.box(\n // Buttons in selectorGroup always layout horizontally\n 'horizontal', selectorGroup, legendModel.get('selectorItemGap', true));\n var selectorButtonGap = legendModel.get('selectorButtonGap', true);\n var selectorRect = selectorGroup.getBoundingRect();\n var selectorPos = [-selectorRect.x, -selectorRect.y];\n var processMaxSize = zrUtil.clone(maxSize);\n selector && (processMaxSize[wh] = maxSize[wh] - selectorRect[wh] - selectorButtonGap);\n var mainRect = this._layoutContentAndController(legendModel, isFirstRender, processMaxSize, orientIdx, wh, hw, yx, xy);\n if (selector) {\n if (selectorPosition === 'end') {\n selectorPos[orientIdx] += mainRect[wh] + selectorButtonGap;\n } else {\n var offset = selectorRect[wh] + selectorButtonGap;\n selectorPos[orientIdx] -= offset;\n mainRect[xy] -= offset;\n }\n mainRect[wh] += selectorRect[wh] + selectorButtonGap;\n selectorPos[1 - orientIdx] += mainRect[yx] + mainRect[hw] / 2 - selectorRect[hw] / 2;\n mainRect[hw] = Math.max(mainRect[hw], selectorRect[hw]);\n mainRect[yx] = Math.min(mainRect[yx], selectorRect[yx] + selectorPos[1 - orientIdx]);\n selectorGroup.x = selectorPos[0];\n selectorGroup.y = selectorPos[1];\n selectorGroup.markRedraw();\n }\n return mainRect;\n };\n ScrollableLegendView.prototype._layoutContentAndController = function (legendModel, isFirstRender, maxSize, orientIdx, wh, hw, yx, xy) {\n var contentGroup = this.getContentGroup();\n var containerGroup = this._containerGroup;\n var controllerGroup = this._controllerGroup;\n // Place items in contentGroup.\n layoutUtil.box(legendModel.get('orient'), contentGroup, legendModel.get('itemGap'), !orientIdx ? null : maxSize.width, orientIdx ? null : maxSize.height);\n layoutUtil.box(\n // Buttons in controller are layout always horizontally.\n 'horizontal', controllerGroup, legendModel.get('pageButtonItemGap', true));\n var contentRect = contentGroup.getBoundingRect();\n var controllerRect = controllerGroup.getBoundingRect();\n var showController = this._showController = contentRect[wh] > maxSize[wh];\n // In case that the inner elements of contentGroup layout do not based on [0, 0]\n var contentPos = [-contentRect.x, -contentRect.y];\n // Remain contentPos when scroll animation perfroming.\n // If first rendering, `contentGroup.position` is [0, 0], which\n // does not make sense and may cause unexepcted animation if adopted.\n if (!isFirstRender) {\n contentPos[orientIdx] = contentGroup[xy];\n }\n // Layout container group based on 0.\n var containerPos = [0, 0];\n var controllerPos = [-controllerRect.x, -controllerRect.y];\n var pageButtonGap = zrUtil.retrieve2(legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true));\n // Place containerGroup and controllerGroup and contentGroup.\n if (showController) {\n var pageButtonPosition = legendModel.get('pageButtonPosition', true);\n // controller is on the right / bottom.\n if (pageButtonPosition === 'end') {\n controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];\n }\n // controller is on the left / top.\n else {\n containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;\n }\n }\n // Always align controller to content as 'middle'.\n controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;\n contentGroup.setPosition(contentPos);\n containerGroup.setPosition(containerPos);\n controllerGroup.setPosition(controllerPos);\n // Calculate `mainRect` and set `clipPath`.\n // mainRect should not be calculated by `this.group.getBoundingRect()`\n // for sake of the overflow.\n var mainRect = {\n x: 0,\n y: 0\n };\n // Consider content may be overflow (should be clipped).\n mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];\n mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]);\n // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.\n mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);\n containerGroup.__rectSize = maxSize[wh];\n if (showController) {\n var clipShape = {\n x: 0,\n y: 0\n };\n clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);\n clipShape[hw] = mainRect[hw];\n containerGroup.setClipPath(new graphic.Rect({\n shape: clipShape\n }));\n // Consider content may be larger than container, container rect\n // can not be obtained from `containerGroup.getBoundingRect()`.\n containerGroup.__rectSize = clipShape[wh];\n } else {\n // Do not remove or ignore controller. Keep them set as placeholders.\n controllerGroup.eachChild(function (child) {\n child.attr({\n invisible: true,\n silent: true\n });\n });\n }\n // Content translate animation.\n var pageInfo = this._getPageInfo(legendModel);\n pageInfo.pageIndex != null && graphic.updateProps(contentGroup, {\n x: pageInfo.contentPosition[0],\n y: pageInfo.contentPosition[1]\n },\n // When switch from \"show controller\" to \"not show controller\", view should be\n // updated immediately without animation, otherwise causes weird effect.\n showController ? legendModel : null);\n this._updatePageInfoView(legendModel, pageInfo);\n return mainRect;\n };\n ScrollableLegendView.prototype._pageGo = function (to, legendModel, api) {\n var scrollDataIndex = this._getPageInfo(legendModel)[to];\n scrollDataIndex != null && api.dispatchAction({\n type: 'legendScroll',\n scrollDataIndex: scrollDataIndex,\n legendId: legendModel.id\n });\n };\n ScrollableLegendView.prototype._updatePageInfoView = function (legendModel, pageInfo) {\n var controllerGroup = this._controllerGroup;\n zrUtil.each(['pagePrev', 'pageNext'], function (name) {\n var key = name + 'DataIndex';\n var canJump = pageInfo[key] != null;\n var icon = controllerGroup.childOfName(name);\n if (icon) {\n icon.setStyle('fill', canJump ? legendModel.get('pageIconColor', true) : legendModel.get('pageIconInactiveColor', true));\n icon.cursor = canJump ? 'pointer' : 'default';\n }\n });\n var pageText = controllerGroup.childOfName('pageText');\n var pageFormatter = legendModel.get('pageFormatter');\n var pageIndex = pageInfo.pageIndex;\n var current = pageIndex != null ? pageIndex + 1 : 0;\n var total = pageInfo.pageCount;\n pageText && pageFormatter && pageText.setStyle('text', zrUtil.isString(pageFormatter) ? pageFormatter.replace('{current}', current == null ? '' : current + '').replace('{total}', total == null ? '' : total + '') : pageFormatter({\n current: current,\n total: total\n }));\n };\n /**\n * contentPosition: Array., null when data item not found.\n * pageIndex: number, null when data item not found.\n * pageCount: number, always be a number, can be 0.\n * pagePrevDataIndex: number, null when no previous page.\n * pageNextDataIndex: number, null when no next page.\n * }\n */\n ScrollableLegendView.prototype._getPageInfo = function (legendModel) {\n var scrollDataIndex = legendModel.get('scrollDataIndex', true);\n var contentGroup = this.getContentGroup();\n var containerRectSize = this._containerGroup.__rectSize;\n var orientIdx = legendModel.getOrient().index;\n var wh = WH[orientIdx];\n var xy = XY[orientIdx];\n var targetItemIndex = this._findTargetItemIndex(scrollDataIndex);\n var children = contentGroup.children();\n var targetItem = children[targetItemIndex];\n var itemCount = children.length;\n var pCount = !itemCount ? 0 : 1;\n var result = {\n contentPosition: [contentGroup.x, contentGroup.y],\n pageCount: pCount,\n pageIndex: pCount - 1,\n pagePrevDataIndex: null,\n pageNextDataIndex: null\n };\n if (!targetItem) {\n return result;\n }\n var targetItemInfo = getItemInfo(targetItem);\n result.contentPosition[orientIdx] = -targetItemInfo.s;\n // Strategy:\n // (1) Always align based on the left/top most item.\n // (2) It is user-friendly that the last item shown in the\n // current window is shown at the begining of next window.\n // Otherwise if half of the last item is cut by the window,\n // it will have no chance to display entirely.\n // (3) Consider that item size probably be different, we\n // have calculate pageIndex by size rather than item index,\n // and we can not get page index directly by division.\n // (4) The window is to narrow to contain more than\n // one item, we should make sure that the page can be fliped.\n for (var i = targetItemIndex + 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i <= itemCount; ++i) {\n currItemInfo = getItemInfo(children[i]);\n if (\n // Half of the last item is out of the window.\n !currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize\n // If the current item does not intersect with the window, the new page\n // can be started at the current item or the last item.\n || currItemInfo && !intersect(currItemInfo, winStartItemInfo.s)) {\n if (winEndItemInfo.i > winStartItemInfo.i) {\n winStartItemInfo = winEndItemInfo;\n } else {\n // e.g., when page size is smaller than item size.\n winStartItemInfo = currItemInfo;\n }\n if (winStartItemInfo) {\n if (result.pageNextDataIndex == null) {\n result.pageNextDataIndex = winStartItemInfo.i;\n }\n ++result.pageCount;\n }\n }\n winEndItemInfo = currItemInfo;\n }\n for (var i = targetItemIndex - 1, winStartItemInfo = targetItemInfo, winEndItemInfo = targetItemInfo, currItemInfo = null; i >= -1; --i) {\n currItemInfo = getItemInfo(children[i]);\n if (\n // If the the end item does not intersect with the window started\n // from the current item, a page can be settled.\n (!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s)\n // e.g., when page size is smaller than item size.\n ) && winStartItemInfo.i < winEndItemInfo.i) {\n winEndItemInfo = winStartItemInfo;\n if (result.pagePrevDataIndex == null) {\n result.pagePrevDataIndex = winStartItemInfo.i;\n }\n ++result.pageCount;\n ++result.pageIndex;\n }\n winStartItemInfo = currItemInfo;\n }\n return result;\n function getItemInfo(el) {\n if (el) {\n var itemRect = el.getBoundingRect();\n var start = itemRect[xy] + el[xy];\n return {\n s: start,\n e: start + itemRect[wh],\n i: el.__legendDataIndex\n };\n }\n }\n function intersect(itemInfo, winStart) {\n return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize;\n }\n };\n ScrollableLegendView.prototype._findTargetItemIndex = function (targetDataIndex) {\n if (!this._showController) {\n return 0;\n }\n var index;\n var contentGroup = this.getContentGroup();\n var defaultIndex;\n contentGroup.eachChild(function (child, idx) {\n var legendDataIdx = child.__legendDataIndex;\n // FIXME\n // If the given targetDataIndex (from model) is illegal,\n // we use defaultIndex. But the index on the legend model and\n // action payload is still illegal. That case will not be\n // changed until some scenario requires.\n if (defaultIndex == null && legendDataIdx != null) {\n defaultIndex = idx;\n }\n if (legendDataIdx === targetDataIndex) {\n index = idx;\n }\n });\n return index != null ? index : defaultIndex;\n };\n ScrollableLegendView.type = 'legend.scroll';\n return ScrollableLegendView;\n}(LegendView);\nexport default ScrollableLegendView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function installScrollableLegendAction(registers) {\n /**\n * @event legendScroll\n * @type {Object}\n * @property {string} type 'legendScroll'\n * @property {string} scrollDataIndex\n */\n registers.registerAction('legendScroll', 'legendscroll', function (payload, ecModel) {\n var scrollDataIndex = payload.scrollDataIndex;\n scrollDataIndex != null && ecModel.eachComponent({\n mainType: 'legend',\n subType: 'scroll',\n query: payload\n }, function (legendModel) {\n legendModel.setScrollDataIndex(scrollDataIndex);\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installLegendPlain } from './installLegendPlain.js';\nimport ScrollableLegendModel from './ScrollableLegendModel.js';\nimport ScrollableLegendView from './ScrollableLegendView.js';\nimport installScrollableLegendAction from './scrollableLegendAction.js';\nexport function install(registers) {\n use(installLegendPlain);\n registers.registerComponentModel(ScrollableLegendModel);\n registers.registerComponentView(ScrollableLegendView);\n installScrollableLegendAction(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installLegendPlain } from './installLegendPlain.js';\nimport { install as installLegendScroll } from './installLegendScroll.js';\nexport function install(registers) {\n use(installLegendPlain);\n use(installLegendScroll);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentModel from '../../model/Component.js';\nvar GridModel = /** @class */function (_super) {\n __extends(GridModel, _super);\n function GridModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GridModel.type = 'grid';\n GridModel.dependencies = ['xAxis', 'yAxis'];\n GridModel.layoutMode = 'box';\n GridModel.defaultOption = {\n show: false,\n // zlevel: 0,\n z: 0,\n left: '10%',\n top: 60,\n right: '10%',\n bottom: 70,\n // If grid size contain label\n containLabel: false,\n // width: {totalWidth} - left - right,\n // height: {totalHeight} - top - bottom,\n backgroundColor: 'rgba(0,0,0,0)',\n borderWidth: 1,\n borderColor: '#ccc'\n };\n return GridModel;\n}(ComponentModel);\nexport default GridModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar AxisModelCommonMixin = /** @class */function () {\n function AxisModelCommonMixin() {}\n AxisModelCommonMixin.prototype.getNeedCrossZero = function () {\n var option = this.option;\n return !option.scale;\n };\n /**\n * Should be implemented by each axis model if necessary.\n * @return coordinate system model\n */\n AxisModelCommonMixin.prototype.getCoordSysModel = function () {\n return;\n };\n return AxisModelCommonMixin;\n}();\nexport { AxisModelCommonMixin };","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\nimport { AxisModelCommonMixin } from '../axisModelCommonMixin.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\nvar CartesianAxisModel = /** @class */function (_super) {\n __extends(CartesianAxisModel, _super);\n function CartesianAxisModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n CartesianAxisModel.prototype.getCoordSysModel = function () {\n return this.getReferringComponents('grid', SINGLE_REFERRING).models[0];\n };\n CartesianAxisModel.type = 'cartesian2dAxis';\n return CartesianAxisModel;\n}(ComponentModel);\nexport { CartesianAxisModel };\nzrUtil.mixin(CartesianAxisModel, AxisModelCommonMixin);\nexport default CartesianAxisModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar defaultOption = {\n show: true,\n // zlevel: 0,\n z: 0,\n // Inverse the axis.\n inverse: false,\n // Axis name displayed.\n name: '',\n // 'start' | 'middle' | 'end'\n nameLocation: 'end',\n // By degree. By default auto rotate by nameLocation.\n nameRotate: null,\n nameTruncate: {\n maxWidth: null,\n ellipsis: '...',\n placeholder: '.'\n },\n // Use global text style by default.\n nameTextStyle: {},\n // The gap between axisName and axisLine.\n nameGap: 15,\n // Default `false` to support tooltip.\n silent: false,\n // Default `false` to avoid legacy user event listener fail.\n triggerEvent: false,\n tooltip: {\n show: false\n },\n axisPointer: {},\n axisLine: {\n show: true,\n onZero: true,\n onZeroAxisIndex: null,\n lineStyle: {\n color: '#6E7079',\n width: 1,\n type: 'solid'\n },\n // The arrow at both ends the the axis.\n symbol: ['none', 'none'],\n symbolSize: [10, 15]\n },\n axisTick: {\n show: true,\n // Whether axisTick is inside the grid or outside the grid.\n inside: false,\n // The length of axisTick.\n length: 5,\n lineStyle: {\n width: 1\n }\n },\n axisLabel: {\n show: true,\n // Whether axisLabel is inside the grid or outside the grid.\n inside: false,\n rotate: 0,\n // true | false | null/undefined (auto)\n showMinLabel: null,\n // true | false | null/undefined (auto)\n showMaxLabel: null,\n margin: 8,\n // formatter: null,\n fontSize: 12\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: ['#E0E6F1'],\n width: 1,\n type: 'solid'\n }\n },\n splitArea: {\n show: false,\n areaStyle: {\n color: ['rgba(250,250,250,0.2)', 'rgba(210,219,238,0.2)']\n }\n }\n};\nvar categoryAxis = zrUtil.merge({\n // The gap at both ends of the axis. For categoryAxis, boolean.\n boundaryGap: true,\n // Set false to faster category collection.\n deduplication: null,\n // splitArea: {\n // show: false\n // },\n splitLine: {\n show: false\n },\n axisTick: {\n // If tick is align with label when boundaryGap is true\n alignWithLabel: false,\n interval: 'auto'\n },\n axisLabel: {\n interval: 'auto'\n }\n}, defaultOption);\nvar valueAxis = zrUtil.merge({\n boundaryGap: [0, 0],\n axisLine: {\n // Not shown when other axis is categoryAxis in cartesian\n show: 'auto'\n },\n axisTick: {\n // Not shown when other axis is categoryAxis in cartesian\n show: 'auto'\n },\n // TODO\n // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]\n splitNumber: 5,\n minorTick: {\n // Minor tick, not available for cateogry axis.\n show: false,\n // Split number of minor ticks. The value should be in range of (0, 100)\n splitNumber: 5,\n // Length of minor tick\n length: 3,\n // Line style\n lineStyle: {\n // Default to be same with axisTick\n }\n },\n minorSplitLine: {\n show: false,\n lineStyle: {\n color: '#F4F7FD',\n width: 1\n }\n }\n}, defaultOption);\nvar timeAxis = zrUtil.merge({\n splitNumber: 6,\n axisLabel: {\n // To eliminate labels that are not nice\n showMinLabel: false,\n showMaxLabel: false,\n rich: {\n primary: {\n fontWeight: 'bold'\n }\n }\n },\n splitLine: {\n show: false\n }\n}, valueAxis);\nvar logAxis = zrUtil.defaults({\n logBase: 10\n}, valueAxis);\nexport default {\n category: categoryAxis,\n value: valueAxis,\n time: timeAxis,\n log: logAxis\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport var AXIS_TYPES = {\n value: 1,\n category: 1,\n time: 1,\n log: 1\n};","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport axisDefault from './axisDefault.js';\nimport { getLayoutParams, mergeLayoutParam, fetchLayoutMode } from '../util/layout.js';\nimport OrdinalMeta from '../data/OrdinalMeta.js';\nimport { AXIS_TYPES } from './axisCommonTypes.js';\nimport { each, merge } from 'zrender/lib/core/util.js';\n/**\n * Generate sub axis model class\n * @param axisName 'x' 'y' 'radius' 'angle' 'parallel' ...\n */\nexport default function axisModelCreator(registers, axisName, BaseAxisModelClass, extraDefaultOption) {\n each(AXIS_TYPES, function (v, axisType) {\n var defaultOption = merge(merge({}, axisDefault[axisType], true), extraDefaultOption, true);\n var AxisModel = /** @class */function (_super) {\n __extends(AxisModel, _super);\n function AxisModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = axisName + 'Axis.' + axisType;\n return _this;\n }\n AxisModel.prototype.mergeDefaultAndTheme = function (option, ecModel) {\n var layoutMode = fetchLayoutMode(this);\n var inputPositionParams = layoutMode ? getLayoutParams(option) : {};\n var themeModel = ecModel.getTheme();\n merge(option, themeModel.get(axisType + 'Axis'));\n merge(option, this.getDefaultOption());\n option.type = getAxisType(option);\n if (layoutMode) {\n mergeLayoutParam(option, inputPositionParams, layoutMode);\n }\n };\n AxisModel.prototype.optionUpdated = function () {\n var thisOption = this.option;\n if (thisOption.type === 'category') {\n this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);\n }\n };\n /**\n * Should not be called before all of 'getInitailData' finished.\n * Because categories are collected during initializing data.\n */\n AxisModel.prototype.getCategories = function (rawData) {\n var option = this.option;\n // FIXME\n // warning if called before all of 'getInitailData' finished.\n if (option.type === 'category') {\n if (rawData) {\n return option.data;\n }\n return this.__ordinalMeta.categories;\n }\n };\n AxisModel.prototype.getOrdinalMeta = function () {\n return this.__ordinalMeta;\n };\n AxisModel.type = axisName + 'Axis.' + axisType;\n AxisModel.defaultOption = defaultOption;\n return AxisModel;\n }(BaseAxisModelClass);\n registers.registerComponentModel(AxisModel);\n });\n registers.registerSubTypeDefaulter(axisName + 'Axis', getAxisType);\n}\nfunction getAxisType(option) {\n // Default axis with data is category axis\n return option.type || (option.data ? 'category' : 'value');\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nvar Cartesian = /** @class */function () {\n function Cartesian(name) {\n this.type = 'cartesian';\n this._dimList = [];\n this._axes = {};\n this.name = name || '';\n }\n Cartesian.prototype.getAxis = function (dim) {\n return this._axes[dim];\n };\n Cartesian.prototype.getAxes = function () {\n return zrUtil.map(this._dimList, function (dim) {\n return this._axes[dim];\n }, this);\n };\n Cartesian.prototype.getAxesByScale = function (scaleType) {\n scaleType = scaleType.toLowerCase();\n return zrUtil.filter(this.getAxes(), function (axis) {\n return axis.scale.type === scaleType;\n });\n };\n Cartesian.prototype.addAxis = function (axis) {\n var dim = axis.dim;\n this._axes[dim] = axis;\n this._dimList.push(dim);\n };\n return Cartesian;\n}();\n;\nexport default Cartesian;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport Cartesian from './Cartesian.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport { applyTransform } from 'zrender/lib/core/vector.js';\nexport var cartesian2DDimensions = ['x', 'y'];\nfunction canCalculateAffineTransform(scale) {\n return scale.type === 'interval' || scale.type === 'time';\n}\nvar Cartesian2D = /** @class */function (_super) {\n __extends(Cartesian2D, _super);\n function Cartesian2D() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'cartesian2d';\n _this.dimensions = cartesian2DDimensions;\n return _this;\n }\n /**\n * Calculate an affine transform matrix if two axes are time or value.\n * It's mainly for accelartion on the large time series data.\n */\n Cartesian2D.prototype.calcAffineTransform = function () {\n this._transform = this._invTransform = null;\n var xAxisScale = this.getAxis('x').scale;\n var yAxisScale = this.getAxis('y').scale;\n if (!canCalculateAffineTransform(xAxisScale) || !canCalculateAffineTransform(yAxisScale)) {\n return;\n }\n var xScaleExtent = xAxisScale.getExtent();\n var yScaleExtent = yAxisScale.getExtent();\n var start = this.dataToPoint([xScaleExtent[0], yScaleExtent[0]]);\n var end = this.dataToPoint([xScaleExtent[1], yScaleExtent[1]]);\n var xScaleSpan = xScaleExtent[1] - xScaleExtent[0];\n var yScaleSpan = yScaleExtent[1] - yScaleExtent[0];\n if (!xScaleSpan || !yScaleSpan) {\n return;\n }\n // Accelerate data to point calculation on the special large time series data.\n var scaleX = (end[0] - start[0]) / xScaleSpan;\n var scaleY = (end[1] - start[1]) / yScaleSpan;\n var translateX = start[0] - xScaleExtent[0] * scaleX;\n var translateY = start[1] - yScaleExtent[0] * scaleY;\n var m = this._transform = [scaleX, 0, 0, scaleY, translateX, translateY];\n this._invTransform = invert([], m);\n };\n /**\n * Base axis will be used on stacking.\n */\n Cartesian2D.prototype.getBaseAxis = function () {\n return this.getAxesByScale('ordinal')[0] || this.getAxesByScale('time')[0] || this.getAxis('x');\n };\n Cartesian2D.prototype.containPoint = function (point) {\n var axisX = this.getAxis('x');\n var axisY = this.getAxis('y');\n return axisX.contain(axisX.toLocalCoord(point[0])) && axisY.contain(axisY.toLocalCoord(point[1]));\n };\n Cartesian2D.prototype.containData = function (data) {\n return this.getAxis('x').containData(data[0]) && this.getAxis('y').containData(data[1]);\n };\n Cartesian2D.prototype.containZone = function (data1, data2) {\n var zoneDiag1 = this.dataToPoint(data1);\n var zoneDiag2 = this.dataToPoint(data2);\n var area = this.getArea();\n var zone = new BoundingRect(zoneDiag1[0], zoneDiag1[1], zoneDiag2[0] - zoneDiag1[0], zoneDiag2[1] - zoneDiag1[1]);\n return area.intersect(zone);\n };\n Cartesian2D.prototype.dataToPoint = function (data, clamp, out) {\n out = out || [];\n var xVal = data[0];\n var yVal = data[1];\n // Fast path\n if (this._transform\n // It's supported that if data is like `[Inifity, 123]`, where only Y pixel calculated.\n && xVal != null && isFinite(xVal) && yVal != null && isFinite(yVal)) {\n return applyTransform(out, data, this._transform);\n }\n var xAxis = this.getAxis('x');\n var yAxis = this.getAxis('y');\n out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(xVal, clamp));\n out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(yVal, clamp));\n return out;\n };\n Cartesian2D.prototype.clampData = function (data, out) {\n var xScale = this.getAxis('x').scale;\n var yScale = this.getAxis('y').scale;\n var xAxisExtent = xScale.getExtent();\n var yAxisExtent = yScale.getExtent();\n var x = xScale.parse(data[0]);\n var y = yScale.parse(data[1]);\n out = out || [];\n out[0] = Math.min(Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x), Math.max(xAxisExtent[0], xAxisExtent[1]));\n out[1] = Math.min(Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y), Math.max(yAxisExtent[0], yAxisExtent[1]));\n return out;\n };\n Cartesian2D.prototype.pointToData = function (point, clamp) {\n var out = [];\n if (this._invTransform) {\n return applyTransform(out, point, this._invTransform);\n }\n var xAxis = this.getAxis('x');\n var yAxis = this.getAxis('y');\n out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]), clamp);\n out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]), clamp);\n return out;\n };\n Cartesian2D.prototype.getOtherAxis = function (axis) {\n return this.getAxis(axis.dim === 'x' ? 'y' : 'x');\n };\n /**\n * Get rect area of cartesian.\n * Area will have a contain function to determine if a point is in the coordinate system.\n */\n Cartesian2D.prototype.getArea = function (tolerance) {\n tolerance = tolerance || 0;\n var xExtent = this.getAxis('x').getGlobalExtent();\n var yExtent = this.getAxis('y').getGlobalExtent();\n var x = Math.min(xExtent[0], xExtent[1]) - tolerance;\n var y = Math.min(yExtent[0], yExtent[1]) - tolerance;\n var width = Math.max(xExtent[0], xExtent[1]) - x + tolerance;\n var height = Math.max(yExtent[0], yExtent[1]) - y + tolerance;\n return new BoundingRect(x, y, width, height);\n };\n return Cartesian2D;\n}(Cartesian);\n;\nexport default Cartesian2D;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as textContain from 'zrender/lib/contain/text.js';\nimport { makeInner } from '../util/model.js';\nimport { makeLabelFormatter, getOptionCategoryInterval, shouldShowAllLabels } from './axisHelper.js';\nvar inner = makeInner();\nexport function createAxisLabels(axis) {\n // Only ordinal scale support tick interval\n return axis.type === 'category' ? makeCategoryLabels(axis) : makeRealNumberLabels(axis);\n}\n/**\n * @param {module:echats/coord/Axis} axis\n * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea.\n * @return {Object} {\n * ticks: Array.\n * tickCategoryInterval: number\n * }\n */\nexport function createAxisTicks(axis, tickModel) {\n // Only ordinal scale support tick interval\n return axis.type === 'category' ? makeCategoryTicks(axis, tickModel) : {\n ticks: zrUtil.map(axis.scale.getTicks(), function (tick) {\n return tick.value;\n })\n };\n}\nfunction makeCategoryLabels(axis) {\n var labelModel = axis.getLabelModel();\n var result = makeCategoryLabelsActually(axis, labelModel);\n return !labelModel.get('show') || axis.scale.isBlank() ? {\n labels: [],\n labelCategoryInterval: result.labelCategoryInterval\n } : result;\n}\nfunction makeCategoryLabelsActually(axis, labelModel) {\n var labelsCache = getListCache(axis, 'labels');\n var optionLabelInterval = getOptionCategoryInterval(labelModel);\n var result = listCacheGet(labelsCache, optionLabelInterval);\n if (result) {\n return result;\n }\n var labels;\n var numericLabelInterval;\n if (zrUtil.isFunction(optionLabelInterval)) {\n labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);\n } else {\n numericLabelInterval = optionLabelInterval === 'auto' ? makeAutoCategoryInterval(axis) : optionLabelInterval;\n labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);\n }\n // Cache to avoid calling interval function repeatedly.\n return listCacheSet(labelsCache, optionLabelInterval, {\n labels: labels,\n labelCategoryInterval: numericLabelInterval\n });\n}\nfunction makeCategoryTicks(axis, tickModel) {\n var ticksCache = getListCache(axis, 'ticks');\n var optionTickInterval = getOptionCategoryInterval(tickModel);\n var result = listCacheGet(ticksCache, optionTickInterval);\n if (result) {\n return result;\n }\n var ticks;\n var tickCategoryInterval;\n // Optimize for the case that large category data and no label displayed,\n // we should not return all ticks.\n if (!tickModel.get('show') || axis.scale.isBlank()) {\n ticks = [];\n }\n if (zrUtil.isFunction(optionTickInterval)) {\n ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);\n }\n // Always use label interval by default despite label show. Consider this\n // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows\n // labels. `splitLine` and `axisTick` should be consistent in this case.\n else if (optionTickInterval === 'auto') {\n var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());\n tickCategoryInterval = labelsResult.labelCategoryInterval;\n ticks = zrUtil.map(labelsResult.labels, function (labelItem) {\n return labelItem.tickValue;\n });\n } else {\n tickCategoryInterval = optionTickInterval;\n ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);\n }\n // Cache to avoid calling interval function repeatedly.\n return listCacheSet(ticksCache, optionTickInterval, {\n ticks: ticks,\n tickCategoryInterval: tickCategoryInterval\n });\n}\nfunction makeRealNumberLabels(axis) {\n var ticks = axis.scale.getTicks();\n var labelFormatter = makeLabelFormatter(axis);\n return {\n labels: zrUtil.map(ticks, function (tick, idx) {\n return {\n level: tick.level,\n formattedLabel: labelFormatter(tick, idx),\n rawLabel: axis.scale.getLabel(tick),\n tickValue: tick.value\n };\n })\n };\n}\nfunction getListCache(axis, prop) {\n // Because key can be a function, and cache size always is small, we use array cache.\n return inner(axis)[prop] || (inner(axis)[prop] = []);\n}\nfunction listCacheGet(cache, key) {\n for (var i = 0; i < cache.length; i++) {\n if (cache[i].key === key) {\n return cache[i].value;\n }\n }\n}\nfunction listCacheSet(cache, key, value) {\n cache.push({\n key: key,\n value: value\n });\n return value;\n}\nfunction makeAutoCategoryInterval(axis) {\n var result = inner(axis).autoInterval;\n return result != null ? result : inner(axis).autoInterval = axis.calculateCategoryInterval();\n}\n/**\n * Calculate interval for category axis ticks and labels.\n * To get precise result, at least one of `getRotate` and `isHorizontal`\n * should be implemented in axis.\n */\nexport function calculateCategoryInterval(axis) {\n var params = fetchAutoCategoryIntervalCalculationParams(axis);\n var labelFormatter = makeLabelFormatter(axis);\n var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;\n var ordinalScale = axis.scale;\n var ordinalExtent = ordinalScale.getExtent();\n // Providing this method is for optimization:\n // avoid generating a long array by `getTicks`\n // in large category data case.\n var tickCount = ordinalScale.count();\n if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n return 0;\n }\n var step = 1;\n // Simple optimization. Empirical value: tick count should less than 40.\n if (tickCount > 40) {\n step = Math.max(1, Math.floor(tickCount / 40));\n }\n var tickValue = ordinalExtent[0];\n var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);\n var unitW = Math.abs(unitSpan * Math.cos(rotation));\n var unitH = Math.abs(unitSpan * Math.sin(rotation));\n var maxW = 0;\n var maxH = 0;\n // Caution: Performance sensitive for large category data.\n // Consider dataZoom, we should make appropriate step to avoid O(n) loop.\n for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n var width = 0;\n var height = 0;\n // Not precise, do not consider align and vertical align\n // and each distance from axis line yet.\n var rect = textContain.getBoundingRect(labelFormatter({\n value: tickValue\n }), params.font, 'center', 'top');\n // Magic number\n width = rect.width * 1.3;\n height = rect.height * 1.3;\n // Min size, void long loop.\n maxW = Math.max(maxW, width, 7);\n maxH = Math.max(maxH, height, 7);\n }\n var dw = maxW / unitW;\n var dh = maxH / unitH;\n // 0/0 is NaN, 1/0 is Infinity.\n isNaN(dw) && (dw = Infinity);\n isNaN(dh) && (dh = Infinity);\n var interval = Math.max(0, Math.floor(Math.min(dw, dh)));\n var cache = inner(axis.model);\n var axisExtent = axis.getExtent();\n var lastAutoInterval = cache.lastAutoInterval;\n var lastTickCount = cache.lastTickCount;\n // Use cache to keep interval stable while moving zoom window,\n // otherwise the calculated interval might jitter when the zoom\n // window size is close to the interval-changing size.\n // For example, if all of the axis labels are `a, b, c, d, e, f, g`.\n // The jitter will cause that sometimes the displayed labels are\n // `a, d, g` (interval: 2) sometimes `a, c, e`(interval: 1).\n if (lastAutoInterval != null && lastTickCount != null && Math.abs(lastAutoInterval - interval) <= 1 && Math.abs(lastTickCount - tickCount) <= 1\n // Always choose the bigger one, otherwise the critical\n // point is not the same when zooming in or zooming out.\n && lastAutoInterval > interval\n // If the axis change is caused by chart resize, the cache should not\n // be used. Otherwise some hidden labels might not be shown again.\n && cache.axisExtent0 === axisExtent[0] && cache.axisExtent1 === axisExtent[1]) {\n interval = lastAutoInterval;\n }\n // Only update cache if cache not used, otherwise the\n // changing of interval is too insensitive.\n else {\n cache.lastTickCount = tickCount;\n cache.lastAutoInterval = interval;\n cache.axisExtent0 = axisExtent[0];\n cache.axisExtent1 = axisExtent[1];\n }\n return interval;\n}\nfunction fetchAutoCategoryIntervalCalculationParams(axis) {\n var labelModel = axis.getLabelModel();\n return {\n axisRotate: axis.getRotate ? axis.getRotate() : axis.isHorizontal && !axis.isHorizontal() ? 90 : 0,\n labelRotate: labelModel.get('rotate') || 0,\n font: labelModel.getFont()\n };\n}\nfunction makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {\n var labelFormatter = makeLabelFormatter(axis);\n var ordinalScale = axis.scale;\n var ordinalExtent = ordinalScale.getExtent();\n var labelModel = axis.getLabelModel();\n var result = [];\n // TODO: axisType: ordinalTime, pick the tick from each month/day/year/...\n var step = Math.max((categoryInterval || 0) + 1, 1);\n var startTick = ordinalExtent[0];\n var tickCount = ordinalScale.count();\n // Calculate start tick based on zero if possible to keep label consistent\n // while zooming and moving while interval > 0. Otherwise the selection\n // of displayable ticks and symbols probably keep changing.\n // 3 is empirical value.\n if (startTick !== 0 && step > 1 && tickCount / step > 2) {\n startTick = Math.round(Math.ceil(startTick / step) * step);\n }\n // (1) Only add min max label here but leave overlap checking\n // to render stage, which also ensure the returned list\n // suitable for splitLine and splitArea rendering.\n // (2) Scales except category always contain min max label so\n // do not need to perform this process.\n var showAllLabel = shouldShowAllLabels(axis);\n var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel;\n var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel;\n if (includeMinLabel && startTick !== ordinalExtent[0]) {\n addItem(ordinalExtent[0]);\n }\n // Optimize: avoid generating large array by `ordinalScale.getTicks()`.\n var tickValue = startTick;\n for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n addItem(tickValue);\n }\n if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) {\n addItem(ordinalExtent[1]);\n }\n function addItem(tickValue) {\n var tickObj = {\n value: tickValue\n };\n result.push(onlyTick ? tickValue : {\n formattedLabel: labelFormatter(tickObj),\n rawLabel: ordinalScale.getLabel(tickObj),\n tickValue: tickValue\n });\n }\n return result;\n}\nfunction makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {\n var ordinalScale = axis.scale;\n var labelFormatter = makeLabelFormatter(axis);\n var result = [];\n zrUtil.each(ordinalScale.getTicks(), function (tick) {\n var rawLabel = ordinalScale.getLabel(tick);\n var tickValue = tick.value;\n if (categoryInterval(tick.value, rawLabel)) {\n result.push(onlyTick ? tickValue : {\n formattedLabel: labelFormatter(tick),\n rawLabel: rawLabel,\n tickValue: tickValue\n });\n }\n });\n return result;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, map } from 'zrender/lib/core/util.js';\nimport { linearMap, getPixelPrecision, round } from '../util/number.js';\nimport { createAxisTicks, createAxisLabels, calculateCategoryInterval } from './axisTickLabelBuilder.js';\nvar NORMALIZED_EXTENT = [0, 1];\n/**\n * Base class of Axis.\n */\nvar Axis = /** @class */function () {\n function Axis(dim, scale, extent) {\n this.onBand = false;\n this.inverse = false;\n this.dim = dim;\n this.scale = scale;\n this._extent = extent || [0, 0];\n }\n /**\n * If axis extent contain given coord\n */\n Axis.prototype.contain = function (coord) {\n var extent = this._extent;\n var min = Math.min(extent[0], extent[1]);\n var max = Math.max(extent[0], extent[1]);\n return coord >= min && coord <= max;\n };\n /**\n * If axis extent contain given data\n */\n Axis.prototype.containData = function (data) {\n return this.scale.contain(data);\n };\n /**\n * Get coord extent.\n */\n Axis.prototype.getExtent = function () {\n return this._extent.slice();\n };\n /**\n * Get precision used for formatting\n */\n Axis.prototype.getPixelPrecision = function (dataExtent) {\n return getPixelPrecision(dataExtent || this.scale.getExtent(), this._extent);\n };\n /**\n * Set coord extent\n */\n Axis.prototype.setExtent = function (start, end) {\n var extent = this._extent;\n extent[0] = start;\n extent[1] = end;\n };\n /**\n * Convert data to coord. Data is the rank if it has an ordinal scale\n */\n Axis.prototype.dataToCoord = function (data, clamp) {\n var extent = this._extent;\n var scale = this.scale;\n data = scale.normalize(data);\n if (this.onBand && scale.type === 'ordinal') {\n extent = extent.slice();\n fixExtentWithBands(extent, scale.count());\n }\n return linearMap(data, NORMALIZED_EXTENT, extent, clamp);\n };\n /**\n * Convert coord to data. Data is the rank if it has an ordinal scale\n */\n Axis.prototype.coordToData = function (coord, clamp) {\n var extent = this._extent;\n var scale = this.scale;\n if (this.onBand && scale.type === 'ordinal') {\n extent = extent.slice();\n fixExtentWithBands(extent, scale.count());\n }\n var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);\n return this.scale.scale(t);\n };\n /**\n * Convert pixel point to data in axis\n */\n Axis.prototype.pointToData = function (point, clamp) {\n // Should be implemented in derived class if necessary.\n return;\n };\n /**\n * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`,\n * `axis.getTicksCoords` considers `onBand`, which is used by\n * `boundaryGap:true` of category axis and splitLine and splitArea.\n * @param opt.tickModel default: axis.model.getModel('axisTick')\n * @param opt.clamp If `true`, the first and the last\n * tick must be at the axis end points. Otherwise, clip ticks\n * that outside the axis extent.\n */\n Axis.prototype.getTicksCoords = function (opt) {\n opt = opt || {};\n var tickModel = opt.tickModel || this.getTickModel();\n var result = createAxisTicks(this, tickModel);\n var ticks = result.ticks;\n var ticksCoords = map(ticks, function (tickVal) {\n return {\n coord: this.dataToCoord(this.scale.type === 'ordinal' ? this.scale.getRawOrdinalNumber(tickVal) : tickVal),\n tickValue: tickVal\n };\n }, this);\n var alignWithLabel = tickModel.get('alignWithLabel');\n fixOnBandTicksCoords(this, ticksCoords, alignWithLabel, opt.clamp);\n return ticksCoords;\n };\n Axis.prototype.getMinorTicksCoords = function () {\n if (this.scale.type === 'ordinal') {\n // Category axis doesn't support minor ticks\n return [];\n }\n var minorTickModel = this.model.getModel('minorTick');\n var splitNumber = minorTickModel.get('splitNumber');\n // Protection.\n if (!(splitNumber > 0 && splitNumber < 100)) {\n splitNumber = 5;\n }\n var minorTicks = this.scale.getMinorTicks(splitNumber);\n var minorTicksCoords = map(minorTicks, function (minorTicksGroup) {\n return map(minorTicksGroup, function (minorTick) {\n return {\n coord: this.dataToCoord(minorTick),\n tickValue: minorTick\n };\n }, this);\n }, this);\n return minorTicksCoords;\n };\n Axis.prototype.getViewLabels = function () {\n return createAxisLabels(this).labels;\n };\n Axis.prototype.getLabelModel = function () {\n return this.model.getModel('axisLabel');\n };\n /**\n * Notice here we only get the default tick model. For splitLine\n * or splitArea, we should pass the splitLineModel or splitAreaModel\n * manually when calling `getTicksCoords`.\n * In GL, this method may be overridden to:\n * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));`\n */\n Axis.prototype.getTickModel = function () {\n return this.model.getModel('axisTick');\n };\n /**\n * Get width of band\n */\n Axis.prototype.getBandWidth = function () {\n var axisExtent = this._extent;\n var dataExtent = this.scale.getExtent();\n var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);\n // Fix #2728, avoid NaN when only one data.\n len === 0 && (len = 1);\n var size = Math.abs(axisExtent[1] - axisExtent[0]);\n return Math.abs(size) / len;\n };\n /**\n * Only be called in category axis.\n * Can be overridden, consider other axes like in 3D.\n * @return Auto interval for cateogry axis tick and label\n */\n Axis.prototype.calculateCategoryInterval = function () {\n return calculateCategoryInterval(this);\n };\n return Axis;\n}();\nfunction fixExtentWithBands(extent, nTick) {\n var size = extent[1] - extent[0];\n var len = nTick;\n var margin = size / len / 2;\n extent[0] += margin;\n extent[1] -= margin;\n}\n// If axis has labels [1, 2, 3, 4]. Bands on the axis are\n// |---1---|---2---|---3---|---4---|.\n// So the displayed ticks and splitLine/splitArea should between\n// each data item, otherwise cause misleading (e.g., split tow bars\n// of a single data item when there are two bar series).\n// Also consider if tickCategoryInterval > 0 and onBand, ticks and\n// splitLine/spliteArea should layout appropriately corresponding\n// to displayed labels. (So we should not use `getBandWidth` in this\n// case).\nfunction fixOnBandTicksCoords(axis, ticksCoords, alignWithLabel, clamp) {\n var ticksLen = ticksCoords.length;\n if (!axis.onBand || alignWithLabel || !ticksLen) {\n return;\n }\n var axisExtent = axis.getExtent();\n var last;\n var diffSize;\n if (ticksLen === 1) {\n ticksCoords[0].coord = axisExtent[0];\n last = ticksCoords[1] = {\n coord: axisExtent[1]\n };\n } else {\n var crossLen = ticksCoords[ticksLen - 1].tickValue - ticksCoords[0].tickValue;\n var shift_1 = (ticksCoords[ticksLen - 1].coord - ticksCoords[0].coord) / crossLen;\n each(ticksCoords, function (ticksItem) {\n ticksItem.coord -= shift_1 / 2;\n });\n var dataExtent = axis.scale.getExtent();\n diffSize = 1 + dataExtent[1] - ticksCoords[ticksLen - 1].tickValue;\n last = {\n coord: ticksCoords[ticksLen - 1].coord + shift_1 * diffSize\n };\n ticksCoords.push(last);\n }\n var inverse = axisExtent[0] > axisExtent[1];\n // Handling clamp.\n if (littleThan(ticksCoords[0].coord, axisExtent[0])) {\n clamp ? ticksCoords[0].coord = axisExtent[0] : ticksCoords.shift();\n }\n if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {\n ticksCoords.unshift({\n coord: axisExtent[0]\n });\n }\n if (littleThan(axisExtent[1], last.coord)) {\n clamp ? last.coord = axisExtent[1] : ticksCoords.pop();\n }\n if (clamp && littleThan(last.coord, axisExtent[1])) {\n ticksCoords.push({\n coord: axisExtent[1]\n });\n }\n function littleThan(a, b) {\n // Avoid rounding error cause calculated tick coord different with extent.\n // It may cause an extra unnecessary tick added.\n a = round(a);\n b = round(b);\n return inverse ? a > b : a < b;\n }\n}\nexport default Axis;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Axis from '../Axis.js';\nvar Axis2D = /** @class */function (_super) {\n __extends(Axis2D, _super);\n function Axis2D(dim, scale, coordExtent, axisType, position) {\n var _this = _super.call(this, dim, scale, coordExtent) || this;\n /**\n * Index of axis, can be used as key\n * Injected outside.\n */\n _this.index = 0;\n _this.type = axisType || 'value';\n _this.position = position || 'bottom';\n return _this;\n }\n Axis2D.prototype.isHorizontal = function () {\n var position = this.position;\n return position === 'top' || position === 'bottom';\n };\n /**\n * Each item cooresponds to this.getExtent(), which\n * means globalExtent[0] may greater than globalExtent[1],\n * unless `asc` is input.\n *\n * @param {boolean} [asc]\n * @return {Array.}\n */\n Axis2D.prototype.getGlobalExtent = function (asc) {\n var ret = this.getExtent();\n ret[0] = this.toGlobalCoord(ret[0]);\n ret[1] = this.toGlobalCoord(ret[1]);\n asc && ret[0] > ret[1] && ret.reverse();\n return ret;\n };\n Axis2D.prototype.pointToData = function (point, clamp) {\n return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);\n };\n /**\n * Set ordinalSortInfo\n * @param info new OrdinalSortInfo\n */\n Axis2D.prototype.setCategorySortInfo = function (info) {\n if (this.type !== 'category') {\n return false;\n }\n this.model.option.categorySortInfo = info;\n this.scale.setSortInfo(info);\n };\n return Axis2D;\n}(Axis);\nexport default Axis2D;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { getPrecisionSafe, round } from '../util/number.js';\nimport IntervalScale from '../scale/Interval.js';\nimport { getScaleExtent } from './axisHelper.js';\nimport { warn } from '../util/log.js';\nimport { increaseInterval, isValueNice } from '../scale/helper.js';\nvar mathLog = Math.log;\nexport function alignScaleTicks(scale, axisModel, alignToScale) {\n var intervalScaleProto = IntervalScale.prototype;\n // NOTE: There is a precondition for log scale here:\n // In log scale we store _interval and _extent of exponent value.\n // So if we use the method of InternalScale to set/get these data.\n // It process the exponent value, which is linear and what we want here.\n var alignToTicks = intervalScaleProto.getTicks.call(alignToScale);\n var alignToNicedTicks = intervalScaleProto.getTicks.call(alignToScale, true);\n var alignToSplitNumber = alignToTicks.length - 1;\n var alignToInterval = intervalScaleProto.getInterval.call(alignToScale);\n var scaleExtent = getScaleExtent(scale, axisModel);\n var rawExtent = scaleExtent.extent;\n var isMinFixed = scaleExtent.fixMin;\n var isMaxFixed = scaleExtent.fixMax;\n if (scale.type === 'log') {\n var logBase = mathLog(scale.base);\n rawExtent = [mathLog(rawExtent[0]) / logBase, mathLog(rawExtent[1]) / logBase];\n }\n scale.setExtent(rawExtent[0], rawExtent[1]);\n scale.calcNiceExtent({\n splitNumber: alignToSplitNumber,\n fixMin: isMinFixed,\n fixMax: isMaxFixed\n });\n var extent = intervalScaleProto.getExtent.call(scale);\n // Need to update the rawExtent.\n // Because value in rawExtent may be not parsed. e.g. 'dataMin', 'dataMax'\n if (isMinFixed) {\n rawExtent[0] = extent[0];\n }\n if (isMaxFixed) {\n rawExtent[1] = extent[1];\n }\n var interval = intervalScaleProto.getInterval.call(scale);\n var min = rawExtent[0];\n var max = rawExtent[1];\n if (isMinFixed && isMaxFixed) {\n // User set min, max, divide to get new interval\n interval = (max - min) / alignToSplitNumber;\n } else if (isMinFixed) {\n max = rawExtent[0] + interval * alignToSplitNumber;\n // User set min, expand extent on the other side\n while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1])) {\n interval = increaseInterval(interval);\n max = rawExtent[0] + interval * alignToSplitNumber;\n }\n } else if (isMaxFixed) {\n // User set max, expand extent on the other side\n min = rawExtent[1] - interval * alignToSplitNumber;\n while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0])) {\n interval = increaseInterval(interval);\n min = rawExtent[1] - interval * alignToSplitNumber;\n }\n } else {\n var nicedSplitNumber = scale.getTicks().length - 1;\n if (nicedSplitNumber > alignToSplitNumber) {\n interval = increaseInterval(interval);\n }\n var range = interval * alignToSplitNumber;\n max = Math.ceil(rawExtent[1] / interval) * interval;\n min = round(max - range);\n // Not change the result that crossing zero.\n if (min < 0 && rawExtent[0] >= 0) {\n min = 0;\n max = round(range);\n } else if (max > 0 && rawExtent[1] <= 0) {\n max = 0;\n min = -round(range);\n }\n }\n // Adjust min, max based on the extent of alignTo. When min or max is set in alignTo scale\n var t0 = (alignToTicks[0].value - alignToNicedTicks[0].value) / alignToInterval;\n var t1 = (alignToTicks[alignToSplitNumber].value - alignToNicedTicks[alignToSplitNumber].value) / alignToInterval;\n // NOTE: Must in setExtent -> setInterval -> setNiceExtent order.\n intervalScaleProto.setExtent.call(scale, min + interval * t0, max + interval * t1);\n intervalScaleProto.setInterval.call(scale, interval);\n if (t0 || t1) {\n intervalScaleProto.setNiceExtent.call(scale, min + interval, max - interval);\n }\n if (process.env.NODE_ENV !== 'production') {\n var ticks = intervalScaleProto.getTicks.call(scale);\n if (ticks[1] && (!isValueNice(interval) || getPrecisionSafe(ticks[1].value) > getPrecisionSafe(interval))) {\n warn(\n // eslint-disable-next-line\n \"The ticks may be not readable when set min: \" + axisModel.get('min') + \", max: \" + axisModel.get('max') + \" and alignTicks: true\");\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/**\n * Grid is a region which contains at most 4 cartesian systems\n *\n * TODO Default cartesian\n */\nimport { isObject, each, indexOf, retrieve3, keys } from 'zrender/lib/core/util.js';\nimport { getLayoutRect } from '../../util/layout.js';\nimport { createScaleByModel, ifAxisCrossZero, niceScaleExtent, estimateLabelUnionRect, getDataDimensionsOnAxis } from '../../coord/axisHelper.js';\nimport Cartesian2D, { cartesian2DDimensions } from './Cartesian2D.js';\nimport Axis2D from './Axis2D.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\nimport { isCartesian2DSeries, findAxisModels } from './cartesianAxisHelper.js';\nimport { isIntervalOrLogScale } from '../../scale/helper.js';\nimport { alignScaleTicks } from '../axisAlignTicks.js';\nvar Grid = /** @class */function () {\n function Grid(gridModel, ecModel, api) {\n // FIXME:TS where used (different from registered type 'cartesian2d')?\n this.type = 'grid';\n this._coordsMap = {};\n this._coordsList = [];\n this._axesMap = {};\n this._axesList = [];\n this.axisPointerEnabled = true;\n this.dimensions = cartesian2DDimensions;\n this._initCartesian(gridModel, ecModel, api);\n this.model = gridModel;\n }\n Grid.prototype.getRect = function () {\n return this._rect;\n };\n Grid.prototype.update = function (ecModel, api) {\n var axesMap = this._axesMap;\n this._updateScale(ecModel, this.model);\n function updateAxisTicks(axes) {\n var alignTo;\n // Axis is added in order of axisIndex.\n var axesIndices = keys(axes);\n var len = axesIndices.length;\n if (!len) {\n return;\n }\n var axisNeedsAlign = [];\n // Process once and calculate the ticks for those don't use alignTicks.\n for (var i = len - 1; i >= 0; i--) {\n var idx = +axesIndices[i]; // Convert to number.\n var axis = axes[idx];\n var model = axis.model;\n var scale = axis.scale;\n if (\n // Only value and log axis without interval support alignTicks.\n isIntervalOrLogScale(scale) && model.get('alignTicks') && model.get('interval') == null) {\n axisNeedsAlign.push(axis);\n } else {\n niceScaleExtent(scale, model);\n if (isIntervalOrLogScale(scale)) {\n // Can only align to interval or log axis.\n alignTo = axis;\n }\n }\n }\n ;\n // All axes has set alignTicks. Pick the first one.\n // PENDING. Should we find the axis that both set interval, min, max and align to this one?\n if (axisNeedsAlign.length) {\n if (!alignTo) {\n alignTo = axisNeedsAlign.pop();\n niceScaleExtent(alignTo.scale, alignTo.model);\n }\n each(axisNeedsAlign, function (axis) {\n alignScaleTicks(axis.scale, axis.model, alignTo.scale);\n });\n }\n }\n updateAxisTicks(axesMap.x);\n updateAxisTicks(axesMap.y);\n // Key: axisDim_axisIndex, value: boolean, whether onZero target.\n var onZeroRecords = {};\n each(axesMap.x, function (xAxis) {\n fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords);\n });\n each(axesMap.y, function (yAxis) {\n fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords);\n });\n // Resize again if containLabel is enabled\n // FIXME It may cause getting wrong grid size in data processing stage\n this.resize(this.model, api);\n };\n /**\n * Resize the grid\n */\n Grid.prototype.resize = function (gridModel, api, ignoreContainLabel) {\n var boxLayoutParams = gridModel.getBoxLayoutParams();\n var isContainLabel = !ignoreContainLabel && gridModel.get('containLabel');\n var gridRect = getLayoutRect(boxLayoutParams, {\n width: api.getWidth(),\n height: api.getHeight()\n });\n this._rect = gridRect;\n var axesList = this._axesList;\n adjustAxes();\n // Minus label size\n if (isContainLabel) {\n each(axesList, function (axis) {\n if (!axis.model.get(['axisLabel', 'inside'])) {\n var labelUnionRect = estimateLabelUnionRect(axis);\n if (labelUnionRect) {\n var dim = axis.isHorizontal() ? 'height' : 'width';\n var margin = axis.model.get(['axisLabel', 'margin']);\n gridRect[dim] -= labelUnionRect[dim] + margin;\n if (axis.position === 'top') {\n gridRect.y += labelUnionRect.height + margin;\n } else if (axis.position === 'left') {\n gridRect.x += labelUnionRect.width + margin;\n }\n }\n }\n });\n adjustAxes();\n }\n each(this._coordsList, function (coord) {\n // Calculate affine matrix to accelerate the data to point transform.\n // If all the axes scales are time or value.\n coord.calcAffineTransform();\n });\n function adjustAxes() {\n each(axesList, function (axis) {\n var isHorizontal = axis.isHorizontal();\n var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];\n var idx = axis.inverse ? 1 : 0;\n axis.setExtent(extent[idx], extent[1 - idx]);\n updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);\n });\n }\n };\n Grid.prototype.getAxis = function (dim, axisIndex) {\n var axesMapOnDim = this._axesMap[dim];\n if (axesMapOnDim != null) {\n return axesMapOnDim[axisIndex || 0];\n }\n };\n Grid.prototype.getAxes = function () {\n return this._axesList.slice();\n };\n Grid.prototype.getCartesian = function (xAxisIndex, yAxisIndex) {\n if (xAxisIndex != null && yAxisIndex != null) {\n var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n return this._coordsMap[key];\n }\n if (isObject(xAxisIndex)) {\n yAxisIndex = xAxisIndex.yAxisIndex;\n xAxisIndex = xAxisIndex.xAxisIndex;\n }\n for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {\n if (coordList[i].getAxis('x').index === xAxisIndex || coordList[i].getAxis('y').index === yAxisIndex) {\n return coordList[i];\n }\n }\n };\n Grid.prototype.getCartesians = function () {\n return this._coordsList.slice();\n };\n /**\n * @implements\n */\n Grid.prototype.convertToPixel = function (ecModel, finder, value) {\n var target = this._findConvertTarget(finder);\n return target.cartesian ? target.cartesian.dataToPoint(value) : target.axis ? target.axis.toGlobalCoord(target.axis.dataToCoord(value)) : null;\n };\n /**\n * @implements\n */\n Grid.prototype.convertFromPixel = function (ecModel, finder, value) {\n var target = this._findConvertTarget(finder);\n return target.cartesian ? target.cartesian.pointToData(value) : target.axis ? target.axis.coordToData(target.axis.toLocalCoord(value)) : null;\n };\n Grid.prototype._findConvertTarget = function (finder) {\n var seriesModel = finder.seriesModel;\n var xAxisModel = finder.xAxisModel || seriesModel && seriesModel.getReferringComponents('xAxis', SINGLE_REFERRING).models[0];\n var yAxisModel = finder.yAxisModel || seriesModel && seriesModel.getReferringComponents('yAxis', SINGLE_REFERRING).models[0];\n var gridModel = finder.gridModel;\n var coordsList = this._coordsList;\n var cartesian;\n var axis;\n if (seriesModel) {\n cartesian = seriesModel.coordinateSystem;\n indexOf(coordsList, cartesian) < 0 && (cartesian = null);\n } else if (xAxisModel && yAxisModel) {\n cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n } else if (xAxisModel) {\n axis = this.getAxis('x', xAxisModel.componentIndex);\n } else if (yAxisModel) {\n axis = this.getAxis('y', yAxisModel.componentIndex);\n }\n // Lowest priority.\n else if (gridModel) {\n var grid = gridModel.coordinateSystem;\n if (grid === this) {\n cartesian = this._coordsList[0];\n }\n }\n return {\n cartesian: cartesian,\n axis: axis\n };\n };\n /**\n * @implements\n */\n Grid.prototype.containPoint = function (point) {\n var coord = this._coordsList[0];\n if (coord) {\n return coord.containPoint(point);\n }\n };\n /**\n * Initialize cartesian coordinate systems\n */\n Grid.prototype._initCartesian = function (gridModel, ecModel, api) {\n var _this = this;\n var grid = this;\n var axisPositionUsed = {\n left: false,\n right: false,\n top: false,\n bottom: false\n };\n var axesMap = {\n x: {},\n y: {}\n };\n var axesCount = {\n x: 0,\n y: 0\n };\n // Create axis\n ecModel.eachComponent('xAxis', createAxisCreator('x'), this);\n ecModel.eachComponent('yAxis', createAxisCreator('y'), this);\n if (!axesCount.x || !axesCount.y) {\n // Roll back when there no either x or y axis\n this._axesMap = {};\n this._axesList = [];\n return;\n }\n this._axesMap = axesMap;\n // Create cartesian2d\n each(axesMap.x, function (xAxis, xAxisIndex) {\n each(axesMap.y, function (yAxis, yAxisIndex) {\n var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n var cartesian = new Cartesian2D(key);\n cartesian.master = _this;\n cartesian.model = gridModel;\n _this._coordsMap[key] = cartesian;\n _this._coordsList.push(cartesian);\n cartesian.addAxis(xAxis);\n cartesian.addAxis(yAxis);\n });\n });\n function createAxisCreator(dimName) {\n return function (axisModel, idx) {\n if (!isAxisUsedInTheGrid(axisModel, gridModel)) {\n return;\n }\n var axisPosition = axisModel.get('position');\n if (dimName === 'x') {\n // Fix position\n if (axisPosition !== 'top' && axisPosition !== 'bottom') {\n // Default bottom of X\n axisPosition = axisPositionUsed.bottom ? 'top' : 'bottom';\n }\n } else {\n // Fix position\n if (axisPosition !== 'left' && axisPosition !== 'right') {\n // Default left of Y\n axisPosition = axisPositionUsed.left ? 'right' : 'left';\n }\n }\n axisPositionUsed[axisPosition] = true;\n var axis = new Axis2D(dimName, createScaleByModel(axisModel), [0, 0], axisModel.get('type'), axisPosition);\n var isCategory = axis.type === 'category';\n axis.onBand = isCategory && axisModel.get('boundaryGap');\n axis.inverse = axisModel.get('inverse');\n // Inject axis into axisModel\n axisModel.axis = axis;\n // Inject axisModel into axis\n axis.model = axisModel;\n // Inject grid info axis\n axis.grid = grid;\n // Index of axis, can be used as key\n axis.index = idx;\n grid._axesList.push(axis);\n axesMap[dimName][idx] = axis;\n axesCount[dimName]++;\n };\n }\n };\n /**\n * Update cartesian properties from series.\n */\n Grid.prototype._updateScale = function (ecModel, gridModel) {\n // Reset scale\n each(this._axesList, function (axis) {\n axis.scale.setExtent(Infinity, -Infinity);\n if (axis.type === 'category') {\n var categorySortInfo = axis.model.get('categorySortInfo');\n axis.scale.setSortInfo(categorySortInfo);\n }\n });\n ecModel.eachSeries(function (seriesModel) {\n if (isCartesian2DSeries(seriesModel)) {\n var axesModelMap = findAxisModels(seriesModel);\n var xAxisModel = axesModelMap.xAxisModel;\n var yAxisModel = axesModelMap.yAxisModel;\n if (!isAxisUsedInTheGrid(xAxisModel, gridModel) || !isAxisUsedInTheGrid(yAxisModel, gridModel)) {\n return;\n }\n var cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n var data = seriesModel.getData();\n var xAxis = cartesian.getAxis('x');\n var yAxis = cartesian.getAxis('y');\n unionExtent(data, xAxis);\n unionExtent(data, yAxis);\n }\n }, this);\n function unionExtent(data, axis) {\n each(getDataDimensionsOnAxis(data, axis.dim), function (dim) {\n axis.scale.unionExtentFromData(data, dim);\n });\n }\n };\n /**\n * @param dim 'x' or 'y' or 'auto' or null/undefined\n */\n Grid.prototype.getTooltipAxes = function (dim) {\n var baseAxes = [];\n var otherAxes = [];\n each(this.getCartesians(), function (cartesian) {\n var baseAxis = dim != null && dim !== 'auto' ? cartesian.getAxis(dim) : cartesian.getBaseAxis();\n var otherAxis = cartesian.getOtherAxis(baseAxis);\n indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);\n indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);\n });\n return {\n baseAxes: baseAxes,\n otherAxes: otherAxes\n };\n };\n Grid.create = function (ecModel, api) {\n var grids = [];\n ecModel.eachComponent('grid', function (gridModel, idx) {\n var grid = new Grid(gridModel, ecModel, api);\n grid.name = 'grid_' + idx;\n // dataSampling requires axis extent, so resize\n // should be performed in create stage.\n grid.resize(gridModel, api, true);\n gridModel.coordinateSystem = grid;\n grids.push(grid);\n });\n // Inject the coordinateSystems into seriesModel\n ecModel.eachSeries(function (seriesModel) {\n if (!isCartesian2DSeries(seriesModel)) {\n return;\n }\n var axesModelMap = findAxisModels(seriesModel);\n var xAxisModel = axesModelMap.xAxisModel;\n var yAxisModel = axesModelMap.yAxisModel;\n var gridModel = xAxisModel.getCoordSysModel();\n if (process.env.NODE_ENV !== 'production') {\n if (!gridModel) {\n throw new Error('Grid \"' + retrieve3(xAxisModel.get('gridIndex'), xAxisModel.get('gridId'), 0) + '\" not found');\n }\n if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) {\n throw new Error('xAxis and yAxis must use the same grid');\n }\n }\n var grid = gridModel.coordinateSystem;\n seriesModel.coordinateSystem = grid.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n });\n return grids;\n };\n // For deciding which dimensions to use when creating list data\n Grid.dimensions = cartesian2DDimensions;\n return Grid;\n}();\n/**\n * Check if the axis is used in the specified grid.\n */\nfunction isAxisUsedInTheGrid(axisModel, gridModel) {\n return axisModel.getCoordSysModel() === gridModel;\n}\nfunction fixAxisOnZero(axesMap, otherAxisDim, axis,\n// Key: see `getOnZeroRecordKey`\nonZeroRecords) {\n axis.getAxesOnZeroOf = function () {\n // TODO: onZero of multiple axes.\n return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : [];\n };\n // onZero can not be enabled in these two situations:\n // 1. When any other axis is a category axis.\n // 2. When no axis is cross 0 point.\n var otherAxes = axesMap[otherAxisDim];\n var otherAxisOnZeroOf;\n var axisModel = axis.model;\n var onZero = axisModel.get(['axisLine', 'onZero']);\n var onZeroAxisIndex = axisModel.get(['axisLine', 'onZeroAxisIndex']);\n if (!onZero) {\n return;\n }\n // If target axis is specified.\n if (onZeroAxisIndex != null) {\n if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {\n otherAxisOnZeroOf = otherAxes[onZeroAxisIndex];\n }\n } else {\n // Find the first available other axis.\n for (var idx in otherAxes) {\n if (otherAxes.hasOwnProperty(idx) && canOnZeroToAxis(otherAxes[idx])\n // Consider that two Y axes on one value axis,\n // if both onZero, the two Y axes overlap.\n && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]) {\n otherAxisOnZeroOf = otherAxes[idx];\n break;\n }\n }\n }\n if (otherAxisOnZeroOf) {\n onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true;\n }\n function getOnZeroRecordKey(axis) {\n return axis.dim + '_' + axis.index;\n }\n}\nfunction canOnZeroToAxis(axis) {\n return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis);\n}\nfunction updateAxisTransform(axis, coordBase) {\n var axisExtent = axis.getExtent();\n var axisExtentSum = axisExtent[0] + axisExtent[1];\n // Fast transform\n axis.toGlobalCoord = axis.dim === 'x' ? function (coord) {\n return coord + coordBase;\n } : function (coord) {\n return axisExtentSum - coord + coordBase;\n };\n axis.toLocalCoord = axis.dim === 'x' ? function (coord) {\n return coord - coordBase;\n } : function (coord) {\n return axisExtentSum - coord + coordBase;\n };\n}\nexport default Grid;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { makeInner } from '../../util/model.js';\nvar inner = makeInner();\nexport function rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel) {\n var axis = axisModel.axis;\n if (axis.scale.isBlank()) {\n return;\n }\n // TODO: TYPE\n var splitAreaModel = axisModel.getModel('splitArea');\n var areaStyleModel = splitAreaModel.getModel('areaStyle');\n var areaColors = areaStyleModel.get('color');\n var gridRect = gridModel.coordinateSystem.getRect();\n var ticksCoords = axis.getTicksCoords({\n tickModel: splitAreaModel,\n clamp: true\n });\n if (!ticksCoords.length) {\n return;\n }\n // For Making appropriate splitArea animation, the color and anid\n // should be corresponding to previous one if possible.\n var areaColorsLen = areaColors.length;\n var lastSplitAreaColors = inner(axisView).splitAreaColors;\n var newSplitAreaColors = zrUtil.createHashMap();\n var colorIndex = 0;\n if (lastSplitAreaColors) {\n for (var i = 0; i < ticksCoords.length; i++) {\n var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);\n if (cIndex != null) {\n colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;\n break;\n }\n }\n }\n var prev = axis.toGlobalCoord(ticksCoords[0].coord);\n var areaStyle = areaStyleModel.getAreaStyle();\n areaColors = zrUtil.isArray(areaColors) ? areaColors : [areaColors];\n for (var i = 1; i < ticksCoords.length; i++) {\n var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n var x = void 0;\n var y = void 0;\n var width = void 0;\n var height = void 0;\n if (axis.isHorizontal()) {\n x = prev;\n y = gridRect.y;\n width = tickCoord - x;\n height = gridRect.height;\n prev = x + width;\n } else {\n x = gridRect.x;\n y = prev;\n width = gridRect.width;\n height = tickCoord - y;\n prev = y + height;\n }\n var tickValue = ticksCoords[i - 1].tickValue;\n tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);\n axisGroup.add(new graphic.Rect({\n anid: tickValue != null ? 'area_' + tickValue : null,\n shape: {\n x: x,\n y: y,\n width: width,\n height: height\n },\n style: zrUtil.defaults({\n fill: areaColors[colorIndex]\n }, areaStyle),\n autoBatch: true,\n silent: true\n }));\n colorIndex = (colorIndex + 1) % areaColorsLen;\n }\n inner(axisView).splitAreaColors = newSplitAreaColors;\n}\nexport function rectCoordAxisHandleRemove(axisView) {\n inner(axisView).splitAreaColors = null;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport AxisBuilder from './AxisBuilder.js';\nimport AxisView from './AxisView.js';\nimport * as cartesianAxisHelper from '../../coord/cartesian/cartesianAxisHelper.js';\nimport { rectCoordAxisBuildSplitArea, rectCoordAxisHandleRemove } from './axisSplitHelper.js';\nimport { isIntervalOrLogScale } from '../../scale/helper.js';\nvar axisBuilderAttrs = ['axisLine', 'axisTickLabel', 'axisName'];\nvar selfBuilderAttrs = ['splitArea', 'splitLine', 'minorSplitLine'];\nvar CartesianAxisView = /** @class */function (_super) {\n __extends(CartesianAxisView, _super);\n function CartesianAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = CartesianAxisView.type;\n _this.axisPointerClass = 'CartesianAxisPointer';\n return _this;\n }\n /**\n * @override\n */\n CartesianAxisView.prototype.render = function (axisModel, ecModel, api, payload) {\n this.group.removeAll();\n var oldAxisGroup = this._axisGroup;\n this._axisGroup = new graphic.Group();\n this.group.add(this._axisGroup);\n if (!axisModel.get('show')) {\n return;\n }\n var gridModel = axisModel.getCoordSysModel();\n var layout = cartesianAxisHelper.layout(gridModel, axisModel);\n var axisBuilder = new AxisBuilder(axisModel, zrUtil.extend({\n handleAutoShown: function (elementType) {\n var cartesians = gridModel.coordinateSystem.getCartesians();\n for (var i = 0; i < cartesians.length; i++) {\n if (isIntervalOrLogScale(cartesians[i].getOtherAxis(axisModel.axis).scale)) {\n // Still show axis tick or axisLine if other axis is value / log\n return true;\n }\n }\n // Not show axisTick or axisLine if other axis is category / time\n return false;\n }\n }, layout));\n zrUtil.each(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n this._axisGroup.add(axisBuilder.getGroup());\n zrUtil.each(selfBuilderAttrs, function (name) {\n if (axisModel.get([name, 'show'])) {\n axisElementBuilders[name](this, this._axisGroup, axisModel, gridModel);\n }\n }, this);\n // THIS is a special case for bar racing chart.\n // Update the axis label from the natural initial layout to\n // sorted layout should has no animation.\n var isInitialSortFromBarRacing = payload && payload.type === 'changeAxisOrder' && payload.isInitSort;\n if (!isInitialSortFromBarRacing) {\n graphic.groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n }\n _super.prototype.render.call(this, axisModel, ecModel, api, payload);\n };\n CartesianAxisView.prototype.remove = function () {\n rectCoordAxisHandleRemove(this);\n };\n CartesianAxisView.type = 'cartesianAxis';\n return CartesianAxisView;\n}(AxisView);\nvar axisElementBuilders = {\n splitLine: function (axisView, axisGroup, axisModel, gridModel) {\n var axis = axisModel.axis;\n if (axis.scale.isBlank()) {\n return;\n }\n var splitLineModel = axisModel.getModel('splitLine');\n var lineStyleModel = splitLineModel.getModel('lineStyle');\n var lineColors = lineStyleModel.get('color');\n lineColors = zrUtil.isArray(lineColors) ? lineColors : [lineColors];\n var gridRect = gridModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var lineCount = 0;\n var ticksCoords = axis.getTicksCoords({\n tickModel: splitLineModel\n });\n var p1 = [];\n var p2 = [];\n var lineStyle = lineStyleModel.getLineStyle();\n for (var i = 0; i < ticksCoords.length; i++) {\n var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\n } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n var colorIndex = lineCount++ % lineColors.length;\n var tickValue = ticksCoords[i].tickValue;\n var line = new graphic.Line({\n anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null,\n autoBatch: true,\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n style: zrUtil.defaults({\n stroke: lineColors[colorIndex]\n }, lineStyle),\n silent: true\n });\n graphic.subPixelOptimizeLine(line.shape, lineStyle.lineWidth);\n axisGroup.add(line);\n }\n },\n minorSplitLine: function (axisView, axisGroup, axisModel, gridModel) {\n var axis = axisModel.axis;\n var minorSplitLineModel = axisModel.getModel('minorSplitLine');\n var lineStyleModel = minorSplitLineModel.getModel('lineStyle');\n var gridRect = gridModel.coordinateSystem.getRect();\n var isHorizontal = axis.isHorizontal();\n var minorTicksCoords = axis.getMinorTicksCoords();\n if (!minorTicksCoords.length) {\n return;\n }\n var p1 = [];\n var p2 = [];\n var lineStyle = lineStyleModel.getLineStyle();\n for (var i = 0; i < minorTicksCoords.length; i++) {\n for (var k = 0; k < minorTicksCoords[i].length; k++) {\n var tickCoord = axis.toGlobalCoord(minorTicksCoords[i][k].coord);\n if (isHorizontal) {\n p1[0] = tickCoord;\n p1[1] = gridRect.y;\n p2[0] = tickCoord;\n p2[1] = gridRect.y + gridRect.height;\n } else {\n p1[0] = gridRect.x;\n p1[1] = tickCoord;\n p2[0] = gridRect.x + gridRect.width;\n p2[1] = tickCoord;\n }\n var line = new graphic.Line({\n anid: 'minor_line_' + minorTicksCoords[i][k].tickValue,\n autoBatch: true,\n shape: {\n x1: p1[0],\n y1: p1[1],\n x2: p2[0],\n y2: p2[1]\n },\n style: lineStyle,\n silent: true\n });\n graphic.subPixelOptimizeLine(line.shape, lineStyle.lineWidth);\n axisGroup.add(line);\n }\n }\n },\n splitArea: function (axisView, axisGroup, axisModel, gridModel) {\n rectCoordAxisBuildSplitArea(axisView, axisGroup, axisModel, gridModel);\n }\n};\nvar CartesianXAxisView = /** @class */function (_super) {\n __extends(CartesianXAxisView, _super);\n function CartesianXAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = CartesianXAxisView.type;\n return _this;\n }\n CartesianXAxisView.type = 'xAxis';\n return CartesianXAxisView;\n}(CartesianAxisView);\nexport { CartesianXAxisView };\nvar CartesianYAxisView = /** @class */function (_super) {\n __extends(CartesianYAxisView, _super);\n function CartesianYAxisView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = CartesianXAxisView.type;\n return _this;\n }\n CartesianYAxisView.type = 'yAxis';\n return CartesianYAxisView;\n}(CartesianAxisView);\nexport { CartesianYAxisView };\nexport default CartesianAxisView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentView from '../../view/Component.js';\nimport GridModel from '../../coord/cartesian/GridModel.js';\nimport { Rect } from '../../util/graphic.js';\nimport { defaults } from 'zrender/lib/core/util.js';\nimport { CartesianAxisModel } from '../../coord/cartesian/AxisModel.js';\nimport axisModelCreator from '../../coord/axisModelCreator.js';\nimport Grid from '../../coord/cartesian/Grid.js';\nimport { CartesianXAxisView, CartesianYAxisView } from '../axis/CartesianAxisView.js';\n// Grid view\nvar GridView = /** @class */function (_super) {\n __extends(GridView, _super);\n function GridView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'grid';\n return _this;\n }\n GridView.prototype.render = function (gridModel, ecModel) {\n this.group.removeAll();\n if (gridModel.get('show')) {\n this.group.add(new Rect({\n shape: gridModel.coordinateSystem.getRect(),\n style: defaults({\n fill: gridModel.get('backgroundColor')\n }, gridModel.getItemStyle()),\n silent: true,\n z2: -1\n }));\n }\n };\n GridView.type = 'grid';\n return GridView;\n}(ComponentView);\nvar extraOption = {\n // gridIndex: 0,\n // gridId: '',\n offset: 0\n};\nexport function install(registers) {\n registers.registerComponentView(GridView);\n registers.registerComponentModel(GridModel);\n registers.registerCoordinateSystem('cartesian2d', Grid);\n axisModelCreator(registers, 'x', CartesianAxisModel, extraOption);\n axisModelCreator(registers, 'y', CartesianAxisModel, extraOption);\n registers.registerComponentView(CartesianXAxisView);\n registers.registerComponentView(CartesianYAxisView);\n registers.registerPreprocessor(function (option) {\n // Only create grid when need\n if (option.xAxis && option.yAxis && !option.grid) {\n option.grid = {};\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { install as installSimple } from './installSimple.js';\nimport { install as installAxisPointer } from '../axisPointer/install.js';\nimport { use } from '../../extension.js';\nexport function install(registers) {\n use(installSimple);\n use(installAxisPointer);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { indexOf, createHashMap, assert } from 'zrender/lib/core/util.js';\nexport var DATA_ZOOM_AXIS_DIMENSIONS = ['x', 'y', 'radius', 'angle', 'single'];\n// Supported coords.\n// FIXME: polar has been broken (but rarely used).\nvar SERIES_COORDS = ['cartesian2d', 'polar', 'singleAxis'];\nexport function isCoordSupported(seriesModel) {\n var coordType = seriesModel.get('coordinateSystem');\n return indexOf(SERIES_COORDS, coordType) >= 0;\n}\nexport function getAxisMainType(axisDim) {\n if (process.env.NODE_ENV !== 'production') {\n assert(axisDim);\n }\n return axisDim + 'Axis';\n}\nexport function getAxisIndexPropName(axisDim) {\n if (process.env.NODE_ENV !== 'production') {\n assert(axisDim);\n }\n return axisDim + 'AxisIndex';\n}\nexport function getAxisIdPropName(axisDim) {\n if (process.env.NODE_ENV !== 'production') {\n assert(axisDim);\n }\n return axisDim + 'AxisId';\n}\n/**\n * If two dataZoomModels has the same axis controlled, we say that they are 'linked'.\n * This function finds all linked dataZoomModels start from the given payload.\n */\nexport function findEffectedDataZooms(ecModel, payload) {\n // Key: `DataZoomAxisDimension`\n var axisRecords = createHashMap();\n var effectedModels = [];\n // Key: uid of dataZoomModel\n var effectedModelMap = createHashMap();\n // Find the dataZooms specified by payload.\n ecModel.eachComponent({\n mainType: 'dataZoom',\n query: payload\n }, function (dataZoomModel) {\n if (!effectedModelMap.get(dataZoomModel.uid)) {\n addToEffected(dataZoomModel);\n }\n });\n // Start from the given dataZoomModels, travel the graph to find\n // all of the linked dataZoom models.\n var foundNewLink;\n do {\n foundNewLink = false;\n ecModel.eachComponent('dataZoom', processSingle);\n } while (foundNewLink);\n function processSingle(dataZoomModel) {\n if (!effectedModelMap.get(dataZoomModel.uid) && isLinked(dataZoomModel)) {\n addToEffected(dataZoomModel);\n foundNewLink = true;\n }\n }\n function addToEffected(dataZoom) {\n effectedModelMap.set(dataZoom.uid, true);\n effectedModels.push(dataZoom);\n markAxisControlled(dataZoom);\n }\n function isLinked(dataZoomModel) {\n var isLink = false;\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n var axisIdxArr = axisRecords.get(axisDim);\n if (axisIdxArr && axisIdxArr[axisIndex]) {\n isLink = true;\n }\n });\n return isLink;\n }\n function markAxisControlled(dataZoomModel) {\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n (axisRecords.get(axisDim) || axisRecords.set(axisDim, []))[axisIndex] = true;\n });\n }\n return effectedModels;\n}\n/**\n * Find the first target coordinate system.\n * Available after model built.\n *\n * @return Like {\n * grid: [\n * {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},\n * {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},\n * ...\n * ], // cartesians must not be null/undefined.\n * polar: [\n * {model: coord0, axisModels: [axis4], coordIndex: 0},\n * ...\n * ], // polars must not be null/undefined.\n * singleAxis: [\n * {model: coord0, axisModels: [], coordIndex: 0}\n * ]\n * }\n */\nexport function collectReferCoordSysModelInfo(dataZoomModel) {\n var ecModel = dataZoomModel.ecModel;\n var coordSysInfoWrap = {\n infoList: [],\n infoMap: createHashMap()\n };\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex);\n if (!axisModel) {\n return;\n }\n var coordSysModel = axisModel.getCoordSysModel();\n if (!coordSysModel) {\n return;\n }\n var coordSysUid = coordSysModel.uid;\n var coordSysInfo = coordSysInfoWrap.infoMap.get(coordSysUid);\n if (!coordSysInfo) {\n coordSysInfo = {\n model: coordSysModel,\n axisModels: []\n };\n coordSysInfoWrap.infoList.push(coordSysInfo);\n coordSysInfoWrap.infoMap.set(coordSysUid, coordSysInfo);\n }\n coordSysInfo.axisModels.push(axisModel);\n });\n return coordSysInfoWrap;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { each, createHashMap, merge, assert } from 'zrender/lib/core/util.js';\nimport ComponentModel from '../../model/Component.js';\nimport { getAxisMainType, DATA_ZOOM_AXIS_DIMENSIONS } from './helper.js';\nimport { MULTIPLE_REFERRING, SINGLE_REFERRING } from '../../util/model.js';\nvar DataZoomAxisInfo = /** @class */function () {\n function DataZoomAxisInfo() {\n this.indexList = [];\n this.indexMap = [];\n }\n DataZoomAxisInfo.prototype.add = function (axisCmptIdx) {\n // Remove duplication.\n if (!this.indexMap[axisCmptIdx]) {\n this.indexList.push(axisCmptIdx);\n this.indexMap[axisCmptIdx] = true;\n }\n };\n return DataZoomAxisInfo;\n}();\nvar DataZoomModel = /** @class */function (_super) {\n __extends(DataZoomModel, _super);\n function DataZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = DataZoomModel.type;\n _this._autoThrottle = true;\n _this._noTarget = true;\n /**\n * It is `[rangeModeForMin, rangeModeForMax]`.\n * The optional values for `rangeMode`:\n * + `'value'` mode: the axis extent will always be determined by\n * `dataZoom.startValue` and `dataZoom.endValue`, despite\n * how data like and how `axis.min` and `axis.max` are.\n * + `'percent'` mode: `100` represents 100% of the `[dMin, dMax]`,\n * where `dMin` is `axis.min` if `axis.min` specified, otherwise `data.extent[0]`,\n * and `dMax` is `axis.max` if `axis.max` specified, otherwise `data.extent[1]`.\n * Axis extent will be determined by the result of the percent of `[dMin, dMax]`.\n *\n * For example, when users are using dynamic data (update data periodically via `setOption`),\n * if in `'value`' mode, the window will be kept in a fixed value range despite how\n * data are appended, while if in `'percent'` mode, whe window range will be changed alone with\n * the appended data (suppose `axis.min` and `axis.max` are not specified).\n */\n _this._rangePropMode = ['percent', 'percent'];\n return _this;\n }\n DataZoomModel.prototype.init = function (option, parentModel, ecModel) {\n var inputRawOption = retrieveRawOption(option);\n /**\n * Suppose a \"main process\" start at the point that model prepared (that is,\n * model initialized or merged or method called in `action`).\n * We should keep the `main process` idempotent, that is, given a set of values\n * on `option`, we get the same result.\n *\n * But sometimes, values on `option` will be updated for providing users\n * a \"final calculated value\" (`dataZoomProcessor` will do that). Those value\n * should not be the base/input of the `main process`.\n *\n * So in that case we should save and keep the input of the `main process`\n * separately, called `settledOption`.\n *\n * For example, consider the case:\n * (Step_1) brush zoom the grid by `toolbox.dataZoom`,\n * where the original input `option.startValue`, `option.endValue` are earsed by\n * calculated value.\n * (Step)2) click the legend to hide and show a series,\n * where the new range is calculated by the earsed `startValue` and `endValue`,\n * which brings incorrect result.\n */\n this.settledOption = inputRawOption;\n this.mergeDefaultAndTheme(option, ecModel);\n this._doInit(inputRawOption);\n };\n DataZoomModel.prototype.mergeOption = function (newOption) {\n var inputRawOption = retrieveRawOption(newOption);\n // FIX #2591\n merge(this.option, newOption, true);\n merge(this.settledOption, inputRawOption, true);\n this._doInit(inputRawOption);\n };\n DataZoomModel.prototype._doInit = function (inputRawOption) {\n var thisOption = this.option;\n this._setDefaultThrottle(inputRawOption);\n this._updateRangeUse(inputRawOption);\n var settledOption = this.settledOption;\n each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n // start/end has higher priority over startValue/endValue if they\n // both set, but we should make chart.setOption({endValue: 1000})\n // effective, rather than chart.setOption({endValue: 1000, end: null}).\n if (this._rangePropMode[index] === 'value') {\n thisOption[names[0]] = settledOption[names[0]] = null;\n }\n // Otherwise do nothing and use the merge result.\n }, this);\n this._resetTarget();\n };\n DataZoomModel.prototype._resetTarget = function () {\n var optionOrient = this.get('orient', true);\n var targetAxisIndexMap = this._targetAxisInfoMap = createHashMap();\n var hasAxisSpecified = this._fillSpecifiedTargetAxis(targetAxisIndexMap);\n if (hasAxisSpecified) {\n this._orient = optionOrient || this._makeAutoOrientByTargetAxis();\n } else {\n this._orient = optionOrient || 'horizontal';\n this._fillAutoTargetAxisByOrient(targetAxisIndexMap, this._orient);\n }\n this._noTarget = true;\n targetAxisIndexMap.each(function (axisInfo) {\n if (axisInfo.indexList.length) {\n this._noTarget = false;\n }\n }, this);\n };\n DataZoomModel.prototype._fillSpecifiedTargetAxis = function (targetAxisIndexMap) {\n var hasAxisSpecified = false;\n each(DATA_ZOOM_AXIS_DIMENSIONS, function (axisDim) {\n var refering = this.getReferringComponents(getAxisMainType(axisDim), MULTIPLE_REFERRING);\n // When user set axisIndex as a empty array, we think that user specify axisIndex\n // but do not want use auto mode. Because empty array may be encountered when\n // some error occurred.\n if (!refering.specified) {\n return;\n }\n hasAxisSpecified = true;\n var axisInfo = new DataZoomAxisInfo();\n each(refering.models, function (axisModel) {\n axisInfo.add(axisModel.componentIndex);\n });\n targetAxisIndexMap.set(axisDim, axisInfo);\n }, this);\n return hasAxisSpecified;\n };\n DataZoomModel.prototype._fillAutoTargetAxisByOrient = function (targetAxisIndexMap, orient) {\n var ecModel = this.ecModel;\n var needAuto = true;\n // Find axis that parallel to dataZoom as default.\n if (needAuto) {\n var axisDim = orient === 'vertical' ? 'y' : 'x';\n var axisModels = ecModel.findComponents({\n mainType: axisDim + 'Axis'\n });\n setParallelAxis(axisModels, axisDim);\n }\n // Find axis that parallel to dataZoom as default.\n if (needAuto) {\n var axisModels = ecModel.findComponents({\n mainType: 'singleAxis',\n filter: function (axisModel) {\n return axisModel.get('orient', true) === orient;\n }\n });\n setParallelAxis(axisModels, 'single');\n }\n function setParallelAxis(axisModels, axisDim) {\n // At least use the first parallel axis as the target axis.\n var axisModel = axisModels[0];\n if (!axisModel) {\n return;\n }\n var axisInfo = new DataZoomAxisInfo();\n axisInfo.add(axisModel.componentIndex);\n targetAxisIndexMap.set(axisDim, axisInfo);\n needAuto = false;\n // Find parallel axes in the same grid.\n if (axisDim === 'x' || axisDim === 'y') {\n var gridModel_1 = axisModel.getReferringComponents('grid', SINGLE_REFERRING).models[0];\n gridModel_1 && each(axisModels, function (axModel) {\n if (axisModel.componentIndex !== axModel.componentIndex && gridModel_1 === axModel.getReferringComponents('grid', SINGLE_REFERRING).models[0]) {\n axisInfo.add(axModel.componentIndex);\n }\n });\n }\n }\n if (needAuto) {\n // If no parallel axis, find the first category axis as default. (Also consider polar).\n each(DATA_ZOOM_AXIS_DIMENSIONS, function (axisDim) {\n if (!needAuto) {\n return;\n }\n var axisModels = ecModel.findComponents({\n mainType: getAxisMainType(axisDim),\n filter: function (axisModel) {\n return axisModel.get('type', true) === 'category';\n }\n });\n if (axisModels[0]) {\n var axisInfo = new DataZoomAxisInfo();\n axisInfo.add(axisModels[0].componentIndex);\n targetAxisIndexMap.set(axisDim, axisInfo);\n needAuto = false;\n }\n }, this);\n }\n };\n DataZoomModel.prototype._makeAutoOrientByTargetAxis = function () {\n var dim;\n // Find the first axis\n this.eachTargetAxis(function (axisDim) {\n !dim && (dim = axisDim);\n }, this);\n return dim === 'y' ? 'vertical' : 'horizontal';\n };\n DataZoomModel.prototype._setDefaultThrottle = function (inputRawOption) {\n // When first time user set throttle, auto throttle ends.\n if (inputRawOption.hasOwnProperty('throttle')) {\n this._autoThrottle = false;\n }\n if (this._autoThrottle) {\n var globalOption = this.ecModel.option;\n this.option.throttle = globalOption.animation && globalOption.animationDurationUpdate > 0 ? 100 : 20;\n }\n };\n DataZoomModel.prototype._updateRangeUse = function (inputRawOption) {\n var rangePropMode = this._rangePropMode;\n var rangeModeInOption = this.get('rangeMode');\n each([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n var percentSpecified = inputRawOption[names[0]] != null;\n var valueSpecified = inputRawOption[names[1]] != null;\n if (percentSpecified && !valueSpecified) {\n rangePropMode[index] = 'percent';\n } else if (!percentSpecified && valueSpecified) {\n rangePropMode[index] = 'value';\n } else if (rangeModeInOption) {\n rangePropMode[index] = rangeModeInOption[index];\n } else if (percentSpecified) {\n // percentSpecified && valueSpecified\n rangePropMode[index] = 'percent';\n }\n // else remain its original setting.\n });\n };\n\n DataZoomModel.prototype.noTarget = function () {\n return this._noTarget;\n };\n DataZoomModel.prototype.getFirstTargetAxisModel = function () {\n var firstAxisModel;\n this.eachTargetAxis(function (axisDim, axisIndex) {\n if (firstAxisModel == null) {\n firstAxisModel = this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex);\n }\n }, this);\n return firstAxisModel;\n };\n /**\n * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel\n */\n DataZoomModel.prototype.eachTargetAxis = function (callback, context) {\n this._targetAxisInfoMap.each(function (axisInfo, axisDim) {\n each(axisInfo.indexList, function (axisIndex) {\n callback.call(context, axisDim, axisIndex);\n });\n });\n };\n /**\n * @return If not found, return null/undefined.\n */\n DataZoomModel.prototype.getAxisProxy = function (axisDim, axisIndex) {\n var axisModel = this.getAxisModel(axisDim, axisIndex);\n if (axisModel) {\n return axisModel.__dzAxisProxy;\n }\n };\n /**\n * @return If not found, return null/undefined.\n */\n DataZoomModel.prototype.getAxisModel = function (axisDim, axisIndex) {\n if (process.env.NODE_ENV !== 'production') {\n assert(axisDim && axisIndex != null);\n }\n var axisInfo = this._targetAxisInfoMap.get(axisDim);\n if (axisInfo && axisInfo.indexMap[axisIndex]) {\n return this.ecModel.getComponent(getAxisMainType(axisDim), axisIndex);\n }\n };\n /**\n * If not specified, set to undefined.\n */\n DataZoomModel.prototype.setRawRange = function (opt) {\n var thisOption = this.option;\n var settledOption = this.settledOption;\n each([['start', 'startValue'], ['end', 'endValue']], function (names) {\n // Consider the pair :\n // If one has value and the other one is `null/undefined`, we both set them\n // to `settledOption`. This strategy enables the feature to clear the original\n // value in `settledOption` to `null/undefined`.\n // But if both of them are `null/undefined`, we do not set them to `settledOption`\n // and keep `settledOption` with the original value. This strategy enables users to\n // only set but not set when calling\n // `dispatchAction`.\n // The pair is treated in the same way.\n if (opt[names[0]] != null || opt[names[1]] != null) {\n thisOption[names[0]] = settledOption[names[0]] = opt[names[0]];\n thisOption[names[1]] = settledOption[names[1]] = opt[names[1]];\n }\n }, this);\n this._updateRangeUse(opt);\n };\n DataZoomModel.prototype.setCalculatedRange = function (opt) {\n var option = this.option;\n each(['start', 'startValue', 'end', 'endValue'], function (name) {\n option[name] = opt[name];\n });\n };\n DataZoomModel.prototype.getPercentRange = function () {\n var axisProxy = this.findRepresentativeAxisProxy();\n if (axisProxy) {\n return axisProxy.getDataPercentWindow();\n }\n };\n /**\n * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0);\n *\n * @return [startValue, endValue] value can only be '-' or finite number.\n */\n DataZoomModel.prototype.getValueRange = function (axisDim, axisIndex) {\n if (axisDim == null && axisIndex == null) {\n var axisProxy = this.findRepresentativeAxisProxy();\n if (axisProxy) {\n return axisProxy.getDataValueWindow();\n }\n } else {\n return this.getAxisProxy(axisDim, axisIndex).getDataValueWindow();\n }\n };\n /**\n * @param axisModel If axisModel given, find axisProxy\n * corresponding to the axisModel\n */\n DataZoomModel.prototype.findRepresentativeAxisProxy = function (axisModel) {\n if (axisModel) {\n return axisModel.__dzAxisProxy;\n }\n // Find the first hosted axisProxy\n var firstProxy;\n var axisDimList = this._targetAxisInfoMap.keys();\n for (var i = 0; i < axisDimList.length; i++) {\n var axisDim = axisDimList[i];\n var axisInfo = this._targetAxisInfoMap.get(axisDim);\n for (var j = 0; j < axisInfo.indexList.length; j++) {\n var proxy = this.getAxisProxy(axisDim, axisInfo.indexList[j]);\n if (proxy.hostedBy(this)) {\n return proxy;\n }\n if (!firstProxy) {\n firstProxy = proxy;\n }\n }\n }\n // If no hosted proxy found, still need to return a proxy.\n // This case always happens in toolbox dataZoom, where axes are all hosted by\n // other dataZooms.\n return firstProxy;\n };\n DataZoomModel.prototype.getRangePropMode = function () {\n return this._rangePropMode.slice();\n };\n DataZoomModel.prototype.getOrient = function () {\n if (process.env.NODE_ENV !== 'production') {\n // Should not be called before initialized.\n assert(this._orient);\n }\n return this._orient;\n };\n DataZoomModel.type = 'dataZoom';\n DataZoomModel.dependencies = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series', 'toolbox'];\n DataZoomModel.defaultOption = {\n // zlevel: 0,\n z: 4,\n filterMode: 'filter',\n start: 0,\n end: 100\n };\n return DataZoomModel;\n}(ComponentModel);\n/**\n * Retrieve those raw params from option, which will be cached separately,\n * because they will be overwritten by normalized/calculated values in the main\n * process.\n */\nfunction retrieveRawOption(option) {\n var ret = {};\n each(['start', 'end', 'startValue', 'endValue', 'throttle'], function (name) {\n option.hasOwnProperty(name) && (ret[name] = option[name]);\n });\n return ret;\n}\nexport default DataZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\nvar SelectDataZoomModel = /** @class */function (_super) {\n __extends(SelectDataZoomModel, _super);\n function SelectDataZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = SelectDataZoomModel.type;\n return _this;\n }\n SelectDataZoomModel.type = 'dataZoom.select';\n return SelectDataZoomModel;\n}(DataZoomModel);\nexport default SelectDataZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport ComponentView from '../../view/Component.js';\nvar DataZoomView = /** @class */function (_super) {\n __extends(DataZoomView, _super);\n function DataZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = DataZoomView.type;\n return _this;\n }\n DataZoomView.prototype.render = function (dataZoomModel, ecModel, api, payload) {\n this.dataZoomModel = dataZoomModel;\n this.ecModel = ecModel;\n this.api = api;\n };\n DataZoomView.type = 'dataZoom';\n return DataZoomView;\n}(ComponentView);\nexport default DataZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomView from './DataZoomView.js';\nvar SelectDataZoomView = /** @class */function (_super) {\n __extends(SelectDataZoomView, _super);\n function SelectDataZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = SelectDataZoomView.type;\n return _this;\n }\n SelectDataZoomView.type = 'dataZoom.select';\n return SelectDataZoomView;\n}(DataZoomView);\nexport default SelectDataZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/**\n * Calculate slider move result.\n * Usage:\n * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as\n * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`.\n * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`.\n *\n * @param delta Move length.\n * @param handleEnds handleEnds[0] can be bigger then handleEnds[1].\n * handleEnds will be modified in this method.\n * @param extent handleEnds is restricted by extent.\n * extent[0] should less or equals than extent[1].\n * @param handleIndex Can be 'all', means that both move the two handleEnds.\n * @param minSpan The range of dataZoom can not be smaller than that.\n * If not set, handle0 and cross handle1. If set as a non-negative\n * number (including `0`), handles will push each other when reaching\n * the minSpan.\n * @param maxSpan The range of dataZoom can not be larger than that.\n * @return The input handleEnds.\n */\nexport default function sliderMove(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {\n delta = delta || 0;\n var extentSpan = extent[1] - extent[0];\n // Notice maxSpan and minSpan can be null/undefined.\n if (minSpan != null) {\n minSpan = restrict(minSpan, [0, extentSpan]);\n }\n if (maxSpan != null) {\n maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);\n }\n if (handleIndex === 'all') {\n var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]);\n handleSpan = restrict(handleSpan, [0, extentSpan]);\n minSpan = maxSpan = restrict(handleSpan, [minSpan, maxSpan]);\n handleIndex = 0;\n }\n handleEnds[0] = restrict(handleEnds[0], extent);\n handleEnds[1] = restrict(handleEnds[1], extent);\n var originalDistSign = getSpanSign(handleEnds, handleIndex);\n handleEnds[handleIndex] += delta;\n // Restrict in extent.\n var extentMinSpan = minSpan || 0;\n var realExtent = extent.slice();\n originalDistSign.sign < 0 ? realExtent[0] += extentMinSpan : realExtent[1] -= extentMinSpan;\n handleEnds[handleIndex] = restrict(handleEnds[handleIndex], realExtent);\n // Expand span.\n var currDistSign;\n currDistSign = getSpanSign(handleEnds, handleIndex);\n if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) {\n // If minSpan exists, 'cross' is forbidden.\n handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;\n }\n // Shrink span.\n currDistSign = getSpanSign(handleEnds, handleIndex);\n if (maxSpan != null && currDistSign.span > maxSpan) {\n handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;\n }\n return handleEnds;\n}\nfunction getSpanSign(handleEnds, handleIndex) {\n var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex];\n // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]\n // is at left of handleEnds[1] for non-cross case.\n return {\n span: Math.abs(dist),\n sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1\n };\n}\nfunction restrict(value, extend) {\n return Math.min(extend[1] != null ? extend[1] : Infinity, Math.max(extend[0] != null ? extend[0] : -Infinity, value));\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as numberUtil from '../../util/number.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport { unionAxisExtentFromData } from '../../coord/axisHelper.js';\nimport { ensureScaleRawExtentInfo } from '../../coord/scaleRawExtentInfo.js';\nimport { getAxisMainType, isCoordSupported } from './helper.js';\nimport { SINGLE_REFERRING } from '../../util/model.js';\nvar each = zrUtil.each;\nvar asc = numberUtil.asc;\n/**\n * Operate single axis.\n * One axis can only operated by one axis operator.\n * Different dataZoomModels may be defined to operate the same axis.\n * (i.e. 'inside' data zoom and 'slider' data zoom components)\n * So dataZoomModels share one axisProxy in that case.\n */\nvar AxisProxy = /** @class */function () {\n function AxisProxy(dimName, axisIndex, dataZoomModel, ecModel) {\n this._dimName = dimName;\n this._axisIndex = axisIndex;\n this.ecModel = ecModel;\n this._dataZoomModel = dataZoomModel;\n // /**\n // * @readOnly\n // * @private\n // */\n // this.hasSeriesStacked;\n }\n /**\n * Whether the axisProxy is hosted by dataZoomModel.\n */\n AxisProxy.prototype.hostedBy = function (dataZoomModel) {\n return this._dataZoomModel === dataZoomModel;\n };\n /**\n * @return Value can only be NaN or finite value.\n */\n AxisProxy.prototype.getDataValueWindow = function () {\n return this._valueWindow.slice();\n };\n /**\n * @return {Array.}\n */\n AxisProxy.prototype.getDataPercentWindow = function () {\n return this._percentWindow.slice();\n };\n AxisProxy.prototype.getTargetSeriesModels = function () {\n var seriesModels = [];\n this.ecModel.eachSeries(function (seriesModel) {\n if (isCoordSupported(seriesModel)) {\n var axisMainType = getAxisMainType(this._dimName);\n var axisModel = seriesModel.getReferringComponents(axisMainType, SINGLE_REFERRING).models[0];\n if (axisModel && this._axisIndex === axisModel.componentIndex) {\n seriesModels.push(seriesModel);\n }\n }\n }, this);\n return seriesModels;\n };\n AxisProxy.prototype.getAxisModel = function () {\n return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);\n };\n AxisProxy.prototype.getMinMaxSpan = function () {\n return zrUtil.clone(this._minMaxSpan);\n };\n /**\n * Only calculate by given range and this._dataExtent, do not change anything.\n */\n AxisProxy.prototype.calculateDataWindow = function (opt) {\n var dataExtent = this._dataExtent;\n var axisModel = this.getAxisModel();\n var scale = axisModel.axis.scale;\n var rangePropMode = this._dataZoomModel.getRangePropMode();\n var percentExtent = [0, 100];\n var percentWindow = [];\n var valueWindow = [];\n var hasPropModeValue;\n each(['start', 'end'], function (prop, idx) {\n var boundPercent = opt[prop];\n var boundValue = opt[prop + 'Value'];\n // Notice: dataZoom is based either on `percentProp` ('start', 'end') or\n // on `valueProp` ('startValue', 'endValue'). (They are based on the data extent\n // but not min/max of axis, which will be calculated by data window then).\n // The former one is suitable for cases that a dataZoom component controls multiple\n // axes with different unit or extent, and the latter one is suitable for accurate\n // zoom by pixel (e.g., in dataZoomSelect).\n // we use `getRangePropMode()` to mark which prop is used. `rangePropMode` is updated\n // only when setOption or dispatchAction, otherwise it remains its original value.\n // (Why not only record `percentProp` and always map to `valueProp`? Because\n // the map `valueProp` -> `percentProp` -> `valueProp` probably not the original\n // `valueProp`. consider two axes constrolled by one dataZoom. They have different\n // data extent. All of values that are overflow the `dataExtent` will be calculated\n // to percent '100%').\n if (rangePropMode[idx] === 'percent') {\n boundPercent == null && (boundPercent = percentExtent[idx]);\n // Use scale.parse to math round for category or time axis.\n boundValue = scale.parse(numberUtil.linearMap(boundPercent, percentExtent, dataExtent));\n } else {\n hasPropModeValue = true;\n boundValue = boundValue == null ? dataExtent[idx] : scale.parse(boundValue);\n // Calculating `percent` from `value` may be not accurate, because\n // This calculation can not be inversed, because all of values that\n // are overflow the `dataExtent` will be calculated to percent '100%'\n boundPercent = numberUtil.linearMap(boundValue, dataExtent, percentExtent);\n }\n // valueWindow[idx] = round(boundValue);\n // percentWindow[idx] = round(boundPercent);\n // fallback to extent start/end when parsed value or percent is invalid\n valueWindow[idx] = boundValue == null || isNaN(boundValue) ? dataExtent[idx] : boundValue;\n percentWindow[idx] = boundPercent == null || isNaN(boundPercent) ? percentExtent[idx] : boundPercent;\n });\n asc(valueWindow);\n asc(percentWindow);\n // The windows from user calling of `dispatchAction` might be out of the extent,\n // or do not obey the `min/maxSpan`, `min/maxValueSpan`. But we don't restrict window\n // by `zoomLock` here, because we see `zoomLock` just as a interaction constraint,\n // where API is able to initialize/modify the window size even though `zoomLock`\n // specified.\n var spans = this._minMaxSpan;\n hasPropModeValue ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false) : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true);\n function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) {\n var suffix = toValue ? 'Span' : 'ValueSpan';\n sliderMove(0, fromWindow, fromExtent, 'all', spans['min' + suffix], spans['max' + suffix]);\n for (var i = 0; i < 2; i++) {\n toWindow[i] = numberUtil.linearMap(fromWindow[i], fromExtent, toExtent, true);\n toValue && (toWindow[i] = scale.parse(toWindow[i]));\n }\n }\n return {\n valueWindow: valueWindow,\n percentWindow: percentWindow\n };\n };\n /**\n * Notice: reset should not be called before series.restoreData() is called,\n * so it is recommended to be called in \"process stage\" but not \"model init\n * stage\".\n */\n AxisProxy.prototype.reset = function (dataZoomModel) {\n if (dataZoomModel !== this._dataZoomModel) {\n return;\n }\n var targetSeries = this.getTargetSeriesModels();\n // Culculate data window and data extent, and record them.\n this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries);\n // `calculateDataWindow` uses min/maxSpan.\n this._updateMinMaxSpan();\n var dataWindow = this.calculateDataWindow(dataZoomModel.settledOption);\n this._valueWindow = dataWindow.valueWindow;\n this._percentWindow = dataWindow.percentWindow;\n // Update axis setting then.\n this._setAxisModel();\n };\n AxisProxy.prototype.filterData = function (dataZoomModel, api) {\n if (dataZoomModel !== this._dataZoomModel) {\n return;\n }\n var axisDim = this._dimName;\n var seriesModels = this.getTargetSeriesModels();\n var filterMode = dataZoomModel.get('filterMode');\n var valueWindow = this._valueWindow;\n if (filterMode === 'none') {\n return;\n }\n // FIXME\n // Toolbox may has dataZoom injected. And if there are stacked bar chart\n // with NaN data, NaN will be filtered and stack will be wrong.\n // So we need to force the mode to be set empty.\n // In fect, it is not a big deal that do not support filterMode-'filter'\n // when using toolbox#dataZoom, utill tooltip#dataZoom support \"single axis\n // selection\" some day, which might need \"adapt to data extent on the\n // otherAxis\", which is disabled by filterMode-'empty'.\n // But currently, stack has been fixed to based on value but not index,\n // so this is not an issue any more.\n // let otherAxisModel = this.getOtherAxisModel();\n // if (dataZoomModel.get('$fromToolbox')\n // && otherAxisModel\n // && otherAxisModel.hasSeriesStacked\n // ) {\n // filterMode = 'empty';\n // }\n // TODO\n // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet.\n each(seriesModels, function (seriesModel) {\n var seriesData = seriesModel.getData();\n var dataDims = seriesData.mapDimensionsAll(axisDim);\n if (!dataDims.length) {\n return;\n }\n if (filterMode === 'weakFilter') {\n var store_1 = seriesData.getStore();\n var dataDimIndices_1 = zrUtil.map(dataDims, function (dim) {\n return seriesData.getDimensionIndex(dim);\n }, seriesData);\n seriesData.filterSelf(function (dataIndex) {\n var leftOut;\n var rightOut;\n var hasValue;\n for (var i = 0; i < dataDims.length; i++) {\n var value = store_1.get(dataDimIndices_1[i], dataIndex);\n var thisHasValue = !isNaN(value);\n var thisLeftOut = value < valueWindow[0];\n var thisRightOut = value > valueWindow[1];\n if (thisHasValue && !thisLeftOut && !thisRightOut) {\n return true;\n }\n thisHasValue && (hasValue = true);\n thisLeftOut && (leftOut = true);\n thisRightOut && (rightOut = true);\n }\n // If both left out and right out, do not filter.\n return hasValue && leftOut && rightOut;\n });\n } else {\n each(dataDims, function (dim) {\n if (filterMode === 'empty') {\n seriesModel.setData(seriesData = seriesData.map(dim, function (value) {\n return !isInWindow(value) ? NaN : value;\n }));\n } else {\n var range = {};\n range[dim] = valueWindow;\n // console.time('select');\n seriesData.selectRange(range);\n // console.timeEnd('select');\n }\n });\n }\n\n each(dataDims, function (dim) {\n seriesData.setApproximateExtent(valueWindow, dim);\n });\n });\n function isInWindow(value) {\n return value >= valueWindow[0] && value <= valueWindow[1];\n }\n };\n AxisProxy.prototype._updateMinMaxSpan = function () {\n var minMaxSpan = this._minMaxSpan = {};\n var dataZoomModel = this._dataZoomModel;\n var dataExtent = this._dataExtent;\n each(['min', 'max'], function (minMax) {\n var percentSpan = dataZoomModel.get(minMax + 'Span');\n var valueSpan = dataZoomModel.get(minMax + 'ValueSpan');\n valueSpan != null && (valueSpan = this.getAxisModel().axis.scale.parse(valueSpan));\n // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan\n if (valueSpan != null) {\n percentSpan = numberUtil.linearMap(dataExtent[0] + valueSpan, dataExtent, [0, 100], true);\n } else if (percentSpan != null) {\n valueSpan = numberUtil.linearMap(percentSpan, [0, 100], dataExtent, true) - dataExtent[0];\n }\n minMaxSpan[minMax + 'Span'] = percentSpan;\n minMaxSpan[minMax + 'ValueSpan'] = valueSpan;\n }, this);\n };\n AxisProxy.prototype._setAxisModel = function () {\n var axisModel = this.getAxisModel();\n var percentWindow = this._percentWindow;\n var valueWindow = this._valueWindow;\n if (!percentWindow) {\n return;\n }\n // [0, 500]: arbitrary value, guess axis extent.\n var precision = numberUtil.getPixelPrecision(valueWindow, [0, 500]);\n precision = Math.min(precision, 20);\n // For value axis, if min/max/scale are not set, we just use the extent obtained\n // by series data, which may be a little different from the extent calculated by\n // `axisHelper.getScaleExtent`. But the different just affects the experience a\n // little when zooming. So it will not be fixed until some users require it strongly.\n var rawExtentInfo = axisModel.axis.scale.rawExtentInfo;\n if (percentWindow[0] !== 0) {\n rawExtentInfo.setDeterminedMinMax('min', +valueWindow[0].toFixed(precision));\n }\n if (percentWindow[1] !== 100) {\n rawExtentInfo.setDeterminedMinMax('max', +valueWindow[1].toFixed(precision));\n }\n rawExtentInfo.freeze();\n };\n return AxisProxy;\n}();\nfunction calculateDataExtent(axisProxy, axisDim, seriesModels) {\n var dataExtent = [Infinity, -Infinity];\n each(seriesModels, function (seriesModel) {\n unionAxisExtentFromData(dataExtent, seriesModel.getData(), axisDim);\n });\n // It is important to get \"consistent\" extent when more then one axes is\n // controlled by a `dataZoom`, otherwise those axes will not be synchronized\n // when zooming. But it is difficult to know what is \"consistent\", considering\n // axes have different type or even different meanings (For example, two\n // time axes are used to compare data of the same date in different years).\n // So basically dataZoom just obtains extent by series.data (in category axis\n // extent can be obtained from axis.data).\n // Nevertheless, user can set min/max/scale on axes to make extent of axes\n // consistent.\n var axisModel = axisProxy.getAxisModel();\n var rawExtentResult = ensureScaleRawExtentInfo(axisModel.axis.scale, axisModel, dataExtent).calculate();\n return [rawExtentResult.min, rawExtentResult.max];\n}\nexport default AxisProxy;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createHashMap, each } from 'zrender/lib/core/util.js';\nimport { getAxisMainType } from './helper.js';\nimport AxisProxy from './AxisProxy.js';\nvar dataZoomProcessor = {\n // `dataZoomProcessor` will only be performed in needed series. Consider if\n // there is a line series and a pie series, it is better not to update the\n // line series if only pie series is needed to be updated.\n getTargetSeries: function (ecModel) {\n function eachAxisModel(cb) {\n ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n var axisModel = ecModel.getComponent(getAxisMainType(axisDim), axisIndex);\n cb(axisDim, axisIndex, axisModel, dataZoomModel);\n });\n });\n }\n // FIXME: it brings side-effect to `getTargetSeries`.\n // Prepare axis proxies.\n eachAxisModel(function (axisDim, axisIndex, axisModel, dataZoomModel) {\n // dispose all last axis proxy, in case that some axis are deleted.\n axisModel.__dzAxisProxy = null;\n });\n var proxyList = [];\n eachAxisModel(function (axisDim, axisIndex, axisModel, dataZoomModel) {\n // Different dataZooms may constrol the same axis. In that case,\n // an axisProxy serves both of them.\n if (!axisModel.__dzAxisProxy) {\n // Use the first dataZoomModel as the main model of axisProxy.\n axisModel.__dzAxisProxy = new AxisProxy(axisDim, axisIndex, dataZoomModel, ecModel);\n proxyList.push(axisModel.__dzAxisProxy);\n }\n });\n var seriesModelMap = createHashMap();\n each(proxyList, function (axisProxy) {\n each(axisProxy.getTargetSeriesModels(), function (seriesModel) {\n seriesModelMap.set(seriesModel.uid, seriesModel);\n });\n });\n return seriesModelMap;\n },\n // Consider appendData, where filter should be performed. Because data process is\n // in block mode currently, it is not need to worry about that the overallProgress\n // execute every frame.\n overallReset: function (ecModel, api) {\n ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n // We calculate window and reset axis here but not in model\n // init stage and not after action dispatch handler, because\n // reset should be called after seriesData.restoreData.\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n dataZoomModel.getAxisProxy(axisDim, axisIndex).reset(dataZoomModel);\n });\n // Caution: data zoom filtering is order sensitive when using\n // percent range and no min/max/scale set on axis.\n // For example, we have dataZoom definition:\n // [\n // {xAxisIndex: 0, start: 30, end: 70},\n // {yAxisIndex: 0, start: 20, end: 80}\n // ]\n // In this case, [20, 80] of y-dataZoom should be based on data\n // that have filtered by x-dataZoom using range of [30, 70],\n // but should not be based on full raw data. Thus sliding\n // x-dataZoom will change both ranges of xAxis and yAxis,\n // while sliding y-dataZoom will only change the range of yAxis.\n // So we should filter x-axis after reset x-axis immediately,\n // and then reset y-axis and filter y-axis.\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n dataZoomModel.getAxisProxy(axisDim, axisIndex).filterData(dataZoomModel, api);\n });\n });\n ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n // Fullfill all of the range props so that user\n // is able to get them from chart.getOption().\n var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n if (axisProxy) {\n var percentRange = axisProxy.getDataPercentWindow();\n var valueRange = axisProxy.getDataValueWindow();\n dataZoomModel.setCalculatedRange({\n start: percentRange[0],\n end: percentRange[1],\n startValue: valueRange[0],\n endValue: valueRange[1]\n });\n }\n });\n }\n};\nexport default dataZoomProcessor;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { findEffectedDataZooms } from './helper.js';\nimport { each } from 'zrender/lib/core/util.js';\nexport default function installDataZoomAction(registers) {\n registers.registerAction('dataZoom', function (payload, ecModel) {\n var effectedModels = findEffectedDataZooms(ecModel, payload);\n each(effectedModels, function (dataZoomModel) {\n dataZoomModel.setRawRange({\n start: payload.start,\n end: payload.end,\n startValue: payload.startValue,\n endValue: payload.endValue\n });\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport dataZoomProcessor from './dataZoomProcessor.js';\nimport installDataZoomAction from './dataZoomAction.js';\nvar installed = false;\nexport default function installCommon(registers) {\n if (installed) {\n return;\n }\n installed = true;\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, dataZoomProcessor);\n installDataZoomAction(registers);\n registers.registerSubTypeDefaulter('dataZoom', function () {\n // Default 'slider' when no type specified.\n return 'slider';\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SelectZoomModel from './SelectZoomModel.js';\nimport SelectZoomView from './SelectZoomView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(SelectZoomModel);\n registers.registerComponentView(SelectZoomView);\n installCommon(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\nvar ToolboxFeature = /** @class */function () {\n function ToolboxFeature() {}\n return ToolboxFeature;\n}();\nexport { ToolboxFeature };\nvar features = {};\nexport function registerFeature(name, ctor) {\n features[name] = ctor;\n}\nexport function getFeature(name) {\n return features[name];\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as featureManager from './featureManager.js';\nimport ComponentModel from '../../model/Component.js';\nvar ToolboxModel = /** @class */function (_super) {\n __extends(ToolboxModel, _super);\n function ToolboxModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = ToolboxModel.type;\n return _this;\n }\n ToolboxModel.prototype.optionUpdated = function () {\n _super.prototype.optionUpdated.apply(this, arguments);\n var ecModel = this.ecModel;\n zrUtil.each(this.option.feature, function (featureOpt, featureName) {\n var Feature = featureManager.getFeature(featureName);\n if (Feature) {\n if (Feature.getDefaultOption) {\n Feature.defaultOption = Feature.getDefaultOption(ecModel);\n }\n zrUtil.merge(featureOpt, Feature.defaultOption);\n }\n });\n };\n ToolboxModel.type = 'toolbox';\n ToolboxModel.layoutMode = {\n type: 'box',\n ignoreSize: true\n };\n ToolboxModel.defaultOption = {\n show: true,\n z: 6,\n // zlevel: 0,\n orient: 'horizontal',\n left: 'right',\n top: 'top',\n // right\n // bottom\n backgroundColor: 'transparent',\n borderColor: '#ccc',\n borderRadius: 0,\n borderWidth: 0,\n padding: 5,\n itemSize: 15,\n itemGap: 8,\n showTitle: true,\n iconStyle: {\n borderColor: '#666',\n color: 'none'\n },\n emphasis: {\n iconStyle: {\n borderColor: '#3E98C5'\n }\n },\n // textStyle: {},\n // feature\n tooltip: {\n show: false,\n position: 'bottom'\n }\n };\n return ToolboxModel;\n}(ComponentModel);\nexport default ToolboxModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as textContain from 'zrender/lib/contain/text.js';\nimport * as graphic from '../../util/graphic.js';\nimport { enterEmphasis, leaveEmphasis } from '../../util/states.js';\nimport Model from '../../model/Model.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nimport * as listComponentHelper from '../helper/listComponent.js';\nimport ComponentView from '../../view/Component.js';\nimport { ToolboxFeature, getFeature } from './featureManager.js';\nimport { getUID } from '../../util/component.js';\nimport ZRText from 'zrender/lib/graphic/Text.js';\nimport { getFont } from '../../label/labelStyle.js';\nvar ToolboxView = /** @class */function (_super) {\n __extends(ToolboxView, _super);\n function ToolboxView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ToolboxView.prototype.render = function (toolboxModel, ecModel, api, payload) {\n var group = this.group;\n group.removeAll();\n if (!toolboxModel.get('show')) {\n return;\n }\n var itemSize = +toolboxModel.get('itemSize');\n var isVertical = toolboxModel.get('orient') === 'vertical';\n var featureOpts = toolboxModel.get('feature') || {};\n var features = this._features || (this._features = {});\n var featureNames = [];\n zrUtil.each(featureOpts, function (opt, name) {\n featureNames.push(name);\n });\n new DataDiffer(this._featureNames || [], featureNames).add(processFeature).update(processFeature).remove(zrUtil.curry(processFeature, null)).execute();\n // Keep for diff.\n this._featureNames = featureNames;\n function processFeature(newIndex, oldIndex) {\n var featureName = featureNames[newIndex];\n var oldName = featureNames[oldIndex];\n var featureOpt = featureOpts[featureName];\n var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);\n var feature;\n // FIX#11236, merge feature title from MagicType newOption. TODO: consider seriesIndex ?\n if (payload && payload.newTitle != null && payload.featureName === featureName) {\n featureOpt.title = payload.newTitle;\n }\n if (featureName && !oldName) {\n // Create\n if (isUserFeatureName(featureName)) {\n feature = {\n onclick: featureModel.option.onclick,\n featureName: featureName\n };\n } else {\n var Feature = getFeature(featureName);\n if (!Feature) {\n return;\n }\n feature = new Feature();\n }\n features[featureName] = feature;\n } else {\n feature = features[oldName];\n // If feature does not exist.\n if (!feature) {\n return;\n }\n }\n feature.uid = getUID('toolbox-feature');\n feature.model = featureModel;\n feature.ecModel = ecModel;\n feature.api = api;\n var isToolboxFeature = feature instanceof ToolboxFeature;\n if (!featureName && oldName) {\n isToolboxFeature && feature.dispose && feature.dispose(ecModel, api);\n return;\n }\n if (!featureModel.get('show') || isToolboxFeature && feature.unusable) {\n isToolboxFeature && feature.remove && feature.remove(ecModel, api);\n return;\n }\n createIconPaths(featureModel, feature, featureName);\n featureModel.setIconStatus = function (iconName, status) {\n var option = this.option;\n var iconPaths = this.iconPaths;\n option.iconStatus = option.iconStatus || {};\n option.iconStatus[iconName] = status;\n if (iconPaths[iconName]) {\n (status === 'emphasis' ? enterEmphasis : leaveEmphasis)(iconPaths[iconName]);\n }\n };\n if (feature instanceof ToolboxFeature) {\n if (feature.render) {\n feature.render(featureModel, ecModel, api, payload);\n }\n }\n }\n function createIconPaths(featureModel, feature, featureName) {\n var iconStyleModel = featureModel.getModel('iconStyle');\n var iconStyleEmphasisModel = featureModel.getModel(['emphasis', 'iconStyle']);\n // If one feature has multiple icons, they are organized as\n // {\n // icon: {\n // foo: '',\n // bar: ''\n // },\n // title: {\n // foo: '',\n // bar: ''\n // }\n // }\n var icons = feature instanceof ToolboxFeature && feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n var titles = featureModel.get('title') || {};\n var iconsMap;\n var titlesMap;\n if (zrUtil.isString(icons)) {\n iconsMap = {};\n iconsMap[featureName] = icons;\n } else {\n iconsMap = icons;\n }\n if (zrUtil.isString(titles)) {\n titlesMap = {};\n titlesMap[featureName] = titles;\n } else {\n titlesMap = titles;\n }\n var iconPaths = featureModel.iconPaths = {};\n zrUtil.each(iconsMap, function (iconStr, iconName) {\n var path = graphic.createIcon(iconStr, {}, {\n x: -itemSize / 2,\n y: -itemSize / 2,\n width: itemSize,\n height: itemSize\n }); // TODO handling image\n path.setStyle(iconStyleModel.getItemStyle());\n var pathEmphasisState = path.ensureState('emphasis');\n pathEmphasisState.style = iconStyleEmphasisModel.getItemStyle();\n // Text position calculation\n // TODO: extract `textStyle` from `iconStyle` and use `createTextStyle`\n var textContent = new ZRText({\n style: {\n text: titlesMap[iconName],\n align: iconStyleEmphasisModel.get('textAlign'),\n borderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n padding: iconStyleEmphasisModel.get('textPadding'),\n fill: null,\n font: getFont({\n fontStyle: iconStyleEmphasisModel.get('textFontStyle'),\n fontFamily: iconStyleEmphasisModel.get('textFontFamily'),\n fontSize: iconStyleEmphasisModel.get('textFontSize'),\n fontWeight: iconStyleEmphasisModel.get('textFontWeight')\n }, ecModel)\n },\n ignore: true\n });\n path.setTextContent(textContent);\n graphic.setTooltipConfig({\n el: path,\n componentModel: toolboxModel,\n itemName: iconName,\n formatterParamsExtra: {\n title: titlesMap[iconName]\n }\n });\n path.__title = titlesMap[iconName];\n path.on('mouseover', function () {\n // Should not reuse above hoverStyle, which might be modified.\n var hoverStyle = iconStyleEmphasisModel.getItemStyle();\n var defaultTextPosition = isVertical ? toolboxModel.get('right') == null && toolboxModel.get('left') !== 'right' ? 'right' : 'left' : toolboxModel.get('bottom') == null && toolboxModel.get('top') !== 'bottom' ? 'bottom' : 'top';\n textContent.setStyle({\n fill: iconStyleEmphasisModel.get('textFill') || hoverStyle.fill || hoverStyle.stroke || '#000',\n backgroundColor: iconStyleEmphasisModel.get('textBackgroundColor')\n });\n path.setTextConfig({\n position: iconStyleEmphasisModel.get('textPosition') || defaultTextPosition\n });\n textContent.ignore = !toolboxModel.get('showTitle');\n // Use enterEmphasis and leaveEmphasis provide by ec.\n // There are flags managed by the echarts.\n api.enterEmphasis(this);\n }).on('mouseout', function () {\n if (featureModel.get(['iconStatus', iconName]) !== 'emphasis') {\n api.leaveEmphasis(this);\n }\n textContent.hide();\n });\n (featureModel.get(['iconStatus', iconName]) === 'emphasis' ? enterEmphasis : leaveEmphasis)(path);\n group.add(path);\n path.on('click', zrUtil.bind(feature.onclick, feature, ecModel, api, iconName));\n iconPaths[iconName] = path;\n });\n }\n listComponentHelper.layout(group, toolboxModel, api);\n // Render background after group is layout\n // FIXME\n group.add(listComponentHelper.makeBackground(group.getBoundingRect(), toolboxModel));\n // Adjust icon title positions to avoid them out of screen\n isVertical || group.eachChild(function (icon) {\n var titleText = icon.__title;\n // const hoverStyle = icon.hoverStyle;\n // TODO simplify code?\n var emphasisState = icon.ensureState('emphasis');\n var emphasisTextConfig = emphasisState.textConfig || (emphasisState.textConfig = {});\n var textContent = icon.getTextContent();\n var emphasisTextState = textContent && textContent.ensureState('emphasis');\n // May be background element\n if (emphasisTextState && !zrUtil.isFunction(emphasisTextState) && titleText) {\n var emphasisTextStyle = emphasisTextState.style || (emphasisTextState.style = {});\n var rect = textContain.getBoundingRect(titleText, ZRText.makeFont(emphasisTextStyle));\n var offsetX = icon.x + group.x;\n var offsetY = icon.y + group.y + itemSize;\n var needPutOnTop = false;\n if (offsetY + rect.height > api.getHeight()) {\n emphasisTextConfig.position = 'top';\n needPutOnTop = true;\n }\n var topOffset = needPutOnTop ? -5 - rect.height : itemSize + 10;\n if (offsetX + rect.width / 2 > api.getWidth()) {\n emphasisTextConfig.position = ['100%', topOffset];\n emphasisTextStyle.align = 'right';\n } else if (offsetX - rect.width / 2 < 0) {\n emphasisTextConfig.position = [0, topOffset];\n emphasisTextStyle.align = 'left';\n }\n }\n });\n };\n ToolboxView.prototype.updateView = function (toolboxModel, ecModel, api, payload) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.updateView && feature.updateView(feature.model, ecModel, api, payload);\n });\n };\n // updateLayout(toolboxModel, ecModel, api, payload) {\n // zrUtil.each(this._features, function (feature) {\n // feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);\n // });\n // },\n ToolboxView.prototype.remove = function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.remove && feature.remove(ecModel, api);\n });\n this.group.removeAll();\n };\n ToolboxView.prototype.dispose = function (ecModel, api) {\n zrUtil.each(this._features, function (feature) {\n feature instanceof ToolboxFeature && feature.dispose && feature.dispose(ecModel, api);\n });\n };\n ToolboxView.type = 'toolbox';\n return ToolboxView;\n}(ComponentView);\nfunction isUserFeatureName(featureName) {\n return featureName.indexOf('my') === 0;\n}\nexport default ToolboxView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/* global Uint8Array, document */\nimport env from 'zrender/lib/core/env.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { isFunction } from 'zrender/lib/core/util.js';\n/* global window, document */\nvar SaveAsImage = /** @class */function (_super) {\n __extends(SaveAsImage, _super);\n function SaveAsImage() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n SaveAsImage.prototype.onclick = function (ecModel, api) {\n var model = this.model;\n var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';\n var isSvg = api.getZr().painter.getType() === 'svg';\n var type = isSvg ? 'svg' : model.get('type', true) || 'png';\n var url = api.getConnectedDataURL({\n type: type,\n backgroundColor: model.get('backgroundColor', true) || ecModel.get('backgroundColor') || '#fff',\n connectedBackgroundColor: model.get('connectedBackgroundColor'),\n excludeComponents: model.get('excludeComponents'),\n pixelRatio: model.get('pixelRatio')\n });\n var browser = env.browser;\n // Chrome, Firefox, New Edge\n if (isFunction(MouseEvent) && (browser.newEdge || !browser.ie && !browser.edge)) {\n var $a = document.createElement('a');\n $a.download = title + '.' + type;\n $a.target = '_blank';\n $a.href = url;\n var evt = new MouseEvent('click', {\n // some micro front-end framework, window maybe is a Proxy\n view: document.defaultView,\n bubbles: true,\n cancelable: false\n });\n $a.dispatchEvent(evt);\n }\n // IE or old Edge\n else {\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob || isSvg) {\n var parts = url.split(',');\n // data:[][;charset=][;base64],\n var base64Encoded = parts[0].indexOf('base64') > -1;\n var bstr = isSvg\n // should decode the svg data uri first\n ? decodeURIComponent(parts[1]) : parts[1];\n // only `atob` when the data uri is encoded with base64\n // otherwise, like `svg` data uri exported by zrender,\n // there will be an error, for it's not encoded with base64.\n // (just a url-encoded string through `encodeURIComponent`)\n base64Encoded && (bstr = window.atob(bstr));\n var filename = title + '.' + type;\n // @ts-ignore\n if (window.navigator.msSaveOrOpenBlob) {\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n var blob = new Blob([u8arr]); // @ts-ignore\n window.navigator.msSaveOrOpenBlob(blob, filename);\n } else {\n var frame = document.createElement('iframe');\n document.body.appendChild(frame);\n var cw = frame.contentWindow;\n var doc = cw.document;\n doc.open('image/svg+xml', 'replace');\n doc.write(bstr);\n doc.close();\n cw.focus();\n doc.execCommand('SaveAs', true, filename);\n document.body.removeChild(frame);\n }\n } else {\n var lang = model.get('lang');\n var html = '' + '' + '' + '';\n var tab = window.open();\n tab.document.write(html);\n tab.document.title = title;\n }\n }\n };\n SaveAsImage.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',\n title: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'title']),\n type: 'png',\n // Default use option.backgroundColor\n // backgroundColor: '#fff',\n connectedBackgroundColor: '#fff',\n name: '',\n excludeComponents: ['toolbox'],\n // use current pixel ratio of device by default\n // pixelRatio: 1,\n lang: ecModel.getLocaleModel().get(['toolbox', 'saveAsImage', 'lang'])\n };\n return defaultOption;\n };\n return SaveAsImage;\n}(ToolboxFeature);\nexport default SaveAsImage;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as echarts from '../../../core/echarts.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { SINGLE_REFERRING } from '../../../util/model.js';\nvar INNER_STACK_KEYWORD = '__ec_magicType_stack__';\nvar ICON_TYPES = ['line', 'bar', 'stack'];\n// stack and tiled appears in pair for the title\nvar TITLE_TYPES = ['line', 'bar', 'stack', 'tiled'];\nvar radioTypes = [['line', 'bar'], ['stack']];\nvar MagicType = /** @class */function (_super) {\n __extends(MagicType, _super);\n function MagicType() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n MagicType.prototype.getIcons = function () {\n var model = this.model;\n var availableIcons = model.get('icon');\n var icons = {};\n zrUtil.each(model.get('type'), function (type) {\n if (availableIcons[type]) {\n icons[type] = availableIcons[type];\n }\n });\n return icons;\n };\n MagicType.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n type: [],\n // Icon group\n icon: {\n line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',\n bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',\n // eslint-disable-next-line\n stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z' // jshint ignore:line\n },\n\n // `line`, `bar`, `stack`, `tiled`\n title: ecModel.getLocaleModel().get(['toolbox', 'magicType', 'title']),\n option: {},\n seriesIndex: {}\n };\n return defaultOption;\n };\n MagicType.prototype.onclick = function (ecModel, api, type) {\n var model = this.model;\n var seriesIndex = model.get(['seriesIndex', type]);\n // Not supported magicType\n if (!seriesOptGenreator[type]) {\n return;\n }\n var newOption = {\n series: []\n };\n var generateNewSeriesTypes = function (seriesModel) {\n var seriesType = seriesModel.subType;\n var seriesId = seriesModel.id;\n var newSeriesOpt = seriesOptGenreator[type](seriesType, seriesId, seriesModel, model);\n if (newSeriesOpt) {\n // PENDING If merge original option?\n zrUtil.defaults(newSeriesOpt, seriesModel.option);\n newOption.series.push(newSeriesOpt);\n }\n // Modify boundaryGap\n var coordSys = seriesModel.coordinateSystem;\n if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n if (categoryAxis) {\n var axisDim = categoryAxis.dim;\n var axisType = axisDim + 'Axis';\n var axisModel = seriesModel.getReferringComponents(axisType, SINGLE_REFERRING).models[0];\n var axisIndex = axisModel.componentIndex;\n newOption[axisType] = newOption[axisType] || [];\n for (var i = 0; i <= axisIndex; i++) {\n newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n }\n newOption[axisType][axisIndex].boundaryGap = type === 'bar';\n }\n }\n };\n zrUtil.each(radioTypes, function (radio) {\n if (zrUtil.indexOf(radio, type) >= 0) {\n zrUtil.each(radio, function (item) {\n model.setIconStatus(item, 'normal');\n });\n }\n });\n model.setIconStatus(type, 'emphasis');\n ecModel.eachComponent({\n mainType: 'series',\n query: seriesIndex == null ? null : {\n seriesIndex: seriesIndex\n }\n }, generateNewSeriesTypes);\n var newTitle;\n var currentType = type;\n // Change title of stack\n if (type === 'stack') {\n // use titles in model instead of ecModel\n // as stack and tiled appears in pair, just flip them\n // no need of checking stack state\n newTitle = zrUtil.merge({\n stack: model.option.title.tiled,\n tiled: model.option.title.stack\n }, model.option.title);\n if (model.get(['iconStatus', type]) !== 'emphasis') {\n currentType = 'tiled';\n }\n }\n api.dispatchAction({\n type: 'changeMagicType',\n currentType: currentType,\n newOption: newOption,\n newTitle: newTitle,\n featureName: 'magicType'\n });\n };\n return MagicType;\n}(ToolboxFeature);\nvar seriesOptGenreator = {\n 'line': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'bar') {\n return zrUtil.merge({\n id: seriesId,\n type: 'line',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get(['option', 'line']) || {}, true);\n }\n },\n 'bar': function (seriesType, seriesId, seriesModel, model) {\n if (seriesType === 'line') {\n return zrUtil.merge({\n id: seriesId,\n type: 'bar',\n // Preserve data related option\n data: seriesModel.get('data'),\n stack: seriesModel.get('stack'),\n markPoint: seriesModel.get('markPoint'),\n markLine: seriesModel.get('markLine')\n }, model.get(['option', 'bar']) || {}, true);\n }\n },\n 'stack': function (seriesType, seriesId, seriesModel, model) {\n var isStack = seriesModel.get('stack') === INNER_STACK_KEYWORD;\n if (seriesType === 'line' || seriesType === 'bar') {\n model.setIconStatus('stack', isStack ? 'normal' : 'emphasis');\n return zrUtil.merge({\n id: seriesId,\n stack: isStack ? '' : INNER_STACK_KEYWORD\n }, model.get(['option', 'stack']) || {}, true);\n }\n }\n};\n// TODO: SELF REGISTERED.\necharts.registerAction({\n type: 'changeMagicType',\n event: 'magicTypeChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.mergeOption(payload.newOption);\n});\nexport default MagicType;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n/* global document */\nimport * as echarts from '../../../core/echarts.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { addEventListener } from 'zrender/lib/core/event.js';\nimport { warn } from '../../../util/log.js';\n/* global document */\nvar BLOCK_SPLITER = new Array(60).join('-');\nvar ITEM_SPLITER = '\\t';\n/**\n * Group series into two types\n * 1. on category axis, like line, bar\n * 2. others, like scatter, pie\n */\nfunction groupSeries(ecModel) {\n var seriesGroupByCategoryAxis = {};\n var otherSeries = [];\n var meta = [];\n ecModel.eachRawSeries(function (seriesModel) {\n var coordSys = seriesModel.coordinateSystem;\n if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {\n // TODO: TYPE Consider polar? Include polar may increase unecessary bundle size.\n var baseAxis = coordSys.getBaseAxis();\n if (baseAxis.type === 'category') {\n var key = baseAxis.dim + '_' + baseAxis.index;\n if (!seriesGroupByCategoryAxis[key]) {\n seriesGroupByCategoryAxis[key] = {\n categoryAxis: baseAxis,\n valueAxis: coordSys.getOtherAxis(baseAxis),\n series: []\n };\n meta.push({\n axisDim: baseAxis.dim,\n axisIndex: baseAxis.index\n });\n }\n seriesGroupByCategoryAxis[key].series.push(seriesModel);\n } else {\n otherSeries.push(seriesModel);\n }\n } else {\n otherSeries.push(seriesModel);\n }\n });\n return {\n seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,\n other: otherSeries,\n meta: meta\n };\n}\n/**\n * Assemble content of series on cateogory axis\n * @inner\n */\nfunction assembleSeriesWithCategoryAxis(groups) {\n var tables = [];\n zrUtil.each(groups, function (group, key) {\n var categoryAxis = group.categoryAxis;\n var valueAxis = group.valueAxis;\n var valueAxisDim = valueAxis.dim;\n var headers = [' '].concat(zrUtil.map(group.series, function (series) {\n return series.name;\n }));\n // @ts-ignore TODO Polar\n var columns = [categoryAxis.model.getCategories()];\n zrUtil.each(group.series, function (series) {\n var rawData = series.getRawData();\n columns.push(series.getRawData().mapArray(rawData.mapDimension(valueAxisDim), function (val) {\n return val;\n }));\n });\n // Assemble table content\n var lines = [headers.join(ITEM_SPLITER)];\n for (var i = 0; i < columns[0].length; i++) {\n var items = [];\n for (var j = 0; j < columns.length; j++) {\n items.push(columns[j][i]);\n }\n lines.push(items.join(ITEM_SPLITER));\n }\n tables.push(lines.join('\\n'));\n });\n return tables.join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n/**\n * Assemble content of other series\n */\nfunction assembleOtherSeries(series) {\n return zrUtil.map(series, function (series) {\n var data = series.getRawData();\n var lines = [series.name];\n var vals = [];\n data.each(data.dimensions, function () {\n var argLen = arguments.length;\n var dataIndex = arguments[argLen - 1];\n var name = data.getName(dataIndex);\n for (var i = 0; i < argLen - 1; i++) {\n vals[i] = arguments[i];\n }\n lines.push((name ? name + ITEM_SPLITER : '') + vals.join(ITEM_SPLITER));\n });\n return lines.join('\\n');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\nfunction getContentFromModel(ecModel) {\n var result = groupSeries(ecModel);\n return {\n value: zrUtil.filter([assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis), assembleOtherSeries(result.other)], function (str) {\n return !!str.replace(/[\\n\\t\\s]/g, '');\n }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n'),\n meta: result.meta\n };\n}\nfunction trim(str) {\n return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n}\n/**\n * If a block is tsv format\n */\nfunction isTSVFormat(block) {\n // Simple method to find out if a block is tsv format\n var firstLine = block.slice(0, block.indexOf('\\n'));\n if (firstLine.indexOf(ITEM_SPLITER) >= 0) {\n return true;\n }\n}\nvar itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');\n/**\n * @param {string} tsv\n * @return {Object}\n */\nfunction parseTSVContents(tsv) {\n var tsvLines = tsv.split(/\\n+/g);\n var headers = trim(tsvLines.shift()).split(itemSplitRegex);\n var categories = [];\n var series = zrUtil.map(headers, function (header) {\n return {\n name: header,\n data: []\n };\n });\n for (var i = 0; i < tsvLines.length; i++) {\n var items = trim(tsvLines[i]).split(itemSplitRegex);\n categories.push(items.shift());\n for (var j = 0; j < items.length; j++) {\n series[j] && (series[j].data[i] = items[j]);\n }\n }\n return {\n series: series,\n categories: categories\n };\n}\nfunction parseListContents(str) {\n var lines = str.split(/\\n+/g);\n var seriesName = trim(lines.shift());\n var data = [];\n for (var i = 0; i < lines.length; i++) {\n // if line is empty, ignore it.\n // there is a case that a user forgot to delete `\\n`.\n var line = trim(lines[i]);\n if (!line) {\n continue;\n }\n var items = line.split(itemSplitRegex);\n var name_1 = '';\n var value = void 0;\n var hasName = false;\n if (isNaN(items[0])) {\n // First item is name\n hasName = true;\n name_1 = items[0];\n items = items.slice(1);\n data[i] = {\n name: name_1,\n value: []\n };\n value = data[i].value;\n } else {\n value = data[i] = [];\n }\n for (var j = 0; j < items.length; j++) {\n value.push(+items[j]);\n }\n if (value.length === 1) {\n hasName ? data[i].value = value[0] : data[i] = value[0];\n }\n }\n return {\n name: seriesName,\n data: data\n };\n}\nfunction parseContents(str, blockMetaList) {\n var blocks = str.split(new RegExp('\\n*' + BLOCK_SPLITER + '\\n*', 'g'));\n var newOption = {\n series: []\n };\n zrUtil.each(blocks, function (block, idx) {\n if (isTSVFormat(block)) {\n var result = parseTSVContents(block);\n var blockMeta = blockMetaList[idx];\n var axisKey = blockMeta.axisDim + 'Axis';\n if (blockMeta) {\n newOption[axisKey] = newOption[axisKey] || [];\n newOption[axisKey][blockMeta.axisIndex] = {\n data: result.categories\n };\n newOption.series = newOption.series.concat(result.series);\n }\n } else {\n var result = parseListContents(block);\n newOption.series.push(result);\n }\n });\n return newOption;\n}\nvar DataView = /** @class */function (_super) {\n __extends(DataView, _super);\n function DataView() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DataView.prototype.onclick = function (ecModel, api) {\n // FIXME: better way?\n setTimeout(function () {\n api.dispatchAction({\n type: 'hideTip'\n });\n });\n var container = api.getDom();\n var model = this.model;\n if (this._dom) {\n container.removeChild(this._dom);\n }\n var root = document.createElement('div');\n // use padding to avoid 5px whitespace\n root.style.cssText = 'position:absolute;top:0;bottom:0;left:0;right:0;padding:5px';\n root.style.backgroundColor = model.get('backgroundColor') || '#fff';\n // Create elements\n var header = document.createElement('h4');\n var lang = model.get('lang') || [];\n header.innerHTML = lang[0] || model.get('title');\n header.style.cssText = 'margin:10px 20px';\n header.style.color = model.get('textColor');\n var viewMain = document.createElement('div');\n var textarea = document.createElement('textarea');\n viewMain.style.cssText = 'overflow:auto';\n var optionToContent = model.get('optionToContent');\n var contentToOption = model.get('contentToOption');\n var result = getContentFromModel(ecModel);\n if (zrUtil.isFunction(optionToContent)) {\n var htmlOrDom = optionToContent(api.getOption());\n if (zrUtil.isString(htmlOrDom)) {\n viewMain.innerHTML = htmlOrDom;\n } else if (zrUtil.isDom(htmlOrDom)) {\n viewMain.appendChild(htmlOrDom);\n }\n } else {\n // Use default textarea\n textarea.readOnly = model.get('readOnly');\n var style = textarea.style;\n // eslint-disable-next-line max-len\n style.cssText = 'display:block;width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;resize:none;box-sizing:border-box;outline:none';\n style.color = model.get('textColor');\n style.borderColor = model.get('textareaBorderColor');\n style.backgroundColor = model.get('textareaColor');\n textarea.value = result.value;\n viewMain.appendChild(textarea);\n }\n var blockMetaList = result.meta;\n var buttonContainer = document.createElement('div');\n buttonContainer.style.cssText = 'position:absolute;bottom:5px;left:0;right:0';\n // eslint-disable-next-line max-len\n var buttonStyle = 'float:right;margin-right:20px;border:none;cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';\n var closeButton = document.createElement('div');\n var refreshButton = document.createElement('div');\n buttonStyle += ';background-color:' + model.get('buttonColor');\n buttonStyle += ';color:' + model.get('buttonTextColor');\n var self = this;\n function close() {\n container.removeChild(root);\n self._dom = null;\n }\n addEventListener(closeButton, 'click', close);\n addEventListener(refreshButton, 'click', function () {\n if (contentToOption == null && optionToContent != null || contentToOption != null && optionToContent == null) {\n if (process.env.NODE_ENV !== 'production') {\n // eslint-disable-next-line\n warn('It seems you have just provided one of `contentToOption` and `optionToContent` functions but missed the other one. Data change is ignored.');\n }\n close();\n return;\n }\n var newOption;\n try {\n if (zrUtil.isFunction(contentToOption)) {\n newOption = contentToOption(viewMain, api.getOption());\n } else {\n newOption = parseContents(textarea.value, blockMetaList);\n }\n } catch (e) {\n close();\n throw new Error('Data view format error ' + e);\n }\n if (newOption) {\n api.dispatchAction({\n type: 'changeDataView',\n newOption: newOption\n });\n }\n close();\n });\n closeButton.innerHTML = lang[1];\n refreshButton.innerHTML = lang[2];\n refreshButton.style.cssText = closeButton.style.cssText = buttonStyle;\n !model.get('readOnly') && buttonContainer.appendChild(refreshButton);\n buttonContainer.appendChild(closeButton);\n root.appendChild(header);\n root.appendChild(viewMain);\n root.appendChild(buttonContainer);\n viewMain.style.height = container.clientHeight - 80 + 'px';\n container.appendChild(root);\n this._dom = root;\n };\n DataView.prototype.remove = function (ecModel, api) {\n this._dom && api.getDom().removeChild(this._dom);\n };\n DataView.prototype.dispose = function (ecModel, api) {\n this.remove(ecModel, api);\n };\n DataView.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n readOnly: false,\n optionToContent: null,\n contentToOption: null,\n // eslint-disable-next-line\n icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',\n title: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'title']),\n lang: ecModel.getLocaleModel().get(['toolbox', 'dataView', 'lang']),\n backgroundColor: '#fff',\n textColor: '#000',\n textareaColor: '#fff',\n textareaBorderColor: '#333',\n buttonColor: '#c23531',\n buttonTextColor: '#fff'\n };\n return defaultOption;\n };\n return DataView;\n}(ToolboxFeature);\n/**\n * @inner\n */\nfunction tryMergeDataOption(newData, originalData) {\n return zrUtil.map(newData, function (newVal, idx) {\n var original = originalData && originalData[idx];\n if (zrUtil.isObject(original) && !zrUtil.isArray(original)) {\n var newValIsObject = zrUtil.isObject(newVal) && !zrUtil.isArray(newVal);\n if (!newValIsObject) {\n newVal = {\n value: newVal\n };\n }\n // original data has name but new data has no name\n var shouldDeleteName = original.name != null && newVal.name == null;\n // Original data has option\n newVal = zrUtil.defaults(newVal, original);\n shouldDeleteName && delete newVal.name;\n return newVal;\n } else {\n return newVal;\n }\n });\n}\n// TODO: SELF REGISTERED.\necharts.registerAction({\n type: 'changeDataView',\n event: 'dataViewChanged',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n var newSeriesOptList = [];\n zrUtil.each(payload.newOption.series, function (seriesOpt) {\n var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];\n if (!seriesModel) {\n // New created series\n // Geuss the series type\n newSeriesOptList.push(zrUtil.extend({\n // Default is scatter\n type: 'scatter'\n }, seriesOpt));\n } else {\n var originalData = seriesModel.get('data');\n newSeriesOptList.push({\n name: seriesOpt.name,\n data: tryMergeDataOption(seriesOpt.data, originalData)\n });\n }\n });\n ecModel.mergeOption(zrUtil.defaults({\n series: newSeriesOptList\n }, payload.newOption));\n});\nexport default DataView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { makeInner } from '../../util/model.js';\nvar each = zrUtil.each;\nvar inner = makeInner();\n/**\n * @param ecModel\n * @param newSnapshot key is dataZoomId\n */\nexport function push(ecModel, newSnapshot) {\n var storedSnapshots = getStoreSnapshots(ecModel);\n // If previous dataZoom can not be found,\n // complete an range with current range.\n each(newSnapshot, function (batchItem, dataZoomId) {\n var i = storedSnapshots.length - 1;\n for (; i >= 0; i--) {\n var snapshot = storedSnapshots[i];\n if (snapshot[dataZoomId]) {\n break;\n }\n }\n if (i < 0) {\n // No origin range set, create one by current range.\n var dataZoomModel = ecModel.queryComponents({\n mainType: 'dataZoom',\n subType: 'select',\n id: dataZoomId\n })[0];\n if (dataZoomModel) {\n var percentRange = dataZoomModel.getPercentRange();\n storedSnapshots[0][dataZoomId] = {\n dataZoomId: dataZoomId,\n start: percentRange[0],\n end: percentRange[1]\n };\n }\n }\n });\n storedSnapshots.push(newSnapshot);\n}\nexport function pop(ecModel) {\n var storedSnapshots = getStoreSnapshots(ecModel);\n var head = storedSnapshots[storedSnapshots.length - 1];\n storedSnapshots.length > 1 && storedSnapshots.pop();\n // Find top for all dataZoom.\n var snapshot = {};\n each(head, function (batchItem, dataZoomId) {\n for (var i = storedSnapshots.length - 1; i >= 0; i--) {\n batchItem = storedSnapshots[i][dataZoomId];\n if (batchItem) {\n snapshot[dataZoomId] = batchItem;\n break;\n }\n }\n });\n return snapshot;\n}\nexport function clear(ecModel) {\n inner(ecModel).snapshots = null;\n}\nexport function count(ecModel) {\n return getStoreSnapshots(ecModel).length;\n}\n/**\n * History length of each dataZoom may be different.\n * this._history[0] is used to store origin range.\n */\nfunction getStoreSnapshots(ecModel) {\n var store = inner(ecModel);\n if (!store.snapshots) {\n store.snapshots = [{}];\n }\n return store.snapshots;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport * as echarts from '../../../core/echarts.js';\nimport * as history from '../../dataZoom/history.js';\nimport { ToolboxFeature } from '../featureManager.js';\nvar RestoreOption = /** @class */function (_super) {\n __extends(RestoreOption, _super);\n function RestoreOption() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n RestoreOption.prototype.onclick = function (ecModel, api) {\n history.clear(ecModel);\n api.dispatchAction({\n type: 'restore',\n from: this.uid\n });\n };\n RestoreOption.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n // eslint-disable-next-line\n icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',\n title: ecModel.getLocaleModel().get(['toolbox', 'restore', 'title'])\n };\n return defaultOption;\n };\n return RestoreOption;\n}(ToolboxFeature);\n// TODO: SELF REGISTERED.\necharts.registerAction({\n type: 'restore',\n event: 'restore',\n update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n ecModel.resetOption('recreate');\n});\nexport default RestoreOption;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// @ts-nocheck\nimport * as echarts from '../../core/echarts.js';\nimport { noop } from 'zrender/lib/core/util.js';\nvar ATTR = '\\0_ec_interaction_mutex';\nexport function take(zr, resourceKey, userKey) {\n var store = getStore(zr);\n store[resourceKey] = userKey;\n}\nexport function release(zr, resourceKey, userKey) {\n var store = getStore(zr);\n var uKey = store[resourceKey];\n if (uKey === userKey) {\n store[resourceKey] = null;\n }\n}\nexport function isTaken(zr, resourceKey) {\n return !!getStore(zr)[resourceKey];\n}\nfunction getStore(zr) {\n return zr[ATTR] || (zr[ATTR] = {});\n}\n/**\n * payload: {\n * type: 'takeGlobalCursor',\n * key: 'dataZoomSelect', or 'brush', or ...,\n * If no userKey, release global cursor.\n * }\n */\n// TODO: SELF REGISTERED.\necharts.registerAction({\n type: 'takeGlobalCursor',\n event: 'globalCursorTaken',\n update: 'update'\n}, noop);","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { curry, each, map, bind, merge, clone, defaults, assert } from 'zrender/lib/core/util.js';\nimport Eventful from 'zrender/lib/core/Eventful.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as interactionMutex from './interactionMutex.js';\nimport DataDiffer from '../../data/DataDiffer.js';\nvar BRUSH_PANEL_GLOBAL = true;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\nvar mathPow = Math.pow;\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\nvar DIRECTION_MAP = {\n w: [0, 0],\n e: [0, 1],\n n: [1, 0],\n s: [1, 1]\n};\nvar CURSOR_MAP = {\n w: 'ew',\n e: 'ew',\n n: 'ns',\n s: 'ns',\n ne: 'nesw',\n sw: 'nesw',\n nw: 'nwse',\n se: 'nwse'\n};\nvar DEFAULT_BRUSH_OPT = {\n brushStyle: {\n lineWidth: 2,\n stroke: 'rgba(210,219,238,0.3)',\n fill: '#D2DBEE'\n },\n transformable: true,\n brushMode: 'single',\n removeOnClick: false\n};\nvar baseUID = 0;\n/**\n * params:\n * areas: Array., coord relates to container group,\n * If no container specified, to global.\n * opt {\n * isEnd: boolean,\n * removeOnClick: boolean\n * }\n */\nvar BrushController = /** @class */function (_super) {\n __extends(BrushController, _super);\n function BrushController(zr) {\n var _this = _super.call(this) || this;\n /**\n * @internal\n */\n _this._track = [];\n /**\n * @internal\n */\n _this._covers = [];\n _this._handlers = {};\n if (process.env.NODE_ENV !== 'production') {\n assert(zr);\n }\n _this._zr = zr;\n _this.group = new graphic.Group();\n _this._uid = 'brushController_' + baseUID++;\n each(pointerHandlers, function (handler, eventName) {\n this._handlers[eventName] = bind(handler, this);\n }, _this);\n return _this;\n }\n /**\n * If set to `false`, select disabled.\n */\n BrushController.prototype.enableBrush = function (brushOption) {\n if (process.env.NODE_ENV !== 'production') {\n assert(this._mounted);\n }\n this._brushType && this._doDisableBrush();\n brushOption.brushType && this._doEnableBrush(brushOption);\n return this;\n };\n BrushController.prototype._doEnableBrush = function (brushOption) {\n var zr = this._zr;\n // Consider roam, which takes globalPan too.\n if (!this._enableGlobalPan) {\n interactionMutex.take(zr, MUTEX_RESOURCE_KEY, this._uid);\n }\n each(this._handlers, function (handler, eventName) {\n zr.on(eventName, handler);\n });\n this._brushType = brushOption.brushType;\n this._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);\n };\n BrushController.prototype._doDisableBrush = function () {\n var zr = this._zr;\n interactionMutex.release(zr, MUTEX_RESOURCE_KEY, this._uid);\n each(this._handlers, function (handler, eventName) {\n zr.off(eventName, handler);\n });\n this._brushType = this._brushOption = null;\n };\n /**\n * @param panelOpts If not pass, it is global brush.\n */\n BrushController.prototype.setPanels = function (panelOpts) {\n if (panelOpts && panelOpts.length) {\n var panels_1 = this._panels = {};\n each(panelOpts, function (panelOpts) {\n panels_1[panelOpts.panelId] = clone(panelOpts);\n });\n } else {\n this._panels = null;\n }\n return this;\n };\n BrushController.prototype.mount = function (opt) {\n opt = opt || {};\n if (process.env.NODE_ENV !== 'production') {\n this._mounted = true; // should be at first.\n }\n\n this._enableGlobalPan = opt.enableGlobalPan;\n var thisGroup = this.group;\n this._zr.add(thisGroup);\n thisGroup.attr({\n x: opt.x || 0,\n y: opt.y || 0,\n rotation: opt.rotation || 0,\n scaleX: opt.scaleX || 1,\n scaleY: opt.scaleY || 1\n });\n this._transform = thisGroup.getLocalTransform();\n return this;\n };\n // eachCover(cb, context): void {\n // each(this._covers, cb, context);\n // }\n /**\n * Update covers.\n * @param coverConfigList\n * If coverConfigList is null/undefined, all covers removed.\n */\n BrushController.prototype.updateCovers = function (coverConfigList) {\n if (process.env.NODE_ENV !== 'production') {\n assert(this._mounted);\n }\n coverConfigList = map(coverConfigList, function (coverConfig) {\n return merge(clone(DEFAULT_BRUSH_OPT), coverConfig, true);\n });\n var tmpIdPrefix = '\\0-brush-index-';\n var oldCovers = this._covers;\n var newCovers = this._covers = [];\n var controller = this;\n var creatingCover = this._creatingCover;\n new DataDiffer(oldCovers, coverConfigList, oldGetKey, getKey).add(addOrUpdate).update(addOrUpdate).remove(remove).execute();\n return this;\n function getKey(brushOption, index) {\n return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index) + '-' + brushOption.brushType;\n }\n function oldGetKey(cover, index) {\n return getKey(cover.__brushOption, index);\n }\n function addOrUpdate(newIndex, oldIndex) {\n var newBrushInternal = coverConfigList[newIndex];\n // Consider setOption in event listener of brushSelect,\n // where updating cover when creating should be forbidden.\n if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n newCovers[newIndex] = oldCovers[oldIndex];\n } else {\n var cover = newCovers[newIndex] = oldIndex != null ? (oldCovers[oldIndex].__brushOption = newBrushInternal, oldCovers[oldIndex]) : endCreating(controller, createCover(controller, newBrushInternal));\n updateCoverAfterCreation(controller, cover);\n }\n }\n function remove(oldIndex) {\n if (oldCovers[oldIndex] !== creatingCover) {\n controller.group.remove(oldCovers[oldIndex]);\n }\n }\n };\n BrushController.prototype.unmount = function () {\n if (process.env.NODE_ENV !== 'production') {\n if (!this._mounted) {\n return;\n }\n }\n this.enableBrush(false);\n // container may 'removeAll' outside.\n clearCovers(this);\n this._zr.remove(this.group);\n if (process.env.NODE_ENV !== 'production') {\n this._mounted = false; // should be at last.\n }\n\n return this;\n };\n BrushController.prototype.dispose = function () {\n this.unmount();\n this.off();\n };\n return BrushController;\n}(Eventful);\nfunction createCover(controller, brushOption) {\n var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);\n cover.__brushOption = brushOption;\n updateZ(cover, brushOption);\n controller.group.add(cover);\n return cover;\n}\nfunction endCreating(controller, creatingCover) {\n var coverRenderer = getCoverRenderer(creatingCover);\n if (coverRenderer.endCreating) {\n coverRenderer.endCreating(controller, creatingCover);\n updateZ(creatingCover, creatingCover.__brushOption);\n }\n return creatingCover;\n}\nfunction updateCoverShape(controller, cover) {\n var brushOption = cover.__brushOption;\n getCoverRenderer(cover).updateCoverShape(controller, cover, brushOption.range, brushOption);\n}\nfunction updateZ(cover, brushOption) {\n var z = brushOption.z;\n z == null && (z = COVER_Z);\n cover.traverse(function (el) {\n el.z = z;\n el.z2 = z; // Consider in given container.\n });\n}\n\nfunction updateCoverAfterCreation(controller, cover) {\n getCoverRenderer(cover).updateCommon(controller, cover);\n updateCoverShape(controller, cover);\n}\nfunction getCoverRenderer(cover) {\n return coverRenderers[cover.__brushOption.brushType];\n}\n// return target panel or `true` (means global panel)\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n var panels = controller._panels;\n if (!panels) {\n return BRUSH_PANEL_GLOBAL; // Global panel\n }\n\n var panel;\n var transform = controller._transform;\n each(panels, function (pn) {\n pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);\n });\n return panel;\n}\n// Return a panel or true\nfunction getPanelByCover(controller, cover) {\n var panels = controller._panels;\n if (!panels) {\n return BRUSH_PANEL_GLOBAL; // Global panel\n }\n\n var panelId = cover.__brushOption.panelId;\n // User may give cover without coord sys info,\n // which is then treated as global panel.\n return panelId != null ? panels[panelId] : BRUSH_PANEL_GLOBAL;\n}\nfunction clearCovers(controller) {\n var covers = controller._covers;\n var originalLength = covers.length;\n each(covers, function (cover) {\n controller.group.remove(cover);\n }, controller);\n covers.length = 0;\n return !!originalLength;\n}\nfunction trigger(controller, opt) {\n var areas = map(controller._covers, function (cover) {\n var brushOption = cover.__brushOption;\n var range = clone(brushOption.range);\n return {\n brushType: brushOption.brushType,\n panelId: brushOption.panelId,\n range: range\n };\n });\n controller.trigger('brush', {\n areas: areas,\n isEnd: !!opt.isEnd,\n removeOnClick: !!opt.removeOnClick\n });\n}\nfunction shouldShowCover(controller) {\n var track = controller._track;\n if (!track.length) {\n return false;\n }\n var p2 = track[track.length - 1];\n var p1 = track[0];\n var dx = p2[0] - p1[0];\n var dy = p2[1] - p1[1];\n var dist = mathPow(dx * dx + dy * dy, 0.5);\n return dist > UNSELECT_THRESHOLD;\n}\nfunction getTrackEnds(track) {\n var tail = track.length - 1;\n tail < 0 && (tail = 0);\n return [track[0], track[tail]];\n}\n;\nfunction createBaseRectCover(rectRangeConverter, controller, brushOption, edgeNameSequences) {\n var cover = new graphic.Group();\n cover.add(new graphic.Rect({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true,\n draggable: true,\n cursor: 'move',\n drift: curry(driftRect, rectRangeConverter, controller, cover, ['n', 's', 'w', 'e']),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n each(edgeNameSequences, function (nameSequence) {\n cover.add(new graphic.Rect({\n name: nameSequence.join(''),\n style: {\n opacity: 0\n },\n draggable: true,\n silent: true,\n invisible: true,\n drift: curry(driftRect, rectRangeConverter, controller, cover, nameSequence),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n });\n return cover;\n}\nfunction updateBaseRect(controller, cover, localRange, brushOption) {\n var lineWidth = brushOption.brushStyle.lineWidth || 0;\n var handleSize = mathMax(lineWidth, MIN_RESIZE_LINE_WIDTH);\n var x = localRange[0][0];\n var y = localRange[1][0];\n var xa = x - lineWidth / 2;\n var ya = y - lineWidth / 2;\n var x2 = localRange[0][1];\n var y2 = localRange[1][1];\n var x2a = x2 - handleSize + lineWidth / 2;\n var y2a = y2 - handleSize + lineWidth / 2;\n var width = x2 - x;\n var height = y2 - y;\n var widtha = width + lineWidth;\n var heighta = height + lineWidth;\n updateRectShape(controller, cover, 'main', x, y, width, height);\n if (brushOption.transformable) {\n updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);\n updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);\n updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);\n updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);\n updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);\n updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);\n }\n}\nfunction updateCommon(controller, cover) {\n var brushOption = cover.__brushOption;\n var transformable = brushOption.transformable;\n var mainEl = cover.childAt(0);\n mainEl.useStyle(makeStyle(brushOption));\n mainEl.attr({\n silent: !transformable,\n cursor: transformable ? 'move' : 'default'\n });\n each([['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']], function (nameSequence) {\n var el = cover.childOfName(nameSequence.join(''));\n var globalDir = nameSequence.length === 1 ? getGlobalDirection1(controller, nameSequence[0]) : getGlobalDirection2(controller, nameSequence);\n el && el.attr({\n silent: !transformable,\n invisible: !transformable,\n cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n });\n });\n}\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n var el = cover.childOfName(name);\n el && el.setShape(pointsToRect(clipByPanel(controller, cover, [[x, y], [x + w, y + h]])));\n}\nfunction makeStyle(brushOption) {\n return defaults({\n strokeNoScale: true\n }, brushOption.brushStyle);\n}\nfunction formatRectRange(x, y, x2, y2) {\n var min = [mathMin(x, x2), mathMin(y, y2)];\n var max = [mathMax(x, x2), mathMax(y, y2)];\n return [[min[0], max[0]], [min[1], max[1]] // y range\n ];\n}\n\nfunction getTransform(controller) {\n return graphic.getTransform(controller.group);\n}\nfunction getGlobalDirection1(controller, localDirName) {\n var map = {\n w: 'left',\n e: 'right',\n n: 'top',\n s: 'bottom'\n };\n var inverseMap = {\n left: 'w',\n right: 'e',\n top: 'n',\n bottom: 's'\n };\n var dir = graphic.transformDirection(map[localDirName], getTransform(controller));\n return inverseMap[dir];\n}\nfunction getGlobalDirection2(controller, localDirNameSeq) {\n var globalDir = [getGlobalDirection1(controller, localDirNameSeq[0]), getGlobalDirection1(controller, localDirNameSeq[1])];\n (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n return globalDir.join('');\n}\nfunction driftRect(rectRangeConverter, controller, cover, dirNameSequence, dx, dy) {\n var brushOption = cover.__brushOption;\n var rectRange = rectRangeConverter.toRectRange(brushOption.range);\n var localDelta = toLocalDelta(controller, dx, dy);\n each(dirNameSequence, function (dirName) {\n var ind = DIRECTION_MAP[dirName];\n rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n });\n brushOption.range = rectRangeConverter.fromRectRange(formatRectRange(rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]));\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\nfunction driftPolygon(controller, cover, dx, dy) {\n var range = cover.__brushOption.range;\n var localDelta = toLocalDelta(controller, dx, dy);\n each(range, function (point) {\n point[0] += localDelta[0];\n point[1] += localDelta[1];\n });\n updateCoverAfterCreation(controller, cover);\n trigger(controller, {\n isEnd: false\n });\n}\nfunction toLocalDelta(controller, dx, dy) {\n var thisGroup = controller.group;\n var localD = thisGroup.transformCoordToLocal(dx, dy);\n var localZero = thisGroup.transformCoordToLocal(0, 0);\n return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\nfunction clipByPanel(controller, cover, data) {\n var panel = getPanelByCover(controller, cover);\n return panel && panel !== BRUSH_PANEL_GLOBAL ? panel.clipPath(data, controller._transform) : clone(data);\n}\nfunction pointsToRect(points) {\n var xmin = mathMin(points[0][0], points[1][0]);\n var ymin = mathMin(points[0][1], points[1][1]);\n var xmax = mathMax(points[0][0], points[1][0]);\n var ymax = mathMax(points[0][1], points[1][1]);\n return {\n x: xmin,\n y: ymin,\n width: xmax - xmin,\n height: ymax - ymin\n };\n}\nfunction resetCursor(controller, e, localCursorPoint) {\n if (\n // Check active\n !controller._brushType\n // resetCursor should be always called when mouse is in zr area,\n // but not called when mouse is out of zr area to avoid bad influence\n // if `mousemove`, `mouseup` are triggered from `document` event.\n || isOutsideZrArea(controller, e.offsetX, e.offsetY)) {\n return;\n }\n var zr = controller._zr;\n var covers = controller._covers;\n var currPanel = getPanelByPoint(controller, e, localCursorPoint);\n // Check whether in covers.\n if (!controller._dragging) {\n for (var i = 0; i < covers.length; i++) {\n var brushOption = covers[i].__brushOption;\n if (currPanel && (currPanel === BRUSH_PANEL_GLOBAL || brushOption.panelId === currPanel.panelId) && coverRenderers[brushOption.brushType].contain(covers[i], localCursorPoint[0], localCursorPoint[1])) {\n // Use cursor style set on cover.\n return;\n }\n }\n }\n currPanel && zr.setCursorStyle('crosshair');\n}\nfunction preventDefault(e) {\n var rawE = e.event;\n rawE.preventDefault && rawE.preventDefault();\n}\nfunction mainShapeContain(cover, x, y) {\n return cover.childOfName('main').contain(x, y);\n}\nfunction updateCoverByMouse(controller, e, localCursorPoint, isEnd) {\n var creatingCover = controller._creatingCover;\n var panel = controller._creatingPanel;\n var thisBrushOption = controller._brushOption;\n var eventParams;\n controller._track.push(localCursorPoint.slice());\n if (shouldShowCover(controller) || creatingCover) {\n if (panel && !creatingCover) {\n thisBrushOption.brushMode === 'single' && clearCovers(controller);\n var brushOption = clone(thisBrushOption);\n brushOption.brushType = determineBrushType(brushOption.brushType, panel);\n brushOption.panelId = panel === BRUSH_PANEL_GLOBAL ? null : panel.panelId;\n creatingCover = controller._creatingCover = createCover(controller, brushOption);\n controller._covers.push(creatingCover);\n }\n if (creatingCover) {\n var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n var coverBrushOption = creatingCover.__brushOption;\n coverBrushOption.range = coverRenderer.getCreatingRange(clipByPanel(controller, creatingCover, controller._track));\n if (isEnd) {\n endCreating(controller, creatingCover);\n coverRenderer.updateCommon(controller, creatingCover);\n }\n updateCoverShape(controller, creatingCover);\n eventParams = {\n isEnd: isEnd\n };\n }\n } else if (isEnd && thisBrushOption.brushMode === 'single' && thisBrushOption.removeOnClick) {\n // Help user to remove covers easily, only by a tiny drag, in 'single' mode.\n // But a single click do not clear covers, because user may have casual\n // clicks (for example, click on other component and do not expect covers\n // disappear).\n // Only some cover removed, trigger action, but not every click trigger action.\n if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {\n eventParams = {\n isEnd: isEnd,\n removeOnClick: true\n };\n }\n }\n return eventParams;\n}\nfunction determineBrushType(brushType, panel) {\n if (brushType === 'auto') {\n if (process.env.NODE_ENV !== 'production') {\n assert(panel && panel.defaultBrushType, 'MUST have defaultBrushType when brushType is \"atuo\"');\n }\n return panel.defaultBrushType;\n }\n return brushType;\n}\nvar pointerHandlers = {\n mousedown: function (e) {\n if (this._dragging) {\n // In case some browser do not support globalOut,\n // and release mouse out side the browser.\n handleDragEnd(this, e);\n } else if (!e.target || !e.target.draggable) {\n preventDefault(e);\n var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n this._creatingCover = null;\n var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);\n if (panel) {\n this._dragging = true;\n this._track = [localCursorPoint.slice()];\n }\n }\n },\n mousemove: function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = this.group.transformCoordToLocal(x, y);\n resetCursor(this, e, localCursorPoint);\n if (this._dragging) {\n preventDefault(e);\n var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n eventParams && trigger(this, eventParams);\n }\n },\n mouseup: function (e) {\n handleDragEnd(this, e);\n }\n};\nfunction handleDragEnd(controller, e) {\n if (controller._dragging) {\n preventDefault(e);\n var x = e.offsetX;\n var y = e.offsetY;\n var localCursorPoint = controller.group.transformCoordToLocal(x, y);\n var eventParams = updateCoverByMouse(controller, e, localCursorPoint, true);\n controller._dragging = false;\n controller._track = [];\n controller._creatingCover = null;\n // trigger event should be at final, after procedure will be nested.\n eventParams && trigger(controller, eventParams);\n }\n}\nfunction isOutsideZrArea(controller, x, y) {\n var zr = controller._zr;\n return x < 0 || x > zr.getWidth() || y < 0 || y > zr.getHeight();\n}\n/**\n * key: brushType\n */\nvar coverRenderers = {\n lineX: getLineRenderer(0),\n lineY: getLineRenderer(1),\n rect: {\n createCover: function (controller, brushOption) {\n function returnInput(range) {\n return range;\n }\n return createBaseRectCover({\n toRectRange: returnInput,\n fromRectRange: returnInput\n }, controller, brushOption, [['w'], ['e'], ['n'], ['s'], ['s', 'e'], ['s', 'w'], ['n', 'e'], ['n', 'w']]);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n updateBaseRect(controller, cover, localRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n },\n polygon: {\n createCover: function (controller, brushOption) {\n var cover = new graphic.Group();\n // Do not use graphic.Polygon because graphic.Polyline do not close the\n // border of the shape when drawing, which is a better experience for user.\n cover.add(new graphic.Polyline({\n name: 'main',\n style: makeStyle(brushOption),\n silent: true\n }));\n return cover;\n },\n getCreatingRange: function (localTrack) {\n return localTrack;\n },\n endCreating: function (controller, cover) {\n cover.remove(cover.childAt(0));\n // Use graphic.Polygon close the shape.\n cover.add(new graphic.Polygon({\n name: 'main',\n draggable: true,\n drift: curry(driftPolygon, controller, cover),\n ondragend: curry(trigger, controller, {\n isEnd: true\n })\n }));\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n cover.childAt(0).setShape({\n points: clipByPanel(controller, cover, localRange)\n });\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n }\n};\nfunction getLineRenderer(xyIndex) {\n return {\n createCover: function (controller, brushOption) {\n return createBaseRectCover({\n toRectRange: function (range) {\n var rectRange = [range, [0, 100]];\n xyIndex && rectRange.reverse();\n return rectRange;\n },\n fromRectRange: function (rectRange) {\n return rectRange[xyIndex];\n }\n }, controller, brushOption, [[['w'], ['e']], [['n'], ['s']]][xyIndex]);\n },\n getCreatingRange: function (localTrack) {\n var ends = getTrackEnds(localTrack);\n var min = mathMin(ends[0][xyIndex], ends[1][xyIndex]);\n var max = mathMax(ends[0][xyIndex], ends[1][xyIndex]);\n return [min, max];\n },\n updateCoverShape: function (controller, cover, localRange, brushOption) {\n var otherExtent;\n // If brushWidth not specified, fit the panel.\n var panel = getPanelByCover(controller, cover);\n if (panel !== BRUSH_PANEL_GLOBAL && panel.getLinearBrushOtherExtent) {\n otherExtent = panel.getLinearBrushOtherExtent(xyIndex);\n } else {\n var zr = controller._zr;\n otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n }\n var rectRange = [localRange, otherExtent];\n xyIndex && rectRange.reverse();\n updateBaseRect(controller, cover, rectRange, brushOption);\n },\n updateCommon: updateCommon,\n contain: mainShapeContain\n };\n}\nexport default BrushController;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar IRRELEVANT_EXCLUDES = {\n 'axisPointer': 1,\n 'tooltip': 1,\n 'brush': 1\n};\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\nexport function onIrrelevantElement(e, api, targetCoordSysModel) {\n var model = api.getComponentByElement(e.topTarget);\n // If model is axisModel, it works only if it is injected with coordinateSystem.\n var coordSys = model && model.coordinateSystem;\n return model && model !== targetCoordSysModel && !IRRELEVANT_EXCLUDES.hasOwnProperty(model.mainType) && coordSys && coordSys.model !== targetCoordSysModel;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport BoundingRect from 'zrender/lib/core/BoundingRect.js';\nimport { onIrrelevantElement } from './cursorHelper.js';\nimport * as graphicUtil from '../../util/graphic.js';\nexport function makeRectPanelClipPath(rect) {\n rect = normalizeRect(rect);\n return function (localPoints) {\n return graphicUtil.clipPointsByRect(localPoints, rect);\n };\n}\nexport function makeLinearBrushOtherExtent(rect, specifiedXYIndex) {\n rect = normalizeRect(rect);\n return function (xyIndex) {\n var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;\n var brushWidth = idx ? rect.width : rect.height;\n var base = idx ? rect.x : rect.y;\n return [base, base + (brushWidth || 0)];\n };\n}\nexport function makeRectIsTargetByCursor(rect, api, targetModel) {\n var boundingRect = normalizeRect(rect);\n return function (e, localCursorPoint) {\n return boundingRect.contain(localCursorPoint[0], localCursorPoint[1]) && !onIrrelevantElement(e, api, targetModel);\n };\n}\n// Consider width/height is negative.\nfunction normalizeRect(rect) {\n return BoundingRect.create(rect);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { each, indexOf, curry, assert, map, createHashMap } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as brushHelper from './brushHelper.js';\nimport { parseFinder as modelUtilParseFinder } from '../../util/model.js';\n// FIXME\n// how to genarialize to more coordinate systems.\nvar INCLUDE_FINDER_MAIN_TYPES = ['grid', 'xAxis', 'yAxis', 'geo', 'graph', 'polar', 'radiusAxis', 'angleAxis', 'bmap'];\nvar BrushTargetManager = /** @class */function () {\n /**\n * @param finder contains Index/Id/Name of xAxis/yAxis/geo/grid\n * Each can be {number|Array.}. like: {xAxisIndex: [3, 4]}\n * @param opt.include include coordinate system types.\n */\n function BrushTargetManager(finder, ecModel, opt) {\n var _this = this;\n this._targetInfoList = [];\n var foundCpts = parseFinder(ecModel, finder);\n each(targetInfoBuilders, function (builder, type) {\n if (!opt || !opt.include || indexOf(opt.include, type) >= 0) {\n builder(foundCpts, _this._targetInfoList);\n }\n });\n }\n BrushTargetManager.prototype.setOutputRanges = function (areas, ecModel) {\n this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n (area.coordRanges || (area.coordRanges = [])).push(coordRange);\n // area.coordRange is the first of area.coordRanges\n if (!area.coordRange) {\n area.coordRange = coordRange;\n // In 'category' axis, coord to pixel is not reversible, so we can not\n // rebuild range by coordRange accrately, which may bring trouble when\n // brushing only one item. So we use __rangeOffset to rebuilding range\n // by coordRange. And this it only used in brush component so it is no\n // need to be adapted to coordRanges.\n var result = coordConvert[area.brushType](0, coordSys, coordRange);\n area.__rangeOffset = {\n offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),\n xyMinMax: result.xyMinMax\n };\n }\n });\n return areas;\n };\n BrushTargetManager.prototype.matchOutputRanges = function (areas, ecModel, cb) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n if (targetInfo && targetInfo !== true) {\n each(targetInfo.coordSyses, function (coordSys) {\n var result = coordConvert[area.brushType](1, coordSys, area.range, true);\n cb(area, result.values, coordSys, ecModel);\n });\n }\n }, this);\n };\n /**\n * the `areas` is `BrushModel.areas`.\n * Called in layout stage.\n * convert `area.coordRange` to global range and set panelId to `area.range`.\n */\n BrushTargetManager.prototype.setInputRanges = function (areas, ecModel) {\n each(areas, function (area) {\n var targetInfo = this.findTargetInfo(area, ecModel);\n if (process.env.NODE_ENV !== 'production') {\n assert(!targetInfo || targetInfo === true || area.coordRange, 'coordRange must be specified when coord index specified.');\n assert(!targetInfo || targetInfo !== true || area.range, 'range must be specified in global brush.');\n }\n area.range = area.range || [];\n // convert coordRange to global range and set panelId.\n if (targetInfo && targetInfo !== true) {\n area.panelId = targetInfo.panelId;\n // (1) area.range should always be calculate from coordRange but does\n // not keep its original value, for the sake of the dataZoom scenario,\n // where area.coordRange remains unchanged but area.range may be changed.\n // (2) Only support converting one coordRange to pixel range in brush\n // component. So do not consider `coordRanges`.\n // (3) About __rangeOffset, see comment above.\n var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n var rangeOffset = area.__rangeOffset;\n area.range = rangeOffset ? diffProcessor[area.brushType](result.values, rangeOffset.offset, getScales(result.xyMinMax, rangeOffset.xyMinMax)) : result.values;\n }\n }, this);\n };\n BrushTargetManager.prototype.makePanelOpts = function (api, getDefaultBrushType) {\n return map(this._targetInfoList, function (targetInfo) {\n var rect = targetInfo.getPanelRect();\n return {\n panelId: targetInfo.panelId,\n defaultBrushType: getDefaultBrushType ? getDefaultBrushType(targetInfo) : null,\n clipPath: brushHelper.makeRectPanelClipPath(rect),\n isTargetByCursor: brushHelper.makeRectIsTargetByCursor(rect, api, targetInfo.coordSysModel),\n getLinearBrushOtherExtent: brushHelper.makeLinearBrushOtherExtent(rect)\n };\n });\n };\n BrushTargetManager.prototype.controlSeries = function (area, seriesModel, ecModel) {\n // Check whether area is bound in coord, and series do not belong to that coord.\n // If do not do this check, some brush (like lineX) will controll all axes.\n var targetInfo = this.findTargetInfo(area, ecModel);\n return targetInfo === true || targetInfo && indexOf(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0;\n };\n /**\n * If return Object, a coord found.\n * If return true, global found.\n * Otherwise nothing found.\n */\n BrushTargetManager.prototype.findTargetInfo = function (area, ecModel) {\n var targetInfoList = this._targetInfoList;\n var foundCpts = parseFinder(ecModel, area);\n for (var i = 0; i < targetInfoList.length; i++) {\n var targetInfo = targetInfoList[i];\n var areaPanelId = area.panelId;\n if (areaPanelId) {\n if (targetInfo.panelId === areaPanelId) {\n return targetInfo;\n }\n } else {\n for (var j = 0; j < targetInfoMatchers.length; j++) {\n if (targetInfoMatchers[j](foundCpts, targetInfo)) {\n return targetInfo;\n }\n }\n }\n }\n return true;\n };\n return BrushTargetManager;\n}();\nfunction formatMinMax(minMax) {\n minMax[0] > minMax[1] && minMax.reverse();\n return minMax;\n}\nfunction parseFinder(ecModel, finder) {\n return modelUtilParseFinder(ecModel, finder, {\n includeMainTypes: INCLUDE_FINDER_MAIN_TYPES\n });\n}\nvar targetInfoBuilders = {\n grid: function (foundCpts, targetInfoList) {\n var xAxisModels = foundCpts.xAxisModels;\n var yAxisModels = foundCpts.yAxisModels;\n var gridModels = foundCpts.gridModels;\n // Remove duplicated.\n var gridModelMap = createHashMap();\n var xAxesHas = {};\n var yAxesHas = {};\n if (!xAxisModels && !yAxisModels && !gridModels) {\n return;\n }\n each(xAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n });\n each(yAxisModels, function (axisModel) {\n var gridModel = axisModel.axis.grid.model;\n gridModelMap.set(gridModel.id, gridModel);\n yAxesHas[gridModel.id] = true;\n });\n each(gridModels, function (gridModel) {\n gridModelMap.set(gridModel.id, gridModel);\n xAxesHas[gridModel.id] = true;\n yAxesHas[gridModel.id] = true;\n });\n gridModelMap.each(function (gridModel) {\n var grid = gridModel.coordinateSystem;\n var cartesians = [];\n each(grid.getCartesians(), function (cartesian, index) {\n if (indexOf(xAxisModels, cartesian.getAxis('x').model) >= 0 || indexOf(yAxisModels, cartesian.getAxis('y').model) >= 0) {\n cartesians.push(cartesian);\n }\n });\n targetInfoList.push({\n panelId: 'grid--' + gridModel.id,\n gridModel: gridModel,\n coordSysModel: gridModel,\n // Use the first one as the representitive coordSys.\n coordSys: cartesians[0],\n coordSyses: cartesians,\n getPanelRect: panelRectBuilders.grid,\n xAxisDeclared: xAxesHas[gridModel.id],\n yAxisDeclared: yAxesHas[gridModel.id]\n });\n });\n },\n geo: function (foundCpts, targetInfoList) {\n each(foundCpts.geoModels, function (geoModel) {\n var coordSys = geoModel.coordinateSystem;\n targetInfoList.push({\n panelId: 'geo--' + geoModel.id,\n geoModel: geoModel,\n coordSysModel: geoModel,\n coordSys: coordSys,\n coordSyses: [coordSys],\n getPanelRect: panelRectBuilders.geo\n });\n });\n }\n};\nvar targetInfoMatchers = [\n// grid\nfunction (foundCpts, targetInfo) {\n var xAxisModel = foundCpts.xAxisModel;\n var yAxisModel = foundCpts.yAxisModel;\n var gridModel = foundCpts.gridModel;\n !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n return gridModel && gridModel === targetInfo.gridModel;\n},\n// geo\nfunction (foundCpts, targetInfo) {\n var geoModel = foundCpts.geoModel;\n return geoModel && geoModel === targetInfo.geoModel;\n}];\nvar panelRectBuilders = {\n grid: function () {\n // grid is not Transformable.\n return this.coordSys.master.getRect().clone();\n },\n geo: function () {\n var coordSys = this.coordSys;\n var rect = coordSys.getBoundingRect().clone();\n // geo roam and zoom transform\n rect.applyTransform(graphic.getTransform(coordSys));\n return rect;\n }\n};\nvar coordConvert = {\n lineX: curry(axisConvert, 0),\n lineY: curry(axisConvert, 1),\n rect: function (to, coordSys, rangeOrCoordRange, clamp) {\n var xminymin = to ? coordSys.pointToData([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]], clamp);\n var xmaxymax = to ? coordSys.pointToData([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp) : coordSys.dataToPoint([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]], clamp);\n var values = [formatMinMax([xminymin[0], xmaxymax[0]]), formatMinMax([xminymin[1], xmaxymax[1]])];\n return {\n values: values,\n xyMinMax: values\n };\n },\n polygon: function (to, coordSys, rangeOrCoordRange, clamp) {\n var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];\n var values = map(rangeOrCoordRange, function (item) {\n var p = to ? coordSys.pointToData(item, clamp) : coordSys.dataToPoint(item, clamp);\n xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);\n xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);\n xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);\n xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);\n return p;\n });\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n }\n};\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n if (process.env.NODE_ENV !== 'production') {\n assert(coordSys.type === 'cartesian2d', 'lineX/lineY brush is available only in cartesian2d.');\n }\n var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n var values = formatMinMax(map([0, 1], function (i) {\n return to ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]), true) : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n }));\n var xyMinMax = [];\n xyMinMax[axisNameIndex] = values;\n xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n return {\n values: values,\n xyMinMax: xyMinMax\n };\n}\nvar diffProcessor = {\n lineX: curry(axisDiffProcessor, 0),\n lineY: curry(axisDiffProcessor, 1),\n rect: function (values, refer, scales) {\n return [[values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]], [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]];\n },\n polygon: function (values, refer, scales) {\n return map(values, function (item, idx) {\n return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];\n });\n }\n};\nfunction axisDiffProcessor(axisNameIndex, values, refer, scales) {\n return [values[0] - scales[axisNameIndex] * refer[0], values[1] - scales[axisNameIndex] * refer[1]];\n}\n// We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\n// Return [0~1, 0~1]\nfunction getScales(xyMinMaxCurr, xyMinMaxOrigin) {\n var sizeCurr = getSize(xyMinMaxCurr);\n var sizeOrigin = getSize(xyMinMaxOrigin);\n var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];\n isNaN(scales[0]) && (scales[0] = 1);\n isNaN(scales[1]) && (scales[1] = 1);\n return scales;\n}\nfunction getSize(xyMinMax) {\n return xyMinMax ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]] : [NaN, NaN];\n}\nexport default BrushTargetManager;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\n// TODO depends on DataZoom and Brush\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport BrushController from '../../helper/BrushController.js';\nimport BrushTargetManager from '../../helper/BrushTargetManager.js';\nimport * as history from '../../dataZoom/history.js';\nimport sliderMove from '../../helper/sliderMove.js';\nimport { ToolboxFeature } from '../featureManager.js';\nimport { makeInternalComponentId, parseFinder } from '../../../util/model.js';\nimport { registerInternalOptionCreator } from '../../../model/internalComponentCreator.js';\nvar each = zrUtil.each;\nvar DATA_ZOOM_ID_BASE = makeInternalComponentId('toolbox-dataZoom_');\nvar ICON_TYPES = ['zoom', 'back'];\nvar DataZoomFeature = /** @class */function (_super) {\n __extends(DataZoomFeature, _super);\n function DataZoomFeature() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n DataZoomFeature.prototype.render = function (featureModel, ecModel, api, payload) {\n if (!this._brushController) {\n this._brushController = new BrushController(api.getZr());\n this._brushController.on('brush', zrUtil.bind(this._onBrush, this)).mount();\n }\n updateZoomBtnStatus(featureModel, ecModel, this, payload, api);\n updateBackBtnStatus(featureModel, ecModel);\n };\n DataZoomFeature.prototype.onclick = function (ecModel, api, type) {\n handlers[type].call(this);\n };\n DataZoomFeature.prototype.remove = function (ecModel, api) {\n this._brushController && this._brushController.unmount();\n };\n DataZoomFeature.prototype.dispose = function (ecModel, api) {\n this._brushController && this._brushController.dispose();\n };\n DataZoomFeature.prototype._onBrush = function (eventParam) {\n var areas = eventParam.areas;\n if (!eventParam.isEnd || !areas.length) {\n return;\n }\n var snapshot = {};\n var ecModel = this.ecModel;\n this._brushController.updateCovers([]); // remove cover\n var brushTargetManager = new BrushTargetManager(makeAxisFinder(this.model), ecModel, {\n include: ['grid']\n });\n brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n if (coordSys.type !== 'cartesian2d') {\n return;\n }\n var brushType = area.brushType;\n if (brushType === 'rect') {\n setBatch('x', coordSys, coordRange[0]);\n setBatch('y', coordSys, coordRange[1]);\n } else {\n setBatch({\n lineX: 'x',\n lineY: 'y'\n }[brushType], coordSys, coordRange);\n }\n });\n history.push(ecModel, snapshot);\n this._dispatchZoomAction(snapshot);\n function setBatch(dimName, coordSys, minMax) {\n var axis = coordSys.getAxis(dimName);\n var axisModel = axis.model;\n var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);\n // Restrict range.\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();\n if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {\n minMax = sliderMove(0, minMax.slice(), axis.scale.getExtent(), 0, minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan);\n }\n dataZoomModel && (snapshot[dataZoomModel.id] = {\n dataZoomId: dataZoomModel.id,\n startValue: minMax[0],\n endValue: minMax[1]\n });\n }\n function findDataZoom(dimName, axisModel, ecModel) {\n var found;\n ecModel.eachComponent({\n mainType: 'dataZoom',\n subType: 'select'\n }, function (dzModel) {\n var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);\n has && (found = dzModel);\n });\n return found;\n }\n };\n ;\n DataZoomFeature.prototype._dispatchZoomAction = function (snapshot) {\n var batch = [];\n // Convert from hash map to array.\n each(snapshot, function (batchItem, dataZoomId) {\n batch.push(zrUtil.clone(batchItem));\n });\n batch.length && this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n batch: batch\n });\n };\n DataZoomFeature.getDefaultOption = function (ecModel) {\n var defaultOption = {\n show: true,\n filterMode: 'filter',\n // Icon group\n icon: {\n zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',\n back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'\n },\n // `zoom`, `back`\n title: ecModel.getLocaleModel().get(['toolbox', 'dataZoom', 'title']),\n brushStyle: {\n borderWidth: 0,\n color: 'rgba(210,219,238,0.2)'\n }\n };\n return defaultOption;\n };\n return DataZoomFeature;\n}(ToolboxFeature);\nvar handlers = {\n zoom: function () {\n var nextActive = !this._isZoomActive;\n this.api.dispatchAction({\n type: 'takeGlobalCursor',\n key: 'dataZoomSelect',\n dataZoomSelectActive: nextActive\n });\n },\n back: function () {\n this._dispatchZoomAction(history.pop(this.ecModel));\n }\n};\nfunction makeAxisFinder(dzFeatureModel) {\n var setting = {\n xAxisIndex: dzFeatureModel.get('xAxisIndex', true),\n yAxisIndex: dzFeatureModel.get('yAxisIndex', true),\n xAxisId: dzFeatureModel.get('xAxisId', true),\n yAxisId: dzFeatureModel.get('yAxisId', true)\n };\n // If both `xAxisIndex` `xAxisId` not set, it means 'all'.\n // If both `yAxisIndex` `yAxisId` not set, it means 'all'.\n // Some old cases set like this below to close yAxis control but leave xAxis control:\n // `{ feature: { dataZoom: { yAxisIndex: false } }`.\n if (setting.xAxisIndex == null && setting.xAxisId == null) {\n setting.xAxisIndex = 'all';\n }\n if (setting.yAxisIndex == null && setting.yAxisId == null) {\n setting.yAxisIndex = 'all';\n }\n return setting;\n}\nfunction updateBackBtnStatus(featureModel, ecModel) {\n featureModel.setIconStatus('back', history.count(ecModel) > 1 ? 'emphasis' : 'normal');\n}\nfunction updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {\n var zoomActive = view._isZoomActive;\n if (payload && payload.type === 'takeGlobalCursor') {\n zoomActive = payload.key === 'dataZoomSelect' ? payload.dataZoomSelectActive : false;\n }\n view._isZoomActive = zoomActive;\n featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');\n var brushTargetManager = new BrushTargetManager(makeAxisFinder(featureModel), ecModel, {\n include: ['grid']\n });\n var panels = brushTargetManager.makePanelOpts(api, function (targetInfo) {\n return targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared ? 'lineX' : !targetInfo.xAxisDeclared && targetInfo.yAxisDeclared ? 'lineY' : 'rect';\n });\n view._brushController.setPanels(panels).enableBrush(zoomActive && panels.length ? {\n brushType: 'auto',\n brushStyle: featureModel.getModel('brushStyle').getItemStyle()\n } : false);\n}\nregisterInternalOptionCreator('dataZoom', function (ecModel) {\n var toolboxModel = ecModel.getComponent('toolbox', 0);\n var featureDataZoomPath = ['feature', 'dataZoom'];\n if (!toolboxModel || toolboxModel.get(featureDataZoomPath) == null) {\n return;\n }\n var dzFeatureModel = toolboxModel.getModel(featureDataZoomPath);\n var dzOptions = [];\n var finder = makeAxisFinder(dzFeatureModel);\n var finderResult = parseFinder(ecModel, finder);\n each(finderResult.xAxisModels, function (axisModel) {\n return buildInternalOptions(axisModel, 'xAxis', 'xAxisIndex');\n });\n each(finderResult.yAxisModels, function (axisModel) {\n return buildInternalOptions(axisModel, 'yAxis', 'yAxisIndex');\n });\n function buildInternalOptions(axisModel, axisMainType, axisIndexPropName) {\n var axisIndex = axisModel.componentIndex;\n var newOpt = {\n type: 'select',\n $fromToolbox: true,\n // Default to be filter\n filterMode: dzFeatureModel.get('filterMode', true) || 'filter',\n // Id for merge mapping.\n id: DATA_ZOOM_ID_BASE + axisMainType + axisIndex\n };\n newOpt[axisIndexPropName] = axisIndex;\n dzOptions.push(newOpt);\n }\n return dzOptions;\n});\nexport default DataZoomFeature;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installDataZoomSelect } from '../../component/dataZoom/installDataZoomSelect.js';\nimport ToolboxModel from './ToolboxModel.js';\nimport ToolboxView from './ToolboxView.js';\n// TODOD: REGISTER IN INSTALL\nimport { registerFeature } from './featureManager.js';\nimport SaveAsImage from './feature/SaveAsImage.js';\nimport MagicType from './feature/MagicType.js';\nimport DataView from './feature/DataView.js';\nimport Restore from './feature/Restore.js';\nimport DataZoom from './feature/DataZoom.js';\nexport function install(registers) {\n registers.registerComponentModel(ToolboxModel);\n registers.registerComponentView(ToolboxView);\n registerFeature('saveAsImage', SaveAsImage);\n registerFeature('magicType', MagicType);\n registerFeature('dataView', DataView);\n registerFeature('dataZoom', DataZoom);\n registerFeature('restore', Restore);\n use(installDataZoomSelect);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\nimport { inheritDefaultOption } from '../../util/component.js';\nvar InsideZoomModel = /** @class */function (_super) {\n __extends(InsideZoomModel, _super);\n function InsideZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = InsideZoomModel.type;\n return _this;\n }\n InsideZoomModel.type = 'dataZoom.inside';\n InsideZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {\n disabled: false,\n zoomLock: false,\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n moveOnMouseWheel: false,\n preventDefaultMouseMove: true\n });\n return InsideZoomModel;\n}(DataZoomModel);\nexport default InsideZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport Eventful from 'zrender/lib/core/Eventful.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport * as interactionMutex from './interactionMutex.js';\nimport { isString, bind, defaults, clone } from 'zrender/lib/core/util.js';\n;\nvar RoamController = /** @class */function (_super) {\n __extends(RoamController, _super);\n function RoamController(zr) {\n var _this = _super.call(this) || this;\n _this._zr = zr;\n // Avoid two roamController bind the same handler\n var mousedownHandler = bind(_this._mousedownHandler, _this);\n var mousemoveHandler = bind(_this._mousemoveHandler, _this);\n var mouseupHandler = bind(_this._mouseupHandler, _this);\n var mousewheelHandler = bind(_this._mousewheelHandler, _this);\n var pinchHandler = bind(_this._pinchHandler, _this);\n /**\n * Notice: only enable needed types. For example, if 'zoom'\n * is not needed, 'zoom' should not be enabled, otherwise\n * default mousewheel behaviour (scroll page) will be disabled.\n */\n _this.enable = function (controlType, opt) {\n // Disable previous first\n this.disable();\n this._opt = defaults(clone(opt) || {}, {\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n // By default, wheel do not trigger move.\n moveOnMouseWheel: false,\n preventDefaultMouseMove: true\n });\n if (controlType == null) {\n controlType = true;\n }\n if (controlType === true || controlType === 'move' || controlType === 'pan') {\n zr.on('mousedown', mousedownHandler);\n zr.on('mousemove', mousemoveHandler);\n zr.on('mouseup', mouseupHandler);\n }\n if (controlType === true || controlType === 'scale' || controlType === 'zoom') {\n zr.on('mousewheel', mousewheelHandler);\n zr.on('pinch', pinchHandler);\n }\n };\n _this.disable = function () {\n zr.off('mousedown', mousedownHandler);\n zr.off('mousemove', mousemoveHandler);\n zr.off('mouseup', mouseupHandler);\n zr.off('mousewheel', mousewheelHandler);\n zr.off('pinch', pinchHandler);\n };\n return _this;\n }\n RoamController.prototype.isDragging = function () {\n return this._dragging;\n };\n RoamController.prototype.isPinching = function () {\n return this._pinching;\n };\n RoamController.prototype.setPointerChecker = function (pointerChecker) {\n this.pointerChecker = pointerChecker;\n };\n RoamController.prototype.dispose = function () {\n this.disable();\n };\n RoamController.prototype._mousedownHandler = function (e) {\n if (eventTool.isMiddleOrRightButtonOnMouseUpDown(e)) {\n return;\n }\n var el = e.target;\n while (el) {\n if (el.draggable) {\n return;\n }\n // check if host is draggable\n el = el.__hostTarget || el.parent;\n }\n var x = e.offsetX;\n var y = e.offsetY;\n // Only check on mosedown, but not mousemove.\n // Mouse can be out of target when mouse moving.\n if (this.pointerChecker && this.pointerChecker(e, x, y)) {\n this._x = x;\n this._y = y;\n this._dragging = true;\n }\n };\n RoamController.prototype._mousemoveHandler = function (e) {\n if (!this._dragging || !isAvailableBehavior('moveOnMouseMove', e, this._opt) || e.gestureEvent === 'pinch' || interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n var x = e.offsetX;\n var y = e.offsetY;\n var oldX = this._x;\n var oldY = this._y;\n var dx = x - oldX;\n var dy = y - oldY;\n this._x = x;\n this._y = y;\n this._opt.preventDefaultMouseMove && eventTool.stop(e.event);\n trigger(this, 'pan', 'moveOnMouseMove', e, {\n dx: dx,\n dy: dy,\n oldX: oldX,\n oldY: oldY,\n newX: x,\n newY: y,\n isAvailableBehavior: null\n });\n };\n RoamController.prototype._mouseupHandler = function (e) {\n if (!eventTool.isMiddleOrRightButtonOnMouseUpDown(e)) {\n this._dragging = false;\n }\n };\n RoamController.prototype._mousewheelHandler = function (e) {\n var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt);\n var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt);\n var wheelDelta = e.wheelDelta;\n var absWheelDeltaDelta = Math.abs(wheelDelta);\n var originX = e.offsetX;\n var originY = e.offsetY;\n // wheelDelta maybe -0 in chrome mac.\n if (wheelDelta === 0 || !shouldZoom && !shouldMove) {\n return;\n }\n // If both `shouldZoom` and `shouldMove` is true, trigger\n // their event both, and the final behavior is determined\n // by event listener themselves.\n if (shouldZoom) {\n // Convenience:\n // Mac and VM Windows on Mac: scroll up: zoom out.\n // Windows: scroll up: zoom in.\n // FIXME: Should do more test in different environment.\n // wheelDelta is too complicated in difference nvironment\n // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),\n // although it has been normallized by zrender.\n // wheelDelta of mouse wheel is bigger than touch pad.\n var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;\n var scale = wheelDelta > 0 ? factor : 1 / factor;\n checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, {\n scale: scale,\n originX: originX,\n originY: originY,\n isAvailableBehavior: null\n });\n }\n if (shouldMove) {\n // FIXME: Should do more test in different environment.\n var absDelta = Math.abs(wheelDelta);\n // wheelDelta of mouse wheel is bigger than touch pad.\n var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);\n checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, {\n scrollDelta: scrollDelta,\n originX: originX,\n originY: originY,\n isAvailableBehavior: null\n });\n }\n };\n RoamController.prototype._pinchHandler = function (e) {\n if (interactionMutex.isTaken(this._zr, 'globalPan')) {\n return;\n }\n var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;\n checkPointerAndTrigger(this, 'zoom', null, e, {\n scale: scale,\n originX: e.pinchX,\n originY: e.pinchY,\n isAvailableBehavior: null\n });\n };\n return RoamController;\n}(Eventful);\nfunction checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n if (controller.pointerChecker && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)) {\n // When mouse is out of roamController rect,\n // default befavoius should not be be disabled, otherwise\n // page sliding is disabled, contrary to expectation.\n eventTool.stop(e.event);\n trigger(controller, eventName, behaviorToCheck, e, contollerEvent);\n }\n}\nfunction trigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n // Also provide behavior checker for event listener, for some case that\n // multiple components share one listener.\n contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e);\n // TODO should not have type issue.\n controller.trigger(eventName, contollerEvent);\n}\n// settings: {\n// zoomOnMouseWheel\n// moveOnMouseMove\n// moveOnMouseWheel\n// }\n// The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\nfunction isAvailableBehavior(behaviorToCheck, e, settings) {\n var setting = settings[behaviorToCheck];\n return !behaviorToCheck || setting && (!isString(setting) || e.event[setting + 'Key']);\n}\nexport default RoamController;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// Only create one roam controller for each coordinate system.\n// one roam controller might be refered by two inside data zoom\n// components (for example, one for x and one for y). When user\n// pan or zoom, only dispatch one action for those data zoom\n// components.\nimport RoamController from '../../component/helper/RoamController.js';\nimport * as throttleUtil from '../../util/throttle.js';\nimport { makeInner } from '../../util/model.js';\nimport { each, curry, createHashMap } from 'zrender/lib/core/util.js';\nimport { collectReferCoordSysModelInfo } from './helper.js';\nvar inner = makeInner();\nexport function setViewInfoToCoordSysRecord(api, dataZoomModel, getRange) {\n inner(api).coordSysRecordMap.each(function (coordSysRecord) {\n var dzInfo = coordSysRecord.dataZoomInfoMap.get(dataZoomModel.uid);\n if (dzInfo) {\n dzInfo.getRange = getRange;\n }\n });\n}\nexport function disposeCoordSysRecordIfNeeded(api, dataZoomModel) {\n var coordSysRecordMap = inner(api).coordSysRecordMap;\n var coordSysKeyArr = coordSysRecordMap.keys();\n for (var i = 0; i < coordSysKeyArr.length; i++) {\n var coordSysKey = coordSysKeyArr[i];\n var coordSysRecord = coordSysRecordMap.get(coordSysKey);\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;\n if (dataZoomInfoMap) {\n var dzUid = dataZoomModel.uid;\n var dzInfo = dataZoomInfoMap.get(dzUid);\n if (dzInfo) {\n dataZoomInfoMap.removeKey(dzUid);\n if (!dataZoomInfoMap.keys().length) {\n disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);\n }\n }\n }\n }\n}\nfunction disposeCoordSysRecord(coordSysRecordMap, coordSysRecord) {\n if (coordSysRecord) {\n coordSysRecordMap.removeKey(coordSysRecord.model.uid);\n var controller = coordSysRecord.controller;\n controller && controller.dispose();\n }\n}\nfunction createCoordSysRecord(api, coordSysModel) {\n // These init props will never change after record created.\n var coordSysRecord = {\n model: coordSysModel,\n containsPoint: curry(containsPoint, coordSysModel),\n dispatchAction: curry(dispatchAction, api),\n dataZoomInfoMap: null,\n controller: null\n };\n // Must not do anything depends on coordSysRecord outside the event handler here,\n // because coordSysRecord not completed yet.\n var controller = coordSysRecord.controller = new RoamController(api.getZr());\n each(['pan', 'zoom', 'scrollMove'], function (eventName) {\n controller.on(eventName, function (event) {\n var batch = [];\n coordSysRecord.dataZoomInfoMap.each(function (dzInfo) {\n // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove,\n // moveOnMouseWheel, ...) enabled.\n if (!event.isAvailableBehavior(dzInfo.model.option)) {\n return;\n }\n var method = (dzInfo.getRange || {})[eventName];\n var range = method && method(dzInfo.dzReferCoordSysInfo, coordSysRecord.model.mainType, coordSysRecord.controller, event);\n !dzInfo.model.get('disabled', true) && range && batch.push({\n dataZoomId: dzInfo.model.id,\n start: range[0],\n end: range[1]\n });\n });\n batch.length && coordSysRecord.dispatchAction(batch);\n });\n });\n return coordSysRecord;\n}\n/**\n * This action will be throttled.\n */\nfunction dispatchAction(api, batch) {\n if (!api.isDisposed()) {\n api.dispatchAction({\n type: 'dataZoom',\n animation: {\n easing: 'cubicOut',\n duration: 100\n },\n batch: batch\n });\n }\n}\nfunction containsPoint(coordSysModel, e, x, y) {\n return coordSysModel.coordinateSystem.containPoint([x, y]);\n}\n/**\n * Merge roamController settings when multiple dataZooms share one roamController.\n */\nfunction mergeControllerParams(dataZoomInfoMap) {\n var controlType;\n // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated\n // as string, it is probably revert to reserved word by compress tool. See #7411.\n var prefix = 'type_';\n var typePriority = {\n 'type_true': 2,\n 'type_move': 1,\n 'type_false': 0,\n 'type_undefined': -1\n };\n var preventDefaultMouseMove = true;\n dataZoomInfoMap.each(function (dataZoomInfo) {\n var dataZoomModel = dataZoomInfo.model;\n var oneType = dataZoomModel.get('disabled', true) ? false : dataZoomModel.get('zoomLock', true) ? 'move' : true;\n if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {\n controlType = oneType;\n }\n // Prevent default move event by default. If one false, do not prevent. Otherwise\n // users may be confused why it does not work when multiple insideZooms exist.\n preventDefaultMouseMove = preventDefaultMouseMove && dataZoomModel.get('preventDefaultMouseMove', true);\n });\n return {\n controlType: controlType,\n opt: {\n // RoamController will enable all of these functionalities,\n // and the final behavior is determined by its event listener\n // provided by each inside zoom.\n zoomOnMouseWheel: true,\n moveOnMouseMove: true,\n moveOnMouseWheel: true,\n preventDefaultMouseMove: !!preventDefaultMouseMove\n }\n };\n}\nexport function installDataZoomRoamProcessor(registers) {\n registers.registerProcessor(registers.PRIORITY.PROCESSOR.FILTER, function (ecModel, api) {\n var apiInner = inner(api);\n var coordSysRecordMap = apiInner.coordSysRecordMap || (apiInner.coordSysRecordMap = createHashMap());\n coordSysRecordMap.each(function (coordSysRecord) {\n // `coordSysRecordMap` always exists (because it holds the `roam controller`, which should\n // better not re-create each time), but clear `dataZoomInfoMap` each round of the workflow.\n coordSysRecord.dataZoomInfoMap = null;\n });\n ecModel.eachComponent({\n mainType: 'dataZoom',\n subType: 'inside'\n }, function (dataZoomModel) {\n var dzReferCoordSysWrap = collectReferCoordSysModelInfo(dataZoomModel);\n each(dzReferCoordSysWrap.infoList, function (dzCoordSysInfo) {\n var coordSysUid = dzCoordSysInfo.model.uid;\n var coordSysRecord = coordSysRecordMap.get(coordSysUid) || coordSysRecordMap.set(coordSysUid, createCoordSysRecord(api, dzCoordSysInfo.model));\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap || (coordSysRecord.dataZoomInfoMap = createHashMap());\n // Notice these props might be changed each time for a single dataZoomModel.\n dataZoomInfoMap.set(dataZoomModel.uid, {\n dzReferCoordSysInfo: dzCoordSysInfo,\n model: dataZoomModel,\n getRange: null\n });\n });\n });\n // (1) Merge dataZoom settings for each coord sys and set to the roam controller.\n // (2) Clear coord sys if not refered by any dataZoom.\n coordSysRecordMap.each(function (coordSysRecord) {\n var controller = coordSysRecord.controller;\n var firstDzInfo;\n var dataZoomInfoMap = coordSysRecord.dataZoomInfoMap;\n if (dataZoomInfoMap) {\n var firstDzKey = dataZoomInfoMap.keys()[0];\n if (firstDzKey != null) {\n firstDzInfo = dataZoomInfoMap.get(firstDzKey);\n }\n }\n if (!firstDzInfo) {\n disposeCoordSysRecord(coordSysRecordMap, coordSysRecord);\n return;\n }\n var controllerParams = mergeControllerParams(dataZoomInfoMap);\n controller.enable(controllerParams.controlType, controllerParams.opt);\n controller.setPointerChecker(coordSysRecord.containsPoint);\n throttleUtil.createOrUpdate(coordSysRecord, 'dispatchAction', firstDzInfo.model.get('throttle', true), 'fixRate');\n });\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomView from './DataZoomView.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport * as roams from './roams.js';\nimport { bind } from 'zrender/lib/core/util.js';\nvar InsideZoomView = /** @class */function (_super) {\n __extends(InsideZoomView, _super);\n function InsideZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = 'dataZoom.inside';\n return _this;\n }\n InsideZoomView.prototype.render = function (dataZoomModel, ecModel, api) {\n _super.prototype.render.apply(this, arguments);\n if (dataZoomModel.noTarget()) {\n this._clear();\n return;\n }\n // Hence the `throttle` util ensures to preserve command order,\n // here simply updating range all the time will not cause missing\n // any of the the roam change.\n this.range = dataZoomModel.getPercentRange();\n // Reset controllers.\n roams.setViewInfoToCoordSysRecord(api, dataZoomModel, {\n pan: bind(getRangeHandlers.pan, this),\n zoom: bind(getRangeHandlers.zoom, this),\n scrollMove: bind(getRangeHandlers.scrollMove, this)\n });\n };\n InsideZoomView.prototype.dispose = function () {\n this._clear();\n _super.prototype.dispose.apply(this, arguments);\n };\n InsideZoomView.prototype._clear = function () {\n roams.disposeCoordSysRecordIfNeeded(this.api, this.dataZoomModel);\n this.range = null;\n };\n InsideZoomView.type = 'dataZoom.inside';\n return InsideZoomView;\n}(DataZoomView);\nvar getRangeHandlers = {\n zoom: function (coordSysInfo, coordSysMainType, controller, e) {\n var lastRange = this.range;\n var range = lastRange.slice();\n // Calculate transform by the first axis.\n var axisModel = coordSysInfo.axisModels[0];\n if (!axisModel) {\n return;\n }\n var directionInfo = getDirectionInfo[coordSysMainType](null, [e.originX, e.originY], axisModel, controller, coordSysInfo);\n var percentPoint = (directionInfo.signal > 0 ? directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel : directionInfo.pixel - directionInfo.pixelStart) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];\n var scale = Math.max(1 / e.scale, 0);\n range[0] = (range[0] - percentPoint) * scale + percentPoint;\n range[1] = (range[1] - percentPoint) * scale + percentPoint;\n // Restrict range.\n var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);\n this.range = range;\n if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n return range;\n }\n },\n pan: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) {\n var directionInfo = getDirectionInfo[coordSysMainType]([e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordSysInfo);\n return directionInfo.signal * (range[1] - range[0]) * directionInfo.pixel / directionInfo.pixelLength;\n }),\n scrollMove: makeMover(function (range, axisModel, coordSysInfo, coordSysMainType, controller, e) {\n var directionInfo = getDirectionInfo[coordSysMainType]([0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordSysInfo);\n return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta;\n })\n};\nfunction makeMover(getPercentDelta) {\n return function (coordSysInfo, coordSysMainType, controller, e) {\n var lastRange = this.range;\n var range = lastRange.slice();\n // Calculate transform by the first axis.\n var axisModel = coordSysInfo.axisModels[0];\n if (!axisModel) {\n return;\n }\n var percentDelta = getPercentDelta(range, axisModel, coordSysInfo, coordSysMainType, controller, e);\n sliderMove(percentDelta, range, [0, 100], 'all');\n this.range = range;\n if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n return range;\n }\n };\n}\nvar getDirectionInfo = {\n grid: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var rect = coordSysInfo.model.coordinateSystem.getRect();\n oldPoint = oldPoint || [0, 0];\n if (axis.dim === 'x') {\n ret.pixel = newPoint[0] - oldPoint[0];\n ret.pixelLength = rect.width;\n ret.pixelStart = rect.x;\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // axis.dim === 'y'\n ret.pixel = newPoint[1] - oldPoint[1];\n ret.pixelLength = rect.height;\n ret.pixelStart = rect.y;\n ret.signal = axis.inverse ? -1 : 1;\n }\n return ret;\n },\n polar: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) {\n var axis = axisModel.axis;\n var ret = {};\n var polar = coordSysInfo.model.coordinateSystem;\n var radiusExtent = polar.getRadiusAxis().getExtent();\n var angleExtent = polar.getAngleAxis().getExtent();\n oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];\n newPoint = polar.pointToCoord(newPoint);\n if (axisModel.mainType === 'radiusAxis') {\n ret.pixel = newPoint[0] - oldPoint[0];\n // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);\n // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);\n ret.pixelLength = radiusExtent[1] - radiusExtent[0];\n ret.pixelStart = radiusExtent[0];\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // 'angleAxis'\n ret.pixel = newPoint[1] - oldPoint[1];\n // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);\n // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);\n ret.pixelLength = angleExtent[1] - angleExtent[0];\n ret.pixelStart = angleExtent[0];\n ret.signal = axis.inverse ? -1 : 1;\n }\n return ret;\n },\n singleAxis: function (oldPoint, newPoint, axisModel, controller, coordSysInfo) {\n var axis = axisModel.axis;\n var rect = coordSysInfo.model.coordinateSystem.getRect();\n var ret = {};\n oldPoint = oldPoint || [0, 0];\n if (axis.orient === 'horizontal') {\n ret.pixel = newPoint[0] - oldPoint[0];\n ret.pixelLength = rect.width;\n ret.pixelStart = rect.x;\n ret.signal = axis.inverse ? 1 : -1;\n } else {\n // 'vertical'\n ret.pixel = newPoint[1] - oldPoint[1];\n ret.pixelLength = rect.height;\n ret.pixelStart = rect.y;\n ret.signal = axis.inverse ? -1 : 1;\n }\n return ret;\n }\n};\nexport default InsideZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport InsideZoomModel from './InsideZoomModel.js';\nimport InsideZoomView from './InsideZoomView.js';\nimport { installDataZoomRoamProcessor } from './roams.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n installCommon(registers);\n registers.registerComponentModel(InsideZoomModel);\n registers.registerComponentView(InsideZoomView);\n installDataZoomRoamProcessor(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport DataZoomModel from './DataZoomModel.js';\nimport { inheritDefaultOption } from '../../util/component.js';\nvar SliderZoomModel = /** @class */function (_super) {\n __extends(SliderZoomModel, _super);\n function SliderZoomModel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = SliderZoomModel.type;\n return _this;\n }\n SliderZoomModel.type = 'dataZoom.slider';\n SliderZoomModel.layoutMode = 'box';\n SliderZoomModel.defaultOption = inheritDefaultOption(DataZoomModel.defaultOption, {\n show: true,\n // deault value can only be drived in view stage.\n right: 'ph',\n top: 'ph',\n width: 'ph',\n height: 'ph',\n left: null,\n bottom: null,\n borderColor: '#d2dbee',\n borderRadius: 3,\n backgroundColor: 'rgba(47,69,84,0)',\n // dataBackgroundColor: '#ddd',\n dataBackground: {\n lineStyle: {\n color: '#d2dbee',\n width: 0.5\n },\n areaStyle: {\n color: '#d2dbee',\n opacity: 0.2\n }\n },\n selectedDataBackground: {\n lineStyle: {\n color: '#8fb0f7',\n width: 0.5\n },\n areaStyle: {\n color: '#8fb0f7',\n opacity: 0.2\n }\n },\n // Color of selected window.\n fillerColor: 'rgba(135,175,274,0.2)',\n handleIcon: 'path://M-9.35,34.56V42m0-40V9.5m-2,0h4a2,2,0,0,1,2,2v21a2,2,0,0,1-2,2h-4a2,2,0,0,1-2-2v-21A2,2,0,0,1-11.35,9.5Z',\n // Percent of the slider height\n handleSize: '100%',\n handleStyle: {\n color: '#fff',\n borderColor: '#ACB8D1'\n },\n moveHandleSize: 7,\n moveHandleIcon: 'path://M-320.9-50L-320.9-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-348-41-339-50-320.9-50z M-212.3-50L-212.3-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-239.4-41-230.4-50-212.3-50z M-103.7-50L-103.7-50c18.1,0,27.1,9,27.1,27.1V85.7c0,18.1-9,27.1-27.1,27.1l0,0c-18.1,0-27.1-9-27.1-27.1V-22.9C-130.9-41-121.8-50-103.7-50z',\n moveHandleStyle: {\n color: '#D2DBEE',\n opacity: 0.7\n },\n showDetail: true,\n showDataShadow: 'auto',\n realtime: true,\n zoomLock: false,\n textStyle: {\n color: '#6E7079'\n },\n brushSelect: true,\n brushStyle: {\n color: 'rgba(135,175,274,0.15)'\n },\n emphasis: {\n handleStyle: {\n borderColor: '#8FB0F7'\n },\n moveHandleStyle: {\n color: '#8FB0F7'\n }\n }\n });\n return SliderZoomModel;\n}(DataZoomModel);\nexport default SliderZoomModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { bind, each, isFunction, isString, indexOf } from 'zrender/lib/core/util.js';\nimport * as eventTool from 'zrender/lib/core/event.js';\nimport * as graphic from '../../util/graphic.js';\nimport * as throttle from '../../util/throttle.js';\nimport DataZoomView from './DataZoomView.js';\nimport { linearMap, asc, parsePercent } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport sliderMove from '../helper/sliderMove.js';\nimport { getAxisMainType, collectReferCoordSysModelInfo } from './helper.js';\nimport { enableHoverEmphasis } from '../../util/states.js';\nimport { createSymbol, symbolBuildProxies } from '../../util/symbol.js';\nimport { deprecateLog } from '../../util/log.js';\nimport { createTextStyle } from '../../label/labelStyle.js';\nvar Rect = graphic.Rect;\n// Constants\nvar DEFAULT_LOCATION_EDGE_GAP = 7;\nvar DEFAULT_FRAME_BORDER_WIDTH = 1;\nvar DEFAULT_FILLER_SIZE = 30;\nvar DEFAULT_MOVE_HANDLE_SIZE = 7;\nvar HORIZONTAL = 'horizontal';\nvar VERTICAL = 'vertical';\nvar LABEL_GAP = 5;\nvar SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];\nvar REALTIME_ANIMATION_CONFIG = {\n easing: 'cubicOut',\n duration: 100,\n delay: 0\n};\nvar SliderZoomView = /** @class */function (_super) {\n __extends(SliderZoomView, _super);\n function SliderZoomView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.type = SliderZoomView.type;\n _this._displayables = {};\n return _this;\n }\n SliderZoomView.prototype.init = function (ecModel, api) {\n this.api = api;\n // A unique handler for each dataZoom component\n this._onBrush = bind(this._onBrush, this);\n this._onBrushEnd = bind(this._onBrushEnd, this);\n };\n SliderZoomView.prototype.render = function (dataZoomModel, ecModel, api, payload) {\n _super.prototype.render.apply(this, arguments);\n throttle.createOrUpdate(this, '_dispatchZoomAction', dataZoomModel.get('throttle'), 'fixRate');\n this._orient = dataZoomModel.getOrient();\n if (dataZoomModel.get('show') === false) {\n this.group.removeAll();\n return;\n }\n if (dataZoomModel.noTarget()) {\n this._clear();\n this.group.removeAll();\n return;\n }\n // Notice: this._resetInterval() should not be executed when payload.type\n // is 'dataZoom', origin this._range should be maintained, otherwise 'pan'\n // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction,\n if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) {\n this._buildView();\n }\n this._updateView();\n };\n SliderZoomView.prototype.dispose = function () {\n this._clear();\n _super.prototype.dispose.apply(this, arguments);\n };\n SliderZoomView.prototype._clear = function () {\n throttle.clear(this, '_dispatchZoomAction');\n var zr = this.api.getZr();\n zr.off('mousemove', this._onBrush);\n zr.off('mouseup', this._onBrushEnd);\n };\n SliderZoomView.prototype._buildView = function () {\n var thisGroup = this.group;\n thisGroup.removeAll();\n this._brushing = false;\n this._displayables.brushRect = null;\n this._resetLocation();\n this._resetInterval();\n var barGroup = this._displayables.sliderGroup = new graphic.Group();\n this._renderBackground();\n this._renderHandle();\n this._renderDataShadow();\n thisGroup.add(barGroup);\n this._positionGroup();\n };\n SliderZoomView.prototype._resetLocation = function () {\n var dataZoomModel = this.dataZoomModel;\n var api = this.api;\n var showMoveHandle = dataZoomModel.get('brushSelect');\n var moveHandleSize = showMoveHandle ? DEFAULT_MOVE_HANDLE_SIZE : 0;\n // If some of x/y/width/height are not specified,\n // auto-adapt according to target grid.\n var coordRect = this._findCoordRect();\n var ecSize = {\n width: api.getWidth(),\n height: api.getHeight()\n };\n // Default align by coordinate system rect.\n var positionInfo = this._orient === HORIZONTAL ? {\n // Why using 'right', because right should be used in vertical,\n // and it is better to be consistent for dealing with position param merge.\n right: ecSize.width - coordRect.x - coordRect.width,\n top: ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP - moveHandleSize,\n width: coordRect.width,\n height: DEFAULT_FILLER_SIZE\n } : {\n right: DEFAULT_LOCATION_EDGE_GAP,\n top: coordRect.y,\n width: DEFAULT_FILLER_SIZE,\n height: coordRect.height\n };\n // Do not write back to option and replace value 'ph', because\n // the 'ph' value should be recalculated when resize.\n var layoutParams = layout.getLayoutParams(dataZoomModel.option);\n // Replace the placeholder value.\n each(['right', 'top', 'width', 'height'], function (name) {\n if (layoutParams[name] === 'ph') {\n layoutParams[name] = positionInfo[name];\n }\n });\n var layoutRect = layout.getLayoutRect(layoutParams, ecSize);\n this._location = {\n x: layoutRect.x,\n y: layoutRect.y\n };\n this._size = [layoutRect.width, layoutRect.height];\n this._orient === VERTICAL && this._size.reverse();\n };\n SliderZoomView.prototype._positionGroup = function () {\n var thisGroup = this.group;\n var location = this._location;\n var orient = this._orient;\n // Just use the first axis to determine mapping.\n var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();\n var inverse = targetAxisModel && targetAxisModel.get('inverse');\n var sliderGroup = this._displayables.sliderGroup;\n var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse;\n // Transform barGroup.\n sliderGroup.attr(orient === HORIZONTAL && !inverse ? {\n scaleY: otherAxisInverse ? 1 : -1,\n scaleX: 1\n } : orient === HORIZONTAL && inverse ? {\n scaleY: otherAxisInverse ? 1 : -1,\n scaleX: -1\n } : orient === VERTICAL && !inverse ? {\n scaleY: otherAxisInverse ? -1 : 1,\n scaleX: 1,\n rotation: Math.PI / 2\n }\n // Don't use Math.PI, considering shadow direction.\n : {\n scaleY: otherAxisInverse ? -1 : 1,\n scaleX: -1,\n rotation: Math.PI / 2\n });\n // Position barGroup\n var rect = thisGroup.getBoundingRect([sliderGroup]);\n thisGroup.x = location.x - rect.x;\n thisGroup.y = location.y - rect.y;\n thisGroup.markRedraw();\n };\n SliderZoomView.prototype._getViewExtent = function () {\n return [0, this._size[0]];\n };\n SliderZoomView.prototype._renderBackground = function () {\n var dataZoomModel = this.dataZoomModel;\n var size = this._size;\n var barGroup = this._displayables.sliderGroup;\n var brushSelect = dataZoomModel.get('brushSelect');\n barGroup.add(new Rect({\n silent: true,\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: dataZoomModel.get('backgroundColor')\n },\n z2: -40\n }));\n // Click panel, over shadow, below handles.\n var clickPanel = new Rect({\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1]\n },\n style: {\n fill: 'transparent'\n },\n z2: 0,\n onclick: bind(this._onClickPanel, this)\n });\n var zr = this.api.getZr();\n if (brushSelect) {\n clickPanel.on('mousedown', this._onBrushStart, this);\n clickPanel.cursor = 'crosshair';\n zr.on('mousemove', this._onBrush);\n zr.on('mouseup', this._onBrushEnd);\n } else {\n zr.off('mousemove', this._onBrush);\n zr.off('mouseup', this._onBrushEnd);\n }\n barGroup.add(clickPanel);\n };\n SliderZoomView.prototype._renderDataShadow = function () {\n var info = this._dataShadowInfo = this._prepareDataShadowInfo();\n this._displayables.dataShadowSegs = [];\n if (!info) {\n return;\n }\n var size = this._size;\n var oldSize = this._shadowSize || [];\n var seriesModel = info.series;\n var data = seriesModel.getRawData();\n var candlestickDim = seriesModel.getShadowDim && seriesModel.getShadowDim();\n var otherDim = candlestickDim && data.getDimensionInfo(candlestickDim) ? seriesModel.getShadowDim() // @see candlestick\n : info.otherDim;\n if (otherDim == null) {\n return;\n }\n var polygonPts = this._shadowPolygonPts;\n var polylinePts = this._shadowPolylinePts;\n // Not re-render if data doesn't change.\n if (data !== this._shadowData || otherDim !== this._shadowDim || size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n var otherDataExtent_1 = data.getDataExtent(otherDim);\n // Nice extent.\n var otherOffset = (otherDataExtent_1[1] - otherDataExtent_1[0]) * 0.3;\n otherDataExtent_1 = [otherDataExtent_1[0] - otherOffset, otherDataExtent_1[1] + otherOffset];\n var otherShadowExtent_1 = [0, size[1]];\n var thisShadowExtent = [0, size[0]];\n var areaPoints_1 = [[size[0], 0], [0, 0]];\n var linePoints_1 = [];\n var step_1 = thisShadowExtent[1] / (data.count() - 1);\n var thisCoord_1 = 0;\n // Optimize for large data shadow\n var stride_1 = Math.round(data.count() / size[0]);\n var lastIsEmpty_1;\n data.each([otherDim], function (value, index) {\n if (stride_1 > 0 && index % stride_1) {\n thisCoord_1 += step_1;\n return;\n }\n // FIXME\n // Should consider axis.min/axis.max when drawing dataShadow.\n // FIXME\n // 应该使用统一的空判断?还是在list里进行空判断?\n var isEmpty = value == null || isNaN(value) || value === '';\n // See #4235.\n var otherCoord = isEmpty ? 0 : linearMap(value, otherDataExtent_1, otherShadowExtent_1, true);\n // Attempt to draw data shadow precisely when there are empty value.\n if (isEmpty && !lastIsEmpty_1 && index) {\n areaPoints_1.push([areaPoints_1[areaPoints_1.length - 1][0], 0]);\n linePoints_1.push([linePoints_1[linePoints_1.length - 1][0], 0]);\n } else if (!isEmpty && lastIsEmpty_1) {\n areaPoints_1.push([thisCoord_1, 0]);\n linePoints_1.push([thisCoord_1, 0]);\n }\n areaPoints_1.push([thisCoord_1, otherCoord]);\n linePoints_1.push([thisCoord_1, otherCoord]);\n thisCoord_1 += step_1;\n lastIsEmpty_1 = isEmpty;\n });\n polygonPts = this._shadowPolygonPts = areaPoints_1;\n polylinePts = this._shadowPolylinePts = linePoints_1;\n }\n this._shadowData = data;\n this._shadowDim = otherDim;\n this._shadowSize = [size[0], size[1]];\n var dataZoomModel = this.dataZoomModel;\n function createDataShadowGroup(isSelectedArea) {\n var model = dataZoomModel.getModel(isSelectedArea ? 'selectedDataBackground' : 'dataBackground');\n var group = new graphic.Group();\n var polygon = new graphic.Polygon({\n shape: {\n points: polygonPts\n },\n segmentIgnoreThreshold: 1,\n style: model.getModel('areaStyle').getAreaStyle(),\n silent: true,\n z2: -20\n });\n var polyline = new graphic.Polyline({\n shape: {\n points: polylinePts\n },\n segmentIgnoreThreshold: 1,\n style: model.getModel('lineStyle').getLineStyle(),\n silent: true,\n z2: -19\n });\n group.add(polygon);\n group.add(polyline);\n return group;\n }\n // let dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n for (var i = 0; i < 3; i++) {\n var group = createDataShadowGroup(i === 1);\n this._displayables.sliderGroup.add(group);\n this._displayables.dataShadowSegs.push(group);\n }\n };\n SliderZoomView.prototype._prepareDataShadowInfo = function () {\n var dataZoomModel = this.dataZoomModel;\n var showDataShadow = dataZoomModel.get('showDataShadow');\n if (showDataShadow === false) {\n return;\n }\n // Find a representative series.\n var result;\n var ecModel = this.ecModel;\n dataZoomModel.eachTargetAxis(function (axisDim, axisIndex) {\n var seriesModels = dataZoomModel.getAxisProxy(axisDim, axisIndex).getTargetSeriesModels();\n each(seriesModels, function (seriesModel) {\n if (result) {\n return;\n }\n if (showDataShadow !== true && indexOf(SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')) < 0) {\n return;\n }\n var thisAxis = ecModel.getComponent(getAxisMainType(axisDim), axisIndex).axis;\n var otherDim = getOtherDim(axisDim);\n var otherAxisInverse;\n var coordSys = seriesModel.coordinateSystem;\n if (otherDim != null && coordSys.getOtherAxis) {\n otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;\n }\n otherDim = seriesModel.getData().mapDimension(otherDim);\n result = {\n thisAxis: thisAxis,\n series: seriesModel,\n thisDim: axisDim,\n otherDim: otherDim,\n otherAxisInverse: otherAxisInverse\n };\n }, this);\n }, this);\n return result;\n };\n SliderZoomView.prototype._renderHandle = function () {\n var thisGroup = this.group;\n var displayables = this._displayables;\n var handles = displayables.handles = [null, null];\n var handleLabels = displayables.handleLabels = [null, null];\n var sliderGroup = this._displayables.sliderGroup;\n var size = this._size;\n var dataZoomModel = this.dataZoomModel;\n var api = this.api;\n var borderRadius = dataZoomModel.get('borderRadius') || 0;\n var brushSelect = dataZoomModel.get('brushSelect');\n var filler = displayables.filler = new Rect({\n silent: brushSelect,\n style: {\n fill: dataZoomModel.get('fillerColor')\n },\n textConfig: {\n position: 'inside'\n }\n });\n sliderGroup.add(filler);\n // Frame border.\n sliderGroup.add(new Rect({\n silent: true,\n subPixelOptimize: true,\n shape: {\n x: 0,\n y: 0,\n width: size[0],\n height: size[1],\n r: borderRadius\n },\n style: {\n // deprecated option\n stroke: dataZoomModel.get('dataBackgroundColor') || dataZoomModel.get('borderColor'),\n lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n fill: 'rgba(0,0,0,0)'\n }\n }));\n // Left and right handle to resize\n each([0, 1], function (handleIndex) {\n var iconStr = dataZoomModel.get('handleIcon');\n if (!symbolBuildProxies[iconStr] && iconStr.indexOf('path://') < 0 && iconStr.indexOf('image://') < 0) {\n // Compatitable with the old icon parsers. Which can use a path string without path://\n iconStr = 'path://' + iconStr;\n if (process.env.NODE_ENV !== 'production') {\n deprecateLog('handleIcon now needs \\'path://\\' prefix when using a path string');\n }\n }\n var path = createSymbol(iconStr, -1, 0, 2, 2, null, true);\n path.attr({\n cursor: getCursor(this._orient),\n draggable: true,\n drift: bind(this._onDragMove, this, handleIndex),\n ondragend: bind(this._onDragEnd, this),\n onmouseover: bind(this._showDataInfo, this, true),\n onmouseout: bind(this._showDataInfo, this, false),\n z2: 5\n });\n var bRect = path.getBoundingRect();\n var handleSize = dataZoomModel.get('handleSize');\n this._handleHeight = parsePercent(handleSize, this._size[1]);\n this._handleWidth = bRect.width / bRect.height * this._handleHeight;\n path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n path.style.strokeNoScale = true;\n path.rectHover = true;\n path.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'handleStyle']).getItemStyle();\n enableHoverEmphasis(path);\n var handleColor = dataZoomModel.get('handleColor'); // deprecated option\n // Compatitable with previous version\n if (handleColor != null) {\n path.style.fill = handleColor;\n }\n sliderGroup.add(handles[handleIndex] = path);\n var textStyleModel = dataZoomModel.getModel('textStyle');\n thisGroup.add(handleLabels[handleIndex] = new graphic.Text({\n silent: true,\n invisible: true,\n style: createTextStyle(textStyleModel, {\n x: 0,\n y: 0,\n text: '',\n verticalAlign: 'middle',\n align: 'center',\n fill: textStyleModel.getTextColor(),\n font: textStyleModel.getFont()\n }),\n z2: 10\n }));\n }, this);\n // Handle to move. Only visible when brushSelect is set true.\n var actualMoveZone = filler;\n if (brushSelect) {\n var moveHandleHeight = parsePercent(dataZoomModel.get('moveHandleSize'), size[1]);\n var moveHandle_1 = displayables.moveHandle = new graphic.Rect({\n style: dataZoomModel.getModel('moveHandleStyle').getItemStyle(),\n silent: true,\n shape: {\n r: [0, 0, 2, 2],\n y: size[1] - 0.5,\n height: moveHandleHeight\n }\n });\n var iconSize = moveHandleHeight * 0.8;\n var moveHandleIcon = displayables.moveHandleIcon = createSymbol(dataZoomModel.get('moveHandleIcon'), -iconSize / 2, -iconSize / 2, iconSize, iconSize, '#fff', true);\n moveHandleIcon.silent = true;\n moveHandleIcon.y = size[1] + moveHandleHeight / 2 - 0.5;\n moveHandle_1.ensureState('emphasis').style = dataZoomModel.getModel(['emphasis', 'moveHandleStyle']).getItemStyle();\n var moveZoneExpandSize = Math.min(size[1] / 2, Math.max(moveHandleHeight, 10));\n actualMoveZone = displayables.moveZone = new graphic.Rect({\n invisible: true,\n shape: {\n y: size[1] - moveZoneExpandSize,\n height: moveHandleHeight + moveZoneExpandSize\n }\n });\n actualMoveZone.on('mouseover', function () {\n api.enterEmphasis(moveHandle_1);\n }).on('mouseout', function () {\n api.leaveEmphasis(moveHandle_1);\n });\n sliderGroup.add(moveHandle_1);\n sliderGroup.add(moveHandleIcon);\n sliderGroup.add(actualMoveZone);\n }\n actualMoveZone.attr({\n draggable: true,\n cursor: getCursor(this._orient),\n drift: bind(this._onDragMove, this, 'all'),\n ondragstart: bind(this._showDataInfo, this, true),\n ondragend: bind(this._onDragEnd, this),\n onmouseover: bind(this._showDataInfo, this, true),\n onmouseout: bind(this._showDataInfo, this, false)\n });\n };\n SliderZoomView.prototype._resetInterval = function () {\n var range = this._range = this.dataZoomModel.getPercentRange();\n var viewExtent = this._getViewExtent();\n this._handleEnds = [linearMap(range[0], [0, 100], viewExtent, true), linearMap(range[1], [0, 100], viewExtent, true)];\n };\n SliderZoomView.prototype._updateInterval = function (handleIndex, delta) {\n var dataZoomModel = this.dataZoomModel;\n var handleEnds = this._handleEnds;\n var viewExtend = this._getViewExtent();\n var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n var percentExtent = [0, 100];\n sliderMove(delta, handleEnds, viewExtend, dataZoomModel.get('zoomLock') ? 'all' : handleIndex, minMaxSpan.minSpan != null ? linearMap(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null, minMaxSpan.maxSpan != null ? linearMap(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null);\n var lastRange = this._range;\n var range = this._range = asc([linearMap(handleEnds[0], viewExtend, percentExtent, true), linearMap(handleEnds[1], viewExtend, percentExtent, true)]);\n return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1];\n };\n SliderZoomView.prototype._updateView = function (nonRealtime) {\n var displaybles = this._displayables;\n var handleEnds = this._handleEnds;\n var handleInterval = asc(handleEnds.slice());\n var size = this._size;\n each([0, 1], function (handleIndex) {\n // Handles\n var handle = displaybles.handles[handleIndex];\n var handleHeight = this._handleHeight;\n handle.attr({\n scaleX: handleHeight / 2,\n scaleY: handleHeight / 2,\n // This is a trick, by adding an extra tiny offset to let the default handle's end point align to the drag window.\n // NOTE: It may affect some custom shapes a bit. But we prefer to have better result by default.\n x: handleEnds[handleIndex] + (handleIndex ? -1 : 1),\n y: size[1] / 2 - handleHeight / 2\n });\n }, this);\n // Filler\n displaybles.filler.setShape({\n x: handleInterval[0],\n y: 0,\n width: handleInterval[1] - handleInterval[0],\n height: size[1]\n });\n var viewExtent = {\n x: handleInterval[0],\n width: handleInterval[1] - handleInterval[0]\n };\n // Move handle\n if (displaybles.moveHandle) {\n displaybles.moveHandle.setShape(viewExtent);\n displaybles.moveZone.setShape(viewExtent);\n // Force update path on the invisible object\n displaybles.moveZone.getBoundingRect();\n displaybles.moveHandleIcon && displaybles.moveHandleIcon.attr('x', viewExtent.x + viewExtent.width / 2);\n }\n // update clip path of shadow.\n var dataShadowSegs = displaybles.dataShadowSegs;\n var segIntervals = [0, handleInterval[0], handleInterval[1], size[0]];\n for (var i = 0; i < dataShadowSegs.length; i++) {\n var segGroup = dataShadowSegs[i];\n var clipPath = segGroup.getClipPath();\n if (!clipPath) {\n clipPath = new graphic.Rect();\n segGroup.setClipPath(clipPath);\n }\n clipPath.setShape({\n x: segIntervals[i],\n y: 0,\n width: segIntervals[i + 1] - segIntervals[i],\n height: size[1]\n });\n }\n this._updateDataInfo(nonRealtime);\n };\n SliderZoomView.prototype._updateDataInfo = function (nonRealtime) {\n var dataZoomModel = this.dataZoomModel;\n var displaybles = this._displayables;\n var handleLabels = displaybles.handleLabels;\n var orient = this._orient;\n var labelTexts = ['', ''];\n // FIXME\n // date型,支持formatter,autoformatter(ec2 date.getAutoFormatter)\n if (dataZoomModel.get('showDetail')) {\n var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n if (axisProxy) {\n var axis = axisProxy.getAxisModel().axis;\n var range = this._range;\n var dataInterval = nonRealtime\n // See #4434, data and axis are not processed and reset yet in non-realtime mode.\n ? axisProxy.calculateDataWindow({\n start: range[0],\n end: range[1]\n }).valueWindow : axisProxy.getDataValueWindow();\n labelTexts = [this._formatLabel(dataInterval[0], axis), this._formatLabel(dataInterval[1], axis)];\n }\n }\n var orderedHandleEnds = asc(this._handleEnds.slice());\n setLabel.call(this, 0);\n setLabel.call(this, 1);\n function setLabel(handleIndex) {\n // Label\n // Text should not transform by barGroup.\n // Ignore handlers transform\n var barTransform = graphic.getTransform(displaybles.handles[handleIndex].parent, this.group);\n var direction = graphic.transformDirection(handleIndex === 0 ? 'right' : 'left', barTransform);\n var offset = this._handleWidth / 2 + LABEL_GAP;\n var textPoint = graphic.applyTransform([orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset), this._size[1] / 2], barTransform);\n handleLabels[handleIndex].setStyle({\n x: textPoint[0],\n y: textPoint[1],\n verticalAlign: orient === HORIZONTAL ? 'middle' : direction,\n align: orient === HORIZONTAL ? direction : 'center',\n text: labelTexts[handleIndex]\n });\n }\n };\n SliderZoomView.prototype._formatLabel = function (value, axis) {\n var dataZoomModel = this.dataZoomModel;\n var labelFormatter = dataZoomModel.get('labelFormatter');\n var labelPrecision = dataZoomModel.get('labelPrecision');\n if (labelPrecision == null || labelPrecision === 'auto') {\n labelPrecision = axis.getPixelPrecision();\n }\n var valueStr = value == null || isNaN(value) ? ''\n // FIXME Glue code\n : axis.type === 'category' || axis.type === 'time' ? axis.scale.getLabel({\n value: Math.round(value)\n })\n // param of toFixed should less then 20.\n : value.toFixed(Math.min(labelPrecision, 20));\n return isFunction(labelFormatter) ? labelFormatter(value, valueStr) : isString(labelFormatter) ? labelFormatter.replace('{value}', valueStr) : valueStr;\n };\n /**\n * @param showOrHide true: show, false: hide\n */\n SliderZoomView.prototype._showDataInfo = function (showOrHide) {\n // Always show when drgging.\n showOrHide = this._dragging || showOrHide;\n var displayables = this._displayables;\n var handleLabels = displayables.handleLabels;\n handleLabels[0].attr('invisible', !showOrHide);\n handleLabels[1].attr('invisible', !showOrHide);\n // Highlight move handle\n displayables.moveHandle && this.api[showOrHide ? 'enterEmphasis' : 'leaveEmphasis'](displayables.moveHandle, 1);\n };\n SliderZoomView.prototype._onDragMove = function (handleIndex, dx, dy, event) {\n this._dragging = true;\n // For mobile device, prevent screen slider on the button.\n eventTool.stop(event.event);\n // Transform dx, dy to bar coordination.\n var barTransform = this._displayables.sliderGroup.getLocalTransform();\n var vertex = graphic.applyTransform([dx, dy], barTransform, true);\n var changed = this._updateInterval(handleIndex, vertex[0]);\n var realtime = this.dataZoomModel.get('realtime');\n this._updateView(!realtime);\n // Avoid dispatch dataZoom repeatly but range not changed,\n // which cause bad visual effect when progressive enabled.\n changed && realtime && this._dispatchZoomAction(true);\n };\n SliderZoomView.prototype._onDragEnd = function () {\n this._dragging = false;\n this._showDataInfo(false);\n // While in realtime mode and stream mode, dispatch action when\n // drag end will cause the whole view rerender, which is unnecessary.\n var realtime = this.dataZoomModel.get('realtime');\n !realtime && this._dispatchZoomAction(false);\n };\n SliderZoomView.prototype._onClickPanel = function (e) {\n var size = this._size;\n var localPoint = this._displayables.sliderGroup.transformCoordToLocal(e.offsetX, e.offsetY);\n if (localPoint[0] < 0 || localPoint[0] > size[0] || localPoint[1] < 0 || localPoint[1] > size[1]) {\n return;\n }\n var handleEnds = this._handleEnds;\n var center = (handleEnds[0] + handleEnds[1]) / 2;\n var changed = this._updateInterval('all', localPoint[0] - center);\n this._updateView();\n changed && this._dispatchZoomAction(false);\n };\n SliderZoomView.prototype._onBrushStart = function (e) {\n var x = e.offsetX;\n var y = e.offsetY;\n this._brushStart = new graphic.Point(x, y);\n this._brushing = true;\n this._brushStartTime = +new Date();\n // this._updateBrushRect(x, y);\n };\n\n SliderZoomView.prototype._onBrushEnd = function (e) {\n if (!this._brushing) {\n return;\n }\n var brushRect = this._displayables.brushRect;\n this._brushing = false;\n if (!brushRect) {\n return;\n }\n brushRect.attr('ignore', true);\n var brushShape = brushRect.shape;\n var brushEndTime = +new Date();\n // console.log(brushEndTime - this._brushStartTime);\n if (brushEndTime - this._brushStartTime < 200 && Math.abs(brushShape.width) < 5) {\n // Will treat it as a click\n return;\n }\n var viewExtend = this._getViewExtent();\n var percentExtent = [0, 100];\n this._range = asc([linearMap(brushShape.x, viewExtend, percentExtent, true), linearMap(brushShape.x + brushShape.width, viewExtend, percentExtent, true)]);\n this._handleEnds = [brushShape.x, brushShape.x + brushShape.width];\n this._updateView();\n this._dispatchZoomAction(false);\n };\n SliderZoomView.prototype._onBrush = function (e) {\n if (this._brushing) {\n // For mobile device, prevent screen slider on the button.\n eventTool.stop(e.event);\n this._updateBrushRect(e.offsetX, e.offsetY);\n }\n };\n SliderZoomView.prototype._updateBrushRect = function (mouseX, mouseY) {\n var displayables = this._displayables;\n var dataZoomModel = this.dataZoomModel;\n var brushRect = displayables.brushRect;\n if (!brushRect) {\n brushRect = displayables.brushRect = new Rect({\n silent: true,\n style: dataZoomModel.getModel('brushStyle').getItemStyle()\n });\n displayables.sliderGroup.add(brushRect);\n }\n brushRect.attr('ignore', false);\n var brushStart = this._brushStart;\n var sliderGroup = this._displayables.sliderGroup;\n var endPoint = sliderGroup.transformCoordToLocal(mouseX, mouseY);\n var startPoint = sliderGroup.transformCoordToLocal(brushStart.x, brushStart.y);\n var size = this._size;\n endPoint[0] = Math.max(Math.min(size[0], endPoint[0]), 0);\n brushRect.setShape({\n x: startPoint[0],\n y: 0,\n width: endPoint[0] - startPoint[0],\n height: size[1]\n });\n };\n /**\n * This action will be throttled.\n */\n SliderZoomView.prototype._dispatchZoomAction = function (realtime) {\n var range = this._range;\n this.api.dispatchAction({\n type: 'dataZoom',\n from: this.uid,\n dataZoomId: this.dataZoomModel.id,\n animation: realtime ? REALTIME_ANIMATION_CONFIG : null,\n start: range[0],\n end: range[1]\n });\n };\n SliderZoomView.prototype._findCoordRect = function () {\n // Find the grid corresponding to the first axis referred by dataZoom.\n var rect;\n var coordSysInfoList = collectReferCoordSysModelInfo(this.dataZoomModel).infoList;\n if (!rect && coordSysInfoList.length) {\n var coordSys = coordSysInfoList[0].model.coordinateSystem;\n rect = coordSys.getRect && coordSys.getRect();\n }\n if (!rect) {\n var width = this.api.getWidth();\n var height = this.api.getHeight();\n rect = {\n x: width * 0.2,\n y: height * 0.2,\n width: width * 0.6,\n height: height * 0.6\n };\n }\n return rect;\n };\n SliderZoomView.type = 'dataZoom.slider';\n return SliderZoomView;\n}(DataZoomView);\nfunction getOtherDim(thisDim) {\n // FIXME\n // 这个逻辑和getOtherAxis里一致,但是写在这里是否不好\n var map = {\n x: 'y',\n y: 'x',\n radius: 'angle',\n angle: 'radius'\n };\n return map[thisDim];\n}\nfunction getCursor(orient) {\n return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\nexport default SliderZoomView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport SliderZoomModel from './SliderZoomModel.js';\nimport SliderZoomView from './SliderZoomView.js';\nimport installCommon from './installCommon.js';\nexport function install(registers) {\n registers.registerComponentModel(SliderZoomModel);\n registers.registerComponentView(SliderZoomView);\n installCommon(registers);\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { use } from '../../extension.js';\nimport { install as installDataZoomInside } from './installDataZoomInside.js';\nimport { install as installDataZoomSlider } from './installDataZoomSlider.js';\nexport function install(registers) {\n use(installDataZoomInside);\n use(installDataZoomSlider);\n // Do not install './dataZoomSelect',\n // since it only work for toolbox dataZoom.\n}","import Vue from 'vue'\n\nvar isVue2 = true\nvar isVue3 = false\nvar Vue2 = Vue\nvar warn = Vue.util.warn\n\nfunction install() {}\n\n// createApp polyfill\nexport function createApp(rootComponent, rootProps) {\n var vm\n var provide = {}\n var app = {\n config: Vue.config,\n use: Vue.use.bind(Vue),\n mixin: Vue.mixin.bind(Vue),\n component: Vue.component.bind(Vue),\n provide: function (key, value) {\n provide[key] = value\n return this\n },\n directive: function (name, dir) {\n if (dir) {\n Vue.directive(name, dir)\n return app\n } else {\n return Vue.directive(name)\n }\n },\n mount: function (el, hydrating) {\n if (!vm) {\n vm = new Vue(Object.assign({ propsData: rootProps }, rootComponent, { provide: Object.assign(provide, rootComponent.provide) }))\n vm.$mount(el, hydrating)\n return vm\n } else {\n return vm\n }\n },\n unmount: function () {\n if (vm) {\n vm.$destroy()\n vm = undefined\n }\n },\n }\n return app\n}\n\nexport { Vue, Vue2, isVue2, isVue3, install, warn }\nexport * from 'vue'\n","var raf = null;\nfunction requestAnimationFrame (callback) {\n if (!raf) {\n raf = (\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n function (callback) {\n return setTimeout(callback, 16)\n }\n ).bind(window);\n }\n return raf(callback)\n}\n\nvar caf = null;\nfunction cancelAnimationFrame (id) {\n if (!caf) {\n caf = (\n window.cancelAnimationFrame ||\n window.webkitCancelAnimationFrame ||\n window.mozCancelAnimationFrame ||\n function (id) {\n clearTimeout(id);\n }\n ).bind(window);\n }\n\n caf(id);\n}\n\nfunction createStyles (styleText) {\n var style = document.createElement('style');\n\n if (style.styleSheet) {\n style.styleSheet.cssText = styleText;\n } else {\n style.appendChild(document.createTextNode(styleText));\n }\n (document.querySelector('head') || document.body).appendChild(style);\n return style\n}\n\nfunction createElement (tagName, props) {\n if ( props === void 0 ) props = {};\n\n var elem = document.createElement(tagName);\n Object.keys(props).forEach(function (key) {\n elem[key] = props[key];\n });\n return elem\n}\n\nfunction getComputedStyle (elem, prop, pseudo) {\n // for older versions of Firefox, `getComputedStyle` required\n // the second argument and may return `null` for some elements\n // when `display: none`\n var computedStyle = window.getComputedStyle(elem, pseudo || null) || {\n display: 'none'\n };\n\n return computedStyle[prop]\n}\n\nfunction getRenderInfo (elem) {\n if (!document.documentElement.contains(elem)) {\n return {\n detached: true,\n rendered: false\n }\n }\n\n var current = elem;\n while (current !== document) {\n if (getComputedStyle(current, 'display') === 'none') {\n return {\n detached: false,\n rendered: false\n }\n }\n current = current.parentNode;\n }\n\n return {\n detached: false,\n rendered: true\n }\n}\n\nvar css_248z = \".resize-triggers{visibility:hidden;opacity:0;pointer-events:none}.resize-contract-trigger,.resize-contract-trigger:before,.resize-expand-trigger,.resize-triggers{content:\\\"\\\";position:absolute;top:0;left:0;height:100%;width:100%;overflow:hidden}.resize-contract-trigger,.resize-expand-trigger{background:#eee;overflow:auto}.resize-contract-trigger:before{width:200%;height:200%}\";\n\nvar total = 0;\nvar style = null;\n\nfunction addListener (elem, callback) {\n if (!elem.__resize_mutation_handler__) {\n elem.__resize_mutation_handler__ = handleMutation.bind(elem);\n }\n\n var listeners = elem.__resize_listeners__;\n\n if (!listeners) {\n elem.__resize_listeners__ = [];\n if (window.ResizeObserver) {\n var offsetWidth = elem.offsetWidth;\n var offsetHeight = elem.offsetHeight;\n var ro = new ResizeObserver(function () {\n if (!elem.__resize_observer_triggered__) {\n elem.__resize_observer_triggered__ = true;\n if (elem.offsetWidth === offsetWidth && elem.offsetHeight === offsetHeight) {\n return\n }\n }\n runCallbacks(elem);\n });\n\n // initially display none won't trigger ResizeObserver callback\n var ref = getRenderInfo(elem);\n var detached = ref.detached;\n var rendered = ref.rendered;\n elem.__resize_observer_triggered__ = detached === false && rendered === false;\n elem.__resize_observer__ = ro;\n ro.observe(elem);\n } else if (elem.attachEvent && elem.addEventListener) {\n // targeting IE9/10\n elem.__resize_legacy_resize_handler__ = function handleLegacyResize () {\n runCallbacks(elem);\n };\n elem.attachEvent('onresize', elem.__resize_legacy_resize_handler__);\n document.addEventListener('DOMSubtreeModified', elem.__resize_mutation_handler__);\n } else {\n if (!total) {\n style = createStyles(css_248z);\n }\n initTriggers(elem);\n\n elem.__resize_rendered__ = getRenderInfo(elem).rendered;\n if (window.MutationObserver) {\n var mo = new MutationObserver(elem.__resize_mutation_handler__);\n mo.observe(document, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n elem.__resize_mutation_observer__ = mo;\n }\n }\n }\n\n elem.__resize_listeners__.push(callback);\n total++;\n}\n\nfunction removeListener (elem, callback) {\n var listeners = elem.__resize_listeners__;\n if (!listeners) {\n return\n }\n\n if (callback) {\n listeners.splice(listeners.indexOf(callback), 1);\n }\n\n // no listeners exist, or removing all listeners\n if (!listeners.length || !callback) {\n // targeting IE9/10\n if (elem.detachEvent && elem.removeEventListener) {\n elem.detachEvent('onresize', elem.__resize_legacy_resize_handler__);\n document.removeEventListener('DOMSubtreeModified', elem.__resize_mutation_handler__);\n return\n }\n\n if (elem.__resize_observer__) {\n elem.__resize_observer__.unobserve(elem);\n elem.__resize_observer__.disconnect();\n elem.__resize_observer__ = null;\n } else {\n if (elem.__resize_mutation_observer__) {\n elem.__resize_mutation_observer__.disconnect();\n elem.__resize_mutation_observer__ = null;\n }\n elem.removeEventListener('scroll', handleScroll);\n elem.removeChild(elem.__resize_triggers__.triggers);\n elem.__resize_triggers__ = null;\n }\n elem.__resize_listeners__ = null;\n }\n\n if (!--total && style) {\n style.parentNode.removeChild(style);\n }\n}\n\nfunction getUpdatedSize (elem) {\n var ref = elem.__resize_last__;\n var width = ref.width;\n var height = ref.height;\n var offsetWidth = elem.offsetWidth;\n var offsetHeight = elem.offsetHeight;\n if (offsetWidth !== width || offsetHeight !== height) {\n return {\n width: offsetWidth,\n height: offsetHeight\n }\n }\n return null\n}\n\nfunction handleMutation () {\n // `this` denotes the scrolling element\n var ref = getRenderInfo(this);\n var rendered = ref.rendered;\n var detached = ref.detached;\n if (rendered !== this.__resize_rendered__) {\n if (!detached && this.__resize_triggers__) {\n resetTriggers(this);\n this.addEventListener('scroll', handleScroll, true);\n }\n this.__resize_rendered__ = rendered;\n runCallbacks(this);\n }\n}\n\nfunction handleScroll () {\n var this$1 = this;\n\n // `this` denotes the scrolling element\n resetTriggers(this);\n if (this.__resize_raf__) {\n cancelAnimationFrame(this.__resize_raf__);\n }\n this.__resize_raf__ = requestAnimationFrame(function () {\n var updated = getUpdatedSize(this$1);\n if (updated) {\n this$1.__resize_last__ = updated;\n runCallbacks(this$1);\n }\n });\n}\n\nfunction runCallbacks (elem) {\n if (!elem || !elem.__resize_listeners__) {\n return\n }\n elem.__resize_listeners__.forEach(function (callback) {\n callback.call(elem, elem);\n });\n}\n\nfunction initTriggers (elem) {\n var position = getComputedStyle(elem, 'position');\n if (!position || position === 'static') {\n elem.style.position = 'relative';\n }\n\n elem.__resize_old_position__ = position;\n elem.__resize_last__ = {};\n\n var triggers = createElement('div', {\n className: 'resize-triggers'\n });\n var expand = createElement('div', {\n className: 'resize-expand-trigger'\n });\n var expandChild = createElement('div');\n var contract = createElement('div', {\n className: 'resize-contract-trigger'\n });\n expand.appendChild(expandChild);\n triggers.appendChild(expand);\n triggers.appendChild(contract);\n elem.appendChild(triggers);\n\n elem.__resize_triggers__ = {\n triggers: triggers,\n expand: expand,\n expandChild: expandChild,\n contract: contract\n };\n\n resetTriggers(elem);\n elem.addEventListener('scroll', handleScroll, true);\n\n elem.__resize_last__ = {\n width: elem.offsetWidth,\n height: elem.offsetHeight\n };\n}\n\nfunction resetTriggers (elem) {\n var ref = elem.__resize_triggers__;\n var expand = ref.expand;\n var expandChild = ref.expandChild;\n var contract = ref.contract;\n\n // batch read\n var csw = contract.scrollWidth;\n var csh = contract.scrollHeight;\n var eow = expand.offsetWidth;\n var eoh = expand.offsetHeight;\n var esw = expand.scrollWidth;\n var esh = expand.scrollHeight;\n\n // batch write\n contract.scrollLeft = csw;\n contract.scrollTop = csh;\n expandChild.style.width = eow + 1 + 'px';\n expandChild.style.height = eoh + 1 + 'px';\n expand.scrollLeft = esw;\n expand.scrollTop = esh;\n}\n\nexport { addListener, removeListener };\n","import{watch as e,unref as t,inject as n,computed as r,watchEffect as o,Vue2 as i,defineComponent as a,shallowRef as u,toRefs as s,getCurrentInstance as c,onMounted as l,onBeforeUnmount as f,h as p,nextTick as v}from\"vue-demi\";import{throttle as d,init as h}from\"echarts/core\";import{addListener as g,removeListener as m}from\"resize-detector\";var O=function(){return O=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2})).forEach((function(e){var t=e.charAt(2).toLowerCase()+e.slice(3);\"Once\"===t.substring(t.length-4)&&(t=\"~\".concat(t.substring(0,t.length-4))),r[t]=a[e]}))),Object.keys(r).forEach((function(e){var t=r[e];if(t){var o=e.toLowerCase();\"~\"===o.charAt(0)&&(o=o.substring(1),t.__once__=!0);var i=n;if(0===o.indexOf(\"zr:\")&&(i=n.getZr(),o=o.substring(3)),t.__once__){delete t.__once__;var a=t;t=function(){for(var e=[],n=0;n s._id)\n }\n\n get salesOrders() {\n return this.sales.map(s => s.orders)\n }\n\n get salesRevenue() {\n return this.sales.map(s => s.revenue.toFixed(2))\n }\n\n get salesChartOptions() {\n const baseSeries = { type: 'line', smooth: true, symbolSize: 8 }\n const baseAxis = { type: 'category', boundaryGap: false, axisLine: { onZero: true } }\n\n return {\n title: {\n text: 'Sales vs Revenue',\n subtext: 'A breakdown of the sales and revenue by week',\n left: 'center'\n },\n tooltip: { trigger: 'axis', axisPointer: { type: 'shadow', label: { show: true } } },\n legend: { data: ['Orders', 'Revenue'], left: 10 },\n toolbox: { feature: { dataZoom: { yAxisIndex: 'none' }, saveAsImage: {} } },\n grid: [\n { left: 60, right: 50, height: '35%' },\n { left: 60, right: 50, top: '55%', height: '35%' }\n ],\n dataZoom: [\n { show: true, realtime: true, start: 0, end: 100, xAxisIndex: [0, 1] },\n { type: 'inside', realtime: true, start: 0, end: 100, xAxisIndex: [0, 1] }\n ],\n axisPointer: { link: [{ xAxisIndex: 'all' }] },\n xAxis: [\n { ...baseAxis, data: this.salesDates },\n { ...baseAxis, gridIndex: 1, data: this.salesDates, position: 'top' }\n ],\n yAxis: [\n { name: 'Orders', type: 'value' },\n { gridIndex: 1, name: 'Revenue(USD)', type: 'value', inverse: true }\n ],\n series: [\n { data: this.salesOrders, name: 'Orders', ...baseSeries },\n { data: this.salesRevenue, xAxisIndex: 1, yAxisIndex: 1, name: 'Revenue', ...baseSeries }\n ]\n }\n }\n\n @Watch('search')\n onSearchUpdate() {\n this.debounceGetProducts()\n }\n\n updateDateFilter(data: string[]) {\n this.params.end = data[0]\n this.params.start = data[1]\n this.date = this.dates.join(' ~ ')\n this.debounceGetSales()\n }\n\n updateProductFilter(productId: string) {\n this.params.product = productId\n this.debounceGetSales()\n }\n\n async created() {\n try {\n await this.getSales()\n } catch (err) {\n console.log(\"couldn't get shops data\")\n }\n }\n\n async getProducts() {\n try {\n this.loading = true\n const response = await this.$store.state.apiClient.getShopProducts(this.$route.params.id, { title: this.search })\n const { products } = response.data\n\n this.products = products\n } catch (err) {\n console.log(\"couldn't get shop products\")\n } finally {\n this.loading = false\n }\n }\n\n async getSales() {\n try {\n this.loading = true\n const { data } = await this.$store.state.apiClient.getShopSales(this.$route.params.id, this.params)\n this.sales = data\n } catch (err) {\n console.log(\"couldn't get shop products\")\n } finally {\n this.loading = false\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sale.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sale.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./Sale.vue?vue&type=template&id=78367bd6&scoped=true\"\nimport script from \"./Sale.vue?vue&type=script&lang=ts\"\nexport * from \"./Sale.vue?vue&type=script&lang=ts\"\nimport style0 from \"./Sale.vue?vue&type=style&index=0&id=78367bd6&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"78367bd6\",\n null\n \n)\n\nexport default component.exports","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { parsePercent, linearMap } from '../../util/number.js';\nimport * as layout from '../../util/layout.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport { normalizeArcAngles } from 'zrender/lib/core/PathProxy.js';\nvar PI2 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\nfunction getViewRect(seriesModel, api) {\n return layout.getLayoutRect(seriesModel.getBoxLayoutParams(), {\n width: api.getWidth(),\n height: api.getHeight()\n });\n}\nexport function getBasicPieLayout(seriesModel, api) {\n var viewRect = getViewRect(seriesModel, api);\n // center can be string or number when coordinateSystem is specified\n var center = seriesModel.get('center');\n var radius = seriesModel.get('radius');\n if (!zrUtil.isArray(radius)) {\n radius = [0, radius];\n }\n var width = parsePercent(viewRect.width, api.getWidth());\n var height = parsePercent(viewRect.height, api.getHeight());\n var size = Math.min(width, height);\n var r0 = parsePercent(radius[0], size / 2);\n var r = parsePercent(radius[1], size / 2);\n var cx;\n var cy;\n var coordSys = seriesModel.coordinateSystem;\n if (coordSys) {\n // percentage is not allowed when coordinate system is specified\n var point = coordSys.dataToPoint(center);\n cx = point[0] || 0;\n cy = point[1] || 0;\n } else {\n if (!zrUtil.isArray(center)) {\n center = [center, center];\n }\n cx = parsePercent(center[0], width) + viewRect.x;\n cy = parsePercent(center[1], height) + viewRect.y;\n }\n return {\n cx: cx,\n cy: cy,\n r0: r0,\n r: r\n };\n}\nexport default function pieLayout(seriesType, ecModel, api) {\n ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n var data = seriesModel.getData();\n var valueDim = data.mapDimension('value');\n var viewRect = getViewRect(seriesModel, api);\n var _a = getBasicPieLayout(seriesModel, api),\n cx = _a.cx,\n cy = _a.cy,\n r = _a.r,\n r0 = _a.r0;\n var startAngle = -seriesModel.get('startAngle') * RADIAN;\n var endAngle = seriesModel.get('endAngle');\n var padAngle = seriesModel.get('padAngle') * RADIAN;\n endAngle = endAngle === 'auto' ? startAngle - PI2 : -endAngle * RADIAN;\n var minAngle = seriesModel.get('minAngle') * RADIAN;\n var minAndPadAngle = minAngle + padAngle;\n var validDataCount = 0;\n data.each(valueDim, function (value) {\n !isNaN(value) && validDataCount++;\n });\n var sum = data.getSum(valueDim);\n // Sum may be 0\n var unitRadian = Math.PI / (sum || validDataCount) * 2;\n var clockwise = seriesModel.get('clockwise');\n var roseType = seriesModel.get('roseType');\n var stillShowZeroSum = seriesModel.get('stillShowZeroSum');\n // [0...max]\n var extent = data.getDataExtent(valueDim);\n extent[0] = 0;\n var dir = clockwise ? 1 : -1;\n var angles = [startAngle, endAngle];\n var halfPadAngle = dir * padAngle / 2;\n normalizeArcAngles(angles, !clockwise);\n startAngle = angles[0], endAngle = angles[1];\n var angleRange = Math.abs(endAngle - startAngle);\n // In the case some sector angle is smaller than minAngle\n var restAngle = angleRange;\n var valueSumLargerThanMinAngle = 0;\n var currentAngle = startAngle;\n data.setLayout({\n viewRect: viewRect,\n r: r\n });\n data.each(valueDim, function (value, idx) {\n var angle;\n if (isNaN(value)) {\n data.setItemLayout(idx, {\n angle: NaN,\n startAngle: NaN,\n endAngle: NaN,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? NaN : r\n });\n return;\n }\n // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样?\n if (roseType !== 'area') {\n angle = sum === 0 && stillShowZeroSum ? unitRadian : value * unitRadian;\n } else {\n angle = angleRange / validDataCount;\n }\n if (angle < minAndPadAngle) {\n angle = minAndPadAngle;\n restAngle -= minAndPadAngle;\n } else {\n valueSumLargerThanMinAngle += value;\n }\n var endAngle = currentAngle + dir * angle;\n // calculate display angle\n var actualStartAngle = 0;\n var actualEndAngle = 0;\n if (padAngle > angle) {\n actualStartAngle = currentAngle + dir * angle / 2;\n actualEndAngle = actualStartAngle;\n } else {\n actualStartAngle = currentAngle + halfPadAngle;\n actualEndAngle = endAngle - halfPadAngle;\n }\n data.setItemLayout(idx, {\n angle: angle,\n startAngle: actualStartAngle,\n endAngle: actualEndAngle,\n clockwise: clockwise,\n cx: cx,\n cy: cy,\n r0: r0,\n r: roseType ? linearMap(value, extent, [r0, r]) : r\n });\n currentAngle = endAngle;\n });\n // Some sector is constrained by minAngle and padAngle\n // Rest sectors needs recalculate angle\n if (restAngle < PI2 && validDataCount) {\n // Average the angle if rest angle is not enough after all angles is\n // Constrained by minAngle and padAngle\n if (restAngle <= 1e-3) {\n var angle_1 = angleRange / validDataCount;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_1 = data.getItemLayout(idx);\n layout_1.angle = angle_1;\n var actualStartAngle = 0;\n var actualEndAngle = 0;\n if (angle_1 < padAngle) {\n actualStartAngle = startAngle + dir * (idx + 1 / 2) * angle_1;\n actualEndAngle = actualStartAngle;\n } else {\n actualStartAngle = startAngle + dir * idx * angle_1 + halfPadAngle;\n actualEndAngle = startAngle + dir * (idx + 1) * angle_1 - halfPadAngle;\n }\n layout_1.startAngle = actualStartAngle;\n layout_1.endAngle = actualEndAngle;\n }\n });\n } else {\n unitRadian = restAngle / valueSumLargerThanMinAngle;\n currentAngle = startAngle;\n data.each(valueDim, function (value, idx) {\n if (!isNaN(value)) {\n var layout_2 = data.getItemLayout(idx);\n var angle = layout_2.angle === minAndPadAngle ? minAndPadAngle : value * unitRadian;\n var actualStartAngle = 0;\n var actualEndAngle = 0;\n if (angle < padAngle) {\n actualStartAngle = currentAngle + dir * angle / 2;\n actualEndAngle = actualStartAngle;\n } else {\n actualStartAngle = currentAngle + halfPadAngle;\n actualEndAngle = currentAngle + dir * angle - halfPadAngle;\n }\n layout_2.startAngle = actualStartAngle;\n layout_2.endAngle = actualEndAngle;\n currentAngle += dir * angle;\n }\n });\n }\n }\n });\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nexport default function dataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var legendModels = ecModel.findComponents({\n mainType: 'legend'\n });\n if (!legendModels || !legendModels.length) {\n return;\n }\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n var name = data.getName(idx);\n // If in any legend component the status is not selected.\n for (var i = 0; i < legendModels.length; i++) {\n // @ts-ignore FIXME: LegendModel\n if (!legendModels[i].isSelected(name)) {\n return false;\n }\n }\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { Point, Path, Polyline } from '../util/graphic.js';\nimport PathProxy from 'zrender/lib/core/PathProxy.js';\nimport { normalizeRadian } from 'zrender/lib/contain/util.js';\nimport { cubicProjectPoint, quadraticProjectPoint } from 'zrender/lib/core/curve.js';\nimport { defaults, retrieve2 } from 'zrender/lib/core/util.js';\nimport { invert } from 'zrender/lib/core/matrix.js';\nimport * as vector from 'zrender/lib/core/vector.js';\nimport { DISPLAY_STATES, SPECIAL_STATES } from '../util/states.js';\nvar PI2 = Math.PI * 2;\nvar CMD = PathProxy.CMD;\nvar DEFAULT_SEARCH_SPACE = ['top', 'right', 'bottom', 'left'];\nfunction getCandidateAnchor(pos, distance, rect, outPt, outDir) {\n var width = rect.width;\n var height = rect.height;\n switch (pos) {\n case 'top':\n outPt.set(rect.x + width / 2, rect.y - distance);\n outDir.set(0, -1);\n break;\n case 'bottom':\n outPt.set(rect.x + width / 2, rect.y + height + distance);\n outDir.set(0, 1);\n break;\n case 'left':\n outPt.set(rect.x - distance, rect.y + height / 2);\n outDir.set(-1, 0);\n break;\n case 'right':\n outPt.set(rect.x + width + distance, rect.y + height / 2);\n outDir.set(1, 0);\n break;\n }\n}\nfunction projectPointToArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y, out) {\n x -= cx;\n y -= cy;\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d;\n // Intersect point.\n var ox = x * r + cx;\n var oy = y * r + cy;\n if (Math.abs(startAngle - endAngle) % PI2 < 1e-4) {\n // Is a circle\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n if (anticlockwise) {\n var tmp = startAngle;\n startAngle = normalizeRadian(endAngle);\n endAngle = normalizeRadian(tmp);\n } else {\n startAngle = normalizeRadian(startAngle);\n endAngle = normalizeRadian(endAngle);\n }\n if (startAngle > endAngle) {\n endAngle += PI2;\n }\n var angle = Math.atan2(y, x);\n if (angle < 0) {\n angle += PI2;\n }\n if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {\n // Project point is on the arc.\n out[0] = ox;\n out[1] = oy;\n return d - r;\n }\n var x1 = r * Math.cos(startAngle) + cx;\n var y1 = r * Math.sin(startAngle) + cy;\n var x2 = r * Math.cos(endAngle) + cx;\n var y2 = r * Math.sin(endAngle) + cy;\n var d1 = (x1 - x) * (x1 - x) + (y1 - y) * (y1 - y);\n var d2 = (x2 - x) * (x2 - x) + (y2 - y) * (y2 - y);\n if (d1 < d2) {\n out[0] = x1;\n out[1] = y1;\n return Math.sqrt(d1);\n } else {\n out[0] = x2;\n out[1] = y2;\n return Math.sqrt(d2);\n }\n}\nfunction projectPointToLine(x1, y1, x2, y2, x, y, out, limitToEnds) {\n var dx = x - x1;\n var dy = y - y1;\n var dx1 = x2 - x1;\n var dy1 = y2 - y1;\n var lineLen = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n dx1 /= lineLen;\n dy1 /= lineLen;\n // dot product\n var projectedLen = dx * dx1 + dy * dy1;\n var t = projectedLen / lineLen;\n if (limitToEnds) {\n t = Math.min(Math.max(t, 0), 1);\n }\n t *= lineLen;\n var ox = out[0] = x1 + t * dx1;\n var oy = out[1] = y1 + t * dy1;\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\nfunction projectPointToRect(x1, y1, width, height, x, y, out) {\n if (width < 0) {\n x1 = x1 + width;\n width = -width;\n }\n if (height < 0) {\n y1 = y1 + height;\n height = -height;\n }\n var x2 = x1 + width;\n var y2 = y1 + height;\n var ox = out[0] = Math.min(Math.max(x, x1), x2);\n var oy = out[1] = Math.min(Math.max(y, y1), y2);\n return Math.sqrt((ox - x) * (ox - x) + (oy - y) * (oy - y));\n}\nvar tmpPt = [];\nfunction nearestPointOnRect(pt, rect, out) {\n var dist = projectPointToRect(rect.x, rect.y, rect.width, rect.height, pt.x, pt.y, tmpPt);\n out.set(tmpPt[0], tmpPt[1]);\n return dist;\n}\n/**\n * Calculate min distance corresponding point.\n * This method won't evaluate if point is in the path.\n */\nfunction nearestPointOnPath(pt, path, out) {\n var xi = 0;\n var yi = 0;\n var x0 = 0;\n var y0 = 0;\n var x1;\n var y1;\n var minDist = Infinity;\n var data = path.data;\n var x = pt.x;\n var y = pt.y;\n for (var i = 0; i < data.length;) {\n var cmd = data[i++];\n if (i === 1) {\n xi = data[i];\n yi = data[i + 1];\n x0 = xi;\n y0 = yi;\n }\n var d = minDist;\n switch (cmd) {\n case CMD.M:\n // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n // 在 closePath 的时候使用\n x0 = data[i++];\n y0 = data[i++];\n xi = x0;\n yi = y0;\n break;\n case CMD.L:\n d = projectPointToLine(xi, yi, data[i], data[i + 1], x, y, tmpPt, true);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.C:\n d = cubicProjectPoint(xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.Q:\n d = quadraticProjectPoint(xi, yi, data[i++], data[i++], data[i], data[i + 1], x, y, tmpPt);\n xi = data[i++];\n yi = data[i++];\n break;\n case CMD.A:\n // TODO Arc 判断的开销比较大\n var cx = data[i++];\n var cy = data[i++];\n var rx = data[i++];\n var ry = data[i++];\n var theta = data[i++];\n var dTheta = data[i++];\n // TODO Arc 旋转\n i += 1;\n var anticlockwise = !!(1 - data[i++]);\n x1 = Math.cos(theta) * rx + cx;\n y1 = Math.sin(theta) * ry + cy;\n // 不是直接使用 arc 命令\n if (i <= 1) {\n // 第一个命令起点还未定义\n x0 = x1;\n y0 = y1;\n }\n // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n var _x = (x - cx) * ry / rx + cx;\n d = projectPointToArc(cx, cy, ry, theta, theta + dTheta, anticlockwise, _x, y, tmpPt);\n xi = Math.cos(theta + dTheta) * rx + cx;\n yi = Math.sin(theta + dTheta) * ry + cy;\n break;\n case CMD.R:\n x0 = xi = data[i++];\n y0 = yi = data[i++];\n var width = data[i++];\n var height = data[i++];\n d = projectPointToRect(x0, y0, width, height, x, y, tmpPt);\n break;\n case CMD.Z:\n d = projectPointToLine(xi, yi, x0, y0, x, y, tmpPt, true);\n xi = x0;\n yi = y0;\n break;\n }\n if (d < minDist) {\n minDist = d;\n out.set(tmpPt[0], tmpPt[1]);\n }\n }\n return minDist;\n}\n// Temporal variable for intermediate usage.\nvar pt0 = new Point();\nvar pt1 = new Point();\nvar pt2 = new Point();\nvar dir = new Point();\nvar dir2 = new Point();\n/**\n * Calculate a proper guide line based on the label position and graphic element definition\n * @param label\n * @param labelRect\n * @param target\n * @param targetRect\n */\nexport function updateLabelLinePoints(target, labelLineModel) {\n if (!target) {\n return;\n }\n var labelLine = target.getTextGuideLine();\n var label = target.getTextContent();\n // Needs to create text guide in each charts.\n if (!(label && labelLine)) {\n return;\n }\n var labelGuideConfig = target.textGuideLineConfig || {};\n var points = [[0, 0], [0, 0], [0, 0]];\n var searchSpace = labelGuideConfig.candidates || DEFAULT_SEARCH_SPACE;\n var labelRect = label.getBoundingRect().clone();\n labelRect.applyTransform(label.getComputedTransform());\n var minDist = Infinity;\n var anchorPoint = labelGuideConfig.anchor;\n var targetTransform = target.getComputedTransform();\n var targetInversedTransform = targetTransform && invert([], targetTransform);\n var len = labelLineModel.get('length2') || 0;\n if (anchorPoint) {\n pt2.copy(anchorPoint);\n }\n for (var i = 0; i < searchSpace.length; i++) {\n var candidate = searchSpace[i];\n getCandidateAnchor(candidate, 0, labelRect, pt0, dir);\n Point.scaleAndAdd(pt1, pt0, dir, len);\n // Transform to target coord space.\n pt1.transform(targetInversedTransform);\n // Note: getBoundingRect will ensure the `path` being created.\n var boundingRect = target.getBoundingRect();\n var dist = anchorPoint ? anchorPoint.distance(pt1) : target instanceof Path ? nearestPointOnPath(pt1, target.path, pt2) : nearestPointOnRect(pt1, boundingRect, pt2);\n // TODO pt2 is in the path\n if (dist < minDist) {\n minDist = dist;\n // Transform back to global space.\n pt1.transform(targetTransform);\n pt2.transform(targetTransform);\n pt2.toArray(points[0]);\n pt1.toArray(points[1]);\n pt0.toArray(points[2]);\n }\n }\n limitTurnAngle(points, labelLineModel.get('minTurnAngle'));\n labelLine.setShape({\n points: points\n });\n}\n// Temporal variable for the limitTurnAngle function\nvar tmpArr = [];\nvar tmpProjPoint = new Point();\n/**\n * Reduce the line segment attached to the label to limit the turn angle between two segments.\n * @param linePoints\n * @param minTurnAngle Radian of minimum turn angle. 0 - 180\n */\nexport function limitTurnAngle(linePoints, minTurnAngle) {\n if (!(minTurnAngle <= 180 && minTurnAngle > 0)) {\n return;\n }\n minTurnAngle = minTurnAngle / 180 * Math.PI;\n // The line points can be\n // /pt1----pt2 (label)\n // /\n // pt0/\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt0, pt1);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(dir2);\n var minTurnAngleCos = Math.cos(minTurnAngle);\n if (minTurnAngleCos < angleCos) {\n // Smaller than minTurnAngle\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI - minTurnAngle));\n // Limit the new calculated connect point between pt1 and pt2.\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n if (isNaN(t)) {\n return;\n }\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\n/**\n * Limit the angle of line and the surface\n * @param maxSurfaceAngle Radian of minimum turn angle. 0 - 180. 0 is same direction to normal. 180 is opposite\n */\nexport function limitSurfaceAngle(linePoints, surfaceNormal, maxSurfaceAngle) {\n if (!(maxSurfaceAngle <= 180 && maxSurfaceAngle > 0)) {\n return;\n }\n maxSurfaceAngle = maxSurfaceAngle / 180 * Math.PI;\n pt0.fromArray(linePoints[0]);\n pt1.fromArray(linePoints[1]);\n pt2.fromArray(linePoints[2]);\n Point.sub(dir, pt1, pt0);\n Point.sub(dir2, pt2, pt1);\n var len1 = dir.len();\n var len2 = dir2.len();\n if (len1 < 1e-3 || len2 < 1e-3) {\n return;\n }\n dir.scale(1 / len1);\n dir2.scale(1 / len2);\n var angleCos = dir.dot(surfaceNormal);\n var maxSurfaceAngleCos = Math.cos(maxSurfaceAngle);\n if (angleCos < maxSurfaceAngleCos) {\n // Calculate project point of pt0 on pt1-pt2\n var d = projectPointToLine(pt1.x, pt1.y, pt2.x, pt2.y, pt0.x, pt0.y, tmpArr, false);\n tmpProjPoint.fromArray(tmpArr);\n var HALF_PI = Math.PI / 2;\n var angle2 = Math.acos(dir2.dot(surfaceNormal));\n var newAngle = HALF_PI + angle2 - maxSurfaceAngle;\n if (newAngle >= HALF_PI) {\n // parallel\n Point.copy(tmpProjPoint, pt2);\n } else {\n // Calculate new projected length with limited minTurnAngle and get the new connect point\n tmpProjPoint.scaleAndAdd(dir2, d / Math.tan(Math.PI / 2 - newAngle));\n // Limit the new calculated connect point between pt1 and pt2.\n var t = pt2.x !== pt1.x ? (tmpProjPoint.x - pt1.x) / (pt2.x - pt1.x) : (tmpProjPoint.y - pt1.y) / (pt2.y - pt1.y);\n if (isNaN(t)) {\n return;\n }\n if (t < 0) {\n Point.copy(tmpProjPoint, pt1);\n } else if (t > 1) {\n Point.copy(tmpProjPoint, pt2);\n }\n }\n tmpProjPoint.toArray(linePoints[1]);\n }\n}\nfunction setLabelLineState(labelLine, ignore, stateName, stateModel) {\n var isNormal = stateName === 'normal';\n var stateObj = isNormal ? labelLine : labelLine.ensureState(stateName);\n // Make sure display.\n stateObj.ignore = ignore;\n // Set smooth\n var smooth = stateModel.get('smooth');\n if (smooth && smooth === true) {\n smooth = 0.3;\n }\n stateObj.shape = stateObj.shape || {};\n if (smooth > 0) {\n stateObj.shape.smooth = smooth;\n }\n var styleObj = stateModel.getModel('lineStyle').getLineStyle();\n isNormal ? labelLine.useStyle(styleObj) : stateObj.style = styleObj;\n}\nfunction buildLabelLinePath(path, shape) {\n var smooth = shape.smooth;\n var points = shape.points;\n if (!points) {\n return;\n }\n path.moveTo(points[0][0], points[0][1]);\n if (smooth > 0 && points.length >= 3) {\n var len1 = vector.dist(points[0], points[1]);\n var len2 = vector.dist(points[1], points[2]);\n if (!len1 || !len2) {\n path.lineTo(points[1][0], points[1][1]);\n path.lineTo(points[2][0], points[2][1]);\n return;\n }\n var moveLen = Math.min(len1, len2) * smooth;\n var midPoint0 = vector.lerp([], points[1], points[0], moveLen / len1);\n var midPoint2 = vector.lerp([], points[1], points[2], moveLen / len2);\n var midPoint1 = vector.lerp([], midPoint0, midPoint2, 0.5);\n path.bezierCurveTo(midPoint0[0], midPoint0[1], midPoint0[0], midPoint0[1], midPoint1[0], midPoint1[1]);\n path.bezierCurveTo(midPoint2[0], midPoint2[1], midPoint2[0], midPoint2[1], points[2][0], points[2][1]);\n } else {\n for (var i = 1; i < points.length; i++) {\n path.lineTo(points[i][0], points[i][1]);\n }\n }\n}\n/**\n * Create a label line if necessary and set it's style.\n */\nexport function setLabelLineStyle(targetEl, statesModels, defaultStyle) {\n var labelLine = targetEl.getTextGuideLine();\n var label = targetEl.getTextContent();\n if (!label) {\n // Not show label line if there is no label.\n if (labelLine) {\n targetEl.removeTextGuideLine();\n }\n return;\n }\n var normalModel = statesModels.normal;\n var showNormal = normalModel.get('show');\n var labelIgnoreNormal = label.ignore;\n for (var i = 0; i < DISPLAY_STATES.length; i++) {\n var stateName = DISPLAY_STATES[i];\n var stateModel = statesModels[stateName];\n var isNormal = stateName === 'normal';\n if (stateModel) {\n var stateShow = stateModel.get('show');\n var isLabelIgnored = isNormal ? labelIgnoreNormal : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal);\n if (isLabelIgnored // Not show when label is not shown in this state.\n || !retrieve2(stateShow, showNormal) // Use normal state by default if not set.\n ) {\n var stateObj = isNormal ? labelLine : labelLine && labelLine.states[stateName];\n if (stateObj) {\n stateObj.ignore = true;\n }\n if (!!labelLine) {\n setLabelLineState(labelLine, true, stateName, stateModel);\n }\n continue;\n }\n // Create labelLine if not exists\n if (!labelLine) {\n labelLine = new Polyline();\n targetEl.setTextGuideLine(labelLine);\n // Reset state of normal because it's new created.\n // NOTE: NORMAL should always been the first!\n if (!isNormal && (labelIgnoreNormal || !showNormal)) {\n setLabelLineState(labelLine, true, 'normal', statesModels.normal);\n }\n // Use same state proxy.\n if (targetEl.stateProxy) {\n labelLine.stateProxy = targetEl.stateProxy;\n }\n }\n setLabelLineState(labelLine, false, stateName, stateModel);\n }\n }\n if (labelLine) {\n defaults(labelLine.style, defaultStyle);\n // Not fill.\n labelLine.style.fill = null;\n var showAbove = normalModel.get('showAbove');\n var labelLineConfig = targetEl.textGuideLineConfig = targetEl.textGuideLineConfig || {};\n labelLineConfig.showAbove = showAbove || false;\n // Custom the buildPath.\n labelLine.buildPath = buildLabelLinePath;\n }\n}\nexport function getLabelLineStatesModels(itemModel, labelLineName) {\n labelLineName = labelLineName || 'labelLine';\n var statesModels = {\n normal: itemModel.getModel(labelLineName)\n };\n for (var i = 0; i < SPECIAL_STATES.length; i++) {\n var stateName = SPECIAL_STATES[i];\n statesModels[stateName] = itemModel.getModel([stateName, labelLineName]);\n }\n return statesModels;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n// FIXME emphasis label position is not same with normal label position\nimport { parsePercent } from '../../util/number.js';\nimport { Point } from '../../util/graphic.js';\nimport { each, isNumber } from 'zrender/lib/core/util.js';\nimport { limitTurnAngle, limitSurfaceAngle } from '../../label/labelGuideHelper.js';\nimport { shiftLayoutOnY } from '../../label/labelLayoutHelper.js';\nvar RADIAN = Math.PI / 180;\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight, viewLeft, viewTop, farthestX) {\n if (list.length < 2) {\n return;\n }\n ;\n function recalculateXOnSemiToAlignOnEllipseCurve(semi) {\n var rB = semi.rB;\n var rB2 = rB * rB;\n for (var i = 0; i < semi.list.length; i++) {\n var item = semi.list[i];\n var dy = Math.abs(item.label.y - cy);\n // horizontal r is always same with original r because x is not changed.\n var rA = r + item.len;\n var rA2 = rA * rA;\n // Use ellipse implicit function to calculate x\n var dx = Math.sqrt((1 - Math.abs(dy * dy / rB2)) * rA2);\n var newX = cx + (dx + item.len2) * dir;\n var deltaX = newX - item.label.x;\n var newTargetWidth = item.targetTextWidth - deltaX * dir;\n // text x is changed, so need to recalculate width.\n constrainTextWidth(item, newTargetWidth, true);\n item.label.x = newX;\n }\n }\n // Adjust X based on the shifted y. Make tight labels aligned on an ellipse curve.\n function recalculateX(items) {\n // Extremes of\n var topSemi = {\n list: [],\n maxY: 0\n };\n var bottomSemi = {\n list: [],\n maxY: 0\n };\n for (var i = 0; i < items.length; i++) {\n if (items[i].labelAlignTo !== 'none') {\n continue;\n }\n var item = items[i];\n var semi = item.label.y > cy ? bottomSemi : topSemi;\n var dy = Math.abs(item.label.y - cy);\n if (dy >= semi.maxY) {\n var dx = item.label.x - cx - item.len2 * dir;\n // horizontal r is always same with original r because x is not changed.\n var rA = r + item.len;\n // Canculate rB based on the topest / bottemest label.\n var rB = Math.abs(dx) < rA ? Math.sqrt(dy * dy / (1 - dx * dx / rA / rA)) : rA;\n semi.rB = rB;\n semi.maxY = dy;\n }\n semi.list.push(item);\n }\n recalculateXOnSemiToAlignOnEllipseCurve(topSemi);\n recalculateXOnSemiToAlignOnEllipseCurve(bottomSemi);\n }\n var len = list.length;\n for (var i = 0; i < len; i++) {\n if (list[i].position === 'outer' && list[i].labelAlignTo === 'labelLine') {\n var dx = list[i].label.x - farthestX;\n list[i].linePoints[1][0] += dx;\n list[i].label.x = farthestX;\n }\n }\n if (shiftLayoutOnY(list, viewTop, viewTop + viewHeight)) {\n recalculateX(list);\n }\n}\nfunction avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop) {\n var leftList = [];\n var rightList = [];\n var leftmostX = Number.MAX_VALUE;\n var rightmostX = -Number.MAX_VALUE;\n for (var i = 0; i < labelLayoutList.length; i++) {\n var label = labelLayoutList[i].label;\n if (isPositionCenter(labelLayoutList[i])) {\n continue;\n }\n if (label.x < cx) {\n leftmostX = Math.min(leftmostX, label.x);\n leftList.push(labelLayoutList[i]);\n } else {\n rightmostX = Math.max(rightmostX, label.x);\n rightList.push(labelLayoutList[i]);\n }\n }\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n if (!isPositionCenter(layout) && layout.linePoints) {\n if (layout.labelStyleWidth != null) {\n continue;\n }\n var label = layout.label;\n var linePoints = layout.linePoints;\n var targetTextWidth = void 0;\n if (layout.labelAlignTo === 'edge') {\n if (label.x < cx) {\n targetTextWidth = linePoints[2][0] - layout.labelDistance - viewLeft - layout.edgeDistance;\n } else {\n targetTextWidth = viewLeft + viewWidth - layout.edgeDistance - linePoints[2][0] - layout.labelDistance;\n }\n } else if (layout.labelAlignTo === 'labelLine') {\n if (label.x < cx) {\n targetTextWidth = leftmostX - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - rightmostX - layout.bleedMargin;\n }\n } else {\n if (label.x < cx) {\n targetTextWidth = label.x - viewLeft - layout.bleedMargin;\n } else {\n targetTextWidth = viewLeft + viewWidth - label.x - layout.bleedMargin;\n }\n }\n layout.targetTextWidth = targetTextWidth;\n constrainTextWidth(layout, targetTextWidth);\n }\n }\n adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight, viewLeft, viewTop, rightmostX);\n adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight, viewLeft, viewTop, leftmostX);\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n if (!isPositionCenter(layout) && layout.linePoints) {\n var label = layout.label;\n var linePoints = layout.linePoints;\n var isAlignToEdge = layout.labelAlignTo === 'edge';\n var padding = label.style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0;\n // textRect.width already contains paddingH if bgColor is set\n var extraPaddingH = label.style.backgroundColor ? 0 : paddingH;\n var realTextWidth = layout.rect.width + extraPaddingH;\n var dist = linePoints[1][0] - linePoints[2][0];\n if (isAlignToEdge) {\n if (label.x < cx) {\n linePoints[2][0] = viewLeft + layout.edgeDistance + realTextWidth + layout.labelDistance;\n } else {\n linePoints[2][0] = viewLeft + viewWidth - layout.edgeDistance - realTextWidth - layout.labelDistance;\n }\n } else {\n if (label.x < cx) {\n linePoints[2][0] = label.x + layout.labelDistance;\n } else {\n linePoints[2][0] = label.x - layout.labelDistance;\n }\n linePoints[1][0] = linePoints[2][0] + dist;\n }\n linePoints[1][1] = linePoints[2][1] = label.y;\n }\n }\n}\n/**\n * Set max width of each label, and then wrap each label to the max width.\n *\n * @param layout label layout\n * @param availableWidth max width for the label to display\n * @param forceRecalculate recaculate the text layout even if the current width\n * is smaller than `availableWidth`. This is useful when the text was previously\n * wrapped by calling `constrainTextWidth` but now `availableWidth` changed, in\n * which case, previous wrapping should be redo.\n */\nfunction constrainTextWidth(layout, availableWidth, forceRecalculate) {\n if (forceRecalculate === void 0) {\n forceRecalculate = false;\n }\n if (layout.labelStyleWidth != null) {\n // User-defined style.width has the highest priority.\n return;\n }\n var label = layout.label;\n var style = label.style;\n var textRect = layout.rect;\n var bgColor = style.backgroundColor;\n var padding = style.padding;\n var paddingH = padding ? padding[1] + padding[3] : 0;\n var overflow = style.overflow;\n // textRect.width already contains paddingH if bgColor is set\n var oldOuterWidth = textRect.width + (bgColor ? 0 : paddingH);\n if (availableWidth < oldOuterWidth || forceRecalculate) {\n var oldHeight = textRect.height;\n if (overflow && overflow.match('break')) {\n // Temporarily set background to be null to calculate\n // the bounding box without background.\n label.setStyle('backgroundColor', null);\n // Set constraining width\n label.setStyle('width', availableWidth - paddingH);\n // This is the real bounding box of the text without padding.\n var innerRect = label.getBoundingRect();\n label.setStyle('width', Math.ceil(innerRect.width));\n label.setStyle('backgroundColor', bgColor);\n } else {\n var availableInnerWidth = availableWidth - paddingH;\n var newWidth = availableWidth < oldOuterWidth\n // Current text is too wide, use `availableWidth` as max width.\n ? availableInnerWidth :\n // Current available width is enough, but the text may have\n // already been wrapped with a smaller available width.\n forceRecalculate ? availableInnerWidth > layout.unconstrainedWidth\n // Current available is larger than text width,\n // so don't constrain width (otherwise it may have\n // empty space in the background).\n ? null\n // Current available is smaller than text width, so\n // use the current available width as constraining\n // width.\n : availableInnerWidth\n // Current available width is enough, so no need to\n // constrain.\n : null;\n label.setStyle('width', newWidth);\n }\n var newRect = label.getBoundingRect();\n textRect.width = newRect.width;\n var margin = (label.style.margin || 0) + 2.1;\n textRect.height = newRect.height + margin;\n textRect.y -= (textRect.height - oldHeight) / 2;\n }\n}\nfunction isPositionCenter(sectorShape) {\n // Not change x for center label\n return sectorShape.position === 'center';\n}\nexport default function pieLabelLayout(seriesModel) {\n var data = seriesModel.getData();\n var labelLayoutList = [];\n var cx;\n var cy;\n var hasLabelRotate = false;\n var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN;\n var viewRect = data.getLayout('viewRect');\n var r = data.getLayout('r');\n var viewWidth = viewRect.width;\n var viewLeft = viewRect.x;\n var viewTop = viewRect.y;\n var viewHeight = viewRect.height;\n function setNotShow(el) {\n el.ignore = true;\n }\n function isLabelShown(label) {\n if (!label.ignore) {\n return true;\n }\n for (var key in label.states) {\n if (label.states[key].ignore === false) {\n return true;\n }\n }\n return false;\n }\n data.each(function (idx) {\n var sector = data.getItemGraphicEl(idx);\n var sectorShape = sector.shape;\n var label = sector.getTextContent();\n var labelLine = sector.getTextGuideLine();\n var itemModel = data.getItemModel(idx);\n var labelModel = itemModel.getModel('label');\n // Use position in normal or emphasis\n var labelPosition = labelModel.get('position') || itemModel.get(['emphasis', 'label', 'position']);\n var labelDistance = labelModel.get('distanceToLabelLine');\n var labelAlignTo = labelModel.get('alignTo');\n var edgeDistance = parsePercent(labelModel.get('edgeDistance'), viewWidth);\n var bleedMargin = labelModel.get('bleedMargin');\n var labelLineModel = itemModel.getModel('labelLine');\n var labelLineLen = labelLineModel.get('length');\n labelLineLen = parsePercent(labelLineLen, viewWidth);\n var labelLineLen2 = labelLineModel.get('length2');\n labelLineLen2 = parsePercent(labelLineLen2, viewWidth);\n if (Math.abs(sectorShape.endAngle - sectorShape.startAngle) < minShowLabelRadian) {\n each(label.states, setNotShow);\n label.ignore = true;\n if (labelLine) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n }\n return;\n }\n if (!isLabelShown(label)) {\n return;\n }\n var midAngle = (sectorShape.startAngle + sectorShape.endAngle) / 2;\n var nx = Math.cos(midAngle);\n var ny = Math.sin(midAngle);\n var textX;\n var textY;\n var linePoints;\n var textAlign;\n cx = sectorShape.cx;\n cy = sectorShape.cy;\n var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n if (labelPosition === 'center') {\n textX = sectorShape.cx;\n textY = sectorShape.cy;\n textAlign = 'center';\n } else {\n var x1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * nx : sectorShape.r * nx) + cx;\n var y1 = (isLabelInside ? (sectorShape.r + sectorShape.r0) / 2 * ny : sectorShape.r * ny) + cy;\n textX = x1 + nx * 3;\n textY = y1 + ny * 3;\n if (!isLabelInside) {\n // For roseType\n var x2 = x1 + nx * (labelLineLen + r - sectorShape.r);\n var y2 = y1 + ny * (labelLineLen + r - sectorShape.r);\n var x3 = x2 + (nx < 0 ? -1 : 1) * labelLineLen2;\n var y3 = y2;\n if (labelAlignTo === 'edge') {\n // Adjust textX because text align of edge is opposite\n textX = nx < 0 ? viewLeft + edgeDistance : viewLeft + viewWidth - edgeDistance;\n } else {\n textX = x3 + (nx < 0 ? -labelDistance : labelDistance);\n }\n textY = y3;\n linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n }\n textAlign = isLabelInside ? 'center' : labelAlignTo === 'edge' ? nx > 0 ? 'right' : 'left' : nx > 0 ? 'left' : 'right';\n }\n var PI = Math.PI;\n var labelRotate = 0;\n var rotate = labelModel.get('rotate');\n if (isNumber(rotate)) {\n labelRotate = rotate * (PI / 180);\n } else if (labelPosition === 'center') {\n labelRotate = 0;\n } else if (rotate === 'radial' || rotate === true) {\n var radialAngle = nx < 0 ? -midAngle + PI : -midAngle;\n labelRotate = radialAngle;\n } else if (rotate === 'tangential' && labelPosition !== 'outside' && labelPosition !== 'outer') {\n var rad = Math.atan2(nx, ny);\n if (rad < 0) {\n rad = PI * 2 + rad;\n }\n var isDown = ny > 0;\n if (isDown) {\n rad = PI + rad;\n }\n labelRotate = rad - PI;\n }\n hasLabelRotate = !!labelRotate;\n label.x = textX;\n label.y = textY;\n label.rotation = labelRotate;\n label.setStyle({\n verticalAlign: 'middle'\n });\n // Not sectorShape the inside label\n if (!isLabelInside) {\n var textRect = label.getBoundingRect().clone();\n textRect.applyTransform(label.getComputedTransform());\n // Text has a default 1px stroke. Exclude this.\n var margin = (label.style.margin || 0) + 2.1;\n textRect.y -= margin / 2;\n textRect.height += margin;\n labelLayoutList.push({\n label: label,\n labelLine: labelLine,\n position: labelPosition,\n len: labelLineLen,\n len2: labelLineLen2,\n minTurnAngle: labelLineModel.get('minTurnAngle'),\n maxSurfaceAngle: labelLineModel.get('maxSurfaceAngle'),\n surfaceNormal: new Point(nx, ny),\n linePoints: linePoints,\n textAlign: textAlign,\n labelDistance: labelDistance,\n labelAlignTo: labelAlignTo,\n edgeDistance: edgeDistance,\n bleedMargin: bleedMargin,\n rect: textRect,\n unconstrainedWidth: textRect.width,\n labelStyleWidth: label.style.width\n });\n } else {\n label.setStyle({\n align: textAlign\n });\n var selectState = label.states.select;\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n sector.setTextConfig({\n inside: isLabelInside\n });\n });\n if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight, viewLeft, viewTop);\n }\n for (var i = 0; i < labelLayoutList.length; i++) {\n var layout = labelLayoutList[i];\n var label = layout.label;\n var labelLine = layout.labelLine;\n var notShowLabel = isNaN(label.x) || isNaN(label.y);\n if (label) {\n label.setStyle({\n align: layout.textAlign\n });\n if (notShowLabel) {\n each(label.states, setNotShow);\n label.ignore = true;\n }\n var selectState = label.states.select;\n if (selectState) {\n selectState.x += label.x;\n selectState.y += label.y;\n }\n }\n if (labelLine) {\n var linePoints = layout.linePoints;\n if (notShowLabel || !linePoints) {\n each(labelLine.states, setNotShow);\n labelLine.ignore = true;\n } else {\n limitTurnAngle(linePoints, layout.minTurnAngle);\n limitSurfaceAngle(linePoints, layout.surfaceNormal, layout.maxSurfaceAngle);\n labelLine.setShape({\n points: linePoints\n });\n // Set the anchor to the midpoint of sector\n label.__hostTarget.textGuideLineConfig = {\n anchor: new Point(linePoints[0][0], linePoints[0][1])\n };\n }\n }\n }\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isArray, map } from 'zrender/lib/core/util.js';\nimport { parsePercent } from 'zrender/lib/contain/text.js';\nexport function getSectorCornerRadius(model, shape, zeroIfNull) {\n var cornerRadius = model.get('borderRadius');\n if (cornerRadius == null) {\n return zeroIfNull ? {\n cornerRadius: 0\n } : null;\n }\n if (!isArray(cornerRadius)) {\n cornerRadius = [cornerRadius, cornerRadius, cornerRadius, cornerRadius];\n }\n var dr = Math.abs(shape.r || 0 - shape.r0 || 0);\n return {\n cornerRadius: map(cornerRadius, function (cr) {\n return parsePercent(cr, dr);\n })\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport { extend, retrieve3 } from 'zrender/lib/core/util.js';\nimport * as graphic from '../../util/graphic.js';\nimport { setStatesStylesFromModel, toggleHoverEmphasis } from '../../util/states.js';\nimport ChartView from '../../view/Chart.js';\nimport labelLayout from './labelLayout.js';\nimport { setLabelLineStyle, getLabelLineStatesModels } from '../../label/labelGuideHelper.js';\nimport { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle.js';\nimport { getSectorCornerRadius } from '../helper/sectorHelper.js';\nimport { saveOldStyle } from '../../animation/basicTransition.js';\nimport { getBasicPieLayout } from './pieLayout.js';\n/**\n * Piece of pie including Sector, Label, LabelLine\n */\nvar PiePiece = /** @class */function (_super) {\n __extends(PiePiece, _super);\n function PiePiece(data, idx, startAngle) {\n var _this = _super.call(this) || this;\n _this.z2 = 2;\n var text = new graphic.Text();\n _this.setTextContent(text);\n _this.updateData(data, idx, startAngle, true);\n return _this;\n }\n PiePiece.prototype.updateData = function (data, idx, startAngle, firstCreate) {\n var sector = this;\n var seriesModel = data.hostModel;\n var itemModel = data.getItemModel(idx);\n var emphasisModel = itemModel.getModel('emphasis');\n var layout = data.getItemLayout(idx);\n // cornerRadius & innerCornerRadius doesn't exist in the item layout. Use `0` if null value is specified.\n // see `setItemLayout` in `pieLayout.ts`.\n var sectorShape = extend(getSectorCornerRadius(itemModel.getModel('itemStyle'), layout, true), layout);\n // Ignore NaN data.\n if (isNaN(sectorShape.startAngle)) {\n // Use NaN shape to avoid drawing shape.\n sector.setShape(sectorShape);\n return;\n }\n if (firstCreate) {\n sector.setShape(sectorShape);\n var animationType = seriesModel.getShallow('animationType');\n if (seriesModel.ecModel.ssr) {\n // Use scale animation in SSR mode(opacity?)\n // Because CSS SVG animation doesn't support very customized shape animation.\n graphic.initProps(sector, {\n scaleX: 0,\n scaleY: 0\n }, seriesModel, {\n dataIndex: idx,\n isFrom: true\n });\n sector.originX = sectorShape.cx;\n sector.originY = sectorShape.cy;\n } else if (animationType === 'scale') {\n sector.shape.r = layout.r0;\n graphic.initProps(sector, {\n shape: {\n r: layout.r\n }\n }, seriesModel, idx);\n }\n // Expansion\n else {\n if (startAngle != null) {\n sector.setShape({\n startAngle: startAngle,\n endAngle: startAngle\n });\n graphic.initProps(sector, {\n shape: {\n startAngle: layout.startAngle,\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n } else {\n sector.shape.endAngle = layout.startAngle;\n graphic.updateProps(sector, {\n shape: {\n endAngle: layout.endAngle\n }\n }, seriesModel, idx);\n }\n }\n } else {\n saveOldStyle(sector);\n // Transition animation from the old shape\n graphic.updateProps(sector, {\n shape: sectorShape\n }, seriesModel, idx);\n }\n sector.useStyle(data.getItemVisual(idx, 'style'));\n setStatesStylesFromModel(sector, itemModel);\n var midAngle = (layout.startAngle + layout.endAngle) / 2;\n var offset = seriesModel.get('selectedOffset');\n var dx = Math.cos(midAngle) * offset;\n var dy = Math.sin(midAngle) * offset;\n var cursorStyle = itemModel.getShallow('cursor');\n cursorStyle && sector.attr('cursor', cursorStyle);\n this._updateLabel(seriesModel, data, idx);\n sector.ensureState('emphasis').shape = extend({\n r: layout.r + (emphasisModel.get('scale') ? emphasisModel.get('scaleSize') || 0 : 0)\n }, getSectorCornerRadius(emphasisModel.getModel('itemStyle'), layout));\n extend(sector.ensureState('select'), {\n x: dx,\n y: dy,\n shape: getSectorCornerRadius(itemModel.getModel(['select', 'itemStyle']), layout)\n });\n extend(sector.ensureState('blur'), {\n shape: getSectorCornerRadius(itemModel.getModel(['blur', 'itemStyle']), layout)\n });\n var labelLine = sector.getTextGuideLine();\n var labelText = sector.getTextContent();\n labelLine && extend(labelLine.ensureState('select'), {\n x: dx,\n y: dy\n });\n // TODO: needs dx, dy in zrender?\n extend(labelText.ensureState('select'), {\n x: dx,\n y: dy\n });\n toggleHoverEmphasis(this, emphasisModel.get('focus'), emphasisModel.get('blurScope'), emphasisModel.get('disabled'));\n };\n PiePiece.prototype._updateLabel = function (seriesModel, data, idx) {\n var sector = this;\n var itemModel = data.getItemModel(idx);\n var labelLineModel = itemModel.getModel('labelLine');\n var style = data.getItemVisual(idx, 'style');\n var visualColor = style && style.fill;\n var visualOpacity = style && style.opacity;\n setLabelStyle(sector, getLabelStatesModels(itemModel), {\n labelFetcher: data.hostModel,\n labelDataIndex: idx,\n inheritColor: visualColor,\n defaultOpacity: visualOpacity,\n defaultText: seriesModel.getFormattedLabel(idx, 'normal') || data.getName(idx)\n });\n var labelText = sector.getTextContent();\n // Set textConfig on sector.\n sector.setTextConfig({\n // reset position, rotation\n position: null,\n rotation: null\n });\n // Make sure update style on labelText after setLabelStyle.\n // Because setLabelStyle will replace a new style on it.\n labelText.attr({\n z2: 10\n });\n var labelPosition = seriesModel.get(['label', 'position']);\n if (labelPosition !== 'outside' && labelPosition !== 'outer') {\n sector.removeTextGuideLine();\n } else {\n var polyline = this.getTextGuideLine();\n if (!polyline) {\n polyline = new graphic.Polyline();\n this.setTextGuideLine(polyline);\n }\n // Default use item visual color\n setLabelLineStyle(this, getLabelLineStatesModels(itemModel), {\n stroke: visualColor,\n opacity: retrieve3(labelLineModel.get(['lineStyle', 'opacity']), visualOpacity, 1)\n });\n }\n };\n return PiePiece;\n}(graphic.Sector);\n// Pie view\nvar PieView = /** @class */function (_super) {\n __extends(PieView, _super);\n function PieView() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.ignoreLabelLineUpdate = true;\n return _this;\n }\n PieView.prototype.render = function (seriesModel, ecModel, api, payload) {\n var data = seriesModel.getData();\n var oldData = this._data;\n var group = this.group;\n var startAngle;\n // First render\n if (!oldData && data.count() > 0) {\n var shape = data.getItemLayout(0);\n for (var s = 1; isNaN(shape && shape.startAngle) && s < data.count(); ++s) {\n shape = data.getItemLayout(s);\n }\n if (shape) {\n startAngle = shape.startAngle;\n }\n }\n // remove empty-circle if it exists\n if (this._emptyCircleSector) {\n group.remove(this._emptyCircleSector);\n }\n // when all data are filtered, show lightgray empty circle\n if (data.count() === 0 && seriesModel.get('showEmptyCircle')) {\n var sector = new graphic.Sector({\n shape: getBasicPieLayout(seriesModel, api)\n });\n sector.useStyle(seriesModel.getModel('emptyCircleStyle').getItemStyle());\n this._emptyCircleSector = sector;\n group.add(sector);\n }\n data.diff(oldData).add(function (idx) {\n var piePiece = new PiePiece(data, idx, startAngle);\n data.setItemGraphicEl(idx, piePiece);\n group.add(piePiece);\n }).update(function (newIdx, oldIdx) {\n var piePiece = oldData.getItemGraphicEl(oldIdx);\n piePiece.updateData(data, newIdx, startAngle);\n piePiece.off('click');\n group.add(piePiece);\n data.setItemGraphicEl(newIdx, piePiece);\n }).remove(function (idx) {\n var piePiece = oldData.getItemGraphicEl(idx);\n graphic.removeElementWithFadeOut(piePiece, seriesModel, idx);\n }).execute();\n labelLayout(seriesModel);\n // Always use initial animation.\n if (seriesModel.get('animationTypeUpdate') !== 'expansion') {\n this._data = data;\n }\n };\n PieView.prototype.dispose = function () {};\n PieView.prototype.containPoint = function (point, seriesModel) {\n var data = seriesModel.getData();\n var itemLayout = data.getItemLayout(0);\n if (itemLayout) {\n var dx = point[0] - itemLayout.cx;\n var dy = point[1] - itemLayout.cy;\n var radius = Math.sqrt(dx * dx + dy * dy);\n return radius <= itemLayout.r && radius >= itemLayout.r0;\n }\n };\n PieView.type = 'pie';\n return PieView;\n}(ChartView);\nexport default PieView;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport prepareSeriesDataSchema from '../../data/helper/createDimensions.js';\nimport SeriesData from '../../data/SeriesData.js';\nimport { extend, isArray } from 'zrender/lib/core/util.js';\n/**\n * [Usage]:\n * (1)\n * createListSimply(seriesModel, ['value']);\n * (2)\n * createListSimply(seriesModel, {\n * coordDimensions: ['value'],\n * dimensionsCount: 5\n * });\n */\nexport default function createSeriesDataSimply(seriesModel, opt, nameList) {\n opt = isArray(opt) && {\n coordDimensions: opt\n } || extend({\n encodeDefine: seriesModel.getEncode()\n }, opt);\n var source = seriesModel.getSource();\n var dimensions = prepareSeriesDataSchema(source, opt).dimensions;\n var list = new SeriesData(dimensions, seriesModel);\n list.initData(source, nameList);\n return list;\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n/**\n * LegendVisualProvider is an bridge that pick encoded color from data and\n * provide to the legend component.\n */\nvar LegendVisualProvider = /** @class */function () {\n function LegendVisualProvider(\n // Function to get data after filtered. It stores all the encoding info\n getDataWithEncodedVisual,\n // Function to get raw data before filtered.\n getRawData) {\n this._getDataWithEncodedVisual = getDataWithEncodedVisual;\n this._getRawData = getRawData;\n }\n LegendVisualProvider.prototype.getAllNames = function () {\n var rawData = this._getRawData();\n // We find the name from the raw data. In case it's filtered by the legend component.\n // Normally, the name can be found in rawData, but can't be found in filtered data will display as gray.\n return rawData.mapArray(rawData.getName);\n };\n LegendVisualProvider.prototype.containName = function (name) {\n var rawData = this._getRawData();\n return rawData.indexOfName(name) >= 0;\n };\n LegendVisualProvider.prototype.indexOfName = function (name) {\n // Only get data when necessary.\n // Because LegendVisualProvider constructor may be new in the stage that data is not prepared yet.\n // Invoking Series#getData immediately will throw an error.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n return dataWithEncodedVisual.indexOfName(name);\n };\n LegendVisualProvider.prototype.getItemVisual = function (dataIndex, key) {\n // Get encoded visual properties from final filtered data.\n var dataWithEncodedVisual = this._getDataWithEncodedVisual();\n return dataWithEncodedVisual.getItemVisual(dataIndex, key);\n };\n return LegendVisualProvider;\n}();\nexport default LegendVisualProvider;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { __extends } from \"tslib\";\nimport createSeriesDataSimply from '../helper/createSeriesDataSimply.js';\nimport * as zrUtil from 'zrender/lib/core/util.js';\nimport * as modelUtil from '../../util/model.js';\nimport { getPercentSeats } from '../../util/number.js';\nimport { makeSeriesEncodeForNameBased } from '../../data/helper/sourceHelper.js';\nimport LegendVisualProvider from '../../visual/LegendVisualProvider.js';\nimport SeriesModel from '../../model/Series.js';\nvar innerData = modelUtil.makeInner();\nvar PieSeriesModel = /** @class */function (_super) {\n __extends(PieSeriesModel, _super);\n function PieSeriesModel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\n * @overwrite\n */\n PieSeriesModel.prototype.init = function (option) {\n _super.prototype.init.apply(this, arguments);\n // Enable legend selection for each data item\n // Use a function instead of direct access because data reference may changed\n this.legendVisualProvider = new LegendVisualProvider(zrUtil.bind(this.getData, this), zrUtil.bind(this.getRawData, this));\n this._defaultLabelLine(option);\n };\n /**\n * @overwrite\n */\n PieSeriesModel.prototype.mergeOption = function () {\n _super.prototype.mergeOption.apply(this, arguments);\n };\n /**\n * @overwrite\n */\n PieSeriesModel.prototype.getInitialData = function () {\n return createSeriesDataSimply(this, {\n coordDimensions: ['value'],\n encodeDefaulter: zrUtil.curry(makeSeriesEncodeForNameBased, this)\n });\n };\n /**\n * @overwrite\n */\n PieSeriesModel.prototype.getDataParams = function (dataIndex) {\n var data = this.getData();\n // update seats when data is changed\n var dataInner = innerData(data);\n var seats = dataInner.seats;\n if (!seats) {\n var valueList_1 = [];\n data.each(data.mapDimension('value'), function (value) {\n valueList_1.push(value);\n });\n seats = dataInner.seats = getPercentSeats(valueList_1, data.hostModel.get('percentPrecision'));\n }\n var params = _super.prototype.getDataParams.call(this, dataIndex);\n // seats may be empty when sum is 0\n params.percent = seats[dataIndex] || 0;\n params.$vars.push('percent');\n return params;\n };\n PieSeriesModel.prototype._defaultLabelLine = function (option) {\n // Extend labelLine emphasis\n modelUtil.defaultEmphasis(option, 'labelLine', ['show']);\n var labelLineNormalOpt = option.labelLine;\n var labelLineEmphasisOpt = option.emphasis.labelLine;\n // Not show label line if `label.normal.show = false`\n labelLineNormalOpt.show = labelLineNormalOpt.show && option.label.show;\n labelLineEmphasisOpt.show = labelLineEmphasisOpt.show && option.emphasis.label.show;\n };\n PieSeriesModel.type = 'series.pie';\n PieSeriesModel.defaultOption = {\n // zlevel: 0,\n z: 2,\n legendHoverLink: true,\n colorBy: 'data',\n // 默认全局居中\n center: ['50%', '50%'],\n radius: [0, '75%'],\n // 默认顺时针\n clockwise: true,\n startAngle: 90,\n endAngle: 'auto',\n padAngle: 0,\n // 最小角度改为0\n minAngle: 0,\n // If the angle of a sector less than `minShowLabelAngle`,\n // the label will not be displayed.\n minShowLabelAngle: 0,\n // 选中时扇区偏移量\n selectedOffset: 10,\n // 选择模式,默认关闭,可选single,multiple\n // selectedMode: false,\n // 南丁格尔玫瑰图模式,'radius'(半径) | 'area'(面积)\n // roseType: null,\n percentPrecision: 2,\n // If still show when all data zero.\n stillShowZeroSum: true,\n // cursor: null,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: null,\n height: null,\n label: {\n // color: 'inherit',\n // If rotate around circle\n rotate: 0,\n show: true,\n overflow: 'truncate',\n // 'outer', 'inside', 'center'\n position: 'outer',\n // 'none', 'labelLine', 'edge'. Works only when position is 'outer'\n alignTo: 'none',\n // Closest distance between label and chart edge.\n // Works only position is 'outer' and alignTo is 'edge'.\n edgeDistance: '25%',\n // Works only position is 'outer' and alignTo is not 'edge'.\n bleedMargin: 10,\n // Distance between text and label line.\n distanceToLabelLine: 5\n // formatter: 标签文本格式器,同 tooltip.formatter,不支持异步回调\n // 默认使用全局文本样式,详见 textStyle\n // distance: 当position为inner时有效,为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\n },\n\n // Enabled when label.normal.position is 'outer'\n labelLine: {\n show: true,\n // 引导线两段中的第一段长度\n length: 15,\n // 引导线两段中的第二段长度\n length2: 15,\n smooth: false,\n minTurnAngle: 90,\n maxSurfaceAngle: 90,\n lineStyle: {\n // color: 各异,\n width: 1,\n type: 'solid'\n }\n },\n itemStyle: {\n borderWidth: 1,\n borderJoin: 'round'\n },\n showEmptyCircle: true,\n emptyCircleStyle: {\n color: 'lightgray',\n opacity: 1\n },\n labelLayout: {\n // Hide the overlapped label.\n hideOverlap: true\n },\n emphasis: {\n scale: true,\n scaleSize: 5\n },\n // If use strategy to avoid label overlapping\n avoidLabelOverlap: true,\n // Animation type. Valid values: expansion, scale\n animationType: 'expansion',\n animationDuration: 1000,\n // Animation type when update. Valid values: transition, expansion\n animationTypeUpdate: 'transition',\n animationEasingUpdate: 'cubicInOut',\n animationDurationUpdate: 500,\n animationEasing: 'cubicInOut'\n };\n return PieSeriesModel;\n}(SeriesModel);\nexport default PieSeriesModel;","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { isNumber } from 'zrender/lib/core/util.js';\nexport default function negativeDataFilter(seriesType) {\n return {\n seriesType: seriesType,\n reset: function (seriesModel, ecModel) {\n var data = seriesModel.getData();\n data.filterSelf(function (idx) {\n // handle negative value condition\n var valueDim = data.mapDimension('value');\n var curValue = data.get(valueDim, idx);\n if (isNumber(curValue) && !isNaN(curValue) && curValue < 0) {\n return false;\n }\n return true;\n });\n }\n };\n}","\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * AUTO-GENERATED FILE. DO NOT MODIFY.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements. See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership. The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License. You may obtain a copy of the License at\n*\n* http://www.apache.org/licenses/LICENSE-2.0\n*\n* Unless required by applicable law or agreed to in writing,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied. See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nimport { createLegacyDataSelectAction } from '../../legacy/dataSelectAction.js';\nimport pieLayout from '../pie/pieLayout.js';\nimport dataFilter from '../../processor/dataFilter.js';\nimport { curry } from 'zrender/lib/core/util.js';\nimport PieView from './PieView.js';\nimport PieSeriesModel from './PieSeries.js';\nimport negativeDataFilter from '../../processor/negativeDataFilter.js';\nexport function install(registers) {\n registers.registerChartView(PieView);\n registers.registerSeriesModel(PieSeriesModel);\n createLegacyDataSelectAction('pie', registers.registerAction);\n registers.registerLayout(curry(pieLayout, 'pie'));\n registers.registerProcessor(dataFilter('pie'));\n registers.registerProcessor(negativeDataFilter('pie'));\n}","\nimport { Component, Vue } from 'vue-property-decorator'\nimport Product from '../components/Product.vue'\nimport Sale from '../components/Sale.vue'\nimport ContactsTable from '../components/ContactsTable.vue'\n\nimport { use } from 'echarts/core'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport { PieChart, LineChart } from 'echarts/charts'\nimport { TitleComponent, TooltipComponent, LegendComponent, GridComponent } from 'echarts/components'\nimport VChart from 'vue-echarts'\n\nuse([CanvasRenderer, PieChart, TitleComponent, TooltipComponent, LegendComponent, LineChart, GridComponent])\n\n@Component({ components: { Product, ContactsTable, Sale, VChart } })\nexport default class Shop extends Vue {\n shop: yakkyo.IShopMonitor = null\n products: yakkyo.IShopMonitorProduct[] = []\n productParams = {\n totalPages: 0,\n page: 1,\n itemsPerPage: 12\n }\n\n loading = false\n\n generalHeaders = [\n { text: 'Category', value: 'Category', width: '200px' },\n { text: 'Tech Spend USD', value: 'Tech Spend USD', width: '200px' },\n { text: 'Sales Revenue USD', value: 'Sales Revenue USD', width: '100px' },\n { text: 'Tranco', value: 'Tranco', width: '250px' },\n { text: 'Page Rank', value: 'Page Rank', width: '250px' },\n { text: 'Majestic', value: 'Majestic', width: '150px' },\n { text: 'Umbrella', value: 'Umbrella', width: '150px' },\n { text: 'Exclusion', value: 'Exclusion', width: '150px' },\n { text: 'GDPR', value: 'GDPR', width: '150px' }\n ]\n\n scrapingHeaders = [\n { text: 'Date', value: 'date', width: '200px' },\n { text: 'Updated Products', value: 'updatedProducts.length', width: '200px' },\n { text: 'Updated Variants', value: 'updatedVariants.length', width: '100px' }\n ]\n\n get chartOptions() {\n return {\n tooltip: { show: false },\n title: {\n text: `Total orders by country`,\n subtext: 'A breakdown of the orders, aggregated by country',\n left: 'center'\n },\n legend: {\n show: false\n },\n labelLine: {\n length: 30\n },\n label: {\n formatter: ' {b|{b}} \\n{hr|}\\n {c} sales {per|{d}%} ',\n backgroundColor: '#f0f2f5',\n borderColor: '#f0f2f5',\n borderWidth: 1,\n borderRadius: 4,\n rich: {\n a: {\n color: '#6E7079',\n lineHeight: 22,\n align: 'left'\n },\n hr: {\n borderColor: '#8C8D8E',\n width: '100%',\n borderWidth: 0,\n height: 0\n },\n b: {\n color: '#4C5058',\n fontSize: 14,\n fontWeight: 'bold',\n lineHeight: 33,\n align: 'left'\n },\n per: {\n color: '#fff',\n backgroundColor: '#4C5058',\n borderColor: '#8C8D8E',\n padding: [3, 4],\n borderRadius: 4,\n lineHeight: 22\n }\n }\n },\n series: [\n {\n name: 'Sales by Country',\n type: 'pie',\n radius: ['40%', '60%'],\n avoidLabelOverlap: true,\n data:\n (this.shop as any).salesByCountry && (this.shop as any).salesByCountry.length\n ? (this.shop as any).salesByCountry.map(sbc => ({ value: sbc.orders, name: sbc.countryCode }))\n : []\n }\n ]\n }\n }\n\n get staffItems() {\n if (!this.shop) return []\n return this.shop.contacts\n }\n\n async created() {\n try {\n this.loading = true\n const response = await this.$store.state.apiClient.getShop(this.$route.params.id)\n this.shop = response.data\n\n await this.getProducts()\n } catch (err) {\n console.log(\"couldn't get shops data\")\n } finally {\n this.loading = false\n }\n }\n\n async getProducts() {\n try {\n this.loading = true\n const response = await this.$store.state.apiClient.getShopProducts(this.$route.params.id, this.productParams)\n const { products, total, itemsPerPage } = response.data\n\n this.productParams.totalPages = Math.ceil(total / itemsPerPage)\n this.products = products\n } catch (err) {\n console.log(\"couldn't get shop products\")\n } finally {\n this.loading = false\n }\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Shop.vue?vue&type=script&lang=ts\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Shop.vue?vue&type=script&lang=ts\"","import { render, staticRenderFns } from \"./Shop.vue?vue&type=template&id=08eb49ec&scoped=true\"\nimport script from \"./Shop.vue?vue&type=script&lang=ts\"\nexport * from \"./Shop.vue?vue&type=script&lang=ts\"\nimport style0 from \"./Shop.vue?vue&type=style&index=0&id=08eb49ec&prod&lang=scss&scoped=true\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"08eb49ec\",\n null\n \n)\n\nexport default component.exports","var Browser = (function () {\n function Browser() {\n this.firefox = false;\n this.ie = false;\n this.edge = false;\n this.newEdge = false;\n this.weChat = false;\n }\n return Browser;\n}());\nvar Env = (function () {\n function Env() {\n this.browser = new Browser();\n this.node = false;\n this.wxa = false;\n this.worker = false;\n this.svgSupported = false;\n this.touchEventsSupported = false;\n this.pointerEventsSupported = false;\n this.domSupported = false;\n this.transformSupported = false;\n this.transform3dSupported = false;\n this.hasGlobalWindow = typeof window !== 'undefined';\n }\n return Env;\n}());\nvar env = new Env();\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n env.wxa = true;\n env.touchEventsSupported = true;\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n env.worker = true;\n}\nelse if (typeof navigator === 'undefined'\n || navigator.userAgent.indexOf('Node.js') === 0) {\n env.node = true;\n env.svgSupported = true;\n}\nelse {\n detect(navigator.userAgent, env);\n}\nfunction detect(ua, env) {\n var browser = env.browser;\n var firefox = ua.match(/Firefox\\/([\\d.]+)/);\n var ie = ua.match(/MSIE\\s([\\d.]+)/)\n || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n var edge = ua.match(/Edge?\\/([\\d.]+)/);\n var weChat = (/micromessenger/i).test(ua);\n if (firefox) {\n browser.firefox = true;\n browser.version = firefox[1];\n }\n if (ie) {\n browser.ie = true;\n browser.version = ie[1];\n }\n if (edge) {\n browser.edge = true;\n browser.version = edge[1];\n browser.newEdge = +edge[1].split('.')[0] > 18;\n }\n if (weChat) {\n browser.weChat = true;\n }\n env.svgSupported = typeof SVGRect !== 'undefined';\n env.touchEventsSupported = 'ontouchstart' in window && !browser.ie && !browser.edge;\n env.pointerEventsSupported = 'onpointerdown' in window\n && (browser.edge || (browser.ie && +browser.version >= 11));\n env.domSupported = typeof document !== 'undefined';\n var style = document.documentElement.style;\n env.transform3dSupported = ((browser.ie && 'transition' in style)\n || browser.edge\n || (('WebKitCSSMatrix' in window) && ('m11' in new WebKitCSSMatrix()))\n || 'MozPerspective' in style)\n && !('OTransition' in style);\n env.transformSupported = env.transform3dSupported\n || (browser.ie && +browser.version >= 9);\n}\nexport default env;\n","import LRU from '../core/LRU.js';\nimport { extend, isGradientObject, isString, map } from '../core/util.js';\nvar kCSSColorTable = {\n 'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n 'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n 'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n 'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n 'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n 'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n 'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n 'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n 'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n 'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n 'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n 'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n 'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n 'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n 'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n 'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n 'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n 'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n 'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n 'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n 'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n 'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n 'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n 'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n 'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n 'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n 'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n 'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n 'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n 'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n 'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n 'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n 'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n 'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n 'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n 'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n 'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n 'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n 'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n 'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n 'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n 'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n 'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n 'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n 'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n 'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n 'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n 'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n 'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n 'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n 'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n 'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n 'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n 'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n 'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n 'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n 'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n 'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n 'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n 'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n 'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n 'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n 'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n 'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n 'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n 'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n 'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n 'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n 'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n 'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n 'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n 'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n 'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n 'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\nfunction clampCssByte(i) {\n i = Math.round(i);\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\nfunction clampCssAngle(i) {\n i = Math.round(i);\n return i < 0 ? 0 : i > 360 ? 360 : i;\n}\nfunction clampCssFloat(f) {\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\nfunction parseCssInt(val) {\n var str = val;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssByte(parseFloat(str) / 100 * 255);\n }\n return clampCssByte(parseInt(str, 10));\n}\nfunction parseCssFloat(val) {\n var str = val;\n if (str.length && str.charAt(str.length - 1) === '%') {\n return clampCssFloat(parseFloat(str) / 100);\n }\n return clampCssFloat(parseFloat(str));\n}\nfunction cssHueToRgb(m1, m2, h) {\n if (h < 0) {\n h += 1;\n }\n else if (h > 1) {\n h -= 1;\n }\n if (h * 6 < 1) {\n return m1 + (m2 - m1) * h * 6;\n }\n if (h * 2 < 1) {\n return m2;\n }\n if (h * 3 < 2) {\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n }\n return m1;\n}\nfunction lerpNumber(a, b, p) {\n return a + (b - a) * p;\n}\nfunction setRgba(out, r, g, b, a) {\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n}\nfunction copyRgba(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}\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\nfunction putToCache(colorStr, rgbaArr) {\n if (lastRemovedArr) {\n copyRgba(lastRemovedArr, rgbaArr);\n }\n lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\nexport function parse(colorStr, rgbaArr) {\n if (!colorStr) {\n return;\n }\n rgbaArr = rgbaArr || [];\n var cached = colorCache.get(colorStr);\n if (cached) {\n return copyRgba(rgbaArr, cached);\n }\n colorStr = colorStr + '';\n var str = colorStr.replace(/ /g, '').toLowerCase();\n if (str in kCSSColorTable) {\n copyRgba(rgbaArr, kCSSColorTable[str]);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n var strLen = str.length;\n if (str.charAt(0) === '#') {\n if (strLen === 4 || strLen === 5) {\n var iv = parseInt(str.slice(1, 4), 16);\n if (!(iv >= 0 && iv <= 0xfff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr, ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8), (iv & 0xf0) | ((iv & 0xf0) >> 4), (iv & 0xf) | ((iv & 0xf) << 4), strLen === 5 ? parseInt(str.slice(4), 16) / 0xf : 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n else if (strLen === 7 || strLen === 9) {\n var iv = parseInt(str.slice(1, 7), 16);\n if (!(iv >= 0 && iv <= 0xffffff)) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n setRgba(rgbaArr, (iv & 0xff0000) >> 16, (iv & 0xff00) >> 8, iv & 0xff, strLen === 9 ? parseInt(str.slice(7), 16) / 0xff : 1);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n return;\n }\n var op = str.indexOf('(');\n var ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === strLen) {\n var fname = str.substr(0, op);\n var params = str.substr(op + 1, ep - (op + 1)).split(',');\n var alpha = 1;\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) {\n return params.length === 3\n ? setRgba(rgbaArr, +params[0], +params[1], +params[2], 1)\n : setRgba(rgbaArr, 0, 0, 0, 1);\n }\n alpha = parseCssFloat(params.pop());\n case 'rgb':\n if (params.length >= 3) {\n setRgba(rgbaArr, parseCssInt(params[0]), parseCssInt(params[1]), parseCssInt(params[2]), params.length === 3 ? alpha : parseCssFloat(params[3]));\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n }\n else {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n case 'hsla':\n if (params.length !== 4) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n params[3] = parseCssFloat(params[3]);\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n case 'hsl':\n if (params.length !== 3) {\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n }\n hsla2rgba(params, rgbaArr);\n putToCache(colorStr, rgbaArr);\n return rgbaArr;\n default:\n return;\n }\n }\n setRgba(rgbaArr, 0, 0, 0, 1);\n return;\n}\nfunction hsla2rgba(hsla, rgba) {\n var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360;\n var s = parseCssFloat(hsla[1]);\n var l = parseCssFloat(hsla[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n rgba = rgba || [];\n setRgba(rgba, clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255), clampCssByte(cssHueToRgb(m1, m2, h) * 255), clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255), 1);\n if (hsla.length === 4) {\n rgba[3] = hsla[3];\n }\n return rgba;\n}\nfunction rgba2hsla(rgba) {\n if (!rgba) {\n return;\n }\n var R = rgba[0] / 255;\n var G = rgba[1] / 255;\n var B = rgba[2] / 255;\n var vMin = Math.min(R, G, B);\n var vMax = Math.max(R, G, B);\n var delta = vMax - vMin;\n var L = (vMax + vMin) / 2;\n var H;\n var S;\n if (delta === 0) {\n H = 0;\n S = 0;\n }\n else {\n if (L < 0.5) {\n S = delta / (vMax + vMin);\n }\n else {\n S = delta / (2 - vMax - vMin);\n }\n var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n if (R === vMax) {\n H = deltaB - deltaG;\n }\n else if (G === vMax) {\n H = (1 / 3) + deltaR - deltaB;\n }\n else if (B === vMax) {\n H = (2 / 3) + deltaG - deltaR;\n }\n if (H < 0) {\n H += 1;\n }\n if (H > 1) {\n H -= 1;\n }\n }\n var hsla = [H * 360, S, L];\n if (rgba[3] != null) {\n hsla.push(rgba[3]);\n }\n return hsla;\n}\nexport function lift(color, level) {\n var colorArr = parse(color);\n if (colorArr) {\n for (var i = 0; i < 3; i++) {\n if (level < 0) {\n colorArr[i] = colorArr[i] * (1 - level) | 0;\n }\n else {\n colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n }\n if (colorArr[i] > 255) {\n colorArr[i] = 255;\n }\n else if (colorArr[i] < 0) {\n colorArr[i] = 0;\n }\n }\n return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n }\n}\nexport function toHex(color) {\n var colorArr = parse(color);\n if (colorArr) {\n return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n }\n}\nexport function fastLerp(normalizedValue, colors, out) {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n out = out || [];\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = colors[leftIndex];\n var rightColor = colors[rightIndex];\n var dv = value - leftIndex;\n out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n return out;\n}\nexport var fastMapToColor = fastLerp;\nexport function lerp(normalizedValue, colors, fullOutput) {\n if (!(colors && colors.length)\n || !(normalizedValue >= 0 && normalizedValue <= 1)) {\n return;\n }\n var value = normalizedValue * (colors.length - 1);\n var leftIndex = Math.floor(value);\n var rightIndex = Math.ceil(value);\n var leftColor = parse(colors[leftIndex]);\n var rightColor = parse(colors[rightIndex]);\n var dv = value - leftIndex;\n var color = stringify([\n clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n ], 'rgba');\n return fullOutput\n ? {\n color: color,\n leftIndex: leftIndex,\n rightIndex: rightIndex,\n value: value\n }\n : color;\n}\nexport var mapToColor = lerp;\nexport function modifyHSL(color, h, s, l) {\n var colorArr = parse(color);\n if (color) {\n colorArr = rgba2hsla(colorArr);\n h != null && (colorArr[0] = clampCssAngle(h));\n s != null && (colorArr[1] = parseCssFloat(s));\n l != null && (colorArr[2] = parseCssFloat(l));\n return stringify(hsla2rgba(colorArr), 'rgba');\n }\n}\nexport function modifyAlpha(color, alpha) {\n var colorArr = parse(color);\n if (colorArr && alpha != null) {\n colorArr[3] = clampCssFloat(alpha);\n return stringify(colorArr, 'rgba');\n }\n}\nexport function stringify(arrColor, type) {\n if (!arrColor || !arrColor.length) {\n return;\n }\n var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n colorStr += ',' + arrColor[3];\n }\n return type + '(' + colorStr + ')';\n}\nexport function lum(color, backgroundLum) {\n var arr = parse(color);\n return arr\n ? (0.299 * arr[0] + 0.587 * arr[1] + 0.114 * arr[2]) * arr[3] / 255\n + (1 - arr[3]) * backgroundLum\n : 0;\n}\nexport function random() {\n return stringify([\n Math.round(Math.random() * 255),\n Math.round(Math.random() * 255),\n Math.round(Math.random() * 255)\n ], 'rgb');\n}\nvar liftedColorCache = new LRU(100);\nexport function liftColor(color) {\n if (isString(color)) {\n var liftedColor = liftedColorCache.get(color);\n if (!liftedColor) {\n liftedColor = lift(color, -0.1);\n liftedColorCache.put(color, liftedColor);\n }\n return liftedColor;\n }\n else if (isGradientObject(color)) {\n var ret = extend({}, color);\n ret.colorStops = map(color.colorStops, function (stop) { return ({\n offset: stop.offset,\n color: lift(stop.color, -0.1)\n }); });\n return ret;\n }\n return color;\n}\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sale.vue?vue&type=style&index=0&id=78367bd6&prod&lang=scss&scoped=true\"","import { platformApi } from './platform.js';\nvar BUILTIN_OBJECT = reduce([\n 'Function',\n 'RegExp',\n 'Date',\n 'Error',\n 'CanvasGradient',\n 'CanvasPattern',\n 'Image',\n 'Canvas'\n], function (obj, val) {\n obj['[object ' + val + ']'] = true;\n return obj;\n}, {});\nvar TYPED_ARRAY = reduce([\n 'Int8',\n 'Uint8',\n 'Uint8Clamped',\n 'Int16',\n 'Uint16',\n 'Int32',\n 'Uint32',\n 'Float32',\n 'Float64'\n], function (obj, val) {\n obj['[object ' + val + 'Array]'] = true;\n return obj;\n}, {});\nvar objToString = Object.prototype.toString;\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar ctorFunction = function () { }.constructor;\nvar protoFunction = ctorFunction ? ctorFunction.prototype : null;\nvar protoKey = '__proto__';\nvar idStart = 0x0907;\nexport function guid() {\n return idStart++;\n}\nexport function logError() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n if (typeof console !== 'undefined') {\n console.error.apply(console, args);\n }\n}\nexport function clone(source) {\n if (source == null || typeof source !== 'object') {\n return source;\n }\n var result = source;\n var typeStr = objToString.call(source);\n if (typeStr === '[object Array]') {\n if (!isPrimitive(source)) {\n result = [];\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = clone(source[i]);\n }\n }\n }\n else if (TYPED_ARRAY[typeStr]) {\n if (!isPrimitive(source)) {\n var Ctor = source.constructor;\n if (Ctor.from) {\n result = Ctor.from(source);\n }\n else {\n result = new Ctor(source.length);\n for (var i = 0, len = source.length; i < len; i++) {\n result[i] = source[i];\n }\n }\n }\n }\n else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n result = {};\n for (var key in source) {\n if (source.hasOwnProperty(key) && key !== protoKey) {\n result[key] = clone(source[key]);\n }\n }\n }\n return result;\n}\nexport function merge(target, source, overwrite) {\n if (!isObject(source) || !isObject(target)) {\n return overwrite ? clone(source) : target;\n }\n for (var key in source) {\n if (source.hasOwnProperty(key) && key !== protoKey) {\n var targetProp = target[key];\n var sourceProp = source[key];\n if (isObject(sourceProp)\n && isObject(targetProp)\n && !isArray(sourceProp)\n && !isArray(targetProp)\n && !isDom(sourceProp)\n && !isDom(targetProp)\n && !isBuiltInObject(sourceProp)\n && !isBuiltInObject(targetProp)\n && !isPrimitive(sourceProp)\n && !isPrimitive(targetProp)) {\n merge(targetProp, sourceProp, overwrite);\n }\n else if (overwrite || !(key in target)) {\n target[key] = clone(source[key]);\n }\n }\n }\n return target;\n}\nexport function mergeAll(targetAndSources, overwrite) {\n var result = targetAndSources[0];\n for (var i = 1, len = targetAndSources.length; i < len; i++) {\n result = merge(result, targetAndSources[i], overwrite);\n }\n return result;\n}\nexport function extend(target, source) {\n if (Object.assign) {\n Object.assign(target, source);\n }\n else {\n for (var key in source) {\n if (source.hasOwnProperty(key) && key !== protoKey) {\n target[key] = source[key];\n }\n }\n }\n return target;\n}\nexport function defaults(target, source, overlay) {\n var keysArr = keys(source);\n for (var i = 0; i < keysArr.length; i++) {\n var key = keysArr[i];\n if ((overlay ? source[key] != null : target[key] == null)) {\n target[key] = source[key];\n }\n }\n return target;\n}\nexport var createCanvas = platformApi.createCanvas;\nexport function indexOf(array, value) {\n if (array) {\n if (array.indexOf) {\n return array.indexOf(value);\n }\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n }\n return -1;\n}\nexport function inherits(clazz, baseClazz) {\n var clazzPrototype = clazz.prototype;\n function F() { }\n F.prototype = baseClazz.prototype;\n clazz.prototype = new F();\n for (var prop in clazzPrototype) {\n if (clazzPrototype.hasOwnProperty(prop)) {\n clazz.prototype[prop] = clazzPrototype[prop];\n }\n }\n clazz.prototype.constructor = clazz;\n clazz.superClass = baseClazz;\n}\nexport function mixin(target, source, override) {\n target = 'prototype' in target ? target.prototype : target;\n source = 'prototype' in source ? source.prototype : source;\n if (Object.getOwnPropertyNames) {\n var keyList = Object.getOwnPropertyNames(source);\n for (var i = 0; i < keyList.length; i++) {\n var key = keyList[i];\n if (key !== 'constructor') {\n if ((override ? source[key] != null : target[key] == null)) {\n target[key] = source[key];\n }\n }\n }\n }\n else {\n defaults(target, source, override);\n }\n}\nexport function isArrayLike(data) {\n if (!data) {\n return false;\n }\n if (typeof data === 'string') {\n return false;\n }\n return typeof data.length === 'number';\n}\nexport function each(arr, cb, context) {\n if (!(arr && cb)) {\n return;\n }\n if (arr.forEach && arr.forEach === nativeForEach) {\n arr.forEach(cb, context);\n }\n else if (arr.length === +arr.length) {\n for (var i = 0, len = arr.length; i < len; i++) {\n cb.call(context, arr[i], i, arr);\n }\n }\n else {\n for (var key in arr) {\n if (arr.hasOwnProperty(key)) {\n cb.call(context, arr[key], key, arr);\n }\n }\n }\n}\nexport function map(arr, cb, context) {\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.map && arr.map === nativeMap) {\n return arr.map(cb, context);\n }\n else {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n result.push(cb.call(context, arr[i], i, arr));\n }\n return result;\n }\n}\nexport function reduce(arr, cb, memo, context) {\n if (!(arr && cb)) {\n return;\n }\n for (var i = 0, len = arr.length; i < len; i++) {\n memo = cb.call(context, memo, arr[i], i, arr);\n }\n return memo;\n}\nexport function filter(arr, cb, context) {\n if (!arr) {\n return [];\n }\n if (!cb) {\n return slice(arr);\n }\n if (arr.filter && arr.filter === nativeFilter) {\n return arr.filter(cb, context);\n }\n else {\n var result = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n result.push(arr[i]);\n }\n }\n return result;\n }\n}\nexport function find(arr, cb, context) {\n if (!(arr && cb)) {\n return;\n }\n for (var i = 0, len = arr.length; i < len; i++) {\n if (cb.call(context, arr[i], i, arr)) {\n return arr[i];\n }\n }\n}\nexport function keys(obj) {\n if (!obj) {\n return [];\n }\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keyList = [];\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n keyList.push(key);\n }\n }\n return keyList;\n}\nfunction bindPolyfill(func, context) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n return function () {\n return func.apply(context, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport var bind = (protoFunction && isFunction(protoFunction.bind))\n ? protoFunction.call.bind(protoFunction.bind)\n : bindPolyfill;\nfunction curry(func) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return function () {\n return func.apply(this, args.concat(nativeSlice.call(arguments)));\n };\n}\nexport { curry };\nexport function isArray(value) {\n if (Array.isArray) {\n return Array.isArray(value);\n }\n return objToString.call(value) === '[object Array]';\n}\nexport function isFunction(value) {\n return typeof value === 'function';\n}\nexport function isString(value) {\n return typeof value === 'string';\n}\nexport function isStringSafe(value) {\n return objToString.call(value) === '[object String]';\n}\nexport function isNumber(value) {\n return typeof value === 'number';\n}\nexport function isObject(value) {\n var type = typeof value;\n return type === 'function' || (!!value && type === 'object');\n}\nexport function isBuiltInObject(value) {\n return !!BUILTIN_OBJECT[objToString.call(value)];\n}\nexport function isTypedArray(value) {\n return !!TYPED_ARRAY[objToString.call(value)];\n}\nexport function isDom(value) {\n return typeof value === 'object'\n && typeof value.nodeType === 'number'\n && typeof value.ownerDocument === 'object';\n}\nexport function isGradientObject(value) {\n return value.colorStops != null;\n}\nexport function isImagePatternObject(value) {\n return value.image != null;\n}\nexport function isRegExp(value) {\n return objToString.call(value) === '[object RegExp]';\n}\nexport function eqNaN(value) {\n return value !== value;\n}\nexport function retrieve() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n for (var i = 0, len = args.length; i < len; i++) {\n if (args[i] != null) {\n return args[i];\n }\n }\n}\nexport function retrieve2(value0, value1) {\n return value0 != null\n ? value0\n : value1;\n}\nexport function retrieve3(value0, value1, value2) {\n return value0 != null\n ? value0\n : value1 != null\n ? value1\n : value2;\n}\nexport function slice(arr) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return nativeSlice.apply(arr, args);\n}\nexport function normalizeCssArray(val) {\n if (typeof (val) === 'number') {\n return [val, val, val, val];\n }\n var len = val.length;\n if (len === 2) {\n return [val[0], val[1], val[0], val[1]];\n }\n else if (len === 3) {\n return [val[0], val[1], val[2], val[1]];\n }\n return val;\n}\nexport function assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n}\nexport function trim(str) {\n if (str == null) {\n return null;\n }\n else if (typeof str.trim === 'function') {\n return str.trim();\n }\n else {\n return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n }\n}\nvar primitiveKey = '__ec_primitive__';\nexport function setAsPrimitive(obj) {\n obj[primitiveKey] = true;\n}\nexport function isPrimitive(obj) {\n return obj[primitiveKey];\n}\nvar MapPolyfill = (function () {\n function MapPolyfill() {\n this.data = {};\n }\n MapPolyfill.prototype[\"delete\"] = function (key) {\n var existed = this.has(key);\n if (existed) {\n delete this.data[key];\n }\n return existed;\n };\n MapPolyfill.prototype.has = function (key) {\n return this.data.hasOwnProperty(key);\n };\n MapPolyfill.prototype.get = function (key) {\n return this.data[key];\n };\n MapPolyfill.prototype.set = function (key, value) {\n this.data[key] = value;\n return this;\n };\n MapPolyfill.prototype.keys = function () {\n return keys(this.data);\n };\n MapPolyfill.prototype.forEach = function (callback) {\n var data = this.data;\n for (var key in data) {\n if (data.hasOwnProperty(key)) {\n callback(data[key], key);\n }\n }\n };\n return MapPolyfill;\n}());\nvar isNativeMapSupported = typeof Map === 'function';\nfunction maybeNativeMap() {\n return (isNativeMapSupported ? new Map() : new MapPolyfill());\n}\nvar HashMap = (function () {\n function HashMap(obj) {\n var isArr = isArray(obj);\n this.data = maybeNativeMap();\n var thisMap = this;\n (obj instanceof HashMap)\n ? obj.each(visit)\n : (obj && each(obj, visit));\n function visit(value, key) {\n isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n }\n }\n HashMap.prototype.hasKey = function (key) {\n return this.data.has(key);\n };\n HashMap.prototype.get = function (key) {\n return this.data.get(key);\n };\n HashMap.prototype.set = function (key, value) {\n this.data.set(key, value);\n return value;\n };\n HashMap.prototype.each = function (cb, context) {\n this.data.forEach(function (value, key) {\n cb.call(context, value, key);\n });\n };\n HashMap.prototype.keys = function () {\n var keys = this.data.keys();\n return isNativeMapSupported\n ? Array.from(keys)\n : keys;\n };\n HashMap.prototype.removeKey = function (key) {\n this.data[\"delete\"](key);\n };\n return HashMap;\n}());\nexport { HashMap };\nexport function createHashMap(obj) {\n return new HashMap(obj);\n}\nexport function concatArray(a, b) {\n var newArray = new a.constructor(a.length + b.length);\n for (var i = 0; i < a.length; i++) {\n newArray[i] = a[i];\n }\n var offset = a.length;\n for (var i = 0; i < b.length; i++) {\n newArray[i + offset] = b[i];\n }\n return newArray;\n}\nexport function createObject(proto, properties) {\n var obj;\n if (Object.create) {\n obj = Object.create(proto);\n }\n else {\n var StyleCtor = function () { };\n StyleCtor.prototype = proto;\n obj = new StyleCtor();\n }\n if (properties) {\n extend(obj, properties);\n }\n return obj;\n}\nexport function disableUserSelect(dom) {\n var domStyle = dom.style;\n domStyle.webkitUserSelect = 'none';\n domStyle.userSelect = 'none';\n domStyle.webkitTapHighlightColor = 'rgba(0,0,0,0)';\n domStyle['-webkit-touch-callout'] = 'none';\n}\nexport function hasOwn(own, prop) {\n return own.hasOwnProperty(prop);\n}\nexport function noop() { }\nexport var RADIAN_TO_DEGREE = 180 / Math.PI;\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Shop.vue?vue&type=style&index=0&id=08eb49ec&prod&lang=scss&scoped=true\"","export var DEFAULT_FONT_SIZE = 12;\nexport var DEFAULT_FONT_FAMILY = 'sans-serif';\nexport var DEFAULT_FONT = DEFAULT_FONT_SIZE + \"px \" + DEFAULT_FONT_FAMILY;\nvar OFFSET = 20;\nvar SCALE = 100;\nvar defaultWidthMapStr = \"007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\\\\\WQb\\\\0FWLg\\\\bWb\\\\WQ\\\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\\\FFF5.5N\";\nfunction getTextWidthMap(mapStr) {\n var map = {};\n if (typeof JSON === 'undefined') {\n return map;\n }\n for (var i = 0; i < mapStr.length; i++) {\n var char = String.fromCharCode(i + 32);\n var size = (mapStr.charCodeAt(i) - OFFSET) / SCALE;\n map[char] = size;\n }\n return map;\n}\nexport var DEFAULT_TEXT_WIDTH_MAP = getTextWidthMap(defaultWidthMapStr);\nexport var platformApi = {\n createCanvas: function () {\n return typeof document !== 'undefined'\n && document.createElement('canvas');\n },\n measureText: (function () {\n var _ctx;\n var _cachedFont;\n return function (text, font) {\n if (!_ctx) {\n var canvas = platformApi.createCanvas();\n _ctx = canvas && canvas.getContext('2d');\n }\n if (_ctx) {\n if (_cachedFont !== font) {\n _cachedFont = _ctx.font = font || DEFAULT_FONT;\n }\n return _ctx.measureText(text);\n }\n else {\n text = text || '';\n font = font || DEFAULT_FONT;\n var res = /(\\d+)px/.exec(font);\n var fontSize = res && +res[1] || DEFAULT_FONT_SIZE;\n var width = 0;\n if (font.indexOf('mono') >= 0) {\n width = fontSize * text.length;\n }\n else {\n for (var i = 0; i < text.length; i++) {\n var preCalcWidth = DEFAULT_TEXT_WIDTH_MAP[text[i]];\n width += preCalcWidth == null ? fontSize : (preCalcWidth * fontSize);\n }\n }\n return { width: width };\n }\n };\n })(),\n loadImage: function (src, onload, onerror) {\n var image = new Image();\n image.onload = onload;\n image.onerror = onerror;\n image.src = src;\n return image;\n }\n};\nexport function setPlatformAPI(newPlatformApis) {\n for (var key in platformApi) {\n if (newPlatformApis[key]) {\n platformApi[key] = newPlatformApis[key];\n }\n }\n}\n","import { RADIAN_TO_DEGREE, retrieve2, logError, isFunction } from '../core/util.js';\nimport { parse } from '../tool/color.js';\nimport env from '../core/env.js';\nvar mathRound = Math.round;\nexport function normalizeColor(color) {\n var opacity;\n if (!color || color === 'transparent') {\n color = 'none';\n }\n else if (typeof color === 'string' && color.indexOf('rgba') > -1) {\n var arr = parse(color);\n if (arr) {\n color = 'rgb(' + arr[0] + ',' + arr[1] + ',' + arr[2] + ')';\n opacity = arr[3];\n }\n }\n return {\n color: color,\n opacity: opacity == null ? 1 : opacity\n };\n}\nvar EPSILON = 1e-4;\nexport function isAroundZero(transform) {\n return transform < EPSILON && transform > -EPSILON;\n}\nexport function round3(transform) {\n return mathRound(transform * 1e3) / 1e3;\n}\nexport function round4(transform) {\n return mathRound(transform * 1e4) / 1e4;\n}\nexport function round1(transform) {\n return mathRound(transform * 10) / 10;\n}\nexport function getMatrixStr(m) {\n return 'matrix('\n + round3(m[0]) + ','\n + round3(m[1]) + ','\n + round3(m[2]) + ','\n + round3(m[3]) + ','\n + round4(m[4]) + ','\n + round4(m[5])\n + ')';\n}\nexport var TEXT_ALIGN_TO_ANCHOR = {\n left: 'start',\n right: 'end',\n center: 'middle',\n middle: 'middle'\n};\nexport function adjustTextY(y, lineHeight, textBaseline) {\n if (textBaseline === 'top') {\n y += lineHeight / 2;\n }\n else if (textBaseline === 'bottom') {\n y -= lineHeight / 2;\n }\n return y;\n}\nexport function hasShadow(style) {\n return style\n && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY);\n}\nexport function getShadowKey(displayable) {\n var style = displayable.style;\n var globalScale = displayable.getGlobalScale();\n return [\n style.shadowColor,\n (style.shadowBlur || 0).toFixed(2),\n (style.shadowOffsetX || 0).toFixed(2),\n (style.shadowOffsetY || 0).toFixed(2),\n globalScale[0],\n globalScale[1]\n ].join(',');\n}\nexport function getClipPathsKey(clipPaths) {\n var key = [];\n if (clipPaths) {\n for (var i = 0; i < clipPaths.length; i++) {\n var clipPath = clipPaths[i];\n key.push(clipPath.id);\n }\n }\n return key.join(',');\n}\nexport function isImagePattern(val) {\n return val && (!!val.image);\n}\nexport function isSVGPattern(val) {\n return val && (!!val.svgElement);\n}\nexport function isPattern(val) {\n return isImagePattern(val) || isSVGPattern(val);\n}\nexport function isLinearGradient(val) {\n return val.type === 'linear';\n}\nexport function isRadialGradient(val) {\n return val.type === 'radial';\n}\nexport function isGradient(val) {\n return val && (val.type === 'linear'\n || val.type === 'radial');\n}\nexport function getIdURL(id) {\n return \"url(#\" + id + \")\";\n}\nexport function getPathPrecision(el) {\n var scale = el.getGlobalScale();\n var size = Math.max(scale[0], scale[1]);\n return Math.max(Math.ceil(Math.log(size) / Math.log(10)), 1);\n}\nexport function getSRTTransformString(transform) {\n var x = transform.x || 0;\n var y = transform.y || 0;\n var rotation = (transform.rotation || 0) * RADIAN_TO_DEGREE;\n var scaleX = retrieve2(transform.scaleX, 1);\n var scaleY = retrieve2(transform.scaleY, 1);\n var skewX = transform.skewX || 0;\n var skewY = transform.skewY || 0;\n var res = [];\n if (x || y) {\n res.push(\"translate(\" + x + \"px,\" + y + \"px)\");\n }\n if (rotation) {\n res.push(\"rotate(\" + rotation + \")\");\n }\n if (scaleX !== 1 || scaleY !== 1) {\n res.push(\"scale(\" + scaleX + \",\" + scaleY + \")\");\n }\n if (skewX || skewY) {\n res.push(\"skew(\" + mathRound(skewX * RADIAN_TO_DEGREE) + \"deg, \" + mathRound(skewY * RADIAN_TO_DEGREE) + \"deg)\");\n }\n return res.join(' ');\n}\nexport var encodeBase64 = (function () {\n if (env.hasGlobalWindow && isFunction(window.btoa)) {\n return function (str) {\n return window.btoa(unescape(encodeURIComponent(str)));\n };\n }\n if (typeof Buffer !== 'undefined') {\n return function (str) {\n return Buffer.from(str).toString('base64');\n };\n }\n return function (str) {\n if (process.env.NODE_ENV !== 'production') {\n logError('Base64 isn\\'t natively supported in the current environment.');\n }\n return null;\n };\n})();\n","var Entry = (function () {\n function Entry(val) {\n this.value = val;\n }\n return Entry;\n}());\nexport { Entry };\nvar LinkedList = (function () {\n function LinkedList() {\n this._len = 0;\n }\n LinkedList.prototype.insert = function (val) {\n var entry = new Entry(val);\n this.insertEntry(entry);\n return entry;\n };\n LinkedList.prototype.insertEntry = function (entry) {\n if (!this.head) {\n this.head = this.tail = entry;\n }\n else {\n this.tail.next = entry;\n entry.prev = this.tail;\n entry.next = null;\n this.tail = entry;\n }\n this._len++;\n };\n LinkedList.prototype.remove = function (entry) {\n var prev = entry.prev;\n var next = entry.next;\n if (prev) {\n prev.next = next;\n }\n else {\n this.head = next;\n }\n if (next) {\n next.prev = prev;\n }\n else {\n this.tail = prev;\n }\n entry.next = entry.prev = null;\n this._len--;\n };\n LinkedList.prototype.len = function () {\n return this._len;\n };\n LinkedList.prototype.clear = function () {\n this.head = this.tail = null;\n this._len = 0;\n };\n return LinkedList;\n}());\nexport { LinkedList };\nvar LRU = (function () {\n function LRU(maxSize) {\n this._list = new LinkedList();\n this._maxSize = 10;\n this._map = {};\n this._maxSize = maxSize;\n }\n LRU.prototype.put = function (key, value) {\n var list = this._list;\n var map = this._map;\n var removed = null;\n if (map[key] == null) {\n var len = list.len();\n var entry = this._lastRemovedEntry;\n if (len >= this._maxSize && len > 0) {\n var leastUsedEntry = list.head;\n list.remove(leastUsedEntry);\n delete map[leastUsedEntry.key];\n removed = leastUsedEntry.value;\n this._lastRemovedEntry = leastUsedEntry;\n }\n if (entry) {\n entry.value = value;\n }\n else {\n entry = new Entry(value);\n }\n entry.key = key;\n list.insertEntry(entry);\n map[key] = entry;\n }\n return removed;\n };\n LRU.prototype.get = function (key) {\n var entry = this._map[key];\n var list = this._list;\n if (entry != null) {\n if (entry !== list.tail) {\n list.remove(entry);\n list.insertEntry(entry);\n }\n return entry.value;\n }\n };\n LRU.prototype.clear = function () {\n this._list.clear();\n this._map = {};\n };\n LRU.prototype.len = function () {\n return this._list.len();\n };\n return LRU;\n}());\nexport default LRU;\n"],"sourceRoot":""}