{"version":3,"sources":["../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/array.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartDatasource.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/node.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartDataModel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/palettes.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartController.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/data/chartDataPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/fontPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/legend/legendPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/shadowPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/barSeriesPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/axis/axisTicksPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/bbox.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/matrix.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/group.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/selection.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/object.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/shape.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/line.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/ticks.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/angle.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/text.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/polyRoots.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/intersection.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/path2D.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/path.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/number.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/arc.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/axis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/chartAxis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/rect.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/axis/axisPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/canvas/hdpiCanvas.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/scene.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/padding.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/marker.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/square.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/markerLabel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/observable.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/legend.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/series.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/circle.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/seriesMarker.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/cartesian/cartesianSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/chart.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scale/bandScale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/axis/categoryAxis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/layout/tree.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/axis/groupedCategoryAxis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/cartesianChart.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/polar/polarSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/polarChart.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/compare.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/constant.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/number.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/date.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/array.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/object.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/interpolate/value.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/bisect.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scale/continuousScale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/cartesian/lineSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scale/linearScale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/cartesian/scatterSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/cartesian/columnSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/label.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/polar/pieSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/series/cartesian/areaSeries.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/shape/sector.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/color.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/dropShadow.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/axis/numberAxis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/caption.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/groupedCategoryChart.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/cross.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/diamond.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/plus.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/marker/triangle.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/interval.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/millisecond.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/second.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/duration.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/minute.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/hour.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/day.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/week.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/month.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/year.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/utcDay.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/utcYear.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/utcWeek.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/format/locale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/time/format/defaultLocale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scale/timeScale.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chart/axis/timeAxis.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/chartBuilder.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/util/map.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/chartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/cartesian/cartesianChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/typeChecker.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/cartesian/scatterChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/markersPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/lineSeriesPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/calloutPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/pieSeriesPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/chart/paddingPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/chart/backgroundPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/chart/chartPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/areaSeriesPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/series/scatterSeriesPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/format/chartFormattingPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniChart.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniChartWithAxes.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniColumn.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniStackedColumn.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniNormalizedColumn.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniBar.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniStackedBar.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniNormalizedBar.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniDoughnut.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniPie.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/charts/scene/clipRect.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniLine.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniScatter.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniBubble.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniArea.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniStackedArea.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniCharts/miniNormalizedArea.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/miniChartsContainer.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/settings/chartSettingsPanel.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/tabbedChartMenu.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/menu/chartMenu.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/cartesian/barChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/cartesian/areaChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/cartesian/lineChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/polar/polarChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/polar/pieChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartProxies/polar/doughnutChartProxy.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/gridChartComp.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartService.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/chartAdaptor/chartComp/chartTranslator.js","../node_modules/@ag-grid-enterprise/charts/dist/es6/gridChartsModule.js","../node_modules/@ag-grid-enterprise/all-modules/dist/es6/main.js"],"names":["find","arr","predicate","i","ln","length","value","numericExtent","values","calculatedExtent","min","max","n","undefined","extent","a","b","Date","getTime","isFinite","sumPositiveValues","array","reduce","total","PointerEvents","__extends","extendStatics","d","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","_super","ChartDatasource","apply","getData","params","result","extractRowsFromGridRowModel","data","aggregateRowsByDimension","_this","extractedRowData","columnNames","groupNodeIndexes","groupsToRemove","modelLastRow","gridRowModel","getRowCount","numRows","endRow","Math","startRow","_loop_1","rowNode","this_1","getRow","dimensionCols","forEach","col","colId","column","columnController","getGridColumn","valueObject","valueService","getValue","grouping","valueString","toString","String","labels","getGroupLabels","multiCategories","v","slice","reverse","join","group","groupKey","DEFAULT_CATEGORY","valueCols","columnNamesArr","pivotKeys","getColDef","headerName","push","getId","toNumber","groupIndexesToRemove_1","filter","_1","index","includes","dataFromGrid","aggFunc","lastCol","last","lastColId","map","dataAggregated","currentMap","groupItem_1","__children","groupItem","dataToAgg","child","aggResult","assertRegistered","RowGroupingModule","aggregationStage","aggregateValues","initialLabel","level","parent","__spreadArrays","s","il","k","j","jl","ChartDataModel","call","dimensionColState","valueColState","detached","isPivotActive","isPivotMode","isPivotChart","pivotChart","getChartId","chartId","getValueColState","displayNameMapper","bind","getDimensionColState","getCellRanges","dimensionCellRange","valueCellRange","getChartType","chartType","isSuppressChartRanges","suppressChartRanges","isDetached","getSelectedValueColState","cs","selected","getSelectedValueCols","getSelectedDimension","getColDisplayName","getDisplayNameForColumn","referenceCellRange","cellRange","generateId","init","datasource","wireBean","updateCellRanges","updatedColState","_a","getAllChartColumns","allColsFromRanges","getAllColumnsFromRanges","updateColumnState","setDimensionCellRange","setValueCellRange","resetColumnState","updateData","chartData","setChartType","isCurrentMultiCategory","isMultiCategoryChart","isGrouping","usingTreeData","gridOptionsWrapper","isTreeData","groupedCols","getRowGroupColumns","groupActive","groupCols","getGroupDisplayColumns","groupDimensionSelected","getColId","some","id","toggleDetached","createCellRange","type","columns","_i","startColumn","DIMENSION","convertToSet","getAllDisplayedColumns","getRowIndexes","rangeController","range","getRangeStartRow","rowIndex","getRangeEndRow","displayedCols","Set","colDef","chartDataType","add","console","warn","isPrimary","isNumberCol","row","rowRenderer","getRowNode","rowPinned","cellValue","extractLeafData","allLeafChildren","childRow","displayName","Pie","Doughnut","Scatter","Bubble","random","substr","pivoting","allCols","isInitialising","hasSelectedDimension","order","has","defaultCategory","unshift","valueColumnsFromReferenceRange","shift","updatedCol","idsMatch","allColumns","orderedColIds","indexOf","reorderColState","sort","colsInRange","selectedDimensionColState","selectedValueCols","orderedColIds_1","VALUE","destroy","borneo","fills","strokes","material","pastel","bright","flat","Map","set","ChartController","model","paletteName","chartPaletteName","setChartRange","addDestroyableEventListener","eventService","EVENT_RANGE_SELECTION_CHANGED","event","updateForRangeChange","EVENT_COLUMN_MOVED","updateForGridChange","EVENT_COLUMN_PINNED","EVENT_COLUMN_VISIBLE","EVENT_MODEL_UPDATED","updateForDataChange","EVENT_CELL_VALUE_CHANGED","raiseChartUpdatedEvent","raiseChartRangeSelectionChangedEvent","updateForPanelChange","getChartModel","chartPalette","getPaletteName","chartOptions","chartProxy","getChartOptions","getCurrentCellRangeParams","getPalettes","customPalette","getCustomPalette","raiseChartOptionsChangedEvent","setChartPaletteName","palette","getColStateForMenu","isDefaultCategorySelected","selectedDimension","setCellRanges","detachChartRange","setChartProxy","getChartProxy","isActiveXYChart","cellRanges","firstCellRange","rowStartIndex","rowStartPinned","rowEndIndex","rowEndPinned","concat","freeze","EVENT_CHART_UPDATED","dispatchEvent","EVENT_CHART_OPTIONS_CHANGED","EVENT_CHART_RANGE_SELECTION_CHANGED","api","gridApi","columnApi","ChartDataPanel","chartController","TEMPLATE","columnComps","updatePanels","clearComponents","currentChartType","colIds","areEqual","keys","get","setValue","getSeriesLabel_1","generateGetSeriesLabel","setLabel","createCategoriesGroupComponent","createSeriesGroupComponent","addComponent","component","eDiv","document","createElement","appendChild","getGui","addChangeListener","columnState","EVENT_CHANGED","categoriesGroupComp","title","getCategoryGroupTitle","enabled","suppressEnabledCheckbox","suppressOpenCloseIcons","inputName","getCompId","comp","wireDependentBean","escape","setInputName","addItem","seriesGroupComp","getSeriesGroupTitle","pairedModeToggle","chartProxy_1","chartTranslator","translate","setLabelAlignment","setLabelWidth","setInputWidth","getSeriesOption","onValueChange","newValue","setSeriesOption","getSeriesLabel","addCssClass","label","addDragHandle","dropTarget","getContainer","onDragging","isInterestedIn","dragAndDropService","addDropTarget","eDragHandle","createIconNoSpan","insertAdjacentElement","dragSource","ChartPanel","eElement","dragItemName","getDragItem","onDragStopped","insertIndex","addDragSource","addDestroyFunc","removeDragSource","isBubble","isInPairedMode","selectedValuesCount","indexToAxisLabel","axisLabel","escapedLabel","clearElement","clear","draggingEvent","checkInsertIndex","column_1","dragItem","state","missing","vDirection","newIndex","mouseEvent","rect","getBoundingClientRect","clientY","Down","top","bottom","changed","FontPanel","activeComps","setTemplate","initGroup","initFontFamilySelect","initFontWeightStyleSelect","initFontSizeSelect","initFontColorPicker","addCompToPanel","fontGroup","setEnabled","setTitle","name","hideEnabledCheckbox","hideOpenCloseIcons","onEnableChange","families","family","initialFont","initialValue","valueIndex","f","toLowerCase","capitalisedFontValue","capitalise","options","text","familySelect","addOptions","setFont","sizes","size","sizeSelect","parseInt","_b","weight","_c","style","weightStyles","selectedOption","x","ws","weightStyleSelect","selectedWeightStyle","colorPicker","color","newColor","destroyActiveComps","removeFromParent","LegendPanel","activePanels","initLegendGroup","initLegendPosition","initLegendPadding","initLegendItems","initLabelPanel","legendGroup","getChartOption","toggleGroupExpand","setChartOption","legendPositionSelect","position","legendPaddingSlider","setTextFieldWidth","setMaxValue","initSlider","expression","labelKey","input","maxValue","markerSizeSlider","markerStrokeSlider","markerPaddingSlider","itemPaddingXSlider","itemPaddingYSlider","font","fontPanelComp","destroyActivePanels","panel","ShadowPanel","shadowBlurSlider","shadowXOffsetSlider","shadowYOffsetSlider","initSeriesShadow","shadowGroup","getShadowEnabled","setShadowProperty","shadowColorPicker","initInput","property","minValue","getShadowProperty","setMinValue","BarSeriesPanel","seriesGroup","initSeriesTooltips","initSeriesStrokeWidth","initOpacity","initShadowPanel","seriesTooltipsToggle","seriesStrokeWidthSlider","seriesLineOpacitySlider","setStep","seriesFillOpacitySlider","labelPanelComp","shadowPanelComp","AxisTicksPanel","initAxisTicks","axisTicksGroup","axisTicksColorPicker","getAxisProperty","setAxisProperty","axisTicksWidthSlider","axisTicksSizeSlider","BBox","y","width","height","isValid","dilate","containsPoint","render","ctx","noParams","save","resetTransform","setTransform","strokeStyle","lineWidth","strokeRect","fillStyle","textBaseline","fillText","restore","Matrix","elements","setElements","e","setIdentityElements","enumerable","configurable","AxB","A","B","C","m11","m12","m21","m22","m31","m32","o11","o12","o21","o22","o31","o32","multiplySelf","other","multiply","preMultiplySelf","inverse","rD","inverseTo","invertSelf","clone","transformPoint","transformBBox","bbox","radius","w","h","xx","xy","yx","yy","h_w","h_h","cx","cy","sx","sqrt","sy","abs","toContext","identity","transform","flyweight","matrix","Node","createId","tag","NaN","isContainerNode","_children","childSet","inverseMatrix","_dirtyTransform","_scalingX","_scalingY","_scalingCenterX","_scalingCenterY","_rotationCenterX","_rotationCenterY","_rotation","_translationX","_translationY","_dirty","_visible","pointerEvents","All","className","Error","isNode","node","_setScene","_scene","children","_setParent","_parent","countChildren","depth","MAX_SAFE_INTEGER","append","nodes","scene","dirty","removeChild","splice","insertBefore","nextNode","dirtyTransform","rotation","PI","isPointInNode","pickNode","visible","None","hit","computeBBox","computeBBoxCenter","computeTransformMatrix","scx","scy","bbcx","bbcy","scalingX","scalingY","scalingCenterX","scalingCenterY","rcx","rcy","cos","sin","rotationCenterX","rotationCenterY","tx","translationX","ty","translationY","tx4","ty4","pow","Group","left","Infinity","right","parent_1","EnterNode","datum","next","Selection","groups","parents","select","selectAll","Class","appendFn","creator","selector","numGroups","subgroups","groupSize","subgroup","subnode","selectByClass","selectByTag","selectAllByClass","selectAllByTag","selectNone","selectorAll","groupCount","groupLength","each","cb","remove","merge","groups0","groups1","m0","m1","m","merges","group0","group1","attr","attrFn","_","enterGroups","exitGroups","setDatum","setData","data_1","updateGroups","parent_2","dataSize","enterGroup","updateGroup","exitGroup","bindKey","bindIndex","i0","i1","previous","enter","update","exit","keyValues","nodeByKeyValue","keyValue","keyPrefix","chainObjects","obj","prop","Shape","lastInstanceId","_fillOpacity","_strokeOpacity","_fill","defaultStyles","fill","_stroke","stroke","_strokeWidth","strokeWidth","_lineDash","lineDash","_lineDashOffset","lineDashOffset","_lineCap","lineCap","_lineJoin","lineJoin","_opacity","opacity","onShadowChange","_fillShadow","fillShadow","_strokeShadow","strokeShadow","createInstance","template","shape","restoreOwnStyles","styles","getOwnPropertyNames","restoreAllStyles","restoreOverriddenStyles","protoStyles","getPrototypeOf","oldValue","identical","removeEventListener","addEventListener","fillStroke","pixelRatio","canvas","globalAlpha","fillOpacity","shadowColor","shadowOffsetX","xOffset","shadowOffsetY","yOffset","shadowBlur","blur","strokeOpacity","setLineDash","isPointInPath","Line","_x1","_y1","_x2","_y2","x1","y1","x2","y2","isPointInStroke","round","floor","beginPath","moveTo","lineTo","step","tickStep","count","absStep","fractionDigits","log","LN10","ceil","NumericTicks","e10","e5","e2","rawStep","error","tickIncrement","power","twoPi","normalizeAngle360","radians","toRadians","degrees","Text","_x","_y","lineBreakRegex","lines","_text","_dirtyFont","_fontSize","_fontFamily","_textAlign","textAlign","_textBaseline","_lineHeight","splitText","split","str","dirtyFont","_font","fontStyle","fontWeight","fontSize","fontFamily","trim","_fontStyle","_fontWeight","textMetrics","getPreciseBBox","getApproximateBBox","metrics","measureText","actualBoundingBoxLeft","actualBoundingBoxAscent","actualBoundingBoxDescent","getTextSize","point","strokeText","sign","isNaN","cubicRoots","t","linearRoot","D","roots","t1","t2","quadraticRoots","Q","R","S","T","Im","t_1","theta","acos","thirdA","twoSqrtQ","t3","segmentIntersection","ax1","ay1","ax2","ay2","bx1","by1","bx2","by2","ua","ub","cubicSegmentIntersections","px1","py1","px2","py2","px3","py3","px4","py4","intersections","bx","bezierCoefficients","by","tt","ttt","P1","P2","P3","P4","Path2D","commands","_closedPath","closePath","arcTo","rx","ry","fA","fS","hdx","hdy","sinPhi","cosPhi","xp","yp","ratX","ratY","lambda","cpx","cpy","theta1","atan2","deltaTheta","cubicArc","arcToAlt","x1p","y1p","rx_y1p","ry_x1p","root","rootSign","cxp","phi","theta2","anticlockwise","temp","start","f90","sinTheta1","cosTheta1","rightAngle","lastX","tan","sinPhi2","cosPhi2","C2x","C2y","deCasteljau","points","newPoints","approximateCurve","xy_1","quadraticCurveTo","cubicCurveTo","cx1","cy1","cx2","cy2","cn","ox","oy","px","py","intersectionCount","ci","pi","fromString","path","setFromString","parseSvgPath","splitCommandsRe","part","strParams","match","matchParamsRe","command","parseFloat","prettifySvgPath","lastCommand","checkQuadraticCP","quadraticCommandRe","checkCubicCP","cubicCommandRe","out","toPrettyString","toSvg","xmlDeclaration","xmlns","toDebugSvg","toCubicPaths","paths","cubicPathToString","Path","_dirtyPath","_svgPath","closedPath","updatePath","dirtyPath","appendPath","isEqual","epsilon","toFixed","fractionOrSignificantDigits","ArcType","Tags","Arc","_centerX","_centerY","_radiusX","_radiusY","_startAngle","_endAngle","_counterClockwise","_type","Open","startAngle","endAngle","centerX","centerY","radiusX","radiusY","counterClockwise","Chord","Round","fullPie","ChartAxisDirection","ChartAxisPosition","AxisTick","AxisLabel","padding","mirrored","parallel","_format","onFormatChange","Axis","scale","lineNode","line","tick","translation","_title","_gridLength","gridStyle","_radialGrid","groupSelection","onTickFormatChange","domain","format","tickFormat","tickFormatter","oldTitle","parallelLabels","labelRotation","bandwidth","sideFlag","parallelFlipRotation","parallelFlipFlag","regularFlipRotation","regularFlipFlag","alignFlag","ticks","Tick","gridLength","radialGrid","GridLine","convert","styleCount_1","gridLines","angularGridLength_1","arc","gridLine","labelSelection","formatter","labelX","autoRotation","titleNode","excludeTitle","titleRotationFlag","labelBBox","flipChartAxisDirection","direction","X","Y","RectSizing","ChartAxis","boundSeries","thickness","_position","Top","Right","Bottom","Left","AxisPanel","initAxis","initAxisLabels","axisGroup","axisColorInput","axisLineWidthSlider","axisTicksComp","getChart","performLayout","addAdditionalLabelComps","createAngleComp","updateFunc","rotationInput","degreesSymbol","fromCharCode","createLabelUpdateFunc","axisPosition","chart","axis","axes","xRotationLabel","yRotationLabel","labelPaddingSlider","HdpiCanvas","window","_pixelRatio","tempCanvas","element","userSelect","context","getContext","updatePixelRatio","resize","_width","_height","parentNode","_canvas","toImage","img","src","toDataURL","download","fileName","dataUrl","navigator","msSaveOrOpenBlob","binary","atob","charCodeAt","blob","Blob","Uint8Array","href","display","body","click","ratio","devicePixelRatio","overrides","makeHdpiOverrides","name_1","logicalWidth","logicalHeight","tempContext","drawImage","_textMeasuringContext","_svgText","svg","createElementNS","setAttribute","classList","visibility","svgText","_has","textMeasuringContext","getTransform","flicker","safari","measureSvgText","cache","textSizeCache","fontCache","size_1","textContent","getBBox","$save","$restore","$setTransform","Scene","animationFrameId","_root","_frameIndex","_renderFrameIndex","clearRect","renderFrameIndex","fillRect","frameIndex","requestAnimationFrame","cancelRender","cancelAnimationFrame","bezierCurveTo","Padding","Rect","_radius","_crisp","effectiveStrokeWidth","_sizing","Content","crisp","sizing","Border","borderSizing","halfWidth","halfHeight","alignment","Marker","_size","half","Square","hs","MarkerLabel","_marker","_markerSize","defaults","markerSize","_padding","labelFontStyle","labelFontWeight","labelFontSize","labelFontFamily","labelColor","marker","labelFont","Observable","propertyListeners","eventListeners","addPropertyListener","listener","listeners","removePropertyListener","delete","notifyPropertyListeners","source","notifyEventListeners","types","fireEvent","privateKeyPrefix","reactive","events","privateKey","backingProperty","privateKeyEvents","events_1","Orientation","Legend","itemSelection","oldSize","orientation","Vertical","itemPaddingX","itemPaddingY","markerPadding","markerStrokeWidth","legend","Horizontal","markerType","updateSelection","itemMarkerType","itemMarkerName","itemId","enterSelection","itemCount","bboxes","markerLabel","labelText","itemHeight","rowCount","columnWidth","paddedItemsWidth","paddedItemsHeight","columnCount","itemsWidth","itemsHeight","columnCount_1","startX","startY","markerFill","markerStroke","markerFillOpacity","markerStrokeOpacity","datumForPoint","Series","directions","tooltipEnabled","showInLegend","scheduleLayout","scheduleData","getKeys","directionKeys","isArray","toggleSeriesItem","fixNumericExtent","Circle","SeriesMarker","minSize","CartesianSeries","CartesianSeriesMarker","Chart","background","legendAutoPadding","captionAutoPadding","defaultTooltipClass","tooltipOffset","onLayoutChange","layoutPending","onLegendPositionChange","_axes","_series","dataPending","_data","_axesChanged","_seriesChanged","layoutCallbackId","_performLayout","dataCallbackId","updateLegend","legendData","series","listSeriesItems","onMouseMove","offsetX","offsetY","pick","pickSeriesNode","lastPick","showTooltip","onSeriesNodePick","dehighlightNode","hideTooltip","onMouseOut","toggleTooltip","onClick","id_1","_tooltipClass","tooltipElement","tooltipClass","setupListeners","captionListener","caption","oldCaption","tooltipParent","cleanupListeners","seriesRoot","axesChanged","removeAllSeries","addSeries","before","allSeries","beforeIndex","initSeries","seriesChanged","freeSeries","addSeriesAfter","after","afterIndex","removeSeries","onSeriesChange","axisName","onAxesChange","force","directionToAxesMap","directionAxes","findMatchingAxis","xAxis","yAxis","axisKeys","clearTimeout","setTimeout","processData","positionCaptions","subtitle","titleVisible","subtitleVisible","paddingTop","titleBBox","subtitleBBox","positionLegend","legendBBox","legendPadding","chartElement","highlightNode","html","getTooltipHtml","el","offset","parentElement","innerHTML","tooltipRect","pageY","pageX","pageXOffset","offsetWidth","BandScale","ordinalRange","_domain","_range","_bandwidth","_paddingInner","_paddingOuter","_round","_align","rescale","reversed","CategoryAxis","paddingInner","paddingOuter","TreeNode","number","subtreeLeft","subtreeRight","screenX","screenY","leafCount","prelim","mod","ancestor","change","getLeftSibling","getLeftmostSibling","nextLeft","thread","nextRight","getSiblings","ticksToTree","pad","pathParts","lastPartIndex","pathPart","partIndex","existingNode","isNotLeaf","insertTick","moveSubtree","wm","wp","vim","defaultAncestor","firstWalk","distance","defaultAncestor_1","vop","vip","vom","sip","sop","sim","som","apportion","executeShifts","midpoint","leftSibling","Dimensions","treeLayout","layout","TreeLayout","secondWalk","thirdWalk","dimensions","leafNodes","nonLeafNodes","shiftX","shiftY","flipX","xSteps","ySteps","existingSpacingX","existingSpacingY","screenDimensions","CartesianChartLayout","GroupedCategoryAxisLabel","grid","GroupedCategoryAxis","tickScale","gridLineSelection","axisLineSelection","separatorSelection","tickTree","tickTreeLayout","resizeTickTree","lineHeight","rangeStart","rangeEnd","isHorizontal","treeLabels","isLabelTree","updateGridLines","enterGridLines","updateLabels","enterLabels","labelFormatter","maxLeafLabelWidth","labelGrid","separatorData","minX","updateSeparators","enterSeparators","lineCount","updateAxisLines","enterAxisLines","styles_1","includeTitle","CartesianChart","axisAutoPadding","flipXY","_seriesRoot","_layout","_updateAxes","updateAxes","shrinkRect","linkedTo","linkedAxes","domains_1","getDomain","axisThickness","PolarSeries","PolarSeriesMarker","PolarChart","ascending","date","msA","msB","setTime","nb","na","valueOf","object","ascendingComparator","item","clamper","ContinuousScale","unknown","_clamp","untransform","_interpolate","setDomain","piecewise","polymap","bimap","output","normalize","interpolate","xt","x0","y0","dt","from","tr","list","comparator","lo","hi","mid","bisectRight","invert","LineSeries","xDomain","yDomain","xData","yData","_xKey","_xName","_yKey","_yName","highlightStyle","onMarkerTypeChange","xKey","yKey","isContinuousX","highlightedNode","xScale","yScale","groupSelectionData","linePath","xDatum","yDatum","seriesDatum","updateGroupSelection","highlightFill","highlightStroke","markerFormatter","isHighlightedNode","markerFormat","highlighted","nodeDatum","xName","yName","tooltipRenderer","titleString","xValue","yValue","LinearScale","nice","stop","scaleLinear","ColumnSeriesNodeTag","ScatterSeries","sizeData","sizeScale","sizeName","labelName","sizeKey","titleHtml","contentHtml","Label","PieSeriesNodeTag","ColumnSeriesLabel","ColumnSeries","rectGroup","textGroup","rectSelection","textSelection","yKeyEnabled","groupScale","_yKeys","_yNames","_grouped","_normalizedTo","absValue","_shadow","yKeys","keysFound","ySums","normalizedTo","yMin","yMax","grouped","stackValues","selectionData","generateSelectionData","updateRectSelection","updateTextSelection","category","prev","curr","columnX","bottomY","yValueIsNumber","shadow","updateRects","enterRects","Column","labelEnabled","updateTexts","enterTexts","yNames","yKeyIndex","fills_1","strokes_1","enabledYKeys","AreaSeries","areaGroup","strokeGroup","markerGroup","areaSelection","strokeSelection","markerSelection","_fills","_strokes","stack","areaSelectionData","markerSelectionData","updateAreaSelection","updateStrokeSelection","updateMarkerSelection","areaPoints","updateAreas","enterAreas","updateStrokes","enterStrokes","updateMarkers","enterMarkers","Sector","_centerOffset","_innerRadius","_outerRadius","_angleOffset","outerRadius","angleOffset","midAngle","innerRadius","centerOffset","Color","g","fromHexString","hex","nameToHex","fromRgbaString","hexRe","shortHexRe","rgbRe","rgbaRe","fromArray","fromHSB","alpha","rgb","HSBtoRGB","padHex","toHexString","toRgbaString","components","toHSB","RGBtoHSB","H","delta","rc","gc","bc","q","derive","hueShift","saturationFactor","brightnessFactor","opacityFactor","hsb","rgba","brighter","darker","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","PieSeriesLabel","minAngle","PieSeries","radiusScale","angleScale","angle","dataEnabled","_calloutColors","_calloutStrokeWidth","_calloutLength","_labelOffset","_labelFontSize","_labelFontFamily","_labelColor","_angleKey","_angleName","_outerRadiusOffset","_innerRadiusOffset","_labelFontStyle","_labelFontWeight","_radiusKey","_radiusName","_labelKey","_labelName","calloutColors","angleData","angleKey","angleDataTotal","angleDataRatios","sum","labelData","radiusKey","useRadiusKey","innerRadiusOffset","radiusData","radii","maxDatum_1","halfPi","datumIndex","end","span","midCos","midSin","labelMinAngle","labelVisible","midAngle180","quadrantStart","outerRadiusOffset","Callout","minOuterRadius","outerRadii","centerOffsets","sector","calloutLength","calloutStrokeWidth","_d","offset_1","fontStyle_1","fontWeight_1","fontSize_1","fontFamily_1","color_1","labelRadius","angleName","radiusName","DropShadow","NumberAxis","_nice","clamp","Caption","GroupedCategoryChart","domains","isNumericX","domain_1","Cross","Diamond","Plus","Triangle","t0","CountableTimeInterval","field","_count","_field","_floor","every","field_1","TimeInterval","_offset","d0","d1","ms","test","milliseconds","getMilliseconds","seconds","getSeconds","minutes","durationSecond","getMinutes","hours","durationMinute","getHours","setHours","days","setDate","getDate","tzMinuteDelta","getTimezoneOffset","durationHour","weekday","getDay","weeks","durationDay","sunday","monday","thursday","months","setMonth","getMonth","getFullYear","years","setFullYear","setUTCHours","setUTCDate","getUTCDate","setUTCMonth","setUTCFullYear","getUTCFullYear","getUTCDay","utcSunday","utcMonday","utcThursday","localDate","M","L","utcDate","UTC","formatLookup","names","newYear","locale","numberRe","percentRe","requoteRe","requote","replace","formatRe","RegExp","pads","string","timeLocale","lDateTime","dateTime","lDate","lTime","time","lPeriods","periods","lWeekdays","lShortWeekdays","shortDays","lMonths","lShortMonths","shortMonths","periodRe","periodLookup","weekdayRe","weekdayLookup","shortWeekdayRe","shortWeekdayLookup","monthRe","monthLookup","shortMonthRe","shortMonthLookup","formats","formatDayOfMonth","formatMilliseconds","formatUnixTimestamp","formatUnixTimestampSeconds","dayOfWeek","day","yearStart","z","formatLiteralPercent","utcFormats","getUTCMonth","formatUTCDayOfMonth","formatUTCMilliseconds","getUTCHours","getUTCMinutes","getUTCSeconds","parses","exec","parseSpecifier","parseDayOfMonth","parseHour24","u","U","V","W","Z","newParse","specifier","newDate","week","newFormat","charAt","pad_1","code","char","parse","getUTCMilliseconds","utcFormat","utcParse","formatLocale","TimeScale","year","month","hour","minute","second","millisecond","tickIntervals","formatMillisecond","formatSecond","formatMinute","formatHour","formatDay","formatWeek","formatMonth","formatYear","defaultTickFormat","tickInterval","interval","tickCount","complexBisectRight","TimeAxis","ChartBuilder","createCartesianChart","createGroupedCategoryChart","createBarChart","createNumberAxis","createCategoryAxis","initChart","initBarSeries","createColumnChart","createLineChart","createAxis","initLineSeries","createScatterChart","initScatterSeries","createAreaChart","initAreaSeries","createPolarChart","createDoughnutChart","createPieChart","initPieSeries","createGroupedColumnChart","createGroupedAxis","createGroupedBarChart","createGroupedLineChart","createGroupedAreaChart","createSeries","setValueIfExists","setTransformedValueIfExists","createTitle","createSubtitle","initLegend","tooltip","initHighlightStyle","initMarker","renderer","initLabelOptions","colors","createDropShadow","createPieTitle","callout","minRequiredAngle","getMarkerFromType","markerTypes","paddingX","paddingY","setDefaultFontOptions","createCaption","createTimeAxis","defaultType","convertToMap","__assign","assign","ChartProxy","chartProxyParams","isDarkTheme","getFontColor","getAxisGridColor","getBackgroundColor","getChartPaddingOption","recreateChart","destroyChart","createChart","initChartOptions","processChartOptions","overriddenOptions","getDefaultOptions","safeOptions","mergeDeep","overridePalette","allowPaletteOverride","getPredefinedPalette","defaultFills","defaultStrokes","seriesDefaults","fillsOverridden","strokesOverridden","mappings","setTitleOption","exists","setChartPaddingOption","getChartPaletteName","getDefaultFontOptions","getDefaultDropShadowOptions","getPalette","getDefaultChartOptions","fontOptions","transformData","categoryKey","querySelector","CartesianChartProxy","updateLabelRotation","categoryId","isHorizontalChart","axisKey","getDefaultAxisOptions","getDefaultCartesianChartOptions","isDate","ScatterChartProxy","getMarkersEnabled","fields","seriesDefinitions","getSeriesDefinitions","paired","xField","seriesOptions","labelFieldDefinition","existingSeriesById","reduceRight","findIndex","yField","sizeField","previousSeries","seriesDefinition","existingSeries","xFieldDefinition","yFieldDefinition","sizeFieldDefinition","testDatum","xKeys","xValuesAreDates","getTooltipsEnabled","isBubbleChart","xField_1","MarkersPanel","initMarkers","shouldHideEnabledCheckbox","seriesMarkersGroup","seriesMarkerMinSizeSlider","seriesMarkerSizeSlider","setDisplayed","seriesMarkerStrokeWidthSlider","LineSeriesPanel","initSeriesGroup","initSeriesLineWidth","initMarkersPanel","seriesLineWidthSlider","markersPanelComp","CalloutPanel","initCalloutOptions","calloutGroup","calloutLengthSlider","calloutStrokeWidthSlider","labelOffsetSlider","PieSeriesPanel","calloutPanelComp","PaddingPanel","initChartPaddingItems","chartPaddingGroup","paddingTopSlider","paddingRightSlider","paddingBottomSlider","paddingLeftSlider","BackgroundPanel","initColorPicker","initTitles","initPaddingPanel","initBackgroundPanel","chartGroup","titleInput","paddingPanelComp","backgroundPanelComp","AreaSeriesPanel","ScatterSeriesPanel","ChartFormattingPanel","panels","createPanels","destroyPanels","GroupedColumn","StackedColumn","NormalizedColumn","GroupedBar","StackedBar","NormalizedBar","Area","StackedArea","NormalizedArea","MiniChart","tooltipName","MiniChartWithAxes","axisOvershoot","addAxes","leftAxis","bottomAxis","MiniColumn","bars","updateColors","bar","MiniStackedColumn","yScaleDomain","MiniNormalizedColumn","MiniBar","MiniStackedBar","xScaleDomain","MiniNormalizedBar","MiniDoughnut","centerRadiusScaler","center","angles","sectors","MiniPie","ClipRect","_active","active","clip","MiniLine","clipRect","MiniScatter","MiniBubble","MiniArea","pathData","areas","area","MiniStackedArea","MiniNormalizedArea","MiniChartsContainer","wrappers","chartGroups","columnGroup","barGroup","pieGroup","lineGroup","scatterGroup","eGui","groupComponent","MiniClass","miniWrapper","refreshSelected","wrapper","addOrRemoveCssClass","ChartSettingsPanel","miniCharts","cardItems","postConstruct","resetPalettes","ePrevBtn","eNextBtn","palettes","activePalette","paletteNames","eCardSelector","destroyMiniCharts","isActivePalette","miniChartsContainer","eMiniChartsContainer","addCardLink","eNavBar","link","isAnimating","setActivePalette","getPrev","getNext","animationDirection","paletteIndex","radioCssClass","currentPalette","currentGui","futurePalette","futureGui","multiplier","final","getAbsoluteWidth","removeCssClass","TabbedChartMenu","tabs","chartIcons","controller","panelType","createTab","getPanelClass","tab","tabbedLayout","items","cssClass","ChildClass","eWrapperDiv","titleEl","innerText","bodyPromise","resolve","getMinDimensions","updateCurrentChartType","showTab","tabItem","showItem","parentComponent","isAlive","TAB_DATA","TAB_FORMAT","EVENT_TAB_SELECTED","TAB_MAIN","ChartMenu","buttons","chartSettings","showMenu","chartFormat","chartUnlink","chartDownload","saveChart","createButtons","getToolbarOptions","tabOptions","toolbarItemsFunc","getChartToolbarItemsFunc","getApi","getColumnApi","defaultItems","option","ignoreOptions","containsClass","button","buttonConfig","iconName","callback","buttonEl","EVENT_DOWNLOAD_CHART","createMenu","defaultTab","chartComp","getParentComponent","dockedContainer","getDockedContainer","menuPanel","minWidth","chartMenuPanelWidth","closable","hideTitleBar","setParentComponent","tabbedMenu","getCurrentChartType","EVENT_DESTROYED","res","setBodyComponent","getChartComponentsWrapper","hideMenu","slideDockedContainer","slideDockedOut","getWidth","tabName","then","slideDockedIn","BarChartProxy","barSeries","getSeriesDefaults","isColumnChart","builderFunction","isGrouped","isNormalized","AreaChartProxy","areaSeries","updateAreaChart","fieldIds","LineChartProxy","lineSeries","categoryIsDate","PolarChartProxy","PieChartProxy","existingSeriesId","pieSeriesField","pieSeries","DoughnutChartProxy","doughnutChart","seriesMap","GridChartComp","eChartComponentsWrapper","eDockedContainer","modelParams","insideDialog","addDialog","addResizeListener","addMenu","setActiveChartCellRange","refresh","chartMenu","downloadChart","processChartOptionsFunc","getProcessChartOptionsFunc","categorySelected","environment","isThemeDark","eChart","getDocument","chartGroupingActive","createChartProxy","chartDialog","resizable","movable","maximizable","centered","shouldRecreateChart","updateChart","chartTypeChanged","groupingChanged","handleEmptyChart","chartUpdateParams","pivotModeDisabled","minFieldsRequired","isEmptyChart","eEmpty","refreshCanvasSize","eChartWrapper","getInnerHeight","getInnerWidth","observeResizeFunc","resizeObserverService","observeResize","offsetParent","focusEvent","contains","relatedTarget","ChartService","activeCharts","activeChartComps","getChartModels","models","createChartFromCurrentRange","selectedRange","getSelectedRange","createRangeChart","createCellRangeFromCellRangeParams","chartContainer","createPivotChart","setPivotMode","chartAllRangeParams","container","createChartContainerFunc","getCreateChartContainerFunc","chartRef","createChartRef","theme","getTheme","ranges","destroyAllActiveCharts","ChartTranslator","ChartTranslator_1","toTranslate","getLocaleTextFunc","DEFAULT_TRANSLATIONS","pivotChartTitle","rangeChartTitle","settings","categories","xyValues","xRotation","yRotation","maxSize","offsets","tooltips","markers","normal","bold","italic","boldItalic","predefined","groupedColumnTooltip","stackedColumnTooltip","normalizedColumnTooltip","groupedBarTooltip","stackedBarTooltip","normalizedBarTooltip","pieTooltip","doughnutTooltip","lineTooltip","groupedAreaTooltip","stackedAreaTooltip","normalizedAreaTooltip","scatterTooltip","bubbleTooltip","noDataToChart","pivotChartRequiresPivotMode","GridChartsModule","moduleName","beans","dependantModules","AllEnterpriseModules","AllModules"],"mappings":"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","file":"static/js/defaultVendors~main~6231a11f.09804c2e.chunk.js","sourcesContent":["/**\n * Returns the minimum and maximum value in the given iterable using natural order.\n * If the iterable contains no comparable values, returns `undefined`.\n * @param values\n */\nexport function extent(values) {\n var n = values.length;\n var i = -1;\n var value;\n var min;\n var max;\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) {\n min = value;\n }\n if (max < value) {\n max = value;\n }\n }\n }\n }\n }\n return typeof min === 'undefined' || typeof max === 'undefined' ? undefined : [min, max];\n}\n// Custom `Array.find` implementation for legacy browsers.\nexport function find(arr, predicate) {\n for (var i = 0, ln = arr.length; i < ln; i++) {\n var value = arr[i];\n if (predicate(value, i, arr)) {\n return value;\n }\n }\n}\n/**\n * This method will only return `undefined` if there's not a single valid finite number present\n * in the given array of values. Date values will be converted to timestamps.\n * @param values\n */\nexport function numericExtent(values) {\n var calculatedExtent = extent(values);\n if (typeof calculatedExtent === 'undefined') {\n return;\n }\n var a = calculatedExtent[0], b = calculatedExtent[1];\n var min = a instanceof Date ? a.getTime() : a;\n var max = b instanceof Date ? b.getTime() : b;\n if (typeof min === 'number' && isFinite(min) && typeof max === 'number' && isFinite(max)) {\n return [min, max];\n }\n}\nexport function sumPositiveValues(array) {\n return array.reduce(function (total, value) { return value > 0 ? total + value : total; }, 0);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, BeanStub, ModuleNames, ModuleRegistry, Optional } from \"@ag-grid-community/core\";\nimport { ChartDataModel } from \"./chartDataModel\";\nimport { find } from \"../../charts/util/array\";\nvar ChartDatasource = /** @class */ (function (_super) {\n __extends(ChartDatasource, _super);\n function ChartDatasource() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n ChartDatasource.prototype.getData = function (params) {\n var result = this.extractRowsFromGridRowModel(params);\n result.data = this.aggregateRowsByDimension(params, result.data);\n return result;\n };\n ChartDatasource.prototype.extractRowsFromGridRowModel = function (params) {\n var _this = this;\n var extractedRowData = [];\n var columnNames = {};\n // maps used to keep track of expanded groups that need to be removed\n var groupNodeIndexes = {};\n var groupsToRemove = {};\n // make sure enough rows in range to chart. if user filters and less rows, then end row will be\n // the last displayed row, not where the range ends.\n var modelLastRow = this.gridRowModel.getRowCount() - 1;\n var rangeLastRow = params.endRow > 0 ? Math.min(params.endRow, modelLastRow) : modelLastRow;\n var numRows = rangeLastRow - params.startRow + 1;\n var _loop_1 = function (i) {\n var data = {};\n var rowNode = this_1.gridRowModel.getRow(i + params.startRow);\n // first get data for dimensions columns\n params.dimensionCols.forEach(function (col) {\n var colId = col.colId;\n var column = _this.columnController.getGridColumn(colId);\n if (column) {\n var valueObject = _this.valueService.getValue(column, rowNode);\n // when grouping we also need to build up multi category labels for charts\n if (params.grouping) {\n var valueString = valueObject && valueObject.toString ? String(valueObject.toString()) : '';\n // traverse parents to extract group label path\n var labels = _this.getGroupLabels(rowNode, valueString);\n if (params.multiCategories) {\n // add group labels to group column for multi category charts\n data[colId] = { labels: labels, toString: function () { return find(this.labels, function (v) { return !!v; }) || ''; } };\n }\n else {\n // concat group keys from the top group key down (used when grouping Pie charts)\n data[colId] = labels.slice().reverse().join(' - ');\n }\n // keep track of group node indexes so they can be padded when other groups are expanded\n if (rowNode.group) {\n groupNodeIndexes[labels.toString()] = i;\n }\n // if node (group or leaf) has parents then it is expanded and should be removed\n var groupKey = labels.slice(1, labels.length).toString();\n if (groupKey) {\n groupsToRemove[groupKey] = groupNodeIndexes[groupKey];\n }\n }\n else {\n // leaf nodes can be directly added to dimension columns\n data[colId] = valueObject;\n }\n }\n else {\n // introduce a default category when no dimensions exist with a value based off row index (+1)\n data[ChartDataModel.DEFAULT_CATEGORY] = i + 1;\n }\n });\n // then get data for value columns\n params.valueCols.forEach(function (col) {\n var columnNamesArr = [];\n // pivot keys should be added first\n var pivotKeys = col.getColDef().pivotKeys;\n if (pivotKeys) {\n columnNamesArr = pivotKeys.slice();\n }\n // then add column header name to results\n var headerName = col.getColDef().headerName;\n if (headerName) {\n columnNamesArr.push(headerName);\n }\n // add array of column names to results\n if (columnNamesArr.length > 0) {\n columnNames[col.getId()] = columnNamesArr;\n }\n // add data value to value column\n var value = _this.valueService.getValue(col, rowNode);\n data[col.getId()] = value != null && typeof value.toNumber === 'function' ? value.toNumber() : value;\n });\n // add data to results\n extractedRowData.push(data);\n };\n var this_1 = this;\n for (var i = 0; i < numRows; i++) {\n _loop_1(i);\n }\n if (params.grouping) {\n var groupIndexesToRemove_1 = _.values(groupsToRemove);\n extractedRowData = extractedRowData.filter(function (_1, index) { return !_.includes(groupIndexesToRemove_1, index); });\n }\n return { data: extractedRowData, columnNames: columnNames };\n };\n ChartDatasource.prototype.aggregateRowsByDimension = function (params, dataFromGrid) {\n var _this = this;\n var dimensionCols = params.dimensionCols;\n if (!params.aggFunc || dimensionCols.length === 0) {\n return dataFromGrid;\n }\n var lastCol = _.last(dimensionCols);\n var lastColId = lastCol && lastCol.colId;\n var map = {};\n var dataAggregated = [];\n dataFromGrid.forEach(function (data) {\n var currentMap = map;\n dimensionCols.forEach(function (col) {\n var colId = col.colId;\n var key = data[colId];\n if (colId === lastColId) {\n var groupItem_1 = currentMap[key];\n if (!groupItem_1) {\n groupItem_1 = { __children: [] };\n dimensionCols.forEach(function (col) {\n var colId = col.colId;\n groupItem_1[colId] = data[colId];\n });\n currentMap[key] = groupItem_1;\n dataAggregated.push(groupItem_1);\n }\n groupItem_1.__children.push(data);\n }\n else {\n // map of maps\n if (!currentMap[key]) {\n currentMap[key] = {};\n }\n currentMap = currentMap[key];\n }\n });\n });\n dataAggregated.forEach(function (groupItem) { return params.valueCols.forEach(function (col) {\n var dataToAgg = groupItem.__children.map(function (child) { return child[col.getId()]; });\n var aggResult = 0;\n if (ModuleRegistry.assertRegistered(ModuleNames.RowGroupingModule, 'Charting Aggregation')) {\n aggResult = _this.aggregationStage.aggregateValues(dataToAgg, params.aggFunc);\n }\n groupItem[col.getId()] = aggResult && typeof aggResult.value !== 'undefined' ? aggResult.value : aggResult;\n }); });\n return dataAggregated;\n };\n ChartDatasource.prototype.getGroupLabels = function (rowNode, initialLabel) {\n var labels = [initialLabel];\n while (rowNode.level !== 0) {\n rowNode = rowNode.parent;\n labels.push(rowNode.key);\n }\n return labels;\n };\n __decorate([\n Autowired('rowModel')\n ], ChartDatasource.prototype, \"gridRowModel\", void 0);\n __decorate([\n Autowired('valueService')\n ], ChartDatasource.prototype, \"valueService\", void 0);\n __decorate([\n Optional('aggregationStage')\n ], ChartDatasource.prototype, \"aggregationStage\", void 0);\n __decorate([\n Autowired('columnController')\n ], ChartDatasource.prototype, \"columnController\", void 0);\n return ChartDatasource;\n}(BeanStub));\nexport { ChartDatasource };\n","import { Matrix } from \"./matrix\";\nexport var PointerEvents;\n(function (PointerEvents) {\n PointerEvents[PointerEvents[\"All\"] = 0] = \"All\";\n PointerEvents[PointerEvents[\"None\"] = 1] = \"None\";\n})(PointerEvents || (PointerEvents = {}));\n/**\n * Abstract scene graph node.\n * Each node can have zero or one parent and belong to zero or one scene.\n */\nvar Node = /** @class */ (function () {\n function Node() {\n /**\n * Unique node ID in the form `ClassName-NaturalNumber`.\n */\n this.id = this.createId();\n /**\n * Some number to identify this node, typically within a `Group` node.\n * Usually this will be some enum value used as a selector.\n */\n this.tag = NaN;\n /**\n * To simplify the type system (especially in Selections) we don't have the `Parent` node\n * (one that has children). Instead, we mimic HTML DOM, where any node can have children.\n * But we still need to distinguish regular leaf nodes from container leafs somehow.\n */\n this.isContainerNode = false;\n this._children = [];\n // Used to check for duplicate nodes.\n this.childSet = {}; // new Set()\n // These matrices may need to have package level visibility\n // for performance optimization purposes.\n this.matrix = new Matrix();\n this.inverseMatrix = new Matrix();\n // TODO: should this be `true` by default as well?\n this._dirtyTransform = false;\n this._scalingX = 1;\n this._scalingY = 1;\n /**\n * The center of scaling.\n * The default value of `null` means the scaling center will be\n * determined automatically, as the center of the bounding box\n * of a node.\n */\n this._scalingCenterX = null;\n this._scalingCenterY = null;\n this._rotationCenterX = null;\n this._rotationCenterY = null;\n /**\n * Rotation angle in radians.\n * The value is set as is. No normalization to the [-180, 180) or [0, 360)\n * interval is performed.\n */\n this._rotation = 0;\n this._translationX = 0;\n this._translationY = 0;\n /**\n * Each time a property of the node that effects how it renders changes\n * the `dirty` property of the node should be set to `true`. The change\n * to the `dirty` property of the node will propagate up to its parents\n * and eventually to the scene, at which point an animation frame callback\n * will be scheduled to rerender the scene and its nodes and reset the `dirty`\n * flags of all nodes and the {@link Scene._dirty | Scene} back to `false`.\n * Since changes to node properties are not rendered immediately, it's possible\n * to change as many properties on as many nodes as needed and the rendering\n * will still only happen once in the next animation frame callback.\n * The animation frame callback is only scheduled if it hasn't been already.\n */\n this._dirty = true;\n this._visible = true;\n this.pointerEvents = PointerEvents.All;\n }\n // Uniquely identify nodes (to check for duplicates, for example).\n Node.prototype.createId = function () {\n var constructor = this.constructor;\n var className = constructor.className;\n if (!className) {\n throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n }\n return className + '-' + (constructor.id = (constructor.id || 0) + 1);\n };\n /**\n * This is meaningfully faster than `instanceof` and should be the preferred way\n * of checking inside loops.\n * @param node\n */\n Node.isNode = function (node) {\n return node ? node.matrix !== undefined : false;\n };\n Node.prototype._setScene = function (value) {\n this._scene = value;\n var children = this.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n children[i]._setScene(value);\n }\n };\n Object.defineProperty(Node.prototype, \"scene\", {\n get: function () {\n return this._scene;\n },\n enumerable: true,\n configurable: true\n });\n Node.prototype._setParent = function (value) {\n this._parent = value;\n };\n Object.defineProperty(Node.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"children\", {\n get: function () {\n return this._children;\n },\n enumerable: true,\n configurable: true\n });\n Node.prototype.countChildren = function (depth) {\n if (depth === void 0) { depth = Node.MAX_SAFE_INTEGER; }\n if (depth <= 0) {\n return 0;\n }\n var children = this.children;\n var n = children.length;\n var size = n;\n for (var i = 0; i < n; i++) {\n size += children[i].countChildren(depth - 1);\n }\n return size;\n };\n /**\n * Appends one or more new node instances to this parent.\n * If one needs to:\n * - move a child to the end of the list of children\n * - move a child from one parent to another (including parents in other scenes)\n * one should use the {@link insertBefore} method instead.\n * @param nodes A node or nodes to append.\n */\n Node.prototype.append = function (nodes) {\n // Passing a single parameter to an open-ended version of `append`\n // would be 30-35% slower than this.\n if (Node.isNode(nodes)) {\n nodes = [nodes];\n }\n // The function takes an array rather than having open-ended\n // arguments like `...nodes: Node[]` because the latter is\n // transpiled to a function where the `arguments` object\n // is copied to a temporary array inside a loop.\n // So an array is created either way. And if we already have\n // an array of nodes we want to add, we have to use the prohibitively\n // expensive spread operator to pass it to the function,\n // and, on top of that, the copy of the `arguments` is still made.\n var n = nodes.length;\n for (var i = 0; i < n; i++) {\n var node = nodes[i];\n if (node.parent) {\n throw new Error(node + \" already belongs to another parent: \" + node.parent + \".\");\n }\n if (node.scene) {\n throw new Error(node + \" already belongs a scene: \" + node.scene + \".\");\n }\n if (this.childSet[node.id]) {\n // Cast to `any` to avoid `Property 'name' does not exist on type 'Function'`.\n throw new Error(\"Duplicate \" + node.constructor.name + \" node: \" + node);\n }\n this._children.push(node);\n this.childSet[node.id] = true;\n node._setParent(this);\n node._setScene(this.scene);\n }\n this.dirty = true;\n };\n Node.prototype.appendChild = function (node) {\n if (node.parent) {\n throw new Error(node + \" already belongs to another parent: \" + node.parent + \".\");\n }\n if (node.scene) {\n throw new Error(node + \" already belongs a scene: \" + node.scene + \".\");\n }\n if (this.childSet[node.id]) {\n // Cast to `any` to avoid `Property 'name' does not exist on type 'Function'`.\n throw new Error(\"Duplicate \" + node.constructor.name + \" node: \" + node);\n }\n this._children.push(node);\n this.childSet[node.id] = true;\n node._setParent(this);\n node._setScene(this.scene);\n this.dirty = true;\n return node;\n };\n Node.prototype.removeChild = function (node) {\n if (node.parent === this) {\n var i = this.children.indexOf(node);\n if (i >= 0) {\n this._children.splice(i, 1);\n delete this.childSet[node.id];\n node._setParent(undefined);\n node._setScene(undefined);\n this.dirty = true;\n return node;\n }\n }\n throw new Error(\"The node to be removed is not a child of this node.\");\n };\n /**\n * Inserts the node `node` before the existing child node `nextNode`.\n * If `nextNode` is null, insert `node` at the end of the list of children.\n * If the `node` belongs to another parent, it is first removed.\n * Returns the `node`.\n * @param node\n * @param nextNode\n */\n Node.prototype.insertBefore = function (node, nextNode) {\n var parent = node.parent;\n if (node.parent) {\n node.parent.removeChild(node);\n }\n if (nextNode && nextNode.parent === this) {\n var i = this.children.indexOf(nextNode);\n if (i >= 0) {\n this._children.splice(i, 0, node);\n this.childSet[node.id] = true;\n node._setParent(this);\n node._setScene(this.scene);\n }\n else {\n throw new Error(nextNode + \" has \" + parent + \" as the parent, \"\n + \"but is not in its list of children.\");\n }\n this.dirty = true;\n }\n else {\n this.append(node);\n }\n return node;\n };\n Object.defineProperty(Node.prototype, \"nextSibling\", {\n get: function () {\n var parent = this.parent;\n if (parent) {\n var children = parent.children;\n var index = children.indexOf(this);\n if (index >= 0 && index <= children.length - 1) {\n return children[index + 1];\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Calculates the combined inverse transformation for this node,\n * and uses it to convert the given transformed point\n * to the untransformed one.\n * @param x\n * @param y\n */\n Node.prototype.transformPoint = function (x, y) {\n var matrix = Matrix.flyweight(this.matrix);\n var parent = this.parent;\n while (parent) {\n matrix.preMultiplySelf(parent.matrix);\n parent = parent.parent;\n }\n return matrix.invertSelf().transformPoint(x, y);\n };\n Object.defineProperty(Node.prototype, \"dirtyTransform\", {\n get: function () {\n return this._dirtyTransform;\n },\n set: function (value) {\n this._dirtyTransform = value;\n // TODO: replace this with simply `this.dirty = true`,\n // see `set dirty` method.\n if (value) {\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"scalingX\", {\n get: function () {\n return this._scalingX;\n },\n set: function (value) {\n if (this._scalingX !== value) {\n this._scalingX = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"scalingY\", {\n get: function () {\n return this._scalingY;\n },\n set: function (value) {\n if (this._scalingY !== value) {\n this._scalingY = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"scalingCenterX\", {\n get: function () {\n return this._scalingCenterX;\n },\n set: function (value) {\n if (this._scalingCenterX !== value) {\n this._scalingCenterX = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"scalingCenterY\", {\n get: function () {\n return this._scalingCenterY;\n },\n set: function (value) {\n if (this._scalingCenterY !== value) {\n this._scalingCenterY = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"rotationCenterX\", {\n get: function () {\n return this._rotationCenterX;\n },\n set: function (value) {\n if (this._rotationCenterX !== value) {\n this._rotationCenterX = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"rotationCenterY\", {\n get: function () {\n return this._rotationCenterY;\n },\n set: function (value) {\n if (this._rotationCenterY !== value) {\n this._rotationCenterY = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"rotation\", {\n get: function () {\n return this._rotation;\n },\n set: function (value) {\n if (this._rotation !== value) {\n this._rotation = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"rotationDeg\", {\n get: function () {\n return this.rotation / Math.PI * 180;\n },\n /**\n * For performance reasons the rotation angle's internal representation\n * is in radians. Therefore, don't expect to get the same number you set.\n * Even with integer angles about a quarter of them from 0 to 359 cannot\n * be converted to radians and back without precision loss.\n * For example:\n *\n * node.rotationDeg = 11;\n * console.log(node.rotationDeg); // 10.999999999999998\n *\n * @param value Rotation angle in degrees.\n */\n set: function (value) {\n this.rotation = value / 180 * Math.PI;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"translationX\", {\n get: function () {\n return this._translationX;\n },\n set: function (value) {\n if (this._translationX !== value) {\n this._translationX = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"translationY\", {\n get: function () {\n return this._translationY;\n },\n set: function (value) {\n if (this._translationY !== value) {\n this._translationY = value;\n this.dirtyTransform = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Node.prototype.isPointInNode = function (x, y) {\n return false;\n };\n /**\n * Hit testing method.\n * Recursively checks if the given point is inside this node or any of its children.\n * Returns the first matching node or `undefined`.\n * Nodes that render later (show on top) are hit tested first.\n * @param x\n * @param y\n */\n Node.prototype.pickNode = function (x, y) {\n if (!this.visible || this.pointerEvents === PointerEvents.None || !this.isPointInNode(x, y)) {\n return;\n }\n var children = this.children;\n if (children.length) {\n // Nodes added later should be hit-tested first,\n // as they are rendered on top of the previously added nodes.\n for (var i = children.length - 1; i >= 0; i--) {\n var hit = children[i].pickNode(x, y);\n if (hit) {\n return hit;\n }\n }\n }\n else if (!this.isContainerNode) { // a leaf node, but not a container leaf\n return this;\n }\n };\n Node.prototype.computeBBox = function () { return; };\n Node.prototype.computeBBoxCenter = function () {\n var bbox = this.computeBBox && this.computeBBox();\n if (bbox) {\n return [\n bbox.x + bbox.width * 0.5,\n bbox.y + bbox.height * 0.5\n ];\n }\n return [0, 0];\n };\n Node.prototype.computeTransformMatrix = function () {\n // TODO: transforms without center of scaling and rotation correspond directly\n // to `setAttribute('transform', 'translate(tx, ty) rotate(rDeg) scale(sx, sy)')`\n // in SVG. Our use cases will mostly require positioning elements (rects, circles)\n // within a group, rotating groups at right angles (e.g. for axis) and translating\n // groups. We shouldn't even need `scale(1, -1)` (invert vertically), since this\n // can be done using D3-like scales already by inverting the output range.\n // So for now, just assume that centers of scaling and rotation are at the origin.\n // const [bbcx, bbcy] = this.computeBBoxCenter();\n var _a = [0, 0], bbcx = _a[0], bbcy = _a[1];\n var sx = this.scalingX;\n var sy = this.scalingY;\n var scx;\n var scy;\n if (sx === 1 && sy === 1) {\n scx = 0;\n scy = 0;\n }\n else {\n scx = this.scalingCenterX === null ? bbcx : this.scalingCenterX;\n scy = this.scalingCenterY === null ? bbcy : this.scalingCenterY;\n }\n var r = this.rotation;\n var cos = Math.cos(r);\n var sin = Math.sin(r);\n var rcx;\n var rcy;\n if (r === 0) {\n rcx = 0;\n rcy = 0;\n }\n else {\n rcx = this.rotationCenterX === null ? bbcx : this.rotationCenterX;\n rcy = this.rotationCenterY === null ? bbcy : this.rotationCenterY;\n }\n var tx = this.translationX;\n var ty = this.translationY;\n // The transform matrix `M` is a result of the following transformations:\n // 1) translate the center of scaling to the origin\n // 2) scale\n // 3) translate back\n // 4) translate the center of rotation to the origin\n // 5) rotate\n // 6) translate back\n // 7) translate\n // (7) (6) (5) (4) (3) (2) (1)\n // | 1 0 tx | | 1 0 rcx | | cos -sin 0 | | 1 0 -rcx | | 1 0 scx | | sx 0 0 | | 1 0 -scx |\n // M = | 0 1 ty | * | 0 1 rcy | * | sin cos 0 | * | 0 1 -rcy | * | 0 1 scy | * | 0 sy 0 | * | 0 1 -scy |\n // | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 1 | | 0 0 0 | | 0 0 1 |\n // Translation after steps 1-4 above:\n var tx4 = scx * (1 - sx) - rcx;\n var ty4 = scy * (1 - sy) - rcy;\n this.dirtyTransform = false;\n this.matrix.setElements([\n cos * sx, sin * sx,\n -sin * sy, cos * sy,\n cos * tx4 - sin * ty4 + rcx + tx,\n sin * tx4 + cos * ty4 + rcy + ty\n ]).inverseTo(this.inverseMatrix);\n };\n Object.defineProperty(Node.prototype, \"dirty\", {\n get: function () {\n return this._dirty;\n },\n set: function (value) {\n // TODO: check if we are already dirty (e.g. if (this._dirty !== value))\n // if we are, then all parents and the scene have been\n // notified already, and we are doing redundant work\n // (but test if this is indeed the case)\n this._dirty = value;\n if (value) {\n if (this.parent) {\n this.parent.dirty = true;\n }\n else if (this.scene) {\n this.scene.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Node.prototype, \"visible\", {\n get: function () {\n return this._visible;\n },\n set: function (value) {\n if (this._visible !== value) {\n this._visible = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Node.MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; // Number.MAX_SAFE_INTEGER\n return Node;\n}());\nexport { Node };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { _, Autowired, BeanStub, CellRangeType, ChartType, PostConstruct } from \"@ag-grid-community/core\";\nimport { ChartDatasource } from \"./chartDatasource\";\nvar ChartDataModel = /** @class */ (function (_super) {\n __extends(ChartDataModel, _super);\n function ChartDataModel(params) {\n var _this = _super.call(this) || this;\n _this.dimensionColState = [];\n _this.valueColState = [];\n _this.detached = false;\n _this.columnNames = {};\n _this.isPivotActive = function () { return _this.columnController.isPivotActive(); };\n _this.isPivotMode = function () { return _this.columnController.isPivotMode(); };\n _this.isPivotChart = function () { return _this.pivotChart; };\n _this.getChartId = function () { return _this.chartId; };\n _this.getValueColState = function () { return _this.valueColState.map(_this.displayNameMapper.bind(_this)); };\n _this.getDimensionColState = function () { return _this.dimensionColState; };\n _this.getCellRanges = function () { return [_this.dimensionCellRange, _this.valueCellRange].filter(function (r) { return r; }); };\n _this.getChartType = function () { return _this.chartType; };\n _this.isSuppressChartRanges = function () { return _this.suppressChartRanges; };\n _this.isDetached = function () { return _this.detached; };\n _this.getSelectedValueColState = function () { return _this.getValueColState().filter(function (cs) { return cs.selected; }); };\n _this.getSelectedValueCols = function () { return _this.valueColState.filter(function (cs) { return cs.selected; }).map(function (cs) { return cs.column; }); };\n _this.getSelectedDimension = function () { return _this.dimensionColState.filter(function (cs) { return cs.selected; })[0]; };\n _this.getColDisplayName = function (col) { return _this.columnController.getDisplayNameForColumn(col, 'chart'); };\n _this.pivotChart = params.pivotChart;\n _this.chartType = params.chartType;\n _this.aggFunc = params.aggFunc;\n _this.referenceCellRange = params.cellRange;\n _this.suppressChartRanges = params.suppressChartRanges;\n // this is used to associate chart ranges with charts\n _this.chartId = _this.generateId();\n return _this;\n }\n ChartDataModel.prototype.init = function () {\n this.datasource = this.wireBean(new ChartDatasource());\n this.updateCellRanges();\n };\n ChartDataModel.prototype.updateCellRanges = function (updatedColState) {\n if (this.valueCellRange) {\n this.referenceCellRange = this.valueCellRange;\n }\n var _a = this.getAllChartColumns(), dimensionCols = _a.dimensionCols, valueCols = _a.valueCols;\n var allColsFromRanges = this.getAllColumnsFromRanges();\n if (updatedColState) {\n this.updateColumnState(updatedColState);\n }\n this.setDimensionCellRange(dimensionCols, allColsFromRanges, updatedColState);\n this.setValueCellRange(valueCols, allColsFromRanges, updatedColState);\n if (!updatedColState) {\n this.resetColumnState();\n }\n this.updateData();\n };\n ChartDataModel.prototype.getData = function () {\n return this.chartData;\n };\n ChartDataModel.prototype.setChartType = function (chartType) {\n var isCurrentMultiCategory = this.isMultiCategoryChart();\n this.chartType = chartType;\n // switching between single and multi-category charts requires data to be reformatted\n if (isCurrentMultiCategory !== this.isMultiCategoryChart()) {\n this.updateData();\n }\n };\n ChartDataModel.prototype.isGrouping = function () {\n var usingTreeData = this.gridOptionsWrapper.isTreeData();\n var groupedCols = usingTreeData ? null : this.columnController.getRowGroupColumns();\n var groupActive = usingTreeData || (groupedCols && groupedCols.length > 0);\n // charts only group when the selected category is a group column\n var groupCols = this.columnController.getGroupDisplayColumns();\n var colId = this.getSelectedDimension().colId;\n var groupDimensionSelected = groupCols\n .map(function (col) { return col.getColId(); })\n .some(function (id) { return id === colId; });\n return groupActive && groupDimensionSelected;\n };\n ChartDataModel.prototype.toggleDetached = function () {\n this.detached = !this.detached;\n };\n ChartDataModel.prototype.createCellRange = function (type) {\n var columns = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n columns[_i - 1] = arguments[_i];\n }\n return {\n id: this.chartId,\n startRow: this.referenceCellRange.startRow,\n endRow: this.referenceCellRange.endRow,\n columns: columns,\n startColumn: type === CellRangeType.DIMENSION ? columns[0] : this.referenceCellRange.startColumn,\n type: type\n };\n };\n ChartDataModel.prototype.getAllColumnsFromRanges = function () {\n if (this.pivotChart) {\n return _.convertToSet(this.columnController.getAllDisplayedColumns());\n }\n ;\n var columns = this.dimensionCellRange || this.valueCellRange ? [] : this.referenceCellRange.columns;\n if (this.dimensionCellRange) {\n columns.push.apply(columns, this.dimensionCellRange.columns);\n }\n if (this.valueCellRange) {\n columns.push.apply(columns, this.valueCellRange.columns);\n }\n return _.convertToSet(columns);\n };\n ChartDataModel.prototype.getRowIndexes = function () {\n var startRow = 0, endRow = 0;\n var rangeController = this.rangeController;\n var range = this.valueCellRange;\n if (rangeController && range) {\n startRow = rangeController.getRangeStartRow(range).rowIndex;\n endRow = rangeController.getRangeEndRow(range).rowIndex;\n }\n return { startRow: startRow, endRow: endRow };\n };\n ChartDataModel.prototype.getAllChartColumns = function () {\n var _this = this;\n var displayedCols = this.columnController.getAllDisplayedColumns();\n var dimensionCols = new Set();\n var valueCols = new Set();\n displayedCols.forEach(function (col) {\n var colDef = col.getColDef();\n var chartDataType = colDef.chartDataType;\n if (chartDataType) {\n // chart data type was specified explicitly\n switch (chartDataType) {\n case 'category':\n dimensionCols.add(col);\n return;\n case 'series':\n valueCols.add(col);\n return;\n case 'excluded':\n return;\n default:\n console.warn(\"ag-Grid: unexpected chartDataType value '\" + chartDataType + \"' supplied, instead use 'category', 'series' or 'excluded'\");\n break;\n }\n }\n if (colDef.colId === 'ag-Grid-AutoColumn') {\n dimensionCols.add(col);\n return;\n }\n if (!col.isPrimary()) {\n valueCols.add(col);\n return;\n }\n // if 'chartDataType' is not provided then infer type based data contained in first row\n (_this.isNumberCol(col) ? valueCols : dimensionCols).add(col);\n });\n return { dimensionCols: dimensionCols, valueCols: valueCols };\n };\n ChartDataModel.prototype.isNumberCol = function (col) {\n if (col.getColId() === 'ag-Grid-AutoColumn') {\n return false;\n }\n var row = this.rowRenderer.getRowNode({ rowIndex: 0, rowPinned: undefined });\n if (!row) {\n return false;\n }\n var cellValue = this.valueService.getValue(col, row);\n if (cellValue == null) {\n cellValue = this.extractLeafData(row, col);\n }\n if (cellValue != null && typeof cellValue.toNumber === 'function') {\n cellValue = cellValue.toNumber();\n }\n return typeof cellValue === 'number';\n };\n ChartDataModel.prototype.extractLeafData = function (row, col) {\n if (!row.allLeafChildren) {\n return null;\n }\n for (var i = 0; i < row.allLeafChildren.length; i++) {\n var childRow = row.allLeafChildren[i];\n var value = this.valueService.getValue(col, childRow);\n if (value != null) {\n return value;\n }\n }\n return null;\n };\n ChartDataModel.prototype.displayNameMapper = function (col) {\n var columnNames = this.columnNames[col.colId];\n col.displayName = columnNames ? columnNames.join(' - ') : this.getColDisplayName(col.column);\n return col;\n };\n ChartDataModel.prototype.isMultiCategoryChart = function () {\n return !_.includes([ChartType.Pie, ChartType.Doughnut, ChartType.Scatter, ChartType.Bubble], this.chartType);\n };\n ChartDataModel.prototype.generateId = function () {\n return 'id-' + Math.random().toString(36).substr(2, 16);\n };\n ChartDataModel.prototype.updateData = function () {\n var _a = this.getRowIndexes(), startRow = _a.startRow, endRow = _a.endRow;\n if (this.pivotChart) {\n this.resetColumnState();\n }\n this.grouping = this.isGrouping();\n var params = {\n aggFunc: this.aggFunc,\n dimensionCols: [this.getSelectedDimension()],\n grouping: this.grouping,\n pivoting: this.isPivotActive(),\n multiCategories: this.isMultiCategoryChart(),\n valueCols: this.getSelectedValueCols(),\n startRow: startRow,\n endRow: endRow\n };\n var result = this.datasource.getData(params);\n this.chartData = result.data;\n this.columnNames = result.columnNames;\n };\n ChartDataModel.prototype.resetColumnState = function () {\n var _this = this;\n var _a = this.getAllChartColumns(), dimensionCols = _a.dimensionCols, valueCols = _a.valueCols;\n var allCols = this.getAllColumnsFromRanges();\n var isInitialising = this.valueColState.length < 1;\n this.dimensionColState = [];\n this.valueColState = [];\n var hasSelectedDimension = false;\n var order = 1;\n dimensionCols.forEach(function (column) {\n var selected = !hasSelectedDimension && allCols.has(column);\n _this.dimensionColState.push({\n column: column,\n colId: column.getColId(),\n displayName: _this.getColDisplayName(column),\n selected: selected,\n order: order++\n });\n if (selected) {\n hasSelectedDimension = true;\n }\n });\n var defaultCategory = {\n colId: ChartDataModel.DEFAULT_CATEGORY,\n displayName: '(None)',\n selected: !hasSelectedDimension,\n order: 0\n };\n this.dimensionColState.unshift(defaultCategory);\n var valueColumnsFromReferenceRange = this.referenceCellRange.columns.filter(function (c) { return valueCols.has(c); });\n valueCols.forEach(function (column) {\n // first time the value cell range is set, preserve the column order from the supplied range\n if (isInitialising && _.includes(_this.referenceCellRange.columns, column)) {\n column = valueColumnsFromReferenceRange.shift();\n }\n _this.valueColState.push({\n column: column,\n colId: column.getColId(),\n displayName: _this.getColDisplayName(column),\n selected: allCols.has(column),\n order: order++\n });\n });\n };\n ChartDataModel.prototype.updateColumnState = function (updatedCol) {\n var idsMatch = function (cs) { return cs.colId === updatedCol.colId; };\n var _a = this, dimensionColState = _a.dimensionColState, valueColState = _a.valueColState;\n if (dimensionColState.filter(idsMatch).length > 0) {\n // only one dimension should be selected\n dimensionColState.forEach(function (cs) { return cs.selected = idsMatch(cs); });\n }\n else {\n // just update the selected value on the supplied value column\n valueColState.filter(idsMatch).forEach(function (cs) { return cs.selected = updatedCol.selected; });\n }\n var allColumns = __spreadArrays(dimensionColState, valueColState);\n var orderedColIds = [];\n // calculate new order\n allColumns.forEach(function (col, i) {\n if (i === updatedCol.order) {\n orderedColIds.push(updatedCol.colId);\n }\n if (col.colId !== updatedCol.colId) {\n orderedColIds.push(col.colId);\n }\n });\n // update col state with new order\n allColumns.forEach(function (col) {\n var order = orderedColIds.indexOf(col.colId);\n col.order = order >= 0 ? orderedColIds.indexOf(col.colId) : allColumns.length - 1;\n });\n this.reorderColState();\n };\n ChartDataModel.prototype.reorderColState = function () {\n var _a = this, dimensionColState = _a.dimensionColState, valueColState = _a.valueColState;\n dimensionColState.sort(function (a, b) { return a.order - b.order; });\n valueColState.sort(function (a, b) { return a.order - b.order; });\n };\n ChartDataModel.prototype.setDimensionCellRange = function (dimensionCols, colsInRange, updatedColState) {\n var _this = this;\n this.dimensionCellRange = undefined;\n var dimensionColState = this.dimensionColState;\n if (!updatedColState && !dimensionColState.length) {\n // use first dimension column in range by default\n dimensionCols.forEach(function (col) {\n if (_this.dimensionCellRange || !colsInRange.has(col)) {\n return;\n }\n _this.dimensionCellRange = _this.createCellRange(CellRangeType.DIMENSION, col);\n });\n return;\n }\n var selectedDimensionColState = updatedColState;\n if (!selectedDimensionColState || !dimensionCols.has(selectedDimensionColState.column)) {\n selectedDimensionColState = this.dimensionColState.filter(function (cs) { return cs.selected; })[0];\n }\n if (selectedDimensionColState && selectedDimensionColState.colId !== ChartDataModel.DEFAULT_CATEGORY) {\n this.dimensionCellRange = this.createCellRange(CellRangeType.DIMENSION, selectedDimensionColState.column);\n }\n };\n ChartDataModel.prototype.setValueCellRange = function (valueCols, colsInRange, updatedColState) {\n this.valueCellRange = undefined;\n var selectedValueCols = [];\n valueCols.forEach(function (col) {\n if (updatedColState && updatedColState.colId === col.getColId()) {\n if (updatedColState.selected) {\n selectedValueCols.push(updatedColState.column);\n }\n }\n else if (colsInRange.has(col)) {\n selectedValueCols.push(col);\n }\n });\n if (selectedValueCols.length > 0) {\n var orderedColIds_1 = [];\n if (this.valueColState.length > 0) {\n orderedColIds_1 = this.valueColState.map(function (c) { return c.colId; });\n }\n else {\n colsInRange.forEach(function (c) { return orderedColIds_1.push(c.getColId()); });\n }\n selectedValueCols.sort(function (a, b) { return orderedColIds_1.indexOf(a.getColId()) - orderedColIds_1.indexOf(b.getColId()); });\n this.valueCellRange = this.createCellRange.apply(this, __spreadArrays([CellRangeType.VALUE], selectedValueCols));\n }\n };\n ChartDataModel.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.datasource) {\n this.datasource.destroy();\n }\n };\n ChartDataModel.DEFAULT_CATEGORY = 'AG-GRID-DEFAULT-CATEGORY';\n __decorate([\n Autowired('columnController')\n ], ChartDataModel.prototype, \"columnController\", void 0);\n __decorate([\n Autowired('gridOptionsWrapper')\n ], ChartDataModel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n Autowired('valueService')\n ], ChartDataModel.prototype, \"valueService\", void 0);\n __decorate([\n Autowired('rangeController')\n ], ChartDataModel.prototype, \"rangeController\", void 0);\n __decorate([\n Autowired('rowRenderer')\n ], ChartDataModel.prototype, \"rowRenderer\", void 0);\n __decorate([\n PostConstruct\n ], ChartDataModel.prototype, \"init\", null);\n return ChartDataModel;\n}(BeanStub));\nexport { ChartDataModel };\n","export var borneo = {\n fills: [\n '#f3622d',\n '#fba71b',\n '#57b757',\n '#41a9c9',\n '#4258c9',\n '#9a42c8',\n '#c84164',\n '#888888'\n ],\n strokes: [\n '#aa4520',\n '#b07513',\n '#3d803d',\n '#2d768d',\n '#2e3e8d',\n '#6c2e8c',\n '#8c2d46',\n '#5f5f5f'\n ]\n};\nexport var material = {\n fills: [\n '#f44336',\n '#e91e63',\n '#9c27b0',\n '#673ab7',\n '#3f51b5',\n '#2196f3',\n '#03a9f4',\n '#00bcd4',\n '#009688',\n '#4caf50',\n '#8bc34a',\n '#cddc39',\n '#ffeb3b',\n '#ffc107',\n '#ff9800',\n '#ff5722'\n ],\n strokes: [\n '#ab2f26',\n '#a31545',\n '#6d1b7b',\n '#482980',\n '#2c397f',\n '#1769aa',\n '#0276ab',\n '#008494',\n '#00695f',\n '#357a38',\n '#618834',\n '#909a28',\n '#b3a429',\n '#b38705',\n '#b36a00',\n '#b33d18'\n ]\n};\nexport var pastel = {\n fills: [\n '#c16068',\n '#a2bf8a',\n '#ebcc87',\n '#80a0c3',\n '#b58dae',\n '#85c0d1'\n ],\n strokes: [\n '#874349',\n '#718661',\n '#a48f5f',\n '#5a7088',\n '#7f637a',\n '#5d8692'\n ]\n};\nexport var bright = {\n fills: [\n '#5BC0EB',\n '#FDE74C',\n '#9BC53D',\n '#E55934',\n '#FA7921',\n '#fa3081'\n ],\n strokes: [\n '#4086a4',\n '#b1a235',\n '#6c8a2b',\n '#a03e24',\n '#af5517',\n '#af225a'\n ]\n};\nexport var flat = {\n fills: [\n '#febe76',\n '#ff7979',\n '#badc58',\n '#f9ca23',\n '#f0932b',\n '#eb4c4b',\n '#6ab04c',\n '#7ed6df',\n '#e056fd',\n '#686de0'\n ],\n strokes: [\n '#b28553',\n '#b35555',\n '#829a3e',\n '#ae8d19',\n '#a8671e',\n '#a43535',\n '#4a7b35',\n '#58969c',\n '#9d3cb1',\n '#494c9d'\n ]\n};\nexport default borneo;\nexport var palettes = (function () {\n var map = new Map();\n map.set('borneo', borneo);\n map.set('material', material);\n map.set('pastel', pastel);\n map.set('bright', bright);\n map.set('flat', flat);\n return map;\n})();\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, BeanStub, ChartType, Events, PostConstruct, _, } from \"@ag-grid-community/core\";\nimport { ChartDataModel } from \"./chartDataModel\";\nimport { palettes } from \"../../charts/chart/palettes\";\nvar ChartController = /** @class */ (function (_super) {\n __extends(ChartController, _super);\n function ChartController(model, paletteName) {\n if (paletteName === void 0) { paletteName = 'borneo'; }\n var _this = _super.call(this) || this;\n _this.model = model;\n _this.getChartType = function () { return _this.model.getChartType(); };\n _this.isPivotChart = function () { return _this.model.isPivotChart(); };\n _this.chartPaletteName = paletteName;\n return _this;\n }\n ChartController.prototype.init = function () {\n var _this = this;\n this.setChartRange();\n this.addDestroyableEventListener(this.eventService, Events.EVENT_RANGE_SELECTION_CHANGED, function (event) {\n if (event.id && event.id === _this.model.getChartId()) {\n _this.updateForRangeChange();\n }\n });\n this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_MOVED, this.updateForGridChange.bind(this));\n this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_PINNED, this.updateForGridChange.bind(this));\n this.addDestroyableEventListener(this.eventService, Events.EVENT_COLUMN_VISIBLE, this.updateForGridChange.bind(this));\n this.addDestroyableEventListener(this.eventService, Events.EVENT_MODEL_UPDATED, this.updateForDataChange.bind(this));\n this.addDestroyableEventListener(this.eventService, Events.EVENT_CELL_VALUE_CHANGED, this.updateForDataChange.bind(this));\n };\n ChartController.prototype.updateForGridChange = function () {\n if (this.model.isDetached()) {\n return;\n }\n this.model.updateCellRanges();\n this.setChartRange();\n };\n ChartController.prototype.updateForDataChange = function () {\n if (this.model.isDetached()) {\n return;\n }\n this.model.updateData();\n this.raiseChartUpdatedEvent();\n };\n ChartController.prototype.updateForRangeChange = function () {\n this.updateForGridChange();\n this.raiseChartRangeSelectionChangedEvent();\n };\n ChartController.prototype.updateForPanelChange = function (updatedCol) {\n this.model.updateCellRanges(updatedCol);\n this.setChartRange();\n this.raiseChartRangeSelectionChangedEvent();\n };\n ChartController.prototype.getChartModel = function () {\n return {\n chartId: this.model.getChartId(),\n chartType: this.model.getChartType(),\n chartPalette: this.getPaletteName(),\n chartOptions: this.chartProxy.getChartOptions(),\n cellRange: this.getCurrentCellRangeParams()\n };\n };\n ChartController.prototype.getPaletteName = function () {\n return this.chartPaletteName;\n };\n ChartController.prototype.getPalettes = function () {\n var customPalette = this.chartProxy.getCustomPalette();\n if (customPalette) {\n var map = new Map();\n map.set(undefined, customPalette);\n return map;\n }\n return palettes;\n };\n ChartController.prototype.setChartType = function (chartType) {\n this.model.setChartType(chartType);\n this.raiseChartUpdatedEvent();\n this.raiseChartOptionsChangedEvent();\n };\n ChartController.prototype.setChartPaletteName = function (palette) {\n this.chartPaletteName = palette;\n this.raiseChartUpdatedEvent();\n this.raiseChartOptionsChangedEvent();\n };\n ChartController.prototype.getColStateForMenu = function () {\n return { dimensionCols: this.model.getDimensionColState(), valueCols: this.model.getValueColState() };\n };\n ChartController.prototype.isDefaultCategorySelected = function () {\n var selectedDimension = this.model.getSelectedDimension().colId;\n return selectedDimension && selectedDimension === ChartDataModel.DEFAULT_CATEGORY;\n };\n ChartController.prototype.setChartRange = function () {\n if (this.rangeController && !this.model.isSuppressChartRanges() && !this.model.isDetached()) {\n this.rangeController.setCellRanges(this.model.getCellRanges());\n }\n this.raiseChartUpdatedEvent();\n };\n ChartController.prototype.detachChartRange = function () {\n // when chart is detached it won't listen to changes from the grid\n this.model.toggleDetached();\n if (this.model.isDetached()) {\n // remove range from grid\n if (this.rangeController) {\n this.rangeController.setCellRanges([]);\n }\n }\n else {\n // update chart data may have changed\n this.updateForGridChange();\n }\n };\n ChartController.prototype.setChartProxy = function (chartProxy) {\n this.chartProxy = chartProxy;\n };\n ChartController.prototype.getChartProxy = function () {\n return this.chartProxy;\n };\n ChartController.prototype.isActiveXYChart = function () {\n return _.includes([ChartType.Scatter, ChartType.Bubble], this.getChartType());\n };\n ChartController.prototype.getCurrentCellRangeParams = function () {\n var cellRanges = this.model.getCellRanges();\n var firstCellRange = cellRanges[0];\n return {\n rowStartIndex: firstCellRange.startRow && firstCellRange.startRow.rowIndex,\n rowStartPinned: firstCellRange.startRow && firstCellRange.startRow.rowPinned,\n rowEndIndex: firstCellRange.endRow && firstCellRange.endRow.rowIndex,\n rowEndPinned: firstCellRange.endRow && firstCellRange.endRow.rowPinned,\n columns: cellRanges.reduce(function (columns, value) { return columns.concat(value.columns.map(function (c) { return c.getId(); })); }, [])\n };\n };\n ChartController.prototype.raiseChartUpdatedEvent = function () {\n var event = Object.freeze({\n type: ChartController.EVENT_CHART_UPDATED\n });\n this.dispatchEvent(event);\n };\n ChartController.prototype.raiseChartOptionsChangedEvent = function () {\n var event = Object.freeze({\n type: Events.EVENT_CHART_OPTIONS_CHANGED,\n chartType: this.getChartType(),\n chartPalette: this.chartPaletteName,\n chartOptions: this.getChartProxy().getChartOptions(),\n });\n this.eventService.dispatchEvent(event);\n };\n ChartController.prototype.raiseChartRangeSelectionChangedEvent = function () {\n var event = Object.freeze({\n type: Events.EVENT_CHART_RANGE_SELECTION_CHANGED,\n id: this.model.getChartId(),\n cellRange: this.getCurrentCellRangeParams(),\n api: this.gridApi,\n columnApi: this.columnApi,\n });\n this.eventService.dispatchEvent(event);\n };\n ChartController.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.rangeController) {\n this.rangeController.setCellRanges([]);\n }\n };\n ChartController.EVENT_CHART_UPDATED = 'chartUpdated';\n __decorate([\n Autowired('eventService')\n ], ChartController.prototype, \"eventService\", void 0);\n __decorate([\n Autowired('rangeController')\n ], ChartController.prototype, \"rangeController\", void 0);\n __decorate([\n Autowired('gridApi')\n ], ChartController.prototype, \"gridApi\", void 0);\n __decorate([\n Autowired('columnApi')\n ], ChartController.prototype, \"columnApi\", void 0);\n __decorate([\n PostConstruct\n ], ChartController.prototype, \"init\", null);\n return ChartController;\n}(BeanStub));\nexport { ChartController };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { _, AgAbstractField, AgCheckbox, AgGroupComponent, AgRadioButton, Autowired, Component, PostConstruct, ChartType, DragSourceType, VerticalDirection, AgToggleButton } from \"@ag-grid-community/core\";\nimport { ChartController } from \"../../chartController\";\nvar ChartDataPanel = /** @class */ (function (_super) {\n __extends(ChartDataPanel, _super);\n function ChartDataPanel(chartController) {\n var _this = _super.call(this, ChartDataPanel.TEMPLATE) || this;\n _this.columnComps = new Map();\n _this.chartController = chartController;\n return _this;\n }\n ChartDataPanel.prototype.init = function () {\n this.updatePanels();\n this.addDestroyableEventListener(this.chartController, ChartController.EVENT_CHART_UPDATED, this.updatePanels.bind(this));\n };\n ChartDataPanel.prototype.destroy = function () {\n this.clearComponents();\n _super.prototype.destroy.call(this);\n };\n ChartDataPanel.prototype.updatePanels = function () {\n var _this = this;\n var currentChartType = this.chartType;\n var _a = this.chartController.getColStateForMenu(), dimensionCols = _a.dimensionCols, valueCols = _a.valueCols;\n var colIds = dimensionCols.map(function (c) { return c.colId; }).concat(valueCols.map(function (c) { return c.colId; }));\n this.chartType = this.chartController.getChartType();\n if (_.areEqual(_.keys(this.columnComps), colIds) && this.chartType === currentChartType) {\n // if possible, we just update existing components\n __spreadArrays(dimensionCols, valueCols).forEach(function (col) {\n _this.columnComps.get(col.colId).setValue(col.selected, true);\n });\n if (this.chartController.isActiveXYChart()) {\n var getSeriesLabel_1 = this.generateGetSeriesLabel();\n valueCols.forEach(function (col) {\n _this.columnComps.get(col.colId).setLabel(getSeriesLabel_1(col));\n });\n }\n }\n else {\n // otherwise we re-create everything\n this.clearComponents();\n this.createCategoriesGroupComponent(dimensionCols);\n this.createSeriesGroupComponent(valueCols);\n }\n };\n ChartDataPanel.prototype.addComponent = function (parent, component) {\n var eDiv = document.createElement('div');\n eDiv.appendChild(component.getGui());\n parent.appendChild(eDiv);\n };\n ChartDataPanel.prototype.addChangeListener = function (component, columnState) {\n var _this = this;\n this.addDestroyableEventListener(component, AgAbstractField.EVENT_CHANGED, function () {\n columnState.selected = component.getValue();\n _this.chartController.updateForPanelChange(columnState);\n });\n };\n ChartDataPanel.prototype.createCategoriesGroupComponent = function (columns) {\n var _this = this;\n this.categoriesGroupComp = this.wireBean(new AgGroupComponent({\n title: this.getCategoryGroupTitle(),\n enabled: true,\n suppressEnabledCheckbox: true,\n suppressOpenCloseIcons: false\n }));\n var inputName = \"chartDimension\" + this.getCompId();\n columns.forEach(function (col) {\n var comp = _this.categoriesGroupComp.wireDependentBean(new AgRadioButton());\n comp.setLabel(_.escape(col.displayName));\n comp.setValue(col.selected);\n comp.setInputName(inputName);\n _this.addChangeListener(comp, col);\n _this.categoriesGroupComp.addItem(comp);\n _this.columnComps.set(col.colId, comp);\n });\n this.addComponent(this.getGui(), this.categoriesGroupComp);\n };\n ChartDataPanel.prototype.createSeriesGroupComponent = function (columns) {\n var _this = this;\n this.seriesGroupComp = this.wireDependentBean(new AgGroupComponent({\n title: this.getSeriesGroupTitle(),\n enabled: true,\n suppressEnabledCheckbox: true,\n suppressOpenCloseIcons: false\n }));\n if (this.chartController.isActiveXYChart()) {\n var pairedModeToggle = this.seriesGroupComp.wireDependentBean(new AgToggleButton());\n var chartProxy_1 = this.chartController.getChartProxy();\n pairedModeToggle\n .setLabel(this.chartTranslator.translate('paired'))\n .setLabelAlignment('left')\n .setLabelWidth('flex')\n .setInputWidth(40)\n .setValue(chartProxy_1.getSeriesOption('paired') || false)\n .onValueChange(function (newValue) {\n chartProxy_1.setSeriesOption('paired', newValue);\n _this.chartController.updateForGridChange();\n });\n this.seriesGroupComp.addItem(pairedModeToggle);\n }\n var getSeriesLabel = this.generateGetSeriesLabel();\n columns.forEach(function (col) {\n var comp = _this.seriesGroupComp.wireDependentBean(new AgCheckbox());\n comp.addCssClass('ag-data-select-checkbox');\n var label = getSeriesLabel(col);\n comp.setLabel(label);\n comp.setValue(col.selected);\n _this.addChangeListener(comp, col);\n _this.seriesGroupComp.addItem(comp);\n _this.columnComps.set(col.colId, comp);\n _this.addDragHandle(comp, col);\n });\n this.addComponent(this.getGui(), this.seriesGroupComp);\n var dropTarget = {\n getContainer: this.getGui.bind(this),\n onDragging: this.onDragging.bind(this),\n isInterestedIn: this.isInterestedIn.bind(this),\n };\n this.dragAndDropService.addDropTarget(dropTarget);\n };\n ChartDataPanel.prototype.addDragHandle = function (comp, col) {\n var _this = this;\n var eDragHandle = _.createIconNoSpan('columnDrag', this.gridOptionsWrapper);\n _.addCssClass(eDragHandle, 'ag-column-drag');\n comp.getGui().insertAdjacentElement('beforeend', eDragHandle);\n var dragSource = {\n type: DragSourceType.ChartPanel,\n eElement: eDragHandle,\n dragItemName: col.displayName,\n getDragItem: function () { return ({ columns: [col.column] }); },\n onDragStopped: function () { _this.insertIndex = undefined; }\n };\n this.dragAndDropService.addDragSource(dragSource, true);\n this.addDestroyFunc(function () { return _this.dragAndDropService.removeDragSource(dragSource); });\n };\n ChartDataPanel.prototype.generateGetSeriesLabel = function () {\n if (!this.chartController.isActiveXYChart()) {\n return function (col) { return _.escape(col.displayName); };\n }\n var isBubble = this.chartType === ChartType.Bubble;\n var isInPairedMode = this.isInPairedMode();\n var selectedValuesCount = 0;\n var indexToAxisLabel = new Map();\n indexToAxisLabel.set(0, 'X');\n indexToAxisLabel.set(1, 'Y');\n indexToAxisLabel.set(2, 'size');\n return function (col) {\n var escapedLabel = _.escape(col.displayName);\n if (!col.selected) {\n return escapedLabel;\n }\n var axisLabel;\n if (isInPairedMode) {\n axisLabel = indexToAxisLabel.get(selectedValuesCount % (isBubble ? 3 : 2));\n }\n else {\n if (selectedValuesCount === 0) {\n axisLabel = 'X';\n }\n else {\n axisLabel = isBubble && selectedValuesCount % 2 === 0 ? 'size' : 'Y';\n }\n }\n selectedValuesCount++;\n return escapedLabel + \" (\" + axisLabel + \")\";\n };\n };\n ChartDataPanel.prototype.getCategoryGroupTitle = function () {\n return this.chartTranslator.translate(this.chartController.isActiveXYChart() ? 'labels' : 'categories');\n };\n ChartDataPanel.prototype.getSeriesGroupTitle = function () {\n return this.chartTranslator.translate(this.chartController.isActiveXYChart() ? 'xyValues' : 'series');\n };\n ChartDataPanel.prototype.isInPairedMode = function () {\n return this.chartController.isActiveXYChart() && this.chartController.getChartProxy().getSeriesOption('paired');\n };\n ChartDataPanel.prototype.clearComponents = function () {\n _.clearElement(this.getGui());\n if (this.categoriesGroupComp) {\n this.categoriesGroupComp.destroy();\n this.categoriesGroupComp = undefined;\n }\n if (this.seriesGroupComp) {\n this.seriesGroupComp.destroy();\n this.seriesGroupComp = undefined;\n }\n this.columnComps.clear();\n };\n ChartDataPanel.prototype.onDragging = function (draggingEvent) {\n var _this = this;\n if (this.checkInsertIndex(draggingEvent)) {\n var column_1 = draggingEvent.dragItem.columns[0];\n var _a = this.chartController.getColStateForMenu(), dimensionCols = _a.dimensionCols, valueCols = _a.valueCols;\n __spreadArrays(dimensionCols, valueCols).filter(function (state) { return state.column === column_1; })\n .forEach(function (state) {\n state.order = _this.insertIndex;\n _this.chartController.updateForPanelChange(state);\n });\n }\n };\n ChartDataPanel.prototype.checkInsertIndex = function (draggingEvent) {\n if (_.missing(draggingEvent.vDirection)) {\n return false;\n }\n var newIndex = 0;\n var mouseEvent = draggingEvent.event;\n this.columnComps.forEach(function (comp) {\n var rect = comp.getGui().getBoundingClientRect();\n var verticalFit = mouseEvent.clientY >= (draggingEvent.vDirection === VerticalDirection.Down ? rect.top : rect.bottom);\n if (verticalFit) {\n newIndex++;\n }\n });\n var changed = this.insertIndex !== undefined && newIndex !== this.insertIndex;\n this.insertIndex = newIndex;\n return changed;\n };\n ChartDataPanel.prototype.isInterestedIn = function (type) {\n return type === DragSourceType.ChartPanel;\n };\n ChartDataPanel.TEMPLATE = \"
\";\n __decorate([\n Autowired('dragAndDropService')\n ], ChartDataPanel.prototype, \"dragAndDropService\", void 0);\n __decorate([\n Autowired('gridOptionsWrapper')\n ], ChartDataPanel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], ChartDataPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], ChartDataPanel.prototype, \"init\", null);\n return ChartDataPanel;\n}(Component));\nexport { ChartDataPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nvar FontPanel = /** @class */ (function (_super) {\n __extends(FontPanel, _super);\n function FontPanel(params) {\n var _this = _super.call(this) || this;\n _this.activeComps = [];\n _this.params = params;\n return _this;\n }\n FontPanel.prototype.init = function () {\n this.setTemplate(FontPanel.TEMPLATE);\n this.initGroup();\n this.initFontFamilySelect();\n this.initFontWeightStyleSelect();\n this.initFontSizeSelect();\n this.initFontColorPicker();\n };\n FontPanel.prototype.addCompToPanel = function (comp) {\n this.fontGroup.addItem(comp);\n this.activeComps.push(comp);\n };\n FontPanel.prototype.setEnabled = function (enabled) {\n this.fontGroup.setEnabled(enabled);\n };\n FontPanel.prototype.initGroup = function () {\n var _this = this;\n this.fontGroup\n .setTitle(this.params.name || this.chartTranslator.translate('font'))\n .setEnabled(this.params.enabled)\n .hideEnabledCheckbox(!!this.params.suppressEnabledCheckbox)\n .hideOpenCloseIcons(true)\n .onEnableChange(function (enabled) {\n if (_this.params.setEnabled) {\n _this.params.setEnabled(enabled);\n }\n });\n };\n FontPanel.prototype.initFontFamilySelect = function () {\n var _this = this;\n var families = [\n 'Arial, sans-serif',\n 'Aria Black, sans-serif',\n 'Book Antiqua, serif',\n 'Charcoal, sans-serif',\n 'Comic Sans MS, cursive',\n 'Courier, monospace',\n 'Courier New, monospace',\n 'Gadget, sans-serif',\n 'Geneva, sans-serif',\n 'Helvetica, sans-serif',\n 'Impact, sans-serif',\n 'Lucida Console, monospace',\n 'Lucida Grande, sans-serif',\n 'Lucida Sans Unicode, sans-serif',\n 'Monaco, monospace',\n 'Palatino Linotype, serif',\n 'Palatino, serif',\n 'Times New Roman, serif',\n 'Times, serif',\n 'Verdana, sans-serif',\n ];\n var family = this.params.initialFont.family;\n var initialValue = families[0];\n if (family) {\n // check for known values using lowercase\n var lowerCaseValues = families.map(function (f) { return f.toLowerCase(); });\n var valueIndex = lowerCaseValues.indexOf(family.toLowerCase());\n if (valueIndex >= 0) {\n initialValue = families[valueIndex];\n }\n else {\n // add user provided value to list\n var capitalisedFontValue = _.capitalise(family);\n families.push(capitalisedFontValue);\n initialValue = capitalisedFontValue;\n }\n }\n var options = families.sort().map(function (value) { return ({ value: value, text: value }); });\n this.familySelect.addOptions(options)\n .setValue(\"\" + initialValue)\n .onValueChange(function (newValue) { return _this.params.setFont({ family: newValue }); });\n };\n FontPanel.prototype.initFontSizeSelect = function () {\n var _this = this;\n var sizes = [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36];\n var size = this.params.initialFont.size;\n if (!_.includes(sizes, size)) {\n sizes.push(size);\n }\n var options = sizes.sort(function (a, b) { return a - b; }).map(function (value) { return ({ value: \"\" + value, text: \"\" + value }); });\n this.sizeSelect.addOptions(options)\n .setValue(\"\" + size)\n .onValueChange(function (newValue) { return _this.params.setFont({ size: parseInt(newValue, 10) }); });\n this.sizeSelect.setLabel(this.chartTranslator.translate('size'));\n };\n FontPanel.prototype.initFontWeightStyleSelect = function () {\n var _this = this;\n var _a = this.params.initialFont, _b = _a.weight, weight = _b === void 0 ? 'normal' : _b, _c = _a.style, style = _c === void 0 ? 'normal' : _c;\n var weightStyles = [\n { name: 'normal', weight: 'normal', style: 'normal' },\n { name: 'bold', weight: 'bold', style: 'normal' },\n { name: 'italic', weight: 'normal', style: 'italic' },\n { name: 'boldItalic', weight: 'bold', style: 'italic' }\n ];\n var selectedOption = _.find(weightStyles, function (x) { return x.weight === weight && x.style === style; });\n if (!selectedOption) {\n selectedOption = { name: 'predefined', weight: weight, style: style };\n weightStyles.unshift(selectedOption);\n }\n var options = weightStyles.map(function (ws) { return ({\n value: ws.name,\n text: _this.chartTranslator.translate(ws.name),\n }); });\n this.weightStyleSelect.addOptions(options)\n .setValue(selectedOption.name)\n .onValueChange(function (newValue) {\n var selectedWeightStyle = _.find(weightStyles, function (x) { return x.name === newValue; });\n _this.params.setFont({ weight: selectedWeightStyle.weight, style: selectedWeightStyle.style });\n });\n };\n FontPanel.prototype.initFontColorPicker = function () {\n var _this = this;\n this.colorPicker\n .setLabel(this.chartTranslator.translate('color'))\n .setInputWidth(45)\n .setValue(\"\" + this.params.initialFont.color)\n .onValueChange(function (newColor) { return _this.params.setFont({ color: newColor }); });\n };\n FontPanel.prototype.destroyActiveComps = function () {\n this.activeComps.forEach(function (comp) {\n _.removeFromParent(comp.getGui());\n comp.destroy();\n });\n };\n FontPanel.prototype.destroy = function () {\n this.destroyActiveComps();\n _super.prototype.destroy.call(this);\n };\n FontPanel.TEMPLATE = \"
\\n \\n \\n \\n
\\n \\n \\n
\\n
\\n
\";\n __decorate([\n RefSelector('fontGroup')\n ], FontPanel.prototype, \"fontGroup\", void 0);\n __decorate([\n RefSelector('familySelect')\n ], FontPanel.prototype, \"familySelect\", void 0);\n __decorate([\n RefSelector('weightStyleSelect')\n ], FontPanel.prototype, \"weightStyleSelect\", void 0);\n __decorate([\n RefSelector('sizeSelect')\n ], FontPanel.prototype, \"sizeSelect\", void 0);\n __decorate([\n RefSelector('colorPicker')\n ], FontPanel.prototype, \"colorPicker\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], FontPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], FontPanel.prototype, \"init\", null);\n return FontPanel;\n}(Component));\nexport { FontPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector, } from \"@ag-grid-community/core\";\nimport { FontPanel } from \"../fontPanel\";\nvar LegendPanel = /** @class */ (function (_super) {\n __extends(LegendPanel, _super);\n function LegendPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n LegendPanel.prototype.init = function () {\n this.setTemplate(LegendPanel.TEMPLATE);\n this.initLegendGroup();\n this.initLegendPosition();\n this.initLegendPadding();\n this.initLegendItems();\n this.initLabelPanel();\n };\n LegendPanel.prototype.initLegendGroup = function () {\n var _this = this;\n this.legendGroup\n .setTitle(this.chartTranslator.translate(\"legend\"))\n .hideEnabledCheckbox(false)\n .setEnabled(this.chartController.getChartProxy().getChartOption(\"legend.enabled\") || false)\n .toggleGroupExpand(false)\n .onEnableChange(function (enabled) {\n _this.chartController.getChartProxy().setChartOption(\"legend.enabled\", enabled);\n _this.legendGroup.toggleGroupExpand(true);\n });\n };\n LegendPanel.prototype.initLegendPosition = function () {\n var _this = this;\n var positions = [\"top\", \"right\", \"bottom\", \"left\"];\n this.legendPositionSelect\n .setLabel(this.chartTranslator.translate(\"position\"))\n .setLabelWidth(\"flex\")\n .setInputWidth(80)\n .addOptions(positions.map(function (position) { return ({\n value: position,\n text: _this.chartTranslator.translate(position)\n }); }))\n .setValue(this.chartController.getChartProxy().getChartOption(\"legend.position\"))\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setChartOption(\"legend.position\", newValue); });\n };\n LegendPanel.prototype.initLegendPadding = function () {\n var _this = this;\n this.legendPaddingSlider\n .setLabel(this.chartTranslator.translate(\"padding\"))\n .setValue(this.chartController.getChartProxy().getChartOption(\"legend.padding\"))\n .setTextFieldWidth(45)\n .setMaxValue(200)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setChartOption(\"legend.padding\", newValue); });\n };\n LegendPanel.prototype.initLegendItems = function () {\n var _this = this;\n var initSlider = function (expression, labelKey, input, maxValue) {\n input.setLabel(_this.chartTranslator.translate(labelKey))\n .setValue(_this.chartController.getChartProxy().getChartOption(\"legend.\" + expression))\n .setMaxValue(maxValue)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setChartOption(\"legend.\" + expression, newValue); });\n };\n initSlider(\"item.marker.size\", \"markerSize\", this.markerSizeSlider, 40);\n initSlider(\"item.marker.strokeWidth\", \"markerStroke\", this.markerStrokeSlider, 10);\n initSlider(\"item.marker.padding\", \"markerPadding\", this.markerPaddingSlider, 20);\n initSlider(\"item.paddingX\", \"itemPaddingX\", this.itemPaddingXSlider, 50);\n initSlider(\"item.paddingY\", \"itemPaddingY\", this.itemPaddingYSlider, 50);\n };\n LegendPanel.prototype.initLabelPanel = function () {\n var _this = this;\n var chartProxy = this.chartController.getChartProxy();\n var initialFont = {\n family: chartProxy.getChartOption(\"legend.item.label.fontFamily\"),\n style: chartProxy.getChartOption(\"legend.item.label.fontStyle\"),\n weight: chartProxy.getChartOption(\"legend.item.label.fontWeight\"),\n size: chartProxy.getChartOption(\"legend.item.label.fontSize\"),\n color: chartProxy.getChartOption(\"legend.item.label.color\")\n };\n var setFont = function (font) {\n var chartProxy = _this.chartController.getChartProxy();\n if (font.family) {\n chartProxy.setChartOption(\"legend.item.label.fontFamily\", font.family);\n }\n if (font.weight) {\n chartProxy.setChartOption(\"legend.item.label.fontWeight\", font.weight);\n }\n if (font.style) {\n chartProxy.setChartOption(\"legend.item.label.fontStyle\", font.style);\n }\n if (font.size) {\n chartProxy.setChartOption(\"legend.item.label.fontSize\", font.size);\n }\n if (font.color) {\n chartProxy.setChartOption(\"legend.item.label.color\", font.color);\n }\n };\n var params = {\n enabled: true,\n suppressEnabledCheckbox: true,\n initialFont: initialFont,\n setFont: setFont\n };\n var fontPanelComp = this.wireBean(new FontPanel(params));\n this.legendGroup.addItem(fontPanelComp);\n this.activePanels.push(fontPanelComp);\n };\n LegendPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n LegendPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n LegendPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('legendGroup')\n ], LegendPanel.prototype, \"legendGroup\", void 0);\n __decorate([\n RefSelector('legendPositionSelect')\n ], LegendPanel.prototype, \"legendPositionSelect\", void 0);\n __decorate([\n RefSelector('legendPaddingSlider')\n ], LegendPanel.prototype, \"legendPaddingSlider\", void 0);\n __decorate([\n RefSelector('markerSizeSlider')\n ], LegendPanel.prototype, \"markerSizeSlider\", void 0);\n __decorate([\n RefSelector('markerStrokeSlider')\n ], LegendPanel.prototype, \"markerStrokeSlider\", void 0);\n __decorate([\n RefSelector('markerPaddingSlider')\n ], LegendPanel.prototype, \"markerPaddingSlider\", void 0);\n __decorate([\n RefSelector('itemPaddingXSlider')\n ], LegendPanel.prototype, \"itemPaddingXSlider\", void 0);\n __decorate([\n RefSelector('itemPaddingYSlider')\n ], LegendPanel.prototype, \"itemPaddingYSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], LegendPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], LegendPanel.prototype, \"init\", null);\n return LegendPanel;\n}(Component));\nexport { LegendPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector, } from \"@ag-grid-community/core\";\nvar ShadowPanel = /** @class */ (function (_super) {\n __extends(ShadowPanel, _super);\n function ShadowPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n ShadowPanel.prototype.init = function () {\n this.setTemplate(ShadowPanel.TEMPLATE);\n this.shadowBlurSlider.setTextFieldWidth(45);\n this.shadowXOffsetSlider.setTextFieldWidth(45);\n this.shadowYOffsetSlider.setTextFieldWidth(45);\n this.initSeriesShadow();\n };\n ShadowPanel.prototype.initSeriesShadow = function () {\n var _this = this;\n this.shadowGroup\n .setTitle(this.chartTranslator.translate(\"shadow\"))\n .setEnabled(this.chartController.getChartProxy().getShadowEnabled())\n .hideOpenCloseIcons(true)\n .hideEnabledCheckbox(false)\n .onEnableChange(function (newValue) { return _this.chartController.getChartProxy().setShadowProperty(\"enabled\", newValue); });\n this.shadowColorPicker\n .setLabel(this.chartTranslator.translate(\"color\"))\n .setLabelWidth(\"flex\")\n .setInputWidth(45)\n .setValue(\"rgba(0,0,0,0.5)\")\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setShadowProperty(\"color\", newValue); });\n var initInput = function (input, property, minValue, maxValue) {\n input.setLabel(_this.chartTranslator.translate(property))\n .setValue(_this.chartController.getChartProxy().getShadowProperty(property))\n .setMinValue(minValue)\n .setMaxValue(maxValue)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setShadowProperty(property, newValue); });\n };\n initInput(this.shadowBlurSlider, \"blur\", 0, 20);\n initInput(this.shadowXOffsetSlider, \"xOffset\", -10, 10);\n initInput(this.shadowYOffsetSlider, \"yOffset\", -10, 10);\n };\n ShadowPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('shadowGroup')\n ], ShadowPanel.prototype, \"shadowGroup\", void 0);\n __decorate([\n RefSelector('shadowColorPicker')\n ], ShadowPanel.prototype, \"shadowColorPicker\", void 0);\n __decorate([\n RefSelector('shadowBlurSlider')\n ], ShadowPanel.prototype, \"shadowBlurSlider\", void 0);\n __decorate([\n RefSelector('shadowXOffsetSlider')\n ], ShadowPanel.prototype, \"shadowXOffsetSlider\", void 0);\n __decorate([\n RefSelector('shadowYOffsetSlider')\n ], ShadowPanel.prototype, \"shadowYOffsetSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], ShadowPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], ShadowPanel.prototype, \"init\", null);\n return ShadowPanel;\n}(Component));\nexport { ShadowPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector, } from \"@ag-grid-community/core\";\nimport { ShadowPanel } from \"./shadowPanel\";\nimport { FontPanel } from \"../fontPanel\";\nvar BarSeriesPanel = /** @class */ (function (_super) {\n __extends(BarSeriesPanel, _super);\n function BarSeriesPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n BarSeriesPanel.prototype.init = function () {\n this.setTemplate(BarSeriesPanel.TEMPLATE);\n this.seriesGroup\n .setTitle(this.chartTranslator.translate(\"series\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n this.initSeriesTooltips();\n this.initSeriesStrokeWidth();\n this.initOpacity();\n this.initLabelPanel();\n this.initShadowPanel();\n };\n BarSeriesPanel.prototype.initSeriesTooltips = function () {\n var _this = this;\n this.seriesTooltipsToggle\n .setLabel(this.chartTranslator.translate(\"tooltips\"))\n .setLabelAlignment(\"left\")\n .setLabelWidth(\"flex\")\n .setInputWidth(40)\n .setValue(this.getChartProxy().getSeriesOption(\"tooltip.enabled\") || false)\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"tooltip.enabled\", newValue); });\n };\n BarSeriesPanel.prototype.initSeriesStrokeWidth = function () {\n var _this = this;\n this.seriesStrokeWidthSlider\n .setLabel(this.chartTranslator.translate(\"strokeWidth\"))\n .setMaxValue(10)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.width\"))\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.width\", newValue); });\n };\n BarSeriesPanel.prototype.initOpacity = function () {\n var _this = this;\n this.seriesLineOpacitySlider\n .setLabel(this.chartTranslator.translate(\"strokeOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.opacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.opacity\", newValue); });\n this.seriesFillOpacitySlider\n .setLabel(this.chartTranslator.translate(\"fillOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"fill.opacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"fill.opacity\", newValue); });\n };\n BarSeriesPanel.prototype.initLabelPanel = function () {\n var _this = this;\n var chartProxy = this.getChartProxy();\n var initialFont = {\n family: chartProxy.getSeriesOption(\"label.fontFamily\"),\n style: chartProxy.getSeriesOption(\"label.fontStyle\"),\n weight: chartProxy.getSeriesOption(\"label.fontWeight\"),\n size: chartProxy.getSeriesOption(\"label.fontSize\"),\n color: chartProxy.getSeriesOption(\"label.color\")\n };\n var setFont = function (font) {\n var chartProxy = _this.getChartProxy();\n if (font.family) {\n chartProxy.setSeriesOption(\"label.fontFamily\", font.family);\n }\n if (font.weight) {\n chartProxy.setSeriesOption(\"label.fontWeight\", font.weight);\n }\n if (font.style) {\n chartProxy.setSeriesOption(\"label.fontStyle\", font.style);\n }\n if (font.size) {\n chartProxy.setSeriesOption(\"label.fontSize\", font.size);\n }\n if (font.color) {\n chartProxy.setSeriesOption(\"label.color\", font.color);\n }\n };\n var params = {\n name: this.chartTranslator.translate('labels'),\n enabled: chartProxy.getSeriesOption(\"label.enabled\") || false,\n setEnabled: function (enabled) { return _this.getChartProxy().setSeriesOption(\"label.enabled\", enabled); },\n suppressEnabledCheckbox: false,\n initialFont: initialFont,\n setFont: setFont\n };\n var labelPanelComp = this.wireBean(new FontPanel(params));\n this.activePanels.push(labelPanelComp);\n this.seriesGroup.addItem(labelPanelComp);\n };\n BarSeriesPanel.prototype.initShadowPanel = function () {\n var shadowPanelComp = this.wireBean(new ShadowPanel(this.chartController));\n this.seriesGroup.addItem(shadowPanelComp);\n this.activePanels.push(shadowPanelComp);\n };\n BarSeriesPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n BarSeriesPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n BarSeriesPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n BarSeriesPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesGroup')\n ], BarSeriesPanel.prototype, \"seriesGroup\", void 0);\n __decorate([\n RefSelector('seriesTooltipsToggle')\n ], BarSeriesPanel.prototype, \"seriesTooltipsToggle\", void 0);\n __decorate([\n RefSelector('seriesStrokeWidthSlider')\n ], BarSeriesPanel.prototype, \"seriesStrokeWidthSlider\", void 0);\n __decorate([\n RefSelector('seriesLineOpacitySlider')\n ], BarSeriesPanel.prototype, \"seriesLineOpacitySlider\", void 0);\n __decorate([\n RefSelector('seriesFillOpacitySlider')\n ], BarSeriesPanel.prototype, \"seriesFillOpacitySlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], BarSeriesPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], BarSeriesPanel.prototype, \"init\", null);\n return BarSeriesPanel;\n}(Component));\nexport { BarSeriesPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nvar AxisTicksPanel = /** @class */ (function (_super) {\n __extends(AxisTicksPanel, _super);\n function AxisTicksPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n AxisTicksPanel.prototype.init = function () {\n this.setTemplate(AxisTicksPanel.TEMPLATE);\n this.initAxisTicks();\n };\n AxisTicksPanel.prototype.initAxisTicks = function () {\n var _this = this;\n this.axisTicksGroup\n .setTitle(this.chartTranslator.translate(\"ticks\"))\n .hideOpenCloseIcons(true)\n .hideEnabledCheckbox(true);\n this.axisTicksColorPicker\n .setLabel(this.chartTranslator.translate(\"color\"))\n .setLabelWidth(\"flex\")\n .setInputWidth(45)\n .setValue(this.getChartProxy().getAxisProperty(\"tick.color\"))\n .onValueChange(function (newColor) { return _this.getChartProxy().setAxisProperty(\"tick.color\", newColor); });\n var initInput = function (expression, input, label, maxValue) {\n input.setLabel(label)\n .setValue(_this.getChartProxy().getAxisProperty(expression))\n .setMaxValue(maxValue)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.getChartProxy().setAxisProperty(expression, newValue); });\n };\n initInput(\"tick.width\", this.axisTicksWidthSlider, this.chartTranslator.translate(\"width\"), 10);\n initInput(\"tick.size\", this.axisTicksSizeSlider, this.chartTranslator.translate(\"length\"), 30);\n };\n AxisTicksPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n AxisTicksPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('axisTicksGroup')\n ], AxisTicksPanel.prototype, \"axisTicksGroup\", void 0);\n __decorate([\n RefSelector('axisTicksColorPicker')\n ], AxisTicksPanel.prototype, \"axisTicksColorPicker\", void 0);\n __decorate([\n RefSelector('axisTicksWidthSlider')\n ], AxisTicksPanel.prototype, \"axisTicksWidthSlider\", void 0);\n __decorate([\n RefSelector('axisTicksSizeSlider')\n ], AxisTicksPanel.prototype, \"axisTicksSizeSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], AxisTicksPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], AxisTicksPanel.prototype, \"init\", null);\n return AxisTicksPanel;\n}(Component));\nexport { AxisTicksPanel };\n","// For small data structs like a bounding box, objects are superior to arrays\n// in terms of performance (by 3-4% in Chrome 71, Safari 12 and by 20% in Firefox 64).\n// They are also self descriptive and harder to abuse.\n// For example, one has to do:\n// `ctx.strokeRect(bbox.x, bbox.y, bbox.width, bbox.height);`\n// rather than become enticed by the much slower:\n// `ctx.strokeRect(...bbox);`\n// https://jsperf.com/array-vs-object-create-access\nvar BBox = /** @class */ (function () {\n function BBox(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n BBox.prototype.isValid = function () {\n return isFinite(this.x) && isFinite(this.y) && isFinite(this.width) && isFinite(this.height);\n };\n BBox.prototype.dilate = function (value) {\n this.x -= value;\n this.y -= value;\n this.width += value * 2;\n this.height += value * 2;\n };\n BBox.prototype.containsPoint = function (x, y) {\n return x >= this.x && x <= (this.x + this.width)\n && y >= this.y && y <= (this.y + this.height);\n };\n BBox.prototype.render = function (ctx, params) {\n if (params === void 0) { params = BBox.noParams; }\n ctx.save();\n if (params.resetTransform) {\n ctx.setTransform(1, 0, 0, 1, 0, 0);\n }\n ctx.strokeStyle = params.strokeStyle || 'cyan';\n ctx.lineWidth = params.lineWidth || 1;\n ctx.strokeRect(this.x, this.y, this.width, this.height);\n if (params.label) {\n ctx.fillStyle = params.fillStyle || 'black';\n ctx.textBaseline = 'bottom';\n ctx.fillText(params.label, this.x, this.y);\n }\n ctx.restore();\n };\n BBox.noParams = {};\n return BBox;\n}());\nexport { BBox };\n","import { BBox } from \"./bbox\";\n/**\n * As of Jan 8, 2019, Firefox still doesn't implement\n * `getTransform(): DOMMatrix;`\n * `setTransform(transform?: DOMMatrix2DInit)`\n * in the `CanvasRenderingContext2D`.\n * Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=928150\n * IE11 and Edge 44 also don't have the support.\n * Thus this class, to keep track of the current transform and\n * combine transformations.\n * Standards:\n * https://html.spec.whatwg.org/dev/canvas.html\n * https://www.w3.org/TR/geometry-1/\n */\nvar Matrix = /** @class */ (function () {\n function Matrix(elements) {\n if (elements === void 0) { elements = [1, 0, 0, 1, 0, 0]; }\n this.elements = elements;\n }\n Matrix.prototype.setElements = function (elements) {\n var e = this.elements;\n // `this.elements = elements.slice()` is 4-5 times slower\n // (in Chrome 71 and FF 64) than manually copying elements,\n // since slicing allocates new memory.\n // The performance of passing parameters individually\n // vs as an array is about the same in both browsers, so we\n // go with a single (array of elements) parameter, because\n // `setElements(elements)` and `setElements([a, b, c, d, e, f])`\n // calls give us roughly the same performance, versus\n // `setElements(...elements)` and `setElements(a, b, c, d, e, f)`,\n // where the spread operator causes a 20-30x performance drop\n // (30x when compiled to ES5's `.apply(this, elements)`\n // 20x when used natively).\n e[0] = elements[0];\n e[1] = elements[1];\n e[2] = elements[2];\n e[3] = elements[3];\n e[4] = elements[4];\n e[5] = elements[5];\n return this;\n };\n Matrix.prototype.setIdentityElements = function () {\n var e = this.elements;\n e[0] = 1;\n e[1] = 0;\n e[2] = 0;\n e[3] = 1;\n e[4] = 0;\n e[5] = 0;\n return this;\n };\n Object.defineProperty(Matrix.prototype, \"identity\", {\n get: function () {\n var e = this.elements;\n return e[0] === 1 && e[1] === 0 && e[2] === 0 &&\n e[3] === 1 && e[4] === 0 && e[5] === 0;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"a\", {\n get: function () {\n return this.elements[0];\n },\n set: function (value) {\n this.elements[0] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"b\", {\n get: function () {\n return this.elements[1];\n },\n set: function (value) {\n this.elements[1] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"c\", {\n get: function () {\n return this.elements[2];\n },\n set: function (value) {\n this.elements[2] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"d\", {\n get: function () {\n return this.elements[3];\n },\n set: function (value) {\n this.elements[3] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"e\", {\n get: function () {\n return this.elements[4];\n },\n set: function (value) {\n this.elements[4] = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Matrix.prototype, \"f\", {\n get: function () {\n return this.elements[5];\n },\n set: function (value) {\n this.elements[5] = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Performs the AxB matrix multiplication and saves the result\n * to `C`, if given, or to `A` otherwise.\n */\n Matrix.prototype.AxB = function (A, B, C) {\n var m11 = A[0], m12 = A[1], m21 = A[2], m22 = A[3], m31 = A[4], m32 = A[5];\n var o11 = B[0], o12 = B[1], o21 = B[2], o22 = B[3], o31 = B[4], o32 = B[5];\n C = C || A;\n C[0] = m11 * o11 + m21 * o12;\n C[1] = m12 * o11 + m22 * o12;\n C[2] = m11 * o21 + m21 * o22;\n C[3] = m12 * o21 + m22 * o22;\n C[4] = m11 * o31 + m21 * o32 + m31;\n C[5] = m12 * o31 + m22 * o32 + m32;\n };\n /**\n * The `other` matrix gets post-multiplied to the current matrix.\n * Returns the current matrix.\n * @param other\n */\n Matrix.prototype.multiplySelf = function (other) {\n this.AxB(this.elements, other.elements);\n return this;\n };\n /**\n * The `other` matrix gets post-multiplied to the current matrix.\n * Returns a new matrix.\n * @param other\n */\n Matrix.prototype.multiply = function (other) {\n var elements = new Array(6);\n this.AxB(this.elements, other.elements, elements);\n return new Matrix(elements);\n };\n Matrix.prototype.preMultiplySelf = function (other) {\n this.AxB(other.elements, this.elements, this.elements);\n return this;\n };\n /**\n * Returns the inverse of this matrix as a new matrix.\n */\n Matrix.prototype.inverse = function () {\n var _a = this.elements, a = _a[0], b = _a[1], c = _a[2], d = _a[3], e = _a[4], f = _a[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n return new Matrix([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n };\n /**\n * Save the inverse of this matrix to the given matrix.\n */\n Matrix.prototype.inverseTo = function (other) {\n var _a = this.elements, a = _a[0], b = _a[1], c = _a[2], d = _a[3], e = _a[4], f = _a[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n other.setElements([d, -b, -c, a, c * f - d * e, b * e - a * f]);\n return this;\n };\n Matrix.prototype.invertSelf = function () {\n var elements = this.elements;\n var a = elements[0], b = elements[1], c = elements[2], d = elements[3], e = elements[4], f = elements[5];\n var rD = 1 / (a * d - b * c); // reciprocal of determinant\n a *= rD;\n b *= rD;\n c *= rD;\n d *= rD;\n elements[0] = d;\n elements[1] = -b;\n elements[2] = -c;\n elements[3] = a;\n elements[4] = c * f - d * e;\n elements[5] = b * e - a * f;\n return this;\n };\n Matrix.prototype.clone = function () {\n return new Matrix(this.elements.slice());\n };\n Matrix.prototype.transformPoint = function (x, y) {\n var e = this.elements;\n return {\n x: x * e[0] + y * e[2] + e[4],\n y: x * e[1] + y * e[3] + e[5]\n };\n };\n Matrix.prototype.transformBBox = function (bbox, radius, target) {\n if (radius === void 0) { radius = 0; }\n var elements = this.elements;\n var xx = elements[0];\n var xy = elements[1];\n var yx = elements[2];\n var yy = elements[3];\n var h_w = bbox.width * 0.5;\n var h_h = bbox.height * 0.5;\n var cx = bbox.x + h_w;\n var cy = bbox.y + h_h;\n var w, h;\n if (radius) {\n h_w -= radius;\n h_h -= radius;\n var sx = Math.sqrt(xx * xx + yx * yx);\n var sy = Math.sqrt(xy * xy + yy * yy);\n w = Math.abs(h_w * xx) + Math.abs(h_h * yx) + Math.abs(sx * radius);\n h = Math.abs(h_w * xy) + Math.abs(h_h * yy) + Math.abs(sy * radius);\n }\n else {\n w = Math.abs(h_w * xx) + Math.abs(h_h * yx);\n h = Math.abs(h_w * xy) + Math.abs(h_h * yy);\n }\n if (!target) {\n target = new BBox(0, 0, 0, 0);\n }\n target.x = cx * xx + cy * yx + elements[4] - w;\n target.y = cx * xy + cy * yy + elements[5] - h;\n target.width = w + w;\n target.height = h + h;\n return target;\n };\n Matrix.prototype.toContext = function (ctx) {\n // It's fair to say that matrix multiplications are not cheap.\n // However, updating path definitions on every frame isn't either, so\n // it may be cheaper to just translate paths. It's also fair to\n // say, that most paths will have to be re-rendered anyway, say\n // rectangle paths in a bar chart, where an animation would happen when\n // the data set changes and existing bars are morphed into new ones.\n // Or a pie chart, where old sectors are also morphed into new ones.\n // Same for the line chart. The only plausible case where translating\n // existing paths would be enough, is the scatter chart, where marker\n // icons, typically circles, stay the same size. But if circle radii\n // are bound to some data points, even circle paths would have to be\n // updated. And thus it makes sense to optimize for fewer matrix\n // transforms, where transform matrices of paths are mostly identity\n // matrices and `x`/`y`, `centerX`/`centerY` and similar properties\n // are used to define a path at specific coordinates. And only groups\n // are used to collectively apply a transform to a set of nodes.\n // If the matrix is mostly identity (95% of the time),\n // the `if (this.isIdentity)` check can make this call 3-4 times\n // faster on average: https://jsperf.com/matrix-check-first-vs-always-set\n if (this.identity) {\n return;\n }\n var e = this.elements;\n ctx.transform(e[0], e[1], e[2], e[3], e[4], e[5]);\n };\n Matrix.flyweight = function (elements) {\n if (elements) {\n if (elements instanceof Matrix) {\n Matrix.matrix.setElements(elements.elements);\n }\n else {\n Matrix.matrix.setElements(elements);\n }\n }\n else {\n Matrix.matrix.setIdentityElements();\n }\n return Matrix.matrix;\n };\n Matrix.matrix = new Matrix();\n return Matrix;\n}());\nexport { Matrix };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Node } from \"./node\";\nimport { BBox } from \"./bbox\";\nimport { Matrix } from \"./matrix\";\nvar Group = /** @class */ (function (_super) {\n __extends(Group, _super);\n function Group() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isContainerNode = true;\n return _this;\n }\n // We consider a group to be boundless, thus any point belongs to it.\n Group.prototype.isPointInNode = function (x, y) {\n return true;\n };\n Group.prototype.computeBBox = function () {\n var left = Infinity;\n var right = -Infinity;\n var top = Infinity;\n var bottom = -Infinity;\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n this.children.forEach(function (child) {\n if (!child.visible) {\n return;\n }\n var bbox = child.computeBBox();\n if (!bbox) {\n return;\n }\n if (!(child instanceof Group)) {\n if (child.dirtyTransform) {\n child.computeTransformMatrix();\n }\n var matrix = Matrix.flyweight(child.matrix);\n var parent_1 = child.parent;\n while (parent_1) {\n matrix.preMultiplySelf(parent_1.matrix);\n parent_1 = parent_1.parent;\n }\n matrix.transformBBox(bbox, 0, bbox);\n }\n var x = bbox.x;\n var y = bbox.y;\n if (x < left) {\n left = x;\n }\n if (y < top) {\n top = y;\n }\n if (x + bbox.width > right) {\n right = x + bbox.width;\n }\n if (y + bbox.height > bottom) {\n bottom = y + bbox.height;\n }\n });\n return new BBox(left, top, right - left, bottom - top);\n };\n Group.prototype.render = function (ctx) {\n // A group can have `scaling`, `rotation`, `translation` properties\n // that are applied to the canvas context before children are rendered,\n // so all children can be transformed at once.\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n this.matrix.toContext(ctx);\n var children = this.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n ctx.save();\n var child = children[i];\n if (child.visible) {\n child.render(ctx);\n }\n ctx.restore();\n }\n // debug\n // this.computeBBox().render(ctx, {\n // label: this.id,\n // resetTransform: true,\n // fillStyle: 'rgba(0, 0, 0, 0.5)'\n // });\n };\n Group.className = 'Group';\n return Group;\n}(Node));\nexport { Group };\n","import { Node } from \"./node\";\nvar EnterNode = /** @class */ (function () {\n function EnterNode(parent, datum) {\n this.next = null;\n this.scene = parent.scene;\n this.parent = parent;\n this.datum = datum;\n }\n EnterNode.prototype.appendChild = function (node) {\n // This doesn't work without the `strict: true` in the `tsconfig.json`,\n // so we must have two `if` checks below, instead of this single one.\n // if (this.next && !Node.isNode(this.next)) {\n // throw new Error(`${this.next} is not a Node.`);\n // }\n if (this.next === null) {\n return this.parent.insertBefore(node, null);\n }\n if (!Node.isNode(this.next)) {\n throw new Error(this.next + \" is not a Node.\");\n }\n return this.parent.insertBefore(node, this.next);\n };\n EnterNode.prototype.insertBefore = function (node, nextNode) {\n return this.parent.insertBefore(node, nextNode);\n };\n return EnterNode;\n}());\nexport { EnterNode };\n/**\n * G - type of the selected node(s).\n * GDatum - type of the datum of the selected node(s).\n * P - type of the parent node(s).\n * PDatum - type of the datum of the parent node(s).\n */\nvar Selection = /** @class */ (function () {\n function Selection(groups, parents) {\n this.groups = groups;\n this.parents = parents;\n }\n Selection.select = function (node) {\n return new Selection([[typeof node === 'function' ? node() : node]], [undefined]);\n };\n Selection.selectAll = function (nodes) {\n return new Selection([nodes == null ? [] : nodes], [undefined]);\n };\n /**\n * Creates new nodes, appends them to the nodes of this selection and returns them\n * as a new selection. The created nodes inherit the datums and the parents of the nodes\n * they replace.\n * @param Class The constructor function to use to create the new nodes.\n */\n Selection.prototype.append = function (Class) {\n return this.select(function (node) {\n return node.appendChild(new Class());\n });\n };\n /**\n * Same as the {@link append}, but accepts a custom creator function with the\n * {@link NodeSelector} signature rather than a constructor function.\n * @param creator\n */\n Selection.prototype.appendFn = function (creator) {\n return this.select(function (node, data, index, group) {\n return node.appendChild(creator(node, data, index, group));\n });\n };\n /**\n * Runs the given selector that returns a single node for every node in each group.\n * The original nodes are then replaced by the nodes returned by the selector\n * and returned as a new selection.\n * The selected nodes inherit the datums and the parents of the original nodes.\n */\n Selection.prototype.select = function (selector) {\n var groups = this.groups;\n var numGroups = groups.length;\n var subgroups = [];\n for (var j = 0; j < numGroups; j++) {\n var group = groups[j];\n var groupSize = group.length;\n var subgroup = subgroups[j] = new Array(groupSize);\n for (var i = 0; i < groupSize; i++) {\n var node = group[i];\n if (node) {\n var subnode = selector(node, node.datum, i, group);\n if (subnode) {\n subnode.datum = node.datum;\n }\n subgroup[i] = subnode;\n }\n // else this can be a group of the `enter` selection,\n // for example, with no nodes at the i-th position,\n // only nodes at the end of the group\n }\n }\n return new Selection(subgroups, this.parents);\n };\n /**\n * Same as {@link select}, but uses the given {@param Class} (constructor) as a selector.\n * @param Class The constructor function to use to find matching nodes.\n */\n Selection.prototype.selectByClass = function (Class) {\n return this.select(function (node) {\n if (Node.isNode(node)) {\n var children = node.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n var child = children[i];\n if (child instanceof Class) {\n return child;\n }\n }\n }\n });\n };\n Selection.prototype.selectByTag = function (tag) {\n return this.select(function (node) {\n if (Node.isNode(node)) {\n var children = node.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n var child = children[i];\n if (child.tag === tag) {\n return child;\n }\n }\n }\n });\n };\n Selection.prototype.selectAllByClass = function (Class) {\n return this.selectAll(function (node) {\n var nodes = [];\n if (Node.isNode(node)) {\n var children = node.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n var child = children[i];\n if (child instanceof Class) {\n nodes.push(child);\n }\n }\n }\n return nodes;\n });\n };\n Selection.prototype.selectAllByTag = function (tag) {\n return this.selectAll(function (node) {\n var nodes = [];\n if (Node.isNode(node)) {\n var children = node.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n var child = children[i];\n if (child.tag === tag) {\n nodes.push(child);\n }\n }\n }\n return nodes;\n });\n };\n Selection.prototype.selectNone = function () {\n return [];\n };\n /**\n * Runs the given selector that returns a group of nodes for every node in each group.\n * The original nodes are then replaced by the groups of nodes returned by the selector\n * and returned as a new selection. The original nodes become the parent nodes for each\n * group in the new selection. The selected nodes do not inherit the datums of the original nodes.\n * If called without any parameters, creates a new selection with an empty group for each\n * node in this selection.\n */\n Selection.prototype.selectAll = function (selectorAll) {\n if (!selectorAll) {\n selectorAll = this.selectNone;\n }\n // Each subgroup is populated with the selector (run on each group node) results.\n var subgroups = [];\n // In the new selection that we return, subgroups become groups,\n // and group nodes become parents.\n var parents = [];\n var groups = this.groups;\n var groupCount = groups.length;\n for (var j = 0; j < groupCount; j++) {\n var group = groups[j];\n var groupLength = group.length;\n for (var i = 0; i < groupLength; i++) {\n var node = group[i];\n if (node) {\n subgroups.push(selectorAll(node, node.datum, i, group));\n parents.push(node);\n }\n }\n }\n return new Selection(subgroups, parents);\n };\n /**\n * Runs the given callback for every node in this selection and returns this selection.\n * @param cb\n */\n Selection.prototype.each = function (cb) {\n var groups = this.groups;\n var numGroups = groups.length;\n for (var j = 0; j < numGroups; j++) {\n var group = groups[j];\n var groupSize = group.length;\n for (var i = 0; i < groupSize; i++) {\n var node = group[i];\n if (node) {\n cb(node, node.datum, i, group);\n }\n }\n }\n return this;\n };\n Selection.prototype.remove = function () {\n return this.each(function (node) {\n if (Node.isNode(node)) {\n var parent_1 = node.parent;\n if (parent_1) {\n parent_1.removeChild(node);\n }\n }\n });\n };\n Selection.prototype.merge = function (other) {\n var groups0 = this.groups;\n var groups1 = other.groups;\n var m0 = groups0.length;\n var m1 = groups1.length;\n var m = Math.min(m0, m1);\n var merges = new Array(m0);\n var j = 0;\n for (; j < m; j++) {\n var group0 = groups0[j];\n var group1 = groups1[j];\n var n = group0.length;\n var merge = merges[j] = new Array(n);\n for (var i = 0; i < n; i++) {\n var node = group0[i] || group1[i];\n merge[i] = node || undefined;\n }\n }\n for (; j < m0; j++) {\n merges[j] = groups0[j];\n }\n return new Selection(merges, this.parents);\n };\n /**\n * Return the first non-null element in this selection.\n * If the selection is empty, returns null.\n */\n Selection.prototype.node = function () {\n var groups = this.groups;\n var numGroups = groups.length;\n for (var j = 0; j < numGroups; j++) {\n var group = groups[j];\n var groupSize = group.length;\n for (var i = 0; i < groupSize; i++) {\n var node = group[i];\n if (node) {\n return node;\n }\n }\n }\n return null;\n };\n Selection.prototype.attr = function (name, value) {\n this.each(function (node) {\n node[name] = value;\n });\n return this;\n };\n Selection.prototype.attrFn = function (name, value) {\n this.each(function (node, datum, index, group) {\n node[name] = value(node, datum, index, group);\n });\n return this;\n };\n /**\n * Invokes the given function once, passing in this selection.\n * Returns this selection. Facilitates method chaining.\n * @param cb\n */\n Selection.prototype.call = function (cb) {\n cb(this);\n return this;\n };\n Object.defineProperty(Selection.prototype, \"size\", {\n /**\n * Returns the total number of nodes in this selection.\n */\n get: function () {\n var size = 0;\n this.each(function () { return size++; });\n return size;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"data\", {\n /**\n * Returns the array of data for the selected elements.\n */\n get: function () {\n var data = [];\n this.each(function (_, datum) { return data.push(datum); });\n return data;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"enter\", {\n get: function () {\n return new Selection(this.enterGroups ? this.enterGroups : [[]], this.parents);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Selection.prototype, \"exit\", {\n get: function () {\n return new Selection(this.exitGroups ? this.exitGroups : [[]], this.parents);\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Binds the given value to each selected node and returns this selection\n * with its {@link GDatum} type changed to the type of the given value.\n * This method doesn't compute a join and doesn't affect indexes or the enter and exit selections.\n * This method can also be used to clear bound data.\n * @param value\n */\n Selection.prototype.setDatum = function (value) {\n return this.each(function (node) {\n node.datum = value;\n });\n };\n Object.defineProperty(Selection.prototype, \"datum\", {\n /**\n * Returns the bound datum for the first non-null element in the selection.\n * This is generally useful only if you know the selection contains exactly one element.\n */\n get: function () {\n var node = this.node();\n return node ? node.datum : null;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Binds the specified array of values with the selected nodes, returning a new selection\n * that represents the _update_ selection: the nodes successfully bound to the values.\n * Also defines the {@link enter} and {@link exit} selections on the returned selection,\n * which can be used to add or remove the nodes to correspond to the new data.\n * The `values` is an array of values of a particular type, or a function that returns\n * an array of values for each group.\n * When values are assigned to the nodes, they are stored in the {@link Node.datum} property.\n * @param values\n * @param key\n */\n Selection.prototype.setData = function (values, key) {\n if (typeof values !== 'function') {\n var data_1 = values;\n values = function () { return data_1; };\n }\n var groups = this.groups;\n var parents = this.parents;\n var numGroups = groups.length;\n var updateGroups = new Array(numGroups);\n var enterGroups = new Array(numGroups);\n var exitGroups = new Array(numGroups);\n for (var j = 0; j < numGroups; j++) {\n var group = groups[j];\n var parent_2 = parents[j];\n if (!parent_2) {\n throw new Error(\"Group #\" + j + \" has no parent: \" + group);\n }\n var groupSize = group.length;\n var data = values(parent_2, parent_2.datum, j, parents);\n var dataSize = data.length;\n var enterGroup = enterGroups[j] = new Array(dataSize);\n var updateGroup = updateGroups[j] = new Array(dataSize);\n var exitGroup = exitGroups[j] = new Array(groupSize);\n if (key) {\n this.bindKey(parent_2, group, enterGroup, updateGroup, exitGroup, data, key);\n }\n else {\n this.bindIndex(parent_2, group, enterGroup, updateGroup, exitGroup, data);\n }\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0; i0 < dataSize; i0++) {\n var previous = enterGroup[i0];\n if (previous) {\n if (i0 >= i1) {\n i1 = i0 + 1;\n }\n var next = void 0;\n while (!(next = updateGroup[i1]) && i1 < dataSize) {\n i1++;\n }\n previous.next = next || null;\n }\n }\n }\n var result = new Selection(updateGroups, parents);\n result.enterGroups = enterGroups;\n result.exitGroups = exitGroups;\n return result;\n };\n Selection.prototype.bindIndex = function (parent, group, enter, update, exit, data) {\n var groupSize = group.length;\n var dataSize = data.length;\n var i = 0;\n for (; i < dataSize; i++) {\n var node = group[i];\n if (node) {\n node.datum = data[i];\n update[i] = node;\n }\n else { // more datums than group nodes\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n // more group nodes than datums\n for (; i < groupSize; i++) {\n var node = group[i];\n if (node) {\n exit[i] = node;\n }\n }\n };\n Selection.prototype.bindKey = function (parent, group, enter, update, exit, data, key) {\n var groupSize = group.length;\n var dataSize = data.length;\n var keyValues = new Array(groupSize);\n var nodeByKeyValue = {};\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (var i = 0; i < groupSize; i++) {\n var node = group[i];\n if (node) {\n var keyValue = keyValues[i] = Selection.keyPrefix + key(node, node.datum, i, group);\n if (keyValue in nodeByKeyValue) {\n exit[i] = node;\n }\n else {\n nodeByKeyValue[keyValue] = node;\n }\n }\n }\n // Compute the key for each datum.\n // If there is a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (var i = 0; i < dataSize; i++) {\n var keyValue = Selection.keyPrefix + key(parent, data[i], i, data);\n var node = nodeByKeyValue[keyValue];\n if (node) {\n update[i] = node;\n node.datum = data[i];\n nodeByKeyValue[keyValue] = undefined;\n }\n else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n // Add any remaining nodes that were not bound to data to exit.\n for (var i = 0; i < groupSize; i++) {\n var node = group[i];\n if (node && (nodeByKeyValue[keyValues[i]] === node)) {\n exit[i] = node;\n }\n }\n };\n Selection.keyPrefix = '$'; // Protect against keys like '__proto__'.\n return Selection;\n}());\nexport { Selection };\n","export function chainObjects(parent, child) {\n var obj = Object.create(parent);\n for (var prop in child) {\n if (child.hasOwnProperty(prop)) {\n obj[prop] = child[prop];\n }\n }\n return obj;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Node } from \"../node\";\nimport { chainObjects } from \"../../util/object\";\nvar Shape = /** @class */ (function (_super) {\n __extends(Shape, _super);\n function Shape() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.lastInstanceId = 0;\n _this._fillOpacity = 1;\n _this._strokeOpacity = 1;\n _this._fill = Shape.defaultStyles.fill;\n /**\n * Note that `strokeStyle = null` means invisible stroke,\n * while `lineWidth = 0` means no stroke, and sometimes this can mean different things.\n * For example, a rect shape with an invisible stroke may not align to the pixel grid\n * properly because the stroke affects the rules of alignment, and arc shapes forming\n * a pie chart will have a gap between them if they have an invisible stroke, whereas\n * there would be not gap if there was no stroke at all.\n * The preferred way of making the stroke invisible is setting the `lineWidth` to zero,\n * unless specific looks that is achieved by having an invisible stroke is desired.\n */\n _this._stroke = Shape.defaultStyles.stroke;\n _this._strokeWidth = Shape.defaultStyles.strokeWidth;\n _this._lineDash = Shape.defaultStyles.lineDash;\n _this._lineDashOffset = Shape.defaultStyles.lineDashOffset;\n _this._lineCap = Shape.defaultStyles.lineCap;\n _this._lineJoin = Shape.defaultStyles.lineJoin;\n _this._opacity = Shape.defaultStyles.opacity;\n _this.onShadowChange = function () {\n _this.dirty = true;\n };\n _this._fillShadow = Shape.defaultStyles.fillShadow;\n _this._strokeShadow = Shape.defaultStyles.strokeShadow;\n return _this;\n }\n /**\n * Creates a light-weight instance of the given shape (that serves as a template).\n * The created instance only stores the properites set on the instance itself\n * and the rest of the properties come via the prototype chain from the template.\n * This can greatly reduce memory usage in cases where one has many simular shapes,\n * for example, circles of different size, position and color. The exact memory usage\n * reduction will depend on the size of the template and the number of own properties\n * set on its lightweight instances, but will typically be around an order of magnitude\n * or more.\n *\n * Note: template shapes are not supposed to be part of the scene graph (they should not\n * have a parent).\n *\n * @param template\n */\n Shape.createInstance = function (template) {\n var shape = Object.create(template);\n shape._setParent(undefined);\n shape.id = template.id + '-Instance-' + String(++template.lastInstanceId);\n return shape;\n };\n /**\n * Restores the default styles introduced by this subclass.\n */\n Shape.prototype.restoreOwnStyles = function () {\n var styles = this.constructor.defaultStyles;\n var keys = Object.getOwnPropertyNames(styles);\n // getOwnPropertyNames is about 2.5 times faster than\n // for..in with the hasOwnProperty check and in this\n // case, where most properties are inherited, can be\n // more then an order of magnitude faster.\n for (var i = 0, n = keys.length; i < n; i++) {\n var key = keys[i];\n this[key] = styles[key];\n }\n };\n Shape.prototype.restoreAllStyles = function () {\n var styles = this.constructor.defaultStyles;\n for (var property in styles) {\n this[property] = styles[property];\n }\n };\n /**\n * Restores the base class default styles that have been overridden by this subclass.\n */\n Shape.prototype.restoreOverriddenStyles = function () {\n var styles = this.constructor.defaultStyles;\n var protoStyles = Object.getPrototypeOf(styles);\n for (var property in styles) {\n if (styles.hasOwnProperty(property) && protoStyles.hasOwnProperty(property)) {\n this[property] = styles[property];\n }\n }\n };\n Object.defineProperty(Shape.prototype, \"fillOpacity\", {\n get: function () {\n return this._fillOpacity;\n },\n set: function (value) {\n if (this._fillOpacity !== value) {\n this._fillOpacity = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"strokeOpacity\", {\n get: function () {\n return this._strokeOpacity;\n },\n set: function (value) {\n if (this._strokeOpacity !== value) {\n this._strokeOpacity = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"fill\", {\n get: function () {\n return this._fill;\n },\n set: function (value) {\n if (this._fill !== value) {\n this._fill = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"stroke\", {\n get: function () {\n return this._stroke;\n },\n set: function (value) {\n if (this._stroke !== value) {\n this._stroke = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"lineDash\", {\n get: function () {\n return this._lineDash;\n },\n set: function (value) {\n var oldValue = this._lineDash;\n if (oldValue !== value) {\n if (oldValue && value && oldValue.length === value.length) {\n var identical = true;\n var n = value.length;\n for (var i = 0; i < n; i++) {\n if (oldValue[i] !== value[i]) {\n identical = false;\n break;\n }\n }\n if (identical) {\n return;\n }\n }\n this._lineDash = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"lineDashOffset\", {\n get: function () {\n return this._lineDashOffset;\n },\n set: function (value) {\n if (this._lineDashOffset !== value) {\n this._lineDashOffset = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"lineCap\", {\n get: function () {\n return this._lineCap;\n },\n set: function (value) {\n if (this._lineCap !== value) {\n this._lineCap = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"lineJoin\", {\n get: function () {\n return this._lineJoin;\n },\n set: function (value) {\n if (this._lineJoin !== value) {\n this._lineJoin = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"opacity\", {\n get: function () {\n return this._opacity;\n },\n set: function (value) {\n value = Math.min(1, Math.max(0, value));\n if (this._opacity !== value) {\n this._opacity = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"fillShadow\", {\n get: function () {\n return this._fillShadow;\n },\n set: function (value) {\n var oldValue = this._fillShadow;\n if (oldValue !== value) {\n if (oldValue) {\n oldValue.removeEventListener('change', this.onShadowChange);\n }\n if (value) {\n value.addEventListener('change', this.onShadowChange);\n }\n this._fillShadow = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Shape.prototype, \"strokeShadow\", {\n get: function () {\n return this._strokeShadow;\n },\n set: function (value) {\n var oldValue = this._strokeShadow;\n if (oldValue !== value) {\n if (oldValue) {\n oldValue.removeEventListener('change', this.onShadowChange);\n }\n if (value) {\n value.addEventListener('change', this.onShadowChange);\n }\n this._strokeShadow = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Shape.prototype.fillStroke = function (ctx) {\n if (!this.scene) {\n return;\n }\n var pixelRatio = this.scene.canvas.pixelRatio || 1;\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.globalAlpha = this.opacity * this.fillOpacity;\n // The canvas context scaling (depends on the device's pixel ratio)\n // has no effect on shadows, so we have to account for the pixel ratio\n // manually here.\n var fillShadow = this.fillShadow;\n if (fillShadow && fillShadow.enabled) {\n ctx.shadowColor = fillShadow.color;\n ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n ctx.shadowBlur = fillShadow.blur * pixelRatio;\n }\n ctx.fill();\n }\n ctx.shadowColor = 'rgba(0, 0, 0, 0)';\n if (this.stroke && this.strokeWidth) {\n ctx.strokeStyle = this.stroke;\n ctx.globalAlpha = this.opacity * this.strokeOpacity;\n ctx.lineWidth = this.strokeWidth;\n if (this.lineDash) {\n ctx.setLineDash(this.lineDash);\n }\n if (this.lineDashOffset) {\n ctx.lineDashOffset = this.lineDashOffset;\n }\n if (this.lineCap) {\n ctx.lineCap = this.lineCap;\n }\n if (this.lineJoin) {\n ctx.lineJoin = this.lineJoin;\n }\n var strokeShadow = this.strokeShadow;\n if (strokeShadow && strokeShadow.enabled) {\n ctx.shadowColor = strokeShadow.color;\n ctx.shadowOffsetX = strokeShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = strokeShadow.yOffset * pixelRatio;\n ctx.shadowBlur = strokeShadow.blur * pixelRatio;\n }\n ctx.stroke();\n }\n };\n Shape.prototype.isPointInNode = function (x, y) {\n return this.isPointInPath(x, y);\n };\n /**\n * Defaults for style properties. Note that properties that affect the position\n * and shape of the node are not considered style properties, for example:\n * `x`, `y`, `width`, `height`, `radius`, `rotation`, etc.\n * Can be used to reset to the original styling after some custom styling\n * has been applied (using the `restoreOwnStyles` and `restoreAllStyles` methods).\n * These static defaults are meant to be inherited by subclasses.\n */\n Shape.defaultStyles = chainObjects({}, {\n fill: 'black',\n stroke: undefined,\n strokeWidth: 0,\n lineDash: undefined,\n lineDashOffset: 0,\n lineCap: null,\n lineJoin: null,\n opacity: 1,\n fillShadow: undefined,\n strokeShadow: undefined\n });\n return Shape;\n}(Node));\nexport { Shape };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Shape } from \"./shape\";\nimport { chainObjects } from \"../../util/object\";\nimport { BBox } from \"../bbox\";\nvar Line = /** @class */ (function (_super) {\n __extends(Line, _super);\n function Line() {\n var _this = _super.call(this) || this;\n _this._x1 = 0;\n _this._y1 = 0;\n _this._x2 = 0;\n _this._y2 = 0;\n _this.restoreOwnStyles();\n return _this;\n }\n Object.defineProperty(Line.prototype, \"x1\", {\n get: function () {\n // TODO: Investigate getter performance further in the context\n // of the scene graph.\n // In isolated benchmarks using a getter has the same\n // performance as a direct property access in Firefox 64.\n // But in Chrome 71 the getter is 60% slower than direct access.\n // Direct read is 4.5+ times slower in Chrome than it is in Firefox.\n // Property access and direct read have the same performance\n // in Safari 12, which is 2+ times faster than Firefox at this.\n // https://jsperf.com/es5-getters-setters-versus-getter-setter-methods/18\n // This is a know Chrome issue. They say it's not a regression, since\n // the behavior is observed since M60, but jsperf.com history shows the\n // 10x slowdown happened between Chrome 48 and Chrome 57.\n // https://bugs.chromium.org/p/chromium/issues/detail?id=908743\n return this._x1;\n },\n set: function (value) {\n if (this._x1 !== value) {\n this._x1 = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"y1\", {\n get: function () {\n return this._y1;\n },\n set: function (value) {\n if (this._y1 !== value) {\n this._y1 = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"x2\", {\n get: function () {\n return this._x2;\n },\n set: function (value) {\n if (this._x2 !== value) {\n this._x2 = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Line.prototype, \"y2\", {\n get: function () {\n return this._y2;\n },\n set: function (value) {\n if (this._y2 !== value) {\n this._y2 = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Line.prototype.computeBBox = function () {\n return new BBox(this.x1, this.y1, this.x2 - this.x1, this.y2 - this.y1);\n };\n Line.prototype.isPointInPath = function (x, y) {\n return false;\n };\n Line.prototype.isPointInStroke = function (x, y) {\n return false;\n };\n Line.prototype.render = function (ctx) {\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n this.matrix.toContext(ctx);\n var x1 = this.x1;\n var y1 = this.y1;\n var x2 = this.x2;\n var y2 = this.y2;\n // Align to the pixel grid if the line is strictly vertical\n // or horizontal (but not both, i.e. a dot).\n if (x1 === x2) {\n var x = Math.round(x1) + Math.floor(this.strokeWidth) % 2 / 2;\n x1 = x;\n x2 = x;\n }\n else if (y1 === y2) {\n var y = Math.round(y1) + Math.floor(this.strokeWidth) % 2 / 2;\n y1 = y;\n y2 = y;\n }\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n this.fillStroke(ctx);\n this.dirty = false;\n };\n Line.className = 'Line';\n Line.defaultStyles = chainObjects(Shape.defaultStyles, {\n fill: undefined,\n strokeWidth: 1\n });\n return Line;\n}(Shape));\nexport { Line };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nexport default function (a, b, count) {\n var step = tickStep(a, b, count);\n a = Math.ceil(a / step) * step;\n b = Math.floor(b / step) * step + step / 2;\n // Add half a step here so that the array returned by `range` includes the last tick.\n return range(a, b, step);\n}\nvar e10 = Math.sqrt(50);\nvar e5 = Math.sqrt(10);\nvar e2 = Math.sqrt(2);\nexport function tickStep(a, b, count) {\n var rawStep = Math.abs(b - a) / Math.max(0, count);\n var step = Math.pow(10, Math.floor(Math.log(rawStep) / Math.LN10)); // = Math.log10(rawStep)\n var error = rawStep / step;\n if (error >= e10) {\n step *= 10;\n }\n else if (error >= e5) {\n step *= 5;\n }\n else if (error >= e2) {\n step *= 2;\n }\n return b < a ? -step : step;\n}\nexport function tickIncrement(a, b, count) {\n var rawStep = (b - a) / Math.max(0, count);\n var power = Math.floor(Math.log(rawStep) / Math.LN10);\n var error = rawStep / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\nvar NumericTicks = /** @class */ (function (_super) {\n __extends(NumericTicks, _super);\n function NumericTicks(fractionDigits, size) {\n if (size === void 0) { size = 0; }\n var _this = _super.call(this, size) || this;\n _this.fractionDigits = fractionDigits;\n return _this;\n }\n return NumericTicks;\n}(Array));\nexport { NumericTicks };\nfunction range(a, b, step) {\n if (step === void 0) { step = 1; }\n var absStep = Math.abs(step);\n var fractionDigits = (absStep > 0 && absStep < 1)\n ? Math.abs(Math.floor(Math.log(absStep) / Math.LN10))\n : 0;\n var f = Math.pow(10, fractionDigits);\n var n = Math.max(0, Math.ceil((b - a) / step)) || 0;\n var values = new NumericTicks(fractionDigits, n);\n for (var i = 0; i < n; i++) {\n var value = a + step * i;\n values[i] = Math.round(value * f) / f;\n }\n return values;\n}\n","var twoPi = Math.PI * 2;\n/**\n * Normalize the given angle to be in the [0, 2π) interval.\n * @param radians Angle in radians.\n */\nexport function normalizeAngle360(radians) {\n radians %= twoPi;\n radians += twoPi;\n radians %= twoPi;\n return radians;\n}\nexport function normalizeAngle360Inclusive(radians) {\n radians %= twoPi;\n radians += twoPi;\n if (radians !== twoPi) {\n radians %= twoPi;\n }\n return radians;\n}\n/**\n * Normalize the given angle to be in the [-π, π) interval.\n * @param radians Angle in radians.\n */\nexport function normalizeAngle180(radians) {\n radians %= twoPi;\n if (radians < -Math.PI) {\n radians += twoPi;\n }\n else if (radians >= Math.PI) {\n radians -= twoPi;\n }\n return radians;\n}\nexport function toRadians(degrees) {\n return degrees / 180 * Math.PI;\n}\nexport function toDegrees(radians) {\n return radians / Math.PI * 180;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Shape } from \"./shape\";\nimport { chainObjects } from \"../../util/object\";\nimport { BBox } from \"../bbox\";\nvar Text = /** @class */ (function (_super) {\n __extends(Text, _super);\n function Text() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._x = 0;\n _this._y = 0;\n _this.lineBreakRegex = /\\r?\\n/g;\n _this.lines = [];\n _this._text = '';\n _this._dirtyFont = true;\n _this._fontSize = 10;\n _this._fontFamily = 'sans-serif';\n _this._textAlign = Text.defaultStyles.textAlign;\n _this._textBaseline = Text.defaultStyles.textBaseline;\n _this._lineHeight = 14;\n return _this;\n }\n Object.defineProperty(Text.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n set: function (value) {\n if (this._x !== value) {\n this._x = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n set: function (value) {\n if (this._y !== value) {\n this._y = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Text.prototype.splitText = function () {\n this.lines = this._text.split(this.lineBreakRegex);\n };\n Object.defineProperty(Text.prototype, \"text\", {\n get: function () {\n return this._text;\n },\n set: function (value) {\n var str = String(value); // `value` can be an object here\n if (this._text !== str) {\n this._text = str;\n this.splitText();\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"font\", {\n get: function () {\n if (this.dirtyFont) {\n this.dirtyFont = false;\n this._font = [\n this.fontStyle || '',\n this.fontWeight || '',\n this.fontSize + 'px',\n this.fontFamily\n ].join(' ').trim();\n }\n return this._font;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"dirtyFont\", {\n get: function () {\n return this._dirtyFont;\n },\n set: function (value) {\n if (this._dirtyFont !== value) {\n this._dirtyFont = value;\n if (value) {\n this.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"fontStyle\", {\n get: function () {\n return this._fontStyle;\n },\n set: function (value) {\n if (this._fontStyle !== value) {\n this._fontStyle = value;\n this.dirtyFont = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"fontWeight\", {\n get: function () {\n return this._fontWeight;\n },\n set: function (value) {\n if (this._fontWeight !== value) {\n this._fontWeight = value;\n this.dirtyFont = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"fontSize\", {\n get: function () {\n return this._fontSize;\n },\n set: function (value) {\n if (!isFinite(value)) {\n value = 10;\n }\n if (this._fontSize !== value) {\n this._fontSize = value;\n this.dirtyFont = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"fontFamily\", {\n get: function () {\n return this._fontFamily;\n },\n set: function (value) {\n if (this._fontFamily !== value) {\n this._fontFamily = value;\n this.dirtyFont = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"textAlign\", {\n get: function () {\n return this._textAlign;\n },\n set: function (value) {\n if (this._textAlign !== value) {\n this._textAlign = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"textBaseline\", {\n get: function () {\n return this._textBaseline;\n },\n set: function (value) {\n if (this._textBaseline !== value) {\n this._textBaseline = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Text.prototype, \"lineHeight\", {\n get: function () {\n return this._lineHeight;\n },\n set: function (value) {\n // Multi-line text is complicated because:\n // - Canvas does not support it natively, so we have to implement it manually\n // - need to know the height of each line -> need to parse the font shorthand ->\n // generally impossible to do because font size may not be in pixels\n // - so, need to measure the text instead, each line individually -> expensive\n // - or make the user provide the line height manually for multi-line text\n // - computeBBox should use the lineHeight for multi-line text but ignore it otherwise\n // - textBaseline kind of loses its meaning for multi-line text\n if (this._lineHeight !== value) {\n this._lineHeight = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Text.prototype.computeBBox = function () {\n return this.scene\n ? this.scene.canvas.has.textMetrics\n ? this.getPreciseBBox()\n : this.getApproximateBBox()\n : undefined;\n };\n Text.prototype.getPreciseBBox = function () {\n var metrics = this.scene.canvas.measureText(this.text, this.font, this.textBaseline, this.textAlign);\n return new BBox(this.x - metrics.actualBoundingBoxLeft, this.y - metrics.actualBoundingBoxAscent, metrics.width, metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent);\n };\n Text.prototype.getApproximateBBox = function () {\n var size = this.scene.canvas.getTextSize(this.text, this.font);\n var _a = this, x = _a.x, y = _a.y;\n switch (this.textAlign) {\n case 'end':\n case 'right':\n x -= size.width;\n break;\n case 'center':\n x -= size.width / 2;\n }\n switch (this.textBaseline) {\n case 'alphabetic':\n y -= size.height * 0.7;\n break;\n case 'middle':\n y -= size.height * 0.45;\n break;\n case 'ideographic':\n y -= size.height;\n break;\n case 'hanging':\n y -= size.height * 0.2;\n break;\n case 'bottom':\n y -= size.height;\n break;\n }\n return new BBox(x, y, size.width, size.height);\n };\n Text.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return bbox ? bbox.containsPoint(point.x, point.y) : false;\n };\n Text.prototype.isPointInStroke = function (x, y) {\n return false;\n };\n Text.prototype.render = function (ctx) {\n if (!this.lines.length) {\n return;\n }\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n // this.matrix.transformBBox(this.computeBBox!()).render(ctx); // debug\n this.matrix.toContext(ctx);\n var _a = this, opacity = _a.opacity, fill = _a.fill, stroke = _a.stroke, strokeWidth = _a.strokeWidth;\n if (opacity < 1) {\n ctx.globalAlpha = opacity;\n }\n ctx.font = this.font;\n ctx.textAlign = this.textAlign;\n ctx.textBaseline = this.textBaseline;\n var pixelRatio = this.scene.canvas.pixelRatio || 1;\n if (fill) {\n ctx.fillStyle = fill;\n var _b = this, fillShadow = _b.fillShadow, text = _b.text, x = _b.x, y = _b.y;\n if (fillShadow && fillShadow.enabled) {\n ctx.shadowColor = fillShadow.color;\n ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n ctx.shadowBlur = fillShadow.blur * pixelRatio;\n }\n ctx.fillText(text, x, y);\n }\n if (stroke && strokeWidth) {\n ctx.strokeStyle = stroke;\n ctx.lineWidth = strokeWidth;\n var _c = this, lineDash = _c.lineDash, lineDashOffset = _c.lineDashOffset, lineCap = _c.lineCap, lineJoin = _c.lineJoin, strokeShadow = _c.strokeShadow, text = _c.text, x = _c.x, y = _c.y;\n if (lineDash) {\n ctx.setLineDash(lineDash);\n }\n if (lineDashOffset) {\n ctx.lineDashOffset = lineDashOffset;\n }\n if (lineCap) {\n ctx.lineCap = lineCap;\n }\n if (lineJoin) {\n ctx.lineJoin = lineJoin;\n }\n if (strokeShadow && strokeShadow.enabled) {\n ctx.shadowColor = strokeShadow.color;\n ctx.shadowOffsetX = strokeShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = strokeShadow.yOffset * pixelRatio;\n ctx.shadowBlur = strokeShadow.blur * pixelRatio;\n }\n ctx.strokeText(text, x, y);\n }\n this.dirty = false;\n };\n Text.className = 'Text';\n Text.defaultStyles = chainObjects(Shape.defaultStyles, {\n textAlign: 'start',\n fontStyle: undefined,\n fontWeight: undefined,\n fontSize: 10,\n fontFamily: 'sans-serif',\n textBaseline: 'alphabetic'\n });\n return Text;\n}(Shape));\nexport { Text };\n","// @ts-ignore Suppress tsc error: Property 'sign' does not exist on type 'Math'\nvar sign = Math.sign ? Math.sign : function (x) {\n x = +x;\n if (x === 0 || isNaN(x)) {\n return x;\n }\n return x > 0 ? 1 : -1;\n};\n/**\n * Finds the roots of a parametric linear equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nexport function linearRoot(a, b) {\n var t = -b / a;\n return (a !== 0 && t >= 0 && t <= 1) ? [t] : [];\n}\n/**\n * Finds the roots of a parametric quadratic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n */\nexport function quadraticRoots(a, b, c) {\n if (a === 0) {\n return linearRoot(b, c);\n }\n var D = b * b - 4 * a * c; // The polynomial's discriminant.\n var roots = [];\n if (D === 0) { // A single real root.\n var t = -b / (2 * a);\n if (t >= 0 && t <= 1) {\n roots.push(t);\n }\n }\n else if (D > 0) { // A pair of distinct real roots.\n var rD = Math.sqrt(D);\n var t1 = (-b - rD) / (2 * a);\n var t2 = (-b + rD) / (2 * a);\n if (t1 >= 0 && t1 <= 1) {\n roots.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n roots.push(t2);\n }\n }\n // else -> Complex roots.\n return roots;\n}\n/**\n * Finds the roots of a parametric cubic equation in `t`,\n * where `t` lies in the interval of `[0,1]`.\n * Returns an array of parametric intersection locations along the cubic,\n * excluding out-of-bounds intersections (before or after the end point\n * or in the imaginary plane).\n * An adaptation of http://www.particleincell.com/blog/2013/cubic-line-intersection/\n */\nexport function cubicRoots(a, b, c, d) {\n if (a === 0) {\n return quadraticRoots(b, c, d);\n }\n var A = b / a;\n var B = c / a;\n var C = d / a;\n var Q = (3 * B - A * A) / 9;\n var R = (9 * A * B - 27 * C - 2 * A * A * A) / 54;\n var D = Q * Q * Q + R * R; // The polynomial's discriminant.\n var third = 1 / 3;\n var roots = [];\n if (D >= 0) { // Complex or duplicate roots.\n var rD = Math.sqrt(D);\n var S = sign(R + rD) * Math.pow(Math.abs(R + rD), third);\n var T = sign(R - rD) * Math.pow(Math.abs(R - rD), third);\n var Im = Math.abs(Math.sqrt(3) * (S - T) / 2); // Complex part of the root pair.\n var t = -third * A + (S + T); // A real root.\n if (t >= 0 && t <= 1) {\n roots.push(t);\n }\n if (Im === 0) {\n var t_1 = -third * A - (S + T) / 2; // The real part of a complex root.\n if (t_1 >= 0 && t_1 <= 1) {\n roots.push(t_1);\n }\n }\n }\n else { // Distinct real roots.\n var theta = Math.acos(R / Math.sqrt(-Q * Q * Q));\n var thirdA = third * A;\n var twoSqrtQ = 2 * Math.sqrt(-Q);\n var t1 = twoSqrtQ * Math.cos(third * theta) - thirdA;\n var t2 = twoSqrtQ * Math.cos(third * (theta + 2 * Math.PI)) - thirdA;\n var t3 = twoSqrtQ * Math.cos(third * (theta + 4 * Math.PI)) - thirdA;\n if (t1 >= 0 && t1 <= 1) {\n roots.push(t1);\n }\n if (t2 >= 0 && t2 <= 1) {\n roots.push(t2);\n }\n if (t3 >= 0 && t3 <= 1) {\n roots.push(t3);\n }\n }\n return roots;\n}\n","import { cubicRoots } from \"./polyRoots\";\n/**\n * Returns the intersection point for the given pair of line segments, or null,\n * if the segments are parallel or don't intersect.\n * Based on http://paulbourke.net/geometry/pointlineplane/\n */\nexport function segmentIntersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {\n var d = (ax2 - ax1) * (by2 - by1) - (ay2 - ay1) * (bx2 - bx1);\n if (d === 0) { // The lines are parallel.\n return null;\n }\n var ua = ((bx2 - bx1) * (ay1 - by1) - (ax1 - bx1) * (by2 - by1)) / d;\n var ub = ((ax2 - ax1) * (ay1 - by1) - (ay2 - ay1) * (ax1 - bx1)) / d;\n if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {\n return {\n x: ax1 + ua * (ax2 - ax1),\n y: ay1 + ua * (ay2 - ay1)\n };\n }\n return null; // The intersection point is outside either or both segments.\n}\n/**\n * Returns intersection points of the given cubic curve and the line segment.\n * Takes in x/y components of cubic control points and line segment start/end points\n * as parameters.\n */\nexport function cubicSegmentIntersections(px1, py1, px2, py2, px3, py3, px4, py4, x1, y1, x2, y2) {\n var intersections = [];\n // Find line equation coefficients.\n var A = y1 - y2;\n var B = x2 - x1;\n var C = x1 * (y2 - y1) - y1 * (x2 - x1);\n // Find cubic Bezier curve equation coefficients from control points.\n var bx = bezierCoefficients(px1, px2, px3, px4);\n var by = bezierCoefficients(py1, py2, py3, py4);\n var a = A * bx[0] + B * by[0]; // t^3\n var b = A * bx[1] + B * by[1]; // t^2\n var c = A * bx[2] + B * by[2]; // t\n var d = A * bx[3] + B * by[3] + C; // 1\n var roots = cubicRoots(a, b, c, d);\n // Verify that the roots are within bounds of the linear segment.\n for (var i = 0; i < roots.length; i++) {\n var t = roots[i];\n var tt = t * t;\n var ttt = t * tt;\n // Find the cartesian plane coordinates for the parametric root `t`.\n var x = bx[0] * ttt + bx[1] * tt + bx[2] * t + bx[3];\n var y = by[0] * ttt + by[1] * tt + by[2] * t + by[3];\n // The parametric cubic roots we found are intersection points\n // with an infinite line, and so the x/y coordinates above are as well.\n // Make sure the x/y is also within the bounds of the given segment.\n var s = void 0;\n if (x1 !== x2) {\n s = (x - x1) / (x2 - x1);\n }\n else { // the line is vertical\n s = (y - y1) / (y2 - y1);\n }\n if (s >= 0 && s <= 1) {\n intersections.push({ x: x, y: y });\n }\n }\n return intersections;\n}\n/**\n * Returns the given coordinates vector multiplied by the coefficient matrix\n * of the parametric cubic Bézier equation.\n */\nexport function bezierCoefficients(P1, P2, P3, P4) {\n return [\n -P1 + 3 * P2 - 3 * P3 + P4,\n 3 * P1 - 6 * P2 + 3 * P3,\n -3 * P1 + 3 * P2,\n P1 // | 1 0 0 0| |P4|\n ];\n}\n","import { cubicSegmentIntersections, segmentIntersection } from \"./intersection\";\nvar Path2D = /** @class */ (function () {\n function Path2D() {\n // The methods of this class will likely be called many times per animation frame,\n // and any allocation can trigger a GC cycle during animation, so we attempt\n // to minimize the number of allocations.\n this.commands = [];\n this.params = [];\n this._closedPath = false;\n }\n Path2D.prototype.moveTo = function (x, y) {\n if (this.xy) {\n this.xy[0] = x;\n this.xy[1] = y;\n }\n else {\n this.xy = [x, y];\n }\n this.commands.push('M');\n this.params.push(x, y);\n };\n Path2D.prototype.lineTo = function (x, y) {\n if (this.xy) {\n this.commands.push('L');\n this.params.push(x, y);\n this.xy[0] = x;\n this.xy[1] = y;\n }\n else {\n this.moveTo(x, y);\n }\n };\n Path2D.prototype.rect = function (x, y, width, height) {\n this.moveTo(x, y);\n this.lineTo(x + width, y);\n this.lineTo(x + width, y + height);\n this.lineTo(x, y + height);\n this.closePath();\n };\n /**\n * Adds an arc segment to the path definition.\n * https://www.w3.org/TR/SVG11/paths.html#PathDataEllipticalArcCommands\n * @param rx The major-axis radius.\n * @param ry The minor-axis radius.\n * @param rotation The x-axis rotation, expressed in radians.\n * @param fA The large arc flag. `1` to use angle > π.\n * @param fS The sweep flag. `1` for the arc that goes to `x`/`y` clockwise.\n * @param x2 The x coordinate to arc to.\n * @param y2 The y coordinate to arc to.\n */\n Path2D.prototype.arcTo = function (rx, ry, rotation, fA, fS, x2, y2) {\n // Convert from endpoint to center parametrization:\n // https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes\n var xy = this.xy;\n if (!xy) {\n return;\n }\n if (rx < 0) {\n rx = -rx;\n }\n if (ry < 0) {\n ry = -ry;\n }\n var x1 = xy[0];\n var y1 = xy[1];\n var hdx = (x1 - x2) / 2;\n var hdy = (y1 - y2) / 2;\n var sinPhi = Math.sin(rotation);\n var cosPhi = Math.cos(rotation);\n var xp = cosPhi * hdx + sinPhi * hdy;\n var yp = -sinPhi * hdx + cosPhi * hdy;\n var ratX = xp / rx;\n var ratY = yp / ry;\n var lambda = ratX * ratX + ratY * ratY;\n var cx = (x1 + x2) / 2;\n var cy = (y1 + y2) / 2;\n var cpx = 0;\n var cpy = 0;\n if (lambda >= 1) {\n lambda = Math.sqrt(lambda);\n rx *= lambda;\n ry *= lambda;\n // me gives lambda == cpx == cpy == 0;\n }\n else {\n lambda = Math.sqrt(1 / lambda - 1);\n if (fA === fS) {\n lambda = -lambda;\n }\n cpx = lambda * rx * ratY;\n cpy = -lambda * ry * ratX;\n cx += cosPhi * cpx - sinPhi * cpy;\n cy += sinPhi * cpx + cosPhi * cpy;\n }\n var theta1 = Math.atan2((yp - cpy) / ry, (xp - cpx) / rx);\n var deltaTheta = Math.atan2((-yp - cpy) / ry, (-xp - cpx) / rx) - theta1;\n // if (fS) {\n // if (deltaTheta <= 0) {\n // deltaTheta += Math.PI * 2;\n // }\n // }\n // else {\n // if (deltaTheta >= 0) {\n // deltaTheta -= Math.PI * 2;\n // }\n // }\n this.cubicArc(cx, cy, rx, ry, rotation, theta1, theta1 + deltaTheta, 1 - fS);\n };\n Path2D.prototype.arcToAlt = function (rx, ry, rotation, fA, fS, x2, y2) {\n // Convert from endpoint to center parametrization. See:\n // https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes\n if (!this.xy) {\n return;\n }\n if (rx < 0) {\n rx = -rx;\n }\n if (ry < 0) {\n ry = -ry;\n }\n var x1 = this.xy[0];\n var y1 = this.xy[1];\n var hdx = (x1 - x2) / 2;\n var hdy = (y1 - y2) / 2;\n var sinPhi = Math.sin(rotation);\n var cosPhi = Math.cos(rotation);\n var x1p = cosPhi * hdx + sinPhi * hdy;\n var y1p = -sinPhi * hdx + cosPhi * hdy;\n var rx_y1p = rx * rx * y1p * y1p;\n var ry_x1p = ry * ry * x1p * x1p;\n var root = Math.sqrt((rx * rx * ry * ry - rx_y1p - ry_x1p) / (rx_y1p + ry_x1p));\n var rootSign = fA === fS ? 0 : 1;\n var cxp = rootSign * root * rx * y1p / ry;\n var cyp = -rootSign * root * ry * x1p / rx;\n var cx = cosPhi * cxp - sinPhi * cyp + (x1 + x2) / 2;\n var cy = sinPhi * cxp + cosPhi * cyp + (y1 + y2) / 2;\n var theta1 = Math.acos((x1p - cxp) / rx / ((x1p - cxp) / rx));\n };\n /**\n * Approximates an elliptical arc with up to four cubic Bézier curves.\n * @param commands The string array to write SVG command letters to.\n * @param params The number array to write SVG command parameters (cubic control points) to.\n * @param cx The x-axis coordinate for the ellipse's center.\n * @param cy The y-axis coordinate for the ellipse's center.\n * @param rx The ellipse's major-axis radius.\n * @param ry The ellipse's minor-axis radius.\n * @param phi The rotation for this ellipse, expressed in radians.\n * @param theta1 The starting angle, measured clockwise from the positive x-axis and expressed in radians.\n * @param theta2 The ending angle, measured clockwise from the positive x-axis and expressed in radians.\n * @param anticlockwise The arc control points are always placed clockwise from `theta1` to `theta2`,\n * even when `theta1 > theta2`, unless this flag is set to `1`.\n */\n Path2D.cubicArc = function (commands, params, cx, cy, rx, ry, phi, theta1, theta2, anticlockwise) {\n if (anticlockwise) {\n var temp = theta1;\n theta1 = theta2;\n theta2 = temp;\n }\n var start = params.length;\n // See https://pomax.github.io/bezierinfo/#circles_cubic\n // Arc of unit circle (start angle = 0, end angle <= π/2) in cubic Bézier coordinates:\n // S = [1, 0]\n // C1 = [1, f]\n // C2 = [cos(θ) + f * sin(θ), sin(θ) - f * cos(θ)]\n // E = [cos(θ), sin(θ)]\n // f = 4/3 * tan(θ/4)\n var f90 = 0.5522847498307935; // f for θ = π/2 is 4/3 * (Math.sqrt(2) - 1)\n var sinTheta1 = Math.sin(theta1);\n var cosTheta1 = Math.cos(theta1);\n var sinPhi = Math.sin(phi);\n var cosPhi = Math.cos(phi);\n var rightAngle = Math.PI / 2;\n // Since we know how to draw an arc of a unit circle with a cubic Bézier,\n // to draw an elliptical arc with arbitrary rotation and radii we:\n // 1) rotate the Bézier coordinates that represent a circular arc by θ\n // 2) scale the circular arc separately along the x/y axes, making it elliptical\n // 3) rotate elliptical arc by φ\n // |cos(φ) -sin(φ)| |sx 0| |cos(θ) -sin(θ)| -> |xx xy|\n // |sin(φ) cos(φ)| | 0 sy| |sin(θ) cos(θ)| -> |yx yy|\n var xx = cosPhi * cosTheta1 * rx - sinPhi * sinTheta1 * ry;\n var yx = sinPhi * cosTheta1 * rx + cosPhi * sinTheta1 * ry;\n var xy = -cosPhi * sinTheta1 * rx - sinPhi * cosTheta1 * ry;\n var yy = -sinPhi * sinTheta1 * rx + cosPhi * cosTheta1 * ry;\n // TODO: what if delta between θ1 and θ2 is greater than 2π?\n // Always draw clockwise from θ1 to θ2.\n theta2 -= theta1;\n if (theta2 < 0) {\n theta2 += Math.PI * 2;\n }\n // Multiplying each point [x, y] by:\n // |xx xy cx| |x|\n // |yx yy cy| |y|\n // | 0 0 1| |1|\n // TODO: This move command may be redundant, if we are already at this point.\n // The coordinates of the point calculated here may differ ever so slightly\n // because of precision error.\n commands.push('M');\n params.push(xx + cx, yx + cy);\n while (theta2 >= rightAngle) {\n theta2 -= rightAngle;\n commands.push('C');\n // Temp workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=993330\n // Revert this commit when fixed ^^.\n var lastX = xy + cx;\n params.push(xx + xy * f90 + cx, yx + yy * f90 + cy, xx * f90 + xy + cx, yx * f90 + yy + cy, Math.abs(lastX) < 1e-8 ? 0 : lastX, yy + cy);\n // Prepend π/2 rotation matrix.\n // |xx xy| | 0 1| -> | xy -xx|\n // |yx yy| |-1 0| -> | yy -yx|\n // [xx, yx, xy, yy] = [xy, yy, -xx, -yx];\n // Compared to swapping with a temp variable, destructuring is:\n // - 10% faster in Chrome 70\n // - 99% slower in Firefox 63\n // Temp variable solution is 45% faster in FF than Chrome.\n // https://jsperf.com/multi-swap\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1165569\n var temp = xx;\n xx = xy;\n xy = -temp;\n temp = yx;\n yx = yy;\n yy = -temp;\n }\n if (theta2) {\n var f = 4 / 3 * Math.tan(theta2 / 4);\n var sinPhi2 = Math.sin(theta2);\n var cosPhi2 = Math.cos(theta2);\n var C2x = cosPhi2 + f * sinPhi2;\n var C2y = sinPhi2 - f * cosPhi2;\n commands.push('C');\n // Temp workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=993330\n // Revert this commit when fixed ^^.\n var lastX = xx * cosPhi2 + xy * sinPhi2 + cx;\n params.push(xx + xy * f + cx, yx + yy * f + cy, xx * C2x + xy * C2y + cx, yx * C2x + yy * C2y + cy, Math.abs(lastX) < 1e-8 ? 0 : lastX, yx * cosPhi2 + yy * sinPhi2 + cy);\n }\n if (anticlockwise) {\n for (var i = start, j = params.length - 2; i < j; i += 2, j -= 2) {\n var temp = params[i];\n params[i] = params[j];\n params[j] = temp;\n temp = params[i + 1];\n params[i + 1] = params[j + 1];\n params[j + 1] = temp;\n }\n }\n };\n Path2D.prototype.cubicArc = function (cx, cy, rx, ry, phi, theta1, theta2, anticlockwise) {\n var commands = this.commands;\n var params = this.params;\n var start = commands.length;\n Path2D.cubicArc(commands, params, cx, cy, rx, ry, phi, theta1, theta2, anticlockwise);\n var x = params[params.length - 2];\n var y = params[params.length - 1];\n if (this.xy) {\n commands[start] = 'L';\n this.xy[0] = x;\n this.xy[1] = y;\n }\n else {\n this.xy = [x, y];\n }\n };\n /**\n * Returns the `[x, y]` coordinates of the curve at `t`.\n * @param points `(n + 1) * 2` control point coordinates for a Bézier curve of n-th order.\n * @param t\n */\n Path2D.prototype.deCasteljau = function (points, t) {\n var n = points.length;\n if (n < 2 || n % 2 === 1) {\n throw new Error('Fewer than two points or not an even count.');\n }\n else if (n === 2 || t === 0) {\n return points.slice(0, 2);\n }\n else if (t === 1) {\n return points.slice(-2);\n }\n else {\n var newPoints = [];\n var last = n - 2;\n for (var i = 0; i < last; i += 2) {\n newPoints.push((1 - t) * points[i] + t * points[i + 2], // x\n (1 - t) * points[i + 1] + t * points[i + 3] // y\n );\n }\n return this.deCasteljau(newPoints, t);\n }\n };\n /**\n * Approximates the given curve using `n` line segments.\n * @param points `(n + 1) * 2` control point coordinates for a Bézier curve of n-th order.\n * @param n\n */\n Path2D.prototype.approximateCurve = function (points, n) {\n var xy = this.deCasteljau(points, 0);\n this.moveTo(xy[0], xy[1]);\n var step = 1 / n;\n for (var t = step; t <= 1; t += step) {\n var xy_1 = this.deCasteljau(points, t);\n this.lineTo(xy_1[0], xy_1[1]);\n }\n };\n /**\n * Adds a quadratic curve segment to the path definition.\n * Note: the given quadratic segment is converted and stored as a cubic one.\n * @param cx x-component of the curve's control point\n * @param cy y-component of the curve's control point\n * @param x x-component of the end point\n * @param y y-component of the end point\n */\n Path2D.prototype.quadraticCurveTo = function (cx, cy, x, y) {\n if (!this.xy) {\n this.moveTo(cx, cy);\n }\n // See https://pomax.github.io/bezierinfo/#reordering\n this.cubicCurveTo((this.xy[0] + 2 * cx) / 3, (this.xy[1] + 2 * cy) / 3, // 1/3 start + 2/3 control\n (2 * cx + x) / 3, (2 * cy + y) / 3, // 2/3 control + 1/3 end\n x, y);\n };\n Path2D.prototype.cubicCurveTo = function (cx1, cy1, cx2, cy2, x, y) {\n if (!this.xy) {\n this.moveTo(cx1, cy1);\n }\n this.commands.push('C');\n this.params.push(cx1, cy1, cx2, cy2, x, y);\n this.xy[0] = x;\n this.xy[1] = y;\n };\n Object.defineProperty(Path2D.prototype, \"closedPath\", {\n get: function () {\n return this._closedPath;\n },\n enumerable: true,\n configurable: true\n });\n Path2D.prototype.closePath = function () {\n if (this.xy) {\n this.xy = undefined;\n this.commands.push('Z');\n this._closedPath = true;\n }\n };\n Path2D.prototype.clear = function () {\n this.commands.length = 0;\n this.params.length = 0;\n this.xy = undefined;\n this._closedPath = false;\n };\n Path2D.prototype.isPointInPath = function (x, y) {\n var commands = this.commands;\n var params = this.params;\n var cn = commands.length;\n // Hit testing using ray casting method, where the ray's origin is some point\n // outside the path. In this case, an offscreen point that is remote enough, so that\n // even if the path itself is large and is partially offscreen, the ray's origin\n // will likely be outside the path anyway. To test if the given point is inside the\n // path or not, we cast a ray from the origin to the given point and check the number\n // of intersections of this segment with the path. If the number of intersections is\n // even, then the ray both entered and exited the path an equal number of times,\n // therefore the point is outside the path, and inside the path, if the number of\n // intersections is odd. Since the path is compound, we check if the ray segment\n // intersects with each of the path's segments, which can be either a line segment\n // (one or no intersection points) or a Bézier curve segment (up to 3 intersection\n // points).\n var ox = -10000;\n var oy = -10000;\n // the starting point of the current path\n var sx = NaN;\n var sy = NaN;\n // the previous point of the current path\n var px = 0;\n var py = 0;\n var intersectionCount = 0;\n for (var ci = 0, pi = 0; ci < cn; ci++) {\n switch (commands[ci]) {\n case 'M':\n if (!isNaN(sx)) {\n if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n intersectionCount++;\n }\n }\n sx = px = params[pi++];\n sy = py = params[pi++];\n break;\n case 'L':\n if (segmentIntersection(px, py, px = params[pi++], py = params[pi++], ox, oy, x, y)) {\n intersectionCount++;\n }\n break;\n case 'C':\n intersectionCount += cubicSegmentIntersections(px, py, params[pi++], params[pi++], params[pi++], params[pi++], px = params[pi++], py = params[pi++], ox, oy, x, y).length;\n break;\n case 'Z':\n if (!isNaN(sx)) {\n if (segmentIntersection(sx, sy, px, py, ox, oy, x, y)) {\n intersectionCount++;\n }\n }\n break;\n }\n }\n return intersectionCount % 2 === 1;\n };\n Path2D.fromString = function (value) {\n var path = new Path2D();\n path.setFromString(value);\n return path;\n };\n /**\n * Split the SVG path at command letters,\n * then extract the command letter and parameters from each substring.\n * @param value\n */\n Path2D.parseSvgPath = function (value) {\n return value.trim().split(Path2D.splitCommandsRe).map(function (part) {\n var strParams = part.match(Path2D.matchParamsRe);\n return {\n command: part.substr(0, 1),\n params: strParams ? strParams.map(parseFloat) : []\n };\n });\n };\n Path2D.prettifySvgPath = function (value) {\n return Path2D.parseSvgPath(value).map(function (d) { return d.command + d.params.join(','); }).join('\\n');\n };\n /**\n * See https://www.w3.org/TR/SVG11/paths.html\n * @param value\n */\n Path2D.prototype.setFromString = function (value) {\n var _this = this;\n this.clear();\n var parts = Path2D.parseSvgPath(value);\n // Current point.\n var x;\n var y;\n // Last control point. Used to calculate the reflection point\n // for `S`, `s`, `T`, `t` commands.\n var cpx;\n var cpy;\n var lastCommand;\n function checkQuadraticCP() {\n if (!lastCommand.match(Path2D.quadraticCommandRe)) {\n cpx = x;\n cpy = y;\n }\n }\n function checkCubicCP() {\n if (!lastCommand.match(Path2D.cubicCommandRe)) {\n cpx = x;\n cpy = y;\n }\n }\n // But that will make compiler complain about x/y, cpx/cpy\n // being used without being set first.\n parts.forEach(function (part) {\n var p = part.params;\n var n = p.length;\n var i = 0;\n switch (part.command) {\n case 'M':\n _this.moveTo(x = p[i++], y = p[i++]);\n while (i < n) {\n _this.lineTo(x = p[i++], y = p[i++]);\n }\n break;\n case 'm':\n _this.moveTo(x += p[i++], y += p[i++]);\n while (i < n) {\n _this.lineTo(x += p[i++], y += p[i++]);\n }\n break;\n case 'L':\n while (i < n) {\n _this.lineTo(x = p[i++], y = p[i++]);\n }\n break;\n case 'l':\n while (i < n) {\n _this.lineTo(x += p[i++], y += p[i++]);\n }\n break;\n case 'C':\n while (i < n) {\n _this.cubicCurveTo(p[i++], p[i++], cpx = p[i++], cpy = p[i++], x = p[i++], y = p[i++]);\n }\n break;\n case 'c':\n while (i < n) {\n _this.cubicCurveTo(x + p[i++], y + p[i++], cpx = x + p[i++], cpy = y + p[i++], x += p[i++], y += p[i++]);\n }\n break;\n case 'S':\n checkCubicCP();\n while (i < n) {\n _this.cubicCurveTo(x + x - cpx, y + y - cpy, cpx = p[i++], cpy = p[i++], x = p[i++], y = p[i++]);\n }\n break;\n case 's':\n checkCubicCP();\n while (i < n) {\n _this.cubicCurveTo(x + x - cpx, y + y - cpy, cpx = x + p[i++], cpy = y + p[i++], x += p[i++], y += p[i++]);\n }\n break;\n case 'Q':\n while (i < n) {\n _this.quadraticCurveTo(cpx = p[i++], cpy = p[i++], x = p[i++], y = p[i++]);\n }\n break;\n case 'q':\n while (i < n) {\n _this.quadraticCurveTo(cpx = x + p[i++], cpy = y + p[i++], x += p[i++], y += p[i++]);\n }\n break;\n case 'T':\n checkQuadraticCP();\n while (i < n) {\n _this.quadraticCurveTo(cpx = x + x - cpx, cpy = y + y - cpy, x = p[i++], y = p[i++]);\n }\n break;\n case 't':\n checkQuadraticCP();\n while (i < n) {\n _this.quadraticCurveTo(cpx = x + x - cpx, cpy = y + y - cpy, x += p[i++], y += p[i++]);\n }\n break;\n case 'A':\n while (i < n) {\n _this.arcTo(p[i++], p[i++], p[i++] * Math.PI / 180, p[i++], p[i++], x = p[i++], y = p[i++]);\n }\n break;\n case 'a':\n while (i < n) {\n _this.arcTo(p[i++], p[i++], p[i++] * Math.PI / 180, p[i++], p[i++], x += p[i++], y += p[i++]);\n }\n break;\n case 'Z':\n case 'z':\n _this.closePath();\n break;\n case 'H':\n while (i < n) {\n _this.lineTo(x = p[i++], y);\n }\n break;\n case 'h':\n while (i < n) {\n _this.lineTo(x += p[i++], y);\n }\n break;\n case 'V':\n while (i < n) {\n _this.lineTo(x, y = p[i++]);\n }\n break;\n case 'v':\n while (i < n) {\n _this.lineTo(x, y += p[i++]);\n }\n break;\n }\n lastCommand = part.command;\n });\n };\n Path2D.prototype.toString = function () {\n var c = this.commands;\n var p = this.params;\n var cn = c.length;\n var out = [];\n for (var ci = 0, pi = 0; ci < cn; ci++) {\n switch (c[ci]) {\n case 'M':\n out.push('M' + p[pi++] + ',' + p[pi++]);\n break;\n case 'L':\n out.push('L' + p[pi++] + ',' + p[pi++]);\n break;\n case 'C':\n out.push('C' + p[pi++] + ',' + p[pi++] + ' ' +\n p[pi++] + ',' + p[pi++] + ' ' +\n p[pi++] + ',' + p[pi++]);\n break;\n case 'Z':\n out.push('Z');\n break;\n }\n }\n return out.join('');\n };\n Path2D.prototype.toPrettyString = function () {\n return Path2D.prettifySvgPath(this.toString());\n };\n Path2D.prototype.toSvg = function () {\n return Path2D.xmlDeclaration + \"\\n\\n \\n\";\n };\n Path2D.prototype.toDebugSvg = function () {\n var d = Path2D.prettifySvgPath(this.toString());\n return Path2D.xmlDeclaration + \"\\n\\n \\n\";\n };\n /**\n * Returns an array of sub-paths of this Path,\n * where each sub-path is represented exclusively by cubic segments.\n */\n Path2D.prototype.toCubicPaths = function () {\n // Each sub-path is an array of `(n * 3 + 1) * 2` numbers,\n // where `n` is the number of segments.\n var paths = [];\n var params = this.params;\n // current path\n var path;\n // the starting point of the current path\n var sx;\n var sy;\n // the previous point of the current path\n var px;\n var py;\n var i = 0; // current parameter\n this.commands.forEach(function (command) {\n switch (command) {\n case 'M':\n path = [\n sx = px = params[i++],\n sy = py = params[i++]\n ];\n paths.push(path);\n break;\n case 'L':\n var x = params[i++];\n var y = params[i++];\n // Place control points along the line `a + (b - a) * t`\n // at t = 1/3 and 2/3:\n path.push((px + px + x) / 3, (py + py + y) / 3, (px + x + x) / 3, (py + y + y) / 3, px = x, py = y);\n break;\n case 'C':\n path.push(params[i++], params[i++], params[i++], params[i++], px = params[i++], py = params[i++]);\n break;\n case 'Z':\n path.push((px + px + sx) / 3, (py + py + sy) / 3, (px + sx + sx) / 3, (py + sy + sy) / 3, px = sx, py = sy);\n break;\n }\n });\n return paths;\n };\n Path2D.cubicPathToString = function (path) {\n var n = path.length;\n if (!(n % 2 === 0 && (n / 2 - 1) / 2 >= 1)) {\n throw new Error('Invalid path.');\n }\n return 'M' + path.slice(0, 2).join(',') + 'C' + path.slice(2).join(',');\n };\n Path2D.splitCommandsRe = /(?=[AaCcHhLlMmQqSsTtVvZz])/g;\n Path2D.matchParamsRe = /-?[0-9]*\\.?\\d+/g;\n Path2D.quadraticCommandRe = /[QqTt]/;\n Path2D.cubicCommandRe = /[CcSs]/;\n Path2D.xmlDeclaration = '';\n Path2D.xmlns = 'http://www.w3.org/2000/svg';\n return Path2D;\n}());\nexport { Path2D };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Shape } from \"./shape\";\nimport { Path2D } from \"../path2D\";\nvar Path = /** @class */ (function (_super) {\n __extends(Path, _super);\n function Path() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * Declare a path to retain for later rendering and hit testing\n * using custom Path2D class. Think of it as a TypeScript version\n * of the native Path2D (with some differences) that works in all browsers.\n */\n _this.path = new Path2D();\n /**\n * The path only has to be updated when certain attributes change.\n * For example, if transform attributes (such as `translationX`)\n * are changed, we don't have to update the path. The `dirtyPath` flag\n * is how we keep track if the path has to be updated or not.\n */\n _this._dirtyPath = true;\n /**\n * Path definition in SVG path syntax:\n * https://www.w3.org/TR/SVG11/paths.html#DAttribute\n */\n _this._svgPath = '';\n return _this;\n }\n Object.defineProperty(Path.prototype, \"dirtyPath\", {\n get: function () {\n return this._dirtyPath;\n },\n set: function (value) {\n if (this._dirtyPath !== value) {\n this._dirtyPath = value;\n if (value) {\n this.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Path.prototype, \"svgPath\", {\n get: function () {\n return this._svgPath;\n },\n set: function (value) {\n if (this._svgPath !== value) {\n this._svgPath = value;\n this.path.setFromString(value);\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Path.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n return this.path.closedPath && this.path.isPointInPath(point.x, point.y);\n };\n Path.prototype.isPointInStroke = function (x, y) {\n return false;\n };\n Path.prototype.updatePath = function () { };\n Path.prototype.render = function (ctx) {\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n // this.matrix.transformBBox(this.computeBBox()!).render(ctx);\n this.matrix.toContext(ctx);\n if (this.dirtyPath) {\n this.updatePath();\n this.dirtyPath = false;\n }\n this.scene.appendPath(this.path);\n this.fillStroke(ctx);\n this.dirty = false;\n };\n Path.className = 'Path';\n return Path;\n}(Shape));\nexport { Path };\n","export function isEqual(a, b, epsilon) {\n if (epsilon === void 0) { epsilon = 1e-10; }\n return Math.abs(a - b) < epsilon;\n}\n/**\n * `Number.toFixed(n)` always formats a number so that it has `n` digits after the decimal point.\n * For example, `Number(0.00003427).toFixed(2)` returns `0.00`.\n * That's not very helpful, because all the meaningful information is lost.\n * In this case we would want the formatted value to have at least two significant digits: `0.000034`,\n * not two fraction digits.\n * @param value\n * @param fractionOrSignificantDigits\n */\nexport function toFixed(value, fractionOrSignificantDigits) {\n if (fractionOrSignificantDigits === void 0) { fractionOrSignificantDigits = 2; }\n var power = Math.floor(Math.log(Math.abs(value)) / Math.LN10);\n if (power >= 0 || !isFinite(power)) {\n return value.toFixed(fractionOrSignificantDigits); // fraction digits\n }\n return value.toFixed(Math.abs(power) - 1 + fractionOrSignificantDigits); // significant digits\n}\nvar numberUnits = [\"\", \"K\", \"M\", \"B\", \"T\"];\nexport function toReadableNumber(value, fractionDigits) {\n if (fractionDigits === void 0) { fractionDigits = 2; }\n // For example: toReadableNumber(10550000000) yields \"10.6B\"\n var prefix = '';\n if (value <= 0) {\n value = -value;\n prefix = '-';\n }\n var thousands = ~~(Math.log10(value) / Math.log10(1000)); // discard the floating point part\n return prefix + (value / Math.pow(1000.0, thousands)).toFixed(fractionDigits) + numberUnits[thousands];\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Shape } from \"./shape\";\nimport { Path } from \"./path\";\nimport { BBox } from \"../bbox\";\nimport { normalizeAngle360 } from \"../../util/angle\";\nimport { chainObjects } from \"../../util/object\";\nimport { isEqual } from \"../../util/number\";\nexport var ArcType;\n(function (ArcType) {\n ArcType[ArcType[\"Open\"] = 0] = \"Open\";\n ArcType[ArcType[\"Chord\"] = 1] = \"Chord\";\n ArcType[ArcType[\"Round\"] = 2] = \"Round\";\n})(ArcType || (ArcType = {}));\n/**\n * Elliptical arc node.\n */\nvar Arc = /** @class */ (function (_super) {\n __extends(Arc, _super);\n function Arc() {\n var _this = _super.call(this) || this;\n _this._centerX = 0;\n _this._centerY = 0;\n _this._radiusX = 10;\n _this._radiusY = 10;\n _this._startAngle = 0;\n _this._endAngle = Math.PI * 2;\n _this._counterClockwise = false;\n /**\n * The type of arc to render:\n * - {@link ArcType.Open} - end points of the arc segment are not connected (default)\n * - {@link ArcType.Chord} - end points of the arc segment are connected by a line segment\n * - {@link ArcType.Round} - each of the end points of the arc segment are connected\n * to the center of the arc\n * Arcs with {@link ArcType.Open} do not support hit testing, even if they have their\n * {@link Shape.fillStyle} set, because they are not closed paths. Hit testing support\n * would require using two paths - one for rendering, another for hit testing - and there\n * doesn't seem to be a compelling reason to do that, when one can just use {@link ArcType.Chord}\n * to create a closed path.\n */\n _this._type = ArcType.Open;\n _this.restoreOwnStyles();\n return _this;\n }\n Object.defineProperty(Arc.prototype, \"centerX\", {\n get: function () {\n return this._centerX;\n },\n set: function (value) {\n if (this._centerX !== value) {\n this._centerX = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"centerY\", {\n get: function () {\n return this._centerY;\n },\n set: function (value) {\n if (this._centerY !== value) {\n this._centerY = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"radiusX\", {\n get: function () {\n return this._radiusX;\n },\n set: function (value) {\n if (this._radiusX !== value) {\n this._radiusX = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"radiusY\", {\n get: function () {\n return this._radiusY;\n },\n set: function (value) {\n if (this._radiusY !== value) {\n this._radiusY = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"startAngle\", {\n get: function () {\n return this._startAngle;\n },\n set: function (value) {\n if (this._startAngle !== value) {\n this._startAngle = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"endAngle\", {\n get: function () {\n return this._endAngle;\n },\n set: function (value) {\n if (this._endAngle !== value) {\n this._endAngle = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"fullPie\", {\n get: function () {\n return isEqual(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"counterClockwise\", {\n get: function () {\n return this._counterClockwise;\n },\n set: function (value) {\n if (this._counterClockwise !== value) {\n this._counterClockwise = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Arc.prototype, \"type\", {\n get: function () {\n return this._type;\n },\n set: function (value) {\n if (this._type !== value) {\n this._type = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Arc.prototype.updatePath = function () {\n var path = this.path;\n path.clear(); // No need to recreate the Path, can simply clear the existing one.\n // This is much faster than the native Path2D implementation even though this `cubicArc`\n // method is pure TypeScript and actually produces the definition of an elliptical arc,\n // where you can specify two radii and rotation, while Path2D's `arc` method simply produces\n // a circular arc. Maybe it's due to the experimental nature of the Path2D class,\n // maybe it's because we have to create a new instance of it on each render, who knows...\n path.cubicArc(this.centerX, this.centerY, this.radiusX, this.radiusY, 0, this.startAngle, this.endAngle, this.counterClockwise ? 1 : 0);\n if (this.type === ArcType.Chord) {\n path.closePath();\n }\n else if (this.type === ArcType.Round && !this.fullPie) {\n path.lineTo(this.centerX, this.centerY);\n path.closePath();\n }\n };\n Arc.prototype.computeBBox = function () {\n // Only works with full arcs (circles) and untransformed ellipses.\n return new BBox(this.centerX - this.radiusX, this.centerY - this.radiusY, this.radiusX * 2, this.radiusY * 2);\n };\n Arc.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return this.type !== ArcType.Open\n && bbox.containsPoint(point.x, point.y)\n && this.path.isPointInPath(point.x, point.y);\n };\n Arc.className = 'Arc';\n Arc.defaultStyles = chainObjects(Shape.defaultStyles, {\n lineWidth: 1,\n fillStyle: null\n });\n return Arc;\n}(Path));\nexport { Arc };\n","import { Group } from \"./scene/group\";\nimport { Selection } from \"./scene/selection\";\nimport { Line } from \"./scene/shape/line\";\nimport { NumericTicks } from \"./util/ticks\";\nimport { normalizeAngle360, normalizeAngle360Inclusive, toRadians } from \"./util/angle\";\nimport { Text } from \"./scene/shape/text\";\nimport { Arc } from \"./scene/shape/arc\";\nimport { BBox } from \"./scene/bbox\";\nimport { Matrix } from \"./scene/matrix\";\n// import { Rect } from \"./scene/shape/rect\"; // debug (bbox)\nvar Tags;\n(function (Tags) {\n Tags[Tags[\"Tick\"] = 0] = \"Tick\";\n Tags[Tags[\"GridLine\"] = 1] = \"GridLine\";\n})(Tags || (Tags = {}));\nvar AxisTick = /** @class */ (function () {\n function AxisTick() {\n /**\n * The line width to be used by axis ticks.\n */\n this.width = 1;\n /**\n * The line length to be used by axis ticks.\n */\n this.size = 6;\n /**\n * The color of the axis ticks.\n * Use `null` rather than `rgba(0, 0, 0, 0)` to make the ticks invisible.\n */\n this.color = 'rgba(195, 195, 195, 1)';\n /**\n * A hint of how many ticks to use (the exact number of ticks might differ),\n * a `TimeInterval` or a `CountableTimeInterval`.\n * For example:\n *\n * axis.tick.count = 5;\n * axis.tick.count = year;\n * axis.tick.count = month.every(6);\n */\n this.count = 10;\n }\n return AxisTick;\n}());\nexport { AxisTick };\nvar AxisLabel = /** @class */ (function () {\n function AxisLabel() {\n this.fontSize = 12;\n this.fontFamily = 'Verdana, sans-serif';\n /**\n * The padding between the labels and the ticks.\n */\n this.padding = 5;\n /**\n * The color of the labels.\n * Use `null` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n */\n this.color = 'rgba(87, 87, 87, 1)';\n /**\n * Custom label rotation in degrees.\n * Labels are rendered perpendicular to the axis line by default.\n * Or parallel to the axis line, if the {@link parallelLabels} is set to `true`.\n * The value of this config is used as the angular offset/deflection\n * from the default rotation.\n */\n this.rotation = 0;\n /**\n * By default labels and ticks are positioned to the left of the axis line.\n * `true` positions the labels to the right of the axis line.\n * However, if the axis is rotated, its easier to think in terms\n * of this side or the opposite side, rather than left and right.\n * We use the term `mirror` for conciseness, although it's not\n * true mirroring - for example, when a label is rotated, so that\n * it is inclined at the 45 degree angle, text flowing from north-west\n * to south-east, ending at the tick to the left of the axis line,\n * and then we set this config to `true`, the text will still be flowing\n * from north-west to south-east, _starting_ at the tick to the right\n * of the axis line.\n */\n this.mirrored = false;\n /**\n * Labels are rendered perpendicular to the axis line by default.\n * Setting this config to `true` makes labels render parallel to the axis line\n * and center aligns labels' text at the ticks.\n */\n this.parallel = false;\n }\n Object.defineProperty(AxisLabel.prototype, \"format\", {\n get: function () {\n return this._format;\n },\n set: function (value) {\n // See `TimeLocaleObject` docs for the list of supported format directives.\n if (this._format !== value) {\n this._format = value;\n if (this.onFormatChange) {\n this.onFormatChange(value);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n return AxisLabel;\n}());\nexport { AxisLabel };\n/**\n * A general purpose linear axis with no notion of orientation.\n * The axis is always rendered vertically, with horizontal labels positioned to the left\n * of the axis line by default. The axis can be {@link rotation | rotated} by an arbitrary angle,\n * so that it can be used as a top, right, bottom, left, radial or any other kind\n * of linear axis.\n * The generic `D` parameter is the type of the domain of the axis' scale.\n * The output range of the axis' scale is always numeric (screen coordinates).\n */\nvar Axis = /** @class */ (function () {\n function Axis(scale) {\n this.lineNode = new Line();\n this.group = new Group();\n this.line = {\n width: 1,\n color: 'rgba(195, 195, 195, 1)'\n };\n this.tick = new AxisTick();\n this.label = new AxisLabel();\n this.translation = { x: 0, y: 0 };\n this.rotation = 0; // axis rotation angle in degrees\n this._title = undefined;\n /**\n * The length of the grid. The grid is only visible in case of a non-zero value.\n * In case {@link radialGrid} is `true`, the value is interpreted as an angle\n * (in degrees).\n */\n this._gridLength = 0;\n /**\n * The array of styles to cycle through when rendering grid lines.\n * For example, use two {@link GridStyle} objects for alternating styles.\n * Contains only one {@link GridStyle} object by default, meaning all grid lines\n * have the same style.\n */\n this.gridStyle = [{\n stroke: 'rgba(219, 219, 219, 1)',\n lineDash: [4, 2]\n }];\n /**\n * `false` - render grid as lines of {@link gridLength} that extend the ticks\n * on the opposite side of the axis\n * `true` - render grid as concentric circles that go through the ticks\n */\n this._radialGrid = false;\n this.scale = scale;\n this.groupSelection = Selection.select(this.group).selectAll();\n this.label.onFormatChange = this.onTickFormatChange.bind(this);\n this.group.append(this.lineNode);\n this.onTickFormatChange();\n // this.group.append(this.bboxRect); // debug (bbox)\n }\n Object.defineProperty(Axis.prototype, \"range\", {\n get: function () {\n return this.scale.range;\n },\n set: function (value) {\n this.scale.range = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"domain\", {\n get: function () {\n return this.scale.domain;\n },\n set: function (value) {\n this.scale.domain = value;\n },\n enumerable: true,\n configurable: true\n });\n Axis.prototype.onTickFormatChange = function (format) {\n if (format) {\n if (this.scale.tickFormat) {\n this.tickFormatter = this.scale.tickFormat(10, format);\n }\n }\n else {\n if (this.scale.tickFormat) {\n this.tickFormatter = this.scale.tickFormat(10, undefined);\n }\n else {\n this.tickFormatter = undefined;\n }\n }\n };\n Object.defineProperty(Axis.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n var oldTitle = this._title;\n if (oldTitle !== value) {\n if (oldTitle) {\n this.group.removeChild(oldTitle.node);\n }\n if (value) {\n value.node.rotation = -Math.PI / 2;\n this.group.appendChild(value.node);\n }\n this._title = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"gridLength\", {\n get: function () {\n return this._gridLength;\n },\n set: function (value) {\n // Was visible and now invisible, or was invisible and now visible.\n if (this._gridLength && !value || !this._gridLength && value) {\n this.groupSelection = this.groupSelection.remove().setData([]);\n }\n this._gridLength = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Axis.prototype, \"radialGrid\", {\n get: function () {\n return this._radialGrid;\n },\n set: function (value) {\n if (this._radialGrid !== value) {\n this._radialGrid = value;\n this.groupSelection = this.groupSelection.remove().setData([]);\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates/removes/updates the scene graph nodes that constitute the axis.\n * Supposed to be called _manually_ after changing _any_ of the axis properties.\n * This allows to bulk set axis properties before updating the nodes.\n * The node changes made by this method are rendered on the next animation frame.\n * We could schedule this method call automatically on the next animation frame\n * when any of the axis properties change (the way we do when properties of scene graph's\n * nodes change), but this will mean that we first wait for the next animation\n * frame to make changes to the nodes of the axis, then wait for another animation\n * frame to render those changes. It's nice to have everything update automatically,\n * but this extra level of async indirection will not just introduce an unwanted delay,\n * it will also make it harder to reason about the program.\n */\n Axis.prototype.update = function () {\n var _this = this;\n var _a = this, group = _a.group, scale = _a.scale, tick = _a.tick, label = _a.label, gridStyle = _a.gridStyle;\n var rotation = toRadians(this.rotation);\n var parallelLabels = label.parallel;\n var labelRotation = normalizeAngle360(toRadians(label.rotation));\n group.translationX = this.translation.x;\n group.translationY = this.translation.y;\n group.rotation = rotation;\n var bandwidth = (scale.bandwidth || 0) / 2;\n // The side of the axis line to position the labels on.\n // -1 = left (default)\n // 1 = right\n var sideFlag = label.mirrored ? 1 : -1;\n // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n // flip the labels to avoid upside-down text, when the axis is rotated\n // such that it is in the right hemisphere, i.e. the angle of rotation\n // is in the [0, π] interval.\n // The rotation angle is normalized, so that we have an easier time checking\n // if it's in the said interval. Since the axis is always rendered vertically\n // and then rotated, zero rotation means 12 (not 3) o-clock.\n // -1 = flip\n // 1 = don't flip (default)\n var parallelFlipRotation = normalizeAngle360(rotation);\n var parallelFlipFlag = !labelRotation && parallelFlipRotation >= 0 && parallelFlipRotation <= Math.PI ? -1 : 1;\n var regularFlipRotation = normalizeAngle360(rotation - Math.PI / 2);\n // Flip if the axis rotation angle is in the top hemisphere.\n var regularFlipFlag = !labelRotation && regularFlipRotation >= 0 && regularFlipRotation <= Math.PI ? -1 : 1;\n var alignFlag = labelRotation >= 0 && labelRotation <= Math.PI ? -1 : 1;\n var ticks = scale.ticks(this.tick.count);\n var update = this.groupSelection.setData(ticks);\n update.exit.remove();\n var enter = update.enter.append(Group);\n // Line auto-snaps to pixel grid if vertical or horizontal.\n enter.append(Line).each(function (node) { return node.tag = Tags.Tick; });\n if (this.gridLength) {\n if (this.radialGrid) {\n enter.append(Arc).each(function (node) { return node.tag = Tags.GridLine; });\n }\n else {\n enter.append(Line).each(function (node) { return node.tag = Tags.GridLine; });\n }\n }\n enter.append(Text);\n var groupSelection = update.merge(enter);\n groupSelection\n .attrFn('translationY', function (_, datum) { return Math.round(scale.convert(datum) + bandwidth); });\n groupSelection.selectByTag(Tags.Tick)\n .each(function (line) {\n line.strokeWidth = tick.width;\n line.stroke = tick.color;\n })\n .attr('x1', sideFlag * tick.size)\n .attr('x2', 0)\n .attr('y1', 0)\n .attr('y2', 0);\n if (this.gridLength && gridStyle.length) {\n var styleCount_1 = gridStyle.length;\n var gridLines = void 0;\n if (this.radialGrid) {\n var angularGridLength_1 = normalizeAngle360Inclusive(toRadians(this.gridLength));\n gridLines = groupSelection.selectByTag(Tags.GridLine)\n .each(function (arc, datum) {\n var radius = Math.round(scale.convert(datum) + bandwidth);\n arc.centerX = 0;\n arc.centerY = scale.range[0] - radius;\n arc.endAngle = angularGridLength_1;\n arc.radiusX = radius;\n arc.radiusY = radius;\n });\n }\n else {\n gridLines = groupSelection.selectByTag(Tags.GridLine)\n .each(function (line) {\n line.x1 = 0;\n line.x2 = -sideFlag * _this.gridLength;\n line.y1 = 0;\n line.y2 = 0;\n line.visible = Math.abs(line.parent.translationY - scale.range[0]) > 1;\n });\n }\n gridLines.each(function (gridLine, _, index) {\n var style = gridStyle[index % styleCount_1];\n gridLine.stroke = style.stroke;\n gridLine.strokeWidth = tick.width;\n gridLine.lineDash = style.lineDash;\n gridLine.fill = undefined;\n });\n }\n var tickFormatter = this.tickFormatter;\n var fractionDigits = ticks instanceof NumericTicks ? ticks.fractionDigits : 0;\n var labelSelection = groupSelection.selectByClass(Text)\n .each(function (node, datum, index) {\n node.fontStyle = label.fontStyle;\n node.fontWeight = label.fontWeight;\n node.fontSize = label.fontSize;\n node.fontFamily = label.fontFamily;\n node.fill = label.color;\n node.textBaseline = parallelLabels && !labelRotation\n ? (sideFlag * parallelFlipFlag === -1 ? 'hanging' : 'bottom')\n : 'middle';\n node.text = label.formatter\n ? label.formatter({\n value: fractionDigits >= 0 ? datum : String(datum),\n index: index,\n fractionDigits: fractionDigits,\n formatter: tickFormatter\n })\n : fractionDigits\n // the `datum` is a floating point number\n ? datum.toFixed(fractionDigits)\n // the `datum` is an integer, a string or an object\n : tickFormatter\n ? tickFormatter(datum)\n : String(datum);\n node.textAlign = parallelLabels\n ? labelRotation ? (sideFlag * alignFlag === -1 ? 'end' : 'start') : 'center'\n : sideFlag * regularFlipFlag === -1 ? 'end' : 'start';\n });\n var labelX = sideFlag * (tick.size + label.padding);\n var autoRotation = parallelLabels\n ? parallelFlipFlag * Math.PI / 2\n : (regularFlipFlag === -1 ? Math.PI : 0);\n labelSelection.each(function (label) {\n label.x = labelX;\n label.rotationCenterX = labelX;\n label.rotation = autoRotation + labelRotation;\n });\n this.groupSelection = groupSelection;\n // Render axis line.\n var lineNode = this.lineNode;\n lineNode.x1 = 0;\n lineNode.x2 = 0;\n lineNode.y1 = scale.range[0];\n lineNode.y2 = scale.range[scale.range.length - 1];\n lineNode.strokeWidth = this.line.width;\n lineNode.stroke = this.line.color;\n lineNode.visible = ticks.length > 0;\n var title = this.title;\n if (title) {\n var padding = title.padding.bottom;\n var titleNode = title.node;\n var bbox = this.computeBBox({ excludeTitle: true });\n var titleRotationFlag = sideFlag === -1 && parallelFlipRotation > Math.PI && parallelFlipRotation < Math.PI * 2 ? -1 : 1;\n titleNode.rotation = titleRotationFlag * sideFlag * Math.PI / 2;\n titleNode.x = titleRotationFlag * sideFlag * (lineNode.y1 + lineNode.y2) / 2;\n if (sideFlag === -1) {\n titleNode.y = titleRotationFlag * (-padding - bbox.width + Math.max(bbox.x + bbox.width, 0));\n }\n else {\n titleNode.y = -padding - bbox.width - Math.min(bbox.x, 0);\n }\n // title.text = `Axis Title: ${sideFlag} ${toDegrees(parallelFlipRotation).toFixed(0)} ${titleRotationFlag}`;\n titleNode.textBaseline = titleRotationFlag === 1 ? 'bottom' : 'top';\n }\n // debug (bbox)\n // const bbox = this.computeBBox();\n // const bboxRect = this.bboxRect;\n // bboxRect.x = bbox.x;\n // bboxRect.y = bbox.y;\n // bboxRect.width = bbox.width;\n // bboxRect.height = bbox.height;\n };\n Axis.prototype.computeBBox = function (options) {\n var lineNode = this.lineNode;\n var labels = this.groupSelection.selectByClass(Text);\n var left = Infinity;\n var right = -Infinity;\n var top = Infinity;\n var bottom = -Infinity;\n labels.each(function (label) {\n // The label itself is rotated, but not translated, the group that\n // contains it is. So to capture the group transform in the label bbox\n // calculation we combine the transform matrices of the label and the group.\n // Depending on the timing of the `axis.computeBBox()` method call, we may\n // not have the group's and the label's transform matrices updated yet (because\n // the transform matrix is not recalculated whenever a node's transform attributes\n // change, instead it's marked for recalculation on the next frame by setting\n // the node's `dirtyTransform` flag to `true`), so we force them to update\n // right here by calling `computeTransformMatrix`.\n label.computeTransformMatrix();\n var matrix = Matrix.flyweight(label.matrix);\n var group = label.parent;\n group.computeTransformMatrix();\n matrix.preMultiplySelf(group.matrix);\n var labelBBox = label.computeBBox();\n if (labelBBox) {\n var bbox = matrix.transformBBox(labelBBox);\n left = Math.min(left, bbox.x);\n right = Math.max(right, bbox.x + bbox.width);\n top = Math.min(top, bbox.y);\n bottom = Math.max(bottom, bbox.y + bbox.height);\n }\n });\n if (this.title && (!options || !options.excludeTitle)) {\n var label = this.title.node;\n label.computeTransformMatrix();\n var matrix = Matrix.flyweight(label.matrix);\n var labelBBox = label.computeBBox();\n if (labelBBox) {\n var bbox = matrix.transformBBox(labelBBox);\n left = Math.min(left, bbox.x);\n right = Math.max(right, bbox.x + bbox.width);\n top = Math.min(top, bbox.y);\n bottom = Math.max(bottom, bbox.y + bbox.height);\n }\n }\n left = Math.min(left, 0);\n right = Math.max(right, 0);\n top = Math.min(top, lineNode.y1, lineNode.y2);\n bottom = Math.max(bottom, lineNode.y1, lineNode.y2);\n return new BBox(left, top, right - left, bottom - top);\n };\n return Axis;\n}());\nexport { Axis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Axis } from \"../axis\";\nexport var ChartAxisDirection;\n(function (ChartAxisDirection) {\n ChartAxisDirection[\"X\"] = \"x\";\n ChartAxisDirection[\"Y\"] = \"y\"; // means 'radius' in polar charts\n})(ChartAxisDirection || (ChartAxisDirection = {}));\nexport function flipChartAxisDirection(direction) {\n if (direction === ChartAxisDirection.X) {\n return ChartAxisDirection.Y;\n }\n else {\n return ChartAxisDirection.X;\n }\n}\nexport var ChartAxisPosition;\n(function (ChartAxisPosition) {\n ChartAxisPosition[\"Top\"] = \"top\";\n ChartAxisPosition[\"Right\"] = \"right\";\n ChartAxisPosition[\"Bottom\"] = \"bottom\";\n ChartAxisPosition[\"Left\"] = \"left\";\n ChartAxisPosition[\"Angle\"] = \"angle\";\n ChartAxisPosition[\"Radius\"] = \"radius\";\n})(ChartAxisPosition || (ChartAxisPosition = {}));\nvar ChartAxis = /** @class */ (function (_super) {\n __extends(ChartAxis, _super);\n function ChartAxis() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.keys = [];\n _this.boundSeries = [];\n _this.thickness = 0;\n return _this;\n }\n Object.defineProperty(ChartAxis.prototype, \"position\", {\n get: function () {\n return this._position;\n },\n set: function (value) {\n if (this._position !== value) {\n this._position = value;\n switch (value) {\n case ChartAxisPosition.Top:\n this.direction = ChartAxisDirection.X;\n this.rotation = -90;\n this.label.mirrored = true;\n this.label.parallel = true;\n break;\n case ChartAxisPosition.Right:\n this.direction = ChartAxisDirection.Y;\n this.rotation = 0;\n this.label.mirrored = true;\n this.label.parallel = false;\n break;\n case ChartAxisPosition.Bottom:\n this.direction = ChartAxisDirection.X;\n this.rotation = -90;\n this.label.mirrored = false;\n this.label.parallel = true;\n break;\n case ChartAxisPosition.Left:\n this.direction = ChartAxisDirection.Y;\n this.rotation = 0;\n this.label.mirrored = false;\n this.label.parallel = false;\n break;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n return ChartAxis;\n}(Axis));\nexport { ChartAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Path } from \"./path\";\nimport { Shape } from \"./shape\";\nimport { BBox } from \"../bbox\";\nexport var RectSizing;\n(function (RectSizing) {\n RectSizing[RectSizing[\"Content\"] = 0] = \"Content\";\n RectSizing[RectSizing[\"Border\"] = 1] = \"Border\";\n})(RectSizing || (RectSizing = {}));\nvar Rect = /** @class */ (function (_super) {\n __extends(Rect, _super);\n function Rect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._x = 0;\n _this._y = 0;\n _this._width = 10;\n _this._height = 10;\n _this._radius = 0;\n /**\n * If `true`, the rect is aligned to the pixel grid for crisp looking lines.\n * Animated rects may not look nice with this option enabled, for example\n * when a rect is translated by a sub-pixel value on each frame.\n */\n _this._crisp = false;\n _this.effectiveStrokeWidth = Shape.defaultStyles.strokeWidth;\n /**\n * Similar to https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing\n */\n _this._sizing = RectSizing.Content;\n return _this;\n }\n Object.defineProperty(Rect.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n set: function (value) {\n if (this._x !== value) {\n this._x = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n set: function (value) {\n if (this._y !== value) {\n this._y = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n set: function (value) {\n if (this._width !== value) {\n this._width = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n set: function (value) {\n if (this._height !== value) {\n this._height = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"radius\", {\n get: function () {\n return this._radius;\n },\n set: function (value) {\n if (this._radius !== value) {\n this._radius = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"crisp\", {\n get: function () {\n return this._crisp;\n },\n set: function (value) {\n if (this._crisp !== value) {\n this._crisp = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n // Normally, when the `lineWidth` changes, we only need to repaint the rect\n // without updating the path. If the `isCrisp` is set to `true` however,\n // we need to update the path to make sure the new stroke aligns to\n // the pixel grid. This is the reason we override the `lineWidth` setter\n // and getter here.\n if (this.crisp || this.sizing === RectSizing.Border) {\n this.dirtyPath = true;\n }\n else {\n this.effectiveStrokeWidth = value;\n this.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Rect.prototype, \"sizing\", {\n get: function () {\n return this._sizing;\n },\n set: function (value) {\n if (this._sizing !== value) {\n this._sizing = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Rect.prototype.updatePath = function () {\n var borderSizing = this.sizing === RectSizing.Border;\n var path = this.path;\n path.clear();\n var x = this.x;\n var y = this.y;\n var width = this.width;\n var height = this.height;\n var strokeWidth;\n if (borderSizing) {\n var halfWidth = width / 2;\n var halfHeight = height / 2;\n strokeWidth = Math.min(this.strokeWidth, halfWidth, halfHeight);\n x = Math.min(x + strokeWidth / 2, x + halfWidth);\n y = Math.min(y + strokeWidth / 2, y + halfHeight);\n width = Math.max(width - strokeWidth, 0);\n height = Math.max(height - strokeWidth, 0);\n }\n else {\n strokeWidth = this.strokeWidth;\n }\n this.effectiveStrokeWidth = strokeWidth;\n if (this.crisp && !borderSizing) {\n var alignment = Math.floor(strokeWidth) % 2 / 2;\n path.rect(Math.floor(x) + alignment, Math.floor(y) + alignment, Math.floor(width) + Math.floor(x % 1 + width % 1), Math.floor(height) + Math.floor(y % 1 + height % 1));\n }\n else {\n path.rect(x, y, width, height);\n }\n };\n Rect.prototype.computeBBox = function () {\n return new BBox(this.x, this.y, this.width, this.height);\n };\n Rect.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n var bbox = this.computeBBox();\n return bbox.containsPoint(point.x, point.y);\n };\n Rect.prototype.isPointInStroke = function (x, y) {\n return false;\n };\n Rect.prototype.fillStroke = function (ctx) {\n if (!this.scene) {\n return;\n }\n var pixelRatio = this.scene.canvas.pixelRatio || 1;\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.globalAlpha = this.opacity * this.fillOpacity;\n // The canvas context scaling (depends on the device's pixel ratio)\n // has no effect on shadows, so we have to account for the pixel ratio\n // manually here.\n var fillShadow = this.fillShadow;\n if (fillShadow && fillShadow.enabled) {\n ctx.shadowColor = fillShadow.color;\n ctx.shadowOffsetX = fillShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = fillShadow.yOffset * pixelRatio;\n ctx.shadowBlur = fillShadow.blur * pixelRatio;\n }\n ctx.fill();\n }\n ctx.shadowColor = 'rgba(0, 0, 0, 0)';\n if (this.stroke && this.effectiveStrokeWidth) {\n ctx.strokeStyle = this.stroke;\n ctx.globalAlpha = this.opacity * this.strokeOpacity;\n ctx.lineWidth = this.effectiveStrokeWidth;\n if (this.lineDash) {\n ctx.setLineDash(this.lineDash);\n }\n if (this.lineDashOffset) {\n ctx.lineDashOffset = this.lineDashOffset;\n }\n if (this.lineCap) {\n ctx.lineCap = this.lineCap;\n }\n if (this.lineJoin) {\n ctx.lineJoin = this.lineJoin;\n }\n var strokeShadow = this.strokeShadow;\n if (strokeShadow && strokeShadow.enabled) {\n ctx.shadowColor = strokeShadow.color;\n ctx.shadowOffsetX = strokeShadow.xOffset * pixelRatio;\n ctx.shadowOffsetY = strokeShadow.yOffset * pixelRatio;\n ctx.shadowBlur = strokeShadow.blur * pixelRatio;\n }\n ctx.stroke();\n }\n };\n Rect.className = 'Rect';\n return Rect;\n}(Path));\nexport { Rect };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, AgAngleSelect, AgSlider, Autowired, Component, PostConstruct, RefSelector, } from \"@ag-grid-community/core\";\nimport { AxisTicksPanel } from \"./axisTicksPanel\";\nimport { FontPanel } from \"../fontPanel\";\nimport { find } from \"../../../../../charts/util/array\";\nimport { ChartAxisPosition } from \"../../../../../charts/chart/chartAxis\";\nvar AxisPanel = /** @class */ (function (_super) {\n __extends(AxisPanel, _super);\n function AxisPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n AxisPanel.prototype.init = function () {\n this.setTemplate(AxisPanel.TEMPLATE);\n this.initAxis();\n this.initAxisTicks();\n this.initAxisLabels();\n };\n AxisPanel.prototype.initAxis = function () {\n var _this = this;\n this.axisGroup\n .setTitle(this.chartTranslator.translate(\"axis\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n this.axisColorInput\n .setLabel(this.chartTranslator.translate(\"color\"))\n .setLabelWidth(\"flex\")\n .setInputWidth(45)\n .setValue(this.getChartProxy().getAxisProperty(\"line.color\"))\n .onValueChange(function (newColor) { return _this.getChartProxy().setAxisProperty(\"line.color\", newColor); });\n this.axisLineWidthSlider\n .setLabel(this.chartTranslator.translate(\"thickness\"))\n .setMaxValue(10)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getAxisProperty(\"line.width\"))\n .onValueChange(function (newValue) { return _this.getChartProxy().setAxisProperty(\"line.width\", newValue); });\n };\n AxisPanel.prototype.initAxisTicks = function () {\n var axisTicksComp = this.wireBean(new AxisTicksPanel(this.chartController));\n this.axisGroup.addItem(axisTicksComp);\n this.activePanels.push(axisTicksComp);\n };\n AxisPanel.prototype.initAxisLabels = function () {\n var _this = this;\n var chartProxy = this.getChartProxy();\n var initialFont = {\n family: chartProxy.getAxisProperty(\"label.fontFamily\"),\n style: chartProxy.getAxisProperty(\"label.fontStyle\"),\n weight: chartProxy.getAxisProperty(\"label.fontWeight\"),\n size: chartProxy.getAxisProperty(\"label.fontSize\"),\n color: chartProxy.getAxisProperty(\"label.color\")\n };\n var setFont = function (font) {\n var chartProxy = _this.getChartProxy();\n if (font.family) {\n chartProxy.setAxisProperty(\"label.fontFamily\", font.family);\n }\n if (font.weight) {\n chartProxy.setAxisProperty(\"label.fontWeight\", font.weight);\n }\n if (font.style) {\n chartProxy.setAxisProperty(\"label.fontStyle\", font.style);\n }\n if (font.size) {\n chartProxy.setAxisProperty(\"label.fontSize\", font.size);\n }\n if (font.color) {\n chartProxy.setAxisProperty(\"label.color\", font.color);\n }\n chartProxy.getChart().performLayout();\n };\n var params = {\n enabled: true,\n suppressEnabledCheckbox: true,\n initialFont: initialFont,\n setFont: setFont\n };\n var labelPanelComp = this.wireBean(new FontPanel(params));\n this.axisGroup.addItem(labelPanelComp);\n this.activePanels.push(labelPanelComp);\n this.addAdditionalLabelComps(labelPanelComp);\n };\n AxisPanel.prototype.addAdditionalLabelComps = function (labelPanelComp) {\n var _this = this;\n var createAngleComp = function (label, initialValue, updateFunc) {\n var rotationInput = _this.wireBean(new AgAngleSelect()\n .setLabel(label)\n .setLabelWidth(\"flex\")\n .setValue(initialValue || 0)\n .onValueChange(updateFunc));\n labelPanelComp.addCompToPanel(rotationInput);\n };\n var degreesSymbol = String.fromCharCode(176);\n var createLabelUpdateFunc = function (axisPosition) { return function (newValue) {\n var chart = _this.getChartProxy().getChart();\n var axis = find(chart.axes, function (axis) { return axis.position === axisPosition; });\n if (axis) {\n axis.label.rotation = newValue;\n chart.performLayout();\n }\n }; };\n var xRotationLabel = this.chartTranslator.translate(\"xRotation\") + \" \" + degreesSymbol;\n var yRotationLabel = this.chartTranslator.translate(\"yRotation\") + \" \" + degreesSymbol;\n createAngleComp(xRotationLabel, this.getChartProxy().getChartOption(\"xAxis.label.rotation\"), createLabelUpdateFunc(ChartAxisPosition.Bottom));\n createAngleComp(yRotationLabel, this.getChartProxy().getChartOption(\"yAxis.label.rotation\"), createLabelUpdateFunc(ChartAxisPosition.Left));\n var labelPaddingSlider = this.wireBean(new AgSlider());\n labelPaddingSlider.setLabel(this.chartTranslator.translate(\"padding\"))\n .setValue(this.getChartProxy().getAxisProperty(\"label.padding\"))\n .setMaxValue(30)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.getChartProxy().setAxisProperty(\"label.padding\", newValue); });\n labelPanelComp.addCompToPanel(labelPaddingSlider);\n };\n AxisPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n AxisPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n AxisPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n AxisPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('axisGroup')\n ], AxisPanel.prototype, \"axisGroup\", void 0);\n __decorate([\n RefSelector('axisLineWidthSlider')\n ], AxisPanel.prototype, \"axisLineWidthSlider\", void 0);\n __decorate([\n RefSelector('axisColorInput')\n ], AxisPanel.prototype, \"axisColorInput\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], AxisPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], AxisPanel.prototype, \"init\", null);\n return AxisPanel;\n}(Component));\nexport { AxisPanel };\n","/**\n * Wraps the native Canvas element and overrides its CanvasRenderingContext2D to\n * provide resolution independent rendering based on `window.devicePixelRatio`.\n */\nvar HdpiCanvas = /** @class */ (function () {\n // The width/height attributes of the Canvas element default to\n // 300/150 according to w3.org.\n function HdpiCanvas(document) {\n if (document === void 0) { document = window.document; }\n this._parent = undefined;\n // `NaN` is deliberate here, so that overrides are always applied\n // and the `resetTransform` inside the `resize` method works in IE11.\n this._pixelRatio = NaN;\n this.document = document;\n this.tempCanvas = document.createElement('canvas');\n this.element = document.createElement('canvas');\n this.element.style.userSelect = 'none';\n this.context = this.element.getContext('2d');\n this.updatePixelRatio(0, false);\n this.resize(this._width = 300, this._height = 150);\n }\n Object.defineProperty(HdpiCanvas.prototype, \"parent\", {\n get: function () {\n return this._parent;\n },\n set: function (value) {\n if (this._parent !== value) {\n this.remove();\n if (value) {\n value.appendChild(this.element);\n }\n this._parent = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n HdpiCanvas.prototype.remove = function () {\n var parent = this.element.parentNode;\n if (parent != null) {\n parent.removeChild(this.element);\n }\n };\n HdpiCanvas.prototype.destroy = function () {\n this.element.remove();\n this._canvas = undefined;\n Object.freeze(this);\n };\n HdpiCanvas.prototype.toImage = function () {\n var img = this.document.createElement('img');\n img.src = this.element.toDataURL();\n return img;\n };\n /**\n * @param options.fileName The `.png` extension is going to be added automatically.\n * @param [options.background] Defaults to `white`.\n */\n HdpiCanvas.prototype.download = function (fileName) {\n fileName = ((fileName || '').trim() || 'image') + '.png';\n // Chart images saved as JPEG are a few times larger at 50% quality than PNG images,\n // so we don't support saving to JPEG.\n var type = 'image/png';\n var dataUrl = this.element.toDataURL(type);\n var document = this.document;\n if (navigator.msSaveOrOpenBlob) { // IE11\n var binary = atob(dataUrl.split(',')[1]); // strip the `data:image/png;base64,` part\n var array = [];\n for (var i = 0, n = binary.length; i < n; i++) {\n array.push(binary.charCodeAt(i));\n }\n var blob = new Blob([new Uint8Array(array)], { type: type });\n navigator.msSaveOrOpenBlob(blob, fileName);\n }\n else {\n var a = document.createElement('a');\n a.href = dataUrl;\n a.download = fileName;\n a.style.display = 'none';\n document.body.appendChild(a); // required for the `click` to work in Firefox\n a.click();\n document.body.removeChild(a);\n }\n };\n Object.defineProperty(HdpiCanvas.prototype, \"pixelRatio\", {\n get: function () {\n return this._pixelRatio;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Updates the pixel ratio of the Canvas element with the given value,\n * or uses the window.devicePixelRatio (default), then resizes the Canvas\n * element accordingly (default).\n * @param ratio\n * @param resize\n */\n HdpiCanvas.prototype.updatePixelRatio = function (ratio, resize) {\n if (ratio === void 0) { ratio = 0; }\n if (resize === void 0) { resize = true; }\n var pixelRatio = ratio || window.devicePixelRatio;\n if (pixelRatio === this.pixelRatio) {\n return;\n }\n var canvas = this.element;\n var ctx = this.context;\n var overrides = this.overrides = HdpiCanvas.makeHdpiOverrides(pixelRatio);\n for (var name_1 in overrides) {\n if (overrides.hasOwnProperty(name_1)) {\n // Save native methods under prefixed names,\n // if this hasn't been done by the previous overrides already.\n if (!ctx['$' + name_1]) {\n ctx['$' + name_1] = ctx[name_1];\n }\n // Replace native methods with overrides,\n // or previous overrides with the new ones.\n ctx[name_1] = overrides[name_1];\n }\n }\n if (resize) {\n var logicalWidth = canvas.width / this.pixelRatio;\n var logicalHeight = canvas.height / this.pixelRatio;\n canvas.width = Math.round(logicalWidth * pixelRatio);\n canvas.height = Math.round(logicalHeight * pixelRatio);\n canvas.style.width = Math.round(logicalWidth) + 'px';\n canvas.style.height = Math.round(logicalHeight) + 'px';\n ctx.resetTransform(); // should be called every time Canvas size changes\n }\n this._pixelRatio = pixelRatio;\n };\n Object.defineProperty(HdpiCanvas.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n enumerable: true,\n configurable: true\n });\n HdpiCanvas.prototype.resize = function (width, height) {\n var canvas = this.element;\n var context = this.context;\n var tempCanvas = this.tempCanvas;\n this._width = width;\n this._height = height;\n tempCanvas.width = canvas.width;\n tempCanvas.height = canvas.height;\n var tempContext = tempCanvas.getContext('2d');\n tempContext.drawImage(context.canvas, 0, 0);\n canvas.width = Math.round(width * this.pixelRatio);\n canvas.height = Math.round(height * this.pixelRatio);\n canvas.style.width = Math.round(width) + 'px';\n canvas.style.height = Math.round(height) + 'px';\n context.drawImage(tempContext.canvas, 0, 0);\n context.resetTransform();\n };\n Object.defineProperty(HdpiCanvas.prototype, \"textMeasuringContext\", {\n get: function () {\n if (this._textMeasuringContext) {\n return this._textMeasuringContext;\n }\n var canvas = document.createElement('canvas');\n return this._textMeasuringContext = canvas.getContext('2d');\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"svgText\", {\n get: function () {\n if (this._svgText) {\n return this._svgText;\n }\n var xmlns = 'http://www.w3.org/2000/svg';\n var svg = document.createElementNS(xmlns, 'svg');\n svg.setAttribute('width', '100');\n svg.setAttribute('height', '100');\n // Add a descriptive class name in case someone sees this SVG element\n // in devtools and wonders about its purpose:\n if (svg.classList) {\n svg.classList.add('text-measuring-svg');\n }\n else {\n svg.setAttribute('class', 'text-measuring-svg');\n }\n svg.style.position = 'absolute';\n svg.style.top = '-1000px';\n svg.style.visibility = 'hidden';\n var svgText = document.createElementNS(xmlns, 'text');\n svgText.setAttribute('x', '0');\n svgText.setAttribute('y', '30');\n svgText.setAttribute('text', 'black');\n svg.appendChild(svgText);\n document.body.appendChild(svg);\n this._svgText = svgText;\n return svgText;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(HdpiCanvas.prototype, \"has\", {\n get: function () {\n if (this._has) {\n return this._has;\n }\n return this._has = Object.freeze({\n textMetrics: this.textMeasuringContext.measureText('test')\n .actualBoundingBoxDescent !== undefined,\n getTransform: this.textMeasuringContext.getTransform !== undefined,\n flicker: !!window.safari\n });\n },\n enumerable: true,\n configurable: true\n });\n HdpiCanvas.prototype.measureText = function (text, font, textBaseline, textAlign) {\n var ctx = this.textMeasuringContext;\n ctx.font = font;\n ctx.textBaseline = textBaseline;\n ctx.textAlign = textAlign;\n return ctx.measureText(text);\n };\n /**\n * Returns the width and height of the measured text.\n * @param text The single-line text to measure.\n * @param font The font shorthand string.\n */\n HdpiCanvas.prototype.getTextSize = function (text, font) {\n if (this.has.textMetrics) {\n var ctx = this.textMeasuringContext;\n ctx.font = font;\n var metrics = ctx.measureText(text);\n return {\n width: metrics.width,\n height: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n };\n }\n else {\n return this.measureSvgText(text, font);\n }\n };\n HdpiCanvas.prototype.measureSvgText = function (text, font) {\n var cache = HdpiCanvas.textSizeCache;\n var fontCache = cache[font];\n // Note: consider not caching the size of numeric strings.\n // For example: if (isNaN(+text)) { // skip\n if (fontCache) {\n var size_1 = fontCache[text];\n if (size_1) {\n return size_1;\n }\n }\n else {\n cache[font] = {};\n }\n var svgText = this.svgText;\n svgText.style.font = font;\n svgText.textContent = text;\n // `getBBox` returns an instance of `SVGRect` with the same `width` and `height`\n // measurements as `DOMRect` instance returned by the `getBoundingClientRect`.\n // But the `SVGRect` instance has half the properties of the `DOMRect`,\n // so we use the `getBBox` method.\n var bbox = svgText.getBBox();\n var size = {\n width: bbox.width,\n height: bbox.height\n };\n cache[font][text] = size;\n return size;\n };\n HdpiCanvas.makeHdpiOverrides = function (pixelRatio) {\n var depth = 0;\n return {\n save: function () {\n this.$save();\n depth++;\n },\n restore: function () {\n if (depth > 0) {\n this.$restore();\n depth--;\n }\n },\n setTransform: function (a, b, c, d, e, f) {\n this.$setTransform(a * pixelRatio, b * pixelRatio, c * pixelRatio, d * pixelRatio, e * pixelRatio, f * pixelRatio);\n },\n resetTransform: function () {\n // As of Jan 8, 2019, `resetTransform` is still an \"experimental technology\",\n // and doesn't work in IE11 and Edge 44.\n this.$setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n this.save();\n depth = 0;\n // The scale above will be impossible to restore,\n // because we override the `ctx.restore` above and\n // check `depth` there.\n }\n };\n };\n HdpiCanvas.textSizeCache = {};\n return HdpiCanvas;\n}());\nexport { HdpiCanvas };\n","import { HdpiCanvas } from \"../canvas/hdpiCanvas\";\nvar Scene = /** @class */ (function () {\n function Scene(document) {\n var _this = this;\n if (document === void 0) { document = window.document; }\n this.id = this.createId();\n this._dirty = false;\n this.animationFrameId = 0;\n this._root = null;\n this._frameIndex = 0;\n this._renderFrameIndex = false;\n this.render = function () {\n var _a = _this, ctx = _a.ctx, root = _a.root;\n if (root && !root.visible) {\n _this.dirty = false;\n return;\n }\n // start with a blank canvas, clear previous drawing\n ctx.clearRect(0, 0, _this.width, _this.height);\n if (root) {\n ctx.save();\n if (root.visible) {\n root.render(ctx);\n }\n ctx.restore();\n }\n _this._frameIndex++;\n if (_this.renderFrameIndex) {\n ctx.fillStyle = 'white';\n ctx.fillRect(0, 0, 40, 15);\n ctx.fillStyle = 'black';\n ctx.fillText(_this.frameIndex.toString(), 0, 10);\n }\n _this.dirty = false;\n };\n this.canvas = new HdpiCanvas(document);\n this.ctx = this.canvas.context;\n }\n Scene.prototype.createId = function () {\n return this.constructor.name + '-' + (Scene.id++);\n };\n Object.defineProperty(Scene.prototype, \"parent\", {\n get: function () {\n return this.canvas.parent;\n },\n set: function (value) {\n this.canvas.parent = value;\n },\n enumerable: true,\n configurable: true\n });\n Scene.prototype.download = function (fileName) {\n this.canvas.download(fileName);\n };\n Object.defineProperty(Scene.prototype, \"width\", {\n get: function () {\n return this.canvas.width;\n },\n set: function (value) {\n this.size = [value, this.height];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"height\", {\n get: function () {\n return this.canvas.height;\n },\n set: function (value) {\n this.size = [this.width, value];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"size\", {\n get: function () {\n return [this.width, this.height];\n },\n set: function (value) {\n var width = value[0], height = value[1];\n if (this.width !== width || this.height !== height) {\n this.canvas.resize(width, height);\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"dirty\", {\n get: function () {\n return this._dirty;\n },\n set: function (dirty) {\n if (dirty && !this._dirty) {\n this.animationFrameId = requestAnimationFrame(this.render);\n }\n this._dirty = dirty;\n },\n enumerable: true,\n configurable: true\n });\n Scene.prototype.cancelRender = function () {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = 0;\n this._dirty = false;\n }\n };\n Object.defineProperty(Scene.prototype, \"root\", {\n get: function () {\n return this._root;\n },\n set: function (node) {\n if (node === this._root) {\n return;\n }\n if (this._root) {\n this._root._setScene(undefined);\n }\n this._root = node;\n if (node) {\n // If `node` is the root node of another scene ...\n if (node.parent === null && node.scene && node.scene !== this) {\n node.scene.root = null;\n }\n node._setScene(this);\n }\n this.dirty = true;\n },\n enumerable: true,\n configurable: true\n });\n Scene.prototype.appendPath = function (path) {\n var ctx = this.ctx;\n var commands = path.commands;\n var params = path.params;\n var n = commands.length;\n var j = 0;\n ctx.beginPath();\n for (var i = 0; i < n; i++) {\n switch (commands[i]) {\n case 'M':\n ctx.moveTo(params[j++], params[j++]);\n break;\n case 'L':\n ctx.lineTo(params[j++], params[j++]);\n break;\n case 'C':\n ctx.bezierCurveTo(params[j++], params[j++], params[j++], params[j++], params[j++], params[j++]);\n break;\n case 'Z':\n ctx.closePath();\n break;\n }\n }\n };\n Object.defineProperty(Scene.prototype, \"frameIndex\", {\n get: function () {\n return this._frameIndex;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Scene.prototype, \"renderFrameIndex\", {\n get: function () {\n return this._renderFrameIndex;\n },\n set: function (value) {\n if (this._renderFrameIndex !== value) {\n this._renderFrameIndex = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Scene.id = 1;\n return Scene;\n}());\nexport { Scene };\n","var Padding = /** @class */ (function () {\n function Padding(top, right, bottom, left) {\n if (top === void 0) { top = 0; }\n if (right === void 0) { right = top; }\n if (bottom === void 0) { bottom = top; }\n if (left === void 0) { left = right; }\n this.top = top;\n this.right = right;\n this.bottom = bottom;\n this.left = left;\n }\n Padding.prototype.clear = function () {\n this.top = this.right = this.bottom = this.left = 0;\n };\n return Padding;\n}());\nexport { Padding };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Path } from \"../../scene/shape/path\";\nimport { BBox } from \"../../scene/bbox\";\nvar Marker = /** @class */ (function (_super) {\n __extends(Marker, _super);\n function Marker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._x = 0;\n _this._y = 0;\n _this._size = 4;\n return _this;\n }\n Object.defineProperty(Marker.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n set: function (value) {\n if (this._x !== value) {\n this._x = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Marker.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n set: function (value) {\n if (this._y !== value) {\n this._y = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Marker.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n set: function (value) {\n if (this._size !== value) {\n this._size = Math.abs(value);\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Marker.prototype.computeBBox = function () {\n var _a = this, x = _a.x, y = _a.y, size = _a.size;\n var half = size / 2;\n return new BBox(x - half, y - half, size, size);\n };\n return Marker;\n}(Path));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Square = /** @class */ (function (_super) {\n __extends(Square, _super);\n function Square() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Square.prototype.updatePath = function () {\n var _a = this, path = _a.path, x = _a.x, y = _a.y;\n var hs = this.size / 2;\n path.clear();\n path.moveTo(x - hs, y - hs);\n path.lineTo(x + hs, y - hs);\n path.lineTo(x + hs, y + hs);\n path.lineTo(x - hs, y + hs);\n path.closePath();\n };\n Square.className = 'Square';\n return Square;\n}(Marker));\nexport { Square };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Group } from \"../scene/group\";\nimport { Text } from \"../scene/shape/text\";\nimport { Square } from \"./marker/square\";\nvar MarkerLabel = /** @class */ (function (_super) {\n __extends(MarkerLabel, _super);\n function MarkerLabel() {\n var _this = _super.call(this) || this;\n _this.label = new Text();\n _this._marker = new Square();\n _this._markerSize = MarkerLabel.defaults.markerSize;\n _this._padding = MarkerLabel.defaults.padding;\n var label = _this.label;\n label.textBaseline = 'middle';\n label.fontStyle = MarkerLabel.defaults.labelFontStyle;\n label.fontWeight = MarkerLabel.defaults.labelFontWeight;\n label.fontSize = MarkerLabel.defaults.labelFontSize;\n label.fontFamily = MarkerLabel.defaults.labelFontFamily;\n label.fill = MarkerLabel.defaults.labelColor;\n label.y = 2; // for better looking vertical alignment of labels to markers\n _this.append([_this.marker, label]);\n _this.update();\n return _this;\n }\n Object.defineProperty(MarkerLabel.prototype, \"labelText\", {\n get: function () {\n return this.label.text;\n },\n set: function (value) {\n this.label.text = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"labelFontStyle\", {\n get: function () {\n return this.label.fontStyle;\n },\n set: function (value) {\n this.label.fontStyle = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"labelFontWeight\", {\n get: function () {\n return this.label.fontWeight;\n },\n set: function (value) {\n this.label.fontWeight = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"labelFontSize\", {\n get: function () {\n return this.label.fontSize;\n },\n set: function (value) {\n this.label.fontSize = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"labelFontFamily\", {\n get: function () {\n return this.label.fontFamily;\n },\n set: function (value) {\n this.label.fontFamily = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"labelColor\", {\n get: function () {\n return this.label.fill;\n },\n set: function (value) {\n this.label.fill = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"marker\", {\n get: function () {\n return this._marker;\n },\n set: function (value) {\n if (this._marker !== value) {\n this.removeChild(this._marker);\n this._marker = value;\n this.appendChild(value);\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerSize\", {\n get: function () {\n return this._markerSize;\n },\n set: function (value) {\n if (this._markerSize !== value) {\n this._markerSize = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerFill\", {\n get: function () {\n return this.marker.fill;\n },\n set: function (value) {\n this.marker.fill = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerStroke\", {\n get: function () {\n return this.marker.stroke;\n },\n set: function (value) {\n this.marker.stroke = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerStrokeWidth\", {\n get: function () {\n return this.marker.strokeWidth;\n },\n set: function (value) {\n this.marker.strokeWidth = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerFillOpacity\", {\n get: function () {\n return this.marker.fillOpacity;\n },\n set: function (value) {\n this.marker.fillOpacity = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"markerStrokeOpacity\", {\n get: function () {\n return this.marker.strokeOpacity;\n },\n set: function (value) {\n this.marker.strokeOpacity = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"opacity\", {\n get: function () {\n return this.marker.opacity;\n },\n set: function (value) {\n this.marker.opacity = value;\n this.label.opacity = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MarkerLabel.prototype, \"padding\", {\n get: function () {\n return this._padding;\n },\n set: function (value) {\n if (this._padding !== value) {\n this._padding = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n MarkerLabel.prototype.update = function () {\n var marker = this.marker;\n var markerSize = this.markerSize;\n marker.size = markerSize;\n this.label.x = markerSize / 2 + this.padding;\n };\n MarkerLabel.className = 'MarkerLabel';\n MarkerLabel.defaults = Object.freeze({\n padding: 8,\n markerSize: 15,\n labelFont: '12px Verdana, sans-serif',\n labelFontStyle: undefined,\n labelFontWeight: undefined,\n labelFontSize: 12,\n labelFontFamily: 'Verdana, sans-serif',\n labelColor: 'black'\n });\n return MarkerLabel;\n}(Group));\nexport { MarkerLabel };\n","var Observable = /** @class */ (function () {\n function Observable() {\n this.propertyListeners = new Map(); // property name => property change listeners\n this.eventListeners = new Map(); // event type => event listeners\n }\n Observable.prototype.addPropertyListener = function (name, listener) {\n var propertyListeners = this.propertyListeners;\n var listeners = propertyListeners.get(name);\n if (!listeners) {\n listeners = new Set();\n propertyListeners.set(name, listeners);\n }\n if (!listeners.has(listener)) {\n listeners.add(listener);\n return listener;\n }\n else {\n console.warn('Listener ', listener, ' already added to ', this);\n }\n };\n Observable.prototype.removePropertyListener = function (name, listener) {\n var propertyListeners = this.propertyListeners;\n var listeners = propertyListeners.get(name);\n if (listeners) {\n if (listener) {\n listeners.delete(listener);\n }\n else {\n listeners.clear();\n }\n }\n };\n Observable.prototype.notifyPropertyListeners = function (name, oldValue, value) {\n var _this = this;\n var nameListeners = this.propertyListeners;\n var listeners = nameListeners.get(name);\n if (listeners) {\n listeners.forEach(function (listener) {\n listener({\n type: name,\n source: _this,\n value: value,\n oldValue: oldValue\n });\n });\n }\n };\n Observable.prototype.addEventListener = function (type, listener) {\n var eventListeners = this.eventListeners;\n var listeners = eventListeners.get(type);\n if (!listeners) {\n listeners = new Set();\n eventListeners.set(type, listeners);\n }\n if (!listeners.has(listener)) {\n listeners.add(listener);\n return listener;\n }\n else {\n console.warn('Category listener ', listener, ' already added to ', this);\n }\n };\n Observable.prototype.removeEventListener = function (type, listener) {\n var eventListeners = this.eventListeners;\n var listeners = eventListeners.get(type);\n if (listeners) {\n if (listener) {\n listeners.delete(listener);\n }\n else {\n listeners.clear();\n }\n }\n };\n Observable.prototype.notifyEventListeners = function (types) {\n var eventListeners = this.eventListeners;\n types.forEach(function (type) {\n var listeners = eventListeners.get(type);\n if (listeners) {\n listeners.forEach(function (listener) { return listener({ type: type }); });\n }\n });\n };\n Observable.prototype.fireEvent = function (event) {\n var listeners = this.eventListeners.get(event.type);\n if (listeners) {\n listeners.forEach(function (listener) { return listener(event); });\n }\n };\n Observable.privateKeyPrefix = '_';\n return Observable;\n}());\nexport { Observable };\nexport function reactive(events, property) {\n return function (target, key) {\n // `target` is either a constructor (static member) or prototype (instance member)\n var privateKey = Observable.privateKeyPrefix + key;\n var backingProperty = property ? property.split('.') : undefined;\n var privateKeyEvents = privateKey + 'Events';\n if (!target[key]) {\n if (events) {\n target[privateKeyEvents] = events;\n }\n Object.defineProperty(target, key, {\n set: function (value) {\n var oldValue;\n if (backingProperty) {\n oldValue = this;\n backingProperty.forEach(function (key) {\n oldValue = oldValue[key];\n });\n }\n else {\n oldValue = this[privateKey];\n }\n if (oldValue !== value || (typeof value === 'object' && value !== null)) {\n if (backingProperty) {\n var i = 0, last = backingProperty.length - 1, obj = this;\n while (i < last) {\n obj = obj[backingProperty[i++]];\n }\n obj[backingProperty[last]] = value;\n }\n else {\n this[privateKey] = value;\n }\n this.notifyPropertyListeners(key, oldValue, value);\n var events_1 = this[privateKeyEvents];\n if (events_1) {\n this.notifyEventListeners(events_1);\n }\n }\n },\n get: function () {\n var value;\n if (backingProperty) {\n value = this;\n backingProperty.forEach(function (key) {\n value = value[key];\n });\n }\n else {\n value = this[privateKey];\n }\n return value;\n },\n enumerable: true,\n configurable: true\n });\n }\n };\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Group } from \"../scene/group\";\nimport { Selection } from \"../scene/selection\";\nimport { MarkerLabel } from \"./markerLabel\";\nimport { Square } from \"./marker/square\";\nimport { reactive, Observable } from \"../util/observable\";\nexport var Orientation;\n(function (Orientation) {\n Orientation[Orientation[\"Vertical\"] = 0] = \"Vertical\";\n Orientation[Orientation[\"Horizontal\"] = 1] = \"Horizontal\";\n})(Orientation || (Orientation = {}));\nvar Legend = /** @class */ (function (_super) {\n __extends(Legend, _super);\n function Legend() {\n var _this = _super.call(this) || this;\n _this.group = new Group();\n _this.itemSelection = Selection.select(_this.group).selectAll();\n _this.oldSize = [0, 0];\n _this.data = [];\n _this.enabled = true;\n _this.orientation = Orientation.Vertical;\n _this.position = 'right';\n _this.padding = 20;\n _this.itemPaddingX = 16;\n _this.itemPaddingY = 8;\n _this.markerPadding = MarkerLabel.defaults.padding;\n _this.markerSize = MarkerLabel.defaults.markerSize;\n _this.markerStrokeWidth = 1;\n _this.labelColor = MarkerLabel.defaults.labelColor;\n _this.labelFontStyle = MarkerLabel.defaults.labelFontStyle;\n _this.labelFontWeight = MarkerLabel.defaults.labelFontWeight;\n _this.labelFontSize = MarkerLabel.defaults.labelFontSize;\n _this.labelFontFamily = MarkerLabel.defaults.labelFontFamily;\n _this._size = [0, 0];\n _this.addPropertyListener('data', function (event) {\n var legend = event.source, data = event.value;\n legend.group.visible = legend.enabled && data.length > 0;\n });\n _this.addPropertyListener('enabled', function (event) {\n var legend = event.source, value = event.value;\n legend.group.visible = value && legend.data.length > 0;\n });\n _this.addPropertyListener('position', function (event) {\n var legend = event.source, position = event.value;\n switch (position) {\n case 'right':\n case 'left':\n legend.orientation = Orientation.Vertical;\n break;\n case 'bottom':\n case 'top':\n legend.orientation = Orientation.Horizontal;\n break;\n }\n });\n _this.addEventListener('change', function () { return _this.update(); });\n return _this;\n }\n Object.defineProperty(Legend.prototype, \"size\", {\n get: function () {\n return this._size;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * The method is given the desired size of the legend, which only serves as a hint.\n * The vertically oriented legend will take as much horizontal space as needed, but will\n * respect the height constraints, and the horizontal legend will take as much vertical\n * space as needed in an attempt not to exceed the given width.\n * After the layout is done, the {@link size} will contain the actual size of the legend.\n * If the actual size is not the same as the previous actual size, the legend will fire\n * the 'layoutChange' event to communicate that another layout is needed, and the above\n * process should be repeated.\n * @param width\n * @param height\n */\n Legend.prototype.performLayout = function (width, height) {\n var _this = this;\n var markerType = this.markerType;\n var updateSelection = this.itemSelection.setData(this.data, function (_, datum) {\n var itemMarkerType = markerType || datum.marker.type;\n var itemMarkerName = itemMarkerType ? itemMarkerType.name : 'Square';\n return datum.id + '-' + datum.itemId + '-' + itemMarkerName;\n });\n updateSelection.exit.remove();\n var enterSelection = updateSelection.enter.append(MarkerLabel).each(function (node, datum) {\n var Marker = markerType || datum.marker.type || Square;\n node.marker = new Marker();\n });\n var itemSelection = this.itemSelection = updateSelection.merge(enterSelection);\n var itemCount = itemSelection.size;\n var itemPaddingX = this.itemPaddingX;\n var itemPaddingY = this.itemPaddingY;\n // Update properties that affect the size of the legend items and measure them.\n var bboxes = [];\n itemSelection.each(function (markerLabel, datum) {\n // TODO: measure only when one of these properties or data change (in a separate routine)\n markerLabel.markerSize = _this.markerSize;\n markerLabel.labelFontStyle = _this.labelFontStyle;\n markerLabel.labelFontWeight = _this.labelFontWeight;\n markerLabel.labelFontSize = _this.labelFontSize;\n markerLabel.labelFontFamily = _this.labelFontFamily;\n markerLabel.labelText = datum.label.text;\n markerLabel.padding = _this.markerPadding;\n bboxes.push(markerLabel.computeBBox());\n });\n var itemHeight = bboxes.length && bboxes[0].height;\n var rowCount = 0;\n var columnWidth = 0;\n var paddedItemsWidth = 0;\n var paddedItemsHeight = 0;\n switch (this.orientation) {\n case Orientation.Horizontal:\n if (!(isFinite(width) && width > 0)) {\n return false;\n }\n rowCount = 0;\n var columnCount = 0;\n // Split legend items into columns until the width is suitable.\n do {\n var itemsWidth = 0;\n columnCount = 0;\n columnWidth = 0;\n rowCount++;\n var i = 0;\n while (i < itemCount) {\n var bbox = bboxes[i];\n if (bbox.width > columnWidth) {\n columnWidth = bbox.width;\n }\n i++;\n if (i % rowCount === 0) {\n itemsWidth += columnWidth;\n columnWidth = 0;\n columnCount++;\n }\n }\n if (i % rowCount !== 0) {\n itemsWidth += columnWidth;\n columnCount++;\n }\n paddedItemsWidth = itemsWidth + (columnCount - 1) * itemPaddingX;\n } while (paddedItemsWidth > width && columnCount > 1);\n paddedItemsHeight = itemHeight * rowCount + (rowCount - 1) * itemPaddingY;\n break;\n case Orientation.Vertical:\n if (!(isFinite(height) && height > 0)) {\n return false;\n }\n rowCount = itemCount * 2;\n // Split legend items into columns until the height is suitable.\n do {\n rowCount = (rowCount >> 1) + (rowCount % 2);\n columnWidth = 0;\n var itemsWidth = 0;\n var itemsHeight = 0;\n var columnCount_1 = 0;\n var i = 0;\n while (i < itemCount) {\n var bbox = bboxes[i];\n if (!columnCount_1) {\n itemsHeight += bbox.height;\n }\n if (bbox.width > columnWidth) {\n columnWidth = bbox.width;\n }\n i++;\n if (i % rowCount === 0) {\n itemsWidth += columnWidth;\n columnWidth = 0;\n columnCount_1++;\n }\n }\n if (i % rowCount !== 0) {\n itemsWidth += columnWidth;\n columnCount_1++;\n }\n paddedItemsWidth = itemsWidth + (columnCount_1 - 1) * itemPaddingX;\n paddedItemsHeight = itemsHeight + (rowCount - 1) * itemPaddingY;\n } while (paddedItemsHeight > height && rowCount > 1);\n break;\n }\n // Top-left corner of the first legend item.\n var startX = (width - paddedItemsWidth) / 2;\n var startY = (height - paddedItemsHeight) / 2;\n var x = 0;\n var y = 0;\n columnWidth = 0;\n // Position legend items using the layout computed above.\n itemSelection.each(function (markerLabel, datum, i) {\n // Round off for pixel grid alignment to work properly.\n markerLabel.translationX = Math.floor(startX + x);\n markerLabel.translationY = Math.floor(startY + y);\n var bbox = bboxes[i];\n if (bbox.width > columnWidth) {\n columnWidth = bbox.width;\n }\n if ((i + 1) % rowCount === 0) {\n x += columnWidth + itemPaddingX;\n y = 0;\n columnWidth = 0;\n }\n else {\n y += bbox.height + itemPaddingY;\n }\n });\n // Update legend item properties that don't affect the layout.\n this.update();\n var size = this._size;\n var oldSize = this.oldSize;\n size[0] = paddedItemsWidth;\n size[1] = paddedItemsHeight;\n if (size[0] !== oldSize[0] || size[1] !== oldSize[1]) {\n oldSize[0] = size[0];\n oldSize[1] = size[1];\n }\n };\n Legend.prototype.update = function () {\n var _this = this;\n this.itemSelection.each(function (markerLabel, datum) {\n var marker = datum.marker;\n markerLabel.markerFill = marker.fill;\n markerLabel.markerStroke = marker.stroke;\n markerLabel.markerStrokeWidth = _this.markerStrokeWidth;\n markerLabel.markerFillOpacity = marker.fillOpacity;\n markerLabel.markerStrokeOpacity = marker.strokeOpacity;\n markerLabel.opacity = datum.enabled ? 1 : 0.5;\n markerLabel.labelColor = _this.labelColor;\n });\n };\n Legend.prototype.datumForPoint = function (x, y) {\n var node = this.group.pickNode(x, y);\n if (node && node.parent) {\n return node.parent.datum;\n }\n };\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"data\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"enabled\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"orientation\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"position\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"padding\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"itemPaddingX\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"itemPaddingY\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"markerType\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"markerPadding\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"markerSize\", void 0);\n __decorate([\n reactive(['change'])\n ], Legend.prototype, \"markerStrokeWidth\", void 0);\n __decorate([\n reactive(['change'])\n ], Legend.prototype, \"labelColor\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"labelFontStyle\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"labelFontWeight\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"labelFontSize\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Legend.prototype, \"labelFontFamily\", void 0);\n return Legend;\n}(Observable));\nexport { Legend };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Group } from \"../../scene/group\";\nimport { Observable, reactive } from \"../../util/observable\";\nimport { ChartAxisDirection } from \"../chartAxis\";\nvar Series = /** @class */ (function (_super) {\n __extends(Series, _super);\n function Series() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.id = _this.createId();\n /**\n * The group node that contains all the nodes used to render this series.\n */\n _this.group = new Group();\n _this.directions = [ChartAxisDirection.X, ChartAxisDirection.Y];\n _this.tooltipEnabled = false;\n _this.data = [];\n _this.visible = true;\n _this.showInLegend = true;\n _this.scheduleLayout = function () {\n _this.fireEvent({ type: 'layoutChange' });\n };\n _this.scheduleData = function () {\n _this.fireEvent({ type: 'dataChange' });\n };\n return _this;\n }\n /**\n * Returns the actual keys used (to fetch the values from `data` items) for the given direction.\n */\n Series.prototype.getKeys = function (direction) {\n var _this = this;\n var directionKeys = this.directionKeys;\n var keys = directionKeys && directionKeys[direction];\n var values = [];\n if (keys) {\n keys.forEach(function (key) {\n var value = _this[key];\n if (value) {\n if (Array.isArray(value)) {\n values.push.apply(values, value);\n }\n else {\n values.push(value);\n }\n }\n });\n }\n return values;\n };\n Series.prototype.createId = function () {\n var constructor = this.constructor;\n var className = constructor.className;\n if (!className) {\n throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n }\n return className + '-' + (constructor.id = (constructor.id || 0) + 1);\n };\n Series.prototype.toggleSeriesItem = function (itemId, enabled) {\n this.visible = enabled;\n };\n Series.prototype.fixNumericExtent = function (extent, type) {\n if (!extent) {\n // if (type) {\n // console.warn(`The ${type}-domain could not be found (no valid values), using the default of [0, 1].`);\n // }\n return [0, 1];\n }\n var min = extent[0], max = extent[1];\n if (min === max) {\n min -= 1;\n max += 1;\n // if (type) {\n // console.warn(`The ${type}-domain has zero length and has been automatically expanded`\n // + ` by 1 in each direction (from the single valid ${type}-value: ${min}).`);\n // }\n }\n if (!isFinite(min) || !isFinite(max)) {\n min = 0;\n max = 1;\n // if (type) {\n // console.warn(`The ${type}-domain has infinite length, using the default of [0, 1].`);\n // }\n }\n return [min, max];\n };\n __decorate([\n reactive(['dataChange'])\n ], Series.prototype, \"data\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], Series.prototype, \"visible\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Series.prototype, \"showInLegend\", void 0);\n return Series;\n}(Observable));\nexport { Series };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Circle = /** @class */ (function (_super) {\n __extends(Circle, _super);\n function Circle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Circle.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y, path = _a.path, size = _a.size;\n var r = size / 2;\n path.clear();\n path.cubicArc(x, y, r, r, 0, 0, Math.PI * 2, 0);\n path.closePath();\n };\n Circle.className = 'Circle';\n return Circle;\n}(Marker));\nexport { Circle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Observable, reactive } from \"../../util/observable\";\nimport { Circle } from \"../marker/circle\";\nvar SeriesMarker = /** @class */ (function (_super) {\n __extends(SeriesMarker, _super);\n function SeriesMarker() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.enabled = true;\n /**\n * Marker constructor function. A series will create one marker instance per data point.\n */\n _this.type = Circle;\n _this.size = 8;\n /**\n * In case a series has the `sizeKey` set, the `sizeKey` values along with the `minSize/size` configs\n * will be used to determine the size of the marker. All values will be mapped to a marker size\n * within the `[minSize, size]` range, where the largest values will correspond to the `size`\n * and the lowest to the `minSize`.\n */\n _this.minSize = 12;\n return _this;\n }\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"enabled\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"type\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"size\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"minSize\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"fill\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"stroke\", void 0);\n __decorate([\n reactive(['change'])\n ], SeriesMarker.prototype, \"strokeWidth\", void 0);\n return SeriesMarker;\n}(Observable));\nexport { SeriesMarker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from \"../series\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nimport { SeriesMarker } from \"../seriesMarker\";\nvar CartesianSeries = /** @class */ (function (_super) {\n __extends(CartesianSeries, _super);\n function CartesianSeries() {\n var _a;\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.directionKeys = (_a = {},\n _a[ChartAxisDirection.X] = ['xKey'],\n _a[ChartAxisDirection.Y] = ['yKey'],\n _a);\n return _this;\n }\n return CartesianSeries;\n}(Series));\nexport { CartesianSeries };\nvar CartesianSeriesMarker = /** @class */ (function (_super) {\n __extends(CartesianSeriesMarker, _super);\n function CartesianSeriesMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return CartesianSeriesMarker;\n}(SeriesMarker));\nexport { CartesianSeriesMarker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Scene } from \"../scene/scene\";\nimport { Group } from \"../scene/group\";\nimport { Padding } from \"../util/padding\";\nimport { Shape } from \"../scene/shape/shape\";\nimport { Rect } from \"../scene/shape/rect\";\nimport { Legend } from \"./legend\";\nimport { find } from \"../util/array\";\nimport { Observable, reactive } from \"../util/observable\";\nimport { CartesianSeries } from \"./series/cartesian/cartesianSeries\";\nvar Chart = /** @class */ (function (_super) {\n __extends(Chart, _super);\n function Chart(document) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this) || this;\n _this.id = _this.createId();\n _this.background = new Rect();\n _this.legendAutoPadding = new Padding();\n _this.captionAutoPadding = 0; // top padding only\n _this.defaultTooltipClass = 'ag-chart-tooltip';\n _this.legend = new Legend();\n _this.tooltipOffset = [20, 20];\n _this.padding = new Padding(20);\n _this.onLayoutChange = function () {\n _this.layoutPending = true;\n };\n _this.onLegendPositionChange = function () {\n _this.legendAutoPadding.clear();\n _this.layoutPending = true;\n };\n _this._axes = [];\n _this._series = [];\n _this.scheduleLayout = function () {\n _this.layoutPending = true;\n };\n _this.scheduleData = function () {\n _this.dataPending = true;\n };\n _this._data = [];\n _this._axesChanged = false;\n _this._seriesChanged = false;\n _this.layoutCallbackId = 0;\n _this._performLayout = function () {\n _this.layoutCallbackId = 0;\n _this.background.width = _this.width;\n _this.background.height = _this.height;\n _this.performLayout();\n if (!_this.layoutPending) {\n _this.fireEvent({ type: 'layoutDone' });\n }\n };\n _this.dataCallbackId = 0;\n _this.updateLegend = function () {\n var legendData = [];\n _this.series.filter(function (s) { return s.showInLegend; }).forEach(function (series) { return series.listSeriesItems(legendData); });\n _this.legend.data = legendData;\n };\n _this.onMouseMove = function (event) {\n var x = event.offsetX, y = event.offsetY;\n var pick = _this.pickSeriesNode(x, y);\n if (pick) {\n var node = pick.node;\n if (node instanceof Shape) {\n if (!_this.lastPick || // cursor moved from empty space to a node\n _this.lastPick.node !== node) { // cursor moved from one node to another\n _this.onSeriesNodePick(event, pick.series, node);\n }\n else if (pick.series.tooltipEnabled) { // cursor moved within the same node\n _this.showTooltip(event);\n }\n }\n }\n else if (_this.lastPick) { // cursor moved from a node to empty space\n _this.lastPick.series.dehighlightNode();\n _this.hideTooltip();\n _this.lastPick = undefined;\n }\n };\n _this.onMouseOut = function (_) {\n _this.toggleTooltip(false);\n };\n _this.onClick = function (event) {\n var x = event.offsetX, y = event.offsetY;\n var datum = _this.legend.datumForPoint(x, y);\n if (datum) {\n var id_1 = datum.id, itemId = datum.itemId, enabled = datum.enabled;\n var series = find(_this.series, function (series) { return series.id === id_1; });\n if (series) {\n series.toggleSeriesItem(itemId, !enabled);\n }\n }\n };\n _this._tooltipClass = _this.defaultTooltipClass;\n var root = new Group();\n var background = _this.background;\n background.fill = 'white';\n root.appendChild(background);\n var scene = new Scene(document);\n _this.scene = scene;\n scene.root = root;\n var legend = _this.legend;\n legend.addEventListener('layoutChange', _this.onLayoutChange);\n legend.addPropertyListener('position', _this.onLegendPositionChange);\n _this.tooltipElement = document.createElement('div');\n _this.tooltipClass = '';\n document.body.appendChild(_this.tooltipElement);\n _this.setupListeners(scene.canvas.element);\n var captionListener = (function (event) {\n var chart = event.source, caption = event.value, oldCaption = event.oldValue;\n if (oldCaption) {\n oldCaption.removeEventListener('change', chart.onLayoutChange);\n chart.scene.root.removeChild(oldCaption.node);\n }\n if (caption) {\n caption.addEventListener('change', chart.onLayoutChange);\n chart.scene.root.appendChild(caption.node);\n }\n });\n _this.addPropertyListener('title', captionListener);\n _this.addPropertyListener('subtitle', captionListener);\n _this.addEventListener('layoutChange', function () { return _this.layoutPending = true; });\n return _this;\n }\n Chart.prototype.createId = function () {\n var constructor = this.constructor;\n var className = constructor.className;\n if (!className) {\n throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n }\n return className + '-' + (constructor.id = (constructor.id || 0) + 1);\n };\n Chart.prototype.destroy = function () {\n var tooltipParent = this.tooltipElement.parentNode;\n if (tooltipParent) {\n tooltipParent.removeChild(this.tooltipElement);\n }\n this.legend.removeEventListener('layoutChange', this.onLayoutChange);\n this.cleanupListeners(this.scene.canvas.element);\n this.scene.parent = undefined;\n };\n Object.defineProperty(Chart.prototype, \"element\", {\n get: function () {\n return this.scene.canvas.element;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"axes\", {\n get: function () {\n return this._axes;\n },\n set: function (values) {\n var _this = this;\n var root = this.scene.root;\n this._axes.forEach(function (axis) { return root.removeChild(axis.group); });\n this._axes = values;\n this._axes.forEach(function (axis) { return root.insertBefore(axis.group, _this.seriesRoot); });\n this.axesChanged = true;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"series\", {\n get: function () {\n return this._series;\n },\n set: function (values) {\n var _this = this;\n this.removeAllSeries();\n values.forEach(function (series) { return _this.addSeries(series); });\n },\n enumerable: true,\n configurable: true\n });\n Chart.prototype.addSeries = function (series, before) {\n var _a = this, allSeries = _a.series, seriesRoot = _a.seriesRoot;\n var canAdd = allSeries.indexOf(series) < 0;\n if (canAdd) {\n var beforeIndex = before ? allSeries.indexOf(before) : -1;\n if (beforeIndex >= 0) {\n allSeries.splice(beforeIndex, 0, series);\n seriesRoot.insertBefore(series.group, before.group);\n }\n else {\n allSeries.push(series);\n seriesRoot.append(series.group);\n }\n this.initSeries(series);\n this.seriesChanged = true;\n this.axesChanged = true;\n return true;\n }\n return false;\n };\n Chart.prototype.initSeries = function (series) {\n series.chart = this;\n series.addEventListener('layoutChange', this.scheduleLayout);\n series.addEventListener('dataChange', this.scheduleData);\n series.addEventListener('legendChange', this.updateLegend);\n };\n Chart.prototype.freeSeries = function (series) {\n series.chart = undefined;\n series.removeEventListener('layoutChange', this.scheduleLayout);\n series.removeEventListener('dataChange', this.scheduleData);\n series.removeEventListener('legendChange', this.updateLegend);\n };\n Chart.prototype.addSeriesAfter = function (series, after) {\n var _a = this, allSeries = _a.series, seriesRoot = _a.seriesRoot;\n var canAdd = allSeries.indexOf(series) < 0;\n if (canAdd) {\n var afterIndex = after ? this.series.indexOf(after) : -1;\n if (afterIndex >= 0) {\n if (afterIndex + 1 < allSeries.length) {\n seriesRoot.insertBefore(series.group, allSeries[afterIndex + 1].group);\n }\n else {\n seriesRoot.append(series.group);\n }\n this.initSeries(series);\n allSeries.splice(afterIndex + 1, 0, series);\n }\n else {\n if (allSeries.length > 0) {\n seriesRoot.insertBefore(series.group, allSeries[0].group);\n }\n else {\n seriesRoot.append(series.group);\n }\n this.initSeries(series);\n allSeries.unshift(series);\n }\n this.seriesChanged = true;\n this.axesChanged = true;\n }\n return false;\n };\n Chart.prototype.removeSeries = function (series) {\n var index = this.series.indexOf(series);\n if (index >= 0) {\n this.series.splice(index, 1);\n this.freeSeries(series);\n this.seriesRoot.removeChild(series.group);\n this.seriesChanged = true;\n return true;\n }\n return false;\n };\n Chart.prototype.removeAllSeries = function () {\n var _this = this;\n this.series.forEach(function (series) {\n _this.freeSeries(series);\n _this.seriesRoot.removeChild(series.group);\n });\n this._series = []; // using `_series` instead of `series` to prevent infinite recursion\n this.seriesChanged = true;\n };\n /**\n * Finds all the series that use any given axis.\n */\n Chart.prototype.onSeriesChange = function () {\n var _this = this;\n this.axes.forEach(function (axis) {\n var axisName = axis.direction + 'Axis';\n var boundSeries = [];\n _this.series.forEach(function (series) {\n if (series[axisName] === axis) {\n boundSeries.push(series);\n }\n });\n axis.boundSeries = boundSeries;\n });\n this.seriesChanged = false;\n };\n // Has to run before onSeriesChange\n Chart.prototype.onAxesChange = function (force) {\n var _this = this;\n if (force === void 0) { force = false; }\n var directionToAxesMap = {};\n this.axes.forEach(function (axis) {\n var direction = axis.direction;\n var directionAxes = directionToAxesMap[direction] || (directionToAxesMap[direction] = []);\n directionAxes.push(axis);\n });\n this.series.forEach(function (series) {\n series.directions.forEach(function (direction) {\n var axisName = direction + 'Axis';\n if (!series[axisName] || force) {\n var directionAxes = directionToAxesMap[direction];\n if (directionAxes) {\n var axis = _this.findMatchingAxis(directionAxes, series.getKeys(direction));\n if (axis) {\n series[axisName] = axis;\n }\n }\n }\n });\n if (series instanceof CartesianSeries) {\n if (!series.xAxis) {\n console.warn(\"Could not find a matching xAxis for the \" + series.id + \" series.\");\n return;\n }\n if (!series.yAxis) {\n console.warn(\"Could not find a matching yAxis for the \" + series.id + \" series.\");\n return;\n }\n }\n });\n this.axesChanged = false;\n };\n Chart.prototype.findMatchingAxis = function (directionAxes, directionKeys) {\n for (var i = 0; i < directionAxes.length; i++) {\n var axis = directionAxes[i];\n var axisKeys = axis.keys;\n if (!axisKeys.length) {\n return axis;\n }\n else if (directionKeys) {\n for (var j = 0; j < directionKeys.length; j++) {\n if (axisKeys.indexOf(directionKeys[j]) >= 0) {\n return axis;\n }\n }\n }\n }\n };\n Object.defineProperty(Chart.prototype, \"data\", {\n get: function () {\n return this._data;\n },\n set: function (data) {\n this._data = data;\n this.series.forEach(function (series) { return series.data = data; });\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"axesChanged\", {\n get: function () {\n return this._axesChanged;\n },\n set: function (value) {\n this._axesChanged = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"seriesChanged\", {\n get: function () {\n return this._seriesChanged;\n },\n set: function (value) {\n this._seriesChanged = value;\n if (value) {\n this.dataPending = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"layoutPending\", {\n /**\n * Only `true` while we are waiting for the layout to start.\n * This will be `false` if the layout has already started and is ongoing.\n */\n get: function () {\n return !!this.layoutCallbackId;\n },\n set: function (value) {\n if (value) {\n if (!(this.layoutCallbackId || this.dataPending)) {\n this.layoutCallbackId = requestAnimationFrame(this._performLayout);\n }\n }\n else if (this.layoutCallbackId) {\n cancelAnimationFrame(this.layoutCallbackId);\n this.layoutCallbackId = 0;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Chart.prototype, \"dataPending\", {\n get: function () {\n return !!this.dataCallbackId;\n },\n set: function (value) {\n var _this = this;\n if (this.dataCallbackId) {\n clearTimeout(this.dataCallbackId);\n this.dataCallbackId = 0;\n }\n if (value) {\n this.dataCallbackId = window.setTimeout(function () {\n _this.dataPending = false;\n _this.processData();\n }, 0);\n }\n },\n enumerable: true,\n configurable: true\n });\n Chart.prototype.processData = function () {\n this.layoutPending = false;\n if (this.axesChanged) {\n this.onAxesChange();\n }\n if (this.seriesChanged) {\n this.onSeriesChange();\n }\n this.series.filter(function (s) { return s.visible; }).forEach(function (series) { return series.processData(); });\n this.updateLegend();\n this.layoutPending = true;\n };\n Chart.prototype.positionCaptions = function () {\n var _a = this, title = _a.title, subtitle = _a.subtitle;\n var titleVisible = false;\n var subtitleVisible = false;\n var spacing = 10;\n var paddingTop = spacing;\n if (title && title.enabled) {\n title.node.x = this.width / 2;\n title.node.y = paddingTop;\n titleVisible = true;\n var titleBBox = title.node.computeBBox(); // make sure to set node's x/y, then computeBBox\n if (titleBBox) {\n paddingTop = titleBBox.y + titleBBox.height;\n }\n if (subtitle && subtitle.enabled) {\n subtitle.node.x = this.width / 2;\n subtitle.node.y = paddingTop + spacing;\n subtitleVisible = true;\n var subtitleBBox = subtitle.node.computeBBox();\n if (subtitleBBox) {\n paddingTop = subtitleBBox.y + subtitleBBox.height;\n }\n }\n }\n if (title) {\n title.node.visible = titleVisible;\n }\n if (subtitle) {\n subtitle.node.visible = subtitleVisible;\n }\n this.captionAutoPadding = paddingTop;\n };\n Chart.prototype.positionLegend = function () {\n if (!this.legend.enabled || !this.legend.data.length) {\n return;\n }\n var _a = this, legend = _a.legend, captionAutoPadding = _a.captionAutoPadding, legendAutoPadding = _a.legendAutoPadding;\n var width = this.width;\n var height = this.height - captionAutoPadding;\n var legendGroup = legend.group;\n var legendPadding = legend.padding;\n legendGroup.translationX = 0;\n legendGroup.translationY = 0;\n var legendBBox;\n switch (legend.position) {\n case 'bottom':\n legend.performLayout(width - legendPadding * 2, 0);\n legendBBox = legendGroup.computeBBox();\n legendGroup.translationX = (width - legendBBox.width) / 2 - legendBBox.x;\n legendGroup.translationY = captionAutoPadding + height - legendBBox.height - legendBBox.y - legendPadding;\n legendAutoPadding.bottom = legendBBox.height;\n break;\n case 'top':\n legend.performLayout(width - legendPadding * 2, 0);\n legendBBox = legendGroup.computeBBox();\n legendGroup.translationX = (width - legendBBox.width) / 2 - legendBBox.x;\n legendGroup.translationY = captionAutoPadding + legendPadding - legendBBox.y;\n legendAutoPadding.top = legendBBox.height;\n break;\n case 'left':\n legend.performLayout(0, height - legendPadding * 2);\n legendBBox = legendGroup.computeBBox();\n legendGroup.translationX = legendPadding - legendBBox.x;\n legendGroup.translationY = captionAutoPadding + (height - legendBBox.height) / 2 - legendBBox.y;\n legendAutoPadding.left = legendBBox.width;\n break;\n default: // case 'right':\n legend.performLayout(0, height - legendPadding * 2);\n legendBBox = legendGroup.computeBBox();\n legendGroup.translationX = width - legendBBox.width - legendBBox.x - legendPadding;\n legendGroup.translationY = captionAutoPadding + (height - legendBBox.height) / 2 - legendBBox.y;\n legendAutoPadding.right = legendBBox.width;\n break;\n }\n // Round off for pixel grid alignment to work properly.\n legendGroup.translationX = Math.floor(legendGroup.translationX);\n legendGroup.translationY = Math.floor(legendGroup.translationY);\n };\n Chart.prototype.setupListeners = function (chartElement) {\n chartElement.addEventListener('mousemove', this.onMouseMove);\n chartElement.addEventListener('mouseout', this.onMouseOut);\n chartElement.addEventListener('click', this.onClick);\n };\n Chart.prototype.cleanupListeners = function (chartElement) {\n chartElement.removeEventListener('mousemove', this.onMouseMove);\n chartElement.removeEventListener('mouseout', this.onMouseMove);\n chartElement.removeEventListener('click', this.onClick);\n };\n Chart.prototype.pickSeriesNode = function (x, y) {\n var allSeries = this.series;\n var node = undefined;\n for (var i = allSeries.length - 1; i >= 0; i--) {\n var series = allSeries[i];\n node = series.group.pickNode(x, y);\n if (node) {\n return {\n series: series,\n node: node\n };\n }\n }\n };\n Chart.prototype.onSeriesNodePick = function (event, series, node) {\n if (this.lastPick) {\n this.lastPick.series.dehighlightNode();\n }\n this.lastPick = {\n series: series,\n node: node\n };\n series.highlightNode(node);\n var html = series.tooltipEnabled && series.getTooltipHtml(node.datum);\n if (html) {\n this.showTooltip(event, html);\n }\n };\n Object.defineProperty(Chart.prototype, \"tooltipClass\", {\n get: function () {\n return this._tooltipClass;\n },\n set: function (value) {\n if (this._tooltipClass !== value) {\n this._tooltipClass = value;\n this.toggleTooltip();\n }\n },\n enumerable: true,\n configurable: true\n });\n Chart.prototype.toggleTooltip = function (visible) {\n var classList = [this.defaultTooltipClass, this._tooltipClass];\n if (visible) {\n classList.push('visible');\n }\n else if (this.lastPick) {\n this.lastPick.series.dehighlightNode();\n this.lastPick = undefined;\n }\n this.tooltipElement.setAttribute('class', classList.join(' '));\n };\n /**\n * Shows tooltip at the given event's coordinates.\n * If the `html` parameter is missing, moves the existing tooltip to the new position.\n */\n Chart.prototype.showTooltip = function (event, html) {\n var el = this.tooltipElement;\n var offset = this.tooltipOffset;\n var parent = el.parentElement;\n if (html !== undefined) {\n el.innerHTML = html;\n }\n else if (!el.innerHTML) {\n return;\n }\n if (html) {\n this.toggleTooltip(true);\n }\n var tooltipRect = el.getBoundingClientRect();\n var top = event.pageY + offset[1];\n var left = event.pageX + offset[0];\n if (tooltipRect &&\n parent &&\n parent.parentElement &&\n (left - pageXOffset + tooltipRect.width > parent.parentElement.offsetWidth)) {\n left -= tooltipRect.width + offset[0];\n }\n el.style.left = left + \"px\";\n el.style.top = top + \"px\";\n };\n Chart.prototype.hideTooltip = function () {\n this.toggleTooltip(false);\n };\n __decorate([\n reactive([], 'scene.parent')\n ], Chart.prototype, \"parent\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Chart.prototype, \"title\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Chart.prototype, \"subtitle\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], Chart.prototype, \"padding\", void 0);\n __decorate([\n reactive(['layoutChange'], 'scene.size')\n ], Chart.prototype, \"size\", void 0);\n __decorate([\n reactive(['layoutChange'], 'scene.height')\n ], Chart.prototype, \"height\", void 0);\n __decorate([\n reactive(['layoutChange'], 'scene.width')\n ], Chart.prototype, \"width\", void 0);\n return Chart;\n}(Observable));\nexport { Chart };\n","/**\n * Maps a discrete domain to a continuous numeric range.\n * See https://github.com/d3/d3-scale#band-scales for more info.\n */\nvar BandScale = /** @class */ (function () {\n function BandScale() {\n /**\n * Maps datum to its index in the {@link domain} array.\n * Used to check for duplicate datums (not allowed).\n */\n this.index = new Map();\n /**\n * The output range values for datum at each index.\n */\n this.ordinalRange = [];\n /**\n * Contains unique datums only. Since `{}` is used in place of `Map`\n * for IE11 compatibility, the datums are converted `toString` before\n * the uniqueness check.\n */\n this._domain = [];\n this._range = [0, 1];\n this._bandwidth = 1;\n /**\n * The ratio of the range that is reserved for space between bands.\n */\n this._paddingInner = 0;\n /**\n * The ratio of the range that is reserved for space before the first\n * and after the last band.\n */\n this._paddingOuter = 0;\n this._round = false;\n /**\n * How the leftover range is distributed.\n * `0.5` - equal distribution of space before the first and after the last band,\n * with bands effectively centered within the range.\n */\n this._align = 0.5;\n }\n Object.defineProperty(BandScale.prototype, \"domain\", {\n get: function () {\n return this._domain;\n },\n set: function (values) {\n var domain = this._domain;\n domain.length = 0;\n this.index = new Map();\n var index = this.index;\n // In case one wants to have duplicate domain values, for example, two 'Italy' categories,\n // one should use objects rather than strings for domain values like so:\n // { toString: () => 'Italy' }\n // { toString: () => 'Italy' }\n values.forEach(function (value) {\n if (index.get(value) === undefined) {\n index.set(value, domain.push(value) - 1);\n }\n });\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"range\", {\n get: function () {\n return this._range;\n },\n set: function (values) {\n this._range[0] = values[0];\n this._range[1] = values[1];\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n BandScale.prototype.ticks = function () {\n return this._domain;\n };\n BandScale.prototype.convert = function (d) {\n var i = this.index.get(d);\n if (i === undefined) {\n return NaN;\n }\n var r = this.ordinalRange[i];\n if (r === undefined) {\n return NaN;\n }\n return r;\n };\n Object.defineProperty(BandScale.prototype, \"bandwidth\", {\n get: function () {\n return this._bandwidth;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"padding\", {\n get: function () {\n return this._paddingInner;\n },\n set: function (value) {\n value = Math.max(0, Math.min(1, value));\n this._paddingInner = value;\n this._paddingOuter = value;\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"paddingInner\", {\n get: function () {\n return this._paddingInner;\n },\n set: function (value) {\n this._paddingInner = Math.max(0, Math.min(1, value)); // [0, 1]\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"paddingOuter\", {\n get: function () {\n return this._paddingOuter;\n },\n set: function (value) {\n this._paddingOuter = Math.max(0, Math.min(1, value)); // [0, 1]\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"round\", {\n get: function () {\n return this._round;\n },\n set: function (value) {\n this._round = value;\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(BandScale.prototype, \"align\", {\n get: function () {\n return this._align;\n },\n set: function (value) {\n this._align = Math.max(0, Math.min(1, value)); // [0, 1]\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n BandScale.prototype.rescale = function () {\n var _a;\n var n = this._domain.length;\n if (!n) {\n return;\n }\n var _b = this._range, a = _b[0], b = _b[1];\n var reversed = b < a;\n if (reversed) {\n _a = [b, a], a = _a[0], b = _a[1];\n }\n var step = (b - a) / Math.max(1, n - this._paddingInner + this._paddingOuter * 2);\n if (this._round) {\n step = Math.floor(step);\n }\n a += (b - a - step * (n - this._paddingInner)) * this._align;\n this._bandwidth = step * (1 - this._paddingInner);\n if (this._round) {\n a = Math.round(a);\n this._bandwidth = Math.round(this._bandwidth);\n }\n var values = [];\n for (var i = 0; i < n; i++) {\n values.push(a + step * i);\n }\n this.ordinalRange = reversed ? values.reverse() : values;\n };\n return BandScale;\n}());\nexport { BandScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BandScale } from \"../../scale/bandScale\";\nimport { ChartAxis } from \"../chartAxis\";\nvar CategoryAxis = /** @class */ (function (_super) {\n __extends(CategoryAxis, _super);\n function CategoryAxis() {\n var _this = this;\n var scale = new BandScale();\n scale.paddingInner = 0.2;\n scale.paddingOuter = 0.3;\n _this = _super.call(this, scale) || this;\n return _this;\n }\n return CategoryAxis;\n}(ChartAxis));\nexport { CategoryAxis };\n","import { find } from \"../util/array\";\n/**\n * The tree layout is calculated in abstract x/y coordinates, where the root is at (0, 0)\n * and the tree grows downward from the root.\n */\nvar TreeNode = /** @class */ (function () {\n function TreeNode(label, parent, number) {\n if (label === void 0) { label = ''; }\n if (number === void 0) { number = 0; }\n this.x = 0;\n this.y = 0;\n this.subtreeLeft = NaN;\n this.subtreeRight = NaN;\n this.screenX = 0;\n this.screenY = 0;\n this.children = [];\n this.leafCount = 0;\n this.prelim = 0;\n this.mod = 0;\n this.ancestor = this;\n this.change = 0;\n this.shift = 0;\n this.label = label;\n // screenX and screenY are meant to be recomputed from (layout) x and y\n // when the tree is resized (without performing another layout)\n this.parent = parent;\n this.depth = parent ? parent.depth + 1 : 0;\n this.number = number;\n }\n TreeNode.prototype.getLeftSibling = function () {\n return this.number > 0 && this.parent ? this.parent.children[this.number - 1] : undefined;\n };\n TreeNode.prototype.getLeftmostSibling = function () {\n return this.number > 0 && this.parent ? this.parent.children[0] : undefined;\n };\n // traverse the left contour of a subtree, return the successor of v on this contour\n TreeNode.prototype.nextLeft = function () {\n return this.children ? this.children[0] : this.thread;\n };\n // traverse the right contour of a subtree, return the successor of v on this contour\n TreeNode.prototype.nextRight = function () {\n return this.children ? this.children[this.children.length - 1] : this.thread;\n };\n TreeNode.prototype.getSiblings = function () {\n var _this = this;\n return this.parent ? this.parent.children.filter(function (_, i) { return i !== _this.number; }) : [];\n };\n return TreeNode;\n}());\n/**\n * Converts an array of ticks, where each tick has an array of labels, to a label tree.\n * If `pad` is `true`, will ensure that every branch matches the depth of the tree by\n * creating empty labels.\n */\nexport function ticksToTree(ticks, pad) {\n if (pad === void 0) { pad = true; }\n var root = new TreeNode();\n var depth = 0;\n if (pad) {\n ticks.forEach(function (tick) { return depth = Math.max(depth, tick.labels.length); });\n }\n ticks.forEach(function (tick) {\n if (pad) {\n while (tick.labels.length < depth) {\n tick.labels.unshift('');\n }\n }\n insertTick(root, tick);\n });\n return root;\n}\nfunction insertTick(root, tick) {\n var pathParts = tick.labels.slice().reverse(); // path elements from root to leaf label\n var lastPartIndex = pathParts.length - 1;\n pathParts.forEach(function (pathPart, partIndex) {\n var children = root.children;\n var existingNode = find(children, function (child) { return child.label === pathPart; });\n var isNotLeaf = partIndex !== lastPartIndex;\n if (existingNode && isNotLeaf) { // the isNotLeaf check is to allow duplicate leafs\n root = existingNode;\n }\n else {\n var node = new TreeNode(pathPart, root);\n node.number = children.length;\n children.push(node);\n if (isNotLeaf) {\n root = node;\n }\n }\n });\n}\n// Shift the subtree.\nfunction moveSubtree(wm, wp, shift) {\n var subtrees = wp.number - wm.number;\n var ratio = shift / subtrees;\n wp.change -= ratio;\n wp.shift += shift;\n wm.change += ratio;\n wp.prelim += shift;\n wp.mod += shift;\n}\nfunction ancestor(vim, v, defaultAncestor) {\n return v.getSiblings().indexOf(vim.ancestor) >= 0 ? vim.ancestor : defaultAncestor;\n}\n// Spaces out the children.\nfunction executeShifts(v) {\n var children = v.children;\n if (children) {\n var shift = 0;\n var change = 0;\n for (var i = children.length - 1; i >= 0; i--) {\n var w = children[i];\n w.prelim += shift;\n w.mod += shift;\n change += w.change;\n shift += w.shift + change;\n }\n }\n}\n// Moves current subtree with v as the root if some nodes are conflicting in space.\nfunction apportion(v, defaultAncestor, distance) {\n var w = v.getLeftSibling();\n if (w) {\n var vop = v;\n var vip = v;\n var vim = w;\n var vom = vip.getLeftmostSibling();\n var sip = vip.mod;\n var sop = vop.mod;\n var sim = vim.mod;\n var som = vom.mod;\n while (vim.nextRight() && vip.nextLeft()) {\n vim = vim.nextRight();\n vip = vip.nextLeft();\n vom = vom.nextLeft();\n vop = vop.nextRight();\n vop.ancestor = v;\n var shift = (vim.prelim + sim) - (vip.prelim + sip) + distance;\n if (shift > 0) {\n moveSubtree(ancestor(vim, v, defaultAncestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.mod;\n sip += vip.mod;\n som += vom.mod;\n sop += vop.mod;\n }\n if (vim.nextRight() && !vop.nextRight()) {\n vop.thread = vim.nextRight();\n vop.mod += sim - sop;\n }\n else {\n if (vip.nextLeft() && !vom.nextLeft()) {\n vom.thread = vip.nextLeft();\n vom.mod += sip - som;\n }\n defaultAncestor = v;\n }\n }\n return defaultAncestor;\n}\n// Compute the preliminary x-coordinate of node and its children (recursively).\nfunction firstWalk(node, distance) {\n var children = node.children;\n if (children.length) {\n var defaultAncestor_1 = children[0];\n children.forEach(function (child) {\n firstWalk(child, distance);\n defaultAncestor_1 = apportion(child, defaultAncestor_1, distance);\n });\n executeShifts(node);\n var midpoint = (children[0].prelim + children[children.length - 1].prelim) / 2;\n var leftSibling = node.getLeftSibling();\n if (leftSibling) {\n node.prelim = leftSibling.prelim + distance;\n node.mod = node.prelim - midpoint;\n }\n else {\n node.prelim = midpoint;\n }\n }\n else {\n var leftSibling = node.getLeftSibling();\n node.prelim = leftSibling ? leftSibling.prelim + distance : 0;\n }\n}\nvar Dimensions = /** @class */ (function () {\n function Dimensions() {\n this.top = Infinity;\n this.right = -Infinity;\n this.bottom = -Infinity;\n this.left = Infinity;\n }\n Dimensions.prototype.update = function (node, xy) {\n var _a = xy(node), x = _a.x, y = _a.y;\n if (x > this.right) {\n this.right = x;\n }\n if (x < this.left) {\n this.left = x;\n }\n if (y > this.bottom) {\n this.bottom = y;\n }\n if (y < this.top) {\n this.top = y;\n }\n };\n return Dimensions;\n}());\nfunction secondWalk(v, m, layout) {\n v.x = v.prelim + m;\n v.y = v.depth;\n layout.update(v);\n v.children.forEach(function (w) { return secondWalk(w, m + v.mod, layout); });\n}\n// After the second walk the parent nodes are positioned at the center of their immediate children.\n// If we want the parent nodes to be positioned at the center of the subtree for which they are roots,\n// we need a third walk to adjust the positions.\nfunction thirdWalk(v) {\n var children = v.children;\n var leafCount = 0;\n children.forEach(function (w) {\n thirdWalk(w);\n if (w.children.length) {\n leafCount += w.leafCount;\n }\n else {\n leafCount++;\n }\n });\n v.leafCount = leafCount;\n if (children.length) {\n v.subtreeLeft = children[0].subtreeLeft;\n v.subtreeRight = children[v.children.length - 1].subtreeRight;\n v.x = (v.subtreeLeft + v.subtreeRight) / 2;\n }\n else {\n v.subtreeLeft = v.x;\n v.subtreeRight = v.x;\n }\n}\nexport function treeLayout(root) {\n var layout = new TreeLayout;\n firstWalk(root, 1);\n secondWalk(root, -root.prelim, layout);\n thirdWalk(root);\n return layout;\n}\nvar TreeLayout = /** @class */ (function () {\n function TreeLayout() {\n this.dimensions = new Dimensions;\n this.leafCount = 0;\n this.nodes = [];\n // One might want to process leaf nodes separately from the rest of the tree.\n // For example, position labels corresponding to leafs vertically, rather than horizontally.\n this.leafNodes = [];\n this.nonLeafNodes = [];\n this.depth = 0;\n }\n TreeLayout.prototype.update = function (node) {\n this.dimensions.update(node, function (node) { return ({ x: node.x, y: node.y }); });\n if (!node.children.length) {\n this.leafCount++;\n this.leafNodes.push(node);\n }\n else {\n this.nonLeafNodes.push(node);\n }\n if (node.depth > this.depth) {\n this.depth = node.depth;\n }\n this.nodes.push(node);\n };\n TreeLayout.prototype.resize = function (width, height, shiftX, shiftY, flipX) {\n if (shiftX === void 0) { shiftX = 0; }\n if (shiftY === void 0) { shiftY = 0; }\n if (flipX === void 0) { flipX = false; }\n var xSteps = this.leafCount - 1;\n var ySteps = this.depth;\n var dimensions = this.dimensions;\n var scalingX = 1;\n var scalingY = 1;\n if (width > 0 && xSteps) {\n var existingSpacingX = (dimensions.right - dimensions.left) / xSteps;\n var desiredSpacingX = width / xSteps;\n scalingX = desiredSpacingX / existingSpacingX;\n if (flipX) {\n scalingX = -scalingX;\n }\n }\n if (height > 0 && ySteps) {\n var existingSpacingY = (dimensions.bottom - dimensions.top) / ySteps;\n var desiredSpacingY = height / ySteps;\n scalingY = desiredSpacingY / existingSpacingY;\n }\n var screenDimensions = new Dimensions();\n this.nodes.forEach(function (node) {\n node.screenX = node.x * scalingX;\n node.screenY = node.y * scalingY;\n screenDimensions.update(node, function (node) { return ({ x: node.screenX, y: node.screenY }); });\n });\n // Normalize so that root top and leftmost leaf left start at zero.\n var offsetX = -screenDimensions.left;\n var offsetY = -screenDimensions.top;\n this.nodes.forEach(function (node) {\n node.screenX += offsetX + shiftX;\n node.screenY += offsetY + shiftY;\n });\n };\n return TreeLayout;\n}());\nexport { TreeLayout };\nfunction logTree(root, formatter) {\n root.children.forEach(function (child) { return logTree(child, formatter); });\n if (formatter) {\n console.log(formatter(root));\n }\n else {\n console.log(root);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Group } from \"../../scene/group\";\nimport { Selection } from \"../../scene/selection\";\nimport { Line } from \"../../scene/shape/line\";\nimport { normalizeAngle360, toRadians } from \"../../util/angle\";\nimport { Text } from \"../../scene/shape/text\";\nimport { BBox } from \"../../scene/bbox\";\nimport { Matrix } from \"../../scene/matrix\";\n// import { Rect } from \"../../scene/shape/rect\"; debug (bbox)\nimport { BandScale } from \"../../scale/bandScale\";\nimport { ticksToTree, treeLayout } from \"../../layout/tree\";\nimport { AxisLabel } from \"../../axis\";\nimport { ChartAxis } from \"../chartAxis\";\nvar GroupedCategoryAxisLabel = /** @class */ (function (_super) {\n __extends(GroupedCategoryAxisLabel, _super);\n function GroupedCategoryAxisLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.grid = false;\n return _this;\n }\n return GroupedCategoryAxisLabel;\n}(AxisLabel));\n/**\n * A general purpose linear axis with no notion of orientation.\n * The axis is always rendered vertically, with horizontal labels positioned to the left\n * of the axis line by default. The axis can be {@link rotation | rotated} by an arbitrary angle,\n * so that it can be used as a top, right, bottom, left, radial or any other kind\n * of linear axis.\n * The generic `D` parameter is the type of the domain of the axis' scale.\n * The output range of the axis' scale is always numeric (screen coordinates).\n */\nvar GroupedCategoryAxis = /** @class */ (function (_super) {\n __extends(GroupedCategoryAxis, _super);\n function GroupedCategoryAxis() {\n var _this = _super.call(this, new BandScale()) || this;\n _this.id = _this.createId();\n _this.tickScale = new BandScale();\n _this.group = new Group();\n _this.translation = {\n x: 0,\n y: 0\n };\n /**\n * Axis rotation angle in degrees.\n */\n _this.rotation = 0;\n _this.line = {\n width: 1,\n color: 'rgba(195, 195, 195, 1)'\n };\n // readonly tick = new AxisTick();\n _this.label = new GroupedCategoryAxisLabel();\n /**\n * The color of the labels.\n * Use `undefined` rather than `rgba(0, 0, 0, 0)` to make labels invisible.\n */\n _this.labelColor = 'rgba(87, 87, 87, 1)';\n var _a = _this, group = _a.group, scale = _a.scale, tickScale = _a.tickScale;\n scale.paddingOuter = 0.1;\n scale.paddingInner = scale.paddingOuter * 2;\n tickScale.paddingInner = 1;\n tickScale.paddingOuter = 0;\n _this.gridLineSelection = Selection.select(group).selectAll();\n _this.axisLineSelection = Selection.select(group).selectAll();\n _this.separatorSelection = Selection.select(group).selectAll();\n _this.labelSelection = Selection.select(group).selectAll();\n return _this;\n // this.group.append(this.bboxRect); // debug (bbox)\n }\n GroupedCategoryAxis.prototype.createId = function () {\n var constructor = this.constructor;\n var className = constructor.className;\n if (!className) {\n throw new Error(\"The \" + constructor + \" is missing the 'className' property.\");\n }\n return className + '-' + (constructor.id = (constructor.id || 0) + 1);\n };\n Object.defineProperty(GroupedCategoryAxis.prototype, \"domain\", {\n get: function () {\n return this.scale.domain;\n },\n set: function (value) {\n this.scale.domain = value;\n var tickTree = ticksToTree(value);\n this.tickTreeLayout = treeLayout(tickTree);\n var domain = value.slice();\n domain.push('');\n this.tickScale.domain = domain;\n this.resizeTickTree();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GroupedCategoryAxis.prototype, \"range\", {\n get: function () {\n return this.scale.range;\n },\n set: function (value) {\n this.scale.range = value;\n this.tickScale.range = value;\n this.resizeTickTree();\n },\n enumerable: true,\n configurable: true\n });\n GroupedCategoryAxis.prototype.resizeTickTree = function () {\n var s = this.scale;\n var range = s.domain.length ? [s.convert(s.domain[0]), s.convert(s.domain[s.domain.length - 1])] : s.range;\n var layout = this.tickTreeLayout;\n var lineHeight = this.lineHeight;\n if (layout) {\n layout.resize(Math.abs(range[1] - range[0]), layout.depth * lineHeight, (Math.min(range[0], range[1]) || 0) + (s.bandwidth || 0) / 2, -layout.depth * lineHeight, (range[1] - range[0]) < 0);\n }\n };\n Object.defineProperty(GroupedCategoryAxis.prototype, \"lineHeight\", {\n get: function () {\n return this.label.fontSize * 1.5;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(GroupedCategoryAxis.prototype, \"gridLength\", {\n get: function () {\n return this._gridLength;\n },\n /**\n * The length of the grid. The grid is only visible in case of a non-zero value.\n */\n set: function (value) {\n // Was visible and now invisible, or was invisible and now visible.\n if (this._gridLength && !value || !this._gridLength && value) {\n this.gridLineSelection = this.gridLineSelection.remove().setData([]);\n this.labelSelection = this.labelSelection.remove().setData([]);\n }\n this._gridLength = value;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Creates/removes/updates the scene graph nodes that constitute the axis.\n * Supposed to be called _manually_ after changing _any_ of the axis properties.\n * This allows to bulk set axis properties before updating the nodes.\n * The node changes made by this method are rendered on the next animation frame.\n * We could schedule this method call automatically on the next animation frame\n * when any of the axis properties change (the way we do when properties of scene graph's\n * nodes change), but this will mean that we first wait for the next animation\n * frame to make changes to the nodes of the axis, then wait for another animation\n * frame to render those changes. It's nice to have everything update automatically,\n * but this extra level of async indirection will not just introduce an unwanted delay,\n * it will also make it harder to reason about the program.\n */\n GroupedCategoryAxis.prototype.update = function () {\n var _this = this;\n var _a = this, group = _a.group, scale = _a.scale, label = _a.label, tickScale = _a.tickScale;\n var rangeStart = scale.range[0];\n var rangeEnd = scale.range[1];\n var rangeLength = Math.abs(rangeEnd - rangeStart);\n var bandwidth = (rangeLength / scale.domain.length) || 0;\n var parallelLabels = label.parallel;\n var rotation = toRadians(this.rotation);\n var isHorizontal = Math.abs(Math.cos(rotation)) < 1e-8;\n var labelRotation = normalizeAngle360(toRadians(this.label.rotation));\n group.translationX = this.translation.x;\n group.translationY = this.translation.y;\n group.rotation = rotation;\n var title = this.title;\n // The Text `node` of the Caption is not used to render the title of the grouped category axis.\n // The phantom root of the tree layout is used instead.\n if (title) {\n title.node.visible = false;\n }\n var lineHeight = this.lineHeight;\n // Render ticks and labels.\n var tickTreeLayout = this.tickTreeLayout;\n var labels = scale.ticks();\n var treeLabels = tickTreeLayout ? tickTreeLayout.nodes : [];\n var isLabelTree = tickTreeLayout ? tickTreeLayout.depth > 1 : false;\n var ticks = tickScale.ticks();\n // The side of the axis line to position the labels on.\n // -1 = left (default)\n // 1 = right\n var sideFlag = label.mirrored ? 1 : -1;\n // When labels are parallel to the axis line, the `parallelFlipFlag` is used to\n // flip the labels to avoid upside-down text, when the axis is rotated\n // such that it is in the right hemisphere, i.e. the angle of rotation\n // is in the [0, π] interval.\n // The rotation angle is normalized, so that we have an easier time checking\n // if it's in the said interval. Since the axis is always rendered vertically\n // and then rotated, zero rotation means 12 (not 3) o-clock.\n // -1 = flip\n // 1 = don't flip (default)\n var parallelFlipRotation = normalizeAngle360(rotation);\n var parallelFlipFlag = (!labelRotation && parallelFlipRotation >= 0 && parallelFlipRotation <= Math.PI) ? -1 : 1;\n var regularFlipRotation = normalizeAngle360(rotation - Math.PI / 2);\n // Flip if the axis rotation angle is in the top hemisphere.\n var regularFlipFlag = (!labelRotation && regularFlipRotation >= 0 && regularFlipRotation <= Math.PI) ? -1 : 1;\n var updateGridLines = this.gridLineSelection.setData(this.gridLength ? ticks : []);\n updateGridLines.exit.remove();\n var enterGridLines = updateGridLines.enter.append(Line);\n var gridLineSelection = updateGridLines.merge(enterGridLines);\n var updateLabels = this.labelSelection.setData(treeLabels);\n updateLabels.exit.remove();\n var enterLabels = updateLabels.enter.append(Text);\n var labelSelection = updateLabels.merge(enterLabels);\n var labelFormatter = label.formatter;\n var maxLeafLabelWidth = 0;\n labelSelection\n .each(function (node, datum, index) {\n node.fontStyle = label.fontStyle;\n node.fontWeight = label.fontWeight;\n node.fontSize = label.fontSize;\n node.fontFamily = label.fontFamily;\n node.fill = label.color;\n node.textBaseline = parallelFlipFlag === -1 ? 'bottom' : 'hanging';\n // label.textBaseline = parallelLabels && !labelRotation\n // ? (sideFlag * parallelFlipFlag === -1 ? 'hanging' : 'bottom')\n // : 'middle';\n if (title && index === 0) { // use the phantom root as the axis title\n node.text = title.text;\n node.fontSize = title.fontSize;\n node.fontStyle = title.fontStyle;\n node.fontWeight = title.fontWeight;\n node.fontFamily = title.fontFamily;\n node.textBaseline = 'hanging';\n node.visible = labels.length > 0;\n }\n else {\n node.text = labelFormatter\n ? labelFormatter({\n value: String(datum.label),\n index: index\n })\n : String(datum.label);\n }\n node.textAlign = 'center';\n node.translationX = datum.screenY - label.fontSize * 0.25;\n node.translationY = datum.screenX;\n var bbox = node.computeBBox();\n if (bbox && bbox.width > maxLeafLabelWidth) {\n maxLeafLabelWidth = bbox.width;\n }\n });\n var labelX = sideFlag * label.padding;\n var autoRotation = parallelLabels\n ? parallelFlipFlag * Math.PI / 2\n : (regularFlipFlag === -1 ? Math.PI : 0);\n var labelGrid = this.label.grid;\n var separatorData = [];\n labelSelection.each(function (label, datum, index) {\n label.x = labelX;\n label.rotationCenterX = labelX;\n if (!datum.children.length) {\n label.rotation = labelRotation;\n label.textAlign = 'end';\n label.textBaseline = 'middle';\n }\n else {\n label.translationX -= maxLeafLabelWidth - lineHeight + _this.label.padding;\n if (isHorizontal) {\n label.rotation = autoRotation;\n }\n else {\n label.rotation = -Math.PI / 2;\n }\n }\n // Calculate positions of label separators for all nodes except the root.\n // Each separator is placed to the top of the current label.\n if (datum.parent && isLabelTree) {\n var y = !datum.children.length\n ? datum.screenX - bandwidth / 2\n : datum.screenX - datum.leafCount * bandwidth / 2;\n if (!datum.children.length) {\n if ((datum.number !== datum.children.length - 1) || labelGrid) {\n separatorData.push({\n y: y,\n x1: 0,\n x2: -maxLeafLabelWidth - _this.label.padding * 2,\n toString: function () { return String(index); }\n });\n }\n }\n else {\n var x = -maxLeafLabelWidth - _this.label.padding * 2 + datum.screenY;\n separatorData.push({\n y: y,\n x1: x + lineHeight,\n x2: x,\n toString: function () { return String(index); }\n });\n }\n }\n });\n // Calculate the position of the long separator on the far bottom of the axis.\n var minX = 0;\n separatorData.forEach(function (d) { return minX = Math.min(minX, d.x2); });\n separatorData.push({\n y: Math.max(rangeStart, rangeEnd),\n x1: 0,\n x2: minX,\n toString: function () { return String(separatorData.length); }\n });\n var updateSeparators = this.separatorSelection.setData(separatorData);\n updateSeparators.exit.remove();\n var enterSeparators = updateSeparators.enter.append(Line);\n var separatorSelection = updateSeparators.merge(enterSeparators);\n this.separatorSelection = separatorSelection;\n separatorSelection.each(function (line, datum) {\n line.x1 = datum.x1;\n line.x2 = datum.x2;\n line.y1 = datum.y;\n line.y2 = datum.y;\n line.stroke = _this.tick.color;\n line.fill = undefined;\n line.strokeWidth = 1;\n });\n this.gridLineSelection = gridLineSelection;\n this.labelSelection = labelSelection;\n // Render axis lines.\n var lineCount = tickTreeLayout ? tickTreeLayout.depth + 1 : 1;\n var lines = [];\n for (var i = 0; i < lineCount; i++) {\n lines.push(i);\n }\n var updateAxisLines = this.axisLineSelection.setData(lines);\n updateAxisLines.exit.remove();\n var enterAxisLines = updateAxisLines.enter.append(Line);\n var axisLineSelection = updateAxisLines.merge(enterAxisLines);\n this.axisLineSelection = axisLineSelection;\n axisLineSelection.each(function (line, _, index) {\n var x = index > 0 ? -maxLeafLabelWidth - _this.label.padding * 2 - (index - 1) * lineHeight : 0;\n line.x1 = x;\n line.x2 = x;\n line.y1 = rangeStart;\n line.y2 = rangeEnd;\n line.strokeWidth = _this.line.width;\n line.stroke = _this.line.color;\n line.visible = labels.length > 0 && (index === 0 || (labelGrid && isLabelTree));\n });\n if (this.gridLength) {\n var styles_1 = this.gridStyle;\n var styleCount_1 = styles_1.length;\n gridLineSelection\n .each(function (line, datum, index) {\n var y = Math.round(tickScale.convert(datum));\n line.x1 = 0;\n line.x2 = -sideFlag * _this.gridLength;\n line.y1 = y;\n line.y2 = y;\n line.visible = Math.abs(line.parent.translationY - rangeStart) > 1;\n var style = styles_1[index % styleCount_1];\n line.stroke = style.stroke;\n line.strokeWidth = _this.tick.width;\n line.lineDash = style.lineDash;\n line.fill = undefined;\n });\n }\n // debug (bbox)\n // const bbox = this.computeBBox();\n // const bboxRect = this.bboxRect;\n // bboxRect.x = bbox.x;\n // bboxRect.y = bbox.y;\n // bboxRect.width = bbox.width;\n // bboxRect.height = bbox.height;\n };\n GroupedCategoryAxis.prototype.computeBBox = function (options) {\n var includeTitle = !options || !options.excludeTitle;\n var left = Infinity;\n var right = -Infinity;\n var top = Infinity;\n var bottom = -Infinity;\n this.labelSelection.each(function (label, _, index) {\n // The label itself is rotated, but not translated, the group that\n // contains it is. So to capture the group transform in the label bbox\n // calculation we combine the transform matrices of the label and the group.\n // Depending on the timing of the `axis.computeBBox()` method call, we may\n // not have the group's and the label's transform matrices updated yet (because\n // the transform matrix is not recalculated whenever a node's transform attributes\n // change, instead it's marked for recalculation on the next frame by setting\n // the node's `dirtyTransform` flag to `true`), so we force them to update\n // right here by calling `computeTransformMatrix`.\n if (index > 0 || includeTitle) { // first node is the root (title)\n label.computeTransformMatrix();\n var matrix = Matrix.flyweight(label.matrix);\n var labelBBox = label.computeBBox();\n if (labelBBox) {\n var bbox = matrix.transformBBox(labelBBox);\n left = Math.min(left, bbox.x);\n right = Math.max(right, bbox.x + bbox.width);\n top = Math.min(top, bbox.y);\n bottom = Math.max(bottom, bbox.y + bbox.height);\n }\n }\n });\n return new BBox(left, top, right - left, bottom - top);\n };\n // debug (bbox)\n // private bboxRect = (() => {\n // const rect = new Rect();\n // rect.fill = undefined;\n // rect.stroke = 'red';\n // rect.strokeWidth = 1;\n // rect.strokeOpacity = 0.7;\n // return rect;\n // })();\n GroupedCategoryAxis.className = 'GroupedCategoryAxis';\n return GroupedCategoryAxis;\n}(ChartAxis));\nexport { GroupedCategoryAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Chart } from \"./chart\";\nimport { numericExtent } from \"../util/array\";\nimport { Padding } from \"../util/padding\";\nimport { Group } from \"../scene/group\";\nimport { CategoryAxis } from \"./axis/categoryAxis\";\nimport { GroupedCategoryAxis } from \"./axis/groupedCategoryAxis\";\nimport { reactive } from \"../util/observable\";\nimport { ChartAxisPosition } from \"./chartAxis\";\n/** Defines the orientation used when rendering data series */\nexport var CartesianChartLayout;\n(function (CartesianChartLayout) {\n CartesianChartLayout[CartesianChartLayout[\"Vertical\"] = 0] = \"Vertical\";\n CartesianChartLayout[CartesianChartLayout[\"Horizontal\"] = 1] = \"Horizontal\";\n})(CartesianChartLayout || (CartesianChartLayout = {}));\nvar CartesianChart = /** @class */ (function (_super) {\n __extends(CartesianChart, _super);\n function CartesianChart(document) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this, document) || this;\n _this.axisAutoPadding = new Padding();\n _this.flipXY = false;\n _this._seriesRoot = new Group();\n _this._layout = CartesianChartLayout.Vertical;\n _this._updateAxes = _this.updateAxes.bind(_this);\n // Prevent the scene from rendering chart components in an invalid state\n // (before first layout is performed).\n _this.scene.root.visible = false;\n var root = _this.scene.root;\n root.append(_this._seriesRoot);\n root.append(_this.legend.group);\n return _this;\n }\n Object.defineProperty(CartesianChart.prototype, \"seriesRoot\", {\n get: function () {\n return this._seriesRoot;\n },\n enumerable: true,\n configurable: true\n });\n CartesianChart.prototype.performLayout = function () {\n if (this.dataPending) {\n return;\n }\n this.scene.root.visible = true;\n var _a = this, width = _a.width, height = _a.height, axes = _a.axes, legend = _a.legend;\n var shrinkRect = {\n x: 0,\n y: 0,\n width: width,\n height: height\n };\n this.positionCaptions();\n this.positionLegend();\n if (legend.enabled && legend.data.length) {\n var legendAutoPadding = this.legendAutoPadding;\n var legendPadding = this.legend.padding;\n shrinkRect.x += legendAutoPadding.left;\n shrinkRect.y += legendAutoPadding.top;\n shrinkRect.width -= legendAutoPadding.left + legendAutoPadding.right;\n shrinkRect.height -= legendAutoPadding.top + legendAutoPadding.bottom;\n switch (this.legend.position) {\n case 'right':\n shrinkRect.width -= legendPadding;\n break;\n case 'bottom':\n shrinkRect.height -= legendPadding;\n break;\n case 'left':\n shrinkRect.x += legendPadding;\n shrinkRect.width -= legendPadding;\n break;\n case 'top':\n shrinkRect.y += legendPadding;\n shrinkRect.height -= legendPadding;\n break;\n }\n }\n var _b = this, captionAutoPadding = _b.captionAutoPadding, padding = _b.padding, axisAutoPadding = _b.axisAutoPadding;\n this.updateAxes();\n shrinkRect.x += padding.left + axisAutoPadding.left;\n shrinkRect.y += padding.top + axisAutoPadding.top + captionAutoPadding;\n shrinkRect.width -= padding.left + padding.right + axisAutoPadding.left + axisAutoPadding.right;\n shrinkRect.height -= padding.top + padding.bottom + axisAutoPadding.top + axisAutoPadding.bottom + captionAutoPadding;\n axes.forEach(function (axis) {\n axis.group.visible = true;\n switch (axis.position) {\n case ChartAxisPosition.Top:\n axis.range = [0, shrinkRect.width];\n axis.translation.x = Math.floor(shrinkRect.x);\n axis.translation.y = Math.floor(shrinkRect.y + 1);\n axis.label.mirrored = true;\n axis.gridLength = shrinkRect.height;\n break;\n case ChartAxisPosition.Right:\n if (axis instanceof CategoryAxis || axis instanceof GroupedCategoryAxis) {\n axis.range = [0, shrinkRect.height];\n }\n else {\n axis.range = [shrinkRect.height, 0];\n }\n axis.translation.x = Math.floor(shrinkRect.x + shrinkRect.width + 1);\n axis.translation.y = Math.floor(shrinkRect.y);\n axis.label.mirrored = true;\n axis.gridLength = shrinkRect.width;\n break;\n case ChartAxisPosition.Bottom:\n axis.range = [0, shrinkRect.width];\n axis.translation.x = Math.floor(shrinkRect.x);\n axis.translation.y = Math.floor(shrinkRect.y + shrinkRect.height + 1);\n axis.gridLength = shrinkRect.height;\n break;\n case ChartAxisPosition.Left:\n if (axis instanceof CategoryAxis || axis instanceof GroupedCategoryAxis) {\n axis.range = [0, shrinkRect.height];\n }\n else {\n axis.range = [shrinkRect.height, 0];\n }\n axis.translation.x = Math.floor(shrinkRect.x);\n axis.translation.y = Math.floor(shrinkRect.y);\n axis.gridLength = shrinkRect.width;\n break;\n }\n });\n this.series.forEach(function (series) {\n series.group.translationX = Math.floor(shrinkRect.x);\n series.group.translationY = Math.floor(shrinkRect.y);\n series.update(); // this has to happen after the `updateAxes` call\n });\n this.axes.forEach(function (axis) { return axis.update(); });\n };\n Object.defineProperty(CartesianChart.prototype, \"layout\", {\n get: function () {\n return this._layout;\n },\n set: function (value) {\n if (this._layout !== value) {\n this._layout = value;\n this.layoutPending = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n CartesianChart.prototype.initSeries = function (series) {\n _super.prototype.initSeries.call(this, series);\n series.addEventListener('dataProcessed', this._updateAxes);\n };\n CartesianChart.prototype.freeSeries = function (series) {\n _super.prototype.freeSeries.call(this, series);\n series.removeEventListener('dataProcessed', this._updateAxes);\n };\n CartesianChart.prototype.updateAxes = function () {\n var _this = this;\n var axes = this.axes.filter(function (a) { return !a.linkedTo; });\n var linkedAxes = this.axes.filter(function (a) { return a.linkedTo; });\n axes.concat(linkedAxes).forEach(function (axis) {\n var _a;\n var direction = axis.direction, position = axis.position, boundSeries = axis.boundSeries;\n if (axis.linkedTo) {\n axis.domain = axis.linkedTo.domain;\n }\n else {\n var domains_1 = [];\n boundSeries.filter(function (s) { return s.visible; }).forEach(function (series) {\n domains_1.push(series.getDomain(direction));\n });\n var domain = (_a = new Array()).concat.apply(_a, domains_1);\n axis.domain = numericExtent(domain) || domain; // if numeric extent can't be found, it's categories\n }\n axis.update();\n var axisThickness = Math.floor(axis.computeBBox().width);\n switch (position) {\n case ChartAxisPosition.Left:\n _this.axisAutoPadding.left = axisThickness;\n break;\n case ChartAxisPosition.Right:\n _this.axisAutoPadding.right = axisThickness;\n break;\n case ChartAxisPosition.Bottom:\n _this.axisAutoPadding.bottom = axisThickness;\n break;\n case ChartAxisPosition.Top:\n _this.axisAutoPadding.top = axisThickness;\n break;\n }\n });\n };\n CartesianChart.className = 'CartesianChart';\n __decorate([\n reactive(['layoutChange'])\n ], CartesianChart.prototype, \"flipXY\", void 0);\n return CartesianChart;\n}(Chart));\nexport { CartesianChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Series } from \"../series\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nimport { SeriesMarker } from \"../seriesMarker\";\nvar PolarSeries = /** @class */ (function (_super) {\n __extends(PolarSeries, _super);\n function PolarSeries() {\n var _a;\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.directionKeys = (_a = {},\n _a[ChartAxisDirection.X] = ['angleKey'],\n _a[ChartAxisDirection.Y] = ['radiusKey'],\n _a);\n /**\n * The center of the polar series (for example, the center of a pie).\n * If the polar chart has multiple series, all of them will have their\n * center set to the same value as a result of the polar chart layout.\n * The center coordinates are not supposed to be set by the user.\n */\n _this.centerX = 0;\n _this.centerY = 0;\n /**\n * The maximum radius the series can use.\n * This value is set automatically as a result of the polar chart layout\n * and is not supposed to be set by the user.\n */\n _this.radius = 0;\n return _this;\n }\n return PolarSeries;\n}(Series));\nexport { PolarSeries };\nvar PolarSeriesMarker = /** @class */ (function (_super) {\n __extends(PolarSeriesMarker, _super);\n function PolarSeriesMarker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n return PolarSeriesMarker;\n}(SeriesMarker));\nexport { PolarSeriesMarker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Chart } from \"./chart\";\nimport { PolarSeries } from \"./series/polar/polarSeries\";\nvar PolarChart = /** @class */ (function (_super) {\n __extends(PolarChart, _super);\n function PolarChart(document) {\n if (document === void 0) { document = window.document; }\n var _this = _super.call(this, document) || this;\n _this.scene.root.append(_this.legend.group);\n return _this;\n }\n Object.defineProperty(PolarChart.prototype, \"seriesRoot\", {\n get: function () {\n return this.scene.root;\n },\n enumerable: true,\n configurable: true\n });\n PolarChart.prototype.performLayout = function () {\n var shrinkRect = {\n x: 0,\n y: 0,\n width: this.width,\n height: this.height\n };\n this.positionCaptions();\n this.positionLegend();\n var captionAutoPadding = this.captionAutoPadding;\n shrinkRect.y += captionAutoPadding;\n shrinkRect.height -= captionAutoPadding;\n if (this.legend.enabled && this.legend.data.length) {\n var legendAutoPadding = this.legendAutoPadding;\n shrinkRect.x += legendAutoPadding.left;\n shrinkRect.y += legendAutoPadding.top;\n shrinkRect.width -= legendAutoPadding.left + legendAutoPadding.right;\n shrinkRect.height -= legendAutoPadding.top + legendAutoPadding.bottom;\n var legendPadding = this.legend.padding;\n switch (this.legend.position) {\n case 'right':\n shrinkRect.width -= legendPadding;\n break;\n case 'bottom':\n shrinkRect.height -= legendPadding;\n break;\n case 'left':\n shrinkRect.x += legendPadding;\n shrinkRect.width -= legendPadding;\n break;\n case 'top':\n shrinkRect.y += legendPadding;\n shrinkRect.height -= legendPadding;\n break;\n }\n }\n var padding = this.padding;\n shrinkRect.x += padding.left;\n shrinkRect.y += padding.top;\n shrinkRect.width -= padding.left + padding.right;\n shrinkRect.height -= padding.top + padding.bottom;\n var centerX = shrinkRect.x + shrinkRect.width / 2;\n var centerY = shrinkRect.y + shrinkRect.height / 2;\n var radius = Math.min(shrinkRect.width, shrinkRect.height) / 2;\n this.series.forEach(function (series) {\n if (series instanceof PolarSeries) {\n series.centerX = centerX;\n series.centerY = centerY;\n series.radius = radius;\n series.update();\n }\n });\n };\n PolarChart.className = 'PolarChart';\n return PolarChart;\n}(Chart));\nexport { PolarChart };\n","export function ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default (function (x) { return function () { return x; }; });\n","export default function (a, b) {\n a = +a;\n b -= a;\n return function (t) { return a + b * t; };\n}\n","export default function (a, b) {\n var date = new Date;\n var msA = +a;\n var msB = +b - msA;\n return function (t) {\n date.setTime(msA + msB * t);\n return date;\n };\n}\n","import value from \"./value\";\nexport default function (a, b) {\n var nb = b ? b.length : 0;\n var na = a ? Math.min(nb, a.length) : 0;\n var x = new Array(na);\n var c = new Array(nb);\n var i;\n for (i = 0; i < na; ++i) {\n x[i] = value(a[i], b[i]);\n }\n for (; i < nb; ++i) {\n c[i] = b[i];\n }\n return function (t) {\n for (i = 0; i < na; ++i) {\n c[i] = x[i](t);\n }\n return c;\n };\n}\n","import value from \"./value\";\nexport default function (a, b) {\n var i = {};\n var c = {};\n var k;\n if (a === null || typeof a !== 'object') {\n a = {};\n }\n if (b === null || typeof b !== 'object') {\n b = {};\n }\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n }\n else {\n c[k] = b[k];\n }\n }\n return function (t) {\n for (k in i) {\n c[k] = i[k](t);\n }\n return c;\n };\n}\n","import constant from \"./constant\";\nimport number from \"./number\";\nimport date from \"./date\";\nimport array from \"./array\";\nimport object from \"./object\";\nexport default function (a, b) {\n var t = typeof b;\n // let c;\n return b == null || t === 'boolean' ? constant(b)\n : (t === 'number' ? number\n // : t === 'string' ? ((c = color(b)) ? (b = c, rgb) : string)\n // : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== 'function' && typeof b.toString !== 'function' || isNaN(b) ? object\n : number)(a, b);\n}\n","import { ascending } from \"./compare\";\n/**\n * Returns the insertion point for `x` in array to maintain sorted order.\n * The arguments `lo` and `hi` may be used to specify a subset of the array which should be considered;\n * by default the entire array is used. If `x` is already present in array, the insertion point will be before\n * (to the left of) any existing entries. The return value is suitable for use as the first argument to `splice`\n * assuming that array is already sorted. The returned insertion point `i` partitions the array into two halves\n * so that all `v < x` for `v` in `array.slice(lo, i)` for the left side and all `v >= x` for `v` in `array.slice(i, hi)`\n * for the right side.\n * @param list\n * @param x\n * @param comparator\n * @param lo\n * @param hi\n */\nexport function bisectLeft(list, x, comparator, lo, hi) {\n if (lo === void 0) { lo = 0; }\n if (hi === void 0) { hi = list.length; }\n while (lo < hi) {\n var mid = (lo + hi) >>> 1;\n if (comparator(list[mid], x) < 0) { // list[mid] < x\n lo = mid + 1;\n }\n else {\n hi = mid;\n }\n }\n return lo;\n}\nexport function bisectRight(list, x, comparator, lo, hi) {\n if (lo === void 0) { lo = 0; }\n if (hi === void 0) { hi = list.length; }\n while (lo < hi) {\n var mid = (lo + hi) >>> 1;\n if (comparator(list[mid], x) > 0) { // list[mid] > x\n hi = mid;\n }\n else {\n lo = mid + 1;\n }\n }\n return lo;\n}\n/**\n * A specialized version of `bisectLeft` that works with the arrays whose elements cannot be compared directly.\n * The map function is used instead to produce a comparable value for a given array element, then the values\n * returned by the map are compared using the `ascendingComparator`.\n * @param list\n * @param x\n * @param map\n * @param lo\n * @param hi\n */\nexport function complexBisectLeft(list, x, map, lo, hi) {\n if (lo === void 0) { lo = 0; }\n if (hi === void 0) { hi = list.length; }\n var comparator = ascendingComparator(map);\n while (lo < hi) {\n var mid = (lo + hi) >>> 1;\n if (comparator(list[mid], x) < 0) {\n lo = mid + 1;\n }\n else {\n hi = mid;\n }\n }\n return lo;\n}\nexport function complexBisectRight(list, x, map, lo, hi) {\n if (lo === void 0) { lo = 0; }\n if (hi === void 0) { hi = list.length; }\n var comparator = ascendingComparator(map);\n while (lo < hi) {\n var mid = (lo + hi) >>> 1;\n if (comparator(list[mid], x) < 0) {\n lo = mid + 1;\n }\n else {\n hi = mid;\n }\n }\n return lo;\n}\nfunction ascendingComparator(map) {\n return function (item, x) {\n return ascending(map(item), x);\n };\n}\n","import { ascending } from \"../util/compare\";\nimport interpolateValue from \"../interpolate/value\";\nimport interpolateNumber from \"../interpolate/number\";\nimport { bisectRight } from \"../util/bisect\";\nexport var constant = function (x) { return function () { return x; }; };\nexport var identity = function (x) { return x; };\nfunction clamper(domain) {\n var _a;\n var a = domain[0];\n var b = domain[domain.length - 1];\n if (a > b) {\n _a = [b, a], a = _a[0], b = _a[1];\n }\n return function (x) { return Math.max(a, Math.min(b, x)); };\n}\nvar ContinuousScale = /** @class */ (function () {\n function ContinuousScale() {\n /**\n * The output value of the scale for `undefined` or `NaN` input values.\n */\n this.unknown = undefined;\n this._clamp = identity;\n this._domain = [0, 1];\n this._range = [0, 1];\n this.transform = identity; // transforms domain value\n this.untransform = identity; // untransforms domain value\n this._interpolate = interpolateValue;\n this.rescale();\n }\n Object.defineProperty(ContinuousScale.prototype, \"clamp\", {\n get: function () {\n return this._clamp !== identity;\n },\n set: function (value) {\n this._clamp = value ? clamper(this.domain) : identity;\n },\n enumerable: true,\n configurable: true\n });\n ContinuousScale.prototype.setDomain = function (values) {\n this._domain = Array.prototype.map.call(values, function (v) { return +v; });\n if (this._clamp !== identity) {\n this._clamp = clamper(this.domain);\n }\n this.rescale();\n };\n ContinuousScale.prototype.getDomain = function () {\n return this._domain.slice();\n };\n Object.defineProperty(ContinuousScale.prototype, \"domain\", {\n get: function () {\n return this.getDomain();\n },\n set: function (values) {\n this.setDomain(values);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ContinuousScale.prototype, \"range\", {\n get: function () {\n return this._range.slice();\n },\n set: function (values) {\n this._range = Array.prototype.slice.call(values);\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ContinuousScale.prototype, \"interpolate\", {\n get: function () {\n return this._interpolate;\n },\n set: function (value) {\n this._interpolate = value;\n this.rescale();\n },\n enumerable: true,\n configurable: true\n });\n ContinuousScale.prototype.rescale = function () {\n if (Math.min(this.domain.length, this.range.length) > 2) {\n this.piecewise = this.polymap;\n }\n else {\n this.piecewise = this.bimap;\n }\n this.output = undefined;\n this.input = undefined;\n };\n /**\n * Returns a function that converts `x` in `[a, b]` to `t` in `[0, 1]`. Non-clamping.\n * @param a\n * @param b\n */\n ContinuousScale.prototype.normalize = function (a, b) {\n return (b -= (a = +a))\n ? function (x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n };\n ContinuousScale.prototype.bimap = function (domain, range, interpolate) {\n var x0 = domain[0];\n var x1 = domain[1];\n var y0 = range[0];\n var y1 = range[1];\n var xt;\n var ty;\n if (x1 < x0) {\n xt = this.normalize(x1, x0);\n ty = interpolate(y1, y0);\n }\n else {\n xt = this.normalize(x0, x1);\n ty = interpolate(y0, y1);\n }\n return function (x) { return ty(xt(x)); }; // domain value x --> t in [0, 1] --> range value y\n };\n ContinuousScale.prototype.polymap = function (domain, range, interpolate) {\n var _this = this;\n // number of segments in the polylinear scale\n var n = Math.min(domain.length, range.length) - 1;\n if (domain[n] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n // deinterpolators from domain segment value to t\n var dt = Array.from({ length: n }, function (_, i) { return _this.normalize(domain[i], domain[i + 1]); });\n // reinterpolators from t to range segment value\n var tr = Array.from({ length: n }, function (_, i) { return interpolate(range[i], range[i + 1]); });\n return function (x) {\n var i = bisectRight(domain, x, ascending, 1, n) - 1; // Find the domain segment that `x` belongs to.\n // This also tells us which deinterpolator/reinterpolator pair to use.\n return tr[i](dt[i](x));\n };\n };\n ContinuousScale.prototype.convert = function (x) {\n x = +x;\n if (isNaN(x)) {\n return this.unknown;\n }\n else {\n if (!this.output) {\n this.output = this.piecewise(this.domain.map(this.transform), this.range, this.interpolate);\n }\n return this.output(this.transform(this._clamp(x)));\n }\n };\n ContinuousScale.prototype.invert = function (y) {\n if (!this.input) {\n this.input = this.piecewise(this.range, this.domain.map(this.transform), interpolateNumber);\n }\n return this._clamp(this.untransform(this.input(y)));\n };\n return ContinuousScale;\n}());\nexport default ContinuousScale;\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Path } from \"../../../scene/shape/path\";\nimport ContinuousScale from \"../../../scale/continuousScale\";\nimport { Selection } from \"../../../scene/selection\";\nimport { Group } from \"../../../scene/group\";\nimport palette from \"../../palettes\";\nimport { numericExtent } from \"../../../util/array\";\nimport { toFixed } from \"../../../util/number\";\nimport { PointerEvents } from \"../../../scene/node\";\nimport { Marker } from \"../../marker/marker\";\nimport { CartesianSeries, CartesianSeriesMarker } from \"./cartesianSeries\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nvar LineSeries = /** @class */ (function (_super) {\n __extends(LineSeries, _super);\n function LineSeries() {\n var _this = _super.call(this) || this;\n _this.xDomain = [];\n _this.yDomain = [];\n _this.xData = [];\n _this.yData = [];\n _this.lineNode = new Path();\n // We use groups for this selection even though each group only contains a marker ATM\n // because in the future we might want to add label support as well.\n _this.groupSelection = Selection.select(_this.group).selectAll();\n _this.marker = new CartesianSeriesMarker();\n _this._xKey = '';\n _this._xName = '';\n _this._yKey = '';\n _this._yName = '';\n _this._fill = palette.fills[0];\n _this._stroke = palette.strokes[0];\n _this._strokeWidth = 2;\n _this._fillOpacity = 1;\n _this._strokeOpacity = 1;\n _this.highlightStyle = { fill: 'yellow' };\n var lineNode = _this.lineNode;\n lineNode.fill = undefined;\n lineNode.lineJoin = 'round';\n lineNode.pointerEvents = PointerEvents.None;\n _this.group.append(lineNode);\n var marker = _this.marker;\n marker.addPropertyListener('type', function () { return _this.onMarkerTypeChange(); });\n marker.addPropertyListener('enabled', function (event) {\n if (!event.value) {\n _this.groupSelection = _this.groupSelection.setData([]);\n _this.groupSelection.exit.remove();\n }\n });\n marker.addEventListener('change', function () { return _this.update(); });\n return _this;\n }\n LineSeries.prototype.onMarkerTypeChange = function () {\n this.groupSelection = this.groupSelection.setData([]);\n this.groupSelection.exit.remove();\n this.update();\n this.fireEvent({ type: 'legendChange' });\n };\n Object.defineProperty(LineSeries.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n if (this._title !== value) {\n this._title = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n if (this._xKey !== value) {\n this._xKey = value;\n this.xData = [];\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"xName\", {\n get: function () {\n return this._xName;\n },\n set: function (value) {\n if (this._xName !== value) {\n this._xName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"yKey\", {\n get: function () {\n return this._yKey;\n },\n set: function (value) {\n if (this._yKey !== value) {\n this._yKey = value;\n this.yData = [];\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"yName\", {\n get: function () {\n return this._yName;\n },\n set: function (value) {\n if (this._yName !== value) {\n this._yName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n LineSeries.prototype.processData = function () {\n var _a = this, xAxis = _a.xAxis, xKey = _a.xKey, yKey = _a.yKey, xData = _a.xData, yData = _a.yData;\n var data = xKey && yKey ? this.data : [];\n if (!xAxis) {\n return false;\n }\n var isContinuousX = xAxis.scale instanceof ContinuousScale;\n xData.length = 0;\n yData.length = 0;\n for (var i = 0, n = data.length; i < n; i++) {\n var datum = data[i];\n var x = datum[xKey];\n var y = datum[yKey];\n if (x == null || (isContinuousX && isNaN(x)) || y == null || isNaN(y)) {\n continue;\n }\n xData.push(x);\n yData.push(y);\n }\n this.xDomain = isContinuousX ? this.fixNumericExtent(numericExtent(xData), 'x') : xData;\n this.yDomain = this.fixNumericExtent(numericExtent(yData), 'y');\n return true;\n };\n LineSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.xDomain;\n }\n else {\n return this.yDomain;\n }\n };\n Object.defineProperty(LineSeries.prototype, \"fill\", {\n get: function () {\n return this._fill;\n },\n set: function (value) {\n if (this._fill !== value) {\n this._fill = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"stroke\", {\n get: function () {\n return this._stroke;\n },\n set: function (value) {\n if (this._stroke !== value) {\n this._stroke = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"fillOpacity\", {\n get: function () {\n return this._fillOpacity;\n },\n set: function (value) {\n if (this._fillOpacity !== value) {\n this._fillOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(LineSeries.prototype, \"strokeOpacity\", {\n get: function () {\n return this._strokeOpacity;\n },\n set: function (value) {\n if (this._strokeOpacity !== value) {\n this._strokeOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n LineSeries.prototype.highlightNode = function (node) {\n if (!(node instanceof Marker)) {\n return;\n }\n this.highlightedNode = node;\n this.scheduleLayout();\n };\n LineSeries.prototype.dehighlightNode = function () {\n this.highlightedNode = undefined;\n this.scheduleLayout();\n };\n LineSeries.prototype.update = function () {\n var _a = this, chart = _a.chart, xAxis = _a.xAxis, yAxis = _a.yAxis;\n this.group.visible = this.visible;\n if (!xAxis || !yAxis || !chart || chart.layoutPending || chart.dataPending) {\n return;\n }\n var xScale = xAxis.scale;\n var yScale = yAxis.scale;\n var xOffset = (xScale.bandwidth || 0) / 2;\n var yOffset = (yScale.bandwidth || 0) / 2;\n var _b = this, data = _b.data, xData = _b.xData, yData = _b.yData, marker = _b.marker, lineNode = _b.lineNode;\n var groupSelectionData = [];\n var linePath = lineNode.path;\n linePath.clear();\n xData.forEach(function (xDatum, i) {\n var yDatum = yData[i];\n var x = xScale.convert(xDatum) + xOffset;\n var y = yScale.convert(yDatum) + yOffset;\n if (i > 0) {\n linePath.lineTo(x, y);\n }\n else {\n linePath.moveTo(x, y);\n }\n if (marker) {\n groupSelectionData.push({\n seriesDatum: data[i],\n x: x,\n y: y\n });\n }\n });\n lineNode.stroke = this.stroke;\n lineNode.strokeWidth = this.strokeWidth;\n this.updateGroupSelection(groupSelectionData);\n };\n LineSeries.prototype.updateGroupSelection = function (groupSelectionData) {\n var _a = this, marker = _a.marker, xKey = _a.xKey, yKey = _a.yKey, highlightedNode = _a.highlightedNode, fill = _a.fill, stroke = _a.stroke, strokeWidth = _a.strokeWidth;\n var groupSelection = this.groupSelection;\n var Marker = marker.type;\n var updateGroups = groupSelection.setData(groupSelectionData);\n updateGroups.exit.remove();\n var enterGroups = updateGroups.enter.append(Group);\n enterGroups.append(Marker);\n var _b = this.highlightStyle, highlightFill = _b.fill, highlightStroke = _b.stroke;\n var markerFormatter = marker.formatter;\n var markerSize = marker.size;\n var markerStrokeWidth = marker.strokeWidth !== undefined ? marker.strokeWidth : strokeWidth;\n groupSelection = updateGroups.merge(enterGroups);\n groupSelection.selectByClass(Marker)\n .each(function (node, datum) {\n var isHighlightedNode = node === highlightedNode;\n var markerFill = isHighlightedNode && highlightFill !== undefined ? highlightFill : marker.fill || fill;\n var markerStroke = isHighlightedNode && highlightStroke !== undefined ? highlightStroke : marker.stroke || stroke;\n var markerFormat = undefined;\n if (markerFormatter) {\n markerFormat = markerFormatter({\n datum: datum.seriesDatum,\n xKey: xKey,\n yKey: yKey,\n fill: markerFill,\n stroke: markerStroke,\n strokeWidth: markerStrokeWidth,\n size: markerSize,\n highlighted: isHighlightedNode\n });\n }\n node.fill = markerFormat && markerFormat.fill || markerFill;\n node.stroke = markerFormat && markerFormat.stroke || markerStroke;\n node.strokeWidth = markerFormat && markerFormat.strokeWidth !== undefined\n ? markerFormat.strokeWidth\n : markerStrokeWidth;\n node.size = markerFormat && markerFormat.size !== undefined\n ? markerFormat.size\n : markerSize;\n node.translationX = datum.x;\n node.translationY = datum.y;\n node.visible = marker.enabled && node.size > 0;\n });\n this.groupSelection = groupSelection;\n };\n LineSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a = this, xKey = _a.xKey, yKey = _a.yKey;\n if (!xKey || !yKey) {\n return '';\n }\n var _b = this, xName = _b.xName, yName = _b.yName, color = _b.fill, title = _b.title, tooltipRenderer = _b.tooltipRenderer;\n if (tooltipRenderer) {\n return tooltipRenderer({\n datum: nodeDatum.seriesDatum,\n xKey: xKey,\n xName: xName,\n yKey: yKey,\n yName: yName,\n title: title,\n color: color,\n });\n }\n else {\n var titleStyle = \"style=\\\"color: white; background-color: \" + color + \"\\\"\";\n var titleString = title ? \"
\" + title + \"
\" : '';\n var seriesDatum = nodeDatum.seriesDatum;\n var xValue = seriesDatum[xKey];\n var yValue = seriesDatum[yKey];\n var xString = typeof xValue === 'number' ? toFixed(xValue) : String(xValue);\n var yString = typeof yValue === 'number' ? toFixed(yValue) : String(yValue);\n return titleString + \"
\" + xString + \": \" + yString + \"
\";\n }\n };\n LineSeries.prototype.listSeriesItems = function (data) {\n var _a = this, id = _a.id, xKey = _a.xKey, yKey = _a.yKey, yName = _a.yName, title = _a.title, visible = _a.visible, marker = _a.marker, fill = _a.fill, stroke = _a.stroke, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity;\n if (this.data.length && xKey && yKey) {\n data.push({\n id: id,\n itemId: undefined,\n enabled: visible,\n label: {\n text: title || yName || yKey\n },\n marker: {\n type: marker.type,\n fill: marker.fill || fill,\n stroke: marker.stroke || stroke,\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity\n }\n });\n }\n };\n LineSeries.className = 'LineSeries';\n return LineSeries;\n}(CartesianSeries));\nexport { LineSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ContinuousScale from \"./continuousScale\";\nimport ticks, { tickIncrement } from \"../util/ticks\";\n/**\n * Maps continuous domain to a continuous range.\n */\nvar LinearScale = /** @class */ (function (_super) {\n __extends(LinearScale, _super);\n function LinearScale() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n LinearScale.prototype.ticks = function (count) {\n if (count === void 0) { count = 10; }\n var d = this._domain;\n return ticks(d[0], d[d.length - 1], count);\n };\n /**\n * Extends the domain so that it starts and ends on nice round values.\n * @param count Tick count.\n */\n LinearScale.prototype.nice = function (count) {\n if (count === void 0) { count = 10; }\n var d = this.domain;\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var step;\n if (stop < start) {\n step = start;\n start = stop;\n stop = step;\n step = i0;\n i0 = i1;\n i1 = step;\n }\n step = tickIncrement(start, stop, count);\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n }\n else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n this.domain = d;\n }\n else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n this.domain = d;\n }\n };\n return LinearScale;\n}(ContinuousScale));\nexport { LinearScale };\n/**\n * Creates a continuous scale with the default interpolator and no clamping.\n */\nexport default function scaleLinear() {\n return new LinearScale();\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Selection } from \"../../../scene/selection\";\nimport { Group } from \"../../../scene/group\";\nimport { numericExtent } from \"../../../util/array\";\nimport { toFixed } from \"../../../util/number\";\nimport linearScale from \"../../../scale/linearScale\";\nimport { Marker } from \"../../marker/marker\";\nimport { reactive } from \"../../../util/observable\";\nimport { CartesianSeries, CartesianSeriesMarker } from \"./cartesianSeries\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nimport palette from \"../../palettes\";\nvar ScatterSeries = /** @class */ (function (_super) {\n __extends(ScatterSeries, _super);\n function ScatterSeries() {\n var _this = _super.call(this) || this;\n _this.xDomain = [];\n _this.yDomain = [];\n _this.xData = [];\n _this.yData = [];\n _this.sizeData = [];\n _this.sizeScale = linearScale();\n _this.groupSelection = Selection.select(_this.group).selectAll();\n _this.marker = new CartesianSeriesMarker();\n _this._fill = palette.fills[0];\n _this._stroke = palette.strokes[0];\n _this._strokeWidth = 2;\n _this._fillOpacity = 1;\n _this._strokeOpacity = 1;\n _this.highlightStyle = {\n fill: 'yellow'\n };\n _this.xKey = '';\n _this.yKey = '';\n _this.xName = 'X';\n _this.yName = 'Y';\n _this.sizeName = 'Size';\n _this.labelName = 'Label';\n var marker = _this.marker;\n marker.addPropertyListener('type', function () { return _this.onMarkerTypeChange(); });\n marker.addEventListener('change', function () { return _this.update(); });\n _this.addPropertyListener('xKey', function () { return _this.xData = []; });\n _this.addPropertyListener('yKey', function () { return _this.yData = []; });\n _this.addPropertyListener('sizeKey', function () { return _this.sizeData = []; });\n return _this;\n }\n Object.defineProperty(ScatterSeries.prototype, \"fill\", {\n get: function () {\n return this._fill;\n },\n set: function (value) {\n if (this._fill !== value) {\n this._fill = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"stroke\", {\n get: function () {\n return this._stroke;\n },\n set: function (value) {\n if (this._stroke !== value) {\n this._stroke = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"fillOpacity\", {\n get: function () {\n return this._fillOpacity;\n },\n set: function (value) {\n if (this._fillOpacity !== value) {\n this._fillOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ScatterSeries.prototype, \"strokeOpacity\", {\n get: function () {\n return this._strokeOpacity;\n },\n set: function (value) {\n if (this._strokeOpacity !== value) {\n this._strokeOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n ScatterSeries.prototype.onMarkerTypeChange = function () {\n this.groupSelection = this.groupSelection.setData([]);\n this.groupSelection.exit.remove();\n this.update();\n this.fireEvent({ type: 'legendChange' });\n };\n ScatterSeries.prototype.processData = function () {\n var _a = this, xKey = _a.xKey, yKey = _a.yKey, sizeKey = _a.sizeKey;\n var data = xKey && yKey ? this.data : [];\n this.xData = data.map(function (d) { return d[xKey]; });\n this.yData = data.map(function (d) { return d[yKey]; });\n if (sizeKey) {\n this.sizeData = data.map(function (d) { return d[sizeKey]; });\n }\n else {\n this.sizeData = [];\n }\n this.sizeScale.domain = numericExtent(this.sizeData) || [1, 1];\n this.xDomain = this.fixNumericExtent(numericExtent(this.xData), 'x');\n this.yDomain = this.fixNumericExtent(numericExtent(this.yData), 'y');\n return true;\n };\n ScatterSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.xDomain;\n }\n else {\n return this.yDomain;\n }\n };\n ScatterSeries.prototype.highlightNode = function (node) {\n if (!(node instanceof Marker)) {\n return;\n }\n this.highlightedNode = node;\n this.scheduleLayout();\n };\n ScatterSeries.prototype.dehighlightNode = function () {\n this.highlightedNode = undefined;\n this.scheduleLayout();\n };\n ScatterSeries.prototype.update = function () {\n var _a = this, visible = _a.visible, chart = _a.chart, xAxis = _a.xAxis, yAxis = _a.yAxis;\n this.group.visible = visible;\n if (!xAxis || !yAxis || !visible || !chart || chart.layoutPending || chart.dataPending) {\n return;\n }\n var xScale = xAxis.scale;\n var yScale = yAxis.scale;\n var xOffset = (xScale.bandwidth || 0) / 2;\n var yOffset = (yScale.bandwidth || 0) / 2;\n var _b = this, data = _b.data, xData = _b.xData, yData = _b.yData, sizeData = _b.sizeData, xKey = _b.xKey, yKey = _b.yKey, sizeScale = _b.sizeScale, marker = _b.marker, fill = _b.fill, stroke = _b.stroke, strokeWidth = _b.strokeWidth, fillOpacity = _b.fillOpacity, strokeOpacity = _b.strokeOpacity, highlightedNode = _b.highlightedNode;\n var Marker = marker.type;\n var markerFormatter = marker.formatter;\n this.sizeScale.range = [marker.minSize, marker.size];\n var groupSelectionData = xData.map(function (xDatum, i) { return ({\n seriesDatum: data[i],\n x: xScale.convert(xDatum) + xOffset,\n y: yScale.convert(yData[i]) + yOffset,\n size: sizeData.length ? sizeScale.convert(sizeData[i]) : marker.size\n }); });\n var updateGroups = this.groupSelection.setData(groupSelectionData);\n updateGroups.exit.remove();\n var enterGroups = updateGroups.enter.append(Group);\n enterGroups.append(Marker);\n var groupSelection = updateGroups.merge(enterGroups);\n var _c = this.highlightStyle, highlightFill = _c.fill, highlightStroke = _c.stroke;\n var markerStrokeWidth = marker.strokeWidth !== undefined ? marker.strokeWidth : strokeWidth;\n groupSelection.selectByClass(Marker)\n .each(function (node, datum) {\n var isHighlightedNode = node === highlightedNode;\n var markerFill = isHighlightedNode && highlightFill !== undefined ? highlightFill : marker.fill || fill;\n var markerStroke = isHighlightedNode && highlightStroke !== undefined ? highlightStroke : marker.stroke || stroke;\n var markerFormat = undefined;\n if (markerFormatter) {\n markerFormat = markerFormatter({\n datum: datum.seriesDatum,\n xKey: xKey,\n yKey: yKey,\n fill: markerFill,\n stroke: markerStroke,\n strokeWidth: markerStrokeWidth,\n size: datum.size,\n highlighted: isHighlightedNode\n });\n }\n node.fill = markerFormat && markerFormat.fill || markerFill;\n node.stroke = markerFormat && markerFormat.stroke || markerStroke;\n node.strokeWidth = markerFormat && markerFormat.strokeWidth !== undefined\n ? markerFormat.strokeWidth\n : markerStrokeWidth;\n node.size = markerFormat && markerFormat.size !== undefined\n ? markerFormat.size\n : datum.size;\n node.fillOpacity = fillOpacity;\n node.strokeOpacity = strokeOpacity;\n node.translationX = datum.x;\n node.translationY = datum.y;\n node.visible = marker.enabled && node.size > 0;\n });\n this.groupSelection = groupSelection;\n };\n ScatterSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var _a = this, xKey = _a.xKey, yKey = _a.yKey;\n if (!xKey || !yKey) {\n return '';\n }\n var _b = this, title = _b.title, tooltipRenderer = _b.tooltipRenderer, xName = _b.xName, yName = _b.yName, sizeKey = _b.sizeKey, sizeName = _b.sizeName, labelKey = _b.labelKey, labelName = _b.labelName, fill = _b.fill;\n var color = fill || 'gray';\n if (tooltipRenderer) {\n return tooltipRenderer({\n datum: nodeDatum.seriesDatum,\n xKey: xKey,\n yKey: yKey,\n sizeKey: sizeKey,\n labelKey: labelKey,\n xName: xName,\n yName: yName,\n sizeName: sizeName,\n labelName: labelName,\n title: title,\n color: color\n });\n }\n else {\n var titleStyle = \"style=\\\"color: white; background-color: \" + color + \"\\\"\";\n var titleHtml = title ? \"
\" + title + \"
\" : '';\n var seriesDatum = nodeDatum.seriesDatum;\n var xValue = seriesDatum[xKey];\n var yValue = seriesDatum[yKey];\n var contentHtml = \"\" + xName + \": \" + toFixed(xValue) + \"
\" + yName + \": \" + toFixed(yValue);\n if (sizeKey) {\n contentHtml += \"
\" + sizeName + \": \" + seriesDatum[sizeKey];\n }\n if (labelKey) {\n contentHtml = \"\" + labelName + \": \" + seriesDatum[labelKey] + \"
\" + contentHtml;\n }\n return titleHtml + \"
\" + contentHtml + \"
\";\n }\n };\n ScatterSeries.prototype.listSeriesItems = function (data) {\n var _a = this, id = _a.id, title = _a.title, visible = _a.visible, xKey = _a.xKey, yKey = _a.yKey, yName = _a.yName, marker = _a.marker, fill = _a.fill, stroke = _a.stroke, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity;\n if (this.data.length && xKey && yKey) {\n data.push({\n id: id,\n itemId: undefined,\n enabled: visible,\n label: {\n text: title || yName || yKey\n },\n marker: {\n type: marker.type,\n fill: marker.fill || fill,\n stroke: marker.stroke || stroke,\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity\n }\n });\n }\n };\n ScatterSeries.className = 'ScatterSeries';\n __decorate([\n reactive(['layoutChange'])\n ], ScatterSeries.prototype, \"title\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], ScatterSeries.prototype, \"xKey\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], ScatterSeries.prototype, \"yKey\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], ScatterSeries.prototype, \"sizeKey\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], ScatterSeries.prototype, \"labelKey\", void 0);\n return ScatterSeries;\n}(CartesianSeries));\nexport { ScatterSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { Group } from \"../../../scene/group\";\nimport { Selection } from \"../../../scene/selection\";\nimport { Rect } from \"../../../scene/shape/rect\";\nimport { Text } from \"../../../scene/shape/text\";\nimport { BandScale } from \"../../../scale/bandScale\";\nimport palette from \"../../palettes\";\nimport { Label } from \"../../label\";\nimport { PointerEvents } from \"../../../scene/node\";\nimport { sumPositiveValues } from \"../../../util/array\";\nimport { toFixed } from \"../../../util/number\";\nimport { reactive } from \"../../../util/observable\";\nimport { CartesianSeries } from \"./cartesianSeries\";\nimport { ChartAxisDirection, flipChartAxisDirection } from \"../../chartAxis\";\nvar ColumnSeriesNodeTag;\n(function (ColumnSeriesNodeTag) {\n ColumnSeriesNodeTag[ColumnSeriesNodeTag[\"Column\"] = 0] = \"Column\";\n ColumnSeriesNodeTag[ColumnSeriesNodeTag[\"Label\"] = 1] = \"Label\";\n})(ColumnSeriesNodeTag || (ColumnSeriesNodeTag = {}));\nvar ColumnSeriesLabel = /** @class */ (function (_super) {\n __extends(ColumnSeriesLabel, _super);\n function ColumnSeriesLabel() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n reactive(['change'])\n ], ColumnSeriesLabel.prototype, \"formatter\", void 0);\n return ColumnSeriesLabel;\n}(Label));\nvar ColumnSeries = /** @class */ (function (_super) {\n __extends(ColumnSeries, _super);\n function ColumnSeries() {\n var _a;\n var _this = _super.call(this) || this;\n // Need to put column and label nodes into separate groups, because even though label nodes are\n // created after the column nodes, this only guarantees that labels will always be on top of columns\n // on the first run. If on the next run more columns are added, they might clip the labels\n // rendered during the previous run.\n _this.rectGroup = _this.group.appendChild(new Group);\n _this.textGroup = _this.group.appendChild(new Group);\n _this.rectSelection = Selection.select(_this.rectGroup).selectAll();\n _this.textSelection = Selection.select(_this.textGroup).selectAll();\n _this.xData = [];\n _this.yData = [];\n _this.yDomain = [];\n _this.label = new ColumnSeriesLabel();\n /**\n * The assumption is that the values will be reset (to `true`)\n * in the {@link yKeys} setter.\n */\n _this.yKeyEnabled = new Map();\n _this.fills = palette.fills;\n _this.strokes = palette.strokes;\n _this.fillOpacity = 1;\n _this.strokeOpacity = 1;\n /**\n * Used to get the position of columns within each group.\n */\n _this.groupScale = new BandScale();\n _this.directionKeys = (_a = {},\n _a[ChartAxisDirection.X] = ['xKey'],\n _a[ChartAxisDirection.Y] = ['yKeys'],\n _a);\n _this.flipXY = false;\n _this._xKey = '';\n _this._xName = '';\n /**\n * With a single value in the `yKeys` array we get the regular column series.\n * With multiple values, we get the stacked column series.\n * If the {@link grouped} set to `true`, we get the grouped column series.\n * @param values\n */\n _this._yKeys = [];\n _this._yNames = [];\n _this._grouped = false;\n _this._strokeWidth = 1;\n _this.highlightStyle = {\n fill: 'yellow'\n };\n _this.label.enabled = false;\n _this.label.addEventListener('change', function () { return _this.update(); });\n return _this;\n }\n ColumnSeries.prototype.getKeys = function (direction) {\n var _this = this;\n var directionKeys = this.directionKeys;\n var keys = directionKeys && directionKeys[this.flipXY ? flipChartAxisDirection(direction) : direction];\n var values = [];\n if (keys) {\n keys.forEach(function (key) {\n var value = _this[key];\n if (value) {\n if (Array.isArray(value)) {\n values.push.apply(values, value);\n }\n else {\n values.push(value);\n }\n }\n });\n }\n return values;\n };\n Object.defineProperty(ColumnSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n if (this._xKey !== value) {\n this._xKey = value;\n this.xData = [];\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"xName\", {\n get: function () {\n return this._xName;\n },\n set: function (value) {\n if (this._xName !== value) {\n this._xName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"yKeys\", {\n get: function () {\n return this._yKeys;\n },\n set: function (values) {\n this._yKeys = values;\n this.yData = [];\n var yKeyEnabled = this.yKeyEnabled;\n yKeyEnabled.clear();\n values.forEach(function (key) { return yKeyEnabled.set(key, true); });\n var groupScale = this.groupScale;\n groupScale.domain = values;\n groupScale.padding = 0.1;\n groupScale.round = true;\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"yNames\", {\n get: function () {\n return this._yNames;\n },\n set: function (values) {\n this._yNames = values;\n this.update();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"grouped\", {\n get: function () {\n return this._grouped;\n },\n set: function (value) {\n if (this._grouped !== value) {\n this._grouped = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"normalizedTo\", {\n get: function () {\n return this._normalizedTo;\n },\n set: function (value) {\n var absValue = value ? Math.abs(value) : undefined;\n if (this._normalizedTo !== absValue) {\n this._normalizedTo = absValue;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ColumnSeries.prototype, \"shadow\", {\n get: function () {\n return this._shadow;\n },\n set: function (value) {\n if (this._shadow !== value) {\n this._shadow = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n ColumnSeries.prototype.highlightNode = function (node) {\n if (!(node instanceof Rect)) {\n return;\n }\n this.highlightedNode = node;\n this.scheduleLayout();\n };\n ColumnSeries.prototype.dehighlightNode = function () {\n this.highlightedNode = undefined;\n this.scheduleLayout();\n };\n ColumnSeries.prototype.processData = function () {\n var _a = this, xKey = _a.xKey, yKeys = _a.yKeys, yKeyEnabled = _a.yKeyEnabled;\n var data = xKey && yKeys.length ? this.data : [];\n // If the data is an array of rows like so:\n //\n // [{\n // xKey: 'Jan',\n // yKey1: 5,\n // yKey2: 7,\n // yKey3: -9,\n // }, {\n // xKey: 'Feb',\n // yKey1: 10,\n // yKey2: -15,\n // yKey3: 20\n // }]\n //\n var keysFound = true; // only warn once\n this.xData = data.map(function (datum) {\n if (keysFound && !(xKey in datum)) {\n keysFound = false;\n console.warn(\"The key '\" + xKey + \"' was not found in the data: \", datum);\n }\n return datum[xKey];\n });\n this.yData = data.map(function (datum) { return yKeys.map(function (yKey) {\n if (keysFound && !(yKey in datum)) {\n keysFound = false;\n console.warn(\"The key '\" + yKey + \"' was not found in the data: \", datum);\n }\n var value = datum[yKey];\n return isFinite(value) && yKeyEnabled.get(yKey) ? value : 0;\n }); });\n // xData: ['Jan', 'Feb']\n //\n // yData: [\n // [5, 7, -9],\n // [10, -15, 20]\n // ]\n var ySums = this.yData.map(function (values) { return sumPositiveValues(values); }); // used for normalization of stacked columns\n var _b = this, yData = _b.yData, normalizedTo = _b.normalizedTo;\n var yMin = Infinity;\n var yMax = -Infinity;\n if (this.grouped) {\n // Find the tallest positive/negative column in each group,\n // then find the tallest positive/negative column overall.\n // The `yMin` should always be <= 0,\n // otherwise with the `yData` like [300, 200, 100] the last column\n // will have zero height, because the y-axis range is [100, 300].\n yMin = Math.min.apply(Math, __spreadArrays([0], yData.map(function (values) { return Math.min.apply(Math, values); })));\n yMax = Math.max.apply(Math, yData.map(function (values) { return Math.max.apply(Math, values); }));\n }\n else { // stacked or regular\n if (normalizedTo && isFinite(normalizedTo)) {\n yMin = 0;\n yMax = normalizedTo;\n yData.forEach(function (stackValues, i) { return stackValues.forEach(function (y, j) { return stackValues[j] = y / ySums[i] * normalizedTo; }); });\n }\n else {\n // Find the height of each stack in the positive and negative directions,\n // then find the tallest stacks in both directions.\n yMin = Math.min.apply(Math, __spreadArrays([0], yData.map(function (values) { return values.reduce(function (min, value) { return value < 0 ? min - value : min; }, 0); })));\n yMax = Math.max.apply(Math, yData.map(function (values) { return values.reduce(function (max, value) { return value > 0 ? max + value : max; }, 0); }));\n }\n }\n this.yDomain = this.fixNumericExtent([yMin, yMax], 'y');\n this.fireEvent({ type: 'dataProcessed' });\n return true;\n };\n ColumnSeries.prototype.getDomain = function (direction) {\n if (this.flipXY) {\n direction = flipChartAxisDirection(direction);\n }\n if (direction === ChartAxisDirection.X) {\n return this.xData;\n }\n else {\n return this.yDomain;\n }\n };\n ColumnSeries.prototype.update = function () {\n var _a = this, visible = _a.visible, chart = _a.chart, xAxis = _a.xAxis, yAxis = _a.yAxis, xData = _a.xData, yData = _a.yData;\n this.group.visible = visible;\n if (!xAxis || !yAxis || !visible || !chart || chart.layoutPending || chart.dataPending || !xData.length || !yData.length) {\n return;\n }\n var selectionData = this.generateSelectionData();\n this.updateRectSelection(selectionData);\n this.updateTextSelection(selectionData);\n };\n ColumnSeries.prototype.generateSelectionData = function () {\n var _a = this, xAxis = _a.xAxis, yAxis = _a.yAxis, flipXY = _a.flipXY;\n var xScale = (flipXY ? yAxis : xAxis).scale;\n var yScale = (flipXY ? xAxis : yAxis).scale;\n var _b = this, groupScale = _b.groupScale, yKeys = _b.yKeys, fills = _b.fills, strokes = _b.strokes, grouped = _b.grouped, strokeWidth = _b.strokeWidth, yKeyEnabled = _b.yKeyEnabled, data = _b.data, xData = _b.xData, yData = _b.yData;\n var label = this.label;\n var labelFontStyle = label.fontStyle;\n var labelFontWeight = label.fontWeight;\n var labelFontSize = label.fontSize;\n var labelFontFamily = label.fontFamily;\n var labelColor = label.color;\n var labelFormatter = label.formatter;\n groupScale.range = [0, xScale.bandwidth];\n var columnWidth = grouped ? groupScale.bandwidth : xScale.bandwidth;\n var selectionData = [];\n xData.forEach(function (category, i) {\n var values = yData[i];\n var seriesDatum = data[i];\n var x = xScale.convert(category);\n var prev = 0;\n values.forEach(function (curr, j) {\n var yKey = yKeys[j];\n var columnX = grouped ? x + groupScale.convert(yKey) : x;\n var y = yScale.convert(grouped ? curr : prev + curr);\n var bottomY = yScale.convert(grouped ? 0 : prev);\n var yValue = seriesDatum[yKey]; // unprocessed y-value\n var yValueIsNumber = typeof yValue === 'number';\n var labelText;\n if (labelFormatter) {\n labelText = labelFormatter({ value: yValueIsNumber ? yValue : undefined });\n }\n else {\n labelText = yValueIsNumber && isFinite(yValue) ? yValue.toFixed(2) : '';\n }\n selectionData.push({\n seriesDatum: seriesDatum,\n yValue: yValue,\n yKey: yKey,\n x: flipXY ? Math.min(y, bottomY) : columnX,\n y: flipXY ? columnX : Math.min(y, bottomY),\n width: flipXY ? Math.abs(bottomY - y) : columnWidth,\n height: flipXY ? columnWidth : Math.abs(bottomY - y),\n fill: fills[j % fills.length],\n stroke: strokes[j % strokes.length],\n strokeWidth: strokeWidth,\n label: yKeyEnabled.get(yKey) && labelText ? {\n text: labelText,\n fontStyle: labelFontStyle,\n fontWeight: labelFontWeight,\n fontSize: labelFontSize,\n fontFamily: labelFontFamily,\n fill: labelColor,\n x: flipXY ? y + (yValue >= 0 ? -1 : 1) * Math.abs(bottomY - y) / 2 : columnX + columnWidth / 2,\n y: flipXY ? columnX + columnWidth / 2 : y + (yValue >= 0 ? 1 : -1) * Math.abs(bottomY - y) / 2\n } : undefined\n });\n if (grouped) {\n prev = curr;\n }\n else {\n prev += curr;\n }\n });\n });\n return selectionData;\n };\n ColumnSeries.prototype.updateRectSelection = function (selectionData) {\n var _a = this, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity, shadow = _a.shadow, highlightedNode = _a.highlightedNode, _b = _a.highlightStyle, fill = _b.fill, stroke = _b.stroke;\n var updateRects = this.rectSelection.setData(selectionData);\n updateRects.exit.remove();\n var enterRects = updateRects.enter.append(Rect).each(function (rect) {\n rect.tag = ColumnSeriesNodeTag.Column;\n rect.crisp = true;\n });\n var rectSelection = updateRects.merge(enterRects);\n rectSelection.each(function (rect, datum) {\n rect.x = datum.x;\n rect.y = datum.y;\n rect.width = datum.width;\n rect.height = datum.height;\n rect.fill = rect === highlightedNode && fill !== undefined ? fill : datum.fill;\n rect.stroke = rect === highlightedNode && stroke !== undefined ? stroke : datum.stroke;\n rect.fillOpacity = fillOpacity;\n rect.strokeOpacity = strokeOpacity;\n rect.strokeWidth = datum.strokeWidth;\n rect.fillShadow = shadow;\n rect.visible = datum.height > 0; // prevent stroke from rendering for zero height columns\n });\n this.rectSelection = rectSelection;\n };\n ColumnSeries.prototype.updateTextSelection = function (selectionData) {\n var labelEnabled = this.label.enabled;\n var updateTexts = this.textSelection.setData(selectionData);\n updateTexts.exit.remove();\n var enterTexts = updateTexts.enter.append(Text).each(function (text) {\n text.tag = ColumnSeriesNodeTag.Label;\n text.pointerEvents = PointerEvents.None;\n text.textAlign = 'center';\n text.textBaseline = 'middle';\n });\n var textSelection = updateTexts.merge(enterTexts);\n textSelection.each(function (text, datum) {\n var label = datum.label;\n if (label && labelEnabled) {\n text.fontStyle = label.fontStyle;\n text.fontWeight = label.fontWeight;\n text.fontSize = label.fontSize;\n text.fontFamily = label.fontFamily;\n text.text = label.text;\n text.x = label.x;\n text.y = label.y;\n text.fill = label.fill;\n text.visible = true;\n }\n else {\n text.visible = false;\n }\n });\n this.textSelection = textSelection;\n };\n ColumnSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var xKey = this.xKey;\n var yKey = nodeDatum.yKey;\n if (!xKey || !yKey) {\n return '';\n }\n var _a = this, xName = _a.xName, yKeys = _a.yKeys, yNames = _a.yNames, fills = _a.fills, tooltipRenderer = _a.tooltipRenderer;\n var datum = nodeDatum.seriesDatum;\n var yKeyIndex = yKeys.indexOf(yKey);\n var yName = yNames[yKeyIndex];\n var color = fills[yKeyIndex % fills.length];\n var title = yName;\n if (tooltipRenderer) {\n return tooltipRenderer({\n datum: datum,\n xKey: xKey,\n xName: xName,\n yKey: yKey,\n yName: yName,\n title: title,\n color: color,\n });\n }\n else {\n var titleStyle = \"style=\\\"color: white; background-color: \" + color + \"\\\"\";\n var titleString = title ? \"
\" + title + \"
\" : '';\n var xValue = datum[xKey];\n var yValue = datum[yKey];\n var xString = typeof xValue === 'number' ? toFixed(xValue) : String(xValue);\n var yString = typeof yValue === 'number' ? toFixed(yValue) : String(yValue);\n return titleString + \"
\" + xString + \": \" + yString + \"
\";\n }\n };\n ColumnSeries.prototype.listSeriesItems = function (data) {\n var _this = this;\n if (this.data.length && this.xKey && this.yKeys.length) {\n var _a = this, fills_1 = _a.fills, strokes_1 = _a.strokes, id_1 = _a.id;\n this.yKeys.forEach(function (yKey, index) {\n data.push({\n id: id_1,\n itemId: yKey,\n enabled: _this.yKeyEnabled.get(yKey) || false,\n label: {\n text: _this.yNames[index] || _this.yKeys[index]\n },\n marker: {\n fill: fills_1[index % fills_1.length],\n stroke: strokes_1[index % strokes_1.length],\n fillOpacity: _this.fillOpacity,\n strokeOpacity: _this.strokeOpacity\n }\n });\n });\n }\n };\n ColumnSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n this.yKeyEnabled.set(itemId, enabled);\n var enabledYKeys = [];\n this.yKeyEnabled.forEach(function (enabled, yKey) {\n if (enabled) {\n enabledYKeys.push(yKey);\n }\n });\n this.groupScale.domain = enabledYKeys;\n this.scheduleData();\n };\n ColumnSeries.className = 'ColumnSeries';\n __decorate([\n reactive(['dataChange'])\n ], ColumnSeries.prototype, \"fills\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], ColumnSeries.prototype, \"strokes\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], ColumnSeries.prototype, \"fillOpacity\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], ColumnSeries.prototype, \"strokeOpacity\", void 0);\n __decorate([\n reactive(['layoutChange'])\n ], ColumnSeries.prototype, \"flipXY\", void 0);\n return ColumnSeries;\n}(CartesianSeries));\nexport { ColumnSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Observable, reactive } from \"../util/observable\";\nvar Label = /** @class */ (function (_super) {\n __extends(Label, _super);\n function Label() {\n var _this = _super.call(this) || this;\n _this.enabled = true;\n _this.fontSize = 12;\n _this.fontFamily = 'Verdana, sans-serif';\n _this.color = 'black';\n return _this;\n }\n __decorate([\n reactive(['change', 'dataChange'])\n ], Label.prototype, \"enabled\", void 0);\n __decorate([\n reactive(['change'])\n ], Label.prototype, \"fontStyle\", void 0);\n __decorate([\n reactive(['change'])\n ], Label.prototype, \"fontWeight\", void 0);\n __decorate([\n reactive(['change'])\n ], Label.prototype, \"fontSize\", void 0);\n __decorate([\n reactive(['change'])\n ], Label.prototype, \"fontFamily\", void 0);\n __decorate([\n reactive(['change'])\n ], Label.prototype, \"color\", void 0);\n return Label;\n}(Observable));\nexport { Label };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Group } from \"../../../scene/group\";\nimport { Line } from \"../../../scene/shape/line\";\nimport { Text } from \"../../../scene/shape/text\";\nimport { Selection } from \"../../../scene/selection\";\nimport { LinearScale } from \"../../../scale/linearScale\";\nimport palette from \"../../palettes\";\nimport { Sector } from \"../../../scene/shape/sector\";\nimport { Label } from \"../../label\";\nimport { PointerEvents } from \"../../../scene/node\";\nimport { normalizeAngle180, toRadians } from \"../../../util/angle\";\nimport { Color } from \"../../../util/color\";\nimport { toFixed } from \"../../../util/number\";\nimport { reactive } from \"../../../util/observable\";\nimport { PolarSeries } from \"./polarSeries\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nvar PieSeriesNodeTag;\n(function (PieSeriesNodeTag) {\n PieSeriesNodeTag[PieSeriesNodeTag[\"Sector\"] = 0] = \"Sector\";\n PieSeriesNodeTag[PieSeriesNodeTag[\"Callout\"] = 1] = \"Callout\";\n PieSeriesNodeTag[PieSeriesNodeTag[\"Label\"] = 2] = \"Label\";\n})(PieSeriesNodeTag || (PieSeriesNodeTag = {}));\nvar PieSeriesLabel = /** @class */ (function (_super) {\n __extends(PieSeriesLabel, _super);\n function PieSeriesLabel() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.offset = 3; // from the callout line\n _this.minAngle = 20; // in degrees\n return _this;\n }\n __decorate([\n reactive(['change'])\n ], PieSeriesLabel.prototype, \"offset\", void 0);\n __decorate([\n reactive(['dataChange'])\n ], PieSeriesLabel.prototype, \"minAngle\", void 0);\n return PieSeriesLabel;\n}(Label));\nvar PieSeries = /** @class */ (function (_super) {\n __extends(PieSeries, _super);\n function PieSeries() {\n var _this = _super.call(this) || this;\n _this.radiusScale = new LinearScale();\n _this.groupSelection = Selection.select(_this.group).selectAll();\n /**\n * The processed data that gets visualized.\n */\n _this.groupSelectionData = [];\n _this.angleScale = (function () {\n var scale = new LinearScale();\n // Each slice is a ratio of the whole, where all ratios add up to 1.\n scale.domain = [0, 1];\n // Add 90 deg to start the first pie at 12 o'clock.\n scale.range = [-Math.PI, Math.PI].map(function (angle) { return angle + Math.PI / 2; });\n return scale;\n })();\n _this.dataEnabled = [];\n /**\n * Defaults to make the callout colors the same as {@link strokeStyle}.\n */\n _this._calloutColors = palette.strokes;\n _this._calloutStrokeWidth = 1;\n _this._calloutLength = 10;\n _this.label = new PieSeriesLabel();\n _this._labelOffset = 3; // from the callout line\n _this._labelFontSize = 12;\n _this._labelFontFamily = 'Verdana, sans-serif';\n _this._labelColor = 'black';\n /**\n * The key of the numeric field to use to determine the angle (for example,\n * a pie slice angle).\n */\n _this._angleKey = '';\n _this._angleName = '';\n _this._fills = palette.fills;\n _this._strokes = palette.strokes;\n _this._fillOpacity = 1;\n _this._strokeOpacity = 1;\n /**\n * The series rotation in degrees.\n */\n _this._rotation = 0;\n _this._outerRadiusOffset = 0;\n _this._innerRadiusOffset = 0;\n _this._strokeWidth = 1;\n _this.highlightStyle = {\n fill: 'yellow'\n };\n _this.label.addEventListener('change', function () { return _this.scheduleLayout(); });\n _this.label.addEventListener('dataChange', function () { return _this.scheduleData(); });\n _this.addPropertyListener('data', function (event) {\n event.source.dataEnabled = event.value.map(function () { return true; });\n });\n return _this;\n }\n Object.defineProperty(PieSeries.prototype, \"title\", {\n get: function () {\n return this._title;\n },\n set: function (value) {\n var oldTitle = this._title;\n if (oldTitle !== value) {\n if (oldTitle) {\n oldTitle.removeEventListener('change', this.scheduleLayout);\n this.group.removeChild(oldTitle.node);\n }\n if (value) {\n value.node.textBaseline = 'bottom';\n value.addEventListener('change', this.scheduleLayout);\n this.group.appendChild(value.node);\n }\n this._title = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"calloutColors\", {\n get: function () {\n return this._calloutColors;\n },\n set: function (value) {\n if (this._calloutColors !== value) {\n this._calloutColors = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"calloutStrokeWidth\", {\n get: function () {\n return this._calloutStrokeWidth;\n },\n set: function (value) {\n if (this._calloutStrokeWidth !== value) {\n this._calloutStrokeWidth = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"calloutLength\", {\n get: function () {\n return this._calloutLength;\n },\n set: function (value) {\n if (this._calloutLength !== value) {\n this._calloutLength = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelOffset\", {\n get: function () {\n return this._labelOffset;\n },\n set: function (value) {\n if (this._labelOffset !== value) {\n this._labelOffset = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelFontStyle\", {\n get: function () {\n return this._labelFontStyle;\n },\n set: function (value) {\n if (this._labelFontStyle !== value) {\n this._labelFontStyle = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelFontWeight\", {\n get: function () {\n return this._labelFontWeight;\n },\n set: function (value) {\n if (this._labelFontWeight !== value) {\n this._labelFontWeight = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelFontSize\", {\n get: function () {\n return this._labelFontSize;\n },\n set: function (value) {\n if (this._labelFontSize !== value) {\n this._labelFontSize = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelFontFamily\", {\n get: function () {\n return this._labelFontFamily;\n },\n set: function (value) {\n if (this._labelFontFamily !== value) {\n this._labelFontFamily = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelColor\", {\n get: function () {\n return this._labelColor;\n },\n set: function (value) {\n if (this._labelColor !== value) {\n this._labelColor = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"angleKey\", {\n get: function () {\n return this._angleKey;\n },\n set: function (value) {\n if (this._angleKey !== value) {\n this._angleKey = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"angleName\", {\n get: function () {\n return this._angleName;\n },\n set: function (value) {\n if (this._angleName !== value) {\n this._angleName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"radiusKey\", {\n get: function () {\n return this._radiusKey;\n },\n set: function (value) {\n if (this._radiusKey !== value) {\n this._radiusKey = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"radiusName\", {\n get: function () {\n return this._radiusName;\n },\n set: function (value) {\n if (this._radiusName !== value) {\n this._radiusName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelKey\", {\n get: function () {\n return this._labelKey;\n },\n set: function (value) {\n if (this._labelKey !== value) {\n this._labelKey = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"labelName\", {\n get: function () {\n return this._labelName;\n },\n set: function (value) {\n if (this._labelName !== value) {\n this._labelName = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"fills\", {\n get: function () {\n return this._fills;\n },\n set: function (values) {\n this._fills = values;\n this.strokes = values.map(function (color) { return Color.fromString(color).darker().toHexString(); });\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"strokes\", {\n get: function () {\n return this._strokes;\n },\n set: function (values) {\n this._strokes = values;\n this.calloutColors = values;\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"fillOpacity\", {\n get: function () {\n return this._fillOpacity;\n },\n set: function (value) {\n if (this._fillOpacity !== value) {\n this._fillOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"strokeOpacity\", {\n get: function () {\n return this._strokeOpacity;\n },\n set: function (value) {\n if (this._strokeOpacity !== value) {\n this._strokeOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"rotation\", {\n get: function () {\n return this._rotation;\n },\n set: function (value) {\n if (this._rotation !== value) {\n this._rotation = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"outerRadiusOffset\", {\n get: function () {\n return this._outerRadiusOffset;\n },\n set: function (value) {\n if (this._outerRadiusOffset !== value) {\n this._outerRadiusOffset = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"innerRadiusOffset\", {\n get: function () {\n return this._innerRadiusOffset;\n },\n set: function (value) {\n if (this._innerRadiusOffset !== value) {\n this._innerRadiusOffset = value;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PieSeries.prototype, \"shadow\", {\n get: function () {\n return this._shadow;\n },\n set: function (value) {\n if (this._shadow !== value) {\n this._shadow = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n PieSeries.prototype.highlightNode = function (node) {\n if (!(node instanceof Sector)) {\n return;\n }\n this.highlightedNode = node;\n this.scheduleLayout();\n };\n PieSeries.prototype.dehighlightNode = function () {\n this.highlightedNode = undefined;\n this.scheduleLayout();\n };\n PieSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.angleScale.domain;\n }\n else {\n return this.radiusScale.domain;\n }\n };\n PieSeries.prototype.processData = function () {\n var _this = this;\n var _a = this, data = _a.data, dataEnabled = _a.dataEnabled;\n var angleData = data.map(function (datum, index) { return dataEnabled[index] && +datum[_this.angleKey] || 0; });\n var angleDataTotal = angleData.reduce(function (a, b) { return a + b; }, 0);\n // The ratios (in [0, 1] interval) used to calculate the end angle value for every pie slice.\n // Each slice starts where the previous one ends, so we only keep the ratios for end angles.\n var angleDataRatios = (function () {\n var sum = 0;\n return angleData.map(function (datum) { return sum += datum / angleDataTotal; });\n })();\n var labelKey = this.label.enabled && this.labelKey;\n var labelData = labelKey ? data.map(function (datum) { return String(datum[labelKey]); }) : [];\n var radiusKey = this.radiusKey;\n var useRadiusKey = !!radiusKey && !this.innerRadiusOffset;\n var radiusData = [];\n if (useRadiusKey) {\n var radii = data.map(function (datum) { return Math.abs(datum[radiusKey]); });\n var maxDatum_1 = Math.max.apply(Math, radii);\n radiusData = radii.map(function (value) { return value / maxDatum_1; });\n }\n var _b = this, angleScale = _b.angleScale, groupSelectionData = _b.groupSelectionData;\n groupSelectionData.length = 0;\n var rotation = toRadians(this.rotation);\n var halfPi = Math.PI / 2;\n var datumIndex = 0;\n // Simply use reduce here to pair up adjacent ratios.\n angleDataRatios.reduce(function (start, end) {\n var radius = useRadiusKey ? radiusData[datumIndex] : 1;\n var startAngle = angleScale.convert(start) + rotation;\n var endAngle = angleScale.convert(end) + rotation;\n var midAngle = (startAngle + endAngle) / 2;\n var span = Math.abs(endAngle - startAngle);\n var midCos = Math.cos(midAngle);\n var midSin = Math.sin(midAngle);\n var labelMinAngle = toRadians(_this.label.minAngle);\n var labelVisible = labelKey && span > labelMinAngle;\n var midAngle180 = normalizeAngle180(midAngle);\n // Split the circle into quadrants like so: ⊗\n var quadrantStart = -3 * Math.PI / 4; // same as `normalizeAngle180(toRadians(-135))`\n var textAlign;\n var textBaseline;\n if (midAngle180 >= quadrantStart && midAngle180 < (quadrantStart += halfPi)) {\n textAlign = 'center';\n textBaseline = 'bottom';\n }\n else if (midAngle180 >= quadrantStart && midAngle180 < (quadrantStart += halfPi)) {\n textAlign = 'left';\n textBaseline = 'middle';\n }\n else if (midAngle180 >= quadrantStart && midAngle180 < (quadrantStart += halfPi)) {\n textAlign = 'center';\n textBaseline = 'hanging';\n }\n else {\n textAlign = 'right';\n textBaseline = 'middle';\n }\n groupSelectionData.push({\n index: datumIndex,\n seriesDatum: data[datumIndex],\n radius: radius,\n startAngle: startAngle,\n endAngle: endAngle,\n midAngle: midAngle,\n midCos: midCos,\n midSin: midSin,\n label: labelVisible ? {\n text: labelData[datumIndex],\n textAlign: textAlign,\n textBaseline: textBaseline\n } : undefined\n });\n datumIndex++;\n return end;\n }, 0);\n return true;\n };\n PieSeries.prototype.update = function () {\n var _this = this;\n var chart = this.chart;\n var visible = this.group.visible = this.visible && this.dataEnabled.indexOf(true) >= 0;\n if (!visible || !chart || chart.dataPending || chart.layoutPending) {\n return;\n }\n var _a = this, fills = _a.fills, strokes = _a.strokes, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity, calloutColors = _a.calloutColors, outerRadiusOffset = _a.outerRadiusOffset, innerRadiusOffset = _a.innerRadiusOffset, radiusScale = _a.radiusScale, title = _a.title;\n radiusScale.range = [0, this.radius];\n this.group.translationX = this.centerX;\n this.group.translationY = this.centerY;\n if (title) {\n title.node.translationY = -this.radius - outerRadiusOffset - 2;\n title.node.visible = title.enabled;\n }\n var updateGroups = this.groupSelection.setData(this.groupSelectionData);\n updateGroups.exit.remove();\n var enterGroups = updateGroups.enter.append(Group);\n enterGroups.append(Sector).each(function (node) { return node.tag = PieSeriesNodeTag.Sector; });\n enterGroups.append(Line).each(function (node) {\n node.tag = PieSeriesNodeTag.Callout;\n node.pointerEvents = PointerEvents.None;\n });\n enterGroups.append(Text).each(function (node) {\n node.tag = PieSeriesNodeTag.Label;\n node.pointerEvents = PointerEvents.None;\n });\n var groupSelection = updateGroups.merge(enterGroups);\n var minOuterRadius = Infinity;\n var outerRadii = [];\n var centerOffsets = [];\n var _b = this, highlightedNode = _b.highlightedNode, _c = _b.highlightStyle, fill = _c.fill, stroke = _c.stroke, centerOffset = _c.centerOffset, shadow = _b.shadow, strokeWidth = _b.strokeWidth;\n groupSelection.selectByTag(PieSeriesNodeTag.Sector).each(function (sector, datum, index) {\n var radius = radiusScale.convert(datum.radius);\n var outerRadius = Math.max(0, radius + outerRadiusOffset);\n if (minOuterRadius > outerRadius) {\n minOuterRadius = outerRadius;\n }\n sector.outerRadius = outerRadius;\n sector.innerRadius = Math.max(0, innerRadiusOffset ? radius + innerRadiusOffset : 0);\n sector.startAngle = datum.startAngle;\n sector.endAngle = datum.endAngle;\n sector.fill = sector === highlightedNode && fill !== undefined ? fill : fills[index % fills.length];\n sector.stroke = sector === highlightedNode && stroke !== undefined ? stroke : strokes[index % strokes.length];\n sector.fillOpacity = fillOpacity;\n sector.strokeOpacity = strokeOpacity;\n sector.centerOffset = sector === highlightedNode && centerOffset !== undefined ? centerOffset : 0;\n sector.fillShadow = shadow;\n sector.strokeWidth = strokeWidth;\n sector.lineJoin = 'round';\n outerRadii.push(outerRadius);\n centerOffsets.push(sector.centerOffset);\n });\n var calloutLength = this.calloutLength;\n groupSelection.selectByTag(PieSeriesNodeTag.Callout).each(function (line, datum, index) {\n if (datum.label) {\n var outerRadius = centerOffsets[index] + outerRadii[index];\n line.strokeWidth = _this.calloutStrokeWidth;\n line.stroke = calloutColors[index % calloutColors.length];\n line.x1 = datum.midCos * outerRadius;\n line.y1 = datum.midSin * outerRadius;\n line.x2 = datum.midCos * (outerRadius + calloutLength);\n line.y2 = datum.midSin * (outerRadius + calloutLength);\n }\n else {\n line.stroke = undefined;\n }\n });\n {\n var _d = this.label, offset_1 = _d.offset, fontStyle_1 = _d.fontStyle, fontWeight_1 = _d.fontWeight, fontSize_1 = _d.fontSize, fontFamily_1 = _d.fontFamily, color_1 = _d.color;\n groupSelection.selectByTag(PieSeriesNodeTag.Label).each(function (text, datum, index) {\n var label = datum.label;\n if (label) {\n var outerRadius = outerRadii[index];\n var labelRadius = centerOffsets[index] + outerRadius + calloutLength + offset_1;\n text.fontStyle = fontStyle_1;\n text.fontWeight = fontWeight_1;\n text.fontSize = fontSize_1;\n text.fontFamily = fontFamily_1;\n text.text = label.text;\n text.x = datum.midCos * labelRadius;\n text.y = datum.midSin * labelRadius;\n text.fill = color_1;\n text.textAlign = label.textAlign;\n text.textBaseline = label.textBaseline;\n }\n else {\n text.fill = undefined;\n }\n });\n }\n this.groupSelection = groupSelection;\n };\n PieSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var angleKey = this.angleKey;\n if (!angleKey) {\n return '';\n }\n var _a = this, title = _a.title, fills = _a.fills, tooltipRenderer = _a.tooltipRenderer, angleName = _a.angleName, radiusKey = _a.radiusKey, radiusName = _a.radiusName, labelKey = _a.labelKey, labelName = _a.labelName;\n var text = title ? title.text : undefined;\n var color = fills[nodeDatum.index % fills.length];\n if (tooltipRenderer) {\n return tooltipRenderer({\n datum: nodeDatum.seriesDatum,\n angleKey: angleKey,\n angleName: angleName,\n radiusKey: radiusKey,\n radiusName: radiusName,\n labelKey: labelKey,\n labelName: labelName,\n title: text,\n color: color,\n });\n }\n else {\n var titleStyle = \"style=\\\"color: white; background-color: \" + color + \"\\\"\";\n var titleString = title ? \"
\" + text + \"
\" : '';\n var label = labelKey ? nodeDatum.seriesDatum[labelKey] + \": \" : '';\n var value = nodeDatum.seriesDatum[angleKey];\n var formattedValue = typeof value === 'number' ? toFixed(value) : value.toString();\n return titleString + \"
\" + label + formattedValue + \"
\";\n }\n };\n PieSeries.prototype.listSeriesItems = function (data) {\n var _this = this;\n var labelKey = this.labelKey;\n if (this.data.length && labelKey) {\n var _a = this, fills_1 = _a.fills, strokes_1 = _a.strokes, id_1 = _a.id;\n this.data.forEach(function (datum, index) {\n data.push({\n id: id_1,\n itemId: index,\n enabled: _this.dataEnabled[index],\n label: {\n text: String(datum[labelKey])\n },\n marker: {\n fill: fills_1[index % fills_1.length],\n stroke: strokes_1[index % strokes_1.length],\n fillOpacity: _this.fillOpacity,\n strokeOpacity: _this.strokeOpacity\n }\n });\n });\n }\n };\n PieSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n this.dataEnabled[itemId] = enabled;\n this.scheduleData();\n };\n PieSeries.className = 'PieSeries';\n return PieSeries;\n}(PolarSeries));\nexport { PieSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n};\nimport { Group } from \"../../../scene/group\";\nimport { Selection } from \"../../../scene/selection\";\nimport { PointerEvents } from \"../../../scene/node\";\nimport { sumPositiveValues } from \"../../../util/array\";\nimport { toFixed } from \"../../../util/number\";\nimport { Path } from \"../../../scene/shape/path\";\nimport palette from \"../../palettes\";\nimport { Marker } from \"../../marker/marker\";\nimport { CartesianSeries, CartesianSeriesMarker } from \"./cartesianSeries\";\nimport { ChartAxisDirection } from \"../../chartAxis\";\nvar AreaSeries = /** @class */ (function (_super) {\n __extends(AreaSeries, _super);\n function AreaSeries() {\n var _this = _super.call(this) || this;\n _this.areaGroup = _this.group.appendChild(new Group);\n _this.strokeGroup = _this.group.appendChild(new Group);\n _this.markerGroup = _this.group.appendChild(new Group);\n _this.areaSelection = Selection.select(_this.areaGroup).selectAll();\n _this.strokeSelection = Selection.select(_this.strokeGroup).selectAll();\n _this.markerSelection = Selection.select(_this.markerGroup).selectAll();\n /**\n * The assumption is that the values will be reset (to `true`)\n * in the {@link yKeys} setter.\n */\n _this.yKeyEnabled = new Map();\n _this.marker = new CartesianSeriesMarker();\n _this._fills = palette.fills;\n _this._strokes = palette.strokes;\n _this._fillOpacity = 1;\n _this._strokeOpacity = 1;\n _this.xData = [];\n _this.yData = [];\n _this.yDomain = [];\n _this.directionKeys = {\n x: ['xKey'],\n y: ['yKeys']\n };\n _this._xKey = '';\n _this._xName = '';\n _this._yKeys = [];\n _this._yNames = [];\n _this._strokeWidth = 2;\n _this.highlightStyle = {\n fill: 'yellow'\n };\n _this.marker.enabled = false;\n _this.marker.addPropertyListener('type', function () { return _this.onMarkerTypeChange(); });\n _this.marker.addEventListener('change', function () { return _this.update(); });\n return _this;\n }\n AreaSeries.prototype.onMarkerTypeChange = function () {\n this.markerSelection = this.markerSelection.setData([]);\n this.markerSelection.exit.remove();\n this.update();\n this.fireEvent({ type: 'legendChange' });\n };\n Object.defineProperty(AreaSeries.prototype, \"fills\", {\n get: function () {\n return this._fills;\n },\n set: function (values) {\n this._fills = values;\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"strokes\", {\n get: function () {\n return this._strokes;\n },\n set: function (values) {\n this._strokes = values;\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"fillOpacity\", {\n get: function () {\n return this._fillOpacity;\n },\n set: function (value) {\n if (this._fillOpacity !== value) {\n this._fillOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"strokeOpacity\", {\n get: function () {\n return this._strokeOpacity;\n },\n set: function (value) {\n if (this._strokeOpacity !== value) {\n this._strokeOpacity = value;\n this.scheduleLayout();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"xKey\", {\n get: function () {\n return this._xKey;\n },\n set: function (value) {\n if (this._xKey !== value) {\n this._xKey = value;\n this.xData = [];\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"xName\", {\n get: function () {\n return this._xName;\n },\n set: function (value) {\n this._xName = value;\n this.update();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"yKeys\", {\n get: function () {\n return this._yKeys;\n },\n set: function (values) {\n this._yKeys = values;\n this.yData = [];\n var yKeyEnabled = this.yKeyEnabled;\n yKeyEnabled.clear();\n values.forEach(function (key) { return yKeyEnabled.set(key, true); });\n this.scheduleData();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"yNames\", {\n get: function () {\n return this._yNames;\n },\n set: function (values) {\n this._yNames = values;\n this.update();\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"normalizedTo\", {\n get: function () {\n return this._normalizedTo;\n },\n set: function (value) {\n var absValue = value ? Math.abs(value) : undefined;\n if (this._normalizedTo !== absValue) {\n this._normalizedTo = absValue;\n this.scheduleData();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"strokeWidth\", {\n get: function () {\n return this._strokeWidth;\n },\n set: function (value) {\n if (this._strokeWidth !== value) {\n this._strokeWidth = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AreaSeries.prototype, \"shadow\", {\n get: function () {\n return this._shadow;\n },\n set: function (value) {\n if (this._shadow !== value) {\n this._shadow = value;\n this.update();\n }\n },\n enumerable: true,\n configurable: true\n });\n AreaSeries.prototype.highlightNode = function (node) {\n if (!(node instanceof Marker)) {\n return;\n }\n this.highlightedNode = node;\n this.scheduleLayout();\n };\n AreaSeries.prototype.dehighlightNode = function () {\n this.highlightedNode = undefined;\n this.scheduleLayout();\n };\n AreaSeries.prototype.processData = function () {\n var _a = this, xKey = _a.xKey, yKeys = _a.yKeys, yKeyEnabled = _a.yKeyEnabled;\n var data = xKey && yKeys.length ? this.data : [];\n // if (!(chart && chart.xAxis && chart.yAxis)) {\n // return false;\n // }\n // If the data is an array of rows like so:\n //\n // [{\n // xKy: 'Jan',\n // yKey1: 5,\n // yKey2: 7,\n // yKey3: -9,\n // }, {\n // xKey: 'Feb',\n // yKey1: 10,\n // yKey2: -15,\n // yKey3: 20\n // }]\n //\n var keysFound = true; // only warn once\n this.xData = data.map(function (datum) {\n if (keysFound && !(xKey in datum)) {\n keysFound = false;\n console.warn(\"The key '\" + xKey + \"' was not found in the data: \", datum);\n }\n return datum[xKey];\n });\n this.yData = data.map(function (datum) { return yKeys.map(function (yKey) {\n if (keysFound && !(yKey in datum)) {\n keysFound = false;\n console.warn(\"The key '\" + yKey + \"' was not found in the data: \", datum);\n }\n var value = datum[yKey];\n return isFinite(value) && yKeyEnabled.get(yKey) ? Math.abs(value) : 0;\n }); });\n // xData: ['Jan', 'Feb']\n //\n // yData: [\n // [5, 7, -9],\n // [10, -15, 20]\n // ]\n var _b = this, yData = _b.yData, normalizedTo = _b.normalizedTo;\n var ySums = yData.map(function (values) { return sumPositiveValues(values); }); // used for normalization\n var yMin;\n var yMax;\n if (normalizedTo && isFinite(normalizedTo)) {\n yMin = 0;\n yMax = normalizedTo;\n yData.forEach(function (stack, i) { return stack.forEach(function (y, j) { return stack[j] = y / ySums[i] * normalizedTo; }); });\n }\n else {\n // Find the height of each stack in the positive and negative directions,\n // then find the tallest stacks in both directions.\n yMin = Math.min.apply(Math, __spreadArrays([0], yData.map(function (values) { return values.reduce(function (min, value) { return value < 0 ? min - value : min; }, 0); })));\n yMax = Math.max.apply(Math, yData.map(function (values) { return values.reduce(function (max, value) { return value > 0 ? max + value : max; }, 0); }));\n }\n if (yMin === 0 && yMax === 0) {\n yMax = 1;\n }\n this.yDomain = this.fixNumericExtent([yMin, yMax], 'y');\n this.fireEvent({ type: 'dataProcessed' });\n return true;\n };\n AreaSeries.prototype.getDomain = function (direction) {\n if (direction === ChartAxisDirection.X) {\n return this.xData;\n }\n else {\n return this.yDomain;\n }\n };\n AreaSeries.prototype.update = function () {\n var _a = this, visible = _a.visible, chart = _a.chart, xAxis = _a.xAxis, yAxis = _a.yAxis, xData = _a.xData, yData = _a.yData;\n this.group.visible = visible && !!(xData.length && yData.length);\n if (!xAxis || !yAxis || !visible || !chart || chart.layoutPending || chart.dataPending || !xData.length || !yData.length) {\n return;\n }\n var _b = this.generateSelectionData(), areaSelectionData = _b.areaSelectionData, markerSelectionData = _b.markerSelectionData;\n this.updateAreaSelection(areaSelectionData);\n this.updateStrokeSelection(areaSelectionData);\n this.updateMarkerSelection(markerSelectionData);\n };\n AreaSeries.prototype.generateSelectionData = function () {\n var _a = this, yKeys = _a.yKeys, yNames = _a.yNames, data = _a.data, xData = _a.xData, yData = _a.yData, marker = _a.marker, fills = _a.fills, strokes = _a.strokes, xScale = _a.xAxis.scale, yScale = _a.yAxis.scale;\n var xOffset = (xScale.bandwidth || 0) / 2;\n var yOffset = (yScale.bandwidth || 0) / 2;\n var areaSelectionData = [];\n var markerSelectionData = [];\n var last = xData.length * 2 - 1;\n xData.forEach(function (xDatum, i) {\n var yDatum = yData[i];\n var seriesDatum = data[i];\n var x = xScale.convert(xDatum) + xOffset;\n var prev = 0;\n yDatum.forEach(function (curr, j) {\n var y = yScale.convert(prev + curr) + yOffset;\n var yKey = yKeys[j];\n var yValue = seriesDatum[yKey];\n if (marker) {\n markerSelectionData.push({\n seriesDatum: seriesDatum,\n yValue: yValue,\n yKey: yKey,\n x: x,\n y: y,\n fill: fills[j % fills.length],\n stroke: strokes[j % strokes.length],\n text: yNames[j]\n });\n }\n var areaDatum = areaSelectionData[j] || (areaSelectionData[j] = { yKey: yKey, points: [] });\n var areaPoints = areaDatum.points;\n areaPoints[i] = { x: x, y: y };\n areaPoints[last - i] = { x: x, y: yScale.convert(prev) + yOffset }; // bottom y\n prev += curr;\n });\n });\n return { areaSelectionData: areaSelectionData, markerSelectionData: markerSelectionData };\n };\n AreaSeries.prototype.updateAreaSelection = function (areaSelectionData) {\n var _a = this, fills = _a.fills, fillOpacity = _a.fillOpacity, yKeyEnabled = _a.yKeyEnabled, shadow = _a.shadow;\n var updateAreas = this.areaSelection.setData(areaSelectionData);\n updateAreas.exit.remove();\n var enterAreas = updateAreas.enter.append(Path)\n .each(function (path) {\n path.stroke = undefined;\n path.pointerEvents = PointerEvents.None;\n });\n var areaSelection = updateAreas.merge(enterAreas);\n areaSelection.each(function (shape, datum, index) {\n var path = shape.path;\n shape.fill = fills[index % fills.length];\n shape.fillOpacity = fillOpacity;\n shape.fillShadow = shadow;\n shape.visible = !!yKeyEnabled.get(datum.yKey);\n path.clear();\n var points = datum.points;\n points.forEach(function (_a, i) {\n var x = _a.x, y = _a.y;\n if (i > 0) {\n path.lineTo(x, y);\n }\n else {\n path.moveTo(x, y);\n }\n });\n path.closePath();\n });\n this.areaSelection = areaSelection;\n };\n AreaSeries.prototype.updateStrokeSelection = function (areaSelectionData) {\n var _a = this, strokes = _a.strokes, strokeWidth = _a.strokeWidth, strokeOpacity = _a.strokeOpacity, data = _a.data, yKeyEnabled = _a.yKeyEnabled;\n var updateStrokes = this.strokeSelection.setData(areaSelectionData);\n updateStrokes.exit.remove();\n var enterStrokes = updateStrokes.enter.append(Path)\n .each(function (path) {\n path.fill = undefined;\n path.lineJoin = path.lineCap = 'round';\n path.pointerEvents = PointerEvents.None;\n });\n var strokeSelection = updateStrokes.merge(enterStrokes);\n strokeSelection.each(function (shape, datum, index) {\n var path = shape.path;\n shape.stroke = strokes[index % strokes.length];\n shape.strokeWidth = strokeWidth;\n shape.visible = !!yKeyEnabled.get(datum.yKey);\n shape.strokeOpacity = strokeOpacity;\n path.clear();\n var points = datum.points;\n // The stroke doesn't go all the way around the fill, only on top,\n // that's why we iterate until `data.length` (rather than `points.length`) and stop.\n for (var i = 0; i < data.length; i++) {\n var _a = points[i], x = _a.x, y = _a.y;\n if (i > 0) {\n path.lineTo(x, y);\n }\n else {\n path.moveTo(x, y);\n }\n }\n });\n this.strokeSelection = strokeSelection;\n };\n AreaSeries.prototype.updateMarkerSelection = function (markerSelectionData) {\n var _a = this, marker = _a.marker, xKey = _a.xKey;\n var Marker = marker.type;\n if (!Marker) {\n return;\n }\n var markerFormatter = marker.formatter;\n var markerStrokeWidth = marker.strokeWidth !== undefined ? marker.strokeWidth : this.strokeWidth;\n var markerSize = marker.size;\n var _b = this, yKeyEnabled = _b.yKeyEnabled, highlightedNode = _b.highlightedNode;\n var _c = this.highlightStyle, highlightFill = _c.fill, highlightStroke = _c.stroke;\n var updateMarkers = this.markerSelection.setData(markerSelectionData);\n updateMarkers.exit.remove();\n var enterMarkers = updateMarkers.enter.append(Marker);\n var markerSelection = updateMarkers.merge(enterMarkers);\n markerSelection.each(function (node, datum) {\n var isHighlightedNode = node === highlightedNode;\n var markerFill = isHighlightedNode && highlightFill !== undefined ? highlightFill : marker.fill || datum.fill;\n var markerStroke = isHighlightedNode && highlightStroke !== undefined ? highlightStroke : marker.stroke || datum.stroke;\n var markerFormat = undefined;\n if (markerFormatter) {\n markerFormat = markerFormatter({\n datum: datum.seriesDatum,\n xKey: xKey,\n yKey: datum.yKey,\n fill: markerFill,\n stroke: markerStroke,\n strokeWidth: markerStrokeWidth,\n size: markerSize,\n highlighted: isHighlightedNode\n });\n }\n node.fill = markerFormat && markerFormat.fill || markerFill;\n node.stroke = markerFormat && markerFormat.stroke || markerStroke;\n node.strokeWidth = markerFormat && markerFormat.strokeWidth !== undefined\n ? markerFormat.strokeWidth\n : markerStrokeWidth;\n node.size = markerFormat && markerFormat.size !== undefined\n ? markerFormat.size\n : markerSize;\n node.translationX = datum.x;\n node.translationY = datum.y;\n node.visible = marker.enabled && node.size > 0 && !!yKeyEnabled.get(datum.yKey);\n });\n this.markerSelection = markerSelection;\n };\n AreaSeries.prototype.getTooltipHtml = function (nodeDatum) {\n var xKey = this.xKey;\n var yKey = nodeDatum.yKey;\n if (!xKey || !yKey) {\n return '';\n }\n var _a = this, xName = _a.xName, yKeys = _a.yKeys, yNames = _a.yNames, fills = _a.fills, tooltipRenderer = _a.tooltipRenderer;\n var text = nodeDatum.text;\n var yKeyIndex = yKeys.indexOf(yKey);\n var yName = yNames[yKeyIndex];\n var color = fills[yKeyIndex % fills.length];\n if (tooltipRenderer) {\n return tooltipRenderer({\n datum: nodeDatum.seriesDatum,\n xKey: xKey,\n xName: xName,\n yKey: yKey,\n yName: yName,\n title: text,\n color: color,\n });\n }\n else {\n var titleStyle = \"style=\\\"color: white; background-color: \" + color + \"\\\"\";\n var title = text ? \"
\" + text + \"
\" : '';\n var seriesDatum = nodeDatum.seriesDatum;\n var xValue = seriesDatum[xKey];\n var yValue = seriesDatum[yKey];\n var xString = typeof xValue === 'number' ? toFixed(xValue) : String(xValue);\n var yString = typeof yValue === 'number' ? toFixed(yValue) : String(yValue);\n return title + \"
\" + xString + \": \" + yString + \"
\";\n }\n };\n AreaSeries.prototype.listSeriesItems = function (data) {\n var _a = this, id = _a.id, xKey = _a.xKey, yKeys = _a.yKeys, yNames = _a.yNames, yKeyEnabled = _a.yKeyEnabled, marker = _a.marker, fills = _a.fills, strokes = _a.strokes, fillOpacity = _a.fillOpacity, strokeOpacity = _a.strokeOpacity;\n if (this.data.length && xKey && yKeys.length) {\n yKeys.forEach(function (yKey, index) {\n data.push({\n id: id,\n itemId: yKey,\n enabled: yKeyEnabled.get(yKey) || false,\n label: {\n text: yNames[index] || yKeys[index]\n },\n marker: {\n type: marker.type,\n fill: marker.fill || fills[index % fills.length],\n stroke: marker.stroke || strokes[index % strokes.length],\n fillOpacity: fillOpacity,\n strokeOpacity: strokeOpacity\n }\n });\n });\n }\n };\n AreaSeries.prototype.toggleSeriesItem = function (itemId, enabled) {\n this.yKeyEnabled.set(itemId, enabled);\n this.scheduleData();\n };\n AreaSeries.className = 'AreaSeries';\n return AreaSeries;\n}(CartesianSeries));\nexport { AreaSeries };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Shape } from \"./shape\";\nimport { Path2D } from \"../path2D\";\nimport { normalizeAngle360 } from \"../../util/angle\";\nimport { isEqual } from \"../../util/number\";\nimport { BBox } from \"../bbox\";\nvar Sector = /** @class */ (function (_super) {\n __extends(Sector, _super);\n function Sector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.path = new Path2D();\n _this._dirtyPath = true;\n _this._centerX = 0;\n _this._centerY = 0;\n _this._centerOffset = 0;\n _this._innerRadius = 10;\n _this._outerRadius = 20;\n _this._startAngle = 0;\n _this._endAngle = Math.PI * 2;\n _this._angleOffset = 0;\n return _this;\n }\n Object.defineProperty(Sector.prototype, \"dirtyPath\", {\n get: function () {\n return this._dirtyPath;\n },\n set: function (value) {\n if (this._dirtyPath !== value) {\n this._dirtyPath = value;\n if (value) {\n this.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"centerX\", {\n get: function () {\n return this._centerX;\n },\n set: function (value) {\n if (this._centerX !== value) {\n this._centerX = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"centerY\", {\n get: function () {\n return this._centerY;\n },\n set: function (value) {\n if (this._centerY !== value) {\n this._centerY = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"centerOffset\", {\n get: function () {\n return this._centerOffset;\n },\n set: function (value) {\n if (this._centerOffset !== value) {\n this._centerOffset = Math.max(0, value);\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"innerRadius\", {\n get: function () {\n return this._innerRadius;\n },\n set: function (value) {\n if (this._innerRadius !== value) {\n this._innerRadius = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"outerRadius\", {\n get: function () {\n return this._outerRadius;\n },\n set: function (value) {\n if (this._outerRadius !== value) {\n this._outerRadius = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"startAngle\", {\n get: function () {\n return this._startAngle;\n },\n set: function (value) {\n if (this._startAngle !== value) {\n this._startAngle = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"endAngle\", {\n get: function () {\n return this._endAngle;\n },\n set: function (value) {\n if (this._endAngle !== value) {\n this._endAngle = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Sector.prototype, \"angleOffset\", {\n get: function () {\n return this._angleOffset;\n },\n set: function (value) {\n if (this._angleOffset !== value) {\n this._angleOffset = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Sector.prototype.computeBBox = function () {\n var radius = this.outerRadius;\n return new BBox(this.centerX - radius, this.centerY - radius, radius * 2, radius * 2);\n };\n Sector.prototype.isPointInPath = function (x, y) {\n var point = this.transformPoint(x, y);\n return this.path.isPointInPath(point.x, point.y);\n };\n Sector.prototype.isPointInStroke = function (x, y) {\n return false;\n };\n Object.defineProperty(Sector.prototype, \"fullPie\", {\n get: function () {\n return isEqual(normalizeAngle360(this.startAngle), normalizeAngle360(this.endAngle));\n },\n enumerable: true,\n configurable: true\n });\n Sector.prototype.updatePath = function () {\n if (!this.dirtyPath) {\n return;\n }\n var path = this.path;\n var angleOffset = this.angleOffset;\n var startAngle = Math.min(this.startAngle, this.endAngle) + angleOffset;\n var endAngle = Math.max(this.startAngle, this.endAngle) + angleOffset;\n var midAngle = (startAngle + endAngle) * 0.5;\n var innerRadius = Math.min(this.innerRadius, this.outerRadius);\n var outerRadius = Math.max(this.innerRadius, this.outerRadius);\n var centerOffset = this.centerOffset;\n var fullPie = this.fullPie;\n var radiiGap = outerRadius - innerRadius;\n // const tipOffset = radiiGap / 3;\n // const showTip = radiiGap < outerRadius / 2;\n var centerX = this.centerX;\n var centerY = this.centerY;\n path.clear();\n if (centerOffset) {\n centerX += centerOffset * Math.cos(midAngle);\n centerY += centerOffset * Math.sin(midAngle);\n }\n if (!fullPie) {\n path.moveTo(centerX + innerRadius * Math.cos(startAngle), centerY + innerRadius * Math.sin(startAngle));\n // if (showTip) {\n // path.lineTo(\n // centerX + 0.5 * (innerRadius + outerRadius) * Math.cos(startAngle) + tipOffset * Math.cos(startAngle + Math.PI / 2),\n // centerY + 0.5 * (innerRadius + outerRadius) * Math.sin(startAngle) + tipOffset * Math.sin(startAngle + Math.PI / 2)\n // );\n // }\n path.lineTo(centerX + outerRadius * Math.cos(startAngle), centerY + outerRadius * Math.sin(startAngle));\n }\n path.cubicArc(centerX, centerY, outerRadius, outerRadius, 0, startAngle, endAngle, 0);\n // path[fullPie ? 'moveTo' : 'lineTo'](\n // centerX + innerRadius * Math.cos(endAngle),\n // centerY + innerRadius * Math.sin(endAngle)\n // );\n if (fullPie) {\n path.moveTo(centerX + innerRadius * Math.cos(endAngle), centerY + innerRadius * Math.sin(endAngle));\n }\n else {\n // if (showTip) {\n // path.lineTo(\n // centerX + 0.5 * (innerRadius + outerRadius) * Math.cos(endAngle) + tipOffset * Math.cos(endAngle + Math.PI / 2),\n // centerY + 0.5 * (innerRadius + outerRadius) * Math.sin(endAngle) + tipOffset * Math.sin(endAngle + Math.PI / 2)\n // );\n // }\n // Temp workaround for https://bugs.chromium.org/p/chromium/issues/detail?id=993330\n // Revert this commit when fixed ^^.\n var x = centerX + innerRadius * Math.cos(endAngle);\n path.lineTo(Math.abs(x) < 1e-8 ? 0 : x, centerY + innerRadius * Math.sin(endAngle));\n }\n path.cubicArc(centerX, centerY, innerRadius, innerRadius, 0, endAngle, startAngle, 1);\n path.closePath();\n this.dirtyPath = false;\n };\n Sector.prototype.render = function (ctx) {\n if (this.dirtyTransform) {\n this.computeTransformMatrix();\n }\n this.matrix.toContext(ctx);\n this.updatePath();\n this.scene.appendPath(this.path);\n this.fillStroke(ctx);\n this.dirty = false;\n };\n Sector.className = 'Sector';\n return Sector;\n}(Shape));\nexport { Sector };\n","var Color = /** @class */ (function () {\n /**\n * Every color component should be in the [0, 1] range.\n * Some easing functions (such as elastic easing) can overshoot the target value by some amount.\n * So, when animating colors, if the source or target color components are already near\n * or at the edge of the allowed [0, 1] range, it is possible for the intermediate color\n * component value to end up outside of that range mid-animation. For this reason the constructor\n * performs range checking/constraining.\n * @param r Red component.\n * @param g Green component.\n * @param b Blue component.\n * @param a Alpha (opacity) component.\n */\n function Color(r, g, b, a) {\n if (a === void 0) { a = 1; }\n // NaN is treated as 0.\n this.r = Math.min(1, Math.max(0, r || 0));\n this.g = Math.min(1, Math.max(0, g || 0));\n this.b = Math.min(1, Math.max(0, b || 0));\n this.a = Math.min(1, Math.max(0, a || 0));\n }\n /**\n * The given string can be in one of the following formats:\n * - #rgb\n * - #rrggbb\n * - rgb(r, g, b)\n * - rgba(r, g, b, a)\n * - CSS color name such as 'white', 'orange', 'cyan', etc.\n * @param str\n */\n Color.fromString = function (str) {\n // hexadecimal notation\n if (str.indexOf('#') >= 0) { // there can be some leading whitespace\n return Color.fromHexString(str);\n }\n // color name\n var hex = Color.nameToHex[str];\n if (hex) {\n return Color.fromHexString(hex);\n }\n // rgb(a) notation\n if (str.indexOf('rgb') >= 0) {\n return Color.fromRgbaString(str);\n }\n throw new Error(\"Invalid color string: '\" + str + \"'\");\n };\n // Using separate RegExp for the short hex notation because strings like `#abcd`\n // are matched as ['#abcd', 'ab', 'c', 'd', undefined] when the `{1,2}` quantifier is used.\n Color.fromHexString = function (str) {\n var values = str.match(Color.hexRe);\n if (values) {\n var r = parseInt(values[1], 16);\n var g = parseInt(values[2], 16);\n var b = parseInt(values[3], 16);\n var a = values[4] !== undefined ? parseInt(values[4], 16) : 255;\n return new Color(r / 255, g / 255, b / 255, a / 255);\n }\n values = str.match(Color.shortHexRe);\n if (values) {\n var r = parseInt(values[1], 16);\n var g = parseInt(values[2], 16);\n var b = parseInt(values[3], 16);\n var a = values[4] !== undefined ? parseInt(values[4], 16) : 15;\n r += r * 16;\n g += g * 16;\n b += b * 16;\n a += a * 16;\n return new Color(r / 255, g / 255, b / 255, a / 255);\n }\n throw new Error(\"Malformed hexadecimal color string: '\" + str + \"'\");\n };\n Color.fromRgbaString = function (str) {\n var values = str.match(Color.rgbRe);\n if (values) {\n return new Color(+values[1] / 255, +values[2] / 255, +values[3] / 255);\n }\n values = str.match(Color.rgbaRe);\n if (values) {\n return new Color(+values[1] / 255, +values[2] / 255, +values[3] / 255, +values[4]);\n }\n throw new Error(\"Malformed rgb/rgba color string: '\" + str + \"'\");\n };\n Color.fromArray = function (arr) {\n if (arr.length === 4) {\n return new Color(arr[0], arr[1], arr[2], arr[3]);\n }\n if (arr.length === 3) {\n return new Color(arr[0], arr[1], arr[2]);\n }\n throw new Error('The given array should contain 3 or 4 color components (numbers).');\n };\n Color.fromHSB = function (h, s, b, alpha) {\n if (alpha === void 0) { alpha = 1; }\n var rgb = Color.HSBtoRGB(h, s, b);\n return new Color(rgb[0], rgb[1], rgb[2], alpha);\n };\n Color.padHex = function (str) {\n // Can't use `padStart(2, '0')` here because of IE.\n return str.length === 1 ? '0' + str : str;\n };\n Color.prototype.toHexString = function () {\n var hex = '#'\n + Color.padHex(Math.round(this.r * 255).toString(16))\n + Color.padHex(Math.round(this.g * 255).toString(16))\n + Color.padHex(Math.round(this.b * 255).toString(16));\n if (this.a < 1) {\n hex += Color.padHex(Math.round(this.a * 255).toString(16));\n }\n return hex;\n };\n Color.prototype.toRgbaString = function (fractionDigits) {\n if (fractionDigits === void 0) { fractionDigits = 3; }\n var components = [\n Math.round(this.r * 255),\n Math.round(this.g * 255),\n Math.round(this.b * 255)\n ];\n var k = Math.pow(10, fractionDigits);\n if (this.a !== 1) {\n components.push(Math.round(this.a * k) / k);\n return \"rgba(\" + components.join(', ') + \")\";\n }\n return \"rgb(\" + components.join(', ') + \")\";\n };\n Color.prototype.toString = function () {\n if (this.a === 1) {\n return this.toHexString();\n }\n return this.toRgbaString();\n };\n Color.prototype.toHSB = function () {\n return Color.RGBtoHSB(this.r, this.g, this.b);\n };\n /**\n * Converts the given RGB triple to an array of HSB (HSV) components.\n * The hue component will be `NaN` for achromatic colors.\n */\n Color.RGBtoHSB = function (r, g, b) {\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var S = max !== 0 ? (max - min) / max : 0;\n var H = NaN;\n // min == max, means all components are the same\n // and the color is a shade of gray with no hue (H is NaN)\n if (min !== max) {\n var delta = max - min;\n var rc = (max - r) / delta;\n var gc = (max - g) / delta;\n var bc = (max - b) / delta;\n if (r === max) {\n H = bc - gc;\n }\n else if (g === max) {\n H = 2.0 + rc - bc;\n }\n else {\n H = 4.0 + gc - rc;\n }\n H /= 6.0;\n if (H < 0) {\n H = H + 1.0;\n }\n }\n return [H * 360, S, max];\n };\n /**\n * Converts the given HSB (HSV) triple to an array of RGB components.\n */\n Color.HSBtoRGB = function (H, S, B) {\n if (isNaN(H)) {\n H = 0;\n }\n H = (((H % 360) + 360) % 360) / 360; // normalize hue to [0, 360] interval, then scale to [0, 1]\n var r = 0;\n var g = 0;\n var b = 0;\n if (S === 0) {\n r = g = b = B;\n }\n else {\n var h = (H - Math.floor(H)) * 6;\n var f = h - Math.floor(h);\n var p = B * (1 - S);\n var q = B * (1 - S * f);\n var t = B * (1 - (S * (1 - f)));\n switch (h >> 0) { // discard the floating point part of the number\n case 0:\n r = B;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = B;\n b = p;\n break;\n case 2:\n r = p;\n g = B;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = B;\n break;\n case 4:\n r = t;\n g = p;\n b = B;\n break;\n case 5:\n r = B;\n g = p;\n b = q;\n break;\n }\n }\n return [r, g, b];\n };\n Color.prototype.derive = function (hueShift, saturationFactor, brightnessFactor, opacityFactor) {\n var hsb = Color.RGBtoHSB(this.r, this.g, this.b);\n var b = hsb[2];\n if (b == 0 && brightnessFactor > 1.0) {\n b = 0.05;\n }\n var h = (((hsb[0] + hueShift) % 360) + 360) % 360;\n var s = Math.max(Math.min(hsb[1] * saturationFactor, 1.0), 0.0);\n b = Math.max(Math.min(b * brightnessFactor, 1.0), 0.0);\n var a = Math.max(Math.min(this.a * opacityFactor, 1.0), 0.0);\n var rgba = Color.HSBtoRGB(h, s, b);\n rgba.push(a);\n return Color.fromArray(rgba);\n };\n Color.prototype.brighter = function () {\n return this.derive(0, 1.0, 1.0 / 0.7, 1.0);\n };\n Color.prototype.darker = function () {\n return this.derive(0, 1.0, 0.7, 1.0);\n };\n // See https://drafts.csswg.org/css-color/#hex-notation\n Color.hexRe = /\\s*#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?\\s*$/;\n Color.shortHexRe = /\\s*#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?\\s*$/;\n Color.rgbRe = /\\s*rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)\\s*/;\n Color.rgbaRe = /\\s*rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)\\s*/;\n /**\n * CSS Color Module Level 4:\n * https://drafts.csswg.org/css-color/#named-colors\n */\n Color.nameToHex = Object.freeze({\n aliceblue: '#F0F8FF',\n antiquewhite: '#FAEBD7',\n aqua: '#00FFFF',\n aquamarine: '#7FFFD4',\n azure: '#F0FFFF',\n beige: '#F5F5DC',\n bisque: '#FFE4C4',\n black: '#000000',\n blanchedalmond: '#FFEBCD',\n blue: '#0000FF',\n blueviolet: '#8A2BE2',\n brown: '#A52A2A',\n burlywood: '#DEB887',\n cadetblue: '#5F9EA0',\n chartreuse: '#7FFF00',\n chocolate: '#D2691E',\n coral: '#FF7F50',\n cornflowerblue: '#6495ED',\n cornsilk: '#FFF8DC',\n crimson: '#DC143C',\n cyan: '#00FFFF',\n darkblue: '#00008B',\n darkcyan: '#008B8B',\n darkgoldenrod: '#B8860B',\n darkgray: '#A9A9A9',\n darkgreen: '#006400',\n darkgrey: '#A9A9A9',\n darkkhaki: '#BDB76B',\n darkmagenta: '#8B008B',\n darkolivegreen: '#556B2F',\n darkorange: '#FF8C00',\n darkorchid: '#9932CC',\n darkred: '#8B0000',\n darksalmon: '#E9967A',\n darkseagreen: '#8FBC8F',\n darkslateblue: '#483D8B',\n darkslategray: '#2F4F4F',\n darkslategrey: '#2F4F4F',\n darkturquoise: '#00CED1',\n darkviolet: '#9400D3',\n deeppink: '#FF1493',\n deepskyblue: '#00BFFF',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1E90FF',\n firebrick: '#B22222',\n floralwhite: '#FFFAF0',\n forestgreen: '#228B22',\n fuchsia: '#FF00FF',\n gainsboro: '#DCDCDC',\n ghostwhite: '#F8F8FF',\n gold: '#FFD700',\n goldenrod: '#DAA520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#ADFF2F',\n grey: '#808080',\n honeydew: '#F0FFF0',\n hotpink: '#FF69B4',\n indianred: '#CD5C5C',\n indigo: '#4B0082',\n ivory: '#FFFFF0',\n khaki: '#F0E68C',\n lavender: '#E6E6FA',\n lavenderblush: '#FFF0F5',\n lawngreen: '#7CFC00',\n lemonchiffon: '#FFFACD',\n lightblue: '#ADD8E6',\n lightcoral: '#F08080',\n lightcyan: '#E0FFFF',\n lightgoldenrodyellow: '#FAFAD2',\n lightgray: '#D3D3D3',\n lightgreen: '#90EE90',\n lightgrey: '#D3D3D3',\n lightpink: '#FFB6C1',\n lightsalmon: '#FFA07A',\n lightseagreen: '#20B2AA',\n lightskyblue: '#87CEFA',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#B0C4DE',\n lightyellow: '#FFFFE0',\n lime: '#00FF00',\n limegreen: '#32CD32',\n linen: '#FAF0E6',\n magenta: '#FF00FF',\n maroon: '#800000',\n mediumaquamarine: '#66CDAA',\n mediumblue: '#0000CD',\n mediumorchid: '#BA55D3',\n mediumpurple: '#9370DB',\n mediumseagreen: '#3CB371',\n mediumslateblue: '#7B68EE',\n mediumspringgreen: '#00FA9A',\n mediumturquoise: '#48D1CC',\n mediumvioletred: '#C71585',\n midnightblue: '#191970',\n mintcream: '#F5FFFA',\n mistyrose: '#FFE4E1',\n moccasin: '#FFE4B5',\n navajowhite: '#FFDEAD',\n navy: '#000080',\n oldlace: '#FDF5E6',\n olive: '#808000',\n olivedrab: '#6B8E23',\n orange: '#FFA500',\n orangered: '#FF4500',\n orchid: '#DA70D6',\n palegoldenrod: '#EEE8AA',\n palegreen: '#98FB98',\n paleturquoise: '#AFEEEE',\n palevioletred: '#DB7093',\n papayawhip: '#FFEFD5',\n peachpuff: '#FFDAB9',\n peru: '#CD853F',\n pink: '#FFC0CB',\n plum: '#DDA0DD',\n powderblue: '#B0E0E6',\n purple: '#800080',\n rebeccapurple: '#663399',\n red: '#FF0000',\n rosybrown: '#BC8F8F',\n royalblue: '#4169E1',\n saddlebrown: '#8B4513',\n salmon: '#FA8072',\n sandybrown: '#F4A460',\n seagreen: '#2E8B57',\n seashell: '#FFF5EE',\n sienna: '#A0522D',\n silver: '#C0C0C0',\n skyblue: '#87CEEB',\n slateblue: '#6A5ACD',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#FFFAFA',\n springgreen: '#00FF7F',\n steelblue: '#4682B4',\n tan: '#D2B48C',\n teal: '#008080',\n thistle: '#D8BFD8',\n tomato: '#FF6347',\n turquoise: '#40E0D0',\n violet: '#EE82EE',\n wheat: '#F5DEB3',\n white: '#FFFFFF',\n whitesmoke: '#F5F5F5',\n yellow: '#FFFF00',\n yellowgreen: '#9ACD32'\n });\n return Color;\n}());\nexport { Color };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Observable, reactive } from \"../util/observable\";\nvar DropShadow = /** @class */ (function (_super) {\n __extends(DropShadow, _super);\n function DropShadow() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.enabled = true;\n _this.color = 'rgba(0, 0, 0, 0.5)';\n _this.xOffset = 0;\n _this.yOffset = 0;\n _this.blur = 5;\n return _this;\n }\n __decorate([\n reactive(['change'])\n ], DropShadow.prototype, \"enabled\", void 0);\n __decorate([\n reactive(['change'])\n ], DropShadow.prototype, \"color\", void 0);\n __decorate([\n reactive(['change'])\n ], DropShadow.prototype, \"xOffset\", void 0);\n __decorate([\n reactive(['change'])\n ], DropShadow.prototype, \"yOffset\", void 0);\n __decorate([\n reactive(['change'])\n ], DropShadow.prototype, \"blur\", void 0);\n return DropShadow;\n}(Observable));\nexport { DropShadow };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { LinearScale } from \"../../scale/linearScale\";\nimport { ChartAxis } from \"../chartAxis\";\nvar NumberAxis = /** @class */ (function (_super) {\n __extends(NumberAxis, _super);\n function NumberAxis() {\n var _this = _super.call(this, new LinearScale()) || this;\n _this._nice = true;\n _this.scale.clamp = true;\n return _this;\n }\n Object.defineProperty(NumberAxis.prototype, \"nice\", {\n get: function () {\n return this._nice;\n },\n set: function (value) {\n if (this._nice !== value) {\n this._nice = value;\n if (value && this.scale.nice) {\n this.scale.nice(10);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(NumberAxis.prototype, \"domain\", {\n get: function () {\n return this.scale.domain;\n },\n set: function (value) {\n this.scale.domain = value;\n if (this.nice && this.scale.nice) {\n this.scale.nice(10);\n }\n },\n enumerable: true,\n configurable: true\n });\n return NumberAxis;\n}(ChartAxis));\nexport { NumberAxis };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Padding } from \"./util/padding\";\nimport { Text } from \"./scene/shape/text\";\nimport { PointerEvents } from \"./scene/node\";\nimport { Observable, reactive } from \"./util/observable\";\nvar Caption = /** @class */ (function (_super) {\n __extends(Caption, _super);\n function Caption() {\n var _this = _super.call(this) || this;\n _this.node = new Text();\n _this.enabled = true;\n _this.padding = new Padding(10);\n var node = _this.node;\n node.textAlign = 'center';\n node.textBaseline = 'top';\n node.pointerEvents = PointerEvents.None;\n return _this;\n }\n __decorate([\n reactive(['change'])\n ], Caption.prototype, \"enabled\", void 0);\n __decorate([\n reactive(['change'])\n ], Caption.prototype, \"padding\", void 0);\n __decorate([\n reactive(['change'], 'node.text')\n ], Caption.prototype, \"text\", void 0);\n __decorate([\n reactive(['change'], 'node.fontStyle')\n ], Caption.prototype, \"fontStyle\", void 0);\n __decorate([\n reactive(['change'], 'node.fontWeight')\n ], Caption.prototype, \"fontWeight\", void 0);\n __decorate([\n reactive(['change'], 'node.fontSize')\n ], Caption.prototype, \"fontSize\", void 0);\n __decorate([\n reactive(['change'], 'node.fontFamily')\n ], Caption.prototype, \"fontFamily\", void 0);\n __decorate([\n reactive(['change'], 'node.fill')\n ], Caption.prototype, \"color\", void 0);\n return Caption;\n}(Observable));\nexport { Caption };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { CartesianChart } from \"./cartesianChart\";\nimport { numericExtent } from \"../util/array\";\nimport { ChartAxisDirection, ChartAxisPosition } from \"./chartAxis\";\nvar GroupedCategoryChart = /** @class */ (function (_super) {\n __extends(GroupedCategoryChart, _super);\n function GroupedCategoryChart() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n GroupedCategoryChart.prototype.updateAxes = function () {\n var _this = this;\n var axes = this.axes;\n axes.forEach(function (axis) {\n var _a;\n var direction = axis.direction, position = axis.position, boundSeries = axis.boundSeries;\n var domains = [];\n var isNumericX = undefined;\n boundSeries.filter(function (s) { return s.visible; }).forEach(function (series) {\n if (direction === ChartAxisDirection.X) {\n if (isNumericX === undefined) {\n // always add first X domain\n var domain_1 = series.getDomain(direction);\n domains.push(domain_1);\n isNumericX = typeof domain_1[0] === 'number';\n }\n else if (isNumericX) {\n // only add further X domains if the axis is numeric\n domains.push(series.getDomain(direction));\n }\n }\n else {\n domains.push(series.getDomain(direction));\n }\n });\n var domain = (_a = new Array()).concat.apply(_a, domains);\n axis.domain = numericExtent(domain) || domain;\n axis.update();\n var axisThickness = Math.floor(axis.computeBBox().width);\n switch (position) {\n case ChartAxisPosition.Left:\n _this.axisAutoPadding.left = axisThickness;\n break;\n case ChartAxisPosition.Right:\n _this.axisAutoPadding.right = axisThickness;\n break;\n case ChartAxisPosition.Bottom:\n _this.axisAutoPadding.bottom = axisThickness;\n break;\n case ChartAxisPosition.Top:\n _this.axisAutoPadding.top = axisThickness;\n break;\n }\n });\n };\n return GroupedCategoryChart;\n}(CartesianChart));\nexport { GroupedCategoryChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Cross = /** @class */ (function (_super) {\n __extends(Cross, _super);\n function Cross() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Cross.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y;\n var _b = this, path = _b.path, size = _b.size;\n var s = size / 4.2;\n path.clear();\n path.moveTo(x -= s, y);\n path.lineTo(x -= s, y -= s);\n path.lineTo(x += s, y -= s);\n path.lineTo(x += s, y += s);\n path.lineTo(x += s, y -= s);\n path.lineTo(x += s, y += s);\n path.lineTo(x -= s, y += s);\n path.lineTo(x += s, y += s);\n path.lineTo(x -= s, y += s);\n path.lineTo(x -= s, y -= s);\n path.lineTo(x -= s, y += s);\n path.lineTo(x -= s, y -= s);\n path.closePath();\n };\n Cross.className = 'Cross';\n return Cross;\n}(Marker));\nexport { Cross };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Diamond = /** @class */ (function (_super) {\n __extends(Diamond, _super);\n function Diamond() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Diamond.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y;\n var _b = this, path = _b.path, size = _b.size;\n var s = size / 2;\n path.clear();\n path.moveTo(x, y -= s);\n path.lineTo(x += s, y += s);\n path.lineTo(x -= s, y += s);\n path.lineTo(x -= s, y -= s);\n path.lineTo(x += s, y -= s);\n path.closePath();\n };\n Diamond.className = 'Diamond';\n return Diamond;\n}(Marker));\nexport { Diamond };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Plus = /** @class */ (function (_super) {\n __extends(Plus, _super);\n function Plus() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Plus.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y;\n var _b = this, path = _b.path, size = _b.size;\n var s = size / 3;\n var hs = s / 2;\n path.clear();\n path.moveTo(x -= hs, y -= hs);\n path.lineTo(x, y -= s);\n path.lineTo(x += s, y);\n path.lineTo(x, y += s);\n path.lineTo(x += s, y);\n path.lineTo(x, y += s);\n path.lineTo(x -= s, y);\n path.lineTo(x, y += s);\n path.lineTo(x -= s, y);\n path.lineTo(x, y -= s);\n path.lineTo(x -= s, y);\n path.lineTo(x, y -= s);\n path.closePath();\n };\n Plus.className = 'Plus';\n return Plus;\n}(Marker));\nexport { Plus };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Marker } from \"./marker\";\nvar Triangle = /** @class */ (function (_super) {\n __extends(Triangle, _super);\n function Triangle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Triangle.prototype.updatePath = function () {\n var _a = this, x = _a.x, y = _a.y;\n var _b = this, path = _b.path, size = _b.size;\n var s = size * 1.1;\n path.clear();\n path.moveTo(x, y -= s * 0.48);\n path.lineTo(x += s * 0.5, y += s * 0.87);\n path.lineTo(x -= s, y);\n path.closePath();\n };\n Triangle.className = 'Triangle';\n return Triangle;\n}(Marker));\nexport { Triangle };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar t0 = new Date;\nvar t1 = new Date;\n/**\n * The interval methods don't mutate Date parameters.\n */\nvar TimeInterval = /** @class */ (function () {\n function TimeInterval(floor, offset) {\n this._floor = floor;\n this._offset = offset;\n }\n /**\n * Returns a new date representing the latest interval boundary date before or equal to date.\n * For example, `day.floor(date)` typically returns 12:00 AM local time on the given date.\n * @param date\n */\n TimeInterval.prototype.floor = function (date) {\n date = new Date(+date);\n this._floor(date);\n return date;\n };\n /**\n * Returns a new date representing the earliest interval boundary date after or equal to date.\n * @param date\n */\n TimeInterval.prototype.ceil = function (date) {\n date = new Date(+date - 1);\n this._floor(date);\n this._offset(date, 1);\n this._floor(date);\n return date;\n };\n /**\n * Returns a new date representing the closest interval boundary date to date.\n * @param date\n */\n TimeInterval.prototype.round = function (date) {\n var d0 = this.floor(date);\n var d1 = this.ceil(date);\n var ms = +date;\n return ms - d0.getTime() < d1.getTime() - ms ? d0 : d1;\n };\n /**\n * Returns a new date equal to date plus step intervals.\n * @param date\n * @param step\n */\n TimeInterval.prototype.offset = function (date, step) {\n if (step === void 0) { step = 1; }\n date = new Date(+date);\n this._offset(date, Math.floor(step));\n return date;\n };\n /**\n * Returns an array of dates representing every interval boundary after or equal to start (inclusive) and before stop (exclusive).\n * @param start\n * @param stop\n * @param step\n */\n TimeInterval.prototype.range = function (start, stop, step) {\n if (step === void 0) { step = 1; }\n var range = [];\n start = this.ceil(start);\n step = Math.floor(step);\n if (start > stop || step <= 0) {\n return range;\n }\n var previous;\n do {\n previous = new Date(+start);\n range.push(previous);\n this._offset(start, step);\n this._floor(start);\n } while (previous < start && start < stop);\n return range;\n };\n // Returns an interval that is a subset of this interval.\n // For example, to create an interval that return 1st, 11th, 21st and 31st of each month:\n // day.filter(date => (date.getDate() - 1) % 10 === 0)\n TimeInterval.prototype.filter = function (test) {\n var _this = this;\n var floor = function (date) {\n if (date >= date) {\n while (_this._floor(date), !test(date)) {\n date.setTime(date.getTime() - 1);\n }\n }\n return date;\n };\n var offset = function (date, step) {\n if (date >= date) {\n if (step < 0) {\n while (++step <= 0) {\n do {\n _this._offset(date, -1);\n } while (!test(date));\n }\n }\n else {\n while (--step >= 0) {\n do {\n _this._offset(date, 1);\n } while (!test(date));\n }\n }\n }\n return date;\n };\n return new TimeInterval(floor, offset);\n };\n return TimeInterval;\n}());\nexport { TimeInterval };\nvar CountableTimeInterval = /** @class */ (function (_super) {\n __extends(CountableTimeInterval, _super);\n function CountableTimeInterval(floor, offset, count, field) {\n var _this = _super.call(this, floor, offset) || this;\n _this._count = count;\n _this._field = field;\n return _this;\n }\n /**\n * Returns the number of interval boundaries after start (exclusive) and before or equal to end (inclusive).\n * @param start\n * @param end\n */\n CountableTimeInterval.prototype.count = function (start, end) {\n t0.setTime(+start);\n t1.setTime(+end);\n this._floor(t0);\n this._floor(t1);\n return Math.floor(this._count(t0, t1));\n };\n /**\n * Returns a filtered view of this interval representing every step'th date.\n * The meaning of step is dependent on this interval’s parent interval as defined by the `field` function.\n * @param step\n */\n CountableTimeInterval.prototype.every = function (step) {\n var _this = this;\n var result;\n step = Math.floor(step);\n if (isFinite(step) && step > 0) {\n if (step > 1) {\n var field_1 = this._field;\n if (field_1) {\n result = this.filter(function (d) { return field_1(d) % step === 0; });\n }\n else {\n result = this.filter(function (d) { return _this.count(0, d) % step === 0; });\n }\n }\n else {\n result = this;\n }\n }\n return result;\n };\n return CountableTimeInterval;\n}(TimeInterval));\nexport { CountableTimeInterval };\n","import { CountableTimeInterval } from \"./interval\";\nfunction floor(date) {\n return date;\n}\nfunction offset(date, milliseconds) {\n date.setTime(date.getTime() + milliseconds);\n}\nfunction count(start, end) {\n return end.getTime() - start.getTime();\n}\nvar millisecond = new CountableTimeInterval(floor, offset, count);\nexport default millisecond;\n","import { CountableTimeInterval } from \"./interval\";\nimport { durationSecond } from \"./duration\";\nfunction floor(date) {\n date.setTime(date.getTime() - date.getMilliseconds());\n}\nfunction offset(date, seconds) {\n date.setTime(date.getTime() + seconds * durationSecond);\n}\nfunction count(start, end) {\n return (end.getTime() - start.getTime()) / durationSecond;\n}\nvar second = new CountableTimeInterval(floor, offset, count);\nexport default second;\n","// Common time unit sizes in milliseconds.\nexport var durationSecond = 1000;\nexport var durationMinute = durationSecond * 60;\nexport var durationHour = durationMinute * 60;\nexport var durationDay = durationHour * 24;\nexport var durationWeek = durationDay * 7;\nexport var durationMonth = durationDay * 30;\nexport var durationYear = durationDay * 365;\n","import { CountableTimeInterval } from \"./interval\";\nimport { durationMinute, durationSecond } from \"./duration\";\nfunction floor(date) {\n date.setTime(date.getTime() - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}\nfunction offset(date, minutes) {\n date.setTime(date.getTime() + minutes * durationMinute);\n}\nfunction count(start, end) {\n return (end.getTime() - start.getTime()) / durationMinute;\n}\nfunction field(date) {\n return date.getMinutes();\n}\nvar minute = new CountableTimeInterval(floor, offset, count, field);\nexport default minute;\n","import { CountableTimeInterval } from \"./interval\";\nimport { durationHour, durationMinute, durationSecond } from \"./duration\";\nfunction floor(date) {\n date.setTime(date.getTime() - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}\nfunction offset(date, hours) {\n date.setTime(date.getTime() + hours * durationHour);\n}\nfunction count(start, end) {\n return (end.getTime() - start.getTime()) / durationHour;\n}\nfunction field(date) {\n return date.getHours();\n}\nvar hour = new CountableTimeInterval(floor, offset, count, field);\nexport default hour;\n","import { CountableTimeInterval } from \"./interval\";\nimport { durationDay, durationMinute } from \"./duration\";\nfunction floor(date) {\n date.setHours(0, 0, 0, 0);\n}\nfunction offset(date, days) {\n date.setDate(date.getDate() + days);\n}\nfunction count(start, end) {\n var tzMinuteDelta = end.getTimezoneOffset() - start.getTimezoneOffset();\n return (end.getTime() - start.getTime() - tzMinuteDelta * durationMinute) / durationDay;\n}\nfunction field(date) {\n return date.getDate() - 1;\n}\nvar day = new CountableTimeInterval(floor, offset, count, field);\nexport default day;\n","import { durationMinute, durationWeek } from \"./duration\";\nimport { CountableTimeInterval } from \"./interval\";\n// Set date to n-th day of the week.\nfunction weekday(n) {\n // Sets the `date` to the start of the `n`-th day of the current week.\n // n == 0 is Sunday.\n function floor(date) {\n // 1..31 1..7\n date.setDate(date.getDate() - (date.getDay() + 7 - n) % 7);\n date.setHours(0, 0, 0, 0); // h, m, s, ms\n }\n // Offset the date by the given number of weeks.\n function offset(date, weeks) {\n date.setDate(date.getDate() + weeks * 7);\n }\n // Count the number of weeks between teh start and end dates.\n function count(start, end) {\n var msDelta = end.getTime() - start.getTime();\n var tzMinuteDelta = end.getTimezoneOffset() - start.getTimezoneOffset();\n return (msDelta - tzMinuteDelta * durationMinute) / durationWeek;\n }\n return new CountableTimeInterval(floor, offset, count);\n}\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\nexport default sunday;\n","import { CountableTimeInterval } from \"./interval\";\nfunction floor(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}\nfunction offset(date, months) {\n date.setMonth(date.getMonth() + months);\n}\nfunction count(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}\nfunction field(date) {\n return date.getMonth();\n}\nvar month = new CountableTimeInterval(floor, offset, count, field);\nexport default month;\n","import { CountableTimeInterval } from \"./interval\";\nfunction floor(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}\nfunction offset(date, years) {\n date.setFullYear(date.getFullYear() + years);\n}\nfunction count(start, end) {\n return end.getFullYear() - start.getFullYear();\n}\nfunction field(date) {\n return date.getFullYear();\n}\nvar year = new CountableTimeInterval(floor, offset, count, field);\nexport default year;\n","import { CountableTimeInterval } from \"./interval\";\nimport { durationDay } from \"./duration\";\nfunction floor(date) {\n date.setUTCHours(0, 0, 0, 0);\n}\nfunction offset(date, days) {\n date.setUTCDate(date.getUTCDate() + days);\n}\nfunction count(start, end) {\n return (end.getTime() - start.getTime()) / durationDay;\n}\nfunction field(date) {\n return date.getUTCDate() - 1;\n}\nvar utcDay = new CountableTimeInterval(floor, offset, count, field);\nexport default utcDay;\n","import { CountableTimeInterval } from \"./interval\";\nfunction floor(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}\nfunction offset(date, years) {\n date.setUTCFullYear(date.getUTCFullYear() + years);\n}\nfunction count(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}\nfunction field(date) {\n return date.getUTCFullYear();\n}\nvar utcYear = new CountableTimeInterval(floor, offset, count, field);\nexport default utcYear;\n","import { durationWeek } from \"./duration\";\nimport { CountableTimeInterval } from \"./interval\";\n// Set date to n-th day of the week.\nfunction weekday(n) {\n // Sets the `date` to the start of the `n`-th day of the current week.\n // n == 0 is Sunday.\n function floor(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - n) % 7);\n date.setHours(0, 0, 0, 0); // h, m, s, ms\n }\n // Offset the date by the given number of weeks.\n function offset(date, weeks) {\n date.setUTCDate(date.getUTCDate() + weeks * 7);\n }\n // Count the number of weeks between teh start and end dates.\n function count(start, end) {\n return (end.getTime() - start.getTime()) / durationWeek;\n }\n return new CountableTimeInterval(floor, offset, count);\n}\nexport var utcSunday = weekday(0);\nexport var utcMonday = weekday(1);\nexport var utcTuesday = weekday(2);\nexport var utcWednesday = weekday(3);\nexport var utcThursday = weekday(4);\nexport var utcFriday = weekday(5);\nexport var utcSaturday = weekday(6);\nexport default utcSunday;\n","import timeDay from \"../day\";\nimport year from \"../year\";\nimport { sunday as timeSunday, monday as timeMonday, thursday as timeThursday } from \"../week\";\nimport utcDay from \"../utcDay\";\nimport utcYear from \"../utcYear\";\nimport utcSunday, { utcMonday, utcThursday } from \"../utcWeek\";\nfunction localDate(d) {\n // For JS Dates the [0, 100) interval is a time warp, a fast forward to the 20th century.\n // For example, -1 is -0001 BC, 0 is already 1900 AD.\n if (d.y >= 0 && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\nfunction utcDate(d) {\n if (d.y >= 0 && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n/**\n * Creates a lookup map for array of names to go from a name to index.\n * @param names\n */\nfunction formatLookup(names) {\n var map = {};\n for (var i = 0, n = names.length; i < n; i++) {\n map[names[i].toLowerCase()] = i;\n }\n return map;\n}\nfunction newYear(y) {\n return {\n y: y,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0\n };\n}\nvar percentCharCode = 37;\nvar numberRe = /^\\s*\\d+/; // ignores next directive\nvar percentRe = /^%/;\nvar requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n/**\n * Prepends any character in the `requoteRe` set with a backslash.\n * @param s\n */\nexport var requote = function (s) { return s.replace(requoteRe, '\\\\$&'); }; // $& - matched substring\n/**\n * Returns a RegExp that matches any string that starts with any of the given names (case insensitive).\n * @param names\n */\nexport var formatRe = function (names) { return new RegExp('^(?:' + names.map(requote).join('|') + ')', 'i'); };\n// A map of padding modifiers to padding strings. Default is `0`.\nvar pads = {\n '-': '',\n '_': ' ',\n '0': '0'\n};\nexport function pad(value, fill, width) {\n var sign = value < 0 ? '-' : '';\n var string = String(sign ? -value : value);\n var length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n/**\n * Create a new time-locale-based object which exposes time-formatting\n * methods for the specified locale definition.\n *\n * @param timeLocale A time locale definition.\n */\nexport default function formatLocale(timeLocale) {\n var lDateTime = timeLocale.dateTime;\n var lDate = timeLocale.date;\n var lTime = timeLocale.time;\n var lPeriods = timeLocale.periods;\n var lWeekdays = timeLocale.days;\n var lShortWeekdays = timeLocale.shortDays;\n var lMonths = timeLocale.months;\n var lShortMonths = timeLocale.shortMonths;\n var periodRe = formatRe(lPeriods);\n var periodLookup = formatLookup(lPeriods);\n var weekdayRe = formatRe(lWeekdays);\n var weekdayLookup = formatLookup(lWeekdays);\n var shortWeekdayRe = formatRe(lShortWeekdays);\n var shortWeekdayLookup = formatLookup(lShortWeekdays);\n var monthRe = formatRe(lMonths);\n var monthLookup = formatLookup(lMonths);\n var shortMonthRe = formatRe(lShortMonths);\n var shortMonthLookup = formatLookup(lShortMonths);\n var formats = {\n 'a': formatShortWeekday,\n 'A': formatWeekday,\n 'b': formatShortMonth,\n 'B': formatMonth,\n 'c': undefined,\n 'd': formatDayOfMonth,\n 'e': formatDayOfMonth,\n 'f': formatMicroseconds,\n 'H': formatHour24,\n 'I': formatHour12,\n 'j': formatDayOfYear,\n 'L': formatMilliseconds,\n 'm': formatMonthNumber,\n 'M': formatMinutes,\n 'p': formatPeriod,\n 'Q': formatUnixTimestamp,\n 's': formatUnixTimestampSeconds,\n 'S': formatSeconds,\n 'u': formatWeekdayNumberMonday,\n 'U': formatWeekNumberSunday,\n 'V': formatWeekNumberISO,\n 'w': formatWeekdayNumberSunday,\n 'W': formatWeekNumberMonday,\n 'x': undefined,\n 'X': undefined,\n 'y': formatYear,\n 'Y': formatFullYear,\n 'Z': formatZone,\n '%': formatLiteralPercent\n };\n var utcFormats = {\n 'a': formatUTCShortWeekday,\n 'A': formatUTCWeekday,\n 'b': formatUTCShortMonth,\n 'B': formatUTCMonth,\n 'c': undefined,\n 'd': formatUTCDayOfMonth,\n 'e': formatUTCDayOfMonth,\n 'f': formatUTCMicroseconds,\n 'H': formatUTCHour24,\n 'I': formatUTCHour12,\n 'j': formatUTCDayOfYear,\n 'L': formatUTCMilliseconds,\n 'm': formatUTCMonthNumber,\n 'M': formatUTCMinutes,\n 'p': formatUTCPeriod,\n 'Q': formatUnixTimestamp,\n 's': formatUnixTimestampSeconds,\n 'S': formatUTCSeconds,\n 'u': formatUTCWeekdayNumberMonday,\n 'U': formatUTCWeekNumberSunday,\n 'V': formatUTCWeekNumberISO,\n 'w': formatUTCWeekdayNumberSunday,\n 'W': formatUTCWeekNumberMonday,\n 'x': undefined,\n 'X': undefined,\n 'y': formatUTCYear,\n 'Y': formatUTCFullYear,\n 'Z': formatUTCZone,\n '%': formatLiteralPercent\n };\n var parses = {\n 'a': parseShortWeekday,\n 'A': parseWeekday,\n 'b': parseShortMonth,\n 'B': parseMonth,\n 'c': parseLocaleDateTime,\n 'd': parseDayOfMonth,\n 'e': parseDayOfMonth,\n 'f': parseMicroseconds,\n 'H': parseHour24,\n 'I': parseHour24,\n 'j': parseDayOfYear,\n 'L': parseMilliseconds,\n 'm': parseMonthNumber,\n 'M': parseMinutes,\n 'p': parsePeriod,\n 'Q': parseUnixTimestamp,\n 's': parseUnixTimestampSeconds,\n 'S': parseSeconds,\n 'u': parseWeekdayNumberMonday,\n 'U': parseWeekNumberSunday,\n 'V': parseWeekNumberISO,\n 'w': parseWeekdayNumberSunday,\n 'W': parseWeekNumberMonday,\n 'x': parseLocaleDate,\n 'X': parseLocaleTime,\n 'y': parseYear,\n 'Y': parseFullYear,\n 'Z': parseZone,\n '%': parseLiteralPercent\n };\n // Recursive definitions.\n formats.x = newFormat(lDate, formats);\n formats.X = newFormat(lTime, formats);\n formats.c = newFormat(lDateTime, formats);\n utcFormats.x = newFormat(lDate, utcFormats);\n utcFormats.X = newFormat(lTime, utcFormats);\n utcFormats.c = newFormat(lDateTime, utcFormats);\n function newParse(specifier, newDate) {\n return function (str) {\n var d = newYear(1900);\n var i = parseSpecifier(d, specifier, str += '', 0);\n if (i != str.length) {\n return undefined;\n }\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = d.H % 12 + d.p * 12;\n }\n // Convert day-of-week and week-of-year to day-of-year.\n if ('V' in d) {\n if (d.V < 1 || d.V > 53) {\n return undefined;\n }\n if (!('w' in d)) {\n d.w = 1;\n }\n if ('Z' in d) {\n var week = utcDate(newYear(d.y));\n var day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday.floor(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n }\n else {\n var week = newDate(newYear(d.y));\n var day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday.floor(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n }\n else if ('W' in d || 'U' in d) {\n if (!('w' in d)) {\n d.w = 'u' in d\n ? d.u % 7\n : 'W' in d ? 1 : 0;\n }\n var day = 'Z' in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = 'W' in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if ('Z' in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n /**\n * Creates a new function that formats the given Date or timestamp according to specifier.\n * @param specifier\n * @param formats\n */\n function newFormat(specifier, formats) {\n return function (date) {\n var string = [];\n var n = specifier.length;\n var i = -1;\n var j = 0;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n while (++i < n) {\n if (specifier.charCodeAt(i) === percentCharCode) {\n string.push(specifier.slice(j, i)); // copy the chunks of specifier with no directives as is\n var c = specifier.charAt(++i);\n var pad_1 = pads[c];\n if (pad_1 != undefined) { // if format directive has a padding modifier in front of it\n c = specifier.charAt(++i); // fetch the directive itself\n }\n else {\n pad_1 = c === 'e' ? ' ' : '0'; // use the default padding modifier\n }\n var format = formats[c];\n if (format) { // if the directive has a corresponding formatting function\n c = format(date, pad_1); // replace the directive with the formatted date\n }\n string.push(c);\n j = i + 1;\n }\n }\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n // Simultaneously walks over the specifier and the parsed string, populating the `d` map with parsed values.\n // The returned number is expected to equal the length of the parsed `string`, if parsing succeeded.\n function parseSpecifier(d, specifier, string, j) {\n // i - `specifier` string index\n // j - parsed `string` index\n var i = 0;\n var n = specifier.length;\n var m = string.length;\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n var code = specifier.charCodeAt(i++);\n if (code === percentCharCode) {\n var char = specifier.charAt(i++);\n var parse = parses[(char in pads ? specifier.charAt(i++) : char)];\n if (!parse || ((j = parse(d, string, j)) < 0)) {\n return -1;\n }\n }\n else if (code != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n // ----------------------------- formats ----------------------------------\n function formatMicroseconds(date, fill) {\n return formatMilliseconds(date, fill) + '000';\n }\n function formatMilliseconds(date, fill) {\n return pad(date.getMilliseconds(), fill, 3);\n }\n function formatSeconds(date, fill) {\n return pad(date.getSeconds(), fill, 2);\n }\n function formatMinutes(date, fill) {\n return pad(date.getMinutes(), fill, 2);\n }\n function formatHour12(date, fill) {\n return pad(date.getHours() % 12 || 12, fill, 2);\n }\n function formatHour24(date, fill) {\n return pad(date.getHours(), fill, 2);\n }\n function formatPeriod(date) {\n return lPeriods[date.getHours() >= 12 ? 1 : 0];\n }\n function formatShortWeekday(date) {\n return lShortWeekdays[date.getDay()];\n }\n function formatWeekday(date) {\n return lWeekdays[date.getDay()];\n }\n function formatWeekdayNumberMonday(date) {\n var dayOfWeek = date.getDay();\n return dayOfWeek === 0 ? 7 : dayOfWeek;\n }\n function formatWeekNumberSunday(date, fill) {\n return pad(timeSunday.count(year.floor(date), date), fill, 2);\n }\n function formatWeekNumberISO(date, fill) {\n var day = date.getDay();\n date = (day >= 4 || day === 0) ? timeThursday.floor(date) : timeThursday.ceil(date);\n var yearStart = year.floor(date);\n return pad(timeThursday.count(yearStart, date) + (yearStart.getDay() === 4 ? 1 : 0), fill, 2);\n }\n function formatWeekdayNumberSunday(date) {\n return date.getDay();\n }\n function formatWeekNumberMonday(date, fill) {\n return pad(timeMonday.count(year.floor(date), date), fill, 2);\n }\n function formatDayOfMonth(date, fill) {\n return pad(date.getDate(), fill, 2);\n }\n function formatDayOfYear(date, fill) {\n return pad(1 + timeDay.count(year.floor(date), date), fill, 3);\n }\n function formatShortMonth(date) {\n return lShortMonths[date.getMonth()];\n }\n function formatMonth(date) {\n return lMonths[date.getMonth()];\n }\n function formatMonthNumber(date, fill) {\n return pad(date.getMonth() + 1, fill, 2);\n }\n function formatYear(date, fill) {\n return pad(date.getFullYear() % 100, fill, 2);\n }\n function formatFullYear(date, fill) {\n return pad(date.getFullYear() % 10000, fill, 4);\n }\n function formatZone(date) {\n var z = date.getTimezoneOffset();\n return (z > 0 ? '-' : (z *= -1, '+')) + pad(Math.floor(z / 60), '0', 2) + pad(z % 60, '0', 2);\n }\n // -------------------------- UTC formats -----------------------------------\n function formatUTCMicroseconds(date, fill) {\n return formatUTCMilliseconds(date, fill) + '000';\n }\n function formatUTCMilliseconds(date, fill) {\n return pad(date.getUTCMilliseconds(), fill, 3);\n }\n function formatUTCSeconds(date, fill) {\n return pad(date.getUTCSeconds(), fill, 2);\n }\n function formatUTCMinutes(date, fill) {\n return pad(date.getUTCMinutes(), fill, 2);\n }\n function formatUTCHour12(date, fill) {\n return pad(date.getUTCHours() % 12 || 12, fill, 2);\n }\n function formatUTCHour24(date, fill) {\n return pad(date.getUTCHours(), fill, 2);\n }\n function formatUTCPeriod(date) {\n return lPeriods[date.getUTCHours() >= 12 ? 1 : 0];\n }\n function formatUTCDayOfMonth(date, fill) {\n return pad(date.getUTCDate(), fill, 2);\n }\n function formatUTCDayOfYear(date, fill) {\n return pad(1 + utcDay.count(utcYear.floor(date), date), fill, 3);\n }\n function formatUTCMonthNumber(date, fill) {\n return pad(date.getUTCMonth() + 1, fill, 2);\n }\n function formatUTCShortMonth(date) {\n return lShortMonths[date.getUTCMonth()];\n }\n function formatUTCMonth(date) {\n return lMonths[date.getUTCMonth()];\n }\n function formatUTCShortWeekday(date) {\n return lShortWeekdays[date.getUTCDay()];\n }\n function formatUTCWeekday(date) {\n return lWeekdays[date.getUTCDay()];\n }\n function formatUTCWeekdayNumberMonday(date) {\n var dayOfWeek = date.getUTCDay();\n return dayOfWeek === 0 ? 7 : dayOfWeek;\n }\n function formatUTCWeekNumberSunday(date, fill) {\n return pad(utcSunday.count(utcYear.floor(date), date), fill, 2);\n }\n function formatUTCWeekNumberISO(date, fill) {\n var day = date.getUTCDay();\n date = (day >= 4 || day === 0) ? utcThursday.floor(date) : utcThursday.ceil(date);\n var yearStart = utcYear.floor(date);\n return pad(utcThursday.count(yearStart, date) + (yearStart.getUTCDay() === 4 ? 1 : 0), fill, 4);\n }\n function formatUTCWeekdayNumberSunday(date) {\n return date.getUTCDay();\n }\n function formatUTCWeekNumberMonday(date, fill) {\n return pad(utcMonday.count(utcYear.floor(date), date), fill, 2);\n }\n function formatUTCYear(date, fill) {\n return pad(date.getUTCFullYear() % 100, fill, 2);\n }\n function formatUTCFullYear(date, fill) {\n return pad(date.getUTCFullYear() % 10000, fill, 4);\n }\n function formatUTCZone() {\n return '+0000';\n }\n function formatLiteralPercent(date) {\n return '%';\n }\n function formatUnixTimestamp(date) {\n return date.getTime();\n }\n function formatUnixTimestampSeconds(date) {\n return Math.floor(date.getTime() / 1000);\n }\n // ------------------------------- parsers ------------------------------------\n function parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(parseFloat(n[0]) / 1000), i + n[0].length) : -1;\n }\n function parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n }\n function parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n }\n function parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n }\n function parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n }\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n }\n function parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n }\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n }\n function parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n }\n function parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n }\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n function parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = parseFloat(n[0]) - 1, i + n[0].length) : -1;\n }\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, lDateTime, string, i);\n }\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, lDate, string, i);\n }\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, lTime, string, i);\n }\n function parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n }\n function parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n }\n function parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n }\n function parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n }\n function parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || '00')), i + n[0].length) : -1;\n }\n function parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n return {\n format: function (specifier) {\n var f = newFormat(specifier, formats);\n f.toString = function () { return specifier; };\n return f;\n },\n parse: function (specifier) {\n var p = newParse(specifier, localDate);\n p.toString = function () { return specifier; };\n return p;\n },\n utcFormat: function (specifier) {\n var f = newFormat(specifier, utcFormats);\n f.toString = function () { return specifier; };\n return f;\n },\n utcParse: function (specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function () { return specifier; };\n return p;\n }\n };\n}\n","import formatLocale from './locale';\nexport var locale;\nsetDefaultLocale({\n dateTime: '%x, %X',\n date: '%-m/%-d/%Y',\n time: '%-I:%M:%S %p',\n periods: ['AM', 'PM'],\n days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n});\nexport default function setDefaultLocale(definition) {\n return locale = formatLocale(definition);\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport ContinuousScale from \"./continuousScale\";\nimport timeMillisecond from \"../util/time/millisecond\";\nimport timeSecond from \"../util/time/second\";\nimport timeMinute from \"../util/time/minute\";\nimport timeHour from \"../util/time/hour\";\nimport timeDay from \"../util/time/day\";\nimport timeWeek from \"../util/time/week\";\nimport timeMonth from \"../util/time/month\";\nimport timeYear from \"../util/time/year\";\nimport { durationSecond, durationMinute, durationHour, durationDay, durationWeek, durationMonth, durationYear } from \"../util/time/duration\";\nimport { complexBisectRight } from \"../util/bisect\";\nimport { tickStep } from \"../util/ticks\";\nimport { locale } from \"../util/time/format/defaultLocale\";\nvar TimeScale = /** @class */ (function (_super) {\n __extends(TimeScale, _super);\n function TimeScale() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.year = timeYear;\n _this.month = timeMonth;\n _this.week = timeWeek;\n _this.day = timeDay;\n _this.hour = timeHour;\n _this.minute = timeMinute;\n _this.second = timeSecond;\n _this.millisecond = timeMillisecond;\n _this.format = locale.format;\n /**\n * Array of default tick intervals in the following format:\n *\n * [\n * interval (unit of time),\n * number of units (step),\n * the length of that number of units in milliseconds\n * ]\n */\n _this.tickIntervals = [\n [_this.second, 1, durationSecond],\n [_this.second, 5, 5 * durationSecond],\n [_this.second, 15, 15 * durationSecond],\n [_this.second, 30, 30 * durationSecond],\n [_this.minute, 1, durationMinute],\n [_this.minute, 5, 5 * durationMinute],\n [_this.minute, 15, 15 * durationMinute],\n [_this.minute, 30, 30 * durationMinute],\n [_this.hour, 1, durationHour],\n [_this.hour, 3, 3 * durationHour],\n [_this.hour, 6, 6 * durationHour],\n [_this.hour, 12, 12 * durationHour],\n [_this.day, 1, durationDay],\n [_this.day, 2, 2 * durationDay],\n [_this.week, 1, durationWeek],\n [_this.month, 1, durationMonth],\n [_this.month, 3, 3 * durationMonth],\n [_this.year, 1, durationYear]\n ];\n _this.formatMillisecond = _this.format('.%L');\n _this.formatSecond = _this.format(':%S');\n _this.formatMinute = _this.format('%I:%M');\n _this.formatHour = _this.format('%I %p');\n _this.formatDay = _this.format('%a %d');\n _this.formatWeek = _this.format('%b %d');\n _this.formatMonth = _this.format('%B');\n _this.formatYear = _this.format('%Y');\n _this._domain = [new Date(2000, 0, 1), new Date(2000, 0, 2)];\n return _this;\n }\n TimeScale.prototype.defaultTickFormat = function (date) {\n return (this.second.floor(date) < date\n ? this.formatMillisecond\n : this.minute.floor(date) < date\n ? this.formatSecond\n : this.hour.floor(date) < date\n ? this.formatMinute\n : this.day.floor(date) < date\n ? this.formatHour\n : this.month.floor(date) < date\n ? (this.week.floor(date) < date ? this.formatDay : this.formatWeek)\n : this.year.floor(date) < date\n ? this.formatMonth\n : this.formatYear)(date);\n };\n /**\n *\n * @param interval If the `interval` is a number, it's interpreted as the desired tick count\n * and the method tries to pick an appropriate interval automatically, based on the extent of the domain.\n * If the `interval` is `undefined`, it defaults to `10`.\n * If the `interval` is a time interval, simply use it.\n * @param start The start time (timestamp).\n * @param stop The end time (timestamp).\n * @param step Number of intervals between ticks.\n */\n TimeScale.prototype.tickInterval = function (interval, start, stop, step) {\n var _a;\n if (interval === void 0) { interval = 10; }\n if (typeof interval === 'number') {\n var tickCount = interval;\n var tickIntervals = this.tickIntervals;\n var target = Math.abs(stop - start) / tickCount;\n var i = complexBisectRight(tickIntervals, target, function (interval) { return interval[2]; });\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, tickCount);\n interval = this.year;\n }\n else if (i) {\n _a = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i], interval = _a[0], step = _a[1];\n }\n else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = this.millisecond;\n }\n }\n return step == undefined ? interval : interval.every(step);\n };\n Object.defineProperty(TimeScale.prototype, \"domain\", {\n get: function () {\n return _super.prototype.getDomain.call(this).map(function (t) { return new Date(t); });\n },\n set: function (values) {\n _super.prototype.setDomain.call(this, Array.prototype.map.call(values, function (t) { return t instanceof Date ? +t : +new Date(+t); }));\n },\n enumerable: true,\n configurable: true\n });\n TimeScale.prototype.invert = function (y) {\n return new Date(_super.prototype.invert.call(this, y));\n };\n /**\n * Returns uniformly-spaced dates that represent the scale's domain.\n * @param interval The desired tick count or a time interval object.\n */\n TimeScale.prototype.ticks = function (interval) {\n if (interval === void 0) { interval = 10; }\n var d = _super.prototype.getDomain.call(this);\n var t0 = d[0];\n var t1 = d[d.length - 1];\n var reverse = t1 < t0;\n if (reverse) {\n var _ = t0;\n t0 = t1;\n t1 = _;\n }\n var t = this.tickInterval(interval, t0, t1);\n var i = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return reverse ? i.reverse() : i;\n };\n /**\n * Returns a time format function suitable for displaying tick values.\n * @param count Ignored. Used only to satisfy the {@link Scale} interface.\n * @param specifier If the specifier string is provided, this method is equivalent to\n * the {@link TimeLocaleObject.format} method.\n * If no specifier is provided, this method returns the default time format function.\n */\n TimeScale.prototype.tickFormat = function (count, specifier) {\n return specifier == undefined ? this.defaultTickFormat.bind(this) : this.format(specifier);\n };\n /**\n * Extends the domain so that it starts and ends on nice round values.\n * This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value.\n * @param interval\n */\n TimeScale.prototype.nice = function (interval) {\n if (interval === void 0) { interval = 10; }\n var d = _super.prototype.getDomain.call(this);\n var i = this.tickInterval(interval, d[0], d[d.length - 1]);\n if (i) {\n this.domain = this._nice(d, i);\n }\n };\n TimeScale.prototype._nice = function (domain, interval) {\n var _a, _b;\n domain = domain.slice();\n var i0 = 0;\n var i1 = domain.length - 1;\n var x0 = domain[i0];\n var x1 = domain[i1];\n if (x1 < x0) {\n _a = [i1, i0], i0 = _a[0], i1 = _a[1];\n _b = [x1, x0], x0 = _b[0], x1 = _b[1];\n }\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n };\n return TimeScale;\n}(ContinuousScale));\nexport { TimeScale };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { TimeScale } from \"../../scale/timeScale\";\nimport { ChartAxis } from \"../chartAxis\";\nvar TimeAxis = /** @class */ (function (_super) {\n __extends(TimeAxis, _super);\n function TimeAxis() {\n var _this = _super.call(this, new TimeScale()) || this;\n _this._nice = true;\n _this.scale.clamp = true;\n return _this;\n }\n Object.defineProperty(TimeAxis.prototype, \"nice\", {\n get: function () {\n return this._nice;\n },\n set: function (value) {\n if (this._nice !== value) {\n this._nice = value;\n if (value && this.scale.nice) {\n this.scale.nice(10);\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(TimeAxis.prototype, \"domain\", {\n get: function () {\n return this.scale.domain;\n },\n set: function (value) {\n this.scale.domain = value;\n if (this.nice && this.scale.nice) {\n this.scale.nice(10);\n }\n },\n enumerable: true,\n configurable: true\n });\n return TimeAxis;\n}(ChartAxis));\nexport { TimeAxis };\n","import { CartesianChart, CartesianChartLayout } from \"./chart/cartesianChart\";\nimport { PolarChart } from \"./chart/polarChart\";\nimport { LineSeries } from \"./chart/series/cartesian/lineSeries\";\nimport { ScatterSeries } from \"./chart/series/cartesian/scatterSeries\";\nimport { ColumnSeries as BarSeries } from \"./chart/series/cartesian/columnSeries\";\nimport { AreaSeries } from \"./chart/series/cartesian/areaSeries\";\nimport { PieSeries } from \"./chart/series/polar/pieSeries\";\nimport { DropShadow } from \"./scene/dropShadow\";\nimport { CategoryAxis } from \"./chart/axis/categoryAxis\";\nimport { NumberAxis } from \"./chart/axis/numberAxis\";\nimport { Padding } from \"./util/padding\";\nimport { Caption } from \"./caption\";\nimport { GroupedCategoryAxis } from \"./chart/axis/groupedCategoryAxis\";\nimport { GroupedCategoryChart } from \"./chart/groupedCategoryChart\";\nimport { Circle } from \"./chart/marker/circle\";\nimport { Cross } from \"./chart/marker/cross\";\nimport { Diamond } from \"./chart/marker/diamond\";\nimport { Plus } from \"./chart/marker/plus\";\nimport { Square } from \"./chart/marker/square\";\nimport { Triangle } from \"./chart/marker/triangle\";\nimport { ChartAxisPosition } from \"./chart/chartAxis\";\nimport { convertToMap } from \"./util/map\";\nimport { TimeAxis } from \"./chart/axis/timeAxis\";\nvar ChartBuilder = /** @class */ (function () {\n function ChartBuilder() {\n }\n ChartBuilder.createCartesianChart = function (parent, xAxis, yAxis, document) {\n var chart = new CartesianChart(document);\n chart.parent = parent;\n xAxis.position = ChartAxisPosition.Bottom;\n yAxis.position = ChartAxisPosition.Left;\n chart.axes = [xAxis, yAxis];\n return chart;\n };\n ChartBuilder.createGroupedCategoryChart = function (parent, xAxis, yAxis, document) {\n var chart = new GroupedCategoryChart(document);\n chart.parent = parent;\n xAxis.position = ChartAxisPosition.Bottom;\n yAxis.position = ChartAxisPosition.Left;\n chart.axes = [xAxis, yAxis];\n return chart;\n };\n ChartBuilder.createBarChart = function (parent, options) {\n var chart = this.createCartesianChart(parent, ChartBuilder.createNumberAxis(options.xAxis), ChartBuilder.createCategoryAxis(options.yAxis), options.document);\n chart.layout = CartesianChartLayout.Horizontal;\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initBarSeries(new BarSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createColumnChart = function (parent, options) {\n var chart = this.createCartesianChart(parent, ChartBuilder.createCategoryAxis(options.xAxis), ChartBuilder.createNumberAxis(options.yAxis), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initBarSeries(new BarSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createLineChart = function (parent, options) {\n var chart = this.createCartesianChart(parent, ChartBuilder.createAxis(options.xAxis, 'category'), ChartBuilder.createAxis(options.yAxis, 'number'), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initLineSeries(new LineSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createScatterChart = function (parent, options) {\n var chart = this.createCartesianChart(parent, ChartBuilder.createAxis(options.xAxis, 'number'), ChartBuilder.createAxis(options.yAxis, 'number'), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initScatterSeries(new ScatterSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createAreaChart = function (parent, options) {\n var chart = this.createCartesianChart(parent, ChartBuilder.createCategoryAxis(options.xAxis), ChartBuilder.createNumberAxis(options.yAxis), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initAreaSeries(new AreaSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createPolarChart = function (parent) {\n var chart = new PolarChart();\n chart.parent = parent;\n return chart;\n };\n ChartBuilder.createDoughnutChart = function (parent, options) {\n return this.createPieChart(parent, options);\n };\n ChartBuilder.createPieChart = function (parent, options) {\n var chart = this.createPolarChart(parent);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initPieSeries(new PieSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createGroupedColumnChart = function (parent, options) {\n var chart = this.createGroupedCategoryChart(parent, ChartBuilder.createGroupedAxis(options.xAxis), ChartBuilder.createNumberAxis(options.yAxis), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initBarSeries(new BarSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createGroupedBarChart = function (parent, options) {\n var chart = this.createGroupedCategoryChart(parent, ChartBuilder.createNumberAxis(options.xAxis), ChartBuilder.createGroupedAxis(options.yAxis), options.document);\n chart.layout = CartesianChartLayout.Horizontal;\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initBarSeries(new BarSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createGroupedLineChart = function (parent, options) {\n var chart = this.createGroupedCategoryChart(parent, ChartBuilder.createGroupedAxis(options.xAxis), ChartBuilder.createNumberAxis(options.yAxis), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initLineSeries(new LineSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createGroupedAreaChart = function (parent, options) {\n var chart = this.createGroupedCategoryChart(parent, ChartBuilder.createGroupedAxis(options.xAxis), ChartBuilder.createNumberAxis(options.yAxis), options.document);\n ChartBuilder.initChart(chart, options);\n if (options.series) {\n chart.series = options.series.map(function (s) { return ChartBuilder.initAreaSeries(new AreaSeries(), s); });\n }\n return chart;\n };\n ChartBuilder.createSeries = function (options) {\n switch (options && options.type) {\n case 'line':\n return ChartBuilder.initLineSeries(new LineSeries(), options);\n case 'scatter':\n return ChartBuilder.initScatterSeries(new ScatterSeries(), options);\n case 'bar':\n return ChartBuilder.initBarSeries(new BarSeries(), options);\n case 'area':\n return ChartBuilder.initAreaSeries(new AreaSeries(), options);\n case 'pie':\n return ChartBuilder.initPieSeries(new PieSeries(), options);\n default:\n return null;\n }\n };\n ChartBuilder.initChart = function (chart, options) {\n this.setValueIfExists(chart, 'width', options.width);\n this.setValueIfExists(chart, 'height', options.height);\n this.setValueIfExists(chart, 'tooltipClass', options.tooltipClass);\n this.setTransformedValueIfExists(chart, 'title', function (t) { return ChartBuilder.createTitle(t); }, options.title);\n this.setTransformedValueIfExists(chart, 'subtitle', function (t) { return ChartBuilder.createSubtitle(t); }, options.subtitle);\n this.setTransformedValueIfExists(chart, 'padding', function (p) { return new Padding(p.top, p.right, p.bottom, p.left); }, options.padding);\n if (options.background) {\n this.setValueIfExists(chart.background, 'fill', options.background.fill);\n this.setValueIfExists(chart.background, 'visible', options.background.visible);\n }\n if (options.legend !== undefined) {\n ChartBuilder.initLegend(chart.legend, options.legend);\n }\n return chart;\n };\n ChartBuilder.initSeries = function (series, options) {\n this.setValueIfExists(series, 'visible', options.visible);\n this.setValueIfExists(series, 'showInLegend', options.showInLegend);\n this.setValueIfExists(series, 'data', options.data);\n return series;\n };\n ChartBuilder.initLineSeries = function (series, options) {\n ChartBuilder.initSeries(series, options);\n this.setValueIfExists(series, 'title', options.title);\n var field = options.field, fill = options.fill, stroke = options.stroke, highlightStyle = options.highlightStyle, marker = options.marker, tooltip = options.tooltip;\n if (field) {\n this.setValueIfExists(series, 'xKey', field.xKey);\n this.setValueIfExists(series, 'xName', field.xName);\n this.setValueIfExists(series, 'yKey', field.yKey);\n this.setValueIfExists(series, 'yName', field.yName);\n }\n if (fill) {\n this.setValueIfExists(series, 'fill', fill.color);\n // default marker to same fill as series\n this.setValueIfExists(series.marker, 'fill', fill.color);\n }\n if (stroke) {\n this.setValueIfExists(series, 'stroke', stroke.color);\n this.setValueIfExists(series, 'strokeWidth', stroke.width);\n // default marker to same stroke as series\n this.setValueIfExists(series.marker, 'stroke', stroke.color);\n this.setValueIfExists(series.marker, 'strokeWidth', stroke.width);\n }\n if (highlightStyle) {\n this.initHighlightStyle(series.highlightStyle, highlightStyle);\n }\n if (marker) {\n this.initMarker(series.marker, marker);\n }\n if (tooltip) {\n this.setValueIfExists(series, 'tooltipEnabled', tooltip.enabled);\n this.setValueIfExists(series, 'tooltipRenderer', tooltip.renderer);\n }\n return series;\n };\n ChartBuilder.initScatterSeries = function (series, options) {\n ChartBuilder.initSeries(series, options);\n this.setValueIfExists(series, 'title', options.title);\n var field = options.field, fill = options.fill, stroke = options.stroke, highlightStyle = options.highlightStyle, marker = options.marker, tooltip = options.tooltip;\n if (field) {\n this.setValueIfExists(series, 'xKey', field.xKey);\n this.setValueIfExists(series, 'xName', field.xName);\n this.setValueIfExists(series, 'yKey', field.yKey);\n this.setValueIfExists(series, 'yName', field.yName);\n this.setValueIfExists(series, 'sizeKey', field.sizeKey);\n this.setValueIfExists(series, 'sizeName', field.sizeName);\n this.setValueIfExists(series, 'labelKey', field.labelKey);\n this.setValueIfExists(series, 'labelName', field.labelName);\n }\n if (fill) {\n // default marker to same fill as series\n this.setValueIfExists(series.marker, 'fill', fill.color);\n }\n if (stroke) {\n // default marker to same stroke as series\n this.setValueIfExists(series.marker, 'stroke', stroke.color);\n this.setValueIfExists(series.marker, 'strokeWidth', stroke.width);\n }\n if (highlightStyle) {\n this.initHighlightStyle(series.highlightStyle, highlightStyle);\n }\n if (marker) {\n this.initMarker(series.marker, marker);\n }\n if (tooltip) {\n this.setValueIfExists(series, 'tooltipEnabled', tooltip.enabled);\n this.setValueIfExists(series, 'tooltipRenderer', tooltip.renderer);\n }\n return series;\n };\n ChartBuilder.initLabelOptions = function (series, options) {\n this.setValueIfExists(series, 'enabled', options.enabled);\n this.setValueIfExists(series, 'fontStyle', options.fontStyle);\n this.setValueIfExists(series, 'fontWeight', options.fontWeight);\n this.setValueIfExists(series, 'fontSize', options.fontSize);\n this.setValueIfExists(series, 'fontFamily', options.fontFamily);\n this.setValueIfExists(series, 'color', options.color);\n };\n ChartBuilder.initBarSeries = function (series, options) {\n ChartBuilder.initSeries(series, options);\n this.setValueIfExists(series, 'grouped', options.grouped);\n this.setValueIfExists(series, 'normalizedTo', options.normalizedTo);\n var field = options.field, fill = options.fill, stroke = options.stroke, highlightStyle = options.highlightStyle, label = options.label, tooltip = options.tooltip;\n if (field) {\n this.setValueIfExists(series, 'xKey', field.xKey);\n this.setValueIfExists(series, 'yKeys', field.yKeys);\n this.setValueIfExists(series, 'yNames', field.yNames);\n }\n if (fill) {\n this.setValueIfExists(series, 'fills', fill.colors);\n this.setValueIfExists(series, 'fillOpacity', fill.opacity);\n }\n if (stroke) {\n this.setValueIfExists(series, 'strokes', stroke.colors);\n this.setValueIfExists(series, 'strokeOpacity', stroke.opacity);\n this.setValueIfExists(series, 'strokeWidth', stroke.width);\n }\n if (highlightStyle) {\n this.initHighlightStyle(series.highlightStyle, highlightStyle);\n }\n if (label) {\n ChartBuilder.initLabelOptions(series.label, label);\n this.setValueIfExists(series.label, 'enabled', label.enabled);\n this.setValueIfExists(series.label, 'formatter', label.formatter);\n }\n if (tooltip) {\n this.setValueIfExists(series, 'tooltipEnabled', tooltip.enabled);\n this.setValueIfExists(series, 'tooltipRenderer', tooltip.renderer);\n }\n this.setTransformedValueIfExists(series, 'shadow', function (s) { return ChartBuilder.createDropShadow(s); }, options.shadow);\n return series;\n };\n ChartBuilder.initAreaSeries = function (series, options) {\n ChartBuilder.initSeries(series, options);\n this.setValueIfExists(series, 'normalizedTo', options.normalizedTo);\n var field = options.field, fill = options.fill, stroke = options.stroke, highlightStyle = options.highlightStyle, marker = options.marker, tooltip = options.tooltip;\n if (field) {\n this.setValueIfExists(series, 'xKey', field.xKey);\n this.setValueIfExists(series, 'yKeys', field.yKeys);\n this.setValueIfExists(series, 'yNames', field.yNames);\n }\n if (fill) {\n this.setValueIfExists(series, 'fills', fill.colors);\n this.setValueIfExists(series, 'fillOpacity', fill.opacity);\n }\n if (stroke) {\n this.setValueIfExists(series, 'strokes', stroke.colors);\n this.setValueIfExists(series, 'strokeOpacity', stroke.opacity);\n this.setValueIfExists(series, 'strokeWidth', stroke.width);\n }\n if (highlightStyle) {\n this.initHighlightStyle(series.highlightStyle, highlightStyle);\n }\n if (marker) {\n this.initMarker(series.marker, marker);\n }\n if (tooltip) {\n this.setValueIfExists(series, 'tooltipEnabled', tooltip.enabled);\n this.setValueIfExists(series, 'tooltipRenderer', tooltip.renderer);\n }\n this.setTransformedValueIfExists(series, 'shadow', function (s) { return ChartBuilder.createDropShadow(s); }, options.shadow);\n return series;\n };\n ChartBuilder.initPieSeries = function (series, options) {\n ChartBuilder.initSeries(series, options);\n this.setTransformedValueIfExists(series, 'title', function (t) { return ChartBuilder.createPieTitle(t); }, options.title);\n this.setValueIfExists(series, 'rotation', options.rotation);\n this.setValueIfExists(series, 'outerRadiusOffset', options.outerRadiusOffset);\n this.setValueIfExists(series, 'innerRadiusOffset', options.innerRadiusOffset);\n var field = options.field, fill = options.fill, stroke = options.stroke, highlightStyle = options.highlightStyle, callout = options.callout, label = options.label, tooltip = options.tooltip;\n if (field) {\n this.setValueIfExists(series, 'angleKey', field.angleKey);\n this.setValueIfExists(series, 'angleName', field.angleName);\n this.setValueIfExists(series, 'radiusKey', field.radiusKey);\n this.setValueIfExists(series, 'radiusName', field.radiusName);\n this.setValueIfExists(series, 'labelKey', field.labelKey);\n this.setValueIfExists(series, 'labelName', field.labelName);\n }\n if (fill) {\n this.setValueIfExists(series, 'fills', fill.colors);\n this.setValueIfExists(series, 'fillOpacity', fill.opacity);\n }\n if (stroke) {\n this.setValueIfExists(series, 'strokes', stroke.colors);\n this.setValueIfExists(series, 'strokeOpacity', stroke.opacity);\n this.setValueIfExists(series, 'strokeWidth', stroke.width);\n }\n if (highlightStyle) {\n this.initHighlightStyle(series.highlightStyle, highlightStyle);\n }\n if (callout) {\n this.setValueIfExists(series, 'calloutColors', callout.colors);\n this.setValueIfExists(series, 'calloutStrokeWidth', callout.strokeWidth);\n this.setValueIfExists(series, 'calloutLength', callout.length);\n }\n if (label) {\n ChartBuilder.initLabelOptions(series.label, label);\n this.setValueIfExists(series.label, 'enabled', label.enabled);\n this.setValueIfExists(series.label, 'minAngle', label.minRequiredAngle);\n this.setValueIfExists(series.label, 'offset', label.offset);\n }\n if (tooltip) {\n this.setValueIfExists(series, 'tooltipEnabled', tooltip.enabled);\n this.setValueIfExists(series, 'tooltipRenderer', tooltip.renderer);\n }\n this.setTransformedValueIfExists(series, 'shadow', function (s) { return ChartBuilder.createDropShadow(s); }, options.shadow);\n return series;\n };\n ChartBuilder.getMarkerFromType = function (type) {\n return this.markerTypes.get(type) || Circle;\n };\n ChartBuilder.initLegend = function (legend, options) {\n this.setValueIfExists(legend, 'enabled', options.enabled);\n this.setValueIfExists(legend, 'position', options.position);\n var item = options.item;\n if (item) {\n var label = item.label, marker = item.marker;\n if (label) {\n this.setValueIfExists(legend, 'labelFontFamily', label.fontFamily);\n this.setValueIfExists(legend, 'labelFontSize', label.fontSize);\n this.setValueIfExists(legend, 'labelFontStyle', label.fontStyle);\n this.setValueIfExists(legend, 'labelFontWeight', label.fontWeight);\n this.setValueIfExists(legend, 'labelColor', label.color);\n }\n if (marker) {\n this.setValueIfExists(legend, 'markerType', ChartBuilder.getMarkerFromType(marker.type));\n this.setValueIfExists(legend, 'markerStrokeWidth', marker.strokeWidth);\n this.setValueIfExists(legend, 'markerSize', marker.size);\n this.setValueIfExists(legend, 'markerPadding', marker.padding);\n }\n this.setValueIfExists(legend, 'itemPaddingX', item.paddingX);\n this.setValueIfExists(legend, 'itemPaddingY', item.paddingY);\n }\n };\n ChartBuilder.initMarker = function (marker, options) {\n marker.type = ChartBuilder.getMarkerFromType(options.type);\n this.setValueIfExists(marker, 'enabled', options.enabled);\n this.setValueIfExists(marker, 'size', options.size);\n this.setValueIfExists(marker, 'minSize', options.minSize);\n this.setValueIfExists(marker, 'fill', options.fill);\n this.setValueIfExists(marker, 'stroke', options.stroke);\n this.setValueIfExists(marker, 'strokeWidth', options.strokeWidth);\n };\n ChartBuilder.initHighlightStyle = function (highlightStyle, options) {\n this.setValueIfExists(highlightStyle, 'fill', options.fill);\n this.setValueIfExists(highlightStyle, 'stroke', options.stroke);\n };\n ChartBuilder.setDefaultFontOptions = function (options, fontSize, fontWeight, fontFamily) {\n if (fontSize === void 0) { fontSize = 16; }\n if (fontWeight === void 0) { fontWeight = 'bold'; }\n if (fontFamily === void 0) { fontFamily = 'Verdana, sans-serif'; }\n if (options.fontSize === undefined) {\n options.fontSize = fontSize;\n }\n if (options.fontWeight === undefined) {\n options.fontWeight = fontWeight;\n }\n if (options.fontFamily === undefined) {\n options.fontFamily = fontFamily;\n }\n };\n ChartBuilder.createTitle = function (options) {\n options = Object.create(options);\n if (options.text === undefined) {\n options.text = '';\n }\n this.setDefaultFontOptions(options);\n return ChartBuilder.createCaption(options);\n };\n ChartBuilder.createSubtitle = function (options) {\n options = Object.create(options);\n if (options.text === undefined) {\n options.text = '';\n }\n this.setDefaultFontOptions(options, 12);\n return ChartBuilder.createCaption(options);\n };\n ChartBuilder.createPieTitle = function (options) {\n options = Object.create(options);\n this.setDefaultFontOptions(options, 12);\n return ChartBuilder.createCaption(options);\n };\n ChartBuilder.createCaption = function (options) {\n var caption = new Caption();\n this.setValueIfExists(caption, 'enabled', options.enabled);\n this.setValueIfExists(caption, 'text', options.text);\n this.setValueIfExists(caption, 'fontStyle', options.fontStyle);\n this.setValueIfExists(caption, 'fontWeight', options.fontWeight);\n this.setValueIfExists(caption, 'fontSize', options.fontSize);\n this.setValueIfExists(caption, 'fontFamily', options.fontFamily);\n this.setValueIfExists(caption, 'color', options.color);\n return caption;\n };\n ChartBuilder.initAxis = function (axis, options) {\n this.setTransformedValueIfExists(axis, 'title', function (t) { return ChartBuilder.createTitle(t); }, options.title);\n this.setValueIfExists(axis, 'gridStyle', options.gridStyle);\n var line = options.line, tick = options.tick, label = options.label;\n if (line) {\n this.setValueIfExists(axis.line, 'width', line.width);\n this.setValueIfExists(axis.line, 'color', line.color);\n }\n if (tick) {\n this.setValueIfExists(axis.tick, 'width', tick.width);\n this.setValueIfExists(axis.tick, 'size', tick.size);\n this.setValueIfExists(axis.tick, 'color', tick.color);\n }\n if (label) {\n this.setValueIfExists(axis.label, 'fontStyle', label.fontStyle);\n this.setValueIfExists(axis.label, 'fontWeight', label.fontWeight);\n this.setValueIfExists(axis.label, 'fontSize', label.fontSize);\n this.setValueIfExists(axis.label, 'fontFamily', label.fontFamily);\n this.setValueIfExists(axis.label, 'color', label.color);\n this.setValueIfExists(axis.label, 'padding', label.padding);\n this.setValueIfExists(axis.label, 'rotation', label.rotation);\n this.setValueIfExists(axis.label, 'format', label.format);\n this.setValueIfExists(axis.label, 'formatter', label.formatter);\n }\n };\n ChartBuilder.createNumberAxis = function (options) {\n var axis = new NumberAxis();\n this.initAxis(axis, options);\n return axis;\n };\n ChartBuilder.createCategoryAxis = function (options) {\n var axis = new CategoryAxis();\n this.initAxis(axis, options);\n return axis;\n };\n ChartBuilder.createGroupedAxis = function (options) {\n var axis = new GroupedCategoryAxis();\n this.initAxis(axis, options);\n return axis;\n };\n ChartBuilder.createTimeAxis = function (options) {\n var axis = new TimeAxis();\n this.initAxis(axis, options);\n return axis;\n };\n ChartBuilder.createAxis = function (options, defaultType) {\n var axis;\n switch (options.type || defaultType) {\n case 'category':\n axis = new CategoryAxis();\n break;\n case 'number':\n axis = new NumberAxis();\n break;\n case 'time':\n axis = new TimeAxis();\n break;\n default:\n throw new Error('Unknown axis type');\n }\n this.initAxis(axis, options);\n return axis;\n };\n ChartBuilder.setValueIfExists = function (target, property, value, transform) {\n if (value === undefined) {\n return;\n }\n target[property] = transform ? transform(value) : value;\n };\n ChartBuilder.setTransformedValueIfExists = function (target, property, transform, value) {\n if (value === undefined) {\n return;\n }\n target[property] = transform(value);\n };\n ChartBuilder.markerTypes = convertToMap([\n ['circle', Circle],\n ['cross', Cross],\n ['diamond', Diamond],\n ['plus', Plus],\n ['square', Square],\n ['triangle', Triangle]\n ]);\n ChartBuilder.createDropShadow = function (options) {\n if (options === void 0) { options = {}; }\n var shadow = new DropShadow();\n shadow.enabled = options.enabled == null ? true : options.enabled;\n shadow.xOffset = options.xOffset || 0;\n shadow.yOffset = options.yOffset || 0;\n shadow.blur = options.blur || 5;\n shadow.color = options.color || 'rgba(0, 0, 0, 0.5)';\n return shadow;\n };\n return ChartBuilder;\n}());\nexport { ChartBuilder };\n","export function convertToMap(list) {\n var map = new Map();\n list.forEach(function (_a) {\n var key = _a[0], value = _a[1];\n return map.set(key, value);\n });\n return map;\n}\n","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { _, Events, } from \"@ag-grid-community/core\";\nimport { palettes } from \"../../../charts/chart/palettes\";\nimport { DropShadow } from \"../../../charts/scene/dropShadow\";\nimport { Padding } from \"../../../charts/util/padding\";\nimport { CategoryAxis } from \"../../../charts/chart/axis/categoryAxis\";\nvar ChartProxy = /** @class */ (function () {\n function ChartProxy(chartProxyParams) {\n var _this = this;\n this.getChart = function () { return _this.chart; };\n this.isDarkTheme = function () { return _this.chartProxyParams.isDarkTheme(); };\n this.getFontColor = function () { return _this.isDarkTheme() ? 'rgb(221, 221, 221)' : 'rgb(87, 87, 87)'; };\n this.getAxisGridColor = function () { return _this.isDarkTheme() ? 'rgb(100, 100, 100)' : 'rgb(219, 219, 219)'; };\n this.getBackgroundColor = function () { return _this.isDarkTheme() ? '#2d3436' : 'white'; };\n this.getChartPaddingOption = function (property) { return _this.chartOptions.padding ? \"\" + _this.chartOptions.padding[property] : ''; };\n this.getShadowEnabled = function () { return !!_this.getShadowProperty('enabled'); };\n this.chartProxyParams = chartProxyParams;\n this.chartType = chartProxyParams.chartType;\n }\n ChartProxy.prototype.recreateChart = function (options) {\n if (this.chart) {\n this.destroyChart();\n }\n this.chart = this.createChart(options || this.chartOptions);\n };\n ChartProxy.prototype.initChartOptions = function () {\n var processChartOptions = this.chartProxyParams.processChartOptions;\n // allow users to override options before they are applied\n if (processChartOptions) {\n var params = { type: this.chartType, options: this.getDefaultOptions() };\n var overriddenOptions = processChartOptions(params);\n var safeOptions = this.getDefaultOptions();\n // ensure we have everything we need, in case the processing removed necessary options\n _.mergeDeep(safeOptions, overriddenOptions, false);\n this.overridePalette(safeOptions);\n this.chartOptions = safeOptions;\n }\n else {\n this.chartOptions = this.getDefaultOptions();\n }\n // we want to preserve the existing width/height if an existing chart is being changed to a different type,\n // so this allows the chart defaults to be overridden\n this.chartOptions.width = this.chartProxyParams.width || this.chartOptions.width;\n this.chartOptions.height = this.chartProxyParams.height || this.chartOptions.height;\n };\n ChartProxy.prototype.overridePalette = function (chartOptions) {\n if (!this.chartProxyParams.allowPaletteOverride) {\n return;\n }\n var _a = this.getPredefinedPalette(), defaultFills = _a.fills, defaultStrokes = _a.strokes;\n var seriesDefaults = chartOptions.seriesDefaults;\n var fills = seriesDefaults.fill.colors, strokes = seriesDefaults.stroke.colors;\n var fillsOverridden = fills && fills.length > 0 && fills !== defaultFills;\n var strokesOverridden = strokes && strokes.length > 0 && strokes !== defaultStrokes;\n if (fillsOverridden || strokesOverridden) {\n this.customPalette = {\n fills: fillsOverridden ? fills : defaultFills,\n strokes: strokesOverridden ? strokes : defaultStrokes\n };\n }\n };\n ChartProxy.prototype.getChartOptions = function () {\n return this.chartOptions;\n };\n ChartProxy.prototype.getCustomPalette = function () {\n return this.customPalette;\n };\n ChartProxy.prototype.getChartOption = function (expression) {\n return _.get(this.chartOptions, expression, undefined);\n };\n ChartProxy.prototype.setChartOption = function (expression, value) {\n _.set(this.chartOptions, expression, value);\n var mappings = {\n 'legend.item.marker.strokeWidth': 'legend.markerStrokeWidth',\n 'legend.item.marker.size': 'legend.markerSize',\n 'legend.item.marker.padding': 'legend.markerPadding',\n 'legend.item.label.fontFamily': 'legend.labelFontFamily',\n 'legend.item.label.fontStyle': 'legend.labelFontStyle',\n 'legend.item.label.fontWeight': 'legend.labelFontWeight',\n 'legend.item.label.fontSize': 'legend.labelFontSize',\n 'legend.item.label.color': 'legend.labelColor',\n 'legend.item.paddingX': 'legend.itemPaddingX',\n 'legend.item.paddingY': 'legend.itemPaddingY',\n };\n _.set(this.chart, mappings[expression] || expression, value);\n this.raiseChartOptionsChangedEvent();\n };\n ChartProxy.prototype.getSeriesOption = function (expression) {\n return _.get(this.chartOptions.seriesDefaults, expression, undefined);\n };\n ChartProxy.prototype.setSeriesOption = function (expression, value) {\n _.set(this.chartOptions.seriesDefaults, expression, value);\n var mappings = {\n 'stroke.width': 'strokeWidth',\n 'stroke.opacity': 'strokeOpacity',\n 'fill.opacity': 'fillOpacity',\n 'tooltip.enabled': 'tooltipEnabled',\n 'callout.colors': 'calloutColors',\n 'callout.strokeWidth': 'calloutStrokeWidth',\n 'callout.length': 'calloutLength',\n };\n var series = this.chart.series;\n series.forEach(function (s) { return _.set(s, mappings[expression] || expression, value); });\n this.raiseChartOptionsChangedEvent();\n };\n ChartProxy.prototype.setTitleOption = function (property, value) {\n this.chartOptions.title[property] = value;\n if (!this.chart.title) {\n this.chart.title = {};\n }\n this.chart.title[property] = value;\n if (property === 'text') {\n this.setTitleOption('enabled', _.exists(value));\n }\n this.raiseChartOptionsChangedEvent();\n };\n ChartProxy.prototype.setChartPaddingOption = function (property, value) {\n var padding = this.chartOptions.padding;\n if (!padding) {\n padding = this.chartOptions.padding = { top: 0, right: 0, bottom: 0, left: 0 };\n this.chart.padding = new Padding(0);\n }\n padding[property] = value;\n this.chart.padding[property] = value;\n this.chart.performLayout();\n this.raiseChartOptionsChangedEvent();\n };\n ChartProxy.prototype.getShadowProperty = function (property) {\n var seriesDefaults = this.chartOptions.seriesDefaults;\n return seriesDefaults.shadow ? seriesDefaults.shadow[property] : '';\n };\n ChartProxy.prototype.setShadowProperty = function (property, value) {\n var seriesDefaults = this.chartOptions.seriesDefaults;\n if (!seriesDefaults.shadow) {\n seriesDefaults.shadow = {\n enabled: false,\n blur: 0,\n xOffset: 0,\n yOffset: 0,\n color: 'rgba(0,0,0,0.5)'\n };\n }\n seriesDefaults.shadow[property] = value;\n var series = this.getChart().series;\n series.forEach(function (s) {\n if (!s.shadow) {\n var shadow = new DropShadow();\n shadow.enabled = false;\n shadow.blur = 0;\n shadow.xOffset = 0;\n shadow.yOffset = 0;\n shadow.color = 'rgba(0,0,0,0.5)';\n s.shadow = shadow;\n }\n s.shadow[property] = value;\n });\n this.raiseChartOptionsChangedEvent();\n };\n ChartProxy.prototype.raiseChartOptionsChangedEvent = function () {\n var event = Object.freeze({\n type: Events.EVENT_CHART_OPTIONS_CHANGED,\n chartType: this.chartType,\n chartPalette: this.chartProxyParams.getChartPaletteName(),\n chartOptions: this.chartOptions,\n });\n this.chartProxyParams.eventService.dispatchEvent(event);\n };\n ChartProxy.prototype.getDefaultFontOptions = function () {\n return {\n fontStyle: 'normal',\n fontWeight: 'normal',\n fontSize: 12,\n fontFamily: 'Verdana, sans-serif',\n color: this.getFontColor()\n };\n };\n ChartProxy.prototype.getDefaultDropShadowOptions = function () {\n return {\n enabled: false,\n blur: 5,\n xOffset: 3,\n yOffset: 3,\n color: 'rgba(0, 0, 0, 0.5)',\n };\n };\n ChartProxy.prototype.getPredefinedPalette = function () {\n return palettes.get(this.chartProxyParams.getChartPaletteName());\n };\n ChartProxy.prototype.getPalette = function () {\n return this.customPalette || this.getPredefinedPalette();\n };\n ChartProxy.prototype.getDefaultChartOptions = function () {\n var _a = this.getPredefinedPalette(), fills = _a.fills, strokes = _a.strokes;\n var fontOptions = this.getDefaultFontOptions();\n return {\n background: {\n fill: this.getBackgroundColor(),\n visible: true,\n },\n width: 800,\n height: 400,\n padding: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n title: __assign(__assign({}, fontOptions), { enabled: false, fontWeight: 'bold', fontSize: 16 }),\n subtitle: __assign(__assign({}, fontOptions), { enabled: false }),\n legend: {\n enabled: true,\n position: 'right',\n padding: 20,\n item: {\n label: __assign({}, fontOptions),\n marker: {\n type: 'square',\n size: 15,\n padding: 8,\n strokeWidth: 1,\n },\n paddingX: 16,\n paddingY: 8,\n },\n },\n seriesDefaults: {\n fill: {\n colors: fills,\n opacity: 1,\n },\n stroke: {\n colors: strokes,\n opacity: 1,\n width: 1,\n },\n highlightStyle: {\n fill: 'yellow',\n }\n }\n };\n };\n ChartProxy.prototype.transformData = function (data, categoryKey) {\n if (this.chart.axes.filter(function (a) { return a instanceof CategoryAxis; }).length < 1) {\n return data;\n }\n // replace the values for the selected category with a complex object to allow for duplicated categories\n return data.map(function (d, index) {\n var value = d[categoryKey];\n var valueString = value && value.toString ? value.toString() : '';\n var datum = __assign({}, d);\n datum[categoryKey] = { id: index, value: value, toString: function () { return valueString; } };\n return datum;\n });\n };\n ChartProxy.prototype.destroy = function () {\n this.destroyChart();\n };\n ChartProxy.prototype.destroyChart = function () {\n var parentElement = this.chartProxyParams.parentElement;\n var canvas = parentElement.querySelector('canvas');\n if (canvas) {\n parentElement.removeChild(canvas);\n }\n // store current width and height so any charts created in the future maintain the size\n if (this.chart) {\n this.chartOptions.width = this.chart.width;\n this.chartOptions.height = this.chart.height;\n this.chart.destroy();\n this.chart = null;\n }\n };\n return ChartProxy;\n}());\nexport { ChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartProxy } from \"../chartProxy\";\nimport { _ } from \"@ag-grid-community/core\";\nimport { ChartDataModel } from \"../../chartDataModel\";\nimport { ChartAxisPosition } from \"../../../../charts/chart/chartAxis\";\nimport { find } from \"../../../../charts/util/array\";\nvar CartesianChartProxy = /** @class */ (function (_super) {\n __extends(CartesianChartProxy, _super);\n function CartesianChartProxy(params) {\n return _super.call(this, params) || this;\n }\n CartesianChartProxy.prototype.getAxisProperty = function (expression) {\n return _.get(this.chartOptions.xAxis, expression, undefined);\n };\n CartesianChartProxy.prototype.setAxisProperty = function (expression, value) {\n _.set(this.chartOptions.xAxis, expression, value);\n _.set(this.chartOptions.yAxis, expression, value);\n var chart = this.chart;\n this.chart.axes.forEach(function (axis) { return _.set(axis, expression, value); });\n chart.performLayout();\n this.raiseChartOptionsChangedEvent();\n };\n CartesianChartProxy.prototype.updateLabelRotation = function (categoryId, isHorizontalChart) {\n if (isHorizontalChart === void 0) { isHorizontalChart = false; }\n var labelRotation = 0;\n var axisKey = isHorizontalChart ? 'yAxis' : 'xAxis';\n if (categoryId !== ChartDataModel.DEFAULT_CATEGORY && !this.chartProxyParams.grouping) {\n var label = this.chartOptions[axisKey].label;\n if (label && label.rotation) {\n labelRotation = label.rotation;\n }\n }\n var axisPosition = isHorizontalChart ? ChartAxisPosition.Left : ChartAxisPosition.Bottom;\n var axis = find(this.chart.axes, function (axis) { return axis.position === axisPosition; });\n if (axis) {\n axis.label.rotation = labelRotation;\n }\n };\n CartesianChartProxy.prototype.getDefaultAxisOptions = function () {\n var fontOptions = this.getDefaultFontOptions();\n var stroke = this.getAxisGridColor();\n var axisColor = \"rgba(195, 195, 195, 1)\";\n return {\n title: __assign(__assign({}, fontOptions), { enabled: false, fontSize: 14 }),\n line: {\n color: axisColor,\n width: 1,\n },\n tick: {\n color: axisColor,\n size: 6,\n width: 1,\n },\n label: __assign(__assign({}, fontOptions), { padding: 5, rotation: 0 }),\n gridStyle: [{\n stroke: stroke,\n lineDash: [4, 2]\n }]\n };\n };\n CartesianChartProxy.prototype.getDefaultCartesianChartOptions = function () {\n var options = this.getDefaultChartOptions();\n options.xAxis = this.getDefaultAxisOptions();\n options.yAxis = this.getDefaultAxisOptions();\n return options;\n };\n return CartesianChartProxy;\n}(ChartProxy));\nexport { CartesianChartProxy };\n","export function isDate(value) {\n return value instanceof Date;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartType, _ } from \"@ag-grid-community/core\";\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { ChartDataModel } from \"../../chartDataModel\";\nimport { CartesianChartProxy } from \"./cartesianChartProxy\";\nimport { TimeAxis } from \"../../../../charts/chart/axis/timeAxis\";\nimport { NumberAxis } from \"../../../../charts/chart/axis/numberAxis\";\nimport { isDate } from \"../../typeChecker\";\nvar ScatterChartProxy = /** @class */ (function (_super) {\n __extends(ScatterChartProxy, _super);\n function ScatterChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.getMarkersEnabled = function () { return true; }; // markers are always enabled on scatter charts\n _this.initChartOptions();\n _this.recreateChart();\n return _this;\n }\n ScatterChartProxy.prototype.createChart = function (options) {\n return ChartBuilder.createScatterChart(this.chartProxyParams.parentElement, options);\n };\n ScatterChartProxy.prototype.update = function (params) {\n if (params.fields.length < 2) {\n this.chart.removeAllSeries();\n return;\n }\n var fields = params.fields;\n var seriesDefaults = this.chartOptions.seriesDefaults;\n var seriesDefinitions = this.getSeriesDefinitions(fields, seriesDefaults.paired);\n this.updateAxes(params.data[0], seriesDefinitions.map(function (d) { return d.xField.colId; }));\n var chart = this.chart;\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n var seriesOptions = __assign({ type: \"scatter\" }, seriesDefaults);\n var labelFieldDefinition = params.category.id === ChartDataModel.DEFAULT_CATEGORY ? undefined : params.category;\n var existingSeriesById = chart.series.reduceRight(function (map, series, i) {\n var matchingIndex = _.findIndex(seriesDefinitions, function (s) {\n return s.xField.colId === series.xKey &&\n s.yField.colId === series.yKey &&\n ((!s.sizeField && !series.sizeKey) || (s.sizeField && s.sizeField.colId === series.sizeKey));\n });\n if (matchingIndex === i) {\n map.set(series.yKey, series);\n }\n else {\n chart.removeSeries(series);\n }\n return map;\n }, new Map());\n var previousSeries = undefined;\n seriesDefinitions.forEach(function (seriesDefinition, index) {\n var existingSeries = existingSeriesById.get(seriesDefinition.yField.colId);\n var series = existingSeries || ChartBuilder.createSeries(seriesOptions);\n if (!series) {\n return;\n }\n var xFieldDefinition = seriesDefinition.xField, yFieldDefinition = seriesDefinition.yField, sizeFieldDefinition = seriesDefinition.sizeField;\n series.title = yFieldDefinition.displayName + \" vs \" + xFieldDefinition.displayName;\n series.xKey = xFieldDefinition.colId;\n series.xName = xFieldDefinition.displayName;\n series.yKey = yFieldDefinition.colId;\n series.yName = yFieldDefinition.displayName;\n series.data = params.data;\n series.fill = fills[index % fills.length];\n series.stroke = strokes[index % strokes.length];\n if (sizeFieldDefinition) {\n series.sizeKey = sizeFieldDefinition.colId;\n series.sizeName = sizeFieldDefinition.displayName;\n }\n else {\n series.sizeKey = series.sizeName = undefined;\n }\n if (labelFieldDefinition) {\n series.labelKey = labelFieldDefinition.id;\n series.labelName = labelFieldDefinition.name;\n }\n else {\n series.labelKey = series.labelName = undefined;\n }\n if (!existingSeries) {\n chart.addSeriesAfter(series, previousSeries);\n }\n previousSeries = series;\n });\n };\n ScatterChartProxy.prototype.updateAxes = function (testDatum, xKeys) {\n var chartOptions = this.chartOptions;\n if (chartOptions.xAxis.type) {\n return;\n }\n var xAxis = this.chart.axes.filter(function (a) { return a.position === 'bottom'; })[0];\n if (!xAxis) {\n return;\n }\n var xValuesAreDates = xKeys.map(function (xKey) { return testDatum && testDatum[xKey]; }).every(function (test) { return isDate(test); });\n if (xValuesAreDates && !(xAxis instanceof TimeAxis)) {\n var options = __assign(__assign({}, this.chartOptions), { xAxis: __assign(__assign({}, this.chartOptions.xAxis), { type: 'time' }) });\n this.recreateChart(options);\n }\n else if (!xValuesAreDates && !(xAxis instanceof NumberAxis)) {\n this.recreateChart();\n }\n };\n ScatterChartProxy.prototype.getTooltipsEnabled = function () {\n return this.chartOptions.seriesDefaults.tooltip != null && !!this.chartOptions.seriesDefaults.tooltip.enabled;\n };\n ScatterChartProxy.prototype.getDefaultOptions = function () {\n var isBubble = this.chartType === ChartType.Bubble;\n var options = this.getDefaultCartesianChartOptions();\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { fill: __assign(__assign({}, options.seriesDefaults.fill), { opacity: isBubble ? 0.7 : 1 }), stroke: __assign(__assign({}, options.seriesDefaults.stroke), { width: 3 }), marker: {\n type: 'circle',\n enabled: true,\n size: isBubble ? 30 : 6,\n minSize: isBubble ? 6 : undefined,\n strokeWidth: 1,\n }, tooltip: {\n enabled: true,\n }, paired: false });\n return options;\n };\n ScatterChartProxy.prototype.getSeriesDefinitions = function (fields, paired) {\n if (fields.length < 2) {\n return [];\n }\n var isBubbleChart = this.chartType === ChartType.Bubble;\n if (paired) {\n if (isBubbleChart) {\n return fields.map(function (xField, i) { return i % 3 === 0 ? ({\n xField: xField,\n yField: fields[i + 1],\n sizeField: fields[i + 2],\n }) : null; }).filter(function (x) { return x && x.yField && x.sizeField; });\n }\n else {\n return fields.map(function (xField, i) { return i % 2 === 0 ? ({\n xField: xField,\n yField: fields[i + 1],\n }) : null; }).filter(function (x) { return x && x.yField; });\n }\n }\n else {\n var xField_1 = fields[0];\n if (isBubbleChart) {\n return fields\n .map(function (yField, i) { return i % 2 === 1 ? ({\n xField: xField_1,\n yField: yField,\n sizeField: fields[i + 1],\n }) : null; })\n .filter(function (x) { return x && x.sizeField; });\n }\n else {\n return fields.filter(function (_, i) { return i > 0; }).map(function (yField) { return ({ xField: xField_1, yField: yField }); });\n }\n }\n };\n return ScatterChartProxy;\n}(CartesianChartProxy));\nexport { ScatterChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector, ChartType } from \"@ag-grid-community/core\";\nimport { ScatterChartProxy } from \"../../../chartProxies/cartesian/scatterChartProxy\";\nvar MarkersPanel = /** @class */ (function (_super) {\n __extends(MarkersPanel, _super);\n function MarkersPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n MarkersPanel.prototype.init = function () {\n this.setTemplate(MarkersPanel.TEMPLATE);\n this.initMarkers();\n };\n MarkersPanel.prototype.initMarkers = function () {\n var _this = this;\n // scatter charts should always show markers\n var shouldHideEnabledCheckbox = this.chartController.getChartProxy() instanceof ScatterChartProxy;\n this.seriesMarkersGroup\n .setTitle(this.chartTranslator.translate(\"markers\"))\n .hideEnabledCheckbox(shouldHideEnabledCheckbox)\n .setEnabled(this.chartController.getChartProxy().getSeriesOption(\"marker.enabled\") || false)\n .hideOpenCloseIcons(true)\n .onEnableChange(function (newValue) { return _this.chartController.getChartProxy().setSeriesOption(\"marker.enabled\", newValue); });\n var initInput = function (expression, input, labelKey, maxValue) {\n input.setLabel(_this.chartTranslator.translate(labelKey))\n .setValue(_this.chartController.getChartProxy().getSeriesOption(expression))\n .setMaxValue(maxValue)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setSeriesOption(expression, newValue); });\n };\n if (this.chartController.getChartType() === ChartType.Bubble) {\n initInput(\"marker.minSize\", this.seriesMarkerMinSizeSlider, \"minSize\", 60);\n initInput(\"marker.size\", this.seriesMarkerSizeSlider, \"maxSize\", 60);\n }\n else {\n this.seriesMarkerMinSizeSlider.setDisplayed(false);\n initInput(\"marker.size\", this.seriesMarkerSizeSlider, \"size\", 60);\n }\n initInput(\"marker.strokeWidth\", this.seriesMarkerStrokeWidthSlider, \"strokeWidth\", 10);\n };\n MarkersPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesMarkersGroup')\n ], MarkersPanel.prototype, \"seriesMarkersGroup\", void 0);\n __decorate([\n RefSelector('seriesMarkerSizeSlider')\n ], MarkersPanel.prototype, \"seriesMarkerSizeSlider\", void 0);\n __decorate([\n RefSelector('seriesMarkerMinSizeSlider')\n ], MarkersPanel.prototype, \"seriesMarkerMinSizeSlider\", void 0);\n __decorate([\n RefSelector('seriesMarkerStrokeWidthSlider')\n ], MarkersPanel.prototype, \"seriesMarkerStrokeWidthSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], MarkersPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], MarkersPanel.prototype, \"init\", null);\n return MarkersPanel;\n}(Component));\nexport { MarkersPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { MarkersPanel } from \"./markersPanel\";\nvar LineSeriesPanel = /** @class */ (function (_super) {\n __extends(LineSeriesPanel, _super);\n function LineSeriesPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n LineSeriesPanel.prototype.init = function () {\n this.setTemplate(LineSeriesPanel.TEMPLATE);\n this.initSeriesGroup();\n this.initSeriesTooltips();\n this.initSeriesLineWidth();\n this.initMarkersPanel();\n };\n LineSeriesPanel.prototype.initSeriesGroup = function () {\n this.seriesGroup\n .setTitle(this.chartTranslator.translate(\"series\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n };\n LineSeriesPanel.prototype.initSeriesTooltips = function () {\n var _this = this;\n this.seriesTooltipsToggle\n .setLabel(this.chartTranslator.translate(\"tooltips\"))\n .setLabelAlignment(\"left\")\n .setLabelWidth(\"flex\")\n .setInputWidth(40)\n .setValue(this.getChartProxy().getSeriesOption(\"tooltip.enabled\") || false)\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"tooltip.enabled\", newValue); });\n };\n LineSeriesPanel.prototype.initSeriesLineWidth = function () {\n var _this = this;\n this.seriesLineWidthSlider\n .setLabel(this.chartTranslator.translate('lineWidth'))\n .setMaxValue(10)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.width\"))\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.width\", newValue); });\n };\n LineSeriesPanel.prototype.initMarkersPanel = function () {\n var markersPanelComp = this.wireBean(new MarkersPanel(this.chartController));\n this.seriesGroup.addItem(markersPanelComp);\n this.activePanels.push(markersPanelComp);\n };\n LineSeriesPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n LineSeriesPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n LineSeriesPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n LineSeriesPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesGroup')\n ], LineSeriesPanel.prototype, \"seriesGroup\", void 0);\n __decorate([\n RefSelector('seriesTooltipsToggle')\n ], LineSeriesPanel.prototype, \"seriesTooltipsToggle\", void 0);\n __decorate([\n RefSelector('seriesLineWidthSlider')\n ], LineSeriesPanel.prototype, \"seriesLineWidthSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], LineSeriesPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], LineSeriesPanel.prototype, \"init\", null);\n return LineSeriesPanel;\n}(Component));\nexport { LineSeriesPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nvar CalloutPanel = /** @class */ (function (_super) {\n __extends(CalloutPanel, _super);\n function CalloutPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n CalloutPanel.prototype.init = function () {\n this.setTemplate(CalloutPanel.TEMPLATE);\n this.initCalloutOptions();\n };\n CalloutPanel.prototype.initCalloutOptions = function () {\n var _this = this;\n this.calloutGroup\n .setTitle(this.chartTranslator.translate(\"callout\"))\n .setEnabled(true)\n .hideOpenCloseIcons(true)\n .hideEnabledCheckbox(true);\n var initInput = function (expression, input, labelKey, maxValue) {\n input.setLabel(_this.chartTranslator.translate(labelKey))\n .setValue(_this.chartController.getChartProxy().getSeriesOption(expression))\n .setMaxValue(maxValue)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setSeriesOption(expression, newValue); });\n };\n initInput(\"callout.length\", this.calloutLengthSlider, \"length\", 40);\n initInput(\"callout.strokeWidth\", this.calloutStrokeWidthSlider, \"strokeWidth\", 10);\n initInput(\"label.offset\", this.labelOffsetSlider, \"offset\", 30);\n };\n CalloutPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('calloutGroup')\n ], CalloutPanel.prototype, \"calloutGroup\", void 0);\n __decorate([\n RefSelector('calloutLengthSlider')\n ], CalloutPanel.prototype, \"calloutLengthSlider\", void 0);\n __decorate([\n RefSelector('calloutStrokeWidthSlider')\n ], CalloutPanel.prototype, \"calloutStrokeWidthSlider\", void 0);\n __decorate([\n RefSelector('labelOffsetSlider')\n ], CalloutPanel.prototype, \"labelOffsetSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], CalloutPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], CalloutPanel.prototype, \"init\", null);\n return CalloutPanel;\n}(Component));\nexport { CalloutPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { ShadowPanel } from \"./shadowPanel\";\nimport { FontPanel } from \"../fontPanel\";\nimport { CalloutPanel } from \"./calloutPanel\";\nvar PieSeriesPanel = /** @class */ (function (_super) {\n __extends(PieSeriesPanel, _super);\n function PieSeriesPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n PieSeriesPanel.prototype.init = function () {\n this.setTemplate(PieSeriesPanel.TEMPLATE);\n this.initGroup();\n this.initSeriesTooltips();\n this.initSeriesStrokeWidth();\n this.initOpacity();\n this.initLabelPanel();\n this.initShadowPanel();\n };\n PieSeriesPanel.prototype.initGroup = function () {\n this.seriesGroup\n .setTitle(this.chartTranslator.translate(\"series\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n };\n PieSeriesPanel.prototype.initSeriesTooltips = function () {\n var _this = this;\n this.seriesTooltipsToggle\n .setLabel(this.chartTranslator.translate(\"tooltips\"))\n .setLabelAlignment(\"left\")\n .setLabelWidth(\"flex\")\n .setInputWidth(40)\n .setValue(this.getChartProxy().getSeriesOption(\"tooltip.enabled\") || false)\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"tooltip.enabled\", newValue); });\n };\n PieSeriesPanel.prototype.initSeriesStrokeWidth = function () {\n var _this = this;\n this.seriesStrokeWidthSlider\n .setLabel(this.chartTranslator.translate(\"strokeWidth\"))\n .setMaxValue(10)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.width\"))\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.width\", newValue); });\n };\n PieSeriesPanel.prototype.initOpacity = function () {\n var _this = this;\n this.seriesLineOpacitySlider\n .setLabel(this.chartTranslator.translate(\"strokeOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.opacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.opacity\", newValue); });\n this.seriesFillOpacitySlider\n .setLabel(this.chartTranslator.translate(\"fillOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"fillOpacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"fillOpacity\", newValue); });\n };\n PieSeriesPanel.prototype.initLabelPanel = function () {\n var _this = this;\n var chartProxy = this.getChartProxy();\n var initialFont = {\n family: chartProxy.getSeriesOption(\"label.fontFamily\"),\n style: chartProxy.getSeriesOption(\"label.fontStyle\"),\n weight: chartProxy.getSeriesOption(\"label.fontWeight\"),\n size: chartProxy.getSeriesOption(\"label.fontSize\"),\n color: chartProxy.getSeriesOption(\"label.color\")\n };\n var setFont = function (font) {\n var chartProxy = _this.getChartProxy();\n if (font.family) {\n chartProxy.setSeriesOption(\"label.fontFamily\", font.family);\n }\n if (font.weight) {\n chartProxy.setSeriesOption(\"label.fontWeight\", font.weight);\n }\n if (font.style) {\n chartProxy.setSeriesOption(\"label.fontStyle\", font.style);\n }\n if (font.size) {\n chartProxy.setSeriesOption(\"label.fontSize\", font.size);\n }\n if (font.color) {\n chartProxy.setSeriesOption(\"label.color\", font.color);\n }\n };\n var params = {\n name: this.chartTranslator.translate('labels'),\n enabled: chartProxy.getSeriesOption(\"label.enabled\") || false,\n setEnabled: function (enabled) { return _this.getChartProxy().setSeriesOption(\"label.enabled\", enabled); },\n suppressEnabledCheckbox: false,\n initialFont: initialFont,\n setFont: setFont\n };\n var labelPanelComp = this.wireBean(new FontPanel(params));\n this.activePanels.push(labelPanelComp);\n var calloutPanelComp = this.wireBean(new CalloutPanel(this.chartController));\n labelPanelComp.addCompToPanel(calloutPanelComp);\n this.activePanels.push(calloutPanelComp);\n this.seriesGroup.addItem(labelPanelComp);\n };\n PieSeriesPanel.prototype.initShadowPanel = function () {\n var shadowPanelComp = this.wireBean(new ShadowPanel(this.chartController));\n this.seriesGroup.getGui().appendChild(shadowPanelComp.getGui());\n this.seriesGroup.addItem(shadowPanelComp);\n };\n PieSeriesPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n PieSeriesPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n PieSeriesPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n PieSeriesPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesGroup')\n ], PieSeriesPanel.prototype, \"seriesGroup\", void 0);\n __decorate([\n RefSelector('seriesTooltipsToggle')\n ], PieSeriesPanel.prototype, \"seriesTooltipsToggle\", void 0);\n __decorate([\n RefSelector('seriesStrokeWidthSlider')\n ], PieSeriesPanel.prototype, \"seriesStrokeWidthSlider\", void 0);\n __decorate([\n RefSelector('seriesLineOpacitySlider')\n ], PieSeriesPanel.prototype, \"seriesLineOpacitySlider\", void 0);\n __decorate([\n RefSelector('seriesFillOpacitySlider')\n ], PieSeriesPanel.prototype, \"seriesFillOpacitySlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], PieSeriesPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], PieSeriesPanel.prototype, \"init\", null);\n return PieSeriesPanel;\n}(Component));\nexport { PieSeriesPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nvar PaddingPanel = /** @class */ (function (_super) {\n __extends(PaddingPanel, _super);\n function PaddingPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n PaddingPanel.prototype.init = function () {\n this.setTemplate(PaddingPanel.TEMPLATE);\n this.initGroup();\n this.initChartPaddingItems();\n };\n PaddingPanel.prototype.initGroup = function () {\n this.chartPaddingGroup\n .setTitle(this.chartTranslator.translate(\"padding\"))\n .hideOpenCloseIcons(true)\n .hideEnabledCheckbox(true);\n };\n PaddingPanel.prototype.initChartPaddingItems = function () {\n var _this = this;\n var initInput = function (property, input) {\n input.setLabel(_this.chartTranslator.translate(property))\n .setValue(_this.chartController.getChartProxy().getChartPaddingOption(property))\n .setMaxValue(200)\n .setTextFieldWidth(45)\n .onValueChange(function (newValue) { return _this.chartController.getChartProxy().setChartPaddingOption(property, newValue); });\n };\n initInput('top', this.paddingTopSlider);\n initInput('right', this.paddingRightSlider);\n initInput('bottom', this.paddingBottomSlider);\n initInput('left', this.paddingLeftSlider);\n };\n PaddingPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('chartPaddingGroup')\n ], PaddingPanel.prototype, \"chartPaddingGroup\", void 0);\n __decorate([\n RefSelector('paddingTopSlider')\n ], PaddingPanel.prototype, \"paddingTopSlider\", void 0);\n __decorate([\n RefSelector('paddingRightSlider')\n ], PaddingPanel.prototype, \"paddingRightSlider\", void 0);\n __decorate([\n RefSelector('paddingBottomSlider')\n ], PaddingPanel.prototype, \"paddingBottomSlider\", void 0);\n __decorate([\n RefSelector('paddingLeftSlider')\n ], PaddingPanel.prototype, \"paddingLeftSlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], PaddingPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], PaddingPanel.prototype, \"init\", null);\n return PaddingPanel;\n}(Component));\nexport { PaddingPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nvar BackgroundPanel = /** @class */ (function (_super) {\n __extends(BackgroundPanel, _super);\n function BackgroundPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.chartController = chartController;\n return _this;\n }\n BackgroundPanel.prototype.init = function () {\n this.setTemplate(BackgroundPanel.TEMPLATE);\n this.initGroup();\n this.initColorPicker();\n };\n BackgroundPanel.prototype.initGroup = function () {\n var _this = this;\n this.group\n .setTitle(this.chartTranslator.translate('background'))\n .setEnabled(this.chartController.getChartProxy().getChartOption('background.visible'))\n .hideOpenCloseIcons(true)\n .hideEnabledCheckbox(false)\n .onEnableChange(function (enabled) { return _this.chartController.getChartProxy().setChartOption('background.visible', enabled); });\n };\n BackgroundPanel.prototype.initColorPicker = function () {\n var _this = this;\n this.colorPicker\n .setLabel(this.chartTranslator.translate('color'))\n .setLabelWidth('flex')\n .setInputWidth(45)\n .setValue(this.chartController.getChartProxy().getChartOption('background.fill'))\n .onValueChange(function (newColor) { return _this.chartController.getChartProxy().setChartOption('background.fill', newColor); });\n };\n BackgroundPanel.TEMPLATE = \"
\\n \\n \\n \\n
\";\n __decorate([\n RefSelector('chartBackgroundGroup')\n ], BackgroundPanel.prototype, \"group\", void 0);\n __decorate([\n RefSelector('colorPicker')\n ], BackgroundPanel.prototype, \"colorPicker\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], BackgroundPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], BackgroundPanel.prototype, \"init\", null);\n return BackgroundPanel;\n}(Component));\nexport { BackgroundPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { PaddingPanel } from \"./paddingPanel\";\nimport { FontPanel } from \"../fontPanel\";\nimport { BackgroundPanel } from \"./backgroundPanel\";\nvar ChartPanel = /** @class */ (function (_super) {\n __extends(ChartPanel, _super);\n function ChartPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n ChartPanel.prototype.init = function () {\n this.setTemplate(ChartPanel.TEMPLATE);\n this.initGroup();\n this.initTitles();\n this.initPaddingPanel();\n this.initBackgroundPanel();\n };\n ChartPanel.prototype.initGroup = function () {\n this.chartGroup\n .setTitle(this.chartTranslator.translate('chart'))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n };\n ChartPanel.prototype.initTitles = function () {\n var _this = this;\n var chartProxy = this.chartController.getChartProxy();\n var title = chartProxy.getChartOption('title');\n var text = title && title.text ? title.text : '';\n var setFont = function (font) {\n var chartProxy = _this.chartController.getChartProxy();\n if (font.family) {\n chartProxy.setTitleOption('fontFamily', font.family);\n }\n if (font.weight) {\n chartProxy.setTitleOption('fontWeight', font.weight);\n }\n if (font.style) {\n chartProxy.setTitleOption('fontStyle', font.style);\n }\n if (font.size) {\n chartProxy.setTitleOption('fontSize', font.size);\n }\n if (font.color) {\n chartProxy.setTitleOption('color', font.color);\n }\n };\n var initialFont = {\n family: title ? chartProxy.getChartOption('title.fontFamily') : 'Verdana, sans-serif',\n style: title ? chartProxy.getChartOption('title.fontStyle') : undefined,\n weight: title ? chartProxy.getChartOption('title.fontWeight') : undefined,\n size: title ? chartProxy.getChartOption('title.fontSize') : 22,\n color: title ? chartProxy.getChartOption('title.color') : 'black'\n };\n if (!title) {\n setFont(initialFont);\n }\n this.titleInput\n .setLabel(this.chartTranslator.translate('title'))\n .setLabelAlignment('top')\n .setLabelWidth('flex')\n .setValue(text)\n .onValueChange(function (value) {\n _this.chartController.getChartProxy().setTitleOption('text', value);\n // only show font panel when title exists\n fontPanelComp.setEnabled(_.exists(value));\n });\n var params = {\n name: this.chartTranslator.translate('font'),\n enabled: true,\n suppressEnabledCheckbox: true,\n initialFont: initialFont,\n setFont: setFont,\n };\n var fontPanelComp = this.wireBean(new FontPanel(params));\n this.chartGroup.addItem(fontPanelComp);\n this.activePanels.push(fontPanelComp);\n fontPanelComp.setEnabled(_.exists(text));\n };\n ChartPanel.prototype.initPaddingPanel = function () {\n var paddingPanelComp = this.wireBean(new PaddingPanel(this.chartController));\n this.chartGroup.addItem(paddingPanelComp);\n this.activePanels.push(paddingPanelComp);\n };\n ChartPanel.prototype.initBackgroundPanel = function () {\n var backgroundPanelComp = this.wireBean(new BackgroundPanel(this.chartController));\n this.chartGroup.addItem(backgroundPanelComp);\n this.activePanels.push(backgroundPanelComp);\n };\n ChartPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n ChartPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n ChartPanel.TEMPLATE = \"
\\n \\n \\n \\n
\";\n __decorate([\n RefSelector('chartGroup')\n ], ChartPanel.prototype, \"chartGroup\", void 0);\n __decorate([\n RefSelector('titleInput')\n ], ChartPanel.prototype, \"titleInput\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], ChartPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], ChartPanel.prototype, \"init\", null);\n return ChartPanel;\n}(Component));\nexport { ChartPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { MarkersPanel } from \"./markersPanel\";\nimport { ShadowPanel } from \"./shadowPanel\";\nvar AreaSeriesPanel = /** @class */ (function (_super) {\n __extends(AreaSeriesPanel, _super);\n function AreaSeriesPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n AreaSeriesPanel.prototype.init = function () {\n this.setTemplate(AreaSeriesPanel.TEMPLATE);\n this.initSeriesGroup();\n this.initSeriesTooltips();\n this.initSeriesLineWidth();\n this.initOpacity();\n this.initMarkersPanel();\n this.initShadowPanel();\n };\n AreaSeriesPanel.prototype.initSeriesGroup = function () {\n this.seriesGroup\n .setTitle(this.chartTranslator.translate(\"series\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n };\n AreaSeriesPanel.prototype.initSeriesTooltips = function () {\n var _this = this;\n this.seriesTooltipsToggle\n .setLabel(this.chartTranslator.translate(\"tooltips\"))\n .setLabelAlignment(\"left\")\n .setLabelWidth(\"flex\")\n .setInputWidth(40)\n .setValue(this.getChartProxy().getSeriesOption(\"tooltip.enabled\") || false)\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"tooltip.enabled\", newValue); });\n };\n AreaSeriesPanel.prototype.initSeriesLineWidth = function () {\n var _this = this;\n this.seriesLineWidthSlider\n .setLabel(this.chartTranslator.translate(\"lineWidth\"))\n .setMaxValue(10)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.width\"))\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.width\", newValue); });\n };\n AreaSeriesPanel.prototype.initOpacity = function () {\n var _this = this;\n this.seriesLineOpacitySlider\n .setLabel(this.chartTranslator.translate(\"strokeOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"stroke.opacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"stroke.opacity\", newValue); });\n this.seriesFillOpacitySlider\n .setLabel(this.chartTranslator.translate(\"fillOpacity\"))\n .setStep(0.05)\n .setMaxValue(1)\n .setTextFieldWidth(45)\n .setValue(this.getChartProxy().getSeriesOption(\"fill.opacity\") || \"1\")\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"fill.opacity\", newValue); });\n };\n AreaSeriesPanel.prototype.initMarkersPanel = function () {\n var markersPanelComp = this.wireBean(new MarkersPanel(this.chartController));\n this.seriesGroup.addItem(markersPanelComp);\n this.activePanels.push(markersPanelComp);\n };\n AreaSeriesPanel.prototype.initShadowPanel = function () {\n var shadowPanelComp = this.wireBean(new ShadowPanel(this.chartController));\n this.seriesGroup.addItem(shadowPanelComp);\n this.activePanels.push(shadowPanelComp);\n };\n AreaSeriesPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n AreaSeriesPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n AreaSeriesPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n AreaSeriesPanel.TEMPLATE = \"
\\n \\n \\n \\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesGroup')\n ], AreaSeriesPanel.prototype, \"seriesGroup\", void 0);\n __decorate([\n RefSelector('seriesTooltipsToggle')\n ], AreaSeriesPanel.prototype, \"seriesTooltipsToggle\", void 0);\n __decorate([\n RefSelector('seriesLineWidthSlider')\n ], AreaSeriesPanel.prototype, \"seriesLineWidthSlider\", void 0);\n __decorate([\n RefSelector('seriesLineOpacitySlider')\n ], AreaSeriesPanel.prototype, \"seriesLineOpacitySlider\", void 0);\n __decorate([\n RefSelector('seriesFillOpacitySlider')\n ], AreaSeriesPanel.prototype, \"seriesFillOpacitySlider\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], AreaSeriesPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], AreaSeriesPanel.prototype, \"init\", null);\n return AreaSeriesPanel;\n}(Component));\nexport { AreaSeriesPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { MarkersPanel } from \"./markersPanel\";\nvar ScatterSeriesPanel = /** @class */ (function (_super) {\n __extends(ScatterSeriesPanel, _super);\n function ScatterSeriesPanel(chartController) {\n var _this = _super.call(this) || this;\n _this.activePanels = [];\n _this.chartController = chartController;\n return _this;\n }\n ScatterSeriesPanel.prototype.init = function () {\n this.setTemplate(ScatterSeriesPanel.TEMPLATE);\n this.initSeriesGroup();\n this.initSeriesTooltips();\n this.initMarkersPanel();\n };\n ScatterSeriesPanel.prototype.initSeriesGroup = function () {\n this.seriesGroup\n .setTitle(this.chartTranslator.translate(\"series\"))\n .toggleGroupExpand(false)\n .hideEnabledCheckbox(true);\n };\n ScatterSeriesPanel.prototype.initSeriesTooltips = function () {\n var _this = this;\n this.seriesTooltipsToggle\n .setLabel(this.chartTranslator.translate(\"tooltips\"))\n .setLabelAlignment(\"left\")\n .setLabelWidth(\"flex\")\n .setInputWidth(40)\n .setValue(this.getChartProxy().getSeriesOption(\"tooltip.enabled\") || false)\n .onValueChange(function (newValue) { return _this.getChartProxy().setSeriesOption(\"tooltip.enabled\", newValue); });\n };\n ScatterSeriesPanel.prototype.initMarkersPanel = function () {\n var markersPanelComp = this.wireBean(new MarkersPanel(this.chartController));\n this.seriesGroup.addItem(markersPanelComp);\n this.activePanels.push(markersPanelComp);\n };\n ScatterSeriesPanel.prototype.destroyActivePanels = function () {\n this.activePanels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n ScatterSeriesPanel.prototype.getChartProxy = function () {\n return this.chartController.getChartProxy();\n };\n ScatterSeriesPanel.prototype.destroy = function () {\n this.destroyActivePanels();\n _super.prototype.destroy.call(this);\n };\n ScatterSeriesPanel.TEMPLATE = \"
\\n \\n \\n \\n
\";\n __decorate([\n RefSelector('seriesGroup')\n ], ScatterSeriesPanel.prototype, \"seriesGroup\", void 0);\n __decorate([\n RefSelector('seriesTooltipsToggle')\n ], ScatterSeriesPanel.prototype, \"seriesTooltipsToggle\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], ScatterSeriesPanel.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], ScatterSeriesPanel.prototype, \"init\", null);\n return ScatterSeriesPanel;\n}(Component));\nexport { ScatterSeriesPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, ChartType, Component, PostConstruct } from \"@ag-grid-community/core\";\nimport { ChartController } from \"../../chartController\";\nimport { LegendPanel } from \"./legend/legendPanel\";\nimport { BarSeriesPanel } from \"./series/barSeriesPanel\";\nimport { AxisPanel } from \"./axis/axisPanel\";\nimport { LineSeriesPanel } from \"./series/lineSeriesPanel\";\nimport { PieSeriesPanel } from \"./series/pieSeriesPanel\";\nimport { ChartPanel } from \"./chart/chartPanel\";\nimport { AreaSeriesPanel } from \"./series/areaSeriesPanel\";\nimport { ScatterSeriesPanel } from \"./series/scatterSeriesPanel\";\nvar ChartFormattingPanel = /** @class */ (function (_super) {\n __extends(ChartFormattingPanel, _super);\n function ChartFormattingPanel(chartController) {\n var _this = _super.call(this, ChartFormattingPanel.TEMPLATE) || this;\n _this.panels = [];\n _this.chartController = chartController;\n return _this;\n }\n ChartFormattingPanel.prototype.init = function () {\n this.createPanels();\n this.addDestroyableEventListener(this.chartController, ChartController.EVENT_CHART_UPDATED, this.createPanels.bind(this));\n };\n ChartFormattingPanel.prototype.createPanels = function () {\n var chartType = this.chartController.getChartType();\n if (chartType === this.chartType) {\n // same chart type, so keep existing panels\n return;\n }\n this.destroyPanels();\n this.addComponent(new ChartPanel(this.chartController));\n this.addComponent(new LegendPanel(this.chartController));\n switch (chartType) {\n case ChartType.GroupedColumn:\n case ChartType.StackedColumn:\n case ChartType.NormalizedColumn:\n case ChartType.GroupedBar:\n case ChartType.StackedBar:\n case ChartType.NormalizedBar:\n this.addComponent(new AxisPanel(this.chartController));\n this.addComponent(new BarSeriesPanel(this.chartController));\n break;\n case ChartType.Pie:\n case ChartType.Doughnut:\n this.addComponent(new PieSeriesPanel(this.chartController));\n break;\n case ChartType.Line:\n this.addComponent(new AxisPanel(this.chartController));\n this.addComponent(new LineSeriesPanel(this.chartController));\n break;\n case ChartType.Scatter:\n case ChartType.Bubble:\n this.addComponent(new AxisPanel(this.chartController));\n this.addComponent(new ScatterSeriesPanel(this.chartController));\n break;\n case ChartType.Area:\n case ChartType.StackedArea:\n case ChartType.NormalizedArea:\n this.addComponent(new AxisPanel(this.chartController));\n this.addComponent(new AreaSeriesPanel(this.chartController));\n break;\n default:\n console.warn(\"ag-Grid: ChartFormattingPanel - unexpected chart type index: \" + chartType + \" supplied\");\n }\n this.chartType = chartType;\n };\n ChartFormattingPanel.prototype.addComponent = function (component) {\n this.wireBean(component);\n this.panels.push(component);\n this.getGui().appendChild(component.getGui());\n };\n ChartFormattingPanel.prototype.destroyPanels = function () {\n this.panels.forEach(function (panel) {\n _.removeFromParent(panel.getGui());\n panel.destroy();\n });\n };\n ChartFormattingPanel.prototype.destroy = function () {\n this.destroyPanels();\n _super.prototype.destroy.call(this);\n };\n ChartFormattingPanel.TEMPLATE = \"
\";\n __decorate([\n PostConstruct\n ], ChartFormattingPanel.prototype, \"init\", null);\n return ChartFormattingPanel;\n}(Component));\nexport { ChartFormattingPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Component, PostConstruct } from \"@ag-grid-community/core\";\nimport { Group } from \"../../../../../charts/scene/group\";\nimport { Scene } from \"../../../../../charts/scene/scene\";\nvar MiniChart = /** @class */ (function (_super) {\n __extends(MiniChart, _super);\n function MiniChart(parent, tooltipName) {\n var _this = _super.call(this) || this;\n _this.size = 58;\n _this.padding = 5;\n _this.root = new Group();\n var scene = new Scene();\n scene.width = _this.size;\n scene.height = _this.size;\n scene.root = _this.root;\n scene.parent = parent;\n _this.scene = scene;\n _this.tooltipName = tooltipName;\n return _this;\n }\n MiniChart.prototype.init = function () {\n this.scene.canvas.element.title = this.chartTranslator.translate(this.tooltipName);\n };\n __decorate([\n Autowired('chartTranslator')\n ], MiniChart.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], MiniChart.prototype, \"init\", null);\n return MiniChart;\n}(Component));\nexport { MiniChart };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { PostConstruct } from \"@ag-grid-community/core\";\nimport { MiniChart } from \"./miniChart\";\nimport { Line } from \"../../../../../charts/scene/shape/line\";\nvar MiniChartWithAxes = /** @class */ (function (_super) {\n __extends(MiniChartWithAxes, _super);\n function MiniChartWithAxes(parent, tooltipName) {\n var _this = _super.call(this, parent, tooltipName) || this;\n _this.stroke = 'gray';\n _this.axisOvershoot = 3;\n return _this;\n }\n MiniChartWithAxes.prototype.addAxes = function () {\n var size = this.size;\n var padding = this.padding;\n var leftAxis = new Line();\n leftAxis.x1 = padding;\n leftAxis.y1 = padding;\n leftAxis.x2 = padding;\n leftAxis.y2 = size - padding + this.axisOvershoot;\n leftAxis.stroke = this.stroke;\n var bottomAxis = new Line();\n bottomAxis.x1 = padding - this.axisOvershoot + 1;\n bottomAxis.y1 = size - padding;\n bottomAxis.x2 = size - padding + 1;\n bottomAxis.y2 = size - padding;\n bottomAxis.stroke = this.stroke;\n var root = this.root;\n root.append(leftAxis);\n root.append(bottomAxis);\n };\n __decorate([\n PostConstruct\n ], MiniChartWithAxes.prototype, \"addAxes\", null);\n return MiniChartWithAxes;\n}(MiniChart));\nexport { MiniChartWithAxes };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Rect } from \"../../../../../charts/scene/shape/rect\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nvar MiniColumn = /** @class */ (function (_super) {\n __extends(MiniColumn, _super);\n function MiniColumn(parent, fills, strokes) {\n var _this = _super.call(this, parent, \"groupedColumnTooltip\") || this;\n var padding = _this.padding;\n var size = _this.size;\n var data = [2, 3, 4];\n var xScale = new BandScale();\n xScale.domain = [0, 1, 2];\n xScale.range = [padding, size - padding];\n xScale.paddingInner = 0.3;\n xScale.paddingOuter = 0.3;\n var yScale = linearScale();\n yScale.domain = [0, 4];\n yScale.range = [size - padding, padding];\n var bottom = yScale.convert(0);\n var width = xScale.bandwidth;\n _this.bars = data.map(function (datum, i) {\n var top = yScale.convert(datum);\n var rect = new Rect();\n rect.x = xScale.convert(i);\n rect.y = top;\n rect.width = width;\n rect.height = bottom - top;\n rect.strokeWidth = 1;\n rect.crisp = true;\n return rect;\n });\n _this.updateColors(fills, strokes);\n _this.root.append(_this.bars);\n return _this;\n }\n MiniColumn.prototype.updateColors = function (fills, strokes) {\n this.bars.forEach(function (bar, i) {\n bar.fill = fills[i];\n bar.stroke = strokes[i];\n });\n };\n MiniColumn.chartType = ChartType.GroupedColumn;\n return MiniColumn;\n}(MiniChartWithAxes));\nexport { MiniColumn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Rect } from \"../../../../../charts/scene/shape/rect\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nvar MiniStackedColumn = /** @class */ (function (_super) {\n __extends(MiniStackedColumn, _super);\n function MiniStackedColumn(parent, fills, strokes, data, yScaleDomain, tooltipName) {\n if (data === void 0) { data = MiniStackedColumn.data; }\n if (yScaleDomain === void 0) { yScaleDomain = [0, 16]; }\n if (tooltipName === void 0) { tooltipName = \"stackedColumnTooltip\"; }\n var _this = _super.call(this, parent, tooltipName) || this;\n var padding = _this.padding;\n var size = _this.size;\n var xScale = new BandScale();\n xScale.domain = [0, 1, 2];\n xScale.range = [padding, size - padding];\n xScale.paddingInner = 0.3;\n xScale.paddingOuter = 0.3;\n var yScale = linearScale();\n yScale.domain = yScaleDomain;\n yScale.range = [size - padding, padding];\n var bottom = yScale.convert(0);\n var width = xScale.bandwidth;\n _this.bars = data.map(function (series) {\n return series.map(function (datum, i) {\n var top = yScale.convert(datum);\n var rect = new Rect();\n rect.x = xScale.convert(i);\n rect.y = top;\n rect.width = width;\n rect.height = bottom - top;\n rect.strokeWidth = 1;\n rect.crisp = true;\n return rect;\n });\n });\n _this.updateColors(fills, strokes);\n _this.root.append([].concat.apply([], _this.bars));\n return _this;\n }\n MiniStackedColumn.prototype.updateColors = function (fills, strokes) {\n this.bars.forEach(function (series, i) {\n return series.forEach(function (bar) {\n bar.fill = fills[i];\n bar.stroke = strokes[i];\n });\n });\n };\n MiniStackedColumn.chartType = ChartType.StackedColumn;\n MiniStackedColumn.data = [\n [8, 12, 16],\n [6, 9, 12],\n [2, 3, 4]\n ];\n return MiniStackedColumn;\n}(MiniChartWithAxes));\nexport { MiniStackedColumn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniStackedColumn } from \"./miniStackedColumn\";\nvar MiniNormalizedColumn = /** @class */ (function (_super) {\n __extends(MiniNormalizedColumn, _super);\n function MiniNormalizedColumn(parent, fills, strokes) {\n return _super.call(this, parent, fills, strokes, MiniNormalizedColumn.data, [0, 10], \"normalizedColumnTooltip\") || this;\n }\n MiniNormalizedColumn.chartType = ChartType.NormalizedColumn;\n MiniNormalizedColumn.data = [\n [10, 10, 10],\n [6, 7, 8],\n [2, 4, 6]\n ];\n return MiniNormalizedColumn;\n}(MiniStackedColumn));\nexport { MiniNormalizedColumn };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Rect } from \"../../../../../charts/scene/shape/rect\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nvar MiniBar = /** @class */ (function (_super) {\n __extends(MiniBar, _super);\n function MiniBar(parent, fills, strokes) {\n var _this = _super.call(this, parent, \"groupedBarTooltip\") || this;\n var padding = _this.padding;\n var size = _this.size;\n var data = [2, 3, 4];\n var yScale = new BandScale();\n yScale.domain = [0, 1, 2];\n yScale.range = [padding, size - padding];\n yScale.paddingInner = 0.3;\n yScale.paddingOuter = 0.3;\n var xScale = linearScale();\n xScale.domain = [0, 4];\n xScale.range = [size - padding, padding];\n var bottom = xScale.convert(0);\n var height = yScale.bandwidth;\n _this.bars = data.map(function (datum, i) {\n var rect = new Rect();\n rect.x = padding;\n rect.y = yScale.convert(i);\n rect.width = bottom - xScale.convert(datum);\n rect.height = height;\n rect.strokeWidth = 1;\n rect.crisp = true;\n return rect;\n });\n _this.updateColors(fills, strokes);\n _this.root.append(_this.bars);\n return _this;\n }\n MiniBar.prototype.updateColors = function (fills, strokes) {\n this.bars.forEach(function (bar, i) {\n bar.fill = fills[i];\n bar.stroke = strokes[i];\n });\n };\n MiniBar.chartType = ChartType.GroupedBar;\n return MiniBar;\n}(MiniChartWithAxes));\nexport { MiniBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Rect } from \"../../../../../charts/scene/shape/rect\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nvar MiniStackedBar = /** @class */ (function (_super) {\n __extends(MiniStackedBar, _super);\n function MiniStackedBar(parent, fills, strokes, data, xScaleDomain, tooltipName) {\n if (data === void 0) { data = MiniStackedBar.data; }\n if (xScaleDomain === void 0) { xScaleDomain = [0, 16]; }\n if (tooltipName === void 0) { tooltipName = \"stackedBarTooltip\"; }\n var _this = _super.call(this, parent, tooltipName) || this;\n var size = _this.size;\n var padding = _this.padding;\n var yScale = new BandScale();\n yScale.domain = [0, 1, 2];\n yScale.range = [padding, size - padding];\n yScale.paddingInner = 0.3;\n yScale.paddingOuter = 0.3;\n var xScale = linearScale();\n xScale.domain = xScaleDomain;\n xScale.range = [size - padding, padding];\n var bottom = xScale.convert(0);\n var height = yScale.bandwidth;\n _this.bars = data.map(function (series) {\n return series.map(function (datum, i) {\n var rect = new Rect();\n rect.x = padding;\n rect.y = yScale.convert(i);\n rect.width = bottom - xScale.convert(datum);\n rect.height = height;\n rect.strokeWidth = 1;\n rect.crisp = true;\n return rect;\n });\n });\n _this.updateColors(fills, strokes);\n _this.root.append([].concat.apply([], _this.bars));\n return _this;\n }\n MiniStackedBar.prototype.updateColors = function (fills, strokes) {\n this.bars.forEach(function (series, i) {\n return series.forEach(function (bar) {\n bar.fill = fills[i];\n bar.stroke = strokes[i];\n });\n });\n };\n MiniStackedBar.chartType = ChartType.StackedBar;\n MiniStackedBar.data = [\n [8, 12, 16],\n [6, 9, 12],\n [2, 3, 4]\n ];\n return MiniStackedBar;\n}(MiniChartWithAxes));\nexport { MiniStackedBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniStackedBar } from \"./miniStackedBar\";\nvar MiniNormalizedBar = /** @class */ (function (_super) {\n __extends(MiniNormalizedBar, _super);\n function MiniNormalizedBar(parent, fills, strokes) {\n return _super.call(this, parent, fills, strokes, MiniNormalizedBar.data, [0, 10], \"normalizedBarTooltip\") || this;\n }\n MiniNormalizedBar.chartType = ChartType.NormalizedBar;\n MiniNormalizedBar.data = [\n [10, 10, 10],\n [6, 7, 8],\n [2, 4, 6]\n ];\n return MiniNormalizedBar;\n}(MiniStackedBar));\nexport { MiniNormalizedBar };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChart } from \"./miniChart\";\nimport { Sector } from \"../../../../../charts/scene/shape/sector\";\nimport { toRadians } from \"../../../../../charts/util/angle\";\nvar MiniDoughnut = /** @class */ (function (_super) {\n __extends(MiniDoughnut, _super);\n function MiniDoughnut(parent, fills, strokes, centerRadiusScaler, tooltipName) {\n if (centerRadiusScaler === void 0) { centerRadiusScaler = 0.6; }\n if (tooltipName === void 0) { tooltipName = \"doughnutTooltip\"; }\n var _this = _super.call(this, parent, tooltipName) || this;\n var radius = (_this.size - _this.padding * 2) / 2;\n var center = radius + _this.padding;\n var angles = [\n [toRadians(-90), toRadians(30)],\n [toRadians(30), toRadians(120)],\n [toRadians(120), toRadians(180)],\n [toRadians(180), toRadians(210)],\n [toRadians(210), toRadians(240)],\n [toRadians(240), toRadians(270)]\n ];\n _this.sectors = angles.map(function (_a) {\n var startAngle = _a[0], endAngle = _a[1];\n var sector = new Sector();\n sector.centerX = center;\n sector.centerY = center;\n sector.innerRadius = radius * centerRadiusScaler;\n sector.outerRadius = radius;\n sector.startAngle = startAngle;\n sector.endAngle = endAngle;\n sector.stroke = undefined;\n return sector;\n });\n _this.updateColors(fills, strokes);\n _this.root.append(_this.sectors);\n return _this;\n }\n MiniDoughnut.prototype.updateColors = function (fills, strokes) {\n this.sectors.forEach(function (sector, i) {\n sector.fill = fills[i % fills.length];\n sector.stroke = strokes[i % strokes.length];\n });\n };\n MiniDoughnut.chartType = ChartType.Doughnut;\n return MiniDoughnut;\n}(MiniChart));\nexport { MiniDoughnut };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniDoughnut } from \"./miniDoughnut\";\nvar MiniPie = /** @class */ (function (_super) {\n __extends(MiniPie, _super);\n function MiniPie(parent, fills, strokes) {\n return _super.call(this, parent, fills, strokes, 0, \"pieTooltip\") || this;\n }\n MiniPie.chartType = ChartType.Pie;\n return MiniPie;\n}(MiniDoughnut));\nexport { MiniPie };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Node } from \"./node\";\nimport { Path2D } from \"./path2D\";\n/**\n * Acts as `Group` node but with specified bounds that form a rectangle.\n * Any parts of the child nodes outside that rectangle will not be visible.\n * Unlike the `Group` node, the `ClipRect` node cannot be transformed.\n */\nvar ClipRect = /** @class */ (function (_super) {\n __extends(ClipRect, _super);\n function ClipRect() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.isContainerNode = true;\n _this.path = new Path2D();\n _this._active = true;\n _this._dirtyPath = true;\n _this._x = 0;\n _this._y = 0;\n _this._width = 10;\n _this._height = 10;\n return _this;\n }\n ClipRect.prototype.isPointInNode = function (x, y) {\n var point = this.transformPoint(x, y);\n return point.x >= this.x && point.x <= this.x + this.width\n && point.y >= this.y && point.y <= this.y + this.height;\n };\n Object.defineProperty(ClipRect.prototype, \"active\", {\n get: function () {\n return this._active;\n },\n set: function (value) {\n if (this._active !== value) {\n this._active = value;\n this.dirty = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ClipRect.prototype, \"dirtyPath\", {\n get: function () {\n return this._dirtyPath;\n },\n set: function (value) {\n if (this._dirtyPath !== value) {\n this._dirtyPath = value;\n if (value) {\n this.dirty = true;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ClipRect.prototype, \"x\", {\n get: function () {\n return this._x;\n },\n set: function (value) {\n if (this._x !== value) {\n this._x = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ClipRect.prototype, \"y\", {\n get: function () {\n return this._y;\n },\n set: function (value) {\n if (this._y !== value) {\n this._y = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ClipRect.prototype, \"width\", {\n get: function () {\n return this._width;\n },\n set: function (value) {\n if (this._width !== value) {\n this._width = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(ClipRect.prototype, \"height\", {\n get: function () {\n return this._height;\n },\n set: function (value) {\n if (this._height !== value) {\n this._height = value;\n this.dirtyPath = true;\n }\n },\n enumerable: true,\n configurable: true\n });\n ClipRect.prototype.updatePath = function () {\n var path = this.path;\n path.clear();\n path.rect(this.x, this.y, this.width, this.height);\n this.dirtyPath = false;\n };\n ClipRect.prototype.render = function (ctx) {\n if (this.active) {\n if (this.dirtyPath) {\n this.updatePath();\n }\n this.scene.appendPath(this.path);\n ctx.clip();\n }\n var children = this.children;\n var n = children.length;\n for (var i = 0; i < n; i++) {\n ctx.save();\n var child = children[i];\n if (child.visible) {\n child.render(ctx);\n }\n ctx.restore();\n }\n };\n ClipRect.className = 'ClipRect';\n return ClipRect;\n}(Node));\nexport { ClipRect };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Path } from \"../../../../../charts/scene/shape/path\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { ClipRect } from \"../../../../../charts/scene/clipRect\";\nvar MiniLine = /** @class */ (function (_super) {\n __extends(MiniLine, _super);\n function MiniLine(parent, fills, strokes) {\n var _this = _super.call(this, parent, \"lineTooltip\") || this;\n var size = _this.size;\n var padding = _this.padding;\n var xScale = linearScale();\n xScale.domain = [0, 4];\n xScale.range = [padding, size - padding];\n var yScale = linearScale();\n yScale.domain = [0, 10];\n yScale.range = [size - padding, padding];\n var data = [\n [9, 7, 8, 5, 6],\n [5, 6, 3, 4, 1],\n [1, 3, 4, 8, 7]\n ];\n _this.lines = data.map(function (series) {\n var line = new Path();\n line.strokeWidth = 3;\n line.lineCap = \"round\";\n line.fill = undefined;\n series.forEach(function (datum, i) {\n line.path[i > 0 ? \"lineTo\" : \"moveTo\"](xScale.convert(i), yScale.convert(datum));\n });\n return line;\n });\n _this.updateColors(fills, strokes);\n var clipRect = new ClipRect();\n clipRect.x = clipRect.y = padding;\n clipRect.width = clipRect.height = size - padding * 2;\n clipRect.append(_this.lines);\n _this.root.append(clipRect);\n return _this;\n }\n MiniLine.prototype.updateColors = function (fills, strokes) {\n this.lines.forEach(function (line, i) {\n line.stroke = fills[i];\n });\n };\n MiniLine.chartType = ChartType.Line;\n return MiniLine;\n}(MiniChartWithAxes));\nexport { MiniLine };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { ClipRect } from \"../../../../../charts/scene/clipRect\";\nimport { Arc } from \"../../../../../charts/scene/shape/arc\";\nvar MiniScatter = /** @class */ (function (_super) {\n __extends(MiniScatter, _super);\n function MiniScatter(parent, fills, strokes) {\n var _this = _super.call(this, parent, \"scatterTooltip\") || this;\n var size = _this.size;\n var padding = _this.padding;\n // [x, y] pairs\n var data = [\n [[0.3, 3], [1.1, 0.9], [2, 0.4], [3.4, 2.4]],\n [[0, 0.3], [1, 2], [2.4, 1.4], [3, 0]]\n ];\n var xScale = linearScale();\n xScale.domain = [-0.5, 4];\n xScale.range = [padding * 2, size - padding];\n var yScale = linearScale();\n yScale.domain = [-0.5, 3.5];\n yScale.range = [size - padding, padding];\n var points = [];\n data.forEach(function (series) {\n series.forEach(function (_a) {\n var x = _a[0], y = _a[1];\n var arc = new Arc();\n arc.strokeWidth = 1;\n arc.centerX = xScale.convert(x);\n arc.centerY = yScale.convert(y);\n arc.radiusX = arc.radiusY = 2.5;\n points.push(arc);\n });\n });\n _this.points = points;\n _this.updateColors(fills, strokes);\n var clipRect = new ClipRect();\n clipRect.x = clipRect.y = padding;\n clipRect.width = clipRect.height = size - padding * 2;\n clipRect.append(_this.points);\n _this.root.append(clipRect);\n return _this;\n }\n MiniScatter.prototype.updateColors = function (fills, strokes) {\n this.points.forEach(function (line, i) {\n line.stroke = strokes[i % strokes.length];\n line.fill = fills[i % fills.length];\n });\n };\n MiniScatter.chartType = ChartType.Scatter;\n return MiniScatter;\n}(MiniChartWithAxes));\nexport { MiniScatter };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { ClipRect } from \"../../../../../charts/scene/clipRect\";\nimport { Arc } from \"../../../../../charts/scene/shape/arc\";\nvar MiniBubble = /** @class */ (function (_super) {\n __extends(MiniBubble, _super);\n function MiniBubble(parent, fills, strokes) {\n var _this = _super.call(this, parent, \"bubbleTooltip\") || this;\n var size = _this.size;\n var padding = _this.padding;\n // [x, y, radius] triples\n var data = [\n [[0.1, 0.3, 5], [0.5, 0.4, 7], [0.2, 0.8, 7]], [[0.8, 0.7, 5], [0.7, 0.3, 9]]\n ];\n var xScale = linearScale();\n xScale.domain = [0, 1];\n xScale.range = [padding * 2, size - padding];\n var yScale = linearScale();\n yScale.domain = [0, 1];\n yScale.range = [size - padding, padding];\n var points = [];\n data.forEach(function (series) {\n series.forEach(function (_a) {\n var x = _a[0], y = _a[1], radius = _a[2];\n var arc = new Arc();\n arc.strokeWidth = 1;\n arc.centerX = xScale.convert(x);\n arc.centerY = yScale.convert(y);\n arc.radiusX = arc.radiusY = radius;\n arc.fillOpacity = 0.7;\n points.push(arc);\n });\n });\n _this.points = points;\n _this.updateColors(fills, strokes);\n var clipRect = new ClipRect();\n clipRect.x = padding;\n clipRect.y = padding;\n clipRect.width = size - padding * 2;\n clipRect.height = size - padding * 2;\n clipRect.append(_this.points);\n _this.root.append(clipRect);\n return _this;\n }\n MiniBubble.prototype.updateColors = function (fills, strokes) {\n this.points.forEach(function (line, i) {\n line.stroke = strokes[i % strokes.length];\n line.fill = fills[i % fills.length];\n });\n };\n MiniBubble.chartType = ChartType.Bubble;\n return MiniBubble;\n}(MiniChartWithAxes));\nexport { MiniBubble };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Path } from \"../../../../../charts/scene/shape/path\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nvar MiniArea = /** @class */ (function (_super) {\n __extends(MiniArea, _super);\n function MiniArea(parent, fills, strokes, data) {\n if (data === void 0) { data = MiniArea.data; }\n var _this = _super.call(this, parent, \"groupedAreaTooltip\") || this;\n var size = _this.size;\n var padding = _this.padding;\n var xScale = new BandScale();\n xScale.domain = [0, 1, 2];\n xScale.paddingInner = 1;\n xScale.paddingOuter = 0;\n xScale.range = [padding + 0.5, size - padding - 0.5];\n var yScale = linearScale();\n yScale.domain = [0, 6];\n yScale.range = [size - padding + 0.5, padding];\n var xCount = data.length;\n var last = xCount * 2 - 1;\n var pathData = [];\n var bottomY = yScale.convert(0);\n data.forEach(function (datum, i) {\n var x = xScale.convert(i);\n datum.forEach(function (yDatum, j) {\n var y = yScale.convert(yDatum);\n var points = pathData[j] || (pathData[j] = []);\n points[i] = {\n x: x,\n y: y\n };\n points[last - i] = {\n x: x,\n y: bottomY\n };\n });\n });\n _this.areas = pathData.reverse().map(function (points) {\n var area = new Path();\n area.strokeWidth = 1;\n area.fillOpacity = 0.7;\n var path = area.path;\n path.clear();\n points.forEach(function (point, i) { return path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y); });\n path.closePath();\n return area;\n });\n _this.updateColors(fills, strokes);\n _this.root.append(_this.areas);\n return _this;\n }\n MiniArea.prototype.updateColors = function (fills, strokes) {\n this.areas.forEach(function (area, i) {\n area.fill = fills[i];\n area.stroke = strokes[i];\n });\n };\n MiniArea.chartType = ChartType.Area;\n MiniArea.data = [\n [1, 3, 5],\n [2, 6, 4],\n [5, 3, 1]\n ];\n return MiniArea;\n}(MiniChartWithAxes));\nexport { MiniArea };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniChartWithAxes } from \"./miniChartWithAxes\";\nimport { Path } from \"../../../../../charts/scene/shape/path\";\nimport linearScale from \"../../../../../charts/scale/linearScale\";\nimport { BandScale } from \"../../../../../charts/scale/bandScale\";\nvar MiniStackedArea = /** @class */ (function (_super) {\n __extends(MiniStackedArea, _super);\n function MiniStackedArea(parent, fills, strokes, data, tooltipName) {\n if (data === void 0) { data = MiniStackedArea.data; }\n if (tooltipName === void 0) { tooltipName = \"stackedAreaTooltip\"; }\n var _this = _super.call(this, parent, tooltipName) || this;\n var size = _this.size;\n var padding = _this.padding;\n var xScale = new BandScale();\n xScale.domain = [0, 1, 2];\n xScale.paddingInner = 1;\n xScale.paddingOuter = 0;\n xScale.range = [padding + 0.5, size - padding - 0.5];\n var yScale = linearScale();\n yScale.domain = [0, 16];\n yScale.range = [size - padding + 0.5, padding + 0.5];\n var xCount = data.length;\n var last = xCount * 2 - 1;\n var pathData = [];\n data.forEach(function (datum, i) {\n var x = xScale.convert(i);\n var total = 0;\n datum.forEach(function (yDatum, j) {\n var y = yScale.convert(total + yDatum);\n var points = pathData[j] || (pathData[j] = []);\n points[i] = {\n x: x,\n y: y\n };\n points[last - i] = {\n x: x,\n y: yScale.convert(total) // bottom y\n };\n total += yDatum;\n });\n });\n _this.areas = pathData.map(function (points) {\n var area = new Path();\n area.strokeWidth = 1;\n var path = area.path;\n path.clear();\n points.forEach(function (point, i) { return path[i > 0 ? \"lineTo\" : \"moveTo\"](point.x, point.y); });\n path.closePath();\n return area;\n });\n _this.updateColors(fills, strokes);\n _this.root.append(_this.areas);\n return _this;\n }\n MiniStackedArea.prototype.updateColors = function (fills, strokes) {\n this.areas.forEach(function (area, i) {\n area.fill = fills[i];\n area.stroke = strokes[i];\n });\n };\n MiniStackedArea.chartType = ChartType.StackedArea;\n MiniStackedArea.data = [\n [2, 3, 2],\n [3, 6, 5],\n [6, 2, 2]\n ];\n return MiniStackedArea;\n}(MiniChartWithAxes));\nexport { MiniStackedArea };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { MiniStackedArea } from \"./miniStackedArea\";\nvar MiniNormalizedArea = /** @class */ (function (_super) {\n __extends(MiniNormalizedArea, _super);\n function MiniNormalizedArea(parent, fills, strokes, data) {\n if (data === void 0) { data = MiniNormalizedArea.data; }\n return _super.call(this, parent, fills, strokes, data, \"normalizedAreaTooltip\") || this;\n }\n MiniNormalizedArea.chartType = ChartType.NormalizedArea;\n MiniNormalizedArea.data = MiniStackedArea.data.map(function (stack) {\n var sum = stack.reduce(function (p, c) { return p + c; }, 0);\n return stack.map(function (v) { return v / sum * 16; });\n });\n return MiniNormalizedArea;\n}(MiniStackedArea));\nexport { MiniNormalizedArea };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, AgGroupComponent, Autowired, Component, PostConstruct } from \"@ag-grid-community/core\";\nimport { MiniColumn, MiniStackedColumn, MiniNormalizedColumn, MiniBar, MiniStackedBar, MiniNormalizedBar, MiniPie, MiniDoughnut, MiniLine, MiniScatter, MiniBubble, MiniArea, MiniStackedArea, MiniNormalizedArea, } from \"./miniCharts\";\nvar MiniChartsContainer = /** @class */ (function (_super) {\n __extends(MiniChartsContainer, _super);\n function MiniChartsContainer(chartController, fills, strokes) {\n var _this = _super.call(this, MiniChartsContainer.TEMPLATE) || this;\n _this.wrappers = {};\n _this.chartController = chartController;\n _this.fills = fills;\n _this.strokes = strokes;\n return _this;\n }\n MiniChartsContainer.prototype.init = function () {\n var _this = this;\n var chartGroups = {\n columnGroup: [\n MiniColumn,\n MiniStackedColumn,\n MiniNormalizedColumn\n ],\n barGroup: [\n MiniBar,\n MiniStackedBar,\n MiniNormalizedBar\n ],\n pieGroup: [\n MiniPie,\n MiniDoughnut\n ],\n lineGroup: [\n MiniLine\n ],\n scatterGroup: [\n MiniScatter,\n MiniBubble\n ],\n areaGroup: [\n MiniArea,\n MiniStackedArea,\n MiniNormalizedArea\n ]\n };\n var eGui = this.getGui();\n Object.keys(chartGroups).forEach(function (group) {\n var chartGroup = chartGroups[group];\n var groupComponent = _this.wireBean(new AgGroupComponent({\n title: _this.chartTranslator.translate(group),\n suppressEnabledCheckbox: true,\n enabled: true,\n suppressOpenCloseIcons: true\n }));\n chartGroup.forEach(function (MiniClass) {\n var miniWrapper = document.createElement('div');\n _.addCssClass(miniWrapper, 'ag-chart-mini-thumbnail');\n _this.addDestroyableEventListener(miniWrapper, 'click', function () {\n _this.chartController.setChartType(MiniClass.chartType);\n _this.refreshSelected();\n });\n _this.wrappers[MiniClass.chartType] = miniWrapper;\n _this.wireBean(new MiniClass(miniWrapper, _this.fills, _this.strokes));\n groupComponent.addItem(miniWrapper);\n });\n eGui.appendChild(groupComponent.getGui());\n });\n this.refreshSelected();\n };\n MiniChartsContainer.prototype.refreshSelected = function () {\n var type = this.chartController.getChartType();\n for (var wrapper in this.wrappers) {\n _.addOrRemoveCssClass(this.wrappers[wrapper], 'ag-selected', wrapper === type);\n }\n };\n MiniChartsContainer.TEMPLATE = '
';\n __decorate([\n Autowired('chartTranslator')\n ], MiniChartsContainer.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], MiniChartsContainer.prototype, \"init\", null);\n return MiniChartsContainer;\n}(Component));\nexport { MiniChartsContainer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, RefSelector, PreDestroy } from \"@ag-grid-community/core\";\nimport { MiniChartsContainer } from \"./miniChartsContainer\";\nimport { ChartController } from \"../../chartController\";\nvar ChartSettingsPanel = /** @class */ (function (_super) {\n __extends(ChartSettingsPanel, _super);\n function ChartSettingsPanel(chartController) {\n var _this = _super.call(this, ChartSettingsPanel.TEMPLATE) || this;\n _this.miniCharts = [];\n _this.cardItems = [];\n _this.chartController = chartController;\n return _this;\n }\n ChartSettingsPanel.prototype.postConstruct = function () {\n this.resetPalettes();\n this.ePrevBtn.insertAdjacentElement('afterbegin', _.createIconNoSpan('smallLeft', this.gridOptionsWrapper));\n this.eNextBtn.insertAdjacentElement('afterbegin', _.createIconNoSpan('smallRight', this.gridOptionsWrapper));\n this.addDestroyableEventListener(this.ePrevBtn, 'click', this.prev.bind(this));\n this.addDestroyableEventListener(this.eNextBtn, 'click', this.next.bind(this));\n this.addDestroyableEventListener(this.chartController, ChartController.EVENT_CHART_UPDATED, this.resetPalettes.bind(this));\n };\n ChartSettingsPanel.prototype.resetPalettes = function () {\n var _this = this;\n var palettes = this.chartController.getPalettes();\n if (palettes === this.palettes) {\n return;\n }\n this.palettes = palettes;\n this.activePalette = this.chartController.getPaletteName();\n if (!this.palettes.has(this.activePalette)) {\n this.activePalette = undefined;\n }\n this.paletteNames = [];\n this.cardItems = [];\n _.clearElement(this.eCardSelector);\n this.destroyMiniCharts();\n this.palettes.forEach(function (palette, name) {\n if (!_this.activePalette) {\n _this.activePalette = name;\n }\n _this.paletteNames.push(name);\n var isActivePalette = _this.activePalette === name;\n var fills = palette.fills, strokes = palette.strokes;\n var miniChartsContainer = _this.wireBean(new MiniChartsContainer(_this.chartController, fills, strokes));\n _this.miniCharts.push(miniChartsContainer);\n _this.eMiniChartsContainer.appendChild(miniChartsContainer.getGui());\n _this.addCardLink(name);\n if (isActivePalette) {\n miniChartsContainer.refreshSelected();\n }\n else {\n _.addCssClass(miniChartsContainer.getGui(), 'ag-hidden');\n }\n });\n _.addOrRemoveCssClass(this.eNavBar, 'ag-hidden', this.palettes.size <= 1);\n };\n ChartSettingsPanel.prototype.addCardLink = function (paletteName) {\n var _this = this;\n var link = document.createElement('div');\n _.addCssClass(link, 'ag-nav-card-item');\n if (paletteName === this.activePalette) {\n _.addCssClass(link, 'ag-selected');\n }\n this.addDestroyableEventListener(link, 'click', function () {\n var _a = _this, activePalette = _a.activePalette, isAnimating = _a.isAnimating, paletteNames = _a.paletteNames;\n if (paletteName === activePalette || isAnimating) {\n return;\n }\n _this.setActivePalette(paletteName, paletteNames.indexOf(paletteName) < paletteNames.indexOf(activePalette) ? 'left' : 'right');\n });\n this.eCardSelector.appendChild(link);\n this.cardItems.push(link);\n };\n ChartSettingsPanel.prototype.getPrev = function () {\n var prev = this.paletteNames.indexOf(this.activePalette) - 1;\n if (prev < 0) {\n prev = this.paletteNames.length - 1;\n }\n return prev;\n };\n ChartSettingsPanel.prototype.prev = function () {\n if (this.isAnimating) {\n return;\n }\n this.setActivePalette(this.paletteNames[this.getPrev()], 'left');\n };\n ChartSettingsPanel.prototype.getNext = function () {\n var next = this.paletteNames.indexOf(this.activePalette) + 1;\n if (next >= this.paletteNames.length) {\n next = 0;\n }\n return next;\n };\n ChartSettingsPanel.prototype.next = function () {\n if (this.isAnimating) {\n return;\n }\n this.setActivePalette(this.paletteNames[this.getNext()], 'right');\n };\n ChartSettingsPanel.prototype.setActivePalette = function (paletteName, animationDirection) {\n var _this = this;\n var paletteIndex = this.paletteNames.indexOf(paletteName);\n _.radioCssClass(this.cardItems[paletteIndex], 'ag-selected');\n var currentPalette = this.miniCharts[this.paletteNames.indexOf(this.activePalette)];\n var currentGui = currentPalette.getGui();\n var futurePalette = this.miniCharts[paletteIndex];\n var futureGui = futurePalette.getGui();\n currentPalette.refreshSelected();\n futurePalette.refreshSelected();\n var multiplier = animationDirection === 'left' ? -1 : 1;\n var final = futureGui.style.left = (_.getAbsoluteWidth(this.getGui()) * multiplier) + \"px\";\n _.removeCssClass(futureGui, 'ag-hidden');\n _.addCssClass(currentGui, 'ag-animating');\n _.addCssClass(futureGui, 'ag-animating');\n this.activePalette = paletteName;\n this.chartController.setChartPaletteName(this.activePalette);\n this.isAnimating = true;\n window.setTimeout(function () {\n currentGui.style.left = parseFloat(final) * -1 + \"px\";\n futureGui.style.left = '0px';\n }, 50);\n window.setTimeout(function () {\n _this.isAnimating = false;\n _.removeCssClass(currentGui, 'ag-animating');\n _.removeCssClass(futureGui, 'ag-animating');\n _.addCssClass(currentGui, 'ag-hidden');\n }, 500);\n };\n ChartSettingsPanel.prototype.destroyMiniCharts = function () {\n _.clearElement(this.eMiniChartsContainer);\n if (this.miniCharts) {\n this.miniCharts.forEach(function (c) { return c.destroy(); });\n }\n this.miniCharts = [];\n };\n ChartSettingsPanel.prototype.destroy = function () {\n this.destroyMiniCharts();\n _super.prototype.destroy.call(this);\n };\n ChartSettingsPanel.TEMPLATE = \"
\\n
\\n
\\n
\\n \\n
\\n
\\n
\\n \\n
\\n
\\n
\";\n __decorate([\n Autowired('gridOptionsWrapper')\n ], ChartSettingsPanel.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n RefSelector('eMiniChartsContainer')\n ], ChartSettingsPanel.prototype, \"eMiniChartsContainer\", void 0);\n __decorate([\n RefSelector('eNavBar')\n ], ChartSettingsPanel.prototype, \"eNavBar\", void 0);\n __decorate([\n RefSelector('eCardSelector')\n ], ChartSettingsPanel.prototype, \"eCardSelector\", void 0);\n __decorate([\n RefSelector('ePrevBtn')\n ], ChartSettingsPanel.prototype, \"ePrevBtn\", void 0);\n __decorate([\n RefSelector('eNextBtn')\n ], ChartSettingsPanel.prototype, \"eNextBtn\", void 0);\n __decorate([\n PostConstruct\n ], ChartSettingsPanel.prototype, \"postConstruct\", null);\n __decorate([\n PreDestroy\n ], ChartSettingsPanel.prototype, \"destroy\", null);\n return ChartSettingsPanel;\n}(Component));\nexport { ChartSettingsPanel };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Autowired, Component, PostConstruct, Promise, TabbedLayout } from \"@ag-grid-community/core\";\nimport { ChartDataPanel } from \"./data/chartDataPanel\";\nimport { ChartFormattingPanel } from \"./format/chartFormattingPanel\";\nimport { ChartSettingsPanel } from \"./settings/chartSettingsPanel\";\nvar TabbedChartMenu = /** @class */ (function (_super) {\n __extends(TabbedChartMenu, _super);\n function TabbedChartMenu(params) {\n var _this = _super.call(this) || this;\n _this.tabs = [];\n _this.chartIcons = {};\n var controller = params.controller, type = params.type, panels = params.panels;\n _this.chartController = controller;\n _this.currentChartType = type;\n _this.panels = panels;\n return _this;\n }\n TabbedChartMenu.prototype.init = function () {\n var _this = this;\n this.panels.forEach(function (panel) {\n var panelType = panel.replace('chart', '').toLowerCase();\n var _a = _this.createTab(panel, panelType, _this.getPanelClass(panelType)), comp = _a.comp, tab = _a.tab;\n _this.tabs.push(tab);\n _this.addDestroyFunc(function () { return comp.destroy(); });\n });\n this.tabbedLayout = new TabbedLayout({\n items: this.tabs,\n cssClass: 'ag-chart-tabbed-menu'\n });\n };\n TabbedChartMenu.prototype.createTab = function (name, title, ChildClass) {\n var eWrapperDiv = document.createElement('div');\n _.addCssClass(eWrapperDiv, \"ag-chart-\" + title);\n var comp = new ChildClass(this.chartController);\n this.getContext().wireBean(comp);\n eWrapperDiv.appendChild(comp.getGui());\n var titleEl = document.createElement('div');\n titleEl.innerText = this.chartTranslator.translate(title);\n return {\n comp: comp,\n tab: {\n title: titleEl,\n bodyPromise: Promise.resolve(eWrapperDiv),\n name: name\n }\n };\n };\n TabbedChartMenu.prototype.getMinDimensions = function () {\n return this.tabbedLayout.getMinDimensions();\n };\n TabbedChartMenu.prototype.updateCurrentChartType = function (chartType) {\n _.removeCssClass(this.chartIcons[this.currentChartType], 'ag-selected');\n this.currentChartType = chartType;\n _.addCssClass(this.chartIcons[chartType], 'ag-selected');\n };\n TabbedChartMenu.prototype.showTab = function (tab) {\n var tabItem = this.tabs[tab];\n this.tabbedLayout.showItem(tabItem);\n };\n TabbedChartMenu.prototype.getGui = function () {\n return this.tabbedLayout && this.tabbedLayout.getGui();\n };\n TabbedChartMenu.prototype.destroy = function () {\n if (this.parentComponent && this.parentComponent.isAlive()) {\n this.parentComponent.destroy();\n }\n _super.prototype.destroy.call(this);\n };\n TabbedChartMenu.prototype.getPanelClass = function (panelType) {\n switch (panelType) {\n case TabbedChartMenu.TAB_DATA:\n return ChartDataPanel;\n case TabbedChartMenu.TAB_FORMAT:\n return ChartFormattingPanel;\n default:\n return ChartSettingsPanel;\n }\n };\n TabbedChartMenu.EVENT_TAB_SELECTED = 'tabSelected';\n TabbedChartMenu.TAB_MAIN = 'settings';\n TabbedChartMenu.TAB_DATA = 'data';\n TabbedChartMenu.TAB_FORMAT = 'format';\n __decorate([\n Autowired('chartTranslator')\n ], TabbedChartMenu.prototype, \"chartTranslator\", void 0);\n __decorate([\n PostConstruct\n ], TabbedChartMenu.prototype, \"init\", null);\n return TabbedChartMenu;\n}(Component));\nexport { TabbedChartMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, AgPanel, Autowired, Component, PostConstruct, Promise } from \"@ag-grid-community/core\";\nimport { TabbedChartMenu } from \"./tabbedChartMenu\";\nvar ChartMenu = /** @class */ (function (_super) {\n __extends(ChartMenu, _super);\n function ChartMenu(chartController) {\n var _this = _super.call(this, ChartMenu.TEMPLATE) || this;\n _this.buttons = {\n chartSettings: ['menu', function () { return _this.showMenu(\"chartSettings\"); }],\n chartData: ['menu', function () { return _this.showMenu(\"chartData\"); }],\n chartFormat: ['menu', function () { return _this.showMenu(\"chartFormat\"); }],\n chartUnlink: ['linked', function (e) { return _this.toggleDetached(e); }],\n chartDownload: ['save', function () { return _this.saveChart(); }]\n };\n _this.tabs = [];\n _this.chartController = chartController;\n return _this;\n }\n ChartMenu.prototype.postConstruct = function () {\n this.createButtons();\n };\n ChartMenu.prototype.getToolbarOptions = function () {\n var _this = this;\n var tabOptions = [\n 'chartSettings',\n 'chartData',\n 'chartFormat',\n 'chartUnlink',\n 'chartDownload'\n ];\n var toolbarItemsFunc = this.gridOptionsWrapper.getChartToolbarItemsFunc();\n if (toolbarItemsFunc) {\n var params = {\n api: this.gridOptionsWrapper.getApi(),\n columnApi: this.gridOptionsWrapper.getColumnApi(),\n defaultItems: tabOptions\n };\n tabOptions = toolbarItemsFunc(params).filter(function (option) {\n if (!_this.buttons[option]) {\n console.warn(\"ag-Grid: '\" + option + \" is not a valid Chart Toolbar Option\");\n return false;\n }\n return true;\n });\n }\n // pivot charts use the column tool panel instead of the data panel\n if (this.chartController.isPivotChart()) {\n tabOptions = tabOptions.filter(function (option) { return option !== 'chartData'; });\n }\n var ignoreOptions = ['chartUnlink', 'chartDownload'];\n this.tabs = tabOptions.filter(function (option) { return ignoreOptions.indexOf(option) === -1; });\n return tabOptions.filter(function (value) {\n return ignoreOptions.indexOf(value) !== -1 ||\n (_this.tabs.length && value === _this.tabs[0]);\n });\n };\n ChartMenu.prototype.toggleDetached = function (e) {\n var target = e.target;\n var active = _.containsClass(target, 'ag-icon-linked');\n _.addOrRemoveCssClass(target, 'ag-icon-linked', !active);\n _.addOrRemoveCssClass(target, 'ag-icon-unlinked', active);\n this.chartController.detachChartRange();\n };\n ChartMenu.prototype.createButtons = function () {\n var _this = this;\n var chartToolbarOptions = this.getToolbarOptions();\n chartToolbarOptions.forEach(function (button) {\n var buttonConfig = _this.buttons[button];\n var iconName = buttonConfig[0], callback = buttonConfig[1];\n var buttonEl = _.createIconNoSpan(iconName, _this.gridOptionsWrapper, undefined, true);\n _this.addDestroyableEventListener(buttonEl, 'click', callback);\n _this.getGui().appendChild(buttonEl);\n });\n };\n ChartMenu.prototype.saveChart = function () {\n var event = { type: ChartMenu.EVENT_DOWNLOAD_CHART };\n this.dispatchEvent(event);\n };\n ChartMenu.prototype.createMenu = function (defaultTab) {\n var _this = this;\n var chartComp = this.getParentComponent();\n var dockedContainer = chartComp.getDockedContainer();\n var context = this.getContext();\n var menuPanel = this.menuPanel = new AgPanel({\n minWidth: this.gridOptionsWrapper.chartMenuPanelWidth(),\n width: this.gridOptionsWrapper.chartMenuPanelWidth(),\n height: '100%',\n closable: true,\n hideTitleBar: true\n });\n context.wireBean(this.menuPanel);\n menuPanel.setParentComponent(this);\n dockedContainer.appendChild(menuPanel.getGui());\n this.tabbedMenu = new TabbedChartMenu({\n controller: this.chartController,\n type: chartComp.getCurrentChartType(),\n panels: this.tabs\n });\n context.wireBean(this.tabbedMenu);\n this.addDestroyableEventListener(this.menuPanel, Component.EVENT_DESTROYED, function () { return _this.tabbedMenu.destroy(); });\n return new Promise(function (res) {\n window.setTimeout(function () {\n menuPanel.setBodyComponent(_this.tabbedMenu);\n _this.tabbedMenu.showTab(defaultTab);\n _this.addDestroyableEventListener(chartComp.getChartComponentsWrapper(), 'click', function () {\n if (_.containsClass(chartComp.getGui(), 'ag-has-menu')) {\n _this.hideMenu();\n }\n });\n res(menuPanel);\n }, 100);\n });\n };\n ChartMenu.prototype.slideDockedContainer = function () {\n var _this = this;\n var chartComp = this.getParentComponent();\n chartComp.slideDockedOut(this.menuPanel.getWidth());\n window.setTimeout(function () {\n _.addCssClass(_this.getParentComponent().getGui(), 'ag-has-menu');\n }, 500);\n };\n ChartMenu.prototype.showMenu = function (tabName) {\n var _this = this;\n var tab = this.tabs.indexOf(tabName);\n if (!this.menuPanel) {\n this.createMenu(tab).then(function () {\n _this.slideDockedContainer();\n });\n }\n else {\n this.slideDockedContainer();\n }\n };\n ChartMenu.prototype.hideMenu = function () {\n var chartComp = this.getParentComponent();\n chartComp.slideDockedIn();\n _.removeCssClass(this.getParentComponent().getGui(), 'ag-has-menu');\n };\n ChartMenu.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.menuPanel && this.menuPanel.isAlive()) {\n this.menuPanel.destroy();\n }\n };\n ChartMenu.EVENT_DOWNLOAD_CHART = \"downloadChart\";\n ChartMenu.TEMPLATE = \"
\";\n __decorate([\n Autowired(\"gridOptionsWrapper\")\n ], ChartMenu.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n PostConstruct\n ], ChartMenu.prototype, \"postConstruct\", null);\n return ChartMenu;\n}(Component));\nexport { ChartMenu };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartType, _ } from \"@ag-grid-community/core\";\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { CartesianChartProxy } from \"./cartesianChartProxy\";\nvar BarChartProxy = /** @class */ (function (_super) {\n __extends(BarChartProxy, _super);\n function BarChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.initChartOptions();\n _this.recreateChart();\n var barSeries = ChartBuilder.createSeries(_this.getSeriesDefaults());\n if (barSeries) {\n barSeries.flipXY = !_this.isColumnChart();\n _this.chart.addSeries(barSeries);\n }\n return _this;\n }\n BarChartProxy.prototype.createChart = function (options) {\n var _a = this.chartProxyParams, grouping = _a.grouping, parentElement = _a.parentElement;\n var builderFunction;\n if (this.isColumnChart()) {\n builderFunction = grouping ? 'createGroupedColumnChart' : 'createColumnChart';\n }\n else {\n builderFunction = grouping ? 'createGroupedBarChart' : 'createBarChart';\n }\n return ChartBuilder[builderFunction](parentElement, options);\n };\n BarChartProxy.prototype.update = function (params) {\n var chart = this.chart;\n var barSeries = chart.series[0];\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n barSeries.data = this.transformData(params.data, params.category.id);\n barSeries.xKey = params.category.id;\n barSeries.xName = params.category.name;\n barSeries.yKeys = params.fields.map(function (f) { return f.colId; });\n barSeries.yNames = params.fields.map(function (f) { return f.displayName; });\n barSeries.fills = fills;\n barSeries.strokes = strokes;\n this.updateLabelRotation(params.category.id, !this.isColumnChart());\n };\n BarChartProxy.prototype.getDefaultOptions = function () {\n var isColumnChart = this.isColumnChart();\n var fontOptions = this.getDefaultFontOptions();\n var options = this.getDefaultCartesianChartOptions();\n options.xAxis.label.rotation = isColumnChart ? 335 : 0;\n options.yAxis.label.rotation = isColumnChart ? 0 : 335;\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { tooltip: {\n enabled: true,\n }, label: __assign(__assign({}, fontOptions), { enabled: false }), shadow: this.getDefaultDropShadowOptions() });\n return options;\n };\n BarChartProxy.prototype.isColumnChart = function () {\n return _.includes([ChartType.GroupedColumn, ChartType.StackedColumn, ChartType.NormalizedColumn], this.chartType);\n };\n BarChartProxy.prototype.getSeriesDefaults = function () {\n var chartType = this.chartType;\n var isGrouped = chartType === ChartType.GroupedColumn || chartType === ChartType.GroupedBar;\n var isNormalized = chartType === ChartType.NormalizedColumn || chartType === ChartType.NormalizedBar;\n return __assign(__assign({}, this.chartOptions.seriesDefaults), { type: 'bar', grouped: isGrouped, normalizedTo: isNormalized ? 100 : undefined });\n };\n return BarChartProxy;\n}(CartesianChartProxy));\nexport { BarChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartType } from \"@ag-grid-community/core\";\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { CategoryAxis } from \"../../../../charts/chart/axis/categoryAxis\";\nimport { CartesianChartProxy } from \"./cartesianChartProxy\";\nimport { ChartAxisPosition } from \"../../../../charts/chart/chartAxis\";\nvar AreaChartProxy = /** @class */ (function (_super) {\n __extends(AreaChartProxy, _super);\n function AreaChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.initChartOptions();\n _this.recreateChart();\n var areaSeries = ChartBuilder.createSeries(_this.getSeriesDefaults());\n if (areaSeries) {\n _this.chart.addSeries(areaSeries);\n }\n return _this;\n }\n AreaChartProxy.prototype.createChart = function (options) {\n var _a = this.chartProxyParams, grouping = _a.grouping, parentElement = _a.parentElement;\n var chart = ChartBuilder[grouping ? \"createGroupedAreaChart\" : \"createAreaChart\"](parentElement, options);\n chart.axes\n .filter(function (axis) { return axis.position === ChartAxisPosition.Bottom && axis instanceof CategoryAxis; })\n .forEach(function (axis) {\n axis.scale.paddingInner = 1;\n axis.scale.paddingOuter = 0;\n });\n return chart;\n };\n AreaChartProxy.prototype.update = function (params) {\n if (this.chartType === ChartType.Area) {\n // area charts have multiple series\n this.updateAreaChart(params);\n }\n else {\n // stacked and normalized has a single series\n var areaSeries = this.chart.series[0];\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n areaSeries.data = this.transformData(params.data, params.category.id);\n areaSeries.xKey = params.category.id;\n areaSeries.xName = params.category.name;\n areaSeries.yKeys = params.fields.map(function (f) { return f.colId; });\n areaSeries.yNames = params.fields.map(function (f) { return f.displayName; });\n areaSeries.fills = fills;\n areaSeries.strokes = strokes;\n }\n this.updateLabelRotation(params.category.id);\n };\n AreaChartProxy.prototype.updateAreaChart = function (params) {\n var _this = this;\n var chart = this.chart;\n if (params.fields.length === 0) {\n chart.removeAllSeries();\n return;\n }\n var fieldIds = params.fields.map(function (f) { return f.colId; });\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n var existingSeriesById = chart.series.reduceRight(function (map, series, i) {\n var id = series.yKeys[0];\n if (fieldIds.indexOf(id) === i) {\n map.set(id, series);\n }\n else {\n chart.removeSeries(series);\n }\n return map;\n }, new Map());\n var data = this.transformData(params.data, params.category.id);\n var previousSeries = undefined;\n params.fields.forEach(function (f, index) {\n var areaSeries = existingSeriesById.get(f.colId);\n var fill = fills[index % fills.length];\n var stroke = strokes[index % strokes.length];\n if (areaSeries) {\n areaSeries.data = data;\n areaSeries.xKey = params.category.id;\n areaSeries.xName = params.category.name;\n areaSeries.yKeys = [f.colId];\n areaSeries.yNames = [f.displayName];\n areaSeries.fills = [fill];\n areaSeries.strokes = [stroke];\n }\n else {\n var seriesDefaults = _this.getSeriesDefaults();\n var options = __assign(__assign({}, seriesDefaults), { data: data, field: {\n xKey: params.category.id,\n xName: params.category.name,\n yKeys: [f.colId],\n yNames: [f.displayName],\n }, fill: __assign(__assign({}, seriesDefaults.fill), { colors: [fill] }), stroke: __assign(__assign({}, seriesDefaults.stroke), { colors: [stroke] }) });\n areaSeries = ChartBuilder.createSeries(options);\n chart.addSeriesAfter(areaSeries, previousSeries);\n }\n previousSeries = areaSeries;\n });\n };\n AreaChartProxy.prototype.getDefaultOptions = function () {\n var options = this.getDefaultCartesianChartOptions();\n options.xAxis.label.rotation = 335;\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { fill: __assign(__assign({}, options.seriesDefaults.fill), { opacity: this.chartType === ChartType.Area ? 0.7 : 1 }), stroke: __assign(__assign({}, options.seriesDefaults.stroke), { width: 3 }), marker: {\n type: 'circle',\n enabled: true,\n size: 6,\n strokeWidth: 1,\n }, tooltip: {\n enabled: true,\n }, shadow: this.getDefaultDropShadowOptions() });\n return options;\n };\n AreaChartProxy.prototype.getSeriesDefaults = function () {\n return __assign(__assign({}, this.chartOptions.seriesDefaults), { type: 'area', normalizedTo: this.chartType === ChartType.NormalizedArea ? 100 : undefined });\n };\n return AreaChartProxy;\n}(CartesianChartProxy));\nexport { AreaChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { CartesianChartProxy } from \"./cartesianChartProxy\";\nimport { TimeAxis } from \"../../../../charts/chart/axis/timeAxis\";\nimport { CategoryAxis } from \"../../../../charts/chart/axis/categoryAxis\";\nimport { isDate } from '../../typeChecker';\nvar LineChartProxy = /** @class */ (function (_super) {\n __extends(LineChartProxy, _super);\n function LineChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.initChartOptions();\n _this.recreateChart();\n return _this;\n }\n LineChartProxy.prototype.createChart = function (options) {\n var _a = this.chartProxyParams, grouping = _a.grouping, parentElement = _a.parentElement;\n return ChartBuilder[grouping ? \"createGroupedLineChart\" : \"createLineChart\"](parentElement, options);\n };\n LineChartProxy.prototype.update = function (params) {\n var _this = this;\n if (params.fields.length === 0) {\n this.chart.removeAllSeries();\n return;\n }\n this.updateAxes(params.data[0], params.category.id);\n var chart = this.chart;\n var fieldIds = params.fields.map(function (f) { return f.colId; });\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n var data = this.transformData(params.data, params.category.id);\n var existingSeriesById = chart.series.reduceRight(function (map, series, i) {\n var id = series.yKey;\n if (fieldIds.indexOf(id) === i) {\n map.set(id, series);\n }\n else {\n chart.removeSeries(series);\n }\n return map;\n }, new Map());\n var previousSeries = undefined;\n params.fields.forEach(function (f, index) {\n var lineSeries = existingSeriesById.get(f.colId);\n var fill = fills[index % fills.length];\n var stroke = strokes[index % strokes.length];\n if (lineSeries) {\n lineSeries.title = f.displayName;\n lineSeries.data = data;\n lineSeries.xKey = params.category.id;\n lineSeries.xName = params.category.name;\n lineSeries.yKey = f.colId;\n lineSeries.yName = f.displayName;\n lineSeries.fill = fill;\n lineSeries.stroke = fill; // this is deliberate, so that the line colours match the fills of other series\n }\n else {\n var seriesDefaults = _this.chartOptions.seriesDefaults;\n var options = __assign(__assign({}, seriesDefaults), { type: 'line', title: f.displayName, data: data, field: {\n xKey: params.category.id,\n xName: params.category.name,\n yKey: f.colId,\n yName: f.displayName,\n }, fill: __assign(__assign({}, seriesDefaults.fill), { color: fill }), stroke: __assign(__assign({}, seriesDefaults.stroke), { color: fill }), marker: __assign(__assign({}, seriesDefaults.marker), { stroke: stroke }) });\n lineSeries = ChartBuilder.createSeries(options);\n chart.addSeriesAfter(lineSeries, previousSeries);\n }\n previousSeries = lineSeries;\n });\n this.updateLabelRotation(params.category.id);\n };\n LineChartProxy.prototype.updateAxes = function (testDatum, categoryKey) {\n var chartOptions = this.chartOptions;\n if (chartOptions.xAxis.type) {\n return;\n }\n var xAxis = this.chart.axes.filter(function (a) { return a.position === 'bottom'; })[0];\n if (!xAxis) {\n return;\n }\n var categoryIsDate = isDate(testDatum && testDatum[categoryKey]);\n if (categoryIsDate && !(xAxis instanceof TimeAxis)) {\n var options = __assign(__assign({}, this.chartOptions), { xAxis: __assign(__assign({}, this.chartOptions.xAxis), { type: 'time' }) });\n this.recreateChart(options);\n }\n else if (!categoryIsDate && !(xAxis instanceof CategoryAxis)) {\n this.recreateChart();\n }\n };\n LineChartProxy.prototype.getDefaultOptions = function () {\n var options = this.getDefaultCartesianChartOptions();\n options.xAxis.label.rotation = 335;\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { stroke: __assign(__assign({}, options.seriesDefaults.stroke), { width: 3 }), marker: {\n enabled: true,\n type: 'circle',\n size: 6,\n strokeWidth: 1,\n }, tooltip: {\n enabled: true,\n } });\n return options;\n };\n return LineChartProxy;\n}(CartesianChartProxy));\nexport { LineChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ChartProxy } from \"../chartProxy\";\nvar PolarChartProxy = /** @class */ (function (_super) {\n __extends(PolarChartProxy, _super);\n function PolarChartProxy(params) {\n return _super.call(this, params) || this;\n }\n return PolarChartProxy;\n}(ChartProxy));\nexport { PolarChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { PolarChartProxy } from \"./polarChartProxy\";\nvar PieChartProxy = /** @class */ (function (_super) {\n __extends(PieChartProxy, _super);\n function PieChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.initChartOptions();\n _this.recreateChart();\n return _this;\n }\n PieChartProxy.prototype.createChart = function (options) {\n return ChartBuilder.createPieChart(this.chartProxyParams.parentElement, options);\n };\n PieChartProxy.prototype.update = function (params) {\n var chart = this.chart;\n if (params.fields.length === 0) {\n chart.removeAllSeries();\n return;\n }\n var existingSeries = chart.series[0];\n var existingSeriesId = existingSeries && existingSeries.angleKey;\n var pieSeriesField = params.fields[0];\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n var seriesDefaults = this.chartOptions.seriesDefaults;\n var pieSeries = existingSeries;\n var calloutColors = seriesDefaults.callout && seriesDefaults.callout.colors;\n if (existingSeriesId !== pieSeriesField.colId) {\n chart.removeSeries(existingSeries);\n var seriesOptions = __assign(__assign({}, seriesDefaults), { type: \"pie\", field: {\n angleKey: pieSeriesField.colId,\n }, title: __assign(__assign({}, seriesDefaults.title), { text: seriesDefaults.title.text || params.fields[0].displayName }) });\n pieSeries = ChartBuilder.createSeries(seriesOptions);\n }\n pieSeries.angleName = pieSeriesField.displayName;\n pieSeries.labelKey = params.category.id;\n pieSeries.labelName = params.category.name;\n pieSeries.data = params.data;\n pieSeries.fills = fills;\n pieSeries.strokes = strokes;\n if (calloutColors) {\n pieSeries.calloutColors = calloutColors;\n }\n chart.addSeries(pieSeries);\n };\n PieChartProxy.prototype.getDefaultOptions = function () {\n var strokes = this.getPredefinedPalette().strokes;\n var options = this.getDefaultChartOptions();\n var fontOptions = this.getDefaultFontOptions();\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { title: __assign(__assign({}, fontOptions), { enabled: false, fontSize: 12, fontWeight: 'bold' }), callout: {\n colors: strokes,\n length: 10,\n strokeWidth: 2,\n }, label: __assign(__assign({}, fontOptions), { enabled: false, offset: 3, minRequiredAngle: 0 }), tooltip: {\n enabled: true,\n }, shadow: this.getDefaultDropShadowOptions() });\n return options;\n };\n return PieChartProxy;\n}(PolarChartProxy));\nexport { PieChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ChartBuilder } from \"../../../../charts/chartBuilder\";\nimport { _ } from \"@ag-grid-community/core\";\nimport { PolarChartProxy } from \"./polarChartProxy\";\nvar DoughnutChartProxy = /** @class */ (function (_super) {\n __extends(DoughnutChartProxy, _super);\n function DoughnutChartProxy(params) {\n var _this = _super.call(this, params) || this;\n _this.initChartOptions();\n _this.recreateChart();\n return _this;\n }\n DoughnutChartProxy.prototype.createChart = function (options) {\n return ChartBuilder.createDoughnutChart(this.chartProxyParams.parentElement, options);\n };\n DoughnutChartProxy.prototype.update = function (params) {\n if (params.fields.length === 0) {\n this.chart.removeAllSeries();\n return;\n }\n var doughnutChart = this.chart;\n var fieldIds = params.fields.map(function (f) { return f.colId; });\n var seriesMap = {};\n doughnutChart.series.forEach(function (series) {\n var pieSeries = series;\n var id = pieSeries.angleKey;\n if (_.includes(fieldIds, id)) {\n seriesMap[id] = pieSeries;\n }\n });\n var seriesDefaults = this.chartOptions.seriesDefaults;\n var _a = this.getPalette(), fills = _a.fills, strokes = _a.strokes;\n var offset = 0;\n params.fields.forEach(function (f, index) {\n var existingSeries = seriesMap[f.colId];\n var seriesOptions = __assign(__assign({}, seriesDefaults), { type: \"pie\", field: {\n angleKey: f.colId,\n }, showInLegend: index === 0, title: __assign(__assign({}, seriesDefaults.title), { text: seriesDefaults.title.text || f.displayName }) });\n var calloutColors = seriesOptions.callout && seriesOptions.callout.colors;\n var pieSeries = existingSeries || ChartBuilder.createSeries(seriesOptions);\n pieSeries.angleName = f.displayName;\n pieSeries.labelKey = params.category.id;\n pieSeries.labelName = params.category.name;\n pieSeries.data = params.data;\n pieSeries.fills = fills;\n pieSeries.strokes = strokes;\n // Normally all series provide legend items for every slice.\n // For our use case, where all series have the same number of slices in the same order with the same labels\n // (all of which can be different in other use cases) we don't want to show repeating labels in the legend,\n // so we only show legend items for the first series, and then when the user toggles the slices of the\n // first series in the legend, we programmatically toggle the corresponding slices of other series.\n if (index === 0) {\n pieSeries.toggleSeriesItem = function (itemId, enabled) {\n if (doughnutChart) {\n doughnutChart.series.forEach(function (series) {\n series.dataEnabled[itemId] = enabled;\n });\n }\n pieSeries.scheduleData();\n };\n }\n pieSeries.outerRadiusOffset = offset;\n offset -= 20;\n pieSeries.innerRadiusOffset = offset;\n offset -= 20;\n if (calloutColors) {\n pieSeries.calloutColors = calloutColors;\n }\n if (!existingSeries) {\n seriesMap[f.colId] = pieSeries;\n }\n });\n // Because repaints are automatic, it's important to remove/add/update series at once,\n // so that we don't get painted twice.\n doughnutChart.series = _.values(seriesMap);\n };\n DoughnutChartProxy.prototype.getDefaultOptions = function () {\n var strokes = this.getPredefinedPalette().strokes;\n var options = this.getDefaultChartOptions();\n var fontOptions = this.getDefaultFontOptions();\n options.seriesDefaults = __assign(__assign({}, options.seriesDefaults), { title: __assign(__assign({}, fontOptions), { enabled: true, fontSize: 12, fontWeight: 'bold' }), callout: {\n colors: strokes,\n length: 10,\n strokeWidth: 2,\n }, label: __assign(__assign({}, fontOptions), { enabled: false, offset: 3, minRequiredAngle: 0 }), tooltip: {\n enabled: true,\n }, shadow: this.getDefaultDropShadowOptions() });\n return options;\n };\n return DoughnutChartProxy;\n}(PolarChartProxy));\nexport { DoughnutChartProxy };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, AgDialog, Autowired, ChartType, Component, PostConstruct, RefSelector } from \"@ag-grid-community/core\";\nimport { ChartMenu } from \"./menu/chartMenu\";\nimport { ChartController } from \"./chartController\";\nimport { ChartDataModel } from \"./chartDataModel\";\nimport { BarChartProxy } from \"./chartProxies/cartesian/barChartProxy\";\nimport { AreaChartProxy } from \"./chartProxies/cartesian/areaChartProxy\";\nimport { LineChartProxy } from \"./chartProxies/cartesian/lineChartProxy\";\nimport { PieChartProxy } from \"./chartProxies/polar/pieChartProxy\";\nimport { DoughnutChartProxy } from \"./chartProxies/polar/doughnutChartProxy\";\nimport { ScatterChartProxy } from \"./chartProxies/cartesian/scatterChartProxy\";\nvar GridChartComp = /** @class */ (function (_super) {\n __extends(GridChartComp, _super);\n function GridChartComp(params) {\n var _this = _super.call(this, GridChartComp.TEMPLATE) || this;\n _this.getChartPaletteName = function () { return _this.chartController.getPaletteName(); };\n _this.getChartComponentsWrapper = function () { return _this.eChartComponentsWrapper; };\n _this.getDockedContainer = function () { return _this.eDockedContainer; };\n _this.getCurrentChartType = function () { return _this.chartType; };\n _this.params = params;\n return _this;\n }\n GridChartComp.prototype.init = function () {\n var modelParams = {\n pivotChart: this.params.pivotChart,\n chartType: this.params.chartType,\n aggFunc: this.params.aggFunc,\n cellRange: this.params.cellRange,\n suppressChartRanges: this.params.suppressChartRanges,\n };\n this.model = this.wireBean(new ChartDataModel(modelParams));\n this.chartController = this.wireBean(new ChartController(this.model, this.params.chartPaletteName));\n this.createChart();\n if (this.params.insideDialog) {\n this.addDialog();\n }\n this.addResizeListener();\n this.addMenu();\n this.addDestroyableEventListener(this.getGui(), 'focusin', this.setActiveChartCellRange.bind(this));\n this.addDestroyableEventListener(this.chartController, ChartController.EVENT_CHART_UPDATED, this.refresh.bind(this));\n this.addDestroyableEventListener(this.chartMenu, ChartMenu.EVENT_DOWNLOAD_CHART, this.downloadChart.bind(this));\n this.refresh();\n };\n GridChartComp.prototype.createChart = function () {\n var width, height;\n // if chart already exists, destroy it and remove it from DOM\n if (this.chartProxy) {\n var chart = this.chartProxy.getChart();\n if (chart) {\n // preserve existing width/height\n width = chart.width;\n height = chart.height;\n }\n this.chartProxy.destroy();\n }\n var processChartOptionsFunc = this.params.processChartOptions ?\n this.params.processChartOptions : this.gridOptionsWrapper.getProcessChartOptionsFunc();\n var categorySelected = this.model.getSelectedDimension().colId !== ChartDataModel.DEFAULT_CATEGORY;\n var chartType = this.model.getChartType();\n var isGrouping = this.model.isGrouping();\n var chartProxyParams = {\n chartType: chartType,\n processChartOptions: processChartOptionsFunc,\n getChartPaletteName: this.getChartPaletteName.bind(this),\n allowPaletteOverride: !this.params.chartPaletteName,\n isDarkTheme: this.environment.isThemeDark.bind(this.environment),\n parentElement: this.eChart,\n width: width,\n height: height,\n eventService: this.eventService,\n categorySelected: categorySelected,\n grouping: isGrouping,\n document: this.gridOptionsWrapper.getDocument()\n };\n // set local state used to detect when chart type changes\n this.chartType = chartType;\n this.chartGroupingActive = isGrouping;\n this.chartProxy = this.createChartProxy(chartProxyParams);\n this.chartController.setChartProxy(this.chartProxy);\n };\n GridChartComp.prototype.createChartProxy = function (chartProxyParams) {\n switch (chartProxyParams.chartType) {\n case ChartType.GroupedColumn:\n case ChartType.StackedColumn:\n case ChartType.NormalizedColumn:\n case ChartType.GroupedBar:\n case ChartType.StackedBar:\n case ChartType.NormalizedBar:\n return new BarChartProxy(chartProxyParams);\n case ChartType.Pie:\n return new PieChartProxy(chartProxyParams);\n case ChartType.Doughnut:\n return new DoughnutChartProxy(chartProxyParams);\n case ChartType.Area:\n case ChartType.StackedArea:\n case ChartType.NormalizedArea:\n return new AreaChartProxy(chartProxyParams);\n case ChartType.Line:\n return new LineChartProxy(chartProxyParams);\n case ChartType.Scatter:\n case ChartType.Bubble:\n return new ScatterChartProxy(chartProxyParams);\n }\n };\n GridChartComp.prototype.addDialog = function () {\n var _this = this;\n var title = this.chartTranslator.translate(this.params.pivotChart ? 'pivotChartTitle' : 'rangeChartTitle');\n this.chartDialog = new AgDialog({\n resizable: true,\n movable: true,\n maximizable: true,\n title: title,\n component: this,\n centered: true,\n closable: true\n });\n this.getContext().wireBean(this.chartDialog);\n this.chartDialog.addEventListener(AgDialog.EVENT_DESTROYED, function () { return _this.destroy(); });\n };\n GridChartComp.prototype.addMenu = function () {\n this.chartMenu = new ChartMenu(this.chartController);\n this.chartMenu.setParentComponent(this);\n this.getContext().wireBean(this.chartMenu);\n this.eChartComponentsWrapper.appendChild(this.chartMenu.getGui());\n };\n GridChartComp.prototype.refresh = function () {\n if (this.shouldRecreateChart()) {\n this.createChart();\n }\n this.updateChart();\n };\n GridChartComp.prototype.shouldRecreateChart = function () {\n var chartTypeChanged = this.chartType !== this.model.getChartType();\n var groupingChanged = this.chartGroupingActive !== this.model.isGrouping();\n return chartTypeChanged || groupingChanged;\n };\n GridChartComp.prototype.slideDockedOut = function (width) {\n this.eDockedContainer.style.minWidth = width + \"px\";\n };\n GridChartComp.prototype.slideDockedIn = function () {\n this.eDockedContainer.style.minWidth = '0';\n };\n GridChartComp.prototype.getChartModel = function () {\n return this.chartController.getChartModel();\n };\n GridChartComp.prototype.updateChart = function () {\n var _a = this, model = _a.model, chartProxy = _a.chartProxy;\n var selectedCols = model.getSelectedValueColState();\n var fields = selectedCols.map(function (c) { return ({ colId: c.colId, displayName: c.displayName }); });\n var data = model.getData();\n var chartEmpty = this.handleEmptyChart(data, fields);\n if (chartEmpty) {\n return;\n }\n var selectedDimension = model.getSelectedDimension();\n var chartUpdateParams = {\n data: data,\n category: {\n id: selectedDimension.colId,\n name: selectedDimension.displayName\n },\n fields: fields\n };\n chartProxy.update(chartUpdateParams);\n };\n GridChartComp.prototype.handleEmptyChart = function (data, fields) {\n var parent = this.chartProxy.getChart().parent;\n var pivotModeDisabled = this.model.isPivotChart() && !this.model.isPivotMode();\n var minFieldsRequired = 1;\n if (this.chartController.isActiveXYChart()) {\n minFieldsRequired = this.model.getChartType() === ChartType.Bubble ? 3 : 2;\n }\n var isEmptyChart = fields.length < minFieldsRequired || data.length === 0;\n if (parent) {\n _.addOrRemoveCssClass(parent, 'ag-chart-empty', pivotModeDisabled || isEmptyChart);\n }\n if (pivotModeDisabled) {\n this.eEmpty.innerText = this.chartTranslator.translate('pivotChartRequiresPivotMode');\n return true;\n }\n if (isEmptyChart) {\n this.eEmpty.innerText = this.chartTranslator.translate('noDataToChart');\n return true;\n }\n return false;\n };\n GridChartComp.prototype.downloadChart = function () {\n var chart = this.chartProxy.getChart();\n var fileName = chart.title ? chart.title.text : 'chart';\n chart.scene.download(fileName);\n };\n GridChartComp.prototype.refreshCanvasSize = function () {\n var eChartWrapper = this.eChart;\n var chart = this.chartProxy.getChart();\n chart.height = _.getInnerHeight(eChartWrapper);\n chart.width = _.getInnerWidth(eChartWrapper);\n };\n GridChartComp.prototype.addResizeListener = function () {\n var _this = this;\n var eGui = this.getGui();\n var resizeFunc = function () {\n if (!eGui || !eGui.offsetParent) {\n observeResizeFunc();\n return;\n }\n _this.refreshCanvasSize();\n };\n var observeResizeFunc = this.resizeObserverService.observeResize(this.eChart, resizeFunc, 5);\n };\n GridChartComp.prototype.setActiveChartCellRange = function (focusEvent) {\n if (this.getGui().contains(focusEvent.relatedTarget)) {\n return;\n }\n this.chartController.setChartRange();\n };\n GridChartComp.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.chartController) {\n this.chartController.destroy();\n }\n if (this.chartProxy) {\n this.chartProxy.destroy();\n }\n if (this.chartMenu) {\n this.chartMenu.destroy();\n }\n // don't want to invoke destroy() on the Dialog / MessageBox (prevents destroy loop)\n if (this.chartDialog && this.chartDialog.isAlive()) {\n this.chartDialog.destroy();\n }\n // if the user is providing containers for the charts, we need to clean up, otherwise the old chart\n // data will still be visible although the chart is no longer bound to the grid\n var eGui = this.getGui();\n _.clearElement(eGui);\n // remove from parent, so if user provided container, we detach from the provided dom element\n _.removeFromParent(eGui);\n };\n GridChartComp.TEMPLATE = \"
\\n
\\n
\\n
\\n
\\n
\\n
\\n
\";\n __decorate([\n RefSelector('eChart')\n ], GridChartComp.prototype, \"eChart\", void 0);\n __decorate([\n RefSelector('eChartComponentsWrapper')\n ], GridChartComp.prototype, \"eChartComponentsWrapper\", void 0);\n __decorate([\n RefSelector('eDockedContainer')\n ], GridChartComp.prototype, \"eDockedContainer\", void 0);\n __decorate([\n RefSelector('eEmpty')\n ], GridChartComp.prototype, \"eEmpty\", void 0);\n __decorate([\n Autowired('resizeObserverService')\n ], GridChartComp.prototype, \"resizeObserverService\", void 0);\n __decorate([\n Autowired('gridOptionsWrapper')\n ], GridChartComp.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n Autowired('environment')\n ], GridChartComp.prototype, \"environment\", void 0);\n __decorate([\n Autowired('chartTranslator')\n ], GridChartComp.prototype, \"chartTranslator\", void 0);\n __decorate([\n Autowired('eventService')\n ], GridChartComp.prototype, \"eventService\", void 0);\n __decorate([\n PostConstruct\n ], GridChartComp.prototype, \"init\", null);\n return GridChartComp;\n}(Component));\nexport { GridChartComp };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { _, Bean, Autowired, PreDestroy, ChartType, Optional } from \"@ag-grid-community/core\";\nimport { GridChartComp } from \"./chartComp/gridChartComp\";\nvar ChartService = /** @class */ (function () {\n function ChartService() {\n // we destroy all charts bound to this grid when grid is destroyed. activeCharts contains all charts, including\n // those in developer provided containers.\n this.activeCharts = new Set();\n this.activeChartComps = new Set();\n }\n ChartService.prototype.getChartModels = function () {\n var models = [];\n this.activeChartComps.forEach(function (c) { return models.push(c.getChartModel()); });\n return models;\n };\n ChartService.prototype.createChartFromCurrentRange = function (chartType) {\n if (chartType === void 0) { chartType = ChartType.GroupedColumn; }\n var selectedRange = this.getSelectedRange();\n return this.createChart(selectedRange, chartType);\n };\n ChartService.prototype.createRangeChart = function (params) {\n var cellRange = this.rangeController\n ? this.rangeController.createCellRangeFromCellRangeParams(params.cellRange)\n : undefined;\n if (!cellRange) {\n console.warn(\"ag-Grid - unable to create chart as no range is selected\");\n return;\n }\n return this.createChart(cellRange, params.chartType, params.chartPalette, false, params.suppressChartRanges, params.chartContainer, params.aggFunc, params.processChartOptions);\n };\n ChartService.prototype.createPivotChart = function (params) {\n // if required enter pivot mode\n if (!this.columnController.isPivotMode()) {\n this.columnController.setPivotMode(true, \"pivotChart\");\n }\n // pivot chart range contains all visible column without a row range to include all rows\n var chartAllRangeParams = {\n columns: this.columnController.getAllDisplayedColumns().map(function (col) { return col.getColId(); })\n };\n var cellRange = this.rangeController\n ? this.rangeController.createCellRangeFromCellRangeParams(chartAllRangeParams)\n : undefined;\n if (!cellRange) {\n console.warn(\"ag-Grid - unable to create chart as there are no columns in the grid.\");\n return;\n }\n return this.createChart(cellRange, params.chartType, params.chartPalette, true, true, params.chartContainer, undefined, params.processChartOptions);\n };\n ChartService.prototype.createChart = function (cellRange, chartType, chartPaletteName, pivotChart, suppressChartRanges, container, aggFunc, processChartOptions) {\n var _this = this;\n if (pivotChart === void 0) { pivotChart = false; }\n if (suppressChartRanges === void 0) { suppressChartRanges = false; }\n var createChartContainerFunc = this.gridOptionsWrapper.getCreateChartContainerFunc();\n var params = {\n pivotChart: pivotChart,\n cellRange: cellRange,\n chartType: chartType,\n chartPaletteName: chartPaletteName,\n insideDialog: !(container || createChartContainerFunc),\n suppressChartRanges: suppressChartRanges,\n aggFunc: aggFunc,\n processChartOptions: processChartOptions,\n };\n var chartComp = new GridChartComp(params);\n this.context.wireBean(chartComp);\n var chartRef = this.createChartRef(chartComp);\n if (container) {\n // if container exists, means developer initiated chart create via API, so place in provided container\n container.appendChild(chartComp.getGui());\n // if the chart container was placed outside of an element that\n // has the grid's theme, we manually add the current theme to\n // make sure all styles for the chartMenu are rendered correctly\n var theme = this.environment.getTheme();\n if (theme.el && !theme.el.contains(container)) {\n _.addCssClass(container, theme.theme);\n }\n }\n else if (createChartContainerFunc) {\n // otherwise user created chart via grid UI, check if developer provides containers (eg if the application\n // is using its own dialogs rather than the grid provided dialogs)\n createChartContainerFunc(chartRef);\n }\n else {\n // add listener to remove from active charts list when charts are destroyed, e.g. closing chart dialog\n chartComp.addEventListener(GridChartComp.EVENT_DESTROYED, function () {\n _this.activeChartComps.delete(chartComp);\n _this.activeCharts.delete(chartRef);\n });\n }\n return chartRef;\n };\n ChartService.prototype.createChartRef = function (chartComp) {\n var _this = this;\n var chartRef = {\n destroyChart: function () {\n if (_this.activeCharts.has(chartRef)) {\n chartComp.destroy();\n _this.activeChartComps.delete(chartComp);\n _this.activeCharts.delete(chartRef);\n }\n },\n chartElement: chartComp.getGui()\n };\n this.activeCharts.add(chartRef);\n this.activeChartComps.add(chartComp);\n return chartRef;\n };\n ChartService.prototype.getSelectedRange = function () {\n var ranges = this.rangeController.getCellRanges();\n return ranges.length > 0 ? ranges[0] : {};\n };\n ChartService.prototype.destroyAllActiveCharts = function () {\n this.activeCharts.forEach(function (chart) { return chart.destroyChart(); });\n };\n __decorate([\n Optional('rangeController')\n ], ChartService.prototype, \"rangeController\", void 0);\n __decorate([\n Autowired('columnController')\n ], ChartService.prototype, \"columnController\", void 0);\n __decorate([\n Autowired('environment')\n ], ChartService.prototype, \"environment\", void 0);\n __decorate([\n Autowired('context')\n ], ChartService.prototype, \"context\", void 0);\n __decorate([\n Autowired('gridOptionsWrapper')\n ], ChartService.prototype, \"gridOptionsWrapper\", void 0);\n __decorate([\n PreDestroy\n ], ChartService.prototype, \"destroyAllActiveCharts\", null);\n ChartService = __decorate([\n Bean('chartService')\n ], ChartService);\n return ChartService;\n}());\nexport { ChartService };\n","var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Autowired, Bean } from \"@ag-grid-community/core\";\nvar ChartTranslator = /** @class */ (function () {\n function ChartTranslator() {\n }\n ChartTranslator_1 = ChartTranslator;\n ChartTranslator.prototype.translate = function (toTranslate) {\n var translate = this.gridOptionsWrapper.getLocaleTextFunc();\n var defaultTranslation = ChartTranslator_1.DEFAULT_TRANSLATIONS[toTranslate];\n return translate(toTranslate, defaultTranslation);\n };\n var ChartTranslator_1;\n ChartTranslator.DEFAULT_TRANSLATIONS = {\n pivotChartTitle: 'Pivot Chart',\n rangeChartTitle: 'Range Chart',\n settings: 'Settings',\n data: 'Data',\n format: 'Format',\n categories: 'Categories',\n series: 'Series',\n xyValues: 'X Y Values',\n paired: 'Paired Mode',\n axis: 'Axis',\n color: 'Color',\n thickness: 'Thickness',\n xRotation: 'X Rotation',\n yRotation: 'Y Rotation',\n ticks: 'Ticks',\n width: 'Width',\n length: 'Length',\n padding: 'Padding',\n chart: 'Chart',\n title: 'Title',\n background: 'Background',\n font: 'Font',\n top: 'Top',\n right: 'Right',\n bottom: 'Bottom',\n left: 'Left',\n labels: 'Labels',\n size: 'Size',\n minSize: 'Minimum Size',\n maxSize: 'Maximum Size',\n legend: 'Legend',\n position: 'Position',\n markerSize: 'Marker Size',\n markerStroke: 'Marker Stroke',\n markerPadding: 'Marker Padding',\n itemPaddingX: 'Item Padding X',\n itemPaddingY: 'Item Padding Y',\n strokeWidth: 'Stroke Width',\n offset: 'Offset',\n offsets: 'Offsets',\n tooltips: 'Tooltips',\n callout: 'Callout',\n markers: 'Markers',\n shadow: 'Shadow',\n blur: 'Blur',\n xOffset: 'X Offset',\n yOffset: 'Y Offset',\n lineWidth: 'Line Width',\n normal: 'Normal',\n bold: 'Bold',\n italic: 'Italic',\n boldItalic: 'Bold Italic',\n predefined: 'Predefined',\n fillOpacity: 'Fill Opacity',\n strokeOpacity: 'Line Opacity',\n columnGroup: 'Column',\n barGroup: 'Bar',\n pieGroup: 'Pie',\n lineGroup: 'Line',\n scatterGroup: 'X Y (Scatter)',\n areaGroup: 'Area',\n groupedColumnTooltip: 'Grouped',\n stackedColumnTooltip: 'Stacked',\n normalizedColumnTooltip: '100% Stacked',\n groupedBarTooltip: 'Grouped',\n stackedBarTooltip: 'Stacked',\n normalizedBarTooltip: '100% Stacked',\n pieTooltip: 'Pie',\n doughnutTooltip: 'Doughnut',\n lineTooltip: 'Line',\n groupedAreaTooltip: 'Area',\n stackedAreaTooltip: 'Stacked',\n normalizedAreaTooltip: '100% Stacked',\n scatterTooltip: 'Scatter',\n bubbleTooltip: 'Bubble',\n noDataToChart: 'No data available to be charted.',\n pivotChartRequiresPivotMode: 'Pivot Chart requires Pivot Mode enabled.',\n };\n __decorate([\n Autowired('gridOptionsWrapper')\n ], ChartTranslator.prototype, \"gridOptionsWrapper\", void 0);\n ChartTranslator = ChartTranslator_1 = __decorate([\n Bean(\"chartTranslator\")\n ], ChartTranslator);\n return ChartTranslator;\n}());\nexport { ChartTranslator };\n","import { ModuleNames } from \"@ag-grid-community/core\";\nimport { EnterpriseCoreModule } from \"@ag-grid-enterprise/core\";\nimport { ChartService } from \"./chartAdaptor/chartService\";\nimport { ChartTranslator } from \"./chartAdaptor/chartComp/chartTranslator\";\nimport { RangeSelectionModule } from \"@ag-grid-enterprise/range-selection\";\nexport var GridChartsModule = {\n moduleName: ModuleNames.GridChartsModule,\n beans: [\n ChartService, ChartTranslator\n ],\n dependantModules: [\n RangeSelectionModule,\n EnterpriseCoreModule\n ]\n};\n","import { AllCommunityModules } from \"@ag-grid-community/all-modules\";\nimport { ClipboardModule } from \"@ag-grid-enterprise/clipboard\";\nimport { ColumnsToolPanelModule } from \"@ag-grid-enterprise/column-tool-panel\";\nimport { ExcelExportModule } from \"@ag-grid-enterprise/excel-export\";\nimport { FiltersToolPanelModule } from \"@ag-grid-enterprise/filter-tool-panel\";\nimport { GridChartsModule } from \"@ag-grid-enterprise/charts\";\nimport { MasterDetailModule } from \"@ag-grid-enterprise/master-detail\";\nimport { MenuModule } from \"@ag-grid-enterprise/menu\";\nimport { RangeSelectionModule } from \"@ag-grid-enterprise/range-selection\";\nimport { RichSelectModule } from \"@ag-grid-enterprise/rich-select\";\nimport { RowGroupingModule } from \"@ag-grid-enterprise/row-grouping\";\nimport { ServerSideRowModelModule } from \"@ag-grid-enterprise/server-side-row-model\";\nimport { SetFilterModule } from \"@ag-grid-enterprise/set-filter\";\nimport { SideBarModule } from \"@ag-grid-enterprise/side-bar\";\nimport { StatusBarModule } from \"@ag-grid-enterprise/status-bar\";\nimport { ViewportRowModelModule } from \"@ag-grid-enterprise/viewport-row-model\";\nexport * from \"@ag-grid-community/all-modules\";\nexport * from \"@ag-grid-enterprise/clipboard\";\nexport * from \"@ag-grid-enterprise/column-tool-panel\";\nexport * from \"@ag-grid-enterprise/excel-export\";\nexport * from \"@ag-grid-enterprise/filter-tool-panel\";\nexport * from \"@ag-grid-enterprise/charts\";\nexport * from \"@ag-grid-enterprise/master-detail\";\nexport * from \"@ag-grid-enterprise/menu\";\nexport * from \"@ag-grid-enterprise/range-selection\";\nexport * from \"@ag-grid-enterprise/rich-select\";\nexport * from \"@ag-grid-enterprise/row-grouping\";\nexport * from \"@ag-grid-enterprise/server-side-row-model\";\nexport * from \"@ag-grid-enterprise/set-filter\";\nexport * from \"@ag-grid-enterprise/side-bar\";\nexport * from \"@ag-grid-enterprise/status-bar\";\nexport * from \"@ag-grid-enterprise/viewport-row-model\";\nexport * from \"@ag-grid-enterprise/core\";\nexport var AllEnterpriseModules = [\n ClipboardModule,\n ColumnsToolPanelModule,\n ExcelExportModule,\n FiltersToolPanelModule,\n GridChartsModule,\n MasterDetailModule,\n MenuModule,\n RangeSelectionModule,\n RichSelectModule,\n RowGroupingModule,\n ServerSideRowModelModule,\n SetFilterModule,\n SideBarModule,\n StatusBarModule,\n ViewportRowModelModule\n];\nexport var AllModules = AllCommunityModules.concat(AllEnterpriseModules);\n"],"sourceRoot":""}