{"version":3,"sources":["webpack:///./node_modules/core-js/internals/string-pad.js","webpack:///./src/modules/reserve/components/ReserveResource/ReserveDashboard.vue?6027","webpack:///./node_modules/core-js/modules/es.string.pad-start.js","webpack:///./node_modules/core-js/internals/string-pad-webkit-bug.js","webpack:///./node_modules/core-js/modules/es.array.fill.js","webpack:///./src/modules/reserve/components/ReserveResource/ReserveDashboard.vue","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Percent.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Type.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Array.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Object.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Disposer.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Utils.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Color.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/EventDispatcher.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Animation.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/List.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Children.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Math.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Ease.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/States.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/Registry.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Order.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Entity.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Template.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Sprite.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/patterns/Pattern.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/patterns/PicturePattern.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/backend/Renderer.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Graphics.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Rectangle.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Layout.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/HorizontalLayout.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/VerticalLayout.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/GridLayout.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/TextFormatter.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/PopulateString.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Container.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Text.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/ResizeSensor.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/InterfaceColors.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Label.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/PointedRectangle.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Tooltip.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/NumberFormatter.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Timezone.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/DateFormatter.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/DurationFormatter.js","webpack:///./node_modules/@amcharts/amcharts5/locales/en.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Language.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/Theme.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/themes/DefaultTheme.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Matrix.js","webpack:///./node_modules/svg-arc-to-cubic-bezier/modules/index.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/backend/CanvasRenderer.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/Root.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/gradients/Gradient.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/gradients/LinearGradient.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/RoundedRectangle.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Circle.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Bullet.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Data.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Component.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Time.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Series.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Legend.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/ColorSet.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/XYChartDefaultTheme.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Chart.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/SerialChart.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Button.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/XYChart.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/Axis.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/ValueAxis.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Draw.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Line.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Tick.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisTick.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/Grid.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisLabel.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRenderer.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRendererY.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/CategoryAxis.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/axes/AxisRendererX.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/series/XYSeries.js","webpack:///./node_modules/d3-shape/src/array.js","webpack:///./node_modules/d3-shape/src/constant.js","webpack:///./node_modules/d3-shape/src/curve/linear.js","webpack:///./node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-shape/src/path.js","webpack:///./node_modules/d3-shape/src/point.js","webpack:///./node_modules/d3-shape/src/line.js","webpack:///./node_modules/d3-shape/src/area.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/series/LineSeries.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/xy/XYCursor.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/themes/AnimatedTheme.js","webpack:///./node_modules/@amcharts/amcharts5/themes/Animated.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentDefaultTheme.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentChart.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/pie/PieChart.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/percent/PercentSeries.js","webpack:///./node_modules/d3-shape/src/math.js","webpack:///./node_modules/d3-shape/src/arc.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/Slice.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/RadialText.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/RadialLabel.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/pie/PieSeries.js","webpack:///./src/modules/reserve/components/ReserveResource/ReserveDashboard.ts","webpack:///./src/modules/reserve/components/ReserveResource/ReserveDashboard.ts?1036","webpack:///./src/modules/reserve/components/ReserveResource/ReserveDashboard.vue?0029"],"names":["uncurryThis","toLength","toString","$repeat","requireObjectCoercible","repeat","stringSlice","slice","ceil","Math","createMethod","IS_END","$this","maxLength","fillString","fillLen","stringFiller","S","intMaxLength","stringLength","length","fillStr","undefined","module","exports","start","end","$","$padStart","WEBKIT_BUG","target","proto","forced","padStart","this","arguments","userAgent","test","fill","addToUnscopables","render","_vm","_c","_self","_setupProxy","attrs","staticClass","directives","name","rawName","value","statParentCnfroomId","expression","staticStyle","on","$event","$$selectedVal","Array","prototype","filter","call","options","o","selected","map","val","_value","multiple","statParentCnfroom","_v","_l","parentMeetingroomList","item","index","domProps","uniqueId","_s","displayName","updateDateRange","ref","updateStartDate","updateEndDate","parentCnfroomId","meetingroomStatsDownloadExcel","currentYear","formattedMonth","goToPreviousMonth","goToNextMonth","TotCnt","DiffCnt","class","UdClass","TotCnt_ENTER","TotCnt_CANCEL","RoomOperatingRate","AvgReserveMim","NoShowPercentile","daysTotCnt","updateDateDays","rangeBtn","button","key","active","selectedRange","makeChart","deptTotCnt","updateDateReserve","updateDateNoShow","noShowBars","bar","removeDecimal","style","width","noShowData","label","_m","formatNumber","noShowCnt","percentile","staticRenderFns","Percent","percent","Object","defineProperty","enumerable","configurable","writable","min","max","p100","p50","Number","getType","toNumber","isNumber","converted","isString","replace","toDate","isDate","Date","num","numberToString","Infinity","negative","abs","res","parsed","exec","digits","decimals","exponent","zeros","string","amount","join","isObject","PLACEHOLDER","PLACEHOLDER2","indexOf","array","i","any","fn","output","each","eachReverse","eachContinue","element","found","splice","removeFirst","move","toIndex","removeIndex","push","insertIndex","pushOne","copy","findIndex","matches","findIndexReverse","find","findReverse","getSortedIndex","ordering","pivot","order","getFirstSortedIndex","keepIf","keep","keys","object","keysOrdered","sort","assign","f","forEach","hasKey","hasOwnProperty","DisposerClass","_disposed","_dispose","Disposer","dispose","super","_disposers","x","disposers","CounterDisposer","_counter","removeElement","el","parentNode","removeChild","addEventListener","dom","type","listener","removeEventListener","onZoom","window","_ev","supports","cap","getPointerId","event","id","pointerId","document","activeElement","body","blur","input","createElement","position","top","left","appendChild","focus","getRendererEvent","isTouchEvent","ev","Touch","PointerEvent","pointerType","MouseEvent","match","setStyle","property","getStyle","getEventTarget","composedPath","path","contains","a","b","cursor","host","isLocalEvent","root","setInteractive","interactive","pointerEvents","getEventKey","keyCode","iOS","navigator","vendor","getSafeResolution","relativeToValue","full","decimalPlaces","number","padString","len","char","trimLeft","text","trimRight","trim","truncateTextWithEllipsis","breakWords","ellipsis","lastNonAlphanumericIndex","charAt","substring","getFormat","format","toLowerCase","hints","cleanFormat","stripTags","escapeForRgex","splitString","source","rtlChar","splitPattern","segments","split","result","segment","parts","part","concat","getYearDay","date","utc","getFullYear","diff","getTime","getTimezoneOffset","oneDay","floor","getWeek","_utc","d","UTC","getMonth","getDate","day","getUTCDay","setUTCDate","getUTCDate","firstDay","getUTCFullYear","getWeekYear","getMonthWeek","firstWeek","currentWeek","getDayFromWeek","week","year","weekday","setUTCFullYear","getDay","get12Hours","hours","base","getTimeZone","long","savings","timezone","d1","toLocaleString","timeZone","d2","timeZoneName","substr","wotz","wtz","utcDate","tzDate","capitalizeFirst","toUpperCase","hslToRgb","color","r","g","h","s","l","hue2rgb","p","q","t","round","rgbToHsl","rgb","getLightnessStep","step","isLight","saturate","saturation","hsl","alternativeColor","lightAlternative","darkAlternative","light","dark","mergeTags","tags1","tags2","self","sameBounds","right","bottom","string2hex","parseInt","rgba2hex","hex","fromAny","_hex","alpha","fromRGB","toCSSHex","fromString","fromCSS","fromHex","Error","from","to","mode","fromHSL","toHSL","_listeners","_killed","_disabled","_iterating","_enabled","disposer","killed","once","callback","context","_eachListener","info","hasListenersByType","count","_removeListener","_shouldDispatch","dispatch","shouldClone","_removeExistingListener","_on","_type","onAll","waitForAnimations","animations","promises","_","animation","waitForStop","Promise","all","defaultInterpolate","percentInterpolate","colorInterpolate","interpolate","getInterpolate","AnimationState","checkBounds","initial","_values","newValue","events","isEnabled","oldValue","oldIndex","newIndex","oldValues","_onSetIndex","_onInsertIndex","value_a","value_b","_onRemoveIndex","_onMoveIndex","_onPush","values","pushAll","newArray","old","_onClear","setAll","Symbol","iterator","autoDispose","ListTemplate","template","make","container","_container","_events","change","_onRemoved","_onInserted","child","_setParent","childrenDisplay","_childrenDisplay","addChild","_display","addChildAt","markDirtyBounds","markDirty","PI","RADIANS","DEGREES","precision","rounded","pow","fitToRange","angle","sin","cos","normalizeAngle","getArcBounds","cx","cy","startAngle","endAngle","radius","minX","MAX_VALUE","minY","maxX","maxY","bpoints","getArcPoint","fromAngle","toAngle","pt","y","arc","mergeBounds","bounds","bound","inBounds","point","linear","cubic","out","ease","tau","amplitude","period","asin","entity","settings","_entity","_settings","_userSettings","fallback","setRaw","set","seen","defaultState","states","lookup","_eachSetting","get","duration","stateAnimationDuration","easing","stateAnimationEasing","animate","States","_states","state","newState","apply","_applyState","applyAnimate","_applyStateAnimated","Registry","registry","compare","compareArray","leftLength","rightLength","compareNumber","callbacks","_callbacks","_markDirtyKey","loops","startingTime","_animation","_from","_to","_duration","_easing","_loops","_interpolate","_oldTime","_playing","_stopped","_startAnimation","_time","resolve","_reject","stopped","currentTime","counter","_userProperties","Stopped","isDisposed","playing","paused","_animatingSettings","_stopAnimation","_run","percentage","_checkEnded","_reset","_set","_animatingPrivateSettings","_stopAnimationPrivate","setPrivate","_setPrivate","Playing","Paused","_key","_settingEvents","_privateSettingEvents","getRaw","_prevSettings","_sendKeyEvent","_setRaw","stop","remove","_privateSettings","_prevPrivateSettings","_sendPrivateKeyEvent","_setPrivateRaw","_markDirtyPrivateKey","_animationTime","getPrivate","isReal","templates","_createEvents","_root","_internalTemplates","_registerId","_template","_afterNew","_checkDirty","shouldApply","_setObjectTemplate","_applyTemplates","create","_setDefaults","_applyThemes","constructor","classNames","className","has","_dirty","_dirtyPrivate","_disposerProperties","_removeObjectTemplate","_addDirtyEntity","_addAnimation","animationTime","_name","adapters","fold","_removeTemplateProperty","_userPrivateProperties","setPrivateRaw","_removeTemplatePrivateProperty","_findTemplateByKey","_findTemplateByPrivateKey","removePrivate","_rootContainer","other","_eachTemplate","_apply","_templateDisposers","privateSettings","_runSetup","setup","_findStaticTemplate","_templates","_disposeTemplates","_applyTemplate","_findTemplate","force","isConnected","defaults","themes","themeTags","Set","tags","tag","add","_walkParents","_defaultThemes","theme","_removeTemplates","allRules","rules","_lookupRules","rule","every","isDirty","prevId","entitiesById","delay","setTimeout","removeDispose","clearTimeout","hasTag","locale","rest","language","translate","_stateChanged","_entities","_setTemplateProperty","_setTemplatePrivateProperty","onPrivate","copyFrom","_applyStateByKey","sprite","_sprite","originalEvent","simulated","native","_rendererDisposers","e","increment","rendererEvent","RENDERER_EVENTS","_onRenderer","_dispatchParents","parent","dispatchParents","isDragging","_hasDown","_hasMoved","_makePointerEvent","_getBounds","globalBounds","isType","strokeWidth","_renderer","removeHovering","_addPercentagePositionChildren","markDirtyPosition","_templateField","field","dataItem","dataContext","new","_removeTemplateField","oldDataItem","_dataItem","_processTemplateField","eventType","newDataItem","_setDataItem","_parent","_percentageSizeChildren","_percentagePositionChildren","_addDirtyPosition","_localBounds","centerX","centerY","_beforeChanged","_handleStates","previous","tooltip","setLayer","markDirtyLayer","tooltipMoveDp","_tooltipMoveDp","tooltipPointerDp","_tooltipPointerDp","isHover","showTooltip","_statesHandled","isHidden","markDirtyAccessibility","_changed","display","draggable","_dragDp","dragStart","dragMove","dragStop","cancelTouch","tooltipText","tooltipHTML","showTooltipOn","_tooltipDp","getTooltip","hideTooltip","toggleKey","_toggleDp","_isDragging","scale","updatePivotPoint","isPrivateDirty","visible","_addPercentageSizeChildren","_prevWidth","_sizeDirty","_updateSize","wheelable","_registerTabindexOrder","_unregisterTabindexOrder","brightness","contrast","sepia","hue","invert","cursorOverStyle","_focusDp","exportable","_hoverDp","_handleOver","_handleOut","_isDown","_handleUp","_handleDown","inactive","_dragEvent","stopParentDispatch","_dragPoint","_downPoint","_downPoints","downPoint","dragEvent","dragPoint","hypot","getLocalBounds","depth","_addDirtyBounds","isMeasured","invalidateBounds","isFocus","_invalidateAccessibility","oldBounds","_adjustedLocalBounds","newBounds","_fixMinBounds","getAdjustedBounds","minWidth","minHeight","privateWidth","privateHeight","children","removeValue","_clearDirty","tooltipPosition","tooltipTarget","_setMatrix","toGlobal","_getTooltipPoint","height","markDirtyText","promise","show","timeout","hide","dx","dy","_x","xx","yy","innerWidth","_y","innerHeight","_removeParent","_removeFocusElement","localBounds","p0","p1","p2","p3","success","_error","_isShowing","_isHidden","_isHiding","_onShow","_onHide","hovering","focused","isVisibleDeep","isVisible","opacity","compositeOpacity","compositeScale","rotation","compositeRotation","maxWidth","w","maxHeight","_walkParent","updateChildren","prevParent","numberFormatter","dateFormatter","durationFormatter","toLocal","_getDownPointId","moveValue","makeGraphics","_afterNewApplyThemes","_pattern","_clear","_checkDirtyFill","repetition","fillOpacity","backgroundDisplay","_backgroundDisplay","clear","beginFill","drawRect","endFill","_draw","createPattern","_load","canvas","image","_image","patternWidth","patternHeight","fit","centered","src","Image","decode","then","catch","BlendMode","crisp","gradient","gradientTarget","strokeDasharray","setLineDash","strokeDashoffset","setLineDashOffset","blendMode","NORMAL","draw","svgPath","_afterChanged","fillGradient","fillPattern","stroke","strokeGradient","strokePattern","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","shadowOpacity","shadow","stops","colorInherited","opacityInherited","getFill","pattern","strokeOpacity","resolution","lineJoin","lineStyle","endStroke","eachChildren","paddingLeft","availableWidth","totalPercent","childWidth","prevX","adjustedLocalBounds","marginLeft","marginRight","paddingTop","availableHeight","childHeight","prevY","marginTop","marginBottom","_setRawDefault","paddingRight","minCellWidth","maxCellWidth","columnCount","columnWidths","getColumnWidths","column","maxColumnHeight","totalWidth","prefix","RegExp","quotedBlocks","noFormatting","escape","chunks","chunk","chunks2","i2","chunk2","cleanUp","unescape","isImage","fontWeight","textDecoration","populateString","getTagValue","tagName","reg","prop","dateFields","getDateFormatter","numericFields","getNumberFormatter","durationFields","getDurationFormatter","method","params","matches2","reg2","getTagValueFromObject","component","getCustomDataValue","customData","current","formatApplied","tmp","numberValue","dateValue","durationValue","encodeURIComponent","formatParts","formatterType","makeContainer","allChildren","_removeHTMLContent","interactiveChildren","_prevHeight","layout","contentMask","_contentMask","mask","updateBackground","background","verticalScrollbar","_contentHeight","bg","pWidth","pHeight","horizontal","vertical","m","paddingBottom","childBounds","childX","childY","cl","cr","ct","cb","_contentWidth","updateContainer","_updateBounds","_addDirtyParent","html","_setHTMLContent","_positionHTMLElement","_updateHTMLContent","startGrip","endGrip","interfaceColors","_vsbd0","wheelEvent","preventDefault","shiftY","deltaY","_vsbd1","walkChildren","updated","makeTextStyle","makeText","textStyle","_getText","updateTooltip","tooltipElement","_removeTooltipElement","wordWrapWidth","oversizedBehavior","ignoreFormatting","minScale","_textStyles","styleName","ariaLabel","_observer","ResizeObserver","entries","entry","_targets","observe","box","unobserve","_timer","lastTime","loop","now","newSize","getBoundingClientRect","size","requestAnimationFrame","cancelAnimationFrame","observer","makeSensor","_sensor","_element","_listener","addTarget","removeTarget","_text","_makeText","_textKeys","propValue","_setMaxDimentions","_updateChildren","_maybeUpdateHTMLColor","textAlign","textVisible","htmlElement","_getAccessibleText","bwh","xtl","ytl","xtr","ytr","xbr","ybr","xbl","ybl","moveTo","stemX","lineTo","arcTo","stemY","closePath","_setDefaultFn","_label","_updateBackground","_updateTextColor","tooltipContainer","_htmlContentHovered","_handleReaderAnnouncement","_tooltips","readerAlert","getAccessibleText","labelText","labelHTML","labelAriaLabel","updateBackgroundColor","keephover","_keepHoverDp","hover","unhover","outEvent","getEvent","_fillDp","_strokeDp","_labelDp","alternative","cw","ch","parentW","parentH","layerMargin","_w","_h","pointTo","pointerOrientation","pointerLength","bgStrokeSizeY","bgStrokeSizeX","pointerX","pointerY","boundsW","boundsH","_fx","_fy","animationDuration","animationEasing","_setDefault","bns","sns","bs","_t","suffix","formatted","Intl","NumberFormat","details","parseFormat","positive","zero","mod","applyFormat","thousandSeparator","translateEmpty","decimalSeparator","_part","partFormat","mods","modSpacing","thousands","passive","interval","pop","applyPrefix","ol","parseFloat","toPrecision","exp","toExponential","toFixed","ints","ip","intsr","reverse","c","unshift","separator","decs","prefixes","newvalue","applied","k","parseDate","month","hour","minute","second","millisecond","formatToParts","toUTCDate","Timezone","DateTimeFormat","hour12","fractionalSecondDigits","_dtf","offset","offsetUTC","userOffset","setUTCMinutes","getUTCMinutes","newUserOffset","dtf","ignoreTimezone","locales","convertLocal","fullYear","minutes","seconds","milliseconds","timestamp","getUTCMonth","getUTCHours","getUTCSeconds","getUTCMilliseconds","getHours","getMinutes","getSeconds","getMilliseconds","_getMonth","_getShortMonth","translateFunc","_getShortWeekday","_getWeekday","firstDayOfWeek","tz","tzh","tzm","toISOString","toUTCString","dateFormat","_months","_shortMonths","_weekdays","_shortWeekdays","parsedIndexes","resValues","indexAdjust","year3","year2","year1","getStringList","monthLong","monthShort","yearDay","weekdayLong","weekdayShort","am","hour12Base1","hourBase0","hour12Base0","hourBase1","millisecondDigits","zone","iso","regex","resolveMonth","resolveShortMonth","isAm","ts","resolveTimezoneOffset","dir","originalOffset","isDefault","translateAll","list","dmillisecond","dsecond","dminute","dhour","dday","dweek","dmonth","dyear","asecond","aminute","ahour","aday","aweek","amonth","ayear","baseUnit","dirs","absolute","_unitAliases","tstamp","toTimeStamp","unit","_toTimeUnit","unitValue","_getUnitValue","code","maxValue","maxUnit","getValueUnit","currentUnit","ms","_getUnitValues","timeUnit","en","prompt","translation","localeTarget","translations","setTranslationAny","setupDefaultRules","themeClass","_rules","ruleRaw","setColor","ic","horizontalLayout","verticalLayout","bind","primaryButton","primaryButtonHover","primaryButtonDown","primaryButtonActive","primaryButtonDisabled","primaryButtonTextDisabled","primaryButtonText","primaryButtonStroke","secondaryButton","secondaryButtonHover","secondaryButtonDown","secondaryButtonActive","secondaryButtonText","secondaryButtonStroke","grid","alternativeBackground","alternativeText","disabled","passOptions","lightness","colors","reuse","startIndex","interpolationDuration","interpolationEasing","tooltipX","tooltipY","setStateOnChildren","pinchZoom","maxZoomLevel","minZoomLevel","zoomStep","maxPanOut","gap","colorOpacity","checkered","horizontalGap","verticalGap","density","minOpacity","maxOpacity","fillField","strokeField","nameField","layer","clickTarget","ariaChecked","focusable","role","cornerRadiusBL","cornerRadiusTL","cornerRadiusBR","cornerRadiusTR","populateText","stepCount","fontFamily","fontSize","textType","inside","baseRadius","orientation","editOn","multiLine","pointerBaseWidth","cornerRadius","shiftRadius","dRadius","dInnerRadius","locationX","locationY","getFillFromSprite","getStrokeFromSprite","autoTextColor","forceInactive","ariaValueMin","ariaValueMax","ariaLive","spikes","innerRadius","rotationStep","Matrix","tx","ty","pivotX","pivotY","origin","matrix","a1","b1","c1","tx1","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_e","_i","next","done","err","isArray","TypeError","TAU","mapToEllipse","_ref","rx","ry","cosphi","sinphi","centerx","centery","xp","yp","approxUnitArc","ang1","ang2","tan","x1","y1","x2","y2","vectorAngle","ux","uy","vx","vy","sign","dot","acos","getArcCenter","px","py","largeArcFlag","sweepFlag","pxp","pyp","rxsq","rysq","pxpsq","pypsq","radicant","sqrt","centerxp","centeryp","vx1","vy1","vx2","vy2","arcToBezier","_ref2","_ref2$xAxisRotation","xAxisRotation","_ref2$largeArcFlag","_ref2$sweepFlag","curves","lambda","_getArcCenter","_getArcCenter2","ratio","curve","_mapToEllipse","_mapToEllipse2","_mapToEllipse3","checkArgs","actual","expected","checkMinArgs","checkEvenArgs","splitArcFlags","args","flag","assertBinary","distributeId","eachTargets","hitTarget","onPointerEvent","touches","changedTouches","isTainted","getContext","willReadFrequently","drawImage","getImageData","console","warn","clearCanvas","view","CanvasPivot","renderer","status","_layer","_removeObject","getLayer","dirty","defaultLayer","margin","_ghostLayer","setMargin","layers","registerChildLayer","resizeLayer","resizeGhost","_bounds","_colorId","paintId","_forceInteractive","_isInteractive","_matrix","applyInverse","_uMatrix","setTransform","bn","_addBounds","getLocalMatrix","_addEvent","_localMatrix","prepend","_transformMargin","_transform","_omitTainted","subStatus","ghostLayer","ghostContext","save","_transformLayer","_runPath","clip","globalAlpha","compoundAlpha","_isInteractiveMask","_render","restore","tainted","_hovering","_dragging","some","tapToActivate","_touchActive","shouldCancelTouch","_children","_childLayers","deep","setPoint","Op","_context","_forceColor","forceColor","colorize","BeginPath","beginPath","BeginFill","fillStyle","EndFill","clearShadow","EndStroke","LineStyle","strokeStyle","lineWidth","LineDash","dash","LineDashOffset","dashOffset","lineDashOffset","DrawRect","rect","DrawCircle","DrawEllipse","radiusX","radiusY","ellipse","anticlockwise","arcBounds","ArcTo","LineTo","MoveTo","ClosePath","BezierCurveTo","cpX","cpY","cpX2","cpY2","toX","toY","bezierCurveTo","QuadraticCurveTo","quadraticCurveTo","Shadow","offsetX","offsetY","GraphicsImage","_operations","op","_fillAlpha","_pushOp","toCSS","_hasShadows","_strokeAlpha","cpx","cpy","qcpx","qcpy","SEGMENTS_REGEXP","ARGS_REGEXP","relative","layerDirty","globalCompositeOperation","_getColorId","pathGhost","colorizeGhost","addBounds","_textInfo","direction","textBaseline","ignoreGhost","ignoreFontWeight","fontStyle","_getFontStyle","font","_shared","style2","fontVariant","_measure","_prerender","line","_index","textChunks","fillText","thickness","metrics","_measureText","actualBoundingBoxLeft","actualBoundingBoxRight","getTextStyle","rtl","truncate","wrap","_ignoreFontWeight","refText","lines","currentStyle","styleRestored","lineInfo","ascent","actualBoundingBoxAscent","actualBoundingBoxDescent","currentFormat","currentFill","currentChunkWidth","currentVerticalAlign","currentDecoration","skipFurtherText","firstTextChunk","leftoverChunks","verticalAlign","chunkWidth","ellipsisMetrics","ellipsisWidth","excessWidth","_truncateText","tmpText","leftBoundMod","rightBoundMod","boundsMod","chunkHeight","lineHeight","currentChunkOffset","baselineRatio","_fitRatio","_originalScale","maxW","maxH","fallbackBreakWords","measureText","fakeMetrics","div","innerText","visibility","bbox","fontBoundingBoxAscent","fontBoundingBoxDescent","_renderCircular","deltaAngle","inward","align","kerning","clockwise","shouldReverse","_textReversed","maxAngle","midAngle","textHeight","lineStartAngle","rotate","angleShift","charWidth","_measureCircular","chars","CanvasImage","_imageMask","naturalWidth","naturalHeight","_getMask","imageSmoothingEnabled","fillRect","originalPoint","identifier","_patternCanvas","devicePixelRatio","setAttribute","_layerDom","exportableView","_touchActiveTimeout","_delayTouchDeactivate","prevent","obj","imageArray","tapToActivateTimeout","createLinearGradient","radius1","radius2","createRadialGradient","graphics","_patternContext","clearRect","renderDetached","resize","_calculatedWidth","_calculatedHeight","realWidth","realHeight","calculatedWidth","calculatedHeight","_realWidth","_realHeight","CanvasLayer","existingLayer","getLayerByOrder","createDetachedLayer","layerIndex","insertBefore","_dirtyLayers","_lastPointerMoveEvent","_dispatchGlobalMousemove","_colorMap","DOMRect","adjustPoint","clientX","clientY","widthScale","heightScale","_adjustBoundingBox","pixel","data","colorId","hit","getImageArray","dispatching","cleanup","disposed","interactionsEnabled","_withEvents","dispatched","originalTarget","_getHitTarget","dragged","_mousedown","_dispatchEvent","delete","_replacedCursorStyle","_dispatchEventAll","clickevent","timer","_makeSharedEvent","_onPointerEvent","mouseup","_dispatchGlobalMouseup","pointercancel","mousedown","_dispatchMousedown","mousemove","_dispatchDragMove","_dispatchDragEnd","_dispatchDoubleClick","_dispatchWheel","_initEvent","canvasWidth","canvasHeight","maxScale","maintainPixelRatio","canvases","forceRender","needRerender","exportableContext","extraX","extraY","clientWidth","clientHeight","domWidth","domHeight","_resolution","_width","_height","rAF","fps","accessible","_a11yD","useSafeResolution","HTMLElement","getElementById","rootElements","inner","tooltipContainerBounds","_tooltipContainerSettings","_inner","_updateComputedStyles","_init","childNodes","_initResizeSensor","_logo","offsetWidth","offsetHeight","logo","open","_handleLogo","calculateSize","tabindex","_getRealSize","_getCalculatedSize","rootContainer","htmlElementContainer","_htmlElementContainer","overflow","readerAlertElement","_readerAlertElement","focusElementContainer","_focusElementContainer","tooltipElementContainer","_tooltipElementContainer","eventKey","_isShift","shiftKey","focusedSprite","_focusedSprite","downEvent","dragOffsetX","dragOffsetY","_keyboardDragPoint","moveEvent","upEvent","group","items","_tabindexes","lastIndex","_startTicker","setThemes","_addTooltip","_hasLicense","_showBranding","_resizeSensorDisposer","autoResize","_focusElementDirty","_updateCurrentFocus","_tickers","running","_animations","_runAnimation","_isDirtyAnimation","allParents","_isDirtyParents","_dirtyParents","uid","_prepareChildren","objects","_isDirty","depths","_dirtyBounds","_positionHTMLElements","dirtyPositions","_dirtyPositions","_updatePosition","_updateTick","_checkComputedStyles","_runTickers","animationDone","_runAnimations","_runDirties","resetImageArray","_renderFrame","_ticker","_paused","endTime","performance","_runTicker","markDirtyGlobal","_isDisposed","innerHTML","tooltipContainerSettings","_tooltip","_invalidateTabindexes","aindex","bindex","groups","_moveFocusElement","_makeFocusElement","_decorateFocusElement","_positionFocusElement","focusElement","removeAttribute","ariaCurrent","ariaSelected","ariaOrientation","ariaValueNow","ariaValueText","ariaControls","getAttribute","tabIndex","_handleFocus","_handleBlur","append","padding","focusPadding","_getSpriteByFocusElement","_focusNext","focusableElements","querySelectorAll","_makeTooltipElement","parentElement","scaleWidth","scaleHeight","styles","getComputedStyle","fontHash","changed","_fontHash","_invalidateLabelBounds","licenses","debugGhostView","boxSizing","_htmlEnabledContainers","visualSettings","setting","transform","transformOrigin","_makeHTMLElement","_target","addColorStop","_offset","_color","getBounds","longer","lighten","brighten","wSign","hSign","minSide","crtl","crtr","crbr","crbl","maxcr","drawCircle","series","_positionBullet","processor","processRow","markDirtyValues","disposeDataItem","showDataItem","hideDataItem","_dataItems","incrementRef","_data","decrementRef","_updateFields","dataItems","_mainDataItems","_markDirtyGroup","_dataChanged","_onDataClear","_makeDataItem","processDataItem","properties","bullets","_afterDataChange","valueFields","_valueFields","_valueFieldsF","fieldKey","workingKey","fields","_fields","_fieldsF","makeDataItem","_valuesDirty","inited","_dataGrouped","sleep","timeUnitDurations","getDuration","firstDateOfWeek","firstDate","timeZoneOffset","difference","unitCount","setTime","setUTCHours","setUTCSeconds","setUTCMilliseconds","setUTCMonth","wday","weekDay","newTimeZoneOffset","isNaN","tzoffset","parsedDate","offsetDif","newTzoffset","newDiff","_handleBullets","bulletsContainer","bullet","_shouldMakeBullet","bulletFunction","_makeBullet","_makeBulletReal","_aggregatesCalculated","_selectionAggregatesCalculated","endIndex","updateLegendValue","baseValueSeries","calculateAggregates","_dataProcessed","_calculateAggregates","_psi","_pei","markerRectangle","legendDataItem","updateLegendMarker","_makeBullets","sum","absSum","low","high","close","average","changePercent","changePrevious","changePreviousPercent","changeSelection","changeSelectionPercent","openKey","adjustedStartIndex","_getBase","minValue","dataField","neutral","customFunction","propertyValue","logarithmic","log","LOG10E","_hideBullets","_positionBullets","markDirtySize","_bullet","chart","_super","realDuration","valueLabel","txt","_new","itemContainers","themeTagsSelf","markers","labels","valueLabels","markerRectangles","itemContainer","marker","makeItemContainer","makeMarker","useDefaultMarker","makeMarkerRectangle","createLegendMarker","makeLabel","makeValueLabel","clickContainer","_addClickEvents","targetA","targetB","indexA","indexB","hoverDataItem","unhoverDataItem","di","reset","pass","generateColors","getIndex","currentStep","panX","panY","wheelStep","arrangeTooltips","pinchZoomX","pinchZoomY","legendLabelText","minGridDistance","minPosition","maxPosition","behavior","snapToSeriesBy","moveThreshold","minZoomCount","maxZoomCount","maxZoomFactor","maxDeviation","snapTooltip","tooltipLocation","zoomX","zoomY","fixAxisSize","location","multiLocation","opposite","inversed","cellStartLocation","cellEndLocation","startLocation","endLocation","fillRule","axisFill","gridIntervals","dateFormats","periodChangeDateFormats","tooltipDateFormats","markUnitChange","strictMinMax","groupData","groupCount","groupIntervals","axis","endValue","intervalDuration","baseInterval","gridInterval","baseValue","autoZoom","maskBullets","stackToNegative","openValueXGrouped","openValueYGrouped","valueXGrouped","valueYGrouped","seriesTooltipTarget","adjustBulletPosition","clustered","connect","autoGapCount","tension","lowValueXGrouped","lowValueYGrouped","highValueXGrouped","highValueYGrouped","seriesContainer","_removeSeries","patterns","_processSeries","setIndex","_placeBulletsContainer","_removeBulletsContainer","icon","_disposeProperty","chartContainer","yAxesAndPlotContainer","maskContent","plotsContainer","plotContainer","topPlotContainer","xAxes","yAxes","zoomOutButton","zoomOut","_processAxis","bottomAxesContainer","leftAxesContainer","topGridContainer","_handlePlotDown","_handlePlotUp","_handlePlotMove","_maskGrid","_setUpTouch","gridContainer","_unstack","_posXDp","_posYDp","xAxis","markDirtyExtremes","yAxis","snapToSeries","wheelX","wheelY","plotPoint","shiftX","deltaX","wheelZoomPositionX","wheelZoomPositionY","fixPosition","newStart","newEnd","_handleWheelAnimation","zoom","delta","_getWheelSign","se","_fixWheel","_wheelDp","handleWheel","local","_downStartX","_downEndX","_downStartY","_downEndY","_panStart","_panEnd","_dispatchWheelAnimation","_isPanning","touchEvent","_movePoints","_handlePinch","documentPointToRoot","scrollbarX","disableType","panStart","panEnd","enableType","scrollbarY","downPoints","movePoints","movePoint","downPoint0","downPoint1","movePoint0","movePoint1","downStartX","downEndX","downPos0","downPos1","movePos0","movePos1","initialDistance","currentDistance","sa","ea","downStartY","downEndY","cursorPoint","isHiding","tooltipDataItem","closestItem","minDistance","distance","showDataItemTooltip","handleMove","updateCursor","_colorize","_handleSetWheel","_setChart","_addCursor","_pushPropertyDisposer","_handleCursorSelectEnd","topAxesContainer","_handleScrollbar","grip","_handleAxisSelection","getTooltipText","rightAxesContainer","_handleZoomOut","addDisposer","_fixPosition","_markDirtyAxes","_seriesAdded","colorSet","_setSoft","patternSet","downPositionX","downPositionY","positionX","positionY","position0","toAxisPosition","position1","axes","priority","axisStart","axisEnd","zoomAnimation","updateScrollbar","_removeAxis","processChart","axisParent","gridParent","topGridParent","_updateCursor","updateGrips","otherCharts","_otherCharts","global","chartPlotContainer","documentPoint","rootPointToDocument","chartRoot","hh","plotT","plotB","tooltips","closest","closestPoint","_movePoint","maxTooltipDistance","maxTooltipDistanceBy","tooltipSeries","hidden","inPlot","_tooltipToLocal","prevBottom","labelsContainer","axisHeader","axisRanges","_processAxisRange","processAxis","ghostLabel","disable","_start","_end","_updateFinals","sAnimation","_sAnimation","eAnimation","_eAnimation","maxZoomFactorReal","minZoomFactor","_series","_createAssets","_rangesDirty","_prepareDataItem","above","_bullets","axisRange","_seriesAxisRanges","_inversed","_axisLength","axisLength","_updateLC","rendererTags","addTag","updateTooltipBounds","_updateTooltipBounds","axisHeadersContainer","_toggleFHDataItem","forceHidden","fh","tick","v","minor","_a","_b","makeGrid","makeTick","ticks","makeAxisFill","_processBullet","axisBullet","_updateChartLayout","_updatePositions","axisFills","getCellWidthPosition","gWidth","updateLabel","_cursorPosition","_snapToSeries","getSeriesItem","roundAxisPosition","_updateTooltipText","positionTooltip","_location","coordinate","toGlobalPosition","_nextItem","_autoGapCount","_fieldName","axisDataItem","_dirtyExtremes","_dirtySelectionExtremes","previousValue","syncWithAxis","_syncDp","someDirty","_getMinMax","_handleSizeDirty","getMM","letter","_getSelectionMinMax","_groupData","_handleRangeChange","_prepareAxisItems","_updateAxisRanges","_baseValue","_dseHandled","numberFormat","formatter","selectionMin","selectionMax","differencePower","minLog","_minLogAdjusted","_minRealLog","minorLabelsEnabled","minorGridEnabled","stepPower","stepAdjusted","minorGridCount","minorStep","_toggleDataItem","_formatText","nextValue","minorValue","minorMinMaxStep","_adjustMinMax","minorDataItem","minorDataItems","minorLabel","decCount","j","_updateGhost","valueToPosition","endPosition","fillEndPosition","labelEndPosition","labelEndValue","updateGrid","removeTag","updateTick","updateFill","updateBullet","positionToValue","gridCount","minMaxStep","stepDecimalPlaces","E","treatZeroAs","positionToCoordinate","_cellLocation","axisLocation","getDataItemPositionX","stackToItem","getStackedXValueWorking","getDataItemPositionY","getStackedYValueWorking","fixSmallStep","vc","fieldWorking","total","minDefined","maxDefined","extraMin","extraMax","selectionStrictMinMax","seriesMin","seriesMax","outOfSelection","isShowing","range","_minReal","_maxReal","smin","_deltaMinMax","minMaxStep2","selectionMinReal","selectionMaxReal","_syncAxes","LN10","valueToFinalPosition","minDiff","initialMin","initialMax","minAdapted","maxAdapted","_fixMin","_fixMax","_getDelta","strictMinMaxSelection","strict","_fixZoomFactor","_saveMinMax","animatePrivate","power","_min","_max","strictMode","extra","stepDivisor","maxPrecision","ceiledStep","maxCount","minCount","_adjustPosition","extraDecimals","oldDiff","fieldName","syncMin","syncMax","syncStep","currentCount","synced","omin","omax","ostep","_checkSync","segmentedLine","firstGroup","firstPoint","points","thumb","_handleThumbDown","_handleThumbUp","_handleThumbMove","pan","_thumbDownPoint","_downStart","_downEnd","_event","downStart","downEnd","_getPan","_point1","_point2","updatedStart","updatedEnd","gridTemplate","point1","point2","axisChildren","_markDirtyRedraw","toggleVisibility","bulletPosition","previousBullet","previousSprite","y0","fillDrawMethod","_positionTooltip","_lc","_ls","_itemMap","startCategory","endCategory","baseAxis","otherAxis","startDataItem","endDataItem","hasValue","__valueXShowFields","__valueYShowFields","frequency","_frequency","fillIndex","categoryLocation","endCategoryLocation","categoryToIndex","indexToPosition","fillEndIndex","NaN","cellLocation","_axisLocation","category","axisPositionToIndex","seriesDataItem","zoomToIndexes","x0","_removeAxisRange","_makeFieldNames","_valueXFields","_valueYFields","_valueXShowFields","_valueYShowFields","valueXFields","valueYFields","minBulletDistance","_xField","_yField","xName","xCapName","yName","yCapName","xLetter","yLetter","_xOpenField","_xLowField","_xHighField","_yOpenField","_yLowField","_yHighField","hiddenState","sequencedInterpolation","_handleMaskBullets","tooltipPositionX","tooltipFieldX","_tooltipFieldX","tooltipPositionY","tooltipFieldY","_tooltipFieldY","_fixVC","stacked","_stack","getStackedXValue","getStackedYValue","processSeriesDataItem","_seriesValuesDirty","_markStakedDirtyStack","_groupSeriesData","_stackDirty","_showBullets","_selectionProcessed","vcx","vcy","_calculateTotals","markDirtySelectionExtremes","processYSelectionDataItem","processXSelectionDataItem","selectionMinY","selectionMaxY","selectionMinX","selectionMaxX","mainContainerMask","_mainContainerMask","mainContainer","_makeRangeMask","seriesIndex","_couldStackTo","_stackDataItems","_reallyStackedTo","_stackedSeries","stackToItemKey","stackToSeries","stackValue","stackedToSeries","_axesDirty","getPoint","_shouldShowBullet","realField","positionToPoint","previousBounds","yo","xo","_positionX","_positionY","_dataSets","_handleDataSetChange","_markDataSetDirty","_dataSetId","dataSet","mainDataItems","_sequencedShowHide","stackedSeries","_markDirtyStack","_skipped","itemLocationX","itemLocationY","xPos","_aLocationX0","_aLocationX1","yPos","_aLocationY0","_aLocationY1","_getTooltipTarget","_emptyDataItem","_position","resetExtremes","baseDuration","minSelection","dl","Linear","areaStart","_line","areaEnd","lineStart","_point","lineEnd","pi","epsilon","tauEpsilon","strings","n","appendRound","Path","_x0","_y0","_x1","_y1","_append","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","a0","ccw","da","withPath","shape","RangeError","defined","constant","buffer","defined0","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","strokes","fills","_fillGenerator","_strokeTemplate","_fillTemplate","legendStroke","_legendStroke","legendFill","_legendFill","curveFactory","_strokeGenerator","strokeTemplateField","fillTemplateField","strokeTemplateFound","fillTemplateFound","hasValues","_endIndex","_clearGraphics","_sindex","_dindex","_startSegment","dataItemIndex","currentEndIndex","makeFill","fillTemplate","originalTemplate","makeStroke","strokeTemplate","xField","yField","xOpenField","yOpenField","xOpenFieldValue","yOpenFieldValue","basePosX","basePosition","basePosY","baseField","openLocationX","openLocationY","fillVisible","getOpen","rangeStrokeTemplate","rangeFillTemplate","valueX","valueY","_getPoints","nextItem","shouldGap","_endLine","_drawStroke","_drawFill","_shouldInclude","iPoint","xPos0","yPos0","stackToItemX","stackToItemY","closeIPoint","prev","_previousPoint","pp0","pp1","pp2","pp3","_points","_firstPoint","disabledColor","legend","_drawLines","lineX","_handleXLine","lineY","_handleYLine","_handleLineFocus","_handleLineBlur","_handleLineMove","ctrlKey","nextPosition","_alwaysShow","alwaysShow","_tooltipX","_updateXLine","_tooltipY","_updateYLine","syncWith","_handleSyncWith","_getPoint","_toX","_toY","_handleMove","_handleCursorDown","_handleCursorUp","_lastPoint2","selection","rootPoint","_inPlot","_getPosition","lastPoint","_lastPoint","skipEvent","xyPos","userPositionX","userPositionY","xy","_handleCursorPosition","handleCursorShow","_updateLines","_updateSelection","handleCursorHide","Animated","legendValueText","alignLabels","expandDistance","valueIs","wr","hr","innerBounds","mr","prevRadius","_maxRadius","seriesRadius","seriesInnerRadius","markDirtyKey","_makeSlices","_makeLabels","_makeTicks","slicesContainer","slices","ticksContainer","_lLabels","_rLabels","_hLabels","valueHigh","valueLow","valueWorking","percentTotal","_arrange","_arrangeDown","_arrangeUp","_arrangeLeft","_arrangeRight","_getNextDown","labelTop","_getNextUp","labelBottom","labelLeft","labelRight","atan2","halfPi","arcInnerRadius","arcOuterRadius","outerRadius","arcStartAngle","arcEndAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","padRadius","r0","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","oc","ax","ay","bx","by","kc","lc","centroid","ix","iy","generator","_generator","middleAngle","makeRadialText","radiusPrivate","innerRadiusPrivate","labelAngle","_flipped","makeSlice","labelsTemplate","currentAngle","currentArc","labelRadius","pl","pr","ReserveDashboard","_Vue","_this","_classCallCheck","_len","_callSuper","_defineProperty","dateutil","setDate","currentMonth","_inherits","_createClass","_this2","updateDatePickers","getParentConferenceRoom","$nextTick","daysLineGraphDt","rangeLineGraphRange","reserveDonutDt","barGraphAnimatedDt","updateStatus","daysLineGraph","rangeLineGraph","reserveDonut","barGraphAnimated","months","endDate","startDate","setMonth","startPicker","$refs","endPicker","renderPicker","_updateStatus","_asyncToGenerator","_regeneratorRuntime","mark","_callee","LyStYm","statusApiData","api","meetingroom","getConferenceRoomReserveStatusData","StYm","sent","totCnt","lyTotCnt","totCnt_ENTER","totCnt_CANCEL","roomOperatingRate","avgReserveMim","noShowPercentile","changeChart","_daysLineGraph","_callee2","xRenderer","yRenderer","_context2","daysLineChart","am5","am5themes_Animated","am5xy","getWeekDayData","categoryField","valueYField","categoryXField","labelNumber","rangeLineChart","_rangeLineGraph","_callee3","_context3","getPeriodData","_reserveDonut","_callee4","donutRoot","_context4","donutChart","am5percent","valueField","templateField","getDeptData","maxColumns","fixedWidthGrid","appear","_barGraphAnimated","_callee5","_this3","_context5","getDeptNoShowData","_getWeekDayData","_callee6","weekdayList","_context6","getConferenceRoomReserveStatsByWeekday","reduce","abrupt","_getPeriodData","_callee7","Dt","Period","_context7","getConferenceRoomReserveStatsByPeriod","_getDeptData","_callee8","donutColorList","DonutList","_context8","getConferenceRoomReserveStatsByDept","user","comCode","_getDeptNoShowData","_callee9","NoShowList","_context9","getConferenceRoomReserveStatsByNoShow","valueStr","_getParentConferenceRoom","_callee10","_context10","axios","url","invalidateUrl","responseType","ComCode","StartDt","EndDt","ParentCnfroomId","response","disposition","headers","filenameRegex","fileName","decodeURIComponent","blob","Blob","msSaveOrOpenBlob","link","href","URL","createObjectURL","download","click","Vue","nextTick","__decorate","Component","components","DatePicker","computed","_objectSpread","mapGetters","types"],"mappings":"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","file":"assets/js/chunk-7021e6f5.5bb97d6b.js","sourcesContent":["'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar $repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = toString(requireObjectCoercible($this));\n var intMaxLength = toLength(maxLength);\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : toString(fillString);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr === '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.es/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.es/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../../../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReserveDashboard.vue?vue&type=style&index=0&id=66551ed6&prod&scoped=true&lang=css\"","'use strict';\nvar $ = require('../internals/export');\nvar $padStart = require('../internals/string-pad').start;\nvar WEBKIT_BUG = require('../internals/string-pad-webkit-bug');\n\n// `String.prototype.padStart` method\n// https://tc39.es/ecma262/#sec-string.prototype.padstart\n$({ target: 'String', proto: true, forced: WEBKIT_BUG }, {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $padStart(this, maxLength, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// https://github.com/zloirock/core-js/issues/280\nvar userAgent = require('../internals/environment-user-agent');\n\nmodule.exports = /Version\\/10(?:\\.\\d+){1,2}(?: [\\w./]+)?(?: Mobile\\/\\w+)? Safari\\//.test(userAgent);\n","'use strict';\nvar $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{attrs:{\"id\":\"dashboard\"}},[_c('div',{staticClass:\"page_top\"},[_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.statParentCnfroomId),expression:\"statParentCnfroomId\"}],staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"statParentCnfroomId\"},on:{\"change\":[function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.statParentCnfroomId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]},_vm.statParentCnfroom]}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"전체\")]),_vm._l((_vm.parentMeetingroomList),function(item,index){return _c('option',{domProps:{\"value\":item.uniqueId}},[_vm._v(\" \"+_vm._s(item.displayName)+\" \")])})],2),_c('div',{staticClass:\"search_area\"},[_c('select',{staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"\"},on:{\"change\":function($event){return _vm.updateDateRange($event)}}},[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"1개월\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"3개월\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"6개월\")]),_c('option',{attrs:{\"value\":\"12\"}},[_vm._v(\"1년\")])]),_c('DatePicker',{ref:\"startPicker\",on:{\"select\":_vm.updateStartDate}}),_c('span',{staticClass:\"swung\"},[_vm._v(\"~\")]),_c('DatePicker',{ref:\"endPicker\",on:{\"select\":_vm.updateEndDate}}),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.parentCnfroomId),expression:\"parentCnfroomId\"}],staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"parentCnfroomId\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.parentCnfroomId=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"value\":\"\"}},[_vm._v(\"전체\")]),_vm._l((_vm.parentMeetingroomList),function(item,index){return _c('option',{domProps:{\"value\":item.uniqueId}},[_vm._v(\" \"+_vm._s(item.displayName)+\" \")])})],2),_c('button',{staticClass:\"btn\",on:{\"click\":_vm.meetingroomStatsDownloadExcel}},[_c('span',[_vm._v(\"엑셀 다운로드\")])])],1)]),_c('div',{staticClass:\"box_area\"},[_c('div',{staticClass:\"cont_area big\"},[_c('div',{staticClass:\"month\"},[_c('strong',[_vm._v(_vm._s(_vm.currentYear)+\". \"+_vm._s(_vm.formattedMonth)+\"월\")]),_c('div',{staticClass:\"btn_area\"},[_c('button',{staticClass:\"btn_icon prev\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToPreviousMonth}},[_c('span',{staticClass:\"blind\"},[_vm._v(\"이전 달\")])]),_c('button',{staticClass:\"btn_icon next\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.goToNextMonth}},[_c('span',{staticClass:\"blind\"},[_vm._v(\"다음 달\")])])])]),_c('div',{staticClass:\"total_area\"},[_c('div',{staticClass:\"total_num\"},[_c('strong',[_vm._v(\"이달의 누적 사용\")]),_c('h4',[_vm._v(_vm._s(_vm.TotCnt)),_c('span',[_vm._v(\"건\")])]),_c('p',[_vm._v(\"작년 동기대비 \"+_vm._s(_vm.DiffCnt)),_c('span',{class:_vm.UdClass})]),_c('div',{staticClass:\"detail\"},[_c('dl',[_c('dt',[_vm._v(\"예약\")]),_c('dd',[_vm._v(_vm._s(_vm.TotCnt_ENTER)),_c('span',[_vm._v(\"건\")])])]),_c('dl',[_c('dt',[_vm._v(\"예약 미사용(노쇼)\")]),_c('dd',[_vm._v(_vm._s(_vm.TotCnt_CANCEL)),_c('span',[_vm._v(\"건\")])])])])]),_c('div',[_c('strong',[_vm._v(\"회의실 가동률\")]),_c('p',[_vm._v(\"Occupancy\")]),_c('h4',[_vm._v(_vm._s(_vm.RoomOperatingRate)),_c('span',[_vm._v(\"%\")])])]),_c('div',[_c('strong',[_vm._v(\"평균 회의 진행 시간\")]),_c('p',[_vm._v(\"Occupancy\")]),_c('h4',[_vm._v(_vm._s(_vm.AvgReserveMim)),_c('span',[_vm._v(\"분\")])])]),_c('div',[_c('strong',[_vm._v(\"노쇼 발생율\")]),_c('p',[_vm._v(\"Cancle ratio\")]),_c('h4',[_vm._v(_vm._s(_vm.NoShowPercentile)),_c('span',[_vm._v(\"%\")])])])])])]),_c('h3',[_vm._v(\"회의실 사용 현황\")]),_c('div',{staticClass:\"box_area\"},[_c('div',{staticClass:\"cont_area\"},[_c('div',{staticClass:\"top\"},[_c('h4',[_vm._v(\"요일별 사용 분석 (총 \"+_vm._s(_vm.daysTotCnt)+\"건)\")]),_c('select',{staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"\"},on:{\"change\":function($event){return _vm.updateDateDays($event)}}},[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"1개월\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"3개월\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"6개월\")]),_c('option',{attrs:{\"value\":\"12\"}},[_vm._v(\"1년\")])])]),_c('div',{ref:\"dayLineGraph\",staticStyle:{\"width\":\"100%\",\"height\":\"280px\"},attrs:{\"id\":\"dayLineGraph\"}})]),_c('div',{staticClass:\"cont_area\"},[_c('div',{staticClass:\"top\"},[_c('h4',[_vm._v(\"기간별 사용 분석\")]),_c('div',{staticClass:\"btn_area\"},_vm._l((_vm.rangeBtn),function(button){return _c('button',{key:button,class:{ active: button === _vm.selectedRange },attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.makeChart(button)}}},[_vm._v(_vm._s(button))])}),0)]),_c('div',{ref:\"rangeLineChart\",staticStyle:{\"width\":\"100%\",\"height\":\"280px\"},attrs:{\"id\":\"rangeLineChart\"}})])]),_c('div',{staticClass:\"box_area\"},[_c('div',{staticClass:\"cont_area\"},[_c('div',{staticClass:\"top\"},[_c('h4',[_vm._v(\"본부별 예약 이용 현황 (총 \"+_vm._s(_vm.deptTotCnt)+\"건)\")]),_c('select',{staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"\"},on:{\"change\":function($event){return _vm.updateDateReserve($event)}}},[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"1개월\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"3개월\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"6개월\")]),_c('option',{attrs:{\"value\":\"12\"}},[_vm._v(\"1년\")])])]),_c('div',[_c('div',{ref:\"reserveDonut\",staticStyle:{\"width\":\"100%\",\"height\":\"248px\"},attrs:{\"id\":\"reserveDonut\"}})])]),_c('div',{staticClass:\"cont_area\"},[_c('div',{staticClass:\"top\"},[_c('h4',[_vm._v(\"본부별 미사용(노쇼) 순위\")]),_c('select',{staticClass:\"fm-def\",staticStyle:{\"width\":\"120px\"},attrs:{\"id\":\"\"},on:{\"change\":function($event){return _vm.updateDateNoShow($event)}}},[_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"1개월\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"3개월\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"6개월\")]),_c('option',{attrs:{\"value\":\"12\"}},[_vm._v(\"1년\")])])]),_c('div',{staticClass:\"df\"},[(_vm.noShowBars.length === 0)?[_c('p',[_vm._v(\"데이터가 존재하지 않습니다.\")])]:[_c('div',{staticClass:\"bar_graph_area\"},[_vm._l((_vm.noShowBars),function(bar,index){return _c('div',{key:index},[_c('span',{staticClass:\"per\"},[_vm._v(_vm._s(_vm.removeDecimal(bar))+\"%\")]),_c('div',{staticClass:\"bar\"},[_c('span',{style:({ width: _vm.removeDecimal(bar) + '%' })})])])}),_c('ul',_vm._l((_vm.noShowData),function(item,index){return _c('li',{key:index},[_vm._v(_vm._s(item.label))])}),0)],2),_c('table',[_c('caption',[_vm._v(\"본부별 미사용(노쇼) 순위 : 순위, 본부병, 예약, 미사용, 백분율\")]),_vm._m(0),_vm._m(1),_c('tbody',_vm._l((_vm.noShowData),function(item,index){return _c('tr',{key:index},[_c('td',[_vm._v(_vm._s(index + 1))]),_c('td',[_vm._v(_vm._s(item.label))]),_c('td',[_vm._v(_vm._s(_vm.formatNumber(item.value)))]),_c('td',[_c('strong',[_vm._v(_vm._s(_vm.formatNumber(item.noShowCnt)))])]),_c('td',[_vm._v(_vm._s(_vm.removeDecimal(item.percentile))+\"%\")])])}),0)])]],2)])])])\n}\nvar staticRenderFns = [function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('colgroup',[_c('col',{staticStyle:{\"width\":\"40px\"}}),_c('col',{staticStyle:{\"width\":\"auto\"}}),_c('col',{staticStyle:{\"width\":\"75px\"}}),_c('col',{staticStyle:{\"width\":\"75px\"}}),_c('col',{staticStyle:{\"width\":\"60px\"}})])\n},function (){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('thead',[_c('tr',[_c('th',{attrs:{\"scope\":\"col\"}},[_vm._v(\"순위\")]),_c('th',{attrs:{\"scope\":\"col\"}},[_vm._v(\"본부명\")]),_c('th',{attrs:{\"scope\":\"col\"}},[_vm._v(\"예약\")]),_c('th',{attrs:{\"scope\":\"col\"}},[_vm._v(\"미사용\")]),_c('th',{attrs:{\"scope\":\"col\"}},[_vm._v(\"백분율\")])])])\n}]\n\nexport { render, staticRenderFns }","/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Represents a relative value (percent).\r\n *\r\n * The Percent object, can be instantiated using two ways:\r\n *\r\n * * Via `new Percent(X)`.\r\n * * Via `am5.percent(X)`.\r\n *\r\n * You can also use shortcut functions for `0%`, `50%`, and `100%`:\r\n * * `am5.p0`\r\n * * `am5.p50`\r\n * * `am5.p100`\r\n */\r\nexport class Percent {\r\n /**\r\n * Constructor.\r\n *\r\n * @param percent Percent value\r\n */\r\n constructor(percent) {\r\n /**\r\n * Value in percent.\r\n */\r\n Object.defineProperty(this, \"_value\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._value = percent;\r\n }\r\n /**\r\n * Relative value.\r\n *\r\n * E.g. 100% is 1, 50% is 0.5, etc.\r\n *\r\n * This is useful to apply transformations to other values. E.g.:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = new am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = new am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * Alternatively, you can use `am5.percent()` helper function:\r\n *\r\n * ```TypeScript\r\n * let value = 256;\r\n * let percent = am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n * ```JavaScript\r\n * var value = 256;\r\n * var percent = am5.p50;\r\n * console.log(value * percent.value); // outputs 128\r\n * ```\r\n *\r\n * @readonly\r\n * @return Relative value\r\n */\r\n get value() {\r\n return this._value / 100;\r\n }\r\n /**\r\n * Value in percent.\r\n *\r\n * @readonly\r\n * @return Percent\r\n */\r\n get percent() {\r\n return this._value;\r\n }\r\n toString() {\r\n return \"\" + this._value + \"%\";\r\n }\r\n interpolate(min, max) {\r\n return min + (this.value * (max - min));\r\n }\r\n static normalize(percent, min, max) {\r\n if (percent instanceof Percent) {\r\n return percent;\r\n }\r\n else {\r\n if (min === max) {\r\n return new Percent(0);\r\n }\r\n else {\r\n return new Percent(Math.min(Math.max((percent - min) * (1 / (max - min)), 0), 1) * 100);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Converts numeric percent value to a proper [[Percent]] object.\r\n *\r\n * ```TypeScript\r\n * pieSeries.set(\"radius\", am5.percent(80));\r\n * ```\r\n * ```JavaScript\r\n * pieSeries.set(\"radius\", am5.percent(80));\r\n * ```\r\n *\r\n * @param value Percent\r\n * @return Percent object\r\n */\r\nexport function percent(value) {\r\n return new Percent(value);\r\n}\r\n/**\r\n * A shortcut function to `am5.percent(0)`.\r\n */\r\nexport const p0 = percent(0);\r\n/**\r\n * A shortcut function to `am5.percent(100)`.\r\n */\r\nexport const p100 = percent(100);\r\n/**\r\n * A shortcut function to `am5.percent(50)`.\r\n */\r\nexport const p50 = percent(50);\r\n/**\r\n * Checks if value is a [[Percent]] object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Input value\r\n * @return Is percent?\r\n */\r\nexport function isPercent(value) {\r\n return value instanceof Percent;\r\n}\r\n//# sourceMappingURL=Percent.js.map","/**\r\n * A collection of utility functions for various type checks and conversion\r\n * @hidden\r\n */\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns `true` if value is not a number (NaN).\r\n *\r\n * @param value Input value\r\n * @return Is NaN?\r\n */\r\nexport function isNaN(value) {\r\n return Number(value) !== value;\r\n}\r\n/**\r\n * Returns a type of the value.\r\n *\r\n * @param value Input value\r\n * @return Type of the value\r\n * @ignore\r\n */\r\nexport function getType(value) {\r\n return ({}).toString.call(value);\r\n}\r\n/**\r\n * Asserts that the condition is true.\r\n *\r\n * @param condition Condition to check\r\n * @param message Message to display in the error\r\n * @ignore\r\n */\r\nexport function assert(condition, message = \"Assertion failed\") {\r\n if (!condition) {\r\n throw new Error(message);\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * QUICK CONVERSION\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Converts any value into a `number`.\r\n *\r\n * @param value Source value\r\n * @return Number representation of value\r\n */\r\nexport function toNumber(value) {\r\n if (value != null && !isNumber(value)) {\r\n let converted = Number(value);\r\n if (isNaN(converted) && isString(value) && value != \"\") {\r\n return toNumber(value.replace(/[^0-9.\\-]+/g, ''));\r\n }\r\n return converted;\r\n }\r\n return value;\r\n}\r\n/**\r\n * Converts anything to Date object.\r\n *\r\n * @param value A value of any type\r\n * @return Date object representing a value\r\n */\r\nexport function toDate(value) {\r\n if (isDate(value)) {\r\n // TODO maybe don't create a new Date ?\r\n return new Date(value);\r\n }\r\n else if (isNumber(value)) {\r\n return new Date(value);\r\n }\r\n else {\r\n // Try converting to number (assuming timestamp)\r\n let num = Number(value);\r\n if (!isNumber(num)) {\r\n return new Date(value);\r\n }\r\n else {\r\n return new Date(num);\r\n }\r\n }\r\n}\r\n/**\r\n * Converts numeric value into string. Deals with large or small numbers that\r\n * would otherwise use exponents.\r\n *\r\n * @param value Numeric value\r\n * @return Numeric value as string\r\n */\r\nexport function numberToString(value) {\r\n // TODO handle Infinity and -Infinity\r\n if (isNaN(value)) {\r\n return \"NaN\";\r\n }\r\n if (value === Infinity) {\r\n return \"Infinity\";\r\n }\r\n if (value === -Infinity) {\r\n return \"-Infinity\";\r\n }\r\n // Negative 0\r\n if ((value === 0) && (1 / value === -Infinity)) {\r\n return \"-0\";\r\n }\r\n // Preserve negative and deal with absoute values\r\n let negative = value < 0;\r\n value = Math.abs(value);\r\n // TODO test this\r\n let parsed = /^([0-9]+)(?:\\.([0-9]+))?(?:e[\\+\\-]([0-9]+))?$/.exec(\"\" + value);\r\n let digits = parsed[1];\r\n let decimals = parsed[2] || \"\";\r\n let res;\r\n // Leave the nummber as it is if it does not use exponents\r\n if (parsed[3] === undefined) {\r\n res = (decimals === \"\" ? digits : digits + \".\" + decimals);\r\n }\r\n else {\r\n let exponent = +parsed[3];\r\n // Deal with decimals\r\n if (value < 1) {\r\n let zeros = exponent - 1;\r\n res = \"0.\" + repeat(\"0\", zeros) + digits + decimals;\r\n // Deal with integers\r\n }\r\n else {\r\n let zeros = exponent - decimals.length;\r\n if (zeros === 0) {\r\n res = digits + decimals;\r\n }\r\n else if (zeros < 0) {\r\n res = digits + decimals.slice(0, zeros) + \".\" + decimals.slice(zeros);\r\n }\r\n else {\r\n res = digits + decimals + repeat(\"0\", zeros);\r\n }\r\n }\r\n }\r\n return negative ? \"-\" + res : res;\r\n}\r\n/**\r\n * Repeats a `string` number of times as set in `amount`.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Make this faster\r\n * @param string Source string\r\n * @param amount Number of times to repeat string\r\n * @return New string\r\n */\r\nexport function repeat(string, amount) {\r\n return new Array(amount + 1).join(string);\r\n}\r\n/**\r\n * ============================================================================\r\n * TYPE CHECK\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Checks if parameter is `Date`.\r\n *\r\n * @param value Input value\r\n * @return Is Date?\r\n */\r\nexport function isDate(value) {\r\n return getType(value) === \"[object Date]\";\r\n}\r\n/**\r\n * Checks if parameter is `string`.\r\n *\r\n * @param value Input value\r\n * @return Is string?\r\n */\r\nexport function isString(value) {\r\n return typeof value === \"string\";\r\n}\r\n/**\r\n * Checks if parameter is `number`.\r\n *\r\n * @param value Input value\r\n * @return Is number?\r\n */\r\nexport function isNumber(value) {\r\n return typeof value === \"number\" && Number(value) == value;\r\n}\r\n/**\r\n * Checks if parameter is `object`.\r\n *\r\n * @param value Input value\r\n * @return Is object?\r\n */\r\nexport function isObject(value) {\r\n return typeof value === \"object\" && value !== null;\r\n}\r\n/**\r\n * Checks if parameter is `Array`.\r\n *\r\n * @param value Input value\r\n * @return Is Array?\r\n */\r\nexport function isArray(value) {\r\n return Array.isArray(value);\r\n}\r\n/**\r\n * ============================================================================\r\n * STATIC CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport const PLACEHOLDER = \"__§§§__\";\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nexport const PLACEHOLDER2 = \"__§§§§__\";\r\n//# sourceMappingURL=Type.js.map","import * as $type from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * UTILITY FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Searches `array` for `value`.\r\n *\r\n * Returns -1 if not found.\r\n *\r\n * @param array Source array\r\n * @param value Value to search\r\n * @returns Index\r\n */\r\nexport function indexOf(array, value) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n // TODO handle NaN\r\n if (array[i] === value) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Calls `test` for each element in `array`.\r\n *\r\n * If `test` returns `true` then it immediately returns `true`.\r\n *\r\n * If `test` returns `false` for all of the elements in `array` then it returns `false`.\r\n *\r\n * @param array Source array\r\n * @param test Function which is called on each element\r\n * @returns Whether `test` returned true or not\r\n */\r\nexport function any(array, test) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (test(array[i])) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Calls `fn` function for every member of array and returns a new array out\r\n * of all outputs.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n * @returns New array\r\n */\r\nexport function map(array, fn) {\r\n const length = array.length;\r\n const output = new Array(length);\r\n for (let i = 0; i < length; ++i) {\r\n output[i] = fn(array[i], i);\r\n }\r\n return output;\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function each(array, fn) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array in reverse order and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachReverse(array, fn) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n fn(array[i], i);\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * If `fn` call evaluates to `false`, further iteration is cancelled.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(array, fn) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (!fn(array[i], i)) {\r\n break;\r\n }\r\n }\r\n}\r\n/**\r\n * Shifts an item at `index` towards beginning of the array.\r\n *\r\n * @param array Source array\r\n * @param index Target element index\r\n */\r\nexport function shiftLeft(array, index) {\r\n const length = array.length;\r\n for (let i = index; i < length; ++i) {\r\n array[i - index] = array[i];\r\n }\r\n array.length = length - index;\r\n}\r\n/**\r\n * Returns the last item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function last(array) {\r\n const length = array.length;\r\n return length ? array[length - 1] : undefined;\r\n}\r\n/**\r\n * Returns the first item of the array.\r\n *\r\n * @param array Source array\r\n * @returns Last item\r\n */\r\nexport function first(array) {\r\n return array[0];\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * Caps `index` to be between `0` and `array.length`\r\n *\r\n * @param array Source array\r\n * @param element Item to insert\r\n * @param array Index to insert item at\r\n */\r\nexport function insert(array, element, index) {\r\n //if (array) {\r\n index = Math.max(0, Math.min(index, array.length));\r\n array.splice(index, 0, element);\r\n //}\r\n}\r\n/**\r\n * Removes all copies of `element` from `array` (if they exist) and then\r\n * inserts `element` at `index`.\r\n *\r\n * @param array Source array\r\n * @param element Item\r\n * @param array Index to move item to\r\n */\r\nexport function setIndex(array, element, index) {\r\n remove(array, element);\r\n insert(array, element, index);\r\n}\r\n/**\r\n * Pushes all of the elements from `input` into `array`.\r\n *\r\n * @param array Output array\r\n * @param input Input array\r\n */\r\nexport function pushAll(array, input) {\r\n const length = input.length;\r\n for (let i = 0; i < length; ++i) {\r\n array.push(input[i]);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array`.\r\n *\r\n * If there are multiple copies of `element`, they are all removed.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n */\r\nexport function remove(array, element) {\r\n let found = false;\r\n let index = 0;\r\n for (;;) {\r\n index = array.indexOf(element, index);\r\n if (index === -1) {\r\n return found;\r\n }\r\n else {\r\n found = true;\r\n array.splice(index, 1);\r\n }\r\n }\r\n}\r\nexport function removeFirst(array, element) {\r\n let index = array.indexOf(element);\r\n if (index !== -1) {\r\n array.splice(index, 1);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Adds an `element` to `array`.\r\n *\r\n * If array already contains and item like this, it is removed before adding\r\n * it again.\r\n *\r\n * Optionally `toIndex` can be specified to add element at specific index.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to move item to\r\n */\r\nexport function move(array, element, toIndex) {\r\n // @todo this implementation must be the same as the List.moveValue method\r\n // @todo don't do anything if the desired index is the same as the current index\r\n let index = indexOf(array, element);\r\n // @todo remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n removeIndex(array, index);\r\n }\r\n if (toIndex == null) {\r\n array.push(element);\r\n }\r\n else {\r\n insertIndex(array, toIndex, element);\r\n }\r\n}\r\n/**\r\n * Inserts `element` into `array` at `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n * @param array Index to add item at\r\n */\r\nexport function add(array, element, index) {\r\n // Append to the end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // Add to the beginning of array if index is 0\r\n else if (index === 0) {\r\n array.unshift(element);\r\n }\r\n // Add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Pushes `element` into `array` if it doesn't already exist.\r\n *\r\n * @param array Source array\r\n * @param element Item to add\r\n */\r\nexport function pushOne(array, element) {\r\n if (array.indexOf(element) === -1) {\r\n array.push(element);\r\n }\r\n}\r\n/**\r\n * Removes `element` from `array` (if it exists) and then inserts `element` at\r\n * `index`.\r\n *\r\n * If `index` is not provided, it will insert `element` at the end of `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to remove\r\n * @param array Index to move item to\r\n */\r\nexport function replace(array, element, index) {\r\n // check if exists\r\n let ind = array.indexOf(element);\r\n // remove if exists\r\n if (ind !== -1) {\r\n array.splice(ind, 1);\r\n }\r\n // add to end if index is not set\r\n if (!$type.isNumber(index)) {\r\n array.push(element);\r\n }\r\n // add to indicated place if index is set\r\n else {\r\n array.splice(index, 0, element);\r\n }\r\n}\r\n/**\r\n * Wraps `input` in an array, if it isn't already an array.\r\n *\r\n * @param input Source value\r\n * @return An array\r\n */\r\nexport function toArray(input) {\r\n if (Array.isArray(input)) {\r\n return input;\r\n }\r\n else {\r\n return [input];\r\n }\r\n}\r\n/**\r\n * Returns `true` if `element` exists in `array`.\r\n *\r\n * @param array Source array\r\n * @param element Item to search for\r\n * @returns Item in array?\r\n */\r\nexport function has(array, element) {\r\n return indexOf(array, element) !== -1;\r\n}\r\n/**\r\n * Returns a shallow copy of `array`.\r\n *\r\n * @param array Source array\r\n * @returns Copy of the array\r\n */\r\nexport function copy(array) {\r\n const length = array.length;\r\n // It's faster to create the array with a pre-defined length\r\n const output = new Array(length);\r\n for (let i = 0; i < length; ++i) {\r\n // Because the array has a pre-defined length, we have to assign rather than push\r\n // This is also faster than pushing\r\n output[i] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Returns a copy of `array` which contains all the elements between `start`\r\n * and `end`. (including `start` and excluding `end`)\r\n *\r\n * If `end` is not provided, it defaults to `array.length`.\r\n *\r\n * @param array Source array\r\n * @param start Start index\r\n * @param end End index\r\n * @returns Part of the array\r\n */\r\nexport function slice(array, start, end = array.length) {\r\n const output = new Array(end - start);\r\n for (let i = start; i < end; ++i) {\r\n output[i - start] = array[i];\r\n }\r\n return output;\r\n}\r\n/**\r\n * Inserts a value into array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n * @param value Value to insert\r\n */\r\nexport function insertIndex(array, index, value) {\r\n array.splice(index, 0, value);\r\n}\r\n/**\r\n * Removes a value from array at specific index.\r\n *\r\n * @param array Source array\r\n * @param index Index\r\n */\r\nexport function removeIndex(array, index) {\r\n array.splice(index, 1);\r\n}\r\n/**\r\n * Searches the array using custom function and returns index of the item if\r\n * found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns -1.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\r\nexport function findIndex(array, matches) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n if (matches(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * This is the same as `findIndex` except it searches from right to left.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Index of the item if found\r\n */\r\nexport function findIndexReverse(array, matches) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n if (matches(array[i], i)) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n}\r\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If return value\r\n * evaluates to `true`, index is returned.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function find(array, matches) {\r\n const index = findIndex(array, matches);\r\n if (index !== -1) {\r\n return array[index];\r\n }\r\n}\r\n/**\r\n * This is the same as `find` except it searches from right to left.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function findReverse(array, matches) {\r\n const index = findIndexReverse(array, matches);\r\n if (index !== -1) {\r\n return array[index];\r\n }\r\n}\r\n/**\r\n * Searches the array using custom function and returns item if found.\r\n *\r\n * Will call `matches` function on all items of the array. If value\r\n * is not `undefined`, it returns it.\r\n *\r\n * Otherwise returns `undefined`.\r\n *\r\n * @param array Source array\r\n * @param matches Search function\r\n * @returns Item if found\r\n */\r\nexport function findMap(array, matches) {\r\n const length = array.length;\r\n for (let i = 0; i < length; ++i) {\r\n const value = matches(array[i], i);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n }\r\n}\r\n/**\r\n * Iterates through all items in array and calls `fn` function for each of\r\n * them.\r\n *\r\n * @param array Source array\r\n * @param fn Callback function\r\n */\r\nexport function shuffle(array) {\r\n // https://stackoverflow.com/a/2450976/449477\r\n let currentIndex = array.length, temporaryValue, randomIndex;\r\n // While there remain elements to shuffle...\r\n while (0 !== currentIndex) {\r\n // Pick a remaining element...\r\n randomIndex = Math.floor(Math.random() * currentIndex);\r\n currentIndex -= 1;\r\n // And swap it with the current element.\r\n temporaryValue = array[currentIndex];\r\n array[currentIndex] = array[randomIndex];\r\n array[randomIndex] = temporaryValue;\r\n }\r\n}\r\n/**\r\n * Orders an array using specific `ordering` function and returns right-most index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @returns Result of the search\r\n */\r\nexport function getSortedIndex(array, ordering) {\r\n let start = 0;\r\n let end = array.length;\r\n let found = false;\r\n while (start < end) {\r\n // TODO is this faster/slower than using Math.floor ?\r\n const pivot = (start + end) >> 1;\r\n const order = ordering(array[pivot]);\r\n // less\r\n if (order < 0) {\r\n start = pivot + 1;\r\n // equal\r\n }\r\n else if (order === 0) {\r\n found = true;\r\n start = pivot + 1;\r\n // more\r\n }\r\n else {\r\n end = pivot;\r\n }\r\n }\r\n return {\r\n found: found,\r\n index: (found ? start - 1 : start)\r\n };\r\n}\r\n/**\r\n * Orders an array using specific `ordering` function and returns left-most index of\r\n * the `value`.\r\n *\r\n * @ignore Exclude from docs\r\n * @param array Source array\r\n * @param ordering An ordering function\r\n * @returns Result of the search\r\n */\r\nexport function getFirstSortedIndex(array, ordering) {\r\n let start = 0;\r\n let end = array.length;\r\n let found = false;\r\n while (start < end) {\r\n // TODO is this faster/slower than using Math.floor ?\r\n const pivot = (start + end) >> 1;\r\n const order = ordering(array[pivot]);\r\n // less\r\n if (order < 0) {\r\n start = pivot + 1;\r\n // equal\r\n }\r\n else if (order === 0) {\r\n found = true;\r\n end = pivot;\r\n // more\r\n }\r\n else {\r\n end = pivot;\r\n }\r\n }\r\n return {\r\n found: found,\r\n index: start\r\n };\r\n}\r\nexport function keepIf(array, keep) {\r\n let i = array.length;\r\n while (i > 0) {\r\n --i;\r\n if (!keep(array[i])) {\r\n array.splice(i, 1);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Array.js.map","import * as $array from \"./Array\";\r\nexport function keys(object) {\r\n return Object.keys(object);\r\n}\r\n/**\r\n * Returns an array of object's property names ordered using specific ordering\r\n * function.\r\n *\r\n * @param object Source object\r\n * @param order Ordering function\r\n * @returns Object property names\r\n */\r\nexport function keysOrdered(object, order) {\r\n return keys(object).sort(order);\r\n}\r\nexport function copy(object) {\r\n return Object.assign({}, object);\r\n}\r\nexport function each(object, f) {\r\n keys(object).forEach((key) => {\r\n f(key, object[key]);\r\n });\r\n}\r\n/**\r\n * Iterates through all properties of the object calling `fn` for each of them.\r\n *\r\n * If return value of the function evaluates to `false` further iteration is\r\n * cancelled.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n */\r\nexport function eachContinue(object, fn) {\r\n for (let key in object) {\r\n if (hasKey(object, key)) {\r\n if (!fn(key, object[key])) {\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Orders object properties using custom `ord` function and iterates through\r\n * them calling `fn` for each of them.\r\n *\r\n * @param object Source object\r\n * @param fn Callback function\r\n * @param order Ordering function\r\n */\r\nexport function eachOrdered(object, fn, ord) {\r\n $array.each(keysOrdered(object, ord), (key) => {\r\n fn(key, object[key]);\r\n });\r\n}\r\n/**\r\n * Checks if `object` has a specific `key`.\r\n *\r\n * @param object Source object\r\n * @param key Property name\r\n * @returns Has key?\r\n */\r\nexport function hasKey(object, key) {\r\n return {}.hasOwnProperty.call(object, key);\r\n}\r\n/**\r\n * Copies all properties of one object to the other, omitting undefined, but only if property in target object doesn't have a value set.\r\n *\r\n * @param fromObject Source object\r\n * @param toObject Target object\r\n * @return Updated target object\r\n * @todo Maybe consolidate with utils.copy?\r\n */\r\nexport function softCopyProperties(source, target) {\r\n each(source, (key, value) => {\r\n // only if value is set\r\n //if ($type.hasValue(value) && !($type.hasValue((target)[key]))) {\r\n if (value != null && target[key] == null) {\r\n target[key] = value;\r\n }\r\n });\r\n return target;\r\n}\r\n//# sourceMappingURL=Object.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $array from \"./Array\";\r\n/**\r\n * A base class for disposable objects.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class DisposerClass {\r\n /**\r\n * Constructor.\r\n */\r\n constructor() {\r\n /**\r\n * Is object disposed?\r\n */\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._disposed = false;\r\n }\r\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes the object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * A class for creating an IDisposer.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class Disposer {\r\n /**\r\n * Constructor.\r\n *\r\n * @param dispose Function that disposes object\r\n */\r\n constructor(dispose) {\r\n /**\r\n * Is object disposed?\r\n */\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Method that disposes the object.\r\n */\r\n Object.defineProperty(this, \"_dispose\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._disposed = false;\r\n this._dispose = dispose;\r\n }\r\n /**\r\n * Checks if object is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes the object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * This can be extended by other classes to add a `_disposers` property.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class ArrayDisposer extends DisposerClass {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_disposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n }\r\n _dispose() {\r\n $array.each(this._disposers, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n}\r\n/**\r\n * A collection of related disposers that can be disposed in one go.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport class MultiDisposer extends DisposerClass {\r\n constructor(disposers) {\r\n super();\r\n Object.defineProperty(this, \"_disposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._disposers = disposers;\r\n }\r\n _dispose() {\r\n $array.each(this._disposers, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n get disposers() {\r\n return this._disposers;\r\n }\r\n}\r\n/**\r\n * A special kind of Disposer that has attached value set.\r\n *\r\n * If a new value is set using `set()` method, the old disposer value is\r\n * disposed.\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport class MutableValueDisposer extends DisposerClass {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Current disposer.\r\n */\r\n Object.defineProperty(this, \"_disposer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Current value.\r\n */\r\n Object.defineProperty(this, \"_value\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _dispose() {\r\n if (this._disposer != null) {\r\n this._disposer.dispose();\r\n this._disposer = undefined;\r\n }\r\n }\r\n /**\r\n * Returns current value.\r\n *\r\n * @return Value\r\n */\r\n get() {\r\n return this._value;\r\n }\r\n /**\r\n * Sets value and disposes previous disposer if it was set.\r\n *\r\n * @param value New value\r\n * @param disposer Disposer\r\n */\r\n set(value, disposer) {\r\n if (this._disposer != null) {\r\n this._disposer.dispose();\r\n }\r\n this._disposer = disposer;\r\n this._value = value;\r\n }\r\n /**\r\n * Resets the disposer value.\r\n */\r\n reset() {\r\n this.set(undefined, undefined);\r\n }\r\n}\r\n/**\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nexport class CounterDisposer extends Disposer {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * [_counter description]\r\n *\r\n * @todo Description\r\n */\r\n Object.defineProperty(this, \"_counter\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n }\r\n /**\r\n * [increment description]\r\n *\r\n * @todo Description\r\n */\r\n increment() {\r\n // TODO throw an error if it is disposed\r\n ++this._counter;\r\n // TODO make this more efficient\r\n return new Disposer(() => {\r\n --this._counter;\r\n if (this._counter === 0) {\r\n this.dispose();\r\n }\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Disposer.js.map","import * as $type from \"./Type\";\r\nimport * as $array from \"./Array\";\r\nimport * as $object from \"./Object\";\r\nimport { Disposer, DisposerClass } from \"./Disposer\";\r\n/**\r\n * ============================================================================\r\n * DOM FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Execute a function when DOM is ready.\r\n *\r\n * @since 5.0.2\r\n * @param f Callback\r\n */\r\nexport function ready(f) {\r\n if (document.readyState !== \"loading\") {\r\n f();\r\n }\r\n else {\r\n const listener = () => {\r\n if (document.readyState !== \"loading\") {\r\n document.removeEventListener(\"readystatechange\", listener);\r\n f();\r\n }\r\n };\r\n document.addEventListener(\"readystatechange\", listener);\r\n }\r\n}\r\n/**\r\n * Removes a DOM element.\r\n * @param el Target element\r\n */\r\nexport function removeElement(el) {\r\n if (el.parentNode) {\r\n el.parentNode.removeChild(el);\r\n }\r\n}\r\n/**\r\n * Function that adds a disposable event listener directly to a DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param dom A DOM element to add event to\r\n * @param type Event type\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\r\nexport function addEventListener(dom, type, listener, options) {\r\n //@todo proper type check for options: EventListenerOptions | boolean (TS for some reason gives error on passive parameter)\r\n dom.addEventListener(type, listener, options || false);\r\n return new Disposer(() => {\r\n dom.removeEventListener(type, listener, options || false);\r\n });\r\n}\r\n/**\r\n * Function that adds an event listener which is triggered when the browser's zoom changes.\r\n *\r\n * @param listener Event listener\r\n * @returns Disposable event\r\n */\r\nexport function onZoom(listener) {\r\n // TODO use matchMedia instead ?\r\n return addEventListener(window, \"resize\", (_ev) => {\r\n listener();\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function supports(cap) {\r\n switch (cap) {\r\n case \"touchevents\":\r\n //return \"ontouchstart\" in document.documentElement;\r\n return window.hasOwnProperty(\"TouchEvent\");\r\n case \"pointerevents\":\r\n return window.hasOwnProperty(\"PointerEvent\");\r\n case \"mouseevents\":\r\n return window.hasOwnProperty(\"MouseEvent\");\r\n case \"wheelevents\":\r\n return window.hasOwnProperty(\"WheelEvent\");\r\n case \"keyboardevents\":\r\n return window.hasOwnProperty(\"KeyboardEvent\");\r\n }\r\n return false;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getPointerId(event) {\r\n let id = event.pointerId || 0;\r\n return id;\r\n}\r\n/**\r\n * Removes focus from any element by shifting focus to body.\r\n *\r\n * @ignore\r\n */\r\nexport function blur() {\r\n if (document.activeElement && document.activeElement != document.body) {\r\n if (document.activeElement.blur) {\r\n document.activeElement.blur();\r\n }\r\n else {\r\n let input = document.createElement(\"button\");\r\n input.style.position = \"fixed\";\r\n input.style.top = \"0px\";\r\n input.style.left = \"-10000px\";\r\n document.body.appendChild(input);\r\n input.focus();\r\n input.blur();\r\n document.body.removeChild(input);\r\n }\r\n }\r\n}\r\n/**\r\n * Focuses element.\r\n *\r\n * @ignore\r\n */\r\nexport function focus(el) {\r\n if (el) {\r\n el.focus();\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getRendererEvent(key) {\r\n if (supports(\"pointerevents\")) {\r\n return key;\r\n }\r\n else if (supports(\"touchevents\")) {\r\n switch (key) {\r\n case \"pointerover\": return \"touchstart\";\r\n case \"pointerout\": return \"touchend\";\r\n case \"pointerleave\": return \"touchend\";\r\n case \"pointerdown\": return \"touchstart\";\r\n case \"pointermove\": return \"touchmove\";\r\n case \"pointerup\": return \"touchend\";\r\n case \"click\": return \"click\";\r\n case \"dblclick\": return \"dblclick\";\r\n }\r\n }\r\n else if (supports(\"mouseevents\")) {\r\n switch (key) {\r\n case \"pointerover\": return \"mouseover\";\r\n case \"pointerout\": return \"mouseout\";\r\n case \"pointerleave\": return \"mouseleave\";\r\n case \"pointerdown\": return \"mousedown\";\r\n case \"pointermove\": return \"mousemove\";\r\n case \"pointerup\": return \"mouseup\";\r\n case \"click\": return \"click\";\r\n case \"dblclick\": return \"dblclick\";\r\n }\r\n }\r\n return key;\r\n}\r\n/**\r\n * Determines if pointer event originated from a touch pointer or mouse.\r\n *\r\n * @param ev Original event\r\n * @return Touch pointer?\r\n */\r\nexport function isTouchEvent(ev) {\r\n if (typeof Touch !== \"undefined\" && ev instanceof Touch) {\r\n return true;\r\n }\r\n else if (typeof PointerEvent !== \"undefined\" && ev instanceof PointerEvent && ev.pointerType != null) {\r\n switch (ev.pointerType) {\r\n case \"touch\":\r\n case \"pen\":\r\n case 2:\r\n return true;\r\n case \"mouse\":\r\n case 4:\r\n return false;\r\n default:\r\n return !(ev instanceof MouseEvent);\r\n }\r\n }\r\n else if (ev.type != null) {\r\n if (ev.type.match(/^mouse/)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n/**\r\n * Sets style property on DOM element.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport function setStyle(dom, property, value) {\r\n dom.style[property] = value;\r\n}\r\nexport function getStyle(dom, property) {\r\n return dom.style[property];\r\n}\r\n/**\r\n * Gets the target of the event, works for shadow DOM too.\r\n */\r\nexport function getEventTarget(event) {\r\n if (event.composedPath) {\r\n const path = event.composedPath();\r\n if (path.length === 0) {\r\n return null;\r\n }\r\n else {\r\n return path[0];\r\n }\r\n }\r\n else {\r\n return event.target;\r\n }\r\n}\r\n/**\r\n * Checks of element `a` contains element `b`.\r\n *\r\n * @param a Aleged ascendant\r\n * @param b Aleged descendant\r\n * @return Contains?\r\n */\r\nexport function contains(a, b) {\r\n let cursor = b;\r\n while (true) {\r\n if (a === cursor) {\r\n return true;\r\n }\r\n else if (cursor.parentNode === null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host == null) {\r\n return false;\r\n }\r\n else {\r\n cursor = cursor.host;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * Returns `true` if pointer event originated on an element within Root.\r\n *\r\n * @since 5.2.8\r\n * @param event Event\r\n * @param target Target element\r\n */\r\nexport function isLocalEvent(event, target) {\r\n return event.target && contains(target.root.dom, event.target);\r\n}\r\n/**\r\n * Disables or enables interactivity of a DOM element.\r\n *\r\n * @param target Target element\r\n * @param interactive Interactive?\r\n */\r\nexport function setInteractive(target, interactive) {\r\n if (interactive) {\r\n target.style.pointerEvents = \"auto\";\r\n }\r\n else {\r\n target.style.pointerEvents = \"none\";\r\n }\r\n}\r\nexport function getEventKey(event) {\r\n if (event.key !== undefined) {\r\n return event.key;\r\n }\r\n switch (event.keyCode) {\r\n case 9: return \"Tab\";\r\n case 13: return \"Enter\";\r\n case 16: return \"Shift\";\r\n case 17: return \"Control\";\r\n case 27: return \"Escape\";\r\n case 32: return \" \";\r\n case 37: return \"ArrowLeft\";\r\n case 38: return \"ArrowUp\";\r\n case 39: return \"ArrowRight\";\r\n case 40: return \"ArrowDown\";\r\n case 46: return \"Delete\";\r\n }\r\n return \"\" + event.keyCode;\r\n}\r\n/**\r\n * Returns the shadow root of the element or null\r\n *\r\n * @param a Node\r\n * @return Root\r\n */\r\nexport function getShadowRoot(a) {\r\n let cursor = a;\r\n while (true) {\r\n if (cursor.parentNode === null) {\r\n // TODO better ShadowRoot detection\r\n if (cursor.host != null) {\r\n return cursor;\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n cursor = cursor.parentNode;\r\n }\r\n }\r\n}\r\n/**\r\n * [rootStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n */\r\nlet rootStylesheet;\r\n/**\r\n * @ignore Exclude from docs\r\n */\r\nfunction createStylesheet(element, text, nonce = \"\") {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n e.textContent = text;\r\n if (element === null) {\r\n document.head.appendChild(e);\r\n }\r\n else {\r\n element.appendChild(e);\r\n }\r\n return e;\r\n}\r\n/**\r\n * [getStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @return [description]\r\n */\r\nfunction getStylesheet(element, nonce = \"\") {\r\n if (element === null) {\r\n if (rootStylesheet == null) {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n document.head.appendChild(e);\r\n rootStylesheet = e.sheet;\r\n }\r\n return rootStylesheet;\r\n }\r\n else {\r\n // TODO use createElementNS ?\r\n const e = document.createElement(\"style\");\r\n e.type = \"text/css\";\r\n if (nonce != \"\") {\r\n e.setAttribute(\"nonce\", nonce);\r\n }\r\n element.appendChild(e);\r\n return e.sheet;\r\n }\r\n}\r\n/**\r\n * [makeStylesheet description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param selector [description]\r\n * @return [description]\r\n */\r\nfunction appendStylesheet(root, selector) {\r\n const index = root.cssRules.length;\r\n root.insertRule(selector + \"{}\", index);\r\n return root.cssRules[index];\r\n}\r\n/**\r\n * Defines a class for a CSS rule.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\r\nexport class StyleRule extends DisposerClass {\r\n /**\r\n * Constructor.\r\n *\r\n * @param selector CSS selector\r\n * @param styles An object of style attribute - value pairs\r\n */\r\n constructor(element, selector, styles, nonce = \"\") {\r\n super();\r\n Object.defineProperty(this, \"_root\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * CSS rule.\r\n */\r\n Object.defineProperty(this, \"_rule\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._root = getStylesheet(element, nonce);\r\n try {\r\n this._rule = appendStylesheet(this._root, selector);\r\n }\r\n catch (err) {\r\n // Create an empty rule on failed selectors\r\n this._rule = appendStylesheet(this._root, \":not(*)\");\r\n }\r\n $object.each(styles, (key, value) => {\r\n this.setStyle(key, value);\r\n });\r\n }\r\n /**\r\n * A CSS selector text.\r\n *\r\n * E.g.: `.myClass p`\r\n *\r\n * @param selector CSS selector\r\n */\r\n set selector(selector) {\r\n this._rule.selectorText = selector;\r\n }\r\n /**\r\n * @return CSS selector\r\n */\r\n get selector() {\r\n return this._rule.selectorText;\r\n }\r\n // TODO test this\r\n _dispose() {\r\n // TODO a bit hacky\r\n const index = $array.indexOf(this._root.cssRules, this._rule);\r\n if (index === -1) {\r\n throw new Error(\"Could not dispose StyleRule\");\r\n }\r\n else {\r\n // TODO if it's empty remove it from the DOM ?\r\n this._root.deleteRule(index);\r\n }\r\n }\r\n /**\r\n * Sets the same style properties with browser-specific prefixes.\r\n *\r\n * @param name Attribute name\r\n * @param value Attribute value\r\n */\r\n _setVendorPrefixName(name, value) {\r\n const style = this._rule.style;\r\n style.setProperty(\"-webkit-\" + name, value, \"\");\r\n style.setProperty(\"-moz-\" + name, value, \"\");\r\n style.setProperty(\"-ms-\" + name, value, \"\");\r\n style.setProperty(\"-o-\" + name, value, \"\");\r\n style.setProperty(name, value, \"\");\r\n }\r\n /**\r\n * Sets a value for specific style attribute.\r\n *\r\n * @param name Attribute\r\n * @param value Value\r\n */\r\n setStyle(name, value) {\r\n if (name === \"transition\") {\r\n this._setVendorPrefixName(name, value);\r\n }\r\n else {\r\n this._rule.style.setProperty(name, value, \"\");\r\n }\r\n }\r\n}\r\n/**\r\n * Defines a class for an entire CSS style sheet.\r\n *\r\n * Can be used to dynamically add CSS to the document.\r\n */\r\nexport class StyleSheet extends DisposerClass {\r\n /**\r\n * Constructor.\r\n *\r\n * @param text CSS stylesheet\r\n */\r\n constructor(element, text, nonce = \"\") {\r\n super();\r\n Object.defineProperty(this, \"_element\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._element = createStylesheet(element, text, nonce);\r\n }\r\n _dispose() {\r\n if (this._element.parentNode) {\r\n this._element.parentNode.removeChild(this._element);\r\n }\r\n }\r\n}\r\n/**\r\n * Adds a class name to an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function addClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n const classes = className.split(\" \");\r\n $array.each(classes, (name) => {\r\n element.classList.add(name);\r\n });\r\n }\r\n else {\r\n let currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\r\n return item !== className;\r\n }).join(\" \") + \" \" + className);\r\n }\r\n else {\r\n element.setAttribute(\"class\", className);\r\n }\r\n }\r\n}\r\n/**\r\n * Removes a class name from an HTML or SVG element.\r\n *\r\n * @ignore Exclude from docs\r\n * @param element Element\r\n * @param className Class name to add\r\n */\r\nexport function removeClass(element, className) {\r\n if (!element) {\r\n return;\r\n }\r\n if (element.classList) {\r\n element.classList.remove(className);\r\n }\r\n else {\r\n let currentClassName = element.getAttribute(\"class\");\r\n if (currentClassName) {\r\n element.setAttribute(\"class\", currentClassName.split(\" \").filter((item) => {\r\n return item !== className;\r\n }).join(\" \"));\r\n }\r\n }\r\n}\r\n// /**\r\n// * Applies a set of styles to an element. Stores the original styles so they\r\n// * can be restored later.\r\n// *\r\n// * @ignore\r\n// * @param io Element\r\n// */\r\n// export function prepElementForDrag(dom: HTMLElement): void {\r\n// \t// @todo: save current values\r\n// \t// Define possible props\r\n// \tlet props = [\r\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\r\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\r\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\r\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\r\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\r\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\r\n// \t];\r\n// \tfor (let i = 0; i < props.length; i++) {\r\n// \t\tif (props[i] in dom.style) {\r\n// \t\t\tsetStyle(dom, props[i], \"none\");\r\n// \t\t}\r\n// \t}\r\n// \t// Remove iOS-specific selection;\r\n// \tsetStyle(dom, \"tapHighlightColor\", \"rgba(0, 0, 0, 0)\");\r\n// }\r\n// /**\r\n// * Restores replaced styles\r\n// *\r\n// * @ignore\r\n// * @param io Element\r\n// */\r\n// export function unprepElementForDrag(dom: HTMLElement): void {\r\n// \t// Define possible props\r\n// \tlet props = [\r\n// \t\t\"touchAction\", \"webkitTouchAction\", \"MozTouchAction\", \"MSTouchAction\", \"msTouchAction\", \"oTouchAction\",\r\n// \t\t\"userSelect\", \"webkitUserSelect\", \"MozUserSelect\", \"MSUserSelect\", \"msUserSelect\", \"oUserSelect\",\r\n// \t\t\"touchSelect\", \"webkitTouchSelect\", \"MozTouchSelect\", \"MSTouchSelect\", \"msTouchSelect\", \"oTouchSelect\",\r\n// \t\t\"touchCallout\", \"webkitTouchCallout\", \"MozTouchCallout\", \"MSTouchCallout\", \"msTouchCallout\", \"oTouchCallout\",\r\n// \t\t\"contentZooming\", \"webkitContentZooming\", \"MozContentZooming\", \"MSContentZooming\", \"msContentZooming\", \"oContentZooming\",\r\n// \t\t\"userDrag\", \"webkitUserDrag\", \"MozUserDrag\", \"MSUserDrag\", \"msUserDrag\", \"oUserDrag\"\r\n// \t];\r\n// \tfor (let i = 0; i < props.length; i++) {\r\n// \t\tif (props[i] in dom.style) {\r\n// \t\t\tsetStyle(dom, props[i], \"\");\r\n// \t\t}\r\n// \t}\r\n// \t// Remove iOS-specific selection;\r\n// \tsetStyle(dom, \"tapHighlightColor\", \"\");\r\n// }\r\nexport function iOS() {\r\n return /apple/i.test(navigator.vendor) && \"ontouchend\" in document;\r\n}\r\nexport function getSafeResolution() {\r\n return iOS() ? 1 : undefined;\r\n}\r\nexport function relativeToValue(percent, full) {\r\n if ($type.isNumber(percent)) {\r\n return percent;\r\n }\r\n else if (percent != null && $type.isNumber(percent.value) && $type.isNumber(full)) {\r\n return full * percent.value;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/**\r\n * Returns number of decimals\r\n *\r\n * @ignore Exclude from docs\r\n * @param number Input number\r\n * @return Number of decimals\r\n */\r\nexport function decimalPlaces(number) {\r\n let match = ('' + number).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\r\n if (!match) {\r\n return 0;\r\n }\r\n return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));\r\n}\r\n/**\r\n * ============================================================================\r\n * STRING FORMATTING FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Pads a string with additional characters to certain length.\r\n *\r\n * @param value A numeric value\r\n * @param len Result string length in characters\r\n * @param char A character to use for padding\r\n * @return Padded value as string\r\n */\r\nexport function padString(value, len = 0, char = \"0\") {\r\n if (typeof value !== \"string\") {\r\n value = value.toString();\r\n }\r\n return len > value.length ? Array(len - value.length + 1).join(char) + value : value;\r\n}\r\nexport function trimLeft(text) {\r\n return text.replace(/^[\\s]*/, \"\");\r\n}\r\nexport function trimRight(text) {\r\n return text.replace(/[\\s]*$/, \"\");\r\n}\r\nexport function trim(text) {\r\n return trimLeft(trimRight(text));\r\n}\r\nexport function truncateTextWithEllipsis(text, maxLength, breakWords = false, ellipsis = \"...\") {\r\n if (text.length > maxLength) {\r\n // Find the last non-alphanumeric character before maxLength\r\n let lastNonAlphanumericIndex = maxLength - 1;\r\n while (lastNonAlphanumericIndex >= 0 && text.charAt(lastNonAlphanumericIndex).match(/\\w/)) {\r\n lastNonAlphanumericIndex--;\r\n }\r\n if (lastNonAlphanumericIndex >= 0 && breakWords == false) {\r\n return text.substring(0, lastNonAlphanumericIndex + 1) + '...';\r\n }\r\n else {\r\n // If no non-alphanumeric character found, truncate without breaking words\r\n return text.substring(0, maxLength) + ellipsis;\r\n }\r\n }\r\n else {\r\n return text;\r\n }\r\n}\r\n/**\r\n * Tries to determine format type.\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format string\r\n * @return Format type (\"string\" | \"number\" | \"date\" | \"duration\")\r\n */\r\nexport function getFormat(format) {\r\n // Undefined?\r\n if (typeof format === \"undefined\") {\r\n return \"string\";\r\n }\r\n // Cleanup and lowercase format\r\n format = format.toLowerCase().replace(/^\\[[^\\]]*\\]/, \"\");\r\n // Remove style tags\r\n format = format.replace(/\\[[^\\]]+\\]/, \"\");\r\n // Trim\r\n format = format.trim();\r\n // Check for any explicit format hints (i.e. /Date)\r\n let hints = format.match(/\\/(date|number|duration)$/);\r\n if (hints) {\r\n return hints[1];\r\n }\r\n // Check for explicit hints\r\n if (format === \"number\") {\r\n return \"number\";\r\n }\r\n if (format === \"date\") {\r\n return \"date\";\r\n }\r\n if (format === \"duration\") {\r\n return \"duration\";\r\n }\r\n // Detect number formatting symbols\r\n if (format.match(/[#0]/)) {\r\n return \"number\";\r\n }\r\n // Detect date formatting symbols\r\n if (format.match(/[ymwdhnsqaxkzgtei]/)) {\r\n return \"date\";\r\n }\r\n // Nothing? Let's display as string\r\n return \"string\";\r\n}\r\n/**\r\n * Cleans up format:\r\n * * Strips out formatter hints\r\n *\r\n * @ignore Exclude from docs\r\n * @param format Format\r\n * @return Cleaned format\r\n */\r\nexport function cleanFormat(format) {\r\n return format.replace(/\\/(date|number|duration)$/i, \"\");\r\n}\r\n/**\r\n * Strips all tags from the string.\r\n *\r\n * @param text Source string\r\n * @return String without tags\r\n */\r\nexport function stripTags(text) {\r\n return text ? text.replace(/<[^>]*>/g, \"\") : text;\r\n}\r\n/**\r\n * Removes new lines and tags from a string.\r\n *\r\n * @param text String to conver\r\n * @return Converted string\r\n */\r\nexport function plainText(text) {\r\n return text ? stripTags((\"\" + text).replace(/[\\n\\r]+/g, \". \")) : text;\r\n}\r\n/**\r\n * Escapes string so it can safely be used in a Regex.\r\n *\r\n * @param value Unsescaped string\r\n * @return Escaped string\r\n */\r\nexport function escapeForRgex(value) {\r\n return value.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\r\n/**\r\n * Adds space before each uppercase letter.\r\n *\r\n * @param str Input string\r\n * @return Output string\r\n */\r\nexport function addSpacing(str) {\r\n let result = \"\";\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charAt(i);\r\n if (char.toUpperCase() == char && i != 0) {\r\n result += \" \";\r\n }\r\n result += char;\r\n }\r\n return result;\r\n}\r\n/**\r\n * Splits the string into separate characters. Keeps RTL words non-split.\r\n *\r\n * @param source Input\r\n * @return Split text\r\n */\r\nexport function splitString(source) {\r\n // Regular expression to identify RTL characters\r\n const rtlChar = /[\\u0590-\\u05FF\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\uFB50-\\uFDFF\\uFE70-\\uFEFF]/;\r\n // Regular expression to capture segments ending with specific Arabic characters\r\n const splitPattern = /([^اأدذرزو]*[اأدذرزو])/gi;\r\n // Split input string into array of words or characters, including whitespace\r\n let segments = source.split(/(\\s+)/); // Split by whitespace, capturing it\r\n let result = [];\r\n segments.forEach(segment => {\r\n if (segment.match(/^\\s+$/)) {\r\n // If the segment is purely whitespace\r\n if (segment = \" \") {\r\n segment = \" \";\r\n }\r\n result.push(segment);\r\n }\r\n else if (rtlChar.test(segment)) {\r\n // If the segment contains RTL characters, handle special splits\r\n let parts = segment.split(splitPattern).filter(part => part !== '');\r\n // Concatenate parts processed by the split pattern directly to result\r\n result = result.concat(parts);\r\n }\r\n else {\r\n // Treat this segment as LTR: split into characters\r\n result = result.concat([...segment]);\r\n }\r\n });\r\n return result;\r\n}\r\n/**\r\n * ============================================================================\r\n * DATE-RELATED FUNCTIONS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * Returns a year day.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year day\r\n * @todo Account for UTC\r\n */\r\nexport function getYearDay(date, utc = false) {\r\n // TODO: utc needed?\r\n utc;\r\n const start = new Date(date.getFullYear(), 0, 0);\r\n const diff = (date.getTime() - start.getTime()) + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);\r\n const oneDay = 1000 * 60 * 60 * 24;\r\n return Math.floor(diff / oneDay);\r\n}\r\n/**\r\n * Returns week number for a given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number\r\n * @todo Account for UTC\r\n */\r\nexport function getWeek(date, _utc = false) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return Math.ceil((((d.getTime() - firstDay.getTime()) / 86400000) + 1) / 7);\r\n}\r\n/**\r\n * Returns a \"week year\" of the given date.\r\n *\r\n * @param date Date\r\n * @param utc Assume UTC dates?\r\n * @return Year of week\r\n * @since 5.3.0\r\n * @todo Account for UTC\r\n */\r\nexport function getWeekYear(date, _utc = false) {\r\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\r\n const day = d.getUTCDay() || 7;\r\n d.setUTCDate(d.getUTCDate() + 4 - day);\r\n const firstDay = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\r\n return firstDay.getFullYear();\r\n}\r\n/**\r\n * Returns a week number in the month.\r\n *\r\n * @param date Source Date\r\n * @param utc Assume UTC dates?\r\n * @return Week number in month\r\n */\r\nexport function getMonthWeek(date, utc = false) {\r\n const firstWeek = getWeek(new Date(date.getFullYear(), date.getMonth(), 1), utc);\r\n let currentWeek = getWeek(date, utc);\r\n if (currentWeek == 1) {\r\n currentWeek = 53;\r\n }\r\n return currentWeek - firstWeek + 1;\r\n}\r\n/**\r\n * Returns a year day out of the given week number.\r\n *\r\n * @param week Week\r\n * @param year Year\r\n * @param weekday Weekday\r\n * @param utc Assume UTC dates\r\n * @return Day in a year\r\n */\r\nexport function getDayFromWeek(week, year, weekday = 1, utc = false) {\r\n let date = new Date(year, 0, 4, 0, 0, 0, 0);\r\n if (utc) {\r\n date.setUTCFullYear(year);\r\n }\r\n let day = week * 7 + weekday - ((date.getDay() || 7) + 3);\r\n return day;\r\n}\r\n/**\r\n * Returns 12-hour representation out of the 24-hour hours.\r\n *\r\n * @param hours 24-hour number\r\n * @return 12-hour number\r\n */\r\nexport function get12Hours(hours, base) {\r\n if (hours > 12) {\r\n hours -= 12;\r\n }\r\n else if (hours === 0) {\r\n hours = 12;\r\n }\r\n return base != null ? hours + (base - 1) : hours;\r\n}\r\n/**\r\n * Returns a string name of the time zone.\r\n *\r\n * @param date Date object\r\n * @param long Should return long (\"Pacific Standard Time\") or short abbreviation (\"PST\")\r\n * @param savings Include information if it's in daylight savings mode\r\n * @param utc Assume UTC dates\r\n * @return Time zone name\r\n */\r\nexport function getTimeZone(date, long = false, savings = false, utc = false, timezone) {\r\n if (utc) {\r\n return long ? \"Coordinated Universal Time\" : \"UTC\";\r\n }\r\n else if (timezone) {\r\n const d1 = date.toLocaleString(\"en-US\", { timeZone: timezone });\r\n const d2 = date.toLocaleString(\"en-US\", { timeZone: timezone, timeZoneName: long ? \"long\" : \"short\" });\r\n return trim(d2.substr(d1.length));\r\n }\r\n let wotz = date.toLocaleString(\"UTC\");\r\n let wtz = date.toLocaleString(\"UTC\", { timeZoneName: long ? \"long\" : \"short\" }).substr(wotz.length);\r\n //wtz = wtz.replace(/[+-]+[0-9]+$/, \"\");\r\n if (savings === false) {\r\n wtz = wtz.replace(/ (standard|daylight|summer|winter) /i, \" \");\r\n }\r\n return trim(wtz);\r\n}\r\nexport function getTimezoneOffset(timezone) {\r\n const date = new Date(Date.UTC(2012, 0, 1, 0, 0, 0, 0));\r\n const utcDate = new Date(date.toLocaleString(\"en-US\", { timeZone: \"UTC\" }));\r\n const tzDate = new Date(date.toLocaleString(\"en-US\", { timeZone: timezone }));\r\n return (tzDate.getTime() - utcDate.getTime()) / 6e4 * -1;\r\n}\r\nexport function capitalizeFirst(text) {\r\n return text.charAt(0).toUpperCase() + text.slice(1);\r\n}\r\n/**\r\n * The functions below are taken and adapted from Garry Tan's blog post:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * The further attributions go mjijackson.com, which now seems to be defunct.\r\n */\r\n/**\r\n * Converts an HSL color value to RGB. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes h, s, and l are contained in the set [0, 1] and\r\n * returns r, g, and b in the set [0, 255].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @param h The hue\r\n * @param s The saturation\r\n * @param l The lightness\r\n * @return The RGB representation\r\n */\r\nexport function hslToRgb(color) {\r\n let r, g, b;\r\n let h = color.h;\r\n let s = color.s;\r\n let l = color.l;\r\n if (s == 0) {\r\n r = g = b = l; // achromatic\r\n }\r\n else {\r\n let hue2rgb = function hue2rgb(p, q, t) {\r\n if (t < 0) {\r\n t += 1;\r\n }\r\n if (t > 1) {\r\n t -= 1;\r\n }\r\n if (t < 1 / 6) {\r\n return p + (q - p) * 6 * t;\r\n }\r\n if (t < 1 / 2) {\r\n return q;\r\n }\r\n if (t < 2 / 3) {\r\n return p + (q - p) * (2 / 3 - t) * 6;\r\n }\r\n return p;\r\n };\r\n let q = l < 0.5 ? l * (1 + s) : l + s - l * s;\r\n let p = 2 * l - q;\r\n r = hue2rgb(p, q, h + 1 / 3);\r\n g = hue2rgb(p, q, h);\r\n b = hue2rgb(p, q, h - 1 / 3);\r\n }\r\n return {\r\n r: Math.round(r * 255),\r\n g: Math.round(g * 255),\r\n b: Math.round(b * 255)\r\n };\r\n}\r\n/**\r\n * Converts an RGB color value to HSL. Conversion formula\r\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\r\n * Assumes r, g, and b are contained in the set [0, 255] and\r\n * returns h, s, and l in the set [0, 1].\r\n *\r\n * Function adapted from:\r\n * http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\r\n *\r\n * @param r The red color value\r\n * @param g The green color value\r\n * @param b The blue color value\r\n * @return The HSL representation\r\n */\r\nexport function rgbToHsl(color) {\r\n let r = color.r / 255;\r\n let g = color.g / 255;\r\n let b = color.b / 255;\r\n let max = Math.max(r, g, b);\r\n let min = Math.min(r, g, b);\r\n let h = 0;\r\n let s = 0;\r\n let l = (max + min) / 2;\r\n if (max === min) {\r\n h = s = 0; // achromatic\r\n }\r\n else {\r\n let d = max - min;\r\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\r\n switch (max) {\r\n case r:\r\n h = (g - b) / d + (g < b ? 6 : 0);\r\n break;\r\n case g:\r\n h = (b - r) / d + 2;\r\n break;\r\n case b:\r\n h = (r - g) / d + 4;\r\n break;\r\n }\r\n h /= 6;\r\n }\r\n return {\r\n h: h,\r\n s: s,\r\n l: l,\r\n };\r\n}\r\n/**\r\n * Converts HSV to HSL.\r\n *\r\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSV_to_HSL\r\n */\r\nexport function hsvToHsl(hsv) {\r\n const l = hsv.v * (1 - (hsv.s / 2));\r\n const s = (l === 0 || l === 1\r\n ? 0\r\n : (hsv.v - l) / Math.min(l, 1 - l));\r\n return {\r\n h: hsv.h,\r\n s,\r\n l,\r\n a: hsv.a,\r\n };\r\n}\r\n/**\r\n * Converts HSL to HSV.\r\n *\r\n * https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_HSV\r\n */\r\nexport function hslToHsv(hsl) {\r\n const v = hsl.l + (hsl.s * Math.min(hsl.l, 1 - hsl.l));\r\n const s = (v === 0\r\n ? 0\r\n : 2 * (1 - (hsl.l / v)));\r\n return {\r\n h: hsl.h,\r\n s,\r\n v,\r\n a: hsl.a,\r\n };\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the reference color.\r\n *\r\n * @param color Reference color\r\n * @param percent Brightness percent\r\n * @return Hex code of the new color\r\n */\r\nexport function lighten(rgb, percent) {\r\n if (rgb) {\r\n return {\r\n r: Math.max(0, Math.min(255, rgb.r + getLightnessStep(rgb.r, percent))),\r\n g: Math.max(0, Math.min(255, rgb.g + getLightnessStep(rgb.g, percent))),\r\n b: Math.max(0, Math.min(255, rgb.b + getLightnessStep(rgb.b, percent))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Gets lightness step.\r\n *\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getLightnessStep(value, percent) {\r\n let base = percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns a color that is `percent` brighter than the source `color`.\r\n *\r\n * @param color Source color\r\n * @param percent Brightness percent\r\n * @return New color\r\n */\r\nexport function brighten(rgb, percent) {\r\n if (rgb) {\r\n let base = Math.min(Math.max(rgb.r, rgb.g, rgb.b), 230);\r\n //let base = Math.max(rgb.r, rgb.g, rgb.b);\r\n let step = getLightnessStep(base, percent);\r\n return {\r\n r: Math.max(0, Math.min(255, Math.round(rgb.r + step))),\r\n g: Math.max(0, Math.min(255, Math.round(rgb.g + step))),\r\n b: Math.max(0, Math.min(255, Math.round(rgb.b + step))),\r\n a: rgb.a\r\n };\r\n }\r\n else {\r\n // TODO is this correct ?\r\n return rgb;\r\n }\r\n}\r\n;\r\n/**\r\n * Returns brightness step.\r\n *\r\n * @ignore Exclude from docs\r\n * @param value Value\r\n * @param percent Percent\r\n * @return Step\r\n */\r\nexport function getBrightnessStep(_value, percent) {\r\n let base = 255; //percent > 0 ? 255 - value : value;\r\n return Math.round(base * percent);\r\n}\r\n/**\r\n * Returns `true` if color is \"light\". Useful indetermining which contrasting\r\n * color to use for elements over this color. E.g.: you would want to use\r\n * black text over light background, and vice versa.\r\n *\r\n * @param color Source color\r\n * @return Light?\r\n */\r\nexport function isLight(color) {\r\n return ((color.r * 299) + (color.g * 587) + (color.b * 114)) / 1000 >= 128;\r\n}\r\n/**\r\n * Returns a new [[iRGB]] object based on `rgb` parameter with specific\r\n * saturation applied.\r\n *\r\n * `saturation` can be in the range of 0 (fully desaturated) to 1 (fully\r\n * saturated).\r\n *\r\n * @param color Base color\r\n * @param saturation Saturation (0-1)\r\n * @return New color\r\n */\r\nexport function saturate(rgb, saturation) {\r\n if (rgb === undefined || saturation == 1) {\r\n return rgb;\r\n }\r\n let hsl = rgbToHsl(rgb);\r\n hsl.s = saturation;\r\n return hslToRgb(hsl);\r\n}\r\n/**\r\n * Returns a color which contrasts more with the source `color`.\r\n *\r\n * @param color Base color\r\n * @param lightAlternative Light option\r\n * @param darkAlternative Dark option\r\n * @return New color\r\n */\r\nexport function alternativeColor(color, lightAlternative = { r: 255, g: 255, b: 255 }, darkAlternative = { r: 255, g: 255, b: 255 }) {\r\n let light = lightAlternative;\r\n let dark = darkAlternative;\r\n if (isLight(darkAlternative)) {\r\n light = darkAlternative;\r\n dark = lightAlternative;\r\n }\r\n return isLight(color) ? dark : light;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function mergeTags(tags1, tags2) {\r\n if (!tags1) {\r\n tags1 = [];\r\n }\r\n return [...tags1, ...tags2].filter((value, index, self) => {\r\n return self.indexOf(value) === index;\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function sameBounds(a, b) {\r\n if (!b) {\r\n return false;\r\n }\r\n if (a.left != b.left) {\r\n return false;\r\n }\r\n if (a.right != b.right) {\r\n return false;\r\n }\r\n if (a.top != b.top) {\r\n return false;\r\n }\r\n if (a.bottom != b.bottom) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n//# sourceMappingURL=Utils.js.map","import { range } from \"./Animation\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * @ignore\r\n */\r\nfunction string2hex(string) {\r\n //string = cssColorNames[string.toLowerCase()] || string;\r\n if (string[0] === \"#\") {\r\n string = string.substr(1);\r\n }\r\n if (string.length == 3) {\r\n string = string[0].repeat(2) + string[1].repeat(2) + string[2].repeat(2);\r\n }\r\n return parseInt(string, 16);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function rgba2hex(color) {\r\n color = color.replace(/[ ]/g, \"\");\r\n // Init\r\n let matches = color.match(/^rgb\\(([0-9]*),([0-9]*),([0-9]*)\\)/i);\r\n // Try rgb() format\r\n if (matches) {\r\n matches.push(\"1\");\r\n }\r\n else {\r\n matches = color.match(/^rgba\\(([0-9]*),([0-9]*),([0-9]*),([.0-9]*)\\)/i);\r\n if (!matches) {\r\n return 0x000000;\r\n }\r\n }\r\n let hex = \"\";\r\n for (let i = 1; i <= 3; i++) {\r\n let val = parseInt(matches[i]).toString(16);\r\n if (val.length == 1) {\r\n val = \"0\" + val;\r\n }\r\n hex += val;\r\n }\r\n return string2hex(hex);\r\n}\r\n/**\r\n * Returns a new [[Color]] object base on input.\r\n *\r\n * Accepts parameters in CSS hex or rgb/rtba strings, or hex numbers.\r\n *\r\n * * `\"#f00\"`\r\n * * `\"#ff0000\"`\r\n * * `\"rgb(255, 0, 0)\"`\r\n * * `\"rgba(255, 0, 0, 1)\"`\r\n * * `0xff0000`\r\n *\r\n * @param input Input color\r\n * @return Color\r\n */\r\nexport function color(input) {\r\n return Color.fromAny(input);\r\n}\r\n/**\r\n * Wherever color needs to be specified in amCharts 5, `Color` object needs to\r\n * be used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/} for more info\r\n * @important\r\n */\r\nexport class Color {\r\n constructor(hex) {\r\n Object.defineProperty(this, \"_hex\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._hex = hex | 0;\r\n }\r\n /**\r\n * Color numeric value.\r\n */\r\n get hex() {\r\n return this._hex;\r\n }\r\n /**\r\n * Value of color's R channel.\r\n * @return R value\r\n */\r\n get r() {\r\n return this._hex >>> 16;\r\n }\r\n /**\r\n * Value of color's G channel.\r\n * @return G value\r\n */\r\n get g() {\r\n return (this._hex >> 8) & 0xFF;\r\n }\r\n /**\r\n * Value of color's B channel.\r\n * @return B value\r\n */\r\n get b() {\r\n return this._hex & 0xFF;\r\n }\r\n /**\r\n * Returns color CSS representation in form of `rgba(r, g, b, a)` string.\r\n *\r\n * @param alpha Opacity\r\n * @return CSS string\r\n */\r\n toCSS(alpha = 1) {\r\n return \"rgba(\" + this.r + \", \" + this.g + \", \" + this.b + \", \" + alpha + \")\";\r\n }\r\n /**\r\n * Returns color CSS representation in form of `#rgb` string.\r\n *\r\n * @return CSS string\r\n */\r\n toCSSHex() {\r\n return \"#\" + $utils.padString(this.r.toString(16), 2) + $utils.padString(this.g.toString(16), 2) + $utils.padString(this.b.toString(16), 2);\r\n }\r\n /**\r\n * Returns color's HSL info.\r\n * @param alpha Opacity\r\n * @return HSL info\r\n */\r\n toHSL(alpha = 1) {\r\n return $utils.rgbToHsl({\r\n r: this.r,\r\n g: this.g,\r\n b: this.b,\r\n a: alpha\r\n });\r\n }\r\n /**\r\n * Converts HSL values into a new [[Color]] object.\r\n *\r\n * @param h H value\r\n * @param s S value\r\n * @param l L value\r\n * @return Color object\r\n */\r\n static fromHSL(h, s, l) {\r\n const rgb = $utils.hslToRgb({\r\n h: h,\r\n s: s,\r\n l: l\r\n });\r\n return this.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n toString() {\r\n return this.toCSSHex();\r\n }\r\n /**\r\n * Converts hex number into a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromHex(0xff0000) // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromHex(0xff0000) // red\r\n * ```\r\n *\r\n * @param hex Hex color\r\n * @return Color\r\n */\r\n static fromHex(hex) {\r\n return new Color(hex);\r\n }\r\n /**\r\n * Converts RGB values to a new [[Color]] object.\r\n *\r\n * @param r R value\r\n * @param g G value\r\n * @param b B value\r\n * @return Color\r\n */\r\n static fromRGB(r, g, b) {\r\n return new Color((b | 0) + (g << 8) + (r << 16));\r\n }\r\n /**\r\n * Converts RGB string to a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromString(\"#ff0000\") // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromString(\"#ff0000\") // red\r\n * ```\r\n *\r\n * @param s RGB string\r\n * @return Color\r\n */\r\n static fromString(s) {\r\n return new Color(string2hex(s));\r\n }\r\n /**\r\n * Converts CSS rgba() syntax to a new [[Color]] object.\r\n *\r\n * ```TypeScript\r\n * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\r\n * ```\r\n * ```JavaScript\r\n * Color.fromCSS(\"rgba(255, 0, 0, 1)\") // red\r\n * ```\r\n *\r\n * @param {string} s [description]\r\n * @return {Color} [description]\r\n */\r\n static fromCSS(s) {\r\n return new Color(rgba2hex(s));\r\n }\r\n /**\r\n * Convert to color from virtually anything.\r\n *\r\n * Will throw an exception if unable to resolve the color.\r\n *\r\n * @param s Source\r\n * @return Color\r\n */\r\n static fromAny(s) {\r\n if ($type.isString(s)) {\r\n if (s[0] == \"#\") {\r\n return Color.fromString(s);\r\n }\r\n else if (s.substr(0, 3) == \"rgb\") {\r\n return Color.fromCSS(s);\r\n }\r\n }\r\n else if ($type.isNumber(s)) {\r\n return Color.fromHex(s);\r\n }\r\n else if (s instanceof Color) {\r\n return Color.fromHex(s.hex);\r\n }\r\n throw new Error(\"Unknown color syntax: \" + s);\r\n }\r\n /**\r\n * Returns a new [[Color]] object based on either `lightAlternative` or\r\n * `darkAlternative` depending on which one is more contrasting with\r\n * the `color`.\r\n *\r\n * @param color Reference color\r\n * @param lightAlternative Light color\r\n * @param darkAlternative Dark color\r\n * @return Alternative color\r\n */\r\n static alternative(color, lightAlternative, darkAlternative) {\r\n const rgb = $utils.alternativeColor({ r: color.r, g: color.g, b: color.b }, lightAlternative ? { r: lightAlternative.r, g: lightAlternative.g, b: lightAlternative.b } : undefined, darkAlternative ? { r: darkAlternative.r, g: darkAlternative.g, b: darkAlternative.b } : undefined);\r\n return this.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns an intermediate Color between two reference colors depending on\r\n * the progress (`diff`) between the two.\r\n *\r\n * @param diff Progress\r\n * @param from Source color\r\n * @param to Target color\r\n * @param mode Interpolation mode\r\n * @return Color\r\n */\r\n static interpolate(diff, from, to, mode = \"rgb\") {\r\n if (mode == \"hsl\") {\r\n const fromHSL = from.toHSL();\r\n const toHSL = to.toHSL();\r\n return Color.fromHSL(range(diff, fromHSL.h, toHSL.h), range(diff, fromHSL.s, toHSL.s), range(diff, fromHSL.l, toHSL.l));\r\n }\r\n else {\r\n return Color.fromRGB(range(diff, from.r, to.r), range(diff, from.g, to.g), range(diff, from.b, to.b));\r\n }\r\n }\r\n /**\r\n * Returns a new [[Color]] lightened by `percent` value.\r\n *\r\n * Use negative value to darken the color.\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static lighten(color, percent) {\r\n const rgb = $utils.lighten({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns a new [[Color]] brightened by `percent` value.\r\n *\r\n * Use negative value to dim the color.\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static brighten(color, percent) {\r\n const rgb = $utils.brighten({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n /**\r\n * Returns a new [[Color]] saturated by `percent` value.\r\n *\r\n * Value range is between `0` (fully desaturated), to `1` (full color).\r\n *\r\n * @param color Source color\r\n * @param percent Percent\r\n * @return New color\r\n */\r\n static saturate(color, percent) {\r\n const rgb = $utils.saturate({ r: color.r, g: color.g, b: color.b }, percent);\r\n return Color.fromRGB(rgb.r, rgb.g, rgb.b);\r\n }\r\n}\r\n//# sourceMappingURL=Color.js.map","/**\r\n * Event Dispatcher module is used for registering listeners and dispatching\r\n * events across amCharts system.\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { Disposer, MultiDisposer } from \"./Disposer\";\r\nimport * as $array from \"./Array\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Universal Event Dispatcher.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\r\n */\r\nexport class EventDispatcher {\r\n /**\r\n * Constructor\r\n */\r\n constructor() {\r\n Object.defineProperty(this, \"_listeners\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_killed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_disabled\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_iterating\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_enabled\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._listeners = [];\r\n this._killed = [];\r\n this._disabled = {};\r\n this._iterating = 0;\r\n this._enabled = true;\r\n this._disposed = false;\r\n }\r\n /**\r\n * Returns if this object has been already disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Dispose (destroy) this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n const a = this._listeners;\r\n this._iterating = 1;\r\n this._listeners = null;\r\n this._disabled = null;\r\n try {\r\n $array.each(a, (x) => {\r\n x.disposer.dispose();\r\n });\r\n }\r\n finally {\r\n this._killed = null;\r\n this._iterating = null;\r\n }\r\n }\r\n }\r\n /**\r\n * Checks if this particular event dispatcher has any listeners set.\r\n *\r\n * @return Has listeners?\r\n */\r\n hasListeners() {\r\n return this._listeners.length !== 0;\r\n }\r\n /**\r\n * Checks if this particular event dispatcher has any particular listeners set.\r\n *\r\n * @return Has particular event listeners?\r\n */\r\n hasListenersByType(type) {\r\n return $array.any(this._listeners, (x) => (x.type === null || x.type === type) && !x.killed);\r\n }\r\n /**\r\n * Enable dispatching of events if they were previously disabled by\r\n * `disable()`.\r\n */\r\n enable() {\r\n this._enabled = true;\r\n }\r\n /**\r\n * Disable dispatching of events until re-enabled by `enable()`.\r\n */\r\n disable() {\r\n this._enabled = false;\r\n }\r\n /**\r\n * Enable dispatching particular event, if it was disabled before by\r\n * `disableType()`.\r\n *\r\n * @param type Event type\r\n */\r\n enableType(type) {\r\n delete this._disabled[type];\r\n }\r\n /**\r\n * Disable dispatching of events for a certain event type.\r\n *\r\n * Optionally, can set how many dispatches to skip before automatically\r\n * re-enabling the dispatching.\r\n *\r\n * @param type Event type\r\n * @param amount Number of event dispatches to skip\r\n */\r\n disableType(type, amount = Infinity) {\r\n this._disabled[type] = amount;\r\n }\r\n /**\r\n * Removes listener from dispatcher.\r\n *\r\n * Will throw an exception if such listener does not exists.\r\n *\r\n * @param listener Listener to remove\r\n */\r\n _removeListener(listener) {\r\n if (this._iterating === 0) {\r\n const index = this._listeners.indexOf(listener);\r\n if (index === -1) {\r\n throw new Error(\"Invalid state: could not remove listener\");\r\n }\r\n this._listeners.splice(index, 1);\r\n }\r\n else {\r\n this._killed.push(listener);\r\n }\r\n }\r\n /**\r\n * Removes existing listener by certain parameters.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n _removeExistingListener(once, type, callback, context) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._eachListener((info) => {\r\n if (info.once === once && // TODO is this correct ?\r\n info.type === type &&\r\n (callback === undefined || info.callback === callback) &&\r\n info.context === context) {\r\n info.disposer.dispose();\r\n }\r\n });\r\n }\r\n /**\r\n * Checks if dispatching for particular event type is enabled.\r\n *\r\n * @param type Event type\r\n * @return Enabled?\r\n */\r\n isEnabled(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n // TODO is this check correct ?\r\n return this._enabled && this._listeners.length > 0 && this.hasListenersByType(type) && this._disabled[type] === undefined;\r\n }\r\n /**\r\n * Removes all listeners of a particular event type\r\n *\r\n * @param type Listener's type\r\n */\r\n removeType(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._eachListener((info) => {\r\n if (info.type === type) {\r\n info.disposer.dispose();\r\n }\r\n });\r\n }\r\n /**\r\n * Checks if there's already a listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @return Has listener?\r\n */\r\n has(type, callback, context) {\r\n const index = $array.findIndex(this._listeners, (info) => {\r\n return info.once !== true && // Ignoring \"once\" listeners\r\n info.type === type &&\r\n (callback === undefined || info.callback === callback) &&\r\n info.context === context;\r\n });\r\n return index !== -1;\r\n }\r\n /**\r\n * Checks whether event of the particular type should be dispatched.\r\n *\r\n * @param type Event type\r\n * @return Dispatch?\r\n */\r\n _shouldDispatch(type) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n const count = this._disabled[type];\r\n if (!$type.isNumber(count)) {\r\n return this._enabled;\r\n }\r\n else {\r\n if (count <= 1) {\r\n delete this._disabled[type];\r\n }\r\n else {\r\n --this._disabled[type];\r\n }\r\n return false;\r\n }\r\n }\r\n /**\r\n * [_eachListener description]\r\n *\r\n * All of this extra code is needed when a listener is removed while iterating\r\n *\r\n * @todo Description\r\n * @param fn [description]\r\n */\r\n _eachListener(fn) {\r\n ++this._iterating;\r\n try {\r\n $array.each(this._listeners, fn);\r\n }\r\n finally {\r\n --this._iterating;\r\n // TODO should this be inside or outside the finally ?\r\n if (this._iterating === 0 && this._killed.length !== 0) {\r\n // Remove killed listeners\r\n $array.each(this._killed, (killed) => {\r\n this._removeListener(killed);\r\n });\r\n this._killed.length = 0;\r\n }\r\n }\r\n }\r\n /**\r\n * Dispatches an event immediately without waiting for next cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n dispatch(type, event) {\r\n if (this._shouldDispatch(type)) {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n // TODO if the function throws, maybe it should keep going ?\r\n this._eachListener((listener) => {\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n listener.dispatch(type, event);\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * Shelves the event to be dispatched within next update cycle.\r\n *\r\n * @param type Event type\r\n * @param event Event object\r\n * @todo automatically add in type and target properties if they are missing\r\n */\r\n /*public dispatchLater(type: Key, event: T[Key]): void {\r\n if (this._shouldDispatch(type)) {\r\n this._eachListener((listener) => {\r\n // TODO check if it's faster to use an object of listeners rather than a single big array\r\n if (!listener.killed && (listener.type === null || listener.type === type)) {\r\n // TODO if the function throws, maybe it should keep going ?\r\n // TODO dispatch during the update cycle, rather than using whenIdle\r\n $async.whenIdle(() => {\r\n if (!listener.killed) {\r\n listener.dispatch(type, event);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n }*/\r\n /**\r\n * Creates, catalogs and returns an [[EventListener]].\r\n *\r\n * Event listener can be disposed.\r\n *\r\n * @param once Listener's once setting\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @param dispatch\r\n * @returns An event listener\r\n */\r\n _on(once, type, callback, context, shouldClone, dispatch) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n this._removeExistingListener(once, type, callback, context);\r\n const info = {\r\n type: type,\r\n callback: callback,\r\n context: context,\r\n shouldClone: shouldClone,\r\n dispatch: dispatch,\r\n killed: false,\r\n once: once,\r\n disposer: new Disposer(() => {\r\n info.killed = true;\r\n this._removeListener(info);\r\n })\r\n };\r\n this._listeners.push(info);\r\n return info;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on **any** event.\r\n *\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n onAll(callback, context, shouldClone = true) {\r\n return this._on(false, null, callback, context, shouldClone, (_type, event) => callback.call(context, event)).disposer;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on a specific event type.\r\n *\r\n * ```TypeScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n *\r\n * The above will invoke our custom event handler whenever series we put\r\n * event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n on(type, callback, context, shouldClone = true) {\r\n return this._on(false, type, callback, context, shouldClone, (_type, event) => callback.call(context, event)).disposer;\r\n }\r\n /**\r\n * Creates an event listener to be invoked on a specific event type once.\r\n *\r\n * Once the event listener is invoked, it is automatically disposed.\r\n *\r\n * ```TypeScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n * ```JavaScript\r\n * button.events.once(\"click\", (ev) => {\r\n * console.log(\"Button clicked\");\r\n * }, this);\r\n * ```\r\n *\r\n * The above will invoke our custom event handler the first time series we\r\n * put event on is hidden.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n * @param shouldClone Whether the listener should be copied when the EventDispatcher is copied\r\n * @returns A disposable event listener\r\n */\r\n once(type, callback, context, shouldClone = true) {\r\n const x = this._on(true, type, callback, context, shouldClone, (_type, event) => {\r\n x.disposer.dispose();\r\n callback.call(context, event);\r\n });\r\n // TODO maybe this should return a different Disposer ?\r\n return x.disposer;\r\n }\r\n /**\r\n * Removes the event listener with specific parameters.\r\n *\r\n * @param type Listener's type\r\n * @param callback Callback function\r\n * @param context Callback context\r\n */\r\n off(type, callback, context) {\r\n this._removeExistingListener(false, type, callback, context);\r\n }\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n * @ignore\r\n */\r\n copyFrom(source) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n const disposers = [];\r\n $array.each(source._listeners, (x) => {\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n disposers.push(this.onAll(x.callback, x.context));\r\n }\r\n else if (x.once) {\r\n disposers.push(this.once(x.type, x.callback, x.context));\r\n }\r\n else {\r\n disposers.push(this.on(x.type, x.callback, x.context));\r\n }\r\n }\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n/**\r\n * A version of the [[EventDispatcher]] that dispatches events for a specific\r\n * target object.\r\n *\r\n * @ignore\r\n */\r\nexport class TargetedEventDispatcher extends EventDispatcher {\r\n /**\r\n * Constructor\r\n *\r\n * @param target Event dispatcher target\r\n */\r\n constructor(target) {\r\n super();\r\n /**\r\n * A target object which is originating events using this dispatcher.\r\n */\r\n Object.defineProperty(this, \"target\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.target = target;\r\n }\r\n /**\r\n * Copies all dispatcher parameters, including listeners, from another event\r\n * dispatcher.\r\n *\r\n * @param source Source event dispatcher\r\n * @ignore\r\n */\r\n copyFrom(source) {\r\n if (this._disposed) {\r\n throw new Error(\"EventDispatcher is disposed\");\r\n }\r\n if (source === this) {\r\n throw new Error(\"Cannot copyFrom the same TargetedEventDispatcher\");\r\n }\r\n const disposers = [];\r\n $array.each(source._listeners, (x) => {\r\n // TODO very hacky\r\n if (x.context === source.target) {\r\n return;\r\n }\r\n // TODO is this correct ?\r\n if (!x.killed && x.shouldClone) {\r\n if (x.type === null) {\r\n disposers.push(this.onAll(x.callback, x.context));\r\n }\r\n else if (x.once) {\r\n disposers.push(this.once(x.type, x.callback, x.context));\r\n }\r\n else {\r\n disposers.push(this.on(x.type, x.callback, x.context));\r\n }\r\n }\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n//# sourceMappingURL=EventDispatcher.js.map","import { __awaiter } from \"tslib\";\r\nimport { Percent } from \"./Percent\";\r\nimport { Color } from \"./Color\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $object from \"./Object\";\r\n/**\r\n * @ignore\r\n */\r\nexport function waitForAnimations(animations) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (animations !== undefined) {\r\n const promises = [];\r\n $object.each(animations, (_, animation) => {\r\n promises.push(animation.waitForStop());\r\n });\r\n yield Promise.all(promises);\r\n }\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function normalize(value, min, max) {\r\n if (min === max) {\r\n return 0;\r\n }\r\n else {\r\n return Math.min(Math.max((value - min) * (1 / (max - min)), 0), 1);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function range(diff, from, to) {\r\n return from + (diff * (to - from));\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function defaultInterpolate(diff, from, to) {\r\n if (diff >= 1) {\r\n return to;\r\n }\r\n else {\r\n return from;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function percentInterpolate(diff, from, to) {\r\n return new Percent(range(diff, from.percent, to.percent));\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function colorInterpolate(diff, from, to) {\r\n return Color.interpolate(diff, from, to);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getInterpolate(from, to) {\r\n if (typeof from === \"number\" && typeof to === \"number\") {\r\n return range;\r\n }\r\n if (from instanceof Percent && to instanceof Percent) {\r\n return percentInterpolate;\r\n }\r\n if (from instanceof Color && to instanceof Color) {\r\n return colorInterpolate;\r\n }\r\n return defaultInterpolate;\r\n}\r\nexport var AnimationState;\r\n(function (AnimationState) {\r\n AnimationState[AnimationState[\"Stopped\"] = 0] = \"Stopped\";\r\n AnimationState[AnimationState[\"Playing\"] = 1] = \"Playing\";\r\n AnimationState[AnimationState[\"Paused\"] = 2] = \"Paused\";\r\n})(AnimationState || (AnimationState = {}));\r\n/**\r\n * @ignore\r\n */\r\nexport class AnimationTime {\r\n constructor(entity, duration) {\r\n Object.defineProperty(this, \"_entity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_duration\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_playingDuration\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"_startingTime\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"_current\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_from\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_to\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new EventDispatcher()\r\n });\r\n Object.defineProperty(this, \"easing\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._entity = entity;\r\n this._duration = duration;\r\n }\r\n _stopEvent() {\r\n const type = \"stopped\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n }\r\n _runAnimation(currentTime) {\r\n if (this._playingDuration !== null) {\r\n if (this._startingTime === null) {\r\n this._startingTime = currentTime;\r\n return AnimationState.Playing;\r\n }\r\n else {\r\n const diff = (currentTime - this._startingTime) / this._playingDuration;\r\n if (diff >= 1) {\r\n this._playingDuration = null;\r\n this._startingTime = null;\r\n this._from = this._to;\r\n this._current = this._to;\r\n this._entity.markDirty();\r\n this._stopEvent();\r\n const type = \"ended\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n return AnimationState.Stopped;\r\n }\r\n else {\r\n this._current = range(diff, this._from, this._to);\r\n this._entity.markDirty();\r\n const type = \"progress\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this, progress: diff });\r\n }\r\n return AnimationState.Playing;\r\n }\r\n }\r\n }\r\n else {\r\n return AnimationState.Stopped;\r\n }\r\n }\r\n _play() {\r\n this._from = this._current;\r\n if (this._playingDuration === null) {\r\n this._entity._root._addAnimation(this);\r\n const type = \"started\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n }\r\n else {\r\n this._startingTime = null;\r\n }\r\n this._playingDuration = Math.abs(this._to - this._from) * this._duration;\r\n }\r\n get duration() {\r\n return this._duration;\r\n }\r\n set duration(value) {\r\n if (this._duration !== value) {\r\n this._duration = value;\r\n if (value === 0) {\r\n this.jumpTo(this._to);\r\n }\r\n else if (this._current !== this._to) {\r\n this._play();\r\n }\r\n }\r\n }\r\n get current() {\r\n if (this.easing) {\r\n return this.easing(this._current);\r\n }\r\n else {\r\n return this._current;\r\n }\r\n }\r\n stop() {\r\n this.jumpTo(this._current);\r\n }\r\n jumpTo(value) {\r\n if (this._current !== value) {\r\n this._entity.markDirty();\r\n }\r\n if (this._playingDuration !== null) {\r\n this._stopEvent();\r\n }\r\n this._playingDuration = null;\r\n this._startingTime = null;\r\n this._current = value;\r\n this._from = value;\r\n this._to = value;\r\n }\r\n tweenTo(value) {\r\n if (this._current === value || this._duration === 0) {\r\n this.jumpTo(value);\r\n }\r\n else {\r\n if (this._to !== value) {\r\n this._to = value;\r\n this._play();\r\n }\r\n }\r\n }\r\n}\r\n/*export class AnimationValue extends AnimationTime {\r\n public _min: number;\r\n public _max: number;\r\n\r\n constructor(entity: Entity, duration: number, min: number, max: number) {\r\n super(entity, duration);\r\n this._min = min;\r\n this._max = max;\r\n }\r\n\r\n public get min(): number {\r\n return this._min;\r\n }\r\n\r\n public set min(value: number) {\r\n if (this._min !== value) {\r\n this._min = value;\r\n this._entity.markDirty();\r\n }\r\n }\r\n\r\n public get max(): number {\r\n return this._max;\r\n }\r\n\r\n public set max(value: number) {\r\n if (this._max !== value) {\r\n this._max = value;\r\n this._entity.markDirty();\r\n }\r\n }\r\n\r\n public currentValue(): number {\r\n return range(super.currentTime(), this._min, this._max);\r\n }\r\n\r\n public jumpToValue(value: number) {\r\n super.jumpToTime(normalize(value, this._min, this._max));\r\n }\r\n\r\n public tweenToValue(value: number) {\r\n super.tweenToTime(normalize(value, this._min, this._max));\r\n }\r\n}\r\n*/\r\n//# sourceMappingURL=Animation.js.map","import { EventDispatcher } from \"./EventDispatcher\";\r\nimport * as $array from \"./Array\";\r\n/**\r\n * Checks if specific index fits into length.\r\n *\r\n * @param index Index\r\n * @param len Length\r\n * @ignore\r\n */\r\nfunction checkBounds(index, len) {\r\n if (!(index >= 0 && index < len)) {\r\n throw new Error(\"Index out of bounds: \" + index);\r\n }\r\n}\r\n/**\r\n * A List class is used to hold a number of indexed items of the same type.\r\n */\r\nexport class List {\r\n /**\r\n * Constructor\r\n *\r\n * @param initial Inital list of values to add to list\r\n */\r\n constructor(initial = []) {\r\n /**\r\n * List values.\r\n */\r\n Object.defineProperty(this, \"_values\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new EventDispatcher()\r\n });\r\n this._values = initial;\r\n }\r\n /**\r\n * An array of values in the list.\r\n *\r\n * Do not use this property to add values. Rather use dedicated methods, like\r\n * `push()`, `removeIndex()`, etc.\r\n *\r\n * @readonly\r\n * @return List values\r\n */\r\n get values() {\r\n return this._values;\r\n }\r\n /**\r\n * Checks if list contains specific item reference.\r\n *\r\n * @param item Item to search for\r\n * @return `true` if found, `false` if not found\r\n */\r\n contains(value) {\r\n return this._values.indexOf(value) !== -1;\r\n }\r\n /**\r\n * Removes specific item from the list.\r\n *\r\n * @param item An item to remove\r\n */\r\n removeValue(value) {\r\n let i = 0;\r\n let length = this._values.length;\r\n while (i < length) {\r\n // TODO handle NaN\r\n if (this._values[i] === value) {\r\n this.removeIndex(i);\r\n --length;\r\n }\r\n else {\r\n ++i;\r\n }\r\n }\r\n }\r\n /**\r\n * Searches the list for specific item and returns its index.\r\n *\r\n * @param item An item to search for\r\n * @return Index or -1 if not found\r\n */\r\n indexOf(value) {\r\n return $array.indexOf(this._values, value);\r\n }\r\n /**\r\n * Number of items in list.\r\n *\r\n * @readonly\r\n * @return Number of items\r\n */\r\n get length() {\r\n return this._values.length;\r\n }\r\n /**\r\n * Checks if there's a value at specific index.\r\n *\r\n * @param index Index\r\n * @return Value exists?\r\n */\r\n hasIndex(index) {\r\n return index >= 0 && index < this._values.length;\r\n }\r\n /**\r\n * Returns an item at specified index.\r\n *\r\n * @param index Index\r\n * @return List item\r\n */\r\n getIndex(index) {\r\n return this._values[index];\r\n }\r\n _onPush(newValue) {\r\n if (this.events.isEnabled(\"push\")) {\r\n this.events.dispatch(\"push\", {\r\n type: \"push\",\r\n target: this,\r\n newValue\r\n });\r\n }\r\n }\r\n _onInsertIndex(index, newValue) {\r\n if (this.events.isEnabled(\"insertIndex\")) {\r\n this.events.dispatch(\"insertIndex\", {\r\n type: \"insertIndex\",\r\n target: this,\r\n index,\r\n newValue\r\n });\r\n }\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.events.isEnabled(\"setIndex\")) {\r\n this.events.dispatch(\"setIndex\", {\r\n type: \"setIndex\",\r\n target: this,\r\n index,\r\n oldValue,\r\n newValue\r\n });\r\n }\r\n }\r\n _onRemoveIndex(index, oldValue) {\r\n if (this.events.isEnabled(\"removeIndex\")) {\r\n this.events.dispatch(\"removeIndex\", {\r\n type: \"removeIndex\",\r\n target: this,\r\n index,\r\n oldValue\r\n });\r\n }\r\n }\r\n _onMoveIndex(oldIndex, newIndex, value) {\r\n if (this.events.isEnabled(\"moveIndex\")) {\r\n this.events.dispatch(\"moveIndex\", {\r\n type: \"moveIndex\",\r\n target: this,\r\n oldIndex,\r\n newIndex,\r\n value,\r\n });\r\n }\r\n }\r\n _onClear(oldValues) {\r\n if (this.events.isEnabled(\"clear\")) {\r\n this.events.dispatch(\"clear\", {\r\n type: \"clear\",\r\n target: this,\r\n oldValues\r\n });\r\n }\r\n }\r\n /**\r\n * Sets value at specific index.\r\n *\r\n * If there's already a value at the index, it is overwritten.\r\n *\r\n * @param index Index\r\n * @param value New value\r\n * @return New value\r\n */\r\n setIndex(index, value) {\r\n checkBounds(index, this._values.length);\r\n const oldValue = this._values[index];\r\n // Do nothing if the old value and the new value are the same\r\n if (oldValue !== value) {\r\n this._values[index] = value;\r\n this._onSetIndex(index, oldValue, value);\r\n }\r\n return oldValue;\r\n }\r\n /**\r\n * Adds an item to the list at a specific index, which pushes all the other\r\n * items further down the list.\r\n *\r\n * @param index Index\r\n * @param item An item to add\r\n */\r\n insertIndex(index, value) {\r\n checkBounds(index, this._values.length + 1);\r\n $array.insertIndex(this._values, index, value);\r\n this._onInsertIndex(index, value);\r\n return value;\r\n }\r\n /**\r\n * Swaps indexes of two items in the list.\r\n *\r\n * @param a Item 1\r\n * @param b Item 2\r\n */\r\n swap(a, b) {\r\n const len = this._values.length;\r\n checkBounds(a, len);\r\n checkBounds(b, len);\r\n if (a !== b) {\r\n const value_a = this._values[a];\r\n const value_b = this._values[b];\r\n this._values[a] = value_b;\r\n this._onSetIndex(a, value_a, value_b);\r\n this._values[b] = value_a;\r\n this._onSetIndex(b, value_b, value_a);\r\n }\r\n }\r\n /**\r\n * Removes a value at specific index.\r\n *\r\n * @param index Index of value to remove\r\n * @return Removed value\r\n */\r\n removeIndex(index) {\r\n checkBounds(index, this._values.length);\r\n const oldValue = this._values[index];\r\n $array.removeIndex(this._values, index);\r\n this._onRemoveIndex(index, oldValue);\r\n return oldValue;\r\n }\r\n /**\r\n * Moves an item to a specific index within the list.\r\n *\r\n * If the index is not specified it will move the item to the end of the\r\n * list.\r\n *\r\n * @param value Item to move\r\n * @param index Index to place item at\r\n */\r\n moveValue(value, toIndex) {\r\n // TODO don't do anything if the desired index is the same as the current index\r\n let index = this.indexOf(value);\r\n // TODO remove all old values rather than only the first ?\r\n if (index !== -1) {\r\n $array.removeIndex(this._values, index);\r\n if (toIndex == null) {\r\n const toIndex = this._values.length;\r\n this._values.push(value);\r\n this._onMoveIndex(index, toIndex, value);\r\n }\r\n else {\r\n $array.insertIndex(this._values, toIndex, value);\r\n this._onMoveIndex(index, toIndex, value);\r\n }\r\n }\r\n else if (toIndex == null) {\r\n this._values.push(value);\r\n this._onPush(value);\r\n }\r\n else {\r\n $array.insertIndex(this._values, toIndex, value);\r\n this._onInsertIndex(toIndex, value);\r\n }\r\n return value;\r\n }\r\n /**\r\n * Adds an item to the end of the list.\r\n *\r\n * @param item An item to add\r\n */\r\n push(value) {\r\n this._values.push(value);\r\n this._onPush(value);\r\n return value;\r\n }\r\n /**\r\n * Adds an item as a first item in the list.\r\n *\r\n * @param item An item to add\r\n */\r\n unshift(value) {\r\n this.insertIndex(0, value);\r\n return value;\r\n }\r\n /**\r\n * Adds multiple items to the list.\r\n *\r\n * @param items An Array of items to add\r\n */\r\n pushAll(values) {\r\n $array.each(values, (value) => {\r\n this.push(value);\r\n });\r\n }\r\n /**\r\n * Copies and adds items from abother list.\r\n *\r\n * @param source A list top copy items from\r\n */\r\n copyFrom(source) {\r\n this.pushAll(source._values);\r\n }\r\n /**\r\n * Returns the last item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n pop() {\r\n let index = this._values.length - 1;\r\n return index < 0 ? undefined : this.removeIndex(this._values.length - 1);\r\n }\r\n /**\r\n * Returns the first item from the list, and removes it.\r\n *\r\n * @return Item\r\n */\r\n shift() {\r\n return this._values.length ? this.removeIndex(0) : undefined;\r\n }\r\n /**\r\n * Sets multiple items to the list.\r\n *\r\n * All current items are removed.\r\n *\r\n * @param newArray New items\r\n */\r\n setAll(newArray) {\r\n const old = this._values;\r\n this._values = [];\r\n this._onClear(old);\r\n $array.each(newArray, (value) => {\r\n this._values.push(value);\r\n this._onPush(value);\r\n });\r\n }\r\n /**\r\n * Removes all items from the list.\r\n */\r\n clear() {\r\n this.setAll([]);\r\n }\r\n /**\r\n * Returns an ES6 iterator for the list.\r\n */\r\n *[Symbol.iterator]() {\r\n const length = this._values.length;\r\n for (let i = 0; i < length; ++i) {\r\n yield this._values[i];\r\n }\r\n }\r\n /**\r\n * Calls `f` for each element in the list.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\r\n each(f) {\r\n $array.each(this._values, f);\r\n }\r\n /**\r\n * Calls `f` for each element in the list, from right to left.\r\n *\r\n * `f` should have at least one parameter defined which will get a current\r\n * item, with optional second argument - index.\r\n */\r\n eachReverse(f) {\r\n $array.eachReverse(this._values, f);\r\n }\r\n}\r\n/**\r\n * A version of a [[List]] where the elements are disposed automatically when\r\n * removed from the list, unless `autoDispose` is set to `false`.\r\n */\r\nexport class ListAutoDispose extends List {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Automatically disposes elements that are removed from the list.\r\n *\r\n * @default true\r\n */\r\n Object.defineProperty(this, \"autoDispose\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.autoDispose) {\r\n oldValue.dispose();\r\n }\r\n super._onSetIndex(index, oldValue, newValue);\r\n }\r\n _onRemoveIndex(index, oldValue) {\r\n if (this.autoDispose) {\r\n oldValue.dispose();\r\n }\r\n super._onRemoveIndex(index, oldValue);\r\n }\r\n _onClear(oldValues) {\r\n if (this.autoDispose) {\r\n $array.each(oldValues, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n super._onClear(oldValues);\r\n }\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n if (this.autoDispose) {\r\n $array.each(this._values, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * A version of a [[List]] that is able to create new elements as well as\r\n * apply additional settings to newly created items.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/list-templates/} for more info\r\n */\r\nexport class ListTemplate extends ListAutoDispose {\r\n constructor(template, make) {\r\n super();\r\n Object.defineProperty(this, \"template\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"make\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.template = template;\r\n this.make = make;\r\n }\r\n}\r\n//# sourceMappingURL=List.js.map","import { List } from \"./List\";\r\nimport * as $array from \"./Array\";\r\n/**\r\n * A version of [[List]] to hold children of the [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\r\n */\r\nexport class Children extends List {\r\n constructor(container) {\r\n super();\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_container\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._container = container;\r\n this._events = this.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n $array.each(change.oldValues, (x) => {\r\n this._onRemoved(x);\r\n });\r\n }\r\n else if (change.type === \"push\") {\r\n this._onInserted(change.newValue);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n this._onRemoved(change.oldValue);\r\n this._onInserted(change.newValue, change.index);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n this._onInserted(change.newValue, change.index);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._onRemoved(change.oldValue);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n this._onRemoved(change.value);\r\n this._onInserted(change.value, change.newIndex);\r\n }\r\n else {\r\n throw new Error(\"Unknown IListEvent type\");\r\n }\r\n });\r\n }\r\n _onInserted(child, index) {\r\n child._setParent(this._container, true);\r\n const childrenDisplay = this._container._childrenDisplay;\r\n if (index === undefined) {\r\n childrenDisplay.addChild(child._display);\r\n }\r\n else {\r\n childrenDisplay.addChildAt(child._display, index);\r\n }\r\n }\r\n _onRemoved(child) {\r\n this._container._childrenDisplay.removeChild(child._display);\r\n this._container.markDirtyBounds();\r\n this._container.markDirty();\r\n }\r\n /**\r\n * Returns `true` if obejct is disposed.\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Permanently dispose this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._events.dispose();\r\n $array.each(this.values, (child) => {\r\n child.dispose();\r\n });\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=Children.js.map","import { isNumber } from \"./Type\";\r\n/**\r\n * ============================================================================\r\n * CONSTANTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nexport const PI = Math.PI;\r\nexport const HALFPI = PI / 2;\r\nexport const RADIANS = PI / 180;\r\nexport const DEGREES = 180 / PI;\r\n/**\r\n * Rounds the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @param floor In case value ends with 0.5 and precision is 0, we might need to floor the value instead of ceiling it.\r\n * @return Rounded value\r\n */\r\nexport function round(value, precision, floor) {\r\n if (!isNumber(precision) || precision <= 0) {\r\n let rounded = Math.round(value);\r\n if (floor) {\r\n if (rounded - value == 0.5) {\r\n rounded--;\r\n }\r\n }\r\n return rounded;\r\n }\r\n else {\r\n let d = Math.pow(10, precision);\r\n return Math.round(value * d) / d;\r\n }\r\n}\r\n/**\r\n * Ceils the numeric value to whole number or specific precision of set.\r\n *\r\n * @param value Value\r\n * @param precision Precision (number of decimal points)\r\n * @return Rounded value\r\n */\r\nexport function ceil(value, precision) {\r\n if (!isNumber(precision) || precision <= 0) {\r\n return Math.ceil(value);\r\n }\r\n else {\r\n let d = Math.pow(10, precision);\r\n return Math.ceil(value * d) / d;\r\n }\r\n}\r\n/**\r\n * [getCubicControlPointA description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\r\nexport function getCubicControlPointA(p0, p1, p2, tensionX, tensionY) {\r\n return { x: ((-p0.x + p1.x / tensionX + p2.x) * tensionX), y: ((-p0.y + p1.y / tensionY + p2.y) * tensionY) };\r\n}\r\n/**\r\n * [getCubicControlPointB description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param p0 [description]\r\n * @param p1 [description]\r\n * @param p2 [description]\r\n * @param p3 [description]\r\n * @param tensionX [description]\r\n * @param tensionY [description]\r\n * @return [description]\r\n */\r\nexport function getCubicControlPointB(p1, p2, p3, tensionX, tensionY) {\r\n return { x: ((p1.x + p2.x / tensionX - p3.x) * tensionX), y: ((p1.y + p2.y / tensionY - p3.y) * tensionY) };\r\n}\r\nexport function fitToRange(value, min, max) {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n/**\r\n * Returns sine of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function sin(angle) {\r\n return Math.sin(RADIANS * angle);\r\n}\r\n/**\r\n * Returns tan of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Sine\r\n */\r\nexport function tan(angle) {\r\n return Math.tan(RADIANS * angle);\r\n}\r\n/**\r\n * Returns cosine of an angle specified in degrees.\r\n *\r\n * @param value Value\r\n * @return Cosine\r\n */\r\nexport function cos(angle) {\r\n return Math.cos(RADIANS * angle);\r\n}\r\n// 0 to 360\r\nexport function normalizeAngle(value) {\r\n value = value % 360;\r\n if (value < 0) {\r\n value += 360;\r\n }\r\n return value;\r\n}\r\n// TODO this doesn't work properly for skewing, and it's probably broken for rotation too\r\nexport function getArcBounds(cx, cy, startAngle, endAngle, radius) {\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n let bpoints = [];\r\n bpoints.push(getArcPoint(radius, startAngle));\r\n bpoints.push(getArcPoint(radius, endAngle));\r\n let fromAngle = Math.min(Math.floor(startAngle / 90) * 90, Math.floor(endAngle / 90) * 90);\r\n let toAngle = Math.max(Math.ceil(startAngle / 90) * 90, Math.ceil(endAngle / 90) * 90);\r\n for (let angle = fromAngle; angle <= toAngle; angle += 90) {\r\n if (angle >= startAngle && angle <= endAngle) {\r\n bpoints.push(getArcPoint(radius, angle));\r\n }\r\n }\r\n for (let i = 0; i < bpoints.length; i++) {\r\n let pt = bpoints[i];\r\n if (pt.x < minX) {\r\n minX = pt.x;\r\n }\r\n if (pt.y < minY) {\r\n minY = pt.y;\r\n }\r\n if (pt.x > maxX) {\r\n maxX = pt.x;\r\n }\r\n if (pt.y > maxY) {\r\n maxY = pt.y;\r\n }\r\n }\r\n return ({ left: cx + minX, top: cy + minY, right: cx + maxX, bottom: cy + maxY });\r\n}\r\n/**\r\n * Returns point on arc\r\n *\r\n * @param center point\r\n * @param radius\r\n * @param arc\r\n * @return {boolean}\r\n */\r\nexport function getArcPoint(radius, arc) {\r\n return ({ x: radius * cos(arc), y: radius * sin(arc) });\r\n}\r\nexport function mergeBounds(bounds) {\r\n const len = bounds.length;\r\n if (len > 0) {\r\n let bound = bounds[0];\r\n let left = bound.left;\r\n let top = bound.top;\r\n let right = bound.right;\r\n let bottom = bound.bottom;\r\n if (len > 1) {\r\n for (let i = 1; i < len; i++) {\r\n bound = bounds[i];\r\n left = Math.min(bound.left, left);\r\n right = Math.max(bound.right, right);\r\n top = Math.min(bound.top, top);\r\n bottom = Math.max(bound.bottom, bottom);\r\n }\r\n }\r\n return { left, right, top, bottom };\r\n }\r\n return { left: 0, right: 0, top: 0, bottom: 0 };\r\n}\r\nexport function fitAngleToRange(value, startAngle, endAngle) {\r\n if (startAngle > endAngle) {\r\n let temp = startAngle;\r\n startAngle = endAngle;\r\n endAngle = temp;\r\n }\r\n value = normalizeAngle(value);\r\n let count = (startAngle - normalizeAngle(startAngle)) / 360;\r\n if (value < startAngle) {\r\n value += 360 * (count + 1);\r\n }\r\n let maxEnd = startAngle + (endAngle - startAngle) / 2 + 180;\r\n let maxStart = startAngle + (endAngle - startAngle) / 2 - 180;\r\n if (value > endAngle) {\r\n if (value - 360 > startAngle) {\r\n value -= 360;\r\n }\r\n else {\r\n if (value < maxEnd) {\r\n value = endAngle;\r\n }\r\n else {\r\n value = startAngle;\r\n }\r\n }\r\n }\r\n if (value < startAngle) {\r\n if (value > maxStart) {\r\n value = startAngle;\r\n }\r\n else {\r\n value = endAngle;\r\n }\r\n }\r\n return value;\r\n}\r\nexport function inBounds(point, bounds) {\r\n if (point.x >= bounds.left && point.y >= bounds.top && point.x <= bounds.right && point.y <= bounds.bottom) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport function getAngle(point1, point2) {\r\n if (!point2) {\r\n point2 = { x: point1.x * 2, y: point1.y * 2 };\r\n }\r\n let diffX = point2.x - point1.x;\r\n let diffY = point2.y - point1.y;\r\n let angle = Math.atan2(diffY, diffX) * DEGREES;\r\n if (angle < 0) {\r\n angle += 360;\r\n }\r\n return normalizeAngle(angle);\r\n}\r\n/**\r\n * [getPointOnQuadraticCurve description]\r\n *\r\n * @ignore Exclude from docs\r\n * @todo Description\r\n * @param pointA [description]\r\n * @param pointB [description]\r\n * @param controlPoint [description]\r\n * @param position [description]\r\n * @return [description]\r\n */\r\nexport function getPointOnQuadraticCurve(pointA, pointB, controlPoint, position) {\r\n let x = (1 - position) * (1 - position) * pointA.x + 2 * (1 - position) * position * controlPoint.x + position * position * pointB.x;\r\n let y = (1 - position) * (1 - position) * pointA.y + 2 * (1 - position) * position * controlPoint.y + position * position * pointB.y;\r\n return { x: x, y: y };\r\n}\r\nexport function getPointOnLine(pointA, pointB, position) {\r\n return { x: pointA.x + (pointB.x - pointA.x) * position, y: pointA.y + (pointB.y - pointA.y) * position };\r\n}\r\n/**\r\n * Returns the closest value from the array of values to the reference value.\r\n *\r\n * @param values Array of values\r\n * @param value Reference value\r\n * @return Closes value from the array\r\n */\r\nexport function closest(values, referenceValue) {\r\n return values.reduce(function (prev, curr) {\r\n return (Math.abs(curr - referenceValue) < Math.abs(prev - referenceValue) ? curr : prev);\r\n });\r\n}\r\n/**\r\n * Returns true if bounds overlap\r\n * @param bounds1 IBounds\r\n * @param bounds2 IBounds\r\n * @returns boolean\r\n */\r\nexport function boundsOverlap(bounds1, bounds2) {\r\n const horizontalOverlap = bounds1.left < bounds2.right && bounds1.right > bounds2.left;\r\n const verticalOverlap = bounds1.top < bounds2.bottom && bounds1.bottom > bounds2.top;\r\n return horizontalOverlap && verticalOverlap;\r\n}\r\n/**\r\n * Generates points of a spiral\r\n * @param cx\r\n * @param cy\r\n * @param radius\r\n * @param radiusY\r\n * @param innerRadius\r\n * @param step\r\n * @param radiusStep\r\n * @param startAngle\r\n * @param endAngle\r\n * @returns IPoint[]\r\n */\r\nexport function spiralPoints(cx, cy, radius, radiusY, innerRadius, step, radiusStep, startAngle, endAngle) {\r\n let r = innerRadius + 0.01;\r\n let angle = startAngle * RADIANS;\r\n let points = [];\r\n while (r < radius + radiusStep) {\r\n let stepSize = step;\r\n if (stepSize / 2 > r) {\r\n stepSize = 2 * r;\r\n }\r\n angle += 2 * Math.asin(stepSize / 2 / r);\r\n if (angle * DEGREES > endAngle + ((radius - innerRadius) / radiusStep) * 360) {\r\n break;\r\n }\r\n let degrees = angle * DEGREES;\r\n let point = { x: cx + r * Math.cos(angle), y: cy + r * radiusY / radius * Math.sin(angle) };\r\n points.push(point);\r\n r = innerRadius + degrees / 360 * radiusStep;\r\n }\r\n points.shift();\r\n return points;\r\n}\r\n/**\r\n * Returns true if circles overlap\r\n * @param circle1\r\n * @param circle2\r\n * @returns boolean\r\n */\r\nexport function circlesOverlap(circle1, circle2) {\r\n return Math.hypot(circle1.x - circle2.x, circle1.y - circle2.y) <= circle1.radius + circle2.radius;\r\n}\r\n//# sourceMappingURL=Math.js.map","/**\r\n * A collection of easing functions\r\n *\r\n * Parts of this collection are taken from D3.js library (https://d3js.org/)\r\n */\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $math from \"./Math\";\r\n/**\r\n * The functions below are from D3.js library (https://d3js.org/)\r\n *\r\n * ----------------------------------------------------------------------------\r\n * Copyright 2017 Mike Bostock\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n *\r\n * 1. Redistributions of source code must retain the above copyright notice,\r\n *\tthis list of conditions and the following disclaimer.\r\n *\r\n * 2. Redistributions in binary form must reproduce the above copyright notice,\r\n *\tthis list of conditions and the following disclaimer in the documentation\r\n *\tand/or other materials provided with the distribution.\r\n *\r\n * 3. Neither the name of the copyright holder nor the names of its\r\n *\tcontributors may be used to endorse or promote products derived from this\r\n *\tsoftware without specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\r\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r\n * POSSIBILITY OF SUCH DAMAGE.\r\n * ----------------------------------------------------------------------------\r\n * @hidden\r\n */\r\n/**\r\n */\r\nexport function linear(t) {\r\n return t;\r\n}\r\nexport function quad(t) {\r\n return t * t;\r\n}\r\nexport function cubic(t) {\r\n return t * t * t;\r\n}\r\nexport function pow(t, e) {\r\n return Math.pow(t, e);\r\n}\r\nexport function exp(t) {\r\n return Math.pow(2, 10 * t - 10);\r\n}\r\nexport function sine(t) {\r\n return 1 - Math.cos(t * $math.HALFPI);\r\n}\r\nexport function circle(t) {\r\n return 1 - Math.sqrt(1 - t * t);\r\n}\r\n/**\r\n * ============================================================================\r\n * TRANSFORMERS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n */\r\nexport function yoyo(ease) {\r\n return function (t) {\r\n if (t < 0.5) {\r\n return ease(t * 2.0);\r\n }\r\n else {\r\n return ease((1.0 - t) * 2.0);\r\n }\r\n };\r\n}\r\nexport function out(ease) {\r\n return function (t) {\r\n return 1.0 - ease(1.0 - t);\r\n };\r\n}\r\nexport function inOut(ease) {\r\n return function (t) {\r\n if (t <= 0.5) {\r\n return ease(t * 2.0) / 2.0;\r\n }\r\n else {\r\n return 1.0 - (ease((1.0 - t) * 2.0) / 2.0);\r\n }\r\n };\r\n}\r\n/**\r\n * ============================================================================\r\n * BOUNCE\r\n * ============================================================================\r\n * @hidden\r\n */\r\nlet b1 = 4 / 11, b2 = 6 / 11, b3 = 8 / 11, b4 = 3 / 4, b5 = 9 / 11, b6 = 10 / 11, b7 = 15 / 16, b8 = 21 / 22, b9 = 63 / 64, b0 = 1 / b1 / b1;\r\nexport function bounce(t) {\r\n return 1 - bounceOut(1 - t);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction bounceOut(t) {\r\n t = t;\r\n if (t < b1) {\r\n return b0 * t * t;\r\n }\r\n else if (t < b3) {\r\n return b0 * (t -= b2) * t + b4;\r\n }\r\n else if (t < b6) {\r\n return b0 * (t -= b5) * t + b7;\r\n }\r\n else {\r\n return b0 * (t -= b8) * t + b9;\r\n }\r\n}\r\n/**\r\n * ============================================================================\r\n * ELASTIC\r\n * ============================================================================\r\n * @hidden\r\n */\r\n/**\r\n * @ignore\r\n */\r\nlet tau = 2 * Math.PI;\r\n/**\r\n * @ignore\r\n */\r\nlet amplitude = 1;\r\n/**\r\n * @ignore\r\n */\r\nlet period = 0.3 / tau;\r\n/**\r\n * @ignore\r\n */\r\nlet s = Math.asin(1 / amplitude) * period;\r\nexport function elastic(t) {\r\n let v = t;\r\n return amplitude * Math.pow(2, 10 * --v) * Math.sin((s - v) / period);\r\n}\r\n//# sourceMappingURL=Ease.js.map","import * as $object from \"./Object\";\r\nimport * as $ease from \"./Ease\";\r\n/**\r\n * An object representing a collection of setting values to apply as required.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\r\n */\r\nexport class State {\r\n constructor(entity, settings) {\r\n Object.defineProperty(this, \"_entity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_settings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_userSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n this._entity = entity;\r\n this._settings = settings;\r\n $object.each(settings, (key) => {\r\n this._userSettings[key] = true;\r\n });\r\n }\r\n get(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n this._settings[key] = value;\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key` to be set when the state\r\n * is applied.\r\n *\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._userSettings[key] = true;\r\n this.setRaw(key, value);\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n delete this._userSettings[key];\r\n delete this._settings[key];\r\n }\r\n /**\r\n * Sets multiple settings at once.\r\n *\r\n * `settings` must be an object with key: value pairs.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param settings Settings\r\n */\r\n setAll(settings) {\r\n $object.keys(settings).forEach((key) => {\r\n this.set(key, settings[key]);\r\n });\r\n }\r\n _eachSetting(f) {\r\n $object.each(this._settings, f);\r\n }\r\n /**\r\n * Applies the state to the target element.\r\n *\r\n * All setting values are set immediately.\r\n */\r\n apply() {\r\n const seen = {};\r\n seen[\"stateAnimationEasing\"] = true;\r\n seen[\"stateAnimationDuration\"] = true;\r\n const defaultState = this._entity.states.lookup(\"default\");\r\n this._eachSetting((key, value) => {\r\n if (!seen[key]) {\r\n seen[key] = true;\r\n // save values to default state\r\n if (this !== defaultState) {\r\n if (!(key in defaultState._settings)) {\r\n defaultState._settings[key] = this._entity.get(key);\r\n }\r\n }\r\n this._entity.set(key, value);\r\n }\r\n });\r\n }\r\n /**\r\n * Applies the state to the target element.\r\n *\r\n * Returns an object representing all [[Animation]] objects created for\r\n * each setting key transition.\r\n *\r\n * @return Animations\r\n */\r\n applyAnimate(duration) {\r\n if (duration == null) {\r\n duration = this._settings.stateAnimationDuration;\r\n }\r\n if (duration == null) {\r\n duration = this.get(\"stateAnimationDuration\", this._entity.get(\"stateAnimationDuration\", 0));\r\n }\r\n let easing = this._settings.stateAnimationEasing;\r\n if (easing == null) {\r\n easing = this.get(\"stateAnimationEasing\", this._entity.get(\"stateAnimationEasing\", $ease.cubic));\r\n }\r\n const defaultState = this._entity.states.lookup(\"default\");\r\n const seen = {};\r\n seen[\"stateAnimationEasing\"] = true;\r\n seen[\"stateAnimationDuration\"] = true;\r\n const animations = {};\r\n this._eachSetting((key, value) => {\r\n if (!seen[key]) {\r\n seen[key] = true;\r\n // save values to default state\r\n if (this != defaultState) {\r\n if (!(key in defaultState._settings)) {\r\n defaultState._settings[key] = this._entity.get(key);\r\n }\r\n }\r\n const animation = this._entity.animate({\r\n key: key,\r\n to: value,\r\n duration: duration,\r\n easing: easing\r\n });\r\n if (animation) {\r\n animations[key] = animation;\r\n }\r\n }\r\n });\r\n return animations;\r\n }\r\n}\r\n/**\r\n * Collection of [[State]] objects for an element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/states/} for more info\r\n */\r\nexport class States {\r\n constructor(entity) {\r\n Object.defineProperty(this, \"_states\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_entity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._entity = entity;\r\n }\r\n /**\r\n * Checks if a state by `name` exists. Returns it there is one.\r\n *\r\n * @param name State name\r\n * @return State\r\n */\r\n lookup(name) {\r\n return this._states[name];\r\n }\r\n /**\r\n * Sets supplied `settings` on a state by the `name`.\r\n *\r\n * If such state does not yet exists, it is created.\r\n *\r\n * @param name State name\r\n * @param settings Settings\r\n * @return New State\r\n */\r\n create(name, settings) {\r\n const state = this._states[name];\r\n if (state) {\r\n state.setAll(settings);\r\n return state;\r\n }\r\n else {\r\n const state = new State(this._entity, settings);\r\n this._states[name] = state;\r\n return state;\r\n }\r\n }\r\n /**\r\n * Removes the state called `name`.\r\n *\r\n * @param name State name\r\n */\r\n remove(name) {\r\n delete this._states[name];\r\n }\r\n /**\r\n * Applies a named state to the target element.\r\n *\r\n * @param newState State name\r\n */\r\n apply(newState) {\r\n const state = this._states[newState];\r\n if (state) {\r\n state.apply();\r\n }\r\n this._entity._applyState(newState);\r\n }\r\n /**\r\n * Applies a named state to the element.\r\n *\r\n * Returns an object representing all [[Animation]] objects created for\r\n * each setting key transition.\r\n *\r\n * @param newState State name\r\n * @return Animations\r\n */\r\n applyAnimate(newState, duration) {\r\n let animations;\r\n const state = this._states[newState];\r\n if (state) {\r\n animations = state.applyAnimate(duration);\r\n }\r\n this._entity._applyStateAnimated(newState, duration);\r\n return animations;\r\n }\r\n}\r\n//# sourceMappingURL=States.js.map","/**\r\n * @ignore\r\n */\r\nexport class Registry {\r\n constructor() {\r\n /**\r\n * Currently running version of amCharts.\r\n */\r\n Object.defineProperty(this, \"version\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"5.10.4\"\r\n });\r\n /**\r\n * List of applied licenses.\r\n * @ignore\r\n */\r\n Object.defineProperty(this, \"licenses\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n /**\r\n * Entities that have their `id` setting set.\r\n */\r\n Object.defineProperty(this, \"entitiesById\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n /**\r\n * All created [[Root]] elements.\r\n */\r\n Object.defineProperty(this, \"rootElements\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport const registry = new Registry();\r\n/**\r\n * Adds a license, e.g.:\r\n *\r\n * ```TypeScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n * ```JavaScript\r\n * am5.addLicense(\"xxxxxxxx\");\r\n * ```\r\n *\r\n * Multiple licenses can be added to cover for multiple products.\r\n *\r\n * @param license License key\r\n */\r\nexport function addLicense(license) {\r\n registry.licenses.push(license);\r\n}\r\n/**\r\n * Disposes all [[Root]] elements.\r\n */\r\nexport function disposeAllRootElements() {\r\n let root;\r\n while (root = registry.rootElements.pop()) {\r\n root.dispose();\r\n }\r\n}\r\n/**\r\n * Finds and returns a `Root` element assigned to a container with `id`.\r\n *\r\n * @param id Container ID\r\n * @return Root\r\n * @since 5.9.2\r\n */\r\nexport function getRootById(id) {\r\n let found;\r\n registry.rootElements.forEach((item) => {\r\n if (item.dom.id == id) {\r\n found = item;\r\n }\r\n });\r\n return found;\r\n}\r\n//# sourceMappingURL=Registry.js.map","/**\r\n * @ignore\r\n */\r\nexport function compare(left, right) {\r\n if (left === right) {\r\n return 0;\r\n }\r\n else if (left < right) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function compareArray(left, right, f) {\r\n const leftLength = left.length;\r\n const rightLength = right.length;\r\n const length = Math.min(leftLength, rightLength);\r\n for (let i = 0; i < length; ++i) {\r\n const order = f(left[i], right[i]);\r\n if (order !== 0) {\r\n return order;\r\n }\r\n }\r\n return compare(leftLength, rightLength);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function reverse(order) {\r\n if (order < 0) {\r\n return 1;\r\n }\r\n else if (order > 0) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function compareNumber(a, b) {\r\n if (a === b) {\r\n return 0;\r\n }\r\n else if (a < b) {\r\n return -1;\r\n }\r\n else {\r\n return 1;\r\n }\r\n}\r\n//# sourceMappingURL=Order.js.map","import { Disposer } from \"./Disposer\";\r\nimport { EventDispatcher } from \"./EventDispatcher\";\r\nimport { AnimationState, getInterpolate } from \"./Animation\";\r\nimport { States } from \"./States\";\r\nimport { registry } from \"../Registry\";\r\nimport * as $object from \"./Object\";\r\nimport * as $ease from \"./Ease\";\r\nimport * as $array from \"./Array\";\r\nimport * as $order from \"./Order\";\r\n/**\r\n * Allows to dynamically modify setting value of its target element.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\r\n */\r\nexport class Adapters {\r\n constructor(entity) {\r\n Object.defineProperty(this, \"_entity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_callbacks\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_disabled\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n this._entity = entity;\r\n }\r\n /**\r\n * Add a function (`callback`) that will modify value for setting `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/adapters/} for more info\r\n */\r\n add(key, callback) {\r\n let callbacks = this._callbacks[key];\r\n if (callbacks === undefined) {\r\n callbacks = this._callbacks[key] = [];\r\n }\r\n callbacks.push(callback);\r\n this._entity._markDirtyKey(key);\r\n return new Disposer(() => {\r\n if ($array.removeFirst(callbacks, callback)) {\r\n this._entity._markDirtyKey(key);\r\n }\r\n });\r\n }\r\n /**\r\n * Removes all adapters for the specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n remove(key) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n delete this._callbacks[key];\r\n if (callbacks.length !== 0) {\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n }\r\n /**\r\n * Enables (previously disabled) adapters for specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n enable(key) {\r\n if (this._disabled[key]) {\r\n delete this._disabled[key];\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n /**\r\n * Disables all adapters for specific key.\r\n *\r\n * @since 5.1.0\r\n */\r\n disable(key) {\r\n if (!this._disabled[key]) {\r\n this._disabled[key] = true;\r\n this._entity._markDirtyKey(key);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n fold(key, value) {\r\n if (!this._disabled[key]) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n for (let i = 0, len = callbacks.length; i < len; ++i) {\r\n value = callbacks[i](value, this._entity, key);\r\n }\r\n }\r\n }\r\n return value;\r\n }\r\n}\r\n/**\r\n * Animation object.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/} for more info\r\n */\r\nexport class Animation {\r\n constructor(animation, from, to, duration, easing, loops, startingTime) {\r\n Object.defineProperty(this, \"_animation\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_from\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_to\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_duration\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_easing\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_loops\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_interpolate\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_oldTime\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_time\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_stopped\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_playing\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new EventDispatcher()\r\n });\r\n this._animation = animation;\r\n this._from = from;\r\n this._to = to;\r\n this._duration = duration;\r\n this._easing = easing;\r\n this._loops = loops;\r\n this._interpolate = getInterpolate(from, to);\r\n this._oldTime = startingTime;\r\n }\r\n get to() {\r\n return this._to;\r\n }\r\n get from() {\r\n return this._from;\r\n }\r\n get playing() {\r\n return this._playing;\r\n }\r\n get stopped() {\r\n return this._stopped;\r\n }\r\n stop() {\r\n if (!this._stopped) {\r\n this._stopped = true;\r\n this._playing = false;\r\n if (this.events.isEnabled(\"stopped\")) {\r\n this.events.dispatch(\"stopped\", {\r\n type: \"stopped\",\r\n target: this,\r\n });\r\n }\r\n }\r\n }\r\n pause() {\r\n this._playing = false;\r\n this._oldTime = null;\r\n }\r\n play() {\r\n if (!this._stopped && !this._playing) {\r\n this._playing = true;\r\n this._animation._startAnimation();\r\n }\r\n }\r\n get percentage() {\r\n return this._time / this._duration;\r\n }\r\n waitForStop() {\r\n return new Promise((resolve, _reject) => {\r\n if (this._stopped) {\r\n resolve();\r\n }\r\n else {\r\n const listener = () => {\r\n stopped.dispose();\r\n resolve();\r\n };\r\n const stopped = this.events.on(\"stopped\", listener);\r\n }\r\n });\r\n }\r\n _checkEnded() {\r\n if (this._loops > 1) {\r\n --this._loops;\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n _run(currentTime) {\r\n if (this._oldTime !== null) {\r\n this._time += currentTime - this._oldTime;\r\n if (this._time > this._duration) {\r\n this._time = this._duration;\r\n }\r\n }\r\n this._oldTime = currentTime;\r\n }\r\n _reset(currentTime) {\r\n this._oldTime = currentTime;\r\n this._time = 0;\r\n }\r\n _value(diff) {\r\n return this._interpolate(this._easing(diff), this._from, this._to);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nlet counter = 0;\r\n/**\r\n * Base class for [[Entity]] objects that support Settings.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n */\r\nexport class Settings {\r\n constructor(settings) {\r\n /**\r\n * Unique ID.\r\n */\r\n Object.defineProperty(this, \"uid\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: ++counter\r\n });\r\n Object.defineProperty(this, \"_settings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_privateSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_settingEvents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_privateSettingEvents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_prevSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_prevPrivateSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_animatingSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_animatingPrivateSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n // TODO move this into Entity\r\n Object.defineProperty(this, \"_userProperties\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n this._settings = settings;\r\n }\r\n _checkDirty() {\r\n $object.keys(this._settings).forEach((key) => {\r\n this._userProperties[key] = true;\r\n this._markDirtyKey(key);\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n resetUserSettings() {\r\n this._userProperties = {};\r\n }\r\n _runAnimation(currentTime) {\r\n let state = AnimationState.Stopped;\r\n if (!this.isDisposed()) {\r\n let playing = false;\r\n let paused = false;\r\n $object.each(this._animatingSettings, (key, animation) => {\r\n if (animation.stopped) {\r\n this._stopAnimation(key);\r\n }\r\n else if (animation.playing) {\r\n animation._run(currentTime);\r\n const diff = animation.percentage;\r\n if (diff >= 1) {\r\n if (animation._checkEnded()) {\r\n this.set(key, animation._value(1));\r\n }\r\n else {\r\n playing = true;\r\n animation._reset(currentTime);\r\n this._set(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n playing = true;\r\n this._set(key, animation._value(diff));\r\n }\r\n }\r\n else {\r\n paused = true;\r\n }\r\n });\r\n $object.each(this._animatingPrivateSettings, (key, animation) => {\r\n if (animation.stopped) {\r\n this._stopAnimationPrivate(key);\r\n }\r\n else if (animation.playing) {\r\n animation._run(currentTime);\r\n const diff = animation.percentage;\r\n if (diff >= 1) {\r\n if (animation._checkEnded()) {\r\n this.setPrivate(key, animation._value(1));\r\n }\r\n else {\r\n playing = true;\r\n animation._reset(currentTime);\r\n this._setPrivate(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n playing = true;\r\n this._setPrivate(key, animation._value(diff));\r\n }\r\n }\r\n else {\r\n paused = true;\r\n }\r\n });\r\n if (playing) {\r\n state = AnimationState.Playing;\r\n }\r\n else if (paused) {\r\n state = AnimationState.Paused;\r\n }\r\n }\r\n return state;\r\n }\r\n _markDirtyKey(_key) {\r\n this.markDirty();\r\n }\r\n _markDirtyPrivateKey(_key) {\r\n this.markDirty();\r\n }\r\n /**\r\n * Sets a callback function to invoke when specific key of settings changes\r\n * or is set.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Settings key\r\n * @param callback Callback\r\n * @return Disposer for event\r\n */\r\n on(key, callback) {\r\n let events = this._settingEvents[key];\r\n if (events === undefined) {\r\n events = this._settingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._settingEvents[key];\r\n }\r\n });\r\n }\r\n /**\r\n * Removes a callback for when value of a setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @since 5.9.2\r\n */\r\n off(key, callback) {\r\n let events = this._settingEvents[key];\r\n if (events !== undefined && callback !== undefined) {\r\n $array.removeFirst(events, callback);\r\n }\r\n else {\r\n delete this._settingEvents[key];\r\n }\r\n }\r\n /**\r\n * Sets a callback function to invoke when specific key of private settings\r\n * changes or is set.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @return Disposer for event\r\n */\r\n onPrivate(key, callback) {\r\n let events = this._privateSettingEvents[key];\r\n if (events === undefined) {\r\n events = this._privateSettingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._privateSettingEvents[key];\r\n }\r\n });\r\n }\r\n /**\r\n * Removes a callback for when value of a private setting changes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/#Settings_value_change} for more info\r\n * @param key Private settings key\r\n * @param callback Callback\r\n * @since 5.9.2\r\n */\r\n offPrivate(key, callback) {\r\n let events = this._privateSettingEvents[key];\r\n if (events !== undefined && callback !== undefined) {\r\n $array.removeFirst(events, callback);\r\n }\r\n else {\r\n delete this._privateSettingEvents[key];\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getRaw(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * Returns `true` if the setting exists.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Settings key\r\n * @return {boolean} Key exists\r\n */\r\n has(key) {\r\n return key in this._settings;\r\n }\r\n get(key, fallback) {\r\n return this.getRaw(key, fallback);\r\n }\r\n _sendKeyEvent(key, value) {\r\n const events = this._settingEvents[key];\r\n if (events !== undefined) {\r\n $array.each(events, (callback) => {\r\n callback(value, this, key);\r\n });\r\n }\r\n }\r\n _sendPrivateKeyEvent(key, value) {\r\n const events = this._privateSettingEvents[key];\r\n if (events !== undefined) {\r\n $array.each(events, (callback) => {\r\n callback(value, this, key);\r\n });\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setRaw(key, old, value) {\r\n this._prevSettings[key] = old;\r\n this._sendKeyEvent(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n const old = this._settings[key];\r\n this._settings[key] = value;\r\n if (old !== value) {\r\n this._setRaw(key, old, value);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _set(key, value) {\r\n const old = this._settings[key];\r\n this._settings[key] = value;\r\n if (old !== value) {\r\n this._setRaw(key, old, value);\r\n this._markDirtyKey(key);\r\n }\r\n }\r\n _stopAnimation(key) {\r\n const animation = this._animatingSettings[key];\r\n if (animation) {\r\n delete this._animatingSettings[key];\r\n animation.stop();\r\n }\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key`, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._set(key, value);\r\n this._stopAnimation(key);\r\n return value;\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`;\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n if (key in this._settings) {\r\n this._prevSettings[key] = this._settings[key];\r\n delete this._settings[key];\r\n this._sendKeyEvent(key, undefined);\r\n this._markDirtyKey(key);\r\n }\r\n this._stopAnimation(key);\r\n }\r\n /**\r\n * Removes all keys;\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n */\r\n removeAll() {\r\n $array.each($object.keys(this._settings), (key) => {\r\n this.remove(key);\r\n });\r\n }\r\n /**\r\n * Returns a value of a private setting.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/#Private_settings} for more info\r\n */\r\n getPrivate(key, fallback) {\r\n const value = this._privateSettings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setPrivateRaw(key, old, value) {\r\n this._prevPrivateSettings[key] = old;\r\n this._sendPrivateKeyEvent(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivateRaw(key, value) {\r\n const old = this._privateSettings[key];\r\n this._privateSettings[key] = value;\r\n if (old !== value) {\r\n this._setPrivateRaw(key, old, value);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _setPrivate(key, value) {\r\n const old = this._privateSettings[key];\r\n this._privateSettings[key] = value;\r\n if (old !== value) {\r\n this._setPrivateRaw(key, old, value);\r\n this._markDirtyPrivateKey(key);\r\n }\r\n }\r\n _stopAnimationPrivate(key) {\r\n const animation = this._animatingPrivateSettings[key];\r\n if (animation) {\r\n animation.stop();\r\n delete this._animatingPrivateSettings[key];\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivate(key, value) {\r\n this._setPrivate(key, value);\r\n this._stopAnimationPrivate(key);\r\n return value;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removePrivate(key) {\r\n if (key in this._privateSettings) {\r\n this._prevPrivateSettings[key] = this._privateSettings[key];\r\n delete this._privateSettings[key];\r\n this._markDirtyPrivateKey(key);\r\n }\r\n this._stopAnimationPrivate(key);\r\n }\r\n /**\r\n * Sets multiple settings at once.\r\n *\r\n * `settings` must be an object with key: value pairs.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param settings Settings\r\n */\r\n setAll(settings) {\r\n $object.each(settings, (key, value) => {\r\n this.set(key, value);\r\n });\r\n }\r\n /**\r\n * Animates setting values from current/start values to new ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/animations/#Animating_settings} for more info\r\n * @param options Animation options\r\n * @return Animation object\r\n */\r\n animate(options) {\r\n const key = options.key;\r\n const to = options.to;\r\n const duration = options.duration || 0;\r\n const loops = options.loops || 1;\r\n const from = (options.from === undefined ? this.get(key) : options.from);\r\n const easing = (options.easing === undefined ? $ease.linear : options.easing);\r\n if (duration === 0) {\r\n this.set(key, to);\r\n }\r\n else {\r\n if (from === undefined || from === to) {\r\n this.set(key, to);\r\n }\r\n else {\r\n this.set(key, from);\r\n const animation = this._animatingSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\r\n this._startAnimation();\r\n return animation;\r\n }\r\n }\r\n const animation = new Animation(this, from, to, duration, easing, loops, null);\r\n animation.stop();\r\n return animation;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n animatePrivate(options) {\r\n const key = options.key;\r\n const to = options.to;\r\n const duration = options.duration || 0;\r\n const loops = options.loops || 1;\r\n const from = (options.from === undefined ? this.getPrivate(key) : options.from);\r\n const easing = (options.easing === undefined ? $ease.linear : options.easing);\r\n if (duration === 0) {\r\n this.setPrivate(key, to);\r\n }\r\n else {\r\n if (from === undefined || from === to) {\r\n this.setPrivate(key, to);\r\n }\r\n else {\r\n this.setPrivate(key, from);\r\n const animation = this._animatingPrivateSettings[key] = new Animation(this, from, to, duration, easing, loops, this._animationTime());\r\n this._startAnimation();\r\n return animation;\r\n }\r\n }\r\n const animation = new Animation(this, from, to, duration, easing, loops, null);\r\n animation.stop();\r\n return animation;\r\n }\r\n _dispose() { }\r\n /**\r\n * Returns `true` if this element is disposed.\r\n *\r\n * @return Disposed\r\n */\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n /**\r\n * Disposes this object.\r\n */\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._dispose();\r\n }\r\n }\r\n}\r\n/**\r\n * Base class.\r\n *\r\n * @important\r\n */\r\nexport class Entity extends Settings {\r\n /**\r\n * IMPORTANT! Do not instantiate this class via `new Class()` syntax.\r\n *\r\n * Use static method `Class.new()` instead.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @ignore\r\n */\r\n constructor(root, settings, isReal, templates = []) {\r\n super(settings);\r\n Object.defineProperty(this, \"_root\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_user_id\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n }); // for testing purposes\r\n Object.defineProperty(this, \"states\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new States(this)\r\n });\r\n Object.defineProperty(this, \"adapters\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Adapters(this)\r\n });\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._createEvents()\r\n });\r\n Object.defineProperty(this, \"_userPrivateProperties\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dirtyPrivate\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_template\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n // Templates for the themes\r\n Object.defineProperty(this, \"_templates\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n // Internal templates which can be overridden by the user's templates\r\n Object.defineProperty(this, \"_internalTemplates\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n // Default themes which can be overridden by the user's themes\r\n Object.defineProperty(this, \"_defaultThemes\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n // Disposers for all of the templates\r\n Object.defineProperty(this, \"_templateDisposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_disposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n // Whether the template setup function should be run\r\n Object.defineProperty(this, \"_runSetup\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_disposerProperties\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this._root = root;\r\n this._internalTemplates = templates;\r\n if (settings.id) {\r\n this._registerId(settings.id);\r\n }\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(root, settings, template) {\r\n const x = (new this(root, settings, true));\r\n x._template = template;\r\n x._afterNew();\r\n return x;\r\n }\r\n static _new(root, settings, templates = []) {\r\n const x = (new this(root, settings, true, templates));\r\n x._afterNew();\r\n return x;\r\n }\r\n _afterNew() {\r\n this._checkDirty();\r\n let shouldApply = false;\r\n const template = this._template;\r\n if (template) {\r\n shouldApply = true;\r\n template._setObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n shouldApply = true;\r\n template._setObjectTemplate(this);\r\n });\r\n if (shouldApply) {\r\n this._applyTemplates(false);\r\n }\r\n this.states.create(\"default\", {});\r\n this._setDefaults();\r\n }\r\n // This is the same as _afterNew, except it also applies the themes.\r\n // This should only be used for classes which don't have a parent (because they extend from Entity and not Sprite).\r\n _afterNewApplyThemes() {\r\n this._checkDirty();\r\n const template = this._template;\r\n if (template) {\r\n template._setObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n template._setObjectTemplate(this);\r\n });\r\n this.states.create(\"default\", {});\r\n this._setDefaults();\r\n this._applyThemes();\r\n }\r\n _createEvents() {\r\n return new EventDispatcher();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get classNames() {\r\n return this.constructor.classNames;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get className() {\r\n return this.constructor.className;\r\n }\r\n _setDefaults() {\r\n }\r\n _setDefaultFn(key, f) {\r\n const value = this.get(key);\r\n if (value) {\r\n return value;\r\n }\r\n else {\r\n const value = f();\r\n this.set(key, value);\r\n return value;\r\n }\r\n }\r\n _setDefault(key, value) {\r\n if (!this.has(key)) {\r\n super.set(key, value);\r\n }\r\n }\r\n _setRawDefault(key, value) {\r\n if (!this.has(key)) {\r\n super.setRaw(key, value);\r\n }\r\n }\r\n _clearDirty() {\r\n $object.keys(this._dirty).forEach((key) => {\r\n this._dirty[key] = false;\r\n });\r\n $object.keys(this._dirtyPrivate).forEach((key) => {\r\n this._dirtyPrivate[key] = false;\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isDirty(key) {\r\n return !!this._dirty[key];\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isPrivateDirty(key) {\r\n return !!this._dirtyPrivate[key];\r\n }\r\n _markDirtyKey(key) {\r\n this._dirty[key] = true;\r\n super._markDirtyKey(key);\r\n }\r\n _markDirtyPrivateKey(key) {\r\n this._dirtyPrivate[key] = true;\r\n super._markDirtyKey(key);\r\n }\r\n /**\r\n * Checks if element is of certain class (or inherits one).\r\n *\r\n * @param type Class name to check\r\n * @return {boolean} Is of class?\r\n */\r\n isType(type) {\r\n return this.classNames.indexOf(type) !== -1;\r\n }\r\n _pushPropertyDisposer(key, disposer) {\r\n let disposers = this._disposerProperties[key];\r\n if (disposers === undefined) {\r\n disposers = this._disposerProperties[key] = [];\r\n }\r\n disposers.push(disposer);\r\n return disposer;\r\n }\r\n _disposeProperty(key) {\r\n const disposers = this._disposerProperties[key];\r\n if (disposers !== undefined) {\r\n $array.each(disposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n delete this._disposerProperties[key];\r\n }\r\n }\r\n /**\r\n * @todo needs description\r\n * @param value Template\r\n */\r\n set template(value) {\r\n const template = this._template;\r\n if (template !== value) {\r\n this._template = value;\r\n if (template) {\r\n template._removeObjectTemplate(this);\r\n }\r\n if (value) {\r\n value._setObjectTemplate(this);\r\n }\r\n this._applyTemplates();\r\n }\r\n }\r\n get template() {\r\n return this._template;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n this._root._addDirtyEntity(this);\r\n }\r\n _startAnimation() {\r\n this._root._addAnimation(this);\r\n }\r\n _animationTime() {\r\n return this._root.animationTime;\r\n }\r\n _applyState(_name) { }\r\n _applyStateAnimated(_name, _duration) { }\r\n get(key, fallback) {\r\n const value = this.adapters.fold(key, this._settings[key]);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n isUserSetting(key) {\r\n return this._userProperties[key] || false;\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key`, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n set(key, value) {\r\n this._userProperties[key] = true;\r\n return super.set(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setRaw(key, value) {\r\n this._userProperties[key] = true;\r\n super.setRaw(key, value);\r\n }\r\n /**\r\n * Sets a setting `value` for the specified `key` only if the value for this key was not set previously using set method, and returns the same `value`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n * @param value Setting value\r\n * @return Setting value\r\n */\r\n _setSoft(key, value) {\r\n if (!this._userProperties[key]) {\r\n return super.set(key, value);\r\n }\r\n return value;\r\n }\r\n /**\r\n * Removes a setting value for the specified `key`.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/settings/} for more info\r\n * @param key Setting key\r\n */\r\n remove(key) {\r\n delete this._userProperties[key];\r\n this._removeTemplateProperty(key);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivate(key, value) {\r\n this._userPrivateProperties[key] = true;\r\n return super.setPrivate(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n setPrivateRaw(key, value) {\r\n this._userPrivateProperties[key] = true;\r\n super.setPrivateRaw(key, value);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removePrivate(key) {\r\n delete this._userPrivateProperties[key];\r\n this._removeTemplatePrivateProperty(key);\r\n }\r\n _setTemplateProperty(template, key, value) {\r\n if (!this._userProperties[key]) {\r\n const match = this._findTemplateByKey(key);\r\n if (template === match) {\r\n super.set(key, value);\r\n }\r\n }\r\n }\r\n _setTemplatePrivateProperty(template, key, value) {\r\n if (!this._userPrivateProperties[key]) {\r\n const match = this._findTemplateByPrivateKey(key);\r\n if (template === match) {\r\n super.setPrivate(key, value);\r\n }\r\n }\r\n }\r\n _removeTemplateProperty(key) {\r\n if (!this._userProperties[key]) {\r\n const match = this._findTemplateByKey(key);\r\n if (match) {\r\n // TODO don't stop the animation if the property didn't change\r\n super.set(key, match._settings[key]);\r\n }\r\n else {\r\n super.remove(key);\r\n }\r\n }\r\n }\r\n _removeTemplatePrivateProperty(key) {\r\n if (!this._userPrivateProperties[key]) {\r\n const match = this._findTemplateByPrivateKey(key);\r\n if (match) {\r\n // TODO don't stop the animation if the property didn't change\r\n super.setPrivate(key, match._privateSettings[key]);\r\n }\r\n else {\r\n super.removePrivate(key);\r\n }\r\n }\r\n }\r\n _walkParents(f) {\r\n f(this._root._rootContainer);\r\n f(this);\r\n }\r\n // TODO faster version of this method which is specialized to just 1 key\r\n _applyStateByKey(name) {\r\n const other = this.states.create(name, {});\r\n const seen = {};\r\n this._eachTemplate((template) => {\r\n const state = template.states.lookup(name);\r\n if (state) {\r\n state._apply(other, seen);\r\n }\r\n });\r\n $object.each(other._settings, (key) => {\r\n if (!seen[key] && !other._userSettings[key]) {\r\n other.remove(key);\r\n }\r\n });\r\n }\r\n _applyTemplate(template, state) {\r\n this._templateDisposers.push(template._apply(this, state));\r\n $object.each(template._settings, (key, value) => {\r\n if (!state.settings[key] && !this._userProperties[key]) {\r\n state.settings[key] = true;\r\n super.set(key, value);\r\n }\r\n });\r\n $object.each(template._privateSettings, (key, value) => {\r\n if (!state.privateSettings[key] && !this._userPrivateProperties[key]) {\r\n state.privateSettings[key] = true;\r\n super.setPrivate(key, value);\r\n }\r\n });\r\n if (this._runSetup && template.setup) {\r\n this._runSetup = false;\r\n template.setup(this);\r\n }\r\n }\r\n /**\r\n * Calls the closure with each template and returns the first template which is true\r\n */\r\n _findStaticTemplate(f) {\r\n if (this._template) {\r\n if (f(this._template)) {\r\n return this._template;\r\n }\r\n }\r\n }\r\n _eachTemplate(f) {\r\n this._findStaticTemplate((template) => {\r\n f(template);\r\n return false;\r\n });\r\n // _internalTemplates is sorted with most specific to the right\r\n $array.eachReverse(this._internalTemplates, f);\r\n // _templates is sorted with most specific to the left\r\n $array.each(this._templates, f);\r\n }\r\n _applyTemplates(remove = true) {\r\n if (remove) {\r\n this._disposeTemplates();\r\n }\r\n const state = {\r\n settings: {},\r\n privateSettings: {},\r\n states: {},\r\n };\r\n this._eachTemplate((template) => {\r\n this._applyTemplate(template, state);\r\n });\r\n if (remove) {\r\n $object.each(this._settings, (key) => {\r\n if (!this._userProperties[key] && !state.settings[key]) {\r\n super.remove(key);\r\n }\r\n });\r\n $object.each(this._privateSettings, (key) => {\r\n if (!this._userPrivateProperties[key] && !state.privateSettings[key]) {\r\n super.removePrivate(key);\r\n }\r\n });\r\n }\r\n }\r\n _findTemplate(f) {\r\n const value = this._findStaticTemplate(f);\r\n if (value === undefined) {\r\n // _internalTemplates is sorted with most specific to the right\r\n const value = $array.findReverse(this._internalTemplates, f);\r\n if (value === undefined) {\r\n // _templates is sorted with most specific to the left\r\n return $array.find(this._templates, f);\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n _findTemplateByKey(key) {\r\n return this._findTemplate((template) => {\r\n return key in template._settings;\r\n });\r\n }\r\n _findTemplateByPrivateKey(key) {\r\n return this._findTemplate((template) => {\r\n return key in template._privateSettings;\r\n });\r\n }\r\n _disposeTemplates() {\r\n $array.each(this._templateDisposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n this._templateDisposers.length = 0;\r\n }\r\n _removeTemplates() {\r\n $array.each(this._templates, (template) => {\r\n template._removeObjectTemplate(this);\r\n });\r\n this._templates.length = 0;\r\n }\r\n _applyThemes(force = false) {\r\n let isConnected = false;\r\n const defaults = [];\r\n let themes = [];\r\n const themeTags = new Set();\r\n const tags = this.get(\"themeTagsSelf\");\r\n if (tags) {\r\n $array.each(tags, (tag) => {\r\n themeTags.add(tag);\r\n });\r\n }\r\n this._walkParents((entity) => {\r\n if (entity === this._root._rootContainer) {\r\n isConnected = true;\r\n }\r\n if (entity._defaultThemes.length > 0) {\r\n defaults.push(entity._defaultThemes);\r\n }\r\n const theme = entity.get(\"themes\");\r\n if (theme) {\r\n themes.push(theme);\r\n }\r\n const tags = entity.get(\"themeTags\");\r\n if (tags) {\r\n $array.each(tags, (tag) => {\r\n themeTags.add(tag);\r\n });\r\n }\r\n });\r\n themes = defaults.concat(themes);\r\n this._removeTemplates();\r\n if (isConnected || force) {\r\n $array.eachReverse(this.classNames, (name) => {\r\n const allRules = [];\r\n $array.each(themes, (themes) => {\r\n $array.each(themes, (theme) => {\r\n const rules = theme._lookupRules(name);\r\n if (rules) {\r\n $array.eachReverse(rules, (rule) => {\r\n const matches = rule.tags.every((tag) => {\r\n return themeTags.has(tag);\r\n });\r\n if (matches) {\r\n const result = $array.getFirstSortedIndex(allRules, (x) => {\r\n const order = $order.compare(rule.tags.length, x.tags.length);\r\n if (order === 0) {\r\n return $order.compareArray(rule.tags, x.tags, $order.compare);\r\n }\r\n else {\r\n return order;\r\n }\r\n });\r\n allRules.splice(result.index, 0, rule);\r\n }\r\n });\r\n }\r\n });\r\n });\r\n $array.each(allRules, (rule) => {\r\n this._templates.push(rule.template);\r\n rule.template._setObjectTemplate(this);\r\n });\r\n });\r\n }\r\n this._applyTemplates();\r\n if (isConnected || force) {\r\n // This causes it to only run the setup function the first time that the themes are applied\r\n this._runSetup = false;\r\n }\r\n return isConnected || force;\r\n }\r\n _changed() { }\r\n _beforeChanged() {\r\n if (this.isDirty(\"id\")) {\r\n const id = this.get(\"id\");\r\n if (id) {\r\n this._registerId(id);\r\n }\r\n const prevId = this._prevSettings.id;\r\n if (prevId) {\r\n delete registry.entitiesById[prevId];\r\n }\r\n }\r\n }\r\n _registerId(id) {\r\n if (registry.entitiesById[id] && registry.entitiesById[id] !== this) {\r\n throw new Error(\"An entity with id \\\"\" + id + \"\\\" already exists.\");\r\n }\r\n registry.entitiesById[id] = this;\r\n }\r\n _afterChanged() { }\r\n /**\r\n * @ignore\r\n */\r\n addDisposer(disposer) {\r\n this._disposers.push(disposer);\r\n return disposer;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n const template = this._template;\r\n if (template) {\r\n template._removeObjectTemplate(this);\r\n }\r\n $array.each(this._internalTemplates, (template) => {\r\n template._removeObjectTemplate(this);\r\n });\r\n this._removeTemplates();\r\n this._disposeTemplates();\r\n this.events.dispose();\r\n this._disposers.forEach((x) => {\r\n x.dispose();\r\n });\r\n $object.each(this._disposerProperties, (_, disposers) => {\r\n $array.each(disposers, (disposer) => {\r\n disposer.dispose();\r\n });\r\n });\r\n const id = this.get(\"id\");\r\n if (id) {\r\n delete registry.entitiesById[id];\r\n }\r\n }\r\n /**\r\n * Creates and returns a \"disposable\" timeout.\r\n *\r\n * @param fn Callback\r\n * @param delay Delay in milliseconds\r\n * @return Timeout disposer\r\n */\r\n setTimeout(fn, delay) {\r\n const id = setTimeout(() => {\r\n this.removeDispose(disposer);\r\n fn();\r\n }, delay);\r\n const disposer = new Disposer(() => {\r\n clearTimeout(id);\r\n });\r\n this._disposers.push(disposer);\r\n return disposer;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removeDispose(target) {\r\n if (!this.isDisposed()) {\r\n let index = $array.indexOf(this._disposers, target);\r\n if (index > -1) {\r\n this._disposers.splice(index, 1);\r\n }\r\n }\r\n target.dispose();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n hasTag(tag) {\r\n return $array.indexOf(this.get(\"themeTags\", []), tag) !== -1;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n addTag(tag) {\r\n if (!this.hasTag(tag)) {\r\n const tags = this.get(\"themeTags\", []);\r\n tags.push(tag);\r\n this.set(\"themeTags\", tags);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n removeTag(tag) {\r\n if (this.hasTag(tag)) {\r\n const tags = this.get(\"themeTags\", []);\r\n $array.remove(tags, tag);\r\n this.set(\"themeTags\", tags);\r\n }\r\n }\r\n _t(text, locale, ...rest) {\r\n return this._root.language.translate(text, locale, ...rest);\r\n }\r\n /**\r\n * An instance of [[Root]] object.\r\n *\r\n * @readonly\r\n * @since 5.0.6\r\n * @return Root object\r\n */\r\n get root() {\r\n return this._root;\r\n }\r\n}\r\nObject.defineProperty(Entity, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Entity\"\r\n});\r\nObject.defineProperty(Entity, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: [\"Entity\"]\r\n});\r\n//# sourceMappingURL=Entity.js.map","import { EventDispatcher } from \"./EventDispatcher\";\r\nimport { Disposer, MultiDisposer } from \"./Disposer\";\r\nimport * as $array from \"./Array\";\r\nimport * as $object from \"./Object\";\r\nexport class TemplateState {\r\n constructor(name, template, settings) {\r\n Object.defineProperty(this, \"_settings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_name\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_template\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._name = name;\r\n this._template = template;\r\n this._settings = settings;\r\n }\r\n get(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n set(key, value) {\r\n this._settings[key] = value;\r\n // TODO maybe only do this if the value changed ?\r\n this._template._stateChanged(this._name);\r\n }\r\n remove(key) {\r\n delete this._settings[key];\r\n // TODO maybe only do this if the value changed ?\r\n this._template._stateChanged(this._name);\r\n }\r\n setAll(settings) {\r\n $object.keys(settings).forEach((key) => {\r\n this._settings[key] = settings[key];\r\n });\r\n this._template._stateChanged(this._name);\r\n }\r\n _apply(other, seen) {\r\n $object.each(this._settings, (key, value) => {\r\n if (!seen[key] && !other._userSettings[key]) {\r\n seen[key] = true;\r\n other.setRaw(key, value);\r\n }\r\n });\r\n }\r\n}\r\nexport class TemplateStates {\r\n constructor(template) {\r\n Object.defineProperty(this, \"_template\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_states\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n this._template = template;\r\n }\r\n lookup(name) {\r\n return this._states[name];\r\n }\r\n create(name, settings) {\r\n const state = this._states[name];\r\n if (state) {\r\n state.setAll(settings);\r\n return state;\r\n }\r\n else {\r\n const state = new TemplateState(name, this._template, settings);\r\n this._states[name] = state;\r\n this._template._stateChanged(name);\r\n return state;\r\n }\r\n }\r\n remove(name) {\r\n delete this._states[name];\r\n this._template._stateChanged(name);\r\n }\r\n _apply(entity, state) {\r\n $object.each(this._states, (key, value) => {\r\n let seen = state.states[key];\r\n if (seen == null) {\r\n seen = state.states[key] = {};\r\n }\r\n const other = entity.states.create(key, {});\r\n value._apply(other, seen);\r\n });\r\n }\r\n}\r\nexport class TemplateAdapters {\r\n constructor() {\r\n Object.defineProperty(this, \"_callbacks\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n }\r\n add(key, callback) {\r\n let callbacks = this._callbacks[key];\r\n if (callbacks === undefined) {\r\n callbacks = this._callbacks[key] = [];\r\n }\r\n callbacks.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(callbacks, callback);\r\n if (callbacks.length === 0) {\r\n delete this._callbacks[key];\r\n }\r\n });\r\n }\r\n remove(key) {\r\n const callbacks = this._callbacks[key];\r\n if (callbacks !== undefined) {\r\n delete this._callbacks[key];\r\n }\r\n }\r\n _apply(entity) {\r\n const disposers = [];\r\n $object.each(this._callbacks, (key, callbacks) => {\r\n $array.each(callbacks, (callback) => {\r\n disposers.push(entity.adapters.add(key, callback));\r\n });\r\n });\r\n return new MultiDisposer(disposers);\r\n }\r\n}\r\n// TODO maybe extend from Properties ?\r\nexport class Template {\r\n constructor(settings, isReal) {\r\n Object.defineProperty(this, \"_settings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_privateSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n // TODO code duplication with Properties\r\n Object.defineProperty(this, \"_settingEvents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_privateSettingEvents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_entities\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"states\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new TemplateStates(this)\r\n });\r\n Object.defineProperty(this, \"adapters\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new TemplateAdapters()\r\n });\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new EventDispatcher()\r\n });\r\n Object.defineProperty(this, \"setup\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this._settings = settings;\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(settings) {\r\n return new Template(settings, true);\r\n }\r\n /**\r\n * Array of all entities using this template.\r\n */\r\n get entities() {\r\n return this._entities;\r\n }\r\n get(key, fallback) {\r\n const value = this._settings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n setRaw(key, value) {\r\n this._settings[key] = value;\r\n }\r\n set(key, value) {\r\n if (this._settings[key] !== value) {\r\n this.setRaw(key, value);\r\n this._entities.forEach((entity) => {\r\n entity._setTemplateProperty(this, key, value);\r\n });\r\n }\r\n }\r\n remove(key) {\r\n if (key in this._settings) {\r\n delete this._settings[key];\r\n this._entities.forEach((entity) => {\r\n entity._removeTemplateProperty(key);\r\n });\r\n }\r\n }\r\n removeAll() {\r\n $object.each(this._settings, (key, _value) => {\r\n this.remove(key);\r\n });\r\n }\r\n getPrivate(key, fallback) {\r\n const value = this._privateSettings[key];\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n else {\r\n return fallback;\r\n }\r\n }\r\n setPrivateRaw(key, value) {\r\n this._privateSettings[key] = value;\r\n return value;\r\n }\r\n setPrivate(key, value) {\r\n if (this._privateSettings[key] !== value) {\r\n this.setPrivateRaw(key, value);\r\n this._entities.forEach((entity) => {\r\n entity._setTemplatePrivateProperty(this, key, value);\r\n });\r\n }\r\n return value;\r\n }\r\n removePrivate(key) {\r\n if (key in this._privateSettings) {\r\n delete this._privateSettings[key];\r\n this._entities.forEach((entity) => {\r\n entity._removeTemplatePrivateProperty(key);\r\n });\r\n }\r\n }\r\n setAll(value) {\r\n $object.each(value, (key, value) => {\r\n this.set(key, value);\r\n });\r\n }\r\n // TODO code duplication with Properties\r\n on(key, callback) {\r\n let events = this._settingEvents[key];\r\n if (events === undefined) {\r\n events = this._settingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._settingEvents[key];\r\n }\r\n });\r\n }\r\n // TODO code duplication with Properties\r\n onPrivate(key, callback) {\r\n let events = this._privateSettingEvents[key];\r\n if (events === undefined) {\r\n events = this._privateSettingEvents[key] = [];\r\n }\r\n events.push(callback);\r\n return new Disposer(() => {\r\n $array.removeFirst(events, callback);\r\n if (events.length === 0) {\r\n delete this._privateSettingEvents[key];\r\n }\r\n });\r\n }\r\n _apply(entity, state) {\r\n const disposers = [];\r\n $object.each(this._settingEvents, (key, events) => {\r\n $array.each(events, (event) => {\r\n disposers.push(entity.on(key, event));\r\n });\r\n });\r\n $object.each(this._privateSettingEvents, (key, events) => {\r\n $array.each(events, (event) => {\r\n disposers.push(entity.onPrivate(key, event));\r\n });\r\n });\r\n this.states._apply(entity, state);\r\n disposers.push(this.adapters._apply(entity));\r\n disposers.push(entity.events.copyFrom(this.events));\r\n return new MultiDisposer(disposers);\r\n }\r\n _setObjectTemplate(entity) {\r\n this._entities.push(entity);\r\n }\r\n _removeObjectTemplate(entity) {\r\n $array.remove(this._entities, entity);\r\n }\r\n _stateChanged(name) {\r\n this._entities.forEach((entity) => {\r\n entity._applyStateByKey(name);\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=Template.js.map","import { __awaiter } from \"tslib\";\r\nimport { Entity } from \"../util/Entity\";\r\nimport { Template } from \"../util/Template\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { EventDispatcher } from \"../util/EventDispatcher\";\r\nimport { MultiDisposer, CounterDisposer } from \"../util/Disposer\";\r\nimport { waitForAnimations } from \"../util/Animation\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $object from \"../util/Object\";\r\nimport * as $math from \"../util/Math\";\r\n//import { populateString } from \"../util/PopulateString\";\r\n/**\r\n * An [[EventDispatcher]] for [[Sprite]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\r\n */\r\nclass SpriteEventDispatcher extends EventDispatcher {\r\n constructor(sprite) {\r\n super();\r\n Object.defineProperty(this, \"_sprite\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_rendererDisposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dispatchParents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n this._sprite = sprite;\r\n }\r\n _makePointerEvent(key, event) {\r\n return {\r\n type: key,\r\n originalEvent: event.event,\r\n point: event.point,\r\n simulated: event.simulated,\r\n native: event.native,\r\n target: this._sprite\r\n };\r\n }\r\n _onRenderer(key, dispatch) {\r\n // TODO: is this OK? it'd be good not to require to set this on each individual element\r\n this._sprite.set(\"interactive\", true);\r\n this._sprite._display.interactive = true;\r\n let events = this._rendererDisposers[key];\r\n if (events === undefined) {\r\n const disposer = this._sprite._display.on(key, (e) => {\r\n dispatch.call(this, e);\r\n });\r\n events = this._rendererDisposers[key] = new CounterDisposer(() => {\r\n delete this._rendererDisposers[key];\r\n disposer.dispose();\r\n });\r\n }\r\n return events.increment();\r\n }\r\n _on(once, type, callback, context, shouldClone, dispatch) {\r\n const info = super._on(once, type, callback, context, shouldClone, dispatch);\r\n const rendererEvent = SpriteEventDispatcher.RENDERER_EVENTS[type];\r\n if (rendererEvent !== undefined) {\r\n info.disposer = new MultiDisposer([\r\n info.disposer,\r\n this._onRenderer(type, rendererEvent),\r\n ]);\r\n }\r\n return info;\r\n }\r\n /**\r\n * Will stop any bubbling up of the event to element's parents.\r\n *\r\n * Should be called in an event handler, e.g.:\r\n *\r\n * ```TypeScript\r\n * element.events.on(\"pointerdown\", function(ev) {\r\n * // Do something here and prevent from \"pointerdown\" bubbling up\r\n * // ...\r\n * ev.target.events.stopParentDispatch();\r\n * });\r\n * ```\r\n * ```JavaScript\r\n * element.events.on(\"pointerdown\", function(ev) {\r\n * // Do something here and prevent from \"pointerdown\" bubbling up\r\n * // ...\r\n * ev.target.events.stopParentDispatch();\r\n * });\r\n * ```\r\n */\r\n stopParentDispatch() {\r\n this._dispatchParents = false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n dispatchParents(type, event) {\r\n const old = this._dispatchParents;\r\n this._dispatchParents = true;\r\n try {\r\n this.dispatch(type, event);\r\n if (this._dispatchParents && this._sprite.parent) {\r\n this._sprite.parent.events.dispatchParents(type, event);\r\n }\r\n }\r\n finally {\r\n this._dispatchParents = old;\r\n }\r\n }\r\n}\r\nObject.defineProperty(SpriteEventDispatcher, \"RENDERER_EVENTS\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {\r\n \"click\": function (event) {\r\n if (this.isEnabled(\"click\") && !this._sprite.isDragging() && this._sprite._hasDown() && !this._sprite._hasMoved(this._makePointerEvent(\"click\", event))) {\r\n this.dispatch(\"click\", this._makePointerEvent(\"click\", event));\r\n }\r\n },\r\n \"rightclick\": function (event) {\r\n if (this.isEnabled(\"rightclick\")) {\r\n this.dispatch(\"rightclick\", this._makePointerEvent(\"rightclick\", event));\r\n }\r\n },\r\n \"middleclick\": function (event) {\r\n if (this.isEnabled(\"middleclick\")) {\r\n this.dispatch(\"middleclick\", this._makePointerEvent(\"middleclick\", event));\r\n }\r\n },\r\n \"dblclick\": function (event) {\r\n this.dispatchParents(\"dblclick\", this._makePointerEvent(\"dblclick\", event));\r\n },\r\n \"pointerover\": function (event) {\r\n const sprite = this._sprite;\r\n let dispatch = true;\r\n if (sprite.getPrivate(\"trustBounds\")) {\r\n sprite._getBounds();\r\n const bounds = sprite.globalBounds();\r\n if (sprite.isType(\"Graphics\")) {\r\n const strokeWidth = sprite.get(\"strokeWidth\", 1) / 2;\r\n if (strokeWidth >= 1) {\r\n bounds.left -= strokeWidth;\r\n bounds.right += strokeWidth;\r\n bounds.top -= strokeWidth;\r\n bounds.bottom += strokeWidth;\r\n }\r\n }\r\n if (!$math.inBounds(event.point, bounds)) {\r\n dispatch = false;\r\n sprite._root._renderer.removeHovering(sprite._display);\r\n }\r\n }\r\n if (dispatch && this.isEnabled(\"pointerover\")) {\r\n this.dispatch(\"pointerover\", this._makePointerEvent(\"pointerover\", event));\r\n }\r\n },\r\n \"pointerout\": function (event) {\r\n if (this.isEnabled(\"pointerout\")) {\r\n this.dispatch(\"pointerout\", this._makePointerEvent(\"pointerout\", event));\r\n }\r\n },\r\n \"pointerdown\": function (event) {\r\n this.dispatchParents(\"pointerdown\", this._makePointerEvent(\"pointerdown\", event));\r\n },\r\n \"pointerup\": function (event) {\r\n if (this.isEnabled(\"pointerup\")) {\r\n this.dispatch(\"pointerup\", this._makePointerEvent(\"pointerup\", event));\r\n }\r\n },\r\n \"globalpointerup\": function (event) {\r\n if (this.isEnabled(\"globalpointerup\")) {\r\n this.dispatch(\"globalpointerup\", this._makePointerEvent(\"globalpointerup\", event));\r\n }\r\n },\r\n \"globalpointermove\": function (event) {\r\n if (this.isEnabled(\"globalpointermove\")) {\r\n this.dispatch(\"globalpointermove\", this._makePointerEvent(\"globalpointermove\", event));\r\n }\r\n },\r\n \"wheel\": function (event) {\r\n this.dispatchParents(\"wheel\", {\r\n type: \"wheel\",\r\n target: this._sprite,\r\n originalEvent: event.event,\r\n point: event.point,\r\n });\r\n },\r\n }\r\n});\r\n/**\r\n * A base class for all visual elements.\r\n *\r\n * @important\r\n */\r\nexport class Sprite extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_adjustedLocalBounds\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: { left: 0, right: 0, top: 0, bottom: 0 }\r\n });\r\n Object.defineProperty(this, \"_localBounds\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: { left: 0, right: 0, top: 0, bottom: 0 }\r\n });\r\n Object.defineProperty(this, \"_parent\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_dataItem\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_templateField\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_sizeDirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n // Will be true only when dragging\r\n Object.defineProperty(this, \"_isDragging\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n // The event when the dragging starts\r\n Object.defineProperty(this, \"_dragEvent\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n // The position when dragging starts\r\n Object.defineProperty(this, \"_dragPoint\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_isHidden\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_isShowing\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_isHiding\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_isDown\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_downPoint\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_downPoints\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_toggleDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_dragDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_hoverDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_focusDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipMoveDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipPointerDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_statesHandled\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n _afterNew() {\r\n this.setPrivateRaw(\"visible\", true);\r\n super._afterNew();\r\n }\r\n /**\r\n * Marks some setting as dirty. Could be used to trigger adapter.\r\n * @param key\r\n */\r\n markDirtyKey(key) {\r\n this._markDirtyKey(key);\r\n }\r\n _markDirtyKey(key) {\r\n super._markDirtyKey(key);\r\n if (key == \"x\" || key == \"y\" || key == \"dx\" || key == \"dy\") {\r\n this.markDirtyBounds();\r\n this._addPercentagePositionChildren();\r\n this.markDirtyPosition();\r\n }\r\n }\r\n _markDirtyPrivateKey(key) {\r\n super._markDirtyPrivateKey(key);\r\n if (key == \"x\" || key == \"y\") {\r\n this.markDirtyPosition();\r\n }\r\n }\r\n _removeTemplateField() {\r\n if (this._templateField) {\r\n this._templateField._removeObjectTemplate(this);\r\n }\r\n }\r\n _createEvents() {\r\n return new SpriteEventDispatcher(this);\r\n }\r\n _processTemplateField() {\r\n let template;\r\n const field = this.get(\"templateField\");\r\n if (field) {\r\n const dataItem = this.dataItem;\r\n if (dataItem) {\r\n const context = dataItem.dataContext;\r\n if (context) {\r\n template = context[field];\r\n if (!(template instanceof Template) && template) {\r\n template = Template.new(template);\r\n }\r\n }\r\n }\r\n }\r\n if (this._templateField !== template) {\r\n this._removeTemplateField();\r\n this._templateField = template;\r\n if (template) {\r\n template._setObjectTemplate(this);\r\n }\r\n this._applyTemplates();\r\n }\r\n }\r\n // TODO change this to run before the element is added to the parent, so that way\r\n // it doesn't need to apply the themes twice\r\n _setDataItem(dataItem) {\r\n const oldDataItem = this._dataItem;\r\n this._dataItem = dataItem;\r\n this._processTemplateField();\r\n const eventType = \"dataitemchanged\";\r\n if (dataItem != oldDataItem) {\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, {\r\n type: eventType,\r\n target: this,\r\n oldDataItem: oldDataItem,\r\n newDataItem: dataItem\r\n });\r\n }\r\n }\r\n }\r\n /**\r\n * A [[DataItem]] used for this element.\r\n *\r\n * NOTE: data item is being assigned automatically in most cases where it\r\n * matters. Use this accessor to set data item only if you know what you're\r\n * doing.\r\n *\r\n * @param value Data item\r\n */\r\n set dataItem(value) {\r\n this._setDataItem(value);\r\n }\r\n /**\r\n * @return DataItem\r\n */\r\n get dataItem() {\r\n if (this._dataItem) {\r\n return this._dataItem;\r\n }\r\n else {\r\n let parent = this._parent;\r\n while (parent) {\r\n if (parent._dataItem) {\r\n return parent._dataItem;\r\n }\r\n else {\r\n parent = parent._parent;\r\n }\r\n }\r\n }\r\n }\r\n _addPercentageSizeChildren() {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (this.get(\"width\") instanceof Percent || this.get(\"height\") instanceof Percent) {\r\n $array.pushOne(parent._percentageSizeChildren, this);\r\n }\r\n else {\r\n $array.removeFirst(parent._percentageSizeChildren, this);\r\n }\r\n }\r\n }\r\n _addPercentagePositionChildren() {\r\n let parent = this.parent;\r\n if (parent) {\r\n if (this.get(\"x\") instanceof Percent || this.get(\"y\") instanceof Percent) {\r\n $array.pushOne(parent._percentagePositionChildren, this);\r\n }\r\n else {\r\n $array.removeFirst(parent._percentagePositionChildren, this);\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyPosition() {\r\n this._root._addDirtyPosition(this);\r\n }\r\n updatePivotPoint() {\r\n const bounds = this._localBounds;\r\n if (bounds) {\r\n const centerX = this.get(\"centerX\");\r\n if (centerX != null) {\r\n this._display.pivot.x = bounds.left + $utils.relativeToValue(centerX, bounds.right - bounds.left);\r\n }\r\n const centerY = this.get(\"centerY\");\r\n if (centerY != null) {\r\n this._display.pivot.y = bounds.top + $utils.relativeToValue(centerY, bounds.bottom - bounds.top);\r\n }\r\n }\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n // handling states in beforeChanged, otherwise states is not applied without animated theme\r\n this._handleStates();\r\n if (this.isDirty(\"tooltip\")) {\r\n const previous = this._prevSettings.tooltip;\r\n if (previous) {\r\n previous.dispose();\r\n }\r\n }\r\n if (this.isDirty(\"layer\") || this.isDirty(\"layerMargin\")) {\r\n this._display.setLayer(this.get(\"layer\"), this.get(\"layerMargin\"));\r\n this.markDirtyLayer();\r\n }\r\n if (this.isDirty(\"tooltipPosition\")) {\r\n const tooltipMoveDp = this._tooltipMoveDp;\r\n if (tooltipMoveDp) {\r\n tooltipMoveDp.dispose();\r\n this._tooltipMoveDp = undefined;\r\n }\r\n const tooltipPointerDp = this._tooltipPointerDp;\r\n if (tooltipPointerDp) {\r\n tooltipPointerDp.dispose();\r\n this._tooltipPointerDp = undefined;\r\n }\r\n if (this.get(\"tooltipPosition\") == \"pointer\") {\r\n if (this.isHover()) {\r\n this._tooltipMoveDp = this.events.on(\"globalpointermove\", (e) => {\r\n this.showTooltip(e.point);\r\n });\r\n }\r\n this._tooltipPointerDp = new MultiDisposer([\r\n this.events.on(\"pointerover\", () => {\r\n this._tooltipMoveDp = this.events.on(\"globalpointermove\", (e) => {\r\n this.showTooltip(e.point);\r\n });\r\n }),\r\n this.events.on(\"pointerout\", () => {\r\n const tooltipMoveDp = this._tooltipMoveDp;\r\n if (tooltipMoveDp) {\r\n tooltipMoveDp.dispose();\r\n this._tooltipMoveDp = undefined;\r\n }\r\n })\r\n ]);\r\n }\r\n }\r\n }\r\n _handleStates() {\r\n if (!this._statesHandled) {\r\n if (this.isDirty(\"active\")) {\r\n if (this.get(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n this.set(\"ariaChecked\", true);\r\n }\r\n else {\r\n if (!this.isHidden()) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n this.set(\"ariaChecked\", false);\r\n }\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"disabled\")) {\r\n if (this.get(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n this.set(\"ariaChecked\", false);\r\n }\r\n else {\r\n if (!this.isHidden()) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n this.set(\"ariaChecked\", true);\r\n }\r\n this.markDirtyAccessibility();\r\n }\r\n this._statesHandled = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n const display = this._display;\r\n const events = this.events;\r\n if (this.isDirty(\"draggable\")) {\r\n const draggable = this.get(\"draggable\");\r\n if (draggable) {\r\n this.set(\"interactive\", true);\r\n this._dragDp = new MultiDisposer([\r\n events.on(\"pointerdown\", (ev) => {\r\n this.dragStart(ev);\r\n }),\r\n events.on(\"globalpointermove\", (ev) => {\r\n this.dragMove(ev);\r\n }),\r\n events.on(\"globalpointerup\", (ev) => {\r\n this.dragStop(ev);\r\n })\r\n ]);\r\n }\r\n else {\r\n if (this._dragDp) {\r\n this._dragDp.dispose();\r\n this._dragDp = undefined;\r\n }\r\n }\r\n display.cancelTouch = draggable ? true : false;\r\n }\r\n if (this.isDirty(\"tooltipText\") || this.isDirty(\"tooltipHTML\") || this.isDirty(\"showTooltipOn\")) {\r\n const tooltipText = this.get(\"tooltipText\");\r\n const tooltipHTML = this.get(\"tooltipHTML\");\r\n const showTooltipOn = this.get(\"showTooltipOn\", \"hover\");\r\n if (this._tooltipDp) {\r\n this._tooltipDp.dispose();\r\n this._tooltipDp = undefined;\r\n }\r\n if (tooltipText || tooltipHTML) {\r\n if (showTooltipOn == \"click\") {\r\n this._tooltipDp = new MultiDisposer([\r\n events.on(\"click\", () => {\r\n this.setTimeout(() => {\r\n const tooltip = this.getTooltip();\r\n if (tooltip && !tooltip.isHidden() && tooltip.get(\"tooltipTarget\") === this) {\r\n this.hideTooltip();\r\n }\r\n else {\r\n this.showTooltip();\r\n }\r\n }, 10);\r\n }),\r\n $utils.addEventListener(document, \"click\", (_ev) => {\r\n this.hideTooltip();\r\n })\r\n ]);\r\n this._disposers.push(this._tooltipDp);\r\n }\r\n else if (showTooltipOn == \"always\") {\r\n // nothing\r\n }\r\n else {\r\n this._tooltipDp = new MultiDisposer([\r\n events.on(\"pointerover\", () => {\r\n this.showTooltip();\r\n }),\r\n events.on(\"pointerout\", () => {\r\n this.hideTooltip();\r\n })\r\n ]);\r\n this._disposers.push(this._tooltipDp);\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"toggleKey\")) {\r\n let toggleKey = this.get(\"toggleKey\");\r\n if (toggleKey && toggleKey != \"none\") {\r\n this._toggleDp = events.on(\"click\", () => {\r\n if (!this._isDragging) {\r\n this.set(toggleKey, !this.get(toggleKey));\r\n }\r\n });\r\n }\r\n else {\r\n if (this._toggleDp) {\r\n this._toggleDp.dispose();\r\n this._toggleDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"opacity\")) {\r\n display.alpha = Math.max(0, this.get(\"opacity\", 1));\r\n if (this.get(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n if (this.isDirty(\"rotation\")) {\r\n this.markDirtyBounds();\r\n display.angle = this.get(\"rotation\", 0);\r\n }\r\n if (this.isDirty(\"scale\")) {\r\n this.markDirtyBounds();\r\n display.scale = this.get(\"scale\", 0);\r\n }\r\n if (this.isDirty(\"centerX\") || this.isDirty(\"centerY\")) {\r\n this.markDirtyBounds();\r\n this.updatePivotPoint();\r\n }\r\n if (this.isDirty(\"visible\") || this.isPrivateDirty(\"visible\") || this.isDirty(\"forceHidden\")) {\r\n if (!this.get(\"visible\") || !this.getPrivate(\"visible\") || this.get(\"forceHidden\")) {\r\n display.visible = false;\r\n this.hideTooltip();\r\n }\r\n else {\r\n display.visible = true;\r\n }\r\n this.markDirtyBounds();\r\n if (this.get(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n if (this.isDirty(\"width\") || this.isDirty(\"height\")) {\r\n this.markDirtyBounds();\r\n this._addPercentageSizeChildren();\r\n const parent = this.parent;\r\n if (parent) {\r\n if ((this.isDirty(\"width\") && this.get(\"width\") instanceof Percent) || (this.isDirty(\"height\") && this.get(\"height\") instanceof Percent)) {\r\n parent.markDirty();\r\n parent._prevWidth = 0;\r\n }\r\n }\r\n this._sizeDirty = true;\r\n }\r\n if (this.isDirty(\"maxWidth\") || this.isDirty(\"maxHeight\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\") || this.isDirty(\"minWidth\") || this.isDirty(\"minHeight\") || this.isPrivateDirty(\"maxWidth\") || this.isPrivateDirty(\"maxHeight\") || this.isPrivateDirty(\"minWidth\") || this.isPrivateDirty(\"minHeight\") || this.isDirty(\"marginLeft\") || this.isDirty(\"marginTop\") || this.isDirty(\"marginRight\") || this.isDirty(\"marginBottom\")) {\r\n this.markDirtyBounds();\r\n this._sizeDirty = true;\r\n }\r\n if (this._sizeDirty) {\r\n this._updateSize();\r\n }\r\n if (this.isDirty(\"wheelable\")) {\r\n const wheelable = this.get(\"wheelable\");\r\n if (wheelable) {\r\n this.set(\"interactive\", true);\r\n }\r\n display.wheelable = wheelable ? true : false;\r\n }\r\n // Accessibility\r\n if (this.isDirty(\"tabindexOrder\") || this.isDirty(\"focusableGroup\")) {\r\n if (this.get(\"focusable\")) {\r\n this._root._registerTabindexOrder(this);\r\n }\r\n else {\r\n this._root._unregisterTabindexOrder(this);\r\n }\r\n }\r\n if (this.isDirty(\"filter\")) {\r\n //this.markDirtyBounds();\r\n display.filter = this.get(\"filter\");\r\n }\r\n let filter = this.get(\"filter\", \"\");\r\n if (this.isDirty(\"blur\")) {\r\n const blur = this.get(\"blur\", 0);\r\n if (blur != 0) {\r\n filter += \" blur(\" + blur + \"px)\";\r\n }\r\n }\r\n if (this.isDirty(\"saturate\")) {\r\n const saturate = this.get(\"saturate\", 1);\r\n if (saturate != 1) {\r\n filter += \" saturate(\" + saturate + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"brightness\")) {\r\n const brightness = this.get(\"brightness\", 1);\r\n if (brightness != 1) {\r\n filter += \" brightness(\" + brightness + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"contrast\")) {\r\n const contrast = this.get(\"contrast\", 1);\r\n if (contrast != 1) {\r\n filter += \" contrast(\" + contrast + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"sepia\")) {\r\n const sepia = this.get(\"sepia\", 0);\r\n if (sepia != 0) {\r\n filter += \" sepia(\" + sepia + \")\";\r\n }\r\n }\r\n if (this.isDirty(\"hue\")) {\r\n const hue = this.get(\"hue\", 0);\r\n if (hue != 0) {\r\n filter += \" hue-rotate(\" + hue + \"deg)\";\r\n }\r\n }\r\n if (this.isDirty(\"invert\")) {\r\n const invert = this.get(\"invert\", 0);\r\n if (invert != 0) {\r\n filter += \" invert(\" + invert + \")\";\r\n }\r\n }\r\n if (filter) {\r\n display.filter = filter;\r\n }\r\n if (this.isDirty(\"cursorOverStyle\")) {\r\n display.cursorOverStyle = this.get(\"cursorOverStyle\");\r\n }\r\n if (this.isDirty(\"hoverOnFocus\")) {\r\n if (this.get(\"hoverOnFocus\")) {\r\n this._focusDp = new MultiDisposer([\r\n events.on(\"focus\", () => {\r\n // TODO: proper hover, not just tooltip\r\n this.showTooltip();\r\n }),\r\n events.on(\"blur\", () => {\r\n // TODO: proper hover, not just tooltip\r\n this.hideTooltip();\r\n })\r\n ]);\r\n }\r\n else {\r\n if (this._focusDp) {\r\n this._focusDp.dispose();\r\n this._focusDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"focusable\")) {\r\n if (this.get(\"focusable\")) {\r\n this._root._registerTabindexOrder(this);\r\n }\r\n else {\r\n this._root._unregisterTabindexOrder(this);\r\n }\r\n this.markDirtyAccessibility();\r\n this._disposers.push(events.on(\"blur\", () => {\r\n this.setPrivateRaw(\"touchHovering\", false);\r\n }));\r\n }\r\n if (this.isPrivateDirty(\"focusable\")) {\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"role\") || this.isDirty(\"ariaLive\") || this.isDirty(\"ariaChecked\") || this.isDirty(\"ariaHidden\") || this.isDirty(\"ariaOrientation\") || this.isDirty(\"ariaValueNow\") || this.isDirty(\"ariaValueMin\") || this.isDirty(\"ariaValueMax\") || this.isDirty(\"ariaValueText\") || this.isDirty(\"ariaLabel\") || this.isDirty(\"ariaControls\")) {\r\n // display.accessibility.ariaLabel = populateString(this, this.get(\"ariaLabel\", \"\"));\r\n // @todo make sure ariaLabel gets populated in Root\r\n this.markDirtyAccessibility();\r\n }\r\n if (this.isDirty(\"exportable\")) {\r\n display.exportable = this.get(\"exportable\");\r\n }\r\n if (this.isDirty(\"interactive\")) {\r\n const events = this.events;\r\n if (this.get(\"interactive\") && !events.isDisposed()) {\r\n this._hoverDp = new MultiDisposer([\r\n events.on(\"click\", (ev) => {\r\n if ($utils.isTouchEvent(ev.originalEvent)) {\r\n if (!this.getPrivate(\"touchHovering\")) {\r\n this.setTimeout(() => {\r\n this._handleOver();\r\n if (this.get(\"tooltipText\") || this.get(\"tooltipHTML\")) {\r\n this.showTooltip();\r\n }\r\n this.setPrivateRaw(\"touchHovering\", true);\r\n this.events.dispatch(\"pointerover\", {\r\n type: \"pointerover\",\r\n target: ev.target,\r\n originalEvent: ev.originalEvent,\r\n point: ev.point,\r\n simulated: ev.simulated\r\n });\r\n }, 10);\r\n }\r\n }\r\n }),\r\n events.on(\"globalpointerup\", (ev) => {\r\n if ($utils.isTouchEvent(ev.originalEvent)) {\r\n if (this.getPrivate(\"touchHovering\")) {\r\n this._handleOut();\r\n if (this.get(\"tooltipText\") || this.get(\"tooltipHTML\")) {\r\n this.hideTooltip();\r\n }\r\n this.setPrivateRaw(\"touchHovering\", false);\r\n this.events.dispatch(\"pointerout\", {\r\n type: \"pointerout\",\r\n target: ev.target,\r\n originalEvent: ev.originalEvent,\r\n point: ev.point,\r\n simulated: ev.simulated\r\n });\r\n }\r\n }\r\n if (this._isDown) {\r\n this._handleUp(ev);\r\n }\r\n //this._isDown = false;\r\n }),\r\n events.on(\"pointerover\", () => {\r\n this._handleOver();\r\n }),\r\n events.on(\"pointerout\", () => {\r\n this._handleOut();\r\n }),\r\n events.on(\"pointerdown\", (e) => {\r\n this._handleDown(e);\r\n })\r\n ]);\r\n }\r\n else {\r\n this._display.interactive = false;\r\n if (this._hoverDp) {\r\n this._hoverDp.dispose();\r\n this._hoverDp = undefined;\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"forceInactive\")) {\r\n this._display.inactive = this.get(\"forceInactive\", null);\r\n }\r\n if (this.get(\"showTooltipOn\") == \"always\" && this._display.visible) {\r\n this.showTooltip();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragStart(e) {\r\n this._dragEvent = e;\r\n this.events.stopParentDispatch();\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragStop(e) {\r\n this._dragEvent = undefined;\r\n this._dragPoint = undefined;\r\n this.events.stopParentDispatch();\r\n if (this._isDragging) {\r\n this._isDragging = false;\r\n const type = \"dragstop\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n }\r\n _handleOver() {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"hoverActive\")) {\r\n this.states.applyAnimate(\"hoverActive\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"hoverDisabled\")) {\r\n this.states.applyAnimate(\"hoverDisabled\");\r\n }\r\n else {\r\n this.states.applyAnimate(\"hover\");\r\n }\r\n if (this.get(\"draggable\") && this._isDown && this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n }\r\n }\r\n _handleOut() {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n }\r\n else {\r\n if (this.states.lookup(\"hover\") || this.states.lookup(\"hoverActive\")) {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n }\r\n if (this.get(\"draggable\") && this._isDown && this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n }\r\n }\r\n _handleUp(e) {\r\n if (!this.isHidden()) {\r\n if (this.get(\"active\") && this.states.lookup(\"active\")) {\r\n this.states.applyAnimate(\"active\");\r\n }\r\n else if (this.get(\"disabled\") && this.states.lookup(\"disabled\")) {\r\n this.states.applyAnimate(\"disabled\");\r\n }\r\n else if (this.states.lookup(\"down\")) {\r\n if (this.isHover()) {\r\n this.states.applyAnimate(\"hover\");\r\n }\r\n else {\r\n this.states.applyAnimate(\"default\");\r\n }\r\n }\r\n // @todo remove this once migrated to _downPoints\r\n this._downPoint = undefined;\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n delete this._downPoints[pointerId];\r\n if ($object.keys(this._downPoints).length == 0) {\r\n this._isDown = false;\r\n }\r\n }\r\n }\r\n _hasMoved(e) {\r\n // @todo remove this once migrated to _downPoints\r\n // if (this._downPoint) {\r\n // \tconst x = Math.abs(this._downPoint.x - e.point.x);\r\n // \tconst y = Math.abs(this._downPoint.y - e.point.y);\r\n // \treturn (x > 5) || (y > 5);\r\n // }\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n const downPoint = this._downPoints[pointerId];\r\n if (downPoint) {\r\n const x = Math.abs(downPoint.x - e.point.x);\r\n const y = Math.abs(downPoint.y - e.point.y);\r\n return (x > 5) || (y > 5);\r\n }\r\n return false;\r\n }\r\n _hasDown() {\r\n return $object.keys(this._downPoints).length > 0;\r\n }\r\n _handleDown(e) {\r\n const parent = this.parent;\r\n if (parent && !this.get(\"draggable\")) {\r\n parent._handleDown(e);\r\n }\r\n if (this.get(\"interactive\") && !this.isHidden()) {\r\n if (this.states.lookup(\"down\")) {\r\n this.states.applyAnimate(\"down\");\r\n }\r\n this._downPoint = {\r\n x: e.point.x,\r\n y: e.point.y\r\n };\r\n // @todo remove this once migrated to _downPoints\r\n this._isDown = true;\r\n const pointerId = $utils.getPointerId(e.originalEvent);\r\n this._downPoints[pointerId] = {\r\n x: e.point.x,\r\n y: e.point.y\r\n };\r\n }\r\n }\r\n /**\r\n * @ignore\r\n * @todo should this be user-accessible?\r\n */\r\n dragMove(e) {\r\n let dragEvent = this._dragEvent;\r\n if (dragEvent) {\r\n if (dragEvent.simulated && !e.simulated) {\r\n return true;\r\n }\r\n let angle = 0;\r\n let parent = this.parent;\r\n let scale = 1;\r\n while (parent != null) {\r\n angle += parent.get(\"rotation\", 0);\r\n parent = parent.parent;\r\n if (parent) {\r\n scale *= parent.get(\"scale\", 1);\r\n }\r\n }\r\n let x = (e.point.x - dragEvent.point.x) / scale;\r\n let y = (e.point.y - dragEvent.point.y) / scale;\r\n const events = this.events;\r\n if (dragEvent.simulated && !this._isDragging) {\r\n this._isDragging = true;\r\n this._dragEvent = e;\r\n this._dragPoint = {\r\n x: this.x(),\r\n y: this.y()\r\n };\r\n const type = \"dragstart\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n if (this._isDragging) {\r\n let dragPoint = this._dragPoint;\r\n this.set(\"x\", dragPoint.x + x * $math.cos(angle) + y * $math.sin(angle));\r\n this.set(\"y\", dragPoint.y + y * $math.cos(angle) - x * $math.sin(angle));\r\n const type = \"dragged\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated,\r\n });\r\n }\r\n }\r\n else {\r\n if (Math.hypot(x, y) > 5) {\r\n this._isDragging = true;\r\n this._dragEvent = e;\r\n this._dragPoint = {\r\n x: this.x(),\r\n y: this.y()\r\n };\r\n const type = \"dragstart\";\r\n if (events.isEnabled(type)) {\r\n events.dispatch(type, {\r\n type: type,\r\n target: this,\r\n originalEvent: e.originalEvent,\r\n point: e.point,\r\n simulated: e.simulated\r\n });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _updateSize() {\r\n }\r\n _getBounds() {\r\n this._localBounds = this._display.getLocalBounds();\r\n }\r\n /**\r\n * Returns depth (how deep in the hierachy of the content tree) of this\r\n * element.\r\n *\r\n * @return Depth\r\n */\r\n depth() {\r\n let self = this.parent;\r\n let depth = 0;\r\n while (true) {\r\n if (self) {\r\n ++depth;\r\n self = self.parent;\r\n }\r\n else {\r\n return depth;\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySize() {\r\n this._sizeDirty = true;\r\n this.markDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyBounds() {\r\n const display = this._display;\r\n if (this.get(\"isMeasured\")) {\r\n this._root._addDirtyBounds(this);\r\n display.isMeasured = true;\r\n display.invalidateBounds();\r\n const parent = this.parent;\r\n if (parent && this.get(\"position\") != \"absolute\") {\r\n if (parent.get(\"width\") == null || parent.get(\"height\") == null || parent.get(\"layout\")) {\r\n parent.markDirtyBounds();\r\n }\r\n }\r\n if (this.get(\"focusable\") && this.isFocus()) {\r\n this.markDirtyAccessibility();\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyAccessibility() {\r\n //if (this._root.focused(this)) {\r\n this._root._invalidateAccessibility(this);\r\n //}\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtyLayer() {\r\n //this._display.markDirtyLayer(this.isDirty(\"opacity\") || this.isDirty(\"visible\")); https://codepen.io/team/amcharts/pen/gOWZPmP <- problems\r\n this._display.markDirtyLayer(true);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n super.markDirty();\r\n this.markDirtyLayer();\r\n }\r\n _updateBounds() {\r\n const oldBounds = this._adjustedLocalBounds;\r\n let newBounds;\r\n // if display.visible == false, it still returns bounds\r\n if (!this.get(\"visible\") || !this.getPrivate(\"visible\") || this.get(\"forceHidden\")) {\r\n newBounds = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0\r\n };\r\n this._localBounds = newBounds;\r\n this._adjustedLocalBounds = newBounds;\r\n }\r\n else {\r\n this._getBounds();\r\n this._fixMinBounds(this._localBounds);\r\n this.updatePivotPoint();\r\n this._adjustedLocalBounds = this._display.getAdjustedBounds(this._localBounds);\r\n newBounds = this._adjustedLocalBounds;\r\n }\r\n if (!oldBounds || (oldBounds.left !== newBounds.left || oldBounds.top !== newBounds.top || oldBounds.right !== newBounds.right || oldBounds.bottom !== newBounds.bottom)) {\r\n const eventType = \"boundschanged\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this });\r\n }\r\n if (this.parent) {\r\n this.parent.markDirty();\r\n this.parent.markDirtyBounds();\r\n }\r\n // Update tooltip position together with the Sprite\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n }\r\n _fixMinBounds(bounds) {\r\n let minWidth = this.get(\"minWidth\", this.getPrivate(\"minWidth\"));\r\n let minHeight = this.get(\"minHeight\", this.getPrivate(\"minHeight\"));\r\n if ($type.isNumber(minWidth)) {\r\n if (bounds.right - bounds.left < minWidth) {\r\n bounds.right = bounds.left + minWidth;\r\n }\r\n }\r\n if ($type.isNumber(minHeight)) {\r\n if (bounds.bottom - bounds.top < minHeight) {\r\n bounds.bottom = bounds.top + minHeight;\r\n }\r\n }\r\n let privateWidth = this.getPrivate(\"width\");\r\n let privateHeight = this.getPrivate(\"height\");\r\n if ($type.isNumber(privateWidth)) {\r\n if (privateWidth > 0) {\r\n bounds.right = bounds.left + privateWidth;\r\n }\r\n else {\r\n bounds.left = bounds.right + privateWidth;\r\n }\r\n }\r\n if ($type.isNumber(privateHeight)) {\r\n if (privateHeight > 0) {\r\n bounds.bottom = bounds.top + privateHeight;\r\n }\r\n else {\r\n bounds.top = bounds.bottom + privateHeight;\r\n }\r\n }\r\n }\r\n _removeParent(parent) {\r\n if (parent) {\r\n parent.children.removeValue(this);\r\n $array.removeFirst(parent._percentageSizeChildren, this);\r\n $array.removeFirst(parent._percentagePositionChildren, this);\r\n }\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._sizeDirty = false;\r\n this._statesHandled = false;\r\n }\r\n /**\r\n * Simulate hover over element.\r\n */\r\n hover() {\r\n if (!this.isDisposed()) {\r\n this.showTooltip();\r\n this._handleOver();\r\n }\r\n }\r\n /**\r\n * Simulate unhover over element.\r\n */\r\n unhover() {\r\n if (!this.isDisposed()) {\r\n this.hideTooltip();\r\n this._handleOut();\r\n }\r\n }\r\n /**\r\n * Shows element's [[Tooltip]].\r\n */\r\n showTooltip(point) {\r\n if (!this.isDisposed()) {\r\n const tooltip = this.getTooltip();\r\n const tooltipText = this.get(\"tooltipText\");\r\n const tooltipHTML = this.get(\"tooltipHTML\");\r\n if ((tooltipText || tooltipHTML) && tooltip) {\r\n const tooltipPosition = this.get(\"tooltipPosition\");\r\n const tooltipTarget = this.getPrivate(\"tooltipTarget\", this);\r\n if (tooltipPosition == \"fixed\" || !point) {\r\n this._display._setMatrix();\r\n point = this.toGlobal(tooltipTarget._getTooltipPoint());\r\n }\r\n tooltip.set(\"pointTo\", point);\r\n tooltip.set(\"tooltipTarget\", tooltipTarget);\r\n if (!tooltip.get(\"x\")) {\r\n tooltip.set(\"x\", point.x);\r\n }\r\n if (!tooltip.get(\"y\")) {\r\n tooltip.set(\"y\", point.y);\r\n }\r\n if (tooltipText) {\r\n tooltip.label.set(\"text\", tooltipText);\r\n }\r\n if (tooltipHTML) {\r\n tooltip.label.set(\"html\", tooltipHTML);\r\n }\r\n const dataItem = this.dataItem;\r\n if (dataItem) {\r\n tooltip.label._setDataItem(dataItem);\r\n }\r\n if (this.get(\"showTooltipOn\") == \"always\" && (point.x < 0 || point.x > this._root.width() || point.y < 0 || point.y > this._root.height())) {\r\n this.hideTooltip();\r\n return;\r\n }\r\n tooltip.label.text.markDirtyText();\r\n const promise = tooltip.show();\r\n this.setPrivateRaw(\"showingTooltip\", true);\r\n return promise;\r\n }\r\n }\r\n }\r\n /**\r\n * Hides element's [[Tooltip]].\r\n */\r\n hideTooltip() {\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n if (tooltip.get(\"tooltipTarget\") == this.getPrivate(\"tooltipTarget\", this) || this.get(\"tooltip\") == tooltip) {\r\n let timeout = tooltip.get(\"keepTargetHover\") && tooltip.get(\"stateAnimationDuration\", 0) == 0 ? 400 : undefined;\r\n const promise = tooltip.hide(timeout);\r\n this.setPrivateRaw(\"showingTooltip\", false);\r\n return promise;\r\n }\r\n }\r\n }\r\n _getTooltipPoint() {\r\n const bounds = this._localBounds;\r\n if (bounds) {\r\n let x = 0;\r\n let y = 0;\r\n if (!this.get(\"isMeasured\")) {\r\n x = $utils.relativeToValue(this.get(\"tooltipX\", 0), this.width());\r\n y = $utils.relativeToValue(this.get(\"tooltipY\", 0), this.height());\r\n }\r\n else {\r\n x = bounds.left + $utils.relativeToValue(this.get(\"tooltipX\", 0), bounds.right - bounds.left);\r\n y = bounds.top + $utils.relativeToValue(this.get(\"tooltipY\", 0), bounds.bottom - bounds.top);\r\n }\r\n return { x, y };\r\n }\r\n return { x: 0, y: 0 };\r\n }\r\n /**\r\n * Returns [[Tooltip]] used for this element.\r\n *\r\n * @return Tooltip\r\n */\r\n getTooltip() {\r\n let tooltip = this.get(\"tooltip\");\r\n if (!tooltip) {\r\n let parent = this.parent;\r\n if (parent) {\r\n return parent.getTooltip();\r\n }\r\n }\r\n else {\r\n return tooltip;\r\n }\r\n }\r\n _updatePosition() {\r\n const parent = this.parent;\r\n let dx = this.get(\"dx\", 0);\r\n let dy = this.get(\"dy\", 0);\r\n let x = this.get(\"x\");\r\n let _x = this.getPrivate(\"x\");\r\n let xx = 0;\r\n let yy = 0;\r\n const position = this.get(\"position\");\r\n if (x instanceof Percent) {\r\n if (parent) {\r\n x = parent.innerWidth() * x.value + parent.get(\"paddingLeft\", 0);\r\n }\r\n else {\r\n x = 0;\r\n }\r\n }\r\n if ($type.isNumber(x)) {\r\n xx = x + dx;\r\n }\r\n else {\r\n if (_x != null) {\r\n xx = _x;\r\n }\r\n else if (parent) {\r\n if (position == \"relative\") {\r\n xx = parent.get(\"paddingLeft\", 0) + dx;\r\n }\r\n }\r\n }\r\n let y = this.get(\"y\");\r\n let _y = this.getPrivate(\"y\");\r\n if (y instanceof Percent) {\r\n if (parent) {\r\n y = parent.innerHeight() * y.value + parent.get(\"paddingTop\", 0);\r\n }\r\n else {\r\n y = 0;\r\n }\r\n }\r\n if ($type.isNumber(y)) {\r\n yy = y + dy;\r\n }\r\n else {\r\n if (_y != null) {\r\n yy = _y;\r\n }\r\n else if (parent) {\r\n if (position == \"relative\") {\r\n yy = parent.get(\"paddingTop\", 0) + dy;\r\n }\r\n }\r\n }\r\n const display = this._display;\r\n if (display.x != xx || display.y != yy) {\r\n display.invalidateBounds();\r\n display.x = xx;\r\n display.y = yy;\r\n const eventType = \"positionchanged\";\r\n if (this.events.isEnabled(eventType)) {\r\n this.events.dispatch(eventType, { type: eventType, target: this });\r\n }\r\n }\r\n // Update tooltip position together with the Sprite\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n /**\r\n * Returns element's actual X position in pixels.\r\n *\r\n * @return X (px)\r\n */\r\n x() {\r\n let x = this.get(\"x\");\r\n let _x = this.getPrivate(\"x\");\r\n const parent = this.parent;\r\n if (parent) {\r\n if (x instanceof Percent) {\r\n return $utils.relativeToValue(x, parent.innerWidth()) + parent.get(\"paddingLeft\", 0);\r\n }\r\n else {\r\n if (!$type.isNumber(x)) {\r\n if (_x != null) {\r\n return _x;\r\n }\r\n else {\r\n return parent.get(\"paddingLeft\", this._display.x);\r\n }\r\n }\r\n else {\r\n return x;\r\n }\r\n }\r\n }\r\n return this._display.x;\r\n }\r\n /**\r\n * Returns element's actual Y position in pixels.\r\n *\r\n * @return Y (px)\r\n */\r\n y() {\r\n let _y = this.getPrivate(\"y\");\r\n if (_y != null) {\r\n return _y;\r\n }\r\n let y = this.get(\"y\");\r\n const parent = this.parent;\r\n if (parent) {\r\n if (y instanceof Percent) {\r\n return $utils.relativeToValue(y, parent.innerHeight()) + parent.get(\"paddingTop\", 0);\r\n }\r\n else {\r\n if (!$type.isNumber(y)) {\r\n if (_y != null) {\r\n return _y;\r\n }\r\n else {\r\n return parent.get(\"paddingTop\", this._display.y);\r\n }\r\n }\r\n else {\r\n return y;\r\n }\r\n }\r\n }\r\n return this._display.y;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n this._display.dispose();\r\n this._removeTemplateField();\r\n this._removeParent(this.parent);\r\n this._root._removeFocusElement(this);\r\n const tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.dispose();\r\n }\r\n this.markDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n adjustedLocalBounds() {\r\n this._fixMinBounds(this._adjustedLocalBounds);\r\n return this._adjustedLocalBounds;\r\n }\r\n /**\r\n * Returns local coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n localBounds() {\r\n return this._localBounds;\r\n }\r\n /**\r\n * Returns adjusted local coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n bounds() {\r\n const bounds = this._adjustedLocalBounds;\r\n const x = this.x();\r\n const y = this.y();\r\n return { left: bounds.left + x, right: bounds.right + x, top: bounds.top + y, bottom: bounds.bottom + y };\r\n }\r\n /**\r\n * Returns global coordinates of the element's bounds.\r\n *\r\n * @ignore\r\n * @return Global bounds\r\n */\r\n globalBounds() {\r\n const bounds = this.localBounds();\r\n const p0 = this.toGlobal({ x: bounds.left, y: bounds.top });\r\n const p1 = this.toGlobal({ x: bounds.right, y: bounds.top });\r\n const p2 = this.toGlobal({ x: bounds.right, y: bounds.bottom });\r\n const p3 = this.toGlobal({ x: bounds.left, y: bounds.bottom });\r\n return {\r\n left: Math.min(p0.x, p1.x, p2.x, p3.x),\r\n top: Math.min(p0.y, p1.y, p2.y, p3.y),\r\n right: Math.max(p0.x, p1.x, p2.x, p3.x),\r\n bottom: Math.max(p0.y, p1.y, p2.y, p3.y)\r\n };\r\n }\r\n _onShow(_duration) {\r\n }\r\n _onHide(_duration) {\r\n }\r\n /**\r\n * Plays initial reveal animation regardless if element is currently hidden\r\n * or visible.\r\n *\r\n * @param duration Duration of the animation in milliseconds\r\n * @param delay Delay showing of the element by X milliseconds\r\n * @return Promise\r\n */\r\n appear(duration, delay) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n yield this.hide(0);\r\n if (delay) {\r\n return new Promise((success, _error) => {\r\n this.setTimeout(() => {\r\n success(this.show(duration));\r\n }, delay);\r\n });\r\n }\r\n else {\r\n return this.show(duration);\r\n }\r\n });\r\n }\r\n /**\r\n * Shows currently hidden element and returns a `Promise` which completes\r\n * when all showing animations are finished.\r\n *\r\n * ```TypeScript\r\n * series.show().then(function(ev) {\r\n * console.log(\"Series is now fully visible\");\r\n * })\r\n * ```\r\n * ```JavaScript\r\n * series.show().then(function(ev) {\r\n * console.log(\"Series is now fully visible\");\r\n * })\r\n * ```\r\n *\r\n * @return Promise\r\n */\r\n show(duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!this._isShowing) {\r\n this._isHidden = false;\r\n this._isShowing = true;\r\n this._isHiding = false;\r\n if (this.states.lookup(\"default\").get(\"visible\")) {\r\n this.set(\"visible\", true);\r\n }\r\n this._onShow(duration);\r\n const animations = this.states.applyAnimate(\"default\", duration);\r\n yield waitForAnimations(animations);\r\n this._isShowing = false;\r\n }\r\n });\r\n }\r\n /**\r\n * Hides the element and returns a `Promise` which completes when all hiding\r\n * animations are finished.\r\n *\r\n * ```TypeScript\r\n * series.hide().then(function(ev) {\r\n * console.log(\"Series finished hiding\");\r\n * })\r\n * ```\r\n * ```JavaScript\r\n * series.hide().then(function(ev) {\r\n * console.log(\"Series finished hiding\");\r\n * })\r\n * ```\r\n *\r\n * @return Promise\r\n */\r\n hide(duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (!this._isHiding && !this._isHidden) {\r\n this._isHiding = true;\r\n this._isShowing = false;\r\n let state = this.states.lookup(\"hidden\");\r\n if (!state) {\r\n state = this.states.create(\"hidden\", {\r\n \"opacity\": 0,\r\n \"visible\": false\r\n });\r\n }\r\n this._isHidden = true;\r\n this._onHide(duration);\r\n const animations = this.states.applyAnimate(\"hidden\", duration);\r\n yield waitForAnimations(animations);\r\n this._isHiding = false;\r\n }\r\n });\r\n }\r\n /**\r\n * Returns `true` if this element is currently hidden.\r\n *\r\n * @return Is hidden?\r\n */\r\n isHidden() {\r\n return this._isHidden;\r\n }\r\n /**\r\n * Returns `true` if this element is currently animating to a default state.\r\n *\r\n * @return Is showing?\r\n */\r\n isShowing() {\r\n return this._isShowing;\r\n }\r\n /**\r\n * Returns `true` if this element is currently animating to a hidden state.\r\n *\r\n * @return Is hiding?\r\n */\r\n isHiding() {\r\n return this._isHiding;\r\n }\r\n /**\r\n * Returns `true` if this element is currently hovered by a pointer.\r\n *\r\n * @return Is hovered?\r\n */\r\n isHover() {\r\n return this._display.hovering();\r\n }\r\n /**\r\n * Returns `true` if this element does currently have focus.\r\n *\r\n * @return Is focused?\r\n */\r\n isFocus() {\r\n return this._root.focused(this);\r\n }\r\n /**\r\n * Returns `true` if this element is currently being dragged.\r\n *\r\n * @return Is dragged?\r\n */\r\n isDragging() {\r\n return this._isDragging;\r\n }\r\n /**\r\n * Returns `false` if if either public or private setting `visible` is set\r\n * to `false`, or `forceHidden` is set to `true`.\r\n *\r\n * @return Visible?\r\n */\r\n isVisible() {\r\n if (this.get(\"visible\") && this.getPrivate(\"visible\") && !this.get(\"forceHidden\")) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**\r\n * Same as `isVisible()`, except it checks all ascendants, too.\r\n *\r\n * @since 5.2.7\r\n * @return Visible?\r\n */\r\n isVisibleDeep() {\r\n return this._parent ? (this._parent.isVisibleDeep() && this.isVisible()) : this.isVisible();\r\n }\r\n /**\r\n * Returns an actual opacity of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.2.11\r\n */\r\n compositeOpacity() {\r\n const opacity = this.get(\"opacity\", 1);\r\n return this._parent ? (this._parent.compositeOpacity() * opacity) : opacity;\r\n }\r\n /**\r\n * Returns an actual scale of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.9.2\r\n */\r\n compositeScale() {\r\n const scale = this.get(\"scale\", 1);\r\n return this._parent ? (this._parent.compositeScale() * scale) : scale;\r\n }\r\n /**\r\n * Returns an actual roation of the element, taking into account all parents.\r\n *\r\n * @return Opacity\r\n * @since 5.9.2\r\n */\r\n compositeRotation() {\r\n const rotation = this.get(\"rotation\", 0);\r\n return this._parent ? (this._parent.compositeRotation() + rotation) : rotation;\r\n }\r\n /**\r\n * Returns width of this element in pixels.\r\n *\r\n * @return Width (px)\r\n */\r\n width() {\r\n let width = this.get(\"width\");\r\n let maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n let minWidth = this.get(\"minWidth\", this.getPrivate(\"minWidth\"));\r\n let privateWidth = this.getPrivate(\"width\");\r\n let w = 0;\r\n if ($type.isNumber(privateWidth)) {\r\n w = privateWidth;\r\n }\r\n else {\r\n if (width == null) {\r\n if (this._adjustedLocalBounds) {\r\n w = this._adjustedLocalBounds.right - this._adjustedLocalBounds.left;\r\n }\r\n }\r\n else {\r\n if (width instanceof Percent) {\r\n const parent = this.parent;\r\n if (parent) {\r\n w = parent.innerWidth() * width.value;\r\n }\r\n else {\r\n w = this._root.width() * width.value;\r\n }\r\n }\r\n else if ($type.isNumber(width)) {\r\n w = width;\r\n }\r\n }\r\n }\r\n if ($type.isNumber(minWidth)) {\r\n w = Math.max(minWidth, w);\r\n }\r\n if ($type.isNumber(maxWidth)) {\r\n w = Math.min(maxWidth, w);\r\n }\r\n return w;\r\n }\r\n /**\r\n * Returns maximum allowed width of this element in pixels.\r\n *\r\n * @return Maximum width (px)\r\n */\r\n maxWidth() {\r\n let maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n if ($type.isNumber(maxWidth)) {\r\n return maxWidth;\r\n }\r\n else {\r\n let width = this.get(\"width\");\r\n if ($type.isNumber(width)) {\r\n return width;\r\n }\r\n }\r\n const parent = this.parent;\r\n if (parent) {\r\n return parent.innerWidth();\r\n }\r\n return this._root.width();\r\n }\r\n /**\r\n * Returns maximum allowed height of this element in pixels.\r\n *\r\n * @return Maximum height (px)\r\n */\r\n maxHeight() {\r\n let maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n if ($type.isNumber(maxHeight)) {\r\n return maxHeight;\r\n }\r\n else {\r\n let height = this.get(\"height\");\r\n if ($type.isNumber(height)) {\r\n return height;\r\n }\r\n }\r\n const parent = this.parent;\r\n if (parent) {\r\n return parent.innerHeight();\r\n }\r\n return this._root.height();\r\n }\r\n /**\r\n * Returns height of this element in pixels.\r\n *\r\n * @return Height (px)\r\n */\r\n height() {\r\n let height = this.get(\"height\");\r\n let maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n let minHeight = this.get(\"minHeight\", this.getPrivate(\"minHeight\"));\r\n let privateHeight = this.getPrivate(\"height\");\r\n let h = 0;\r\n if ($type.isNumber(privateHeight)) {\r\n h = privateHeight;\r\n }\r\n else {\r\n if (height == null) {\r\n if (this._adjustedLocalBounds) {\r\n h = this._adjustedLocalBounds.bottom - this._adjustedLocalBounds.top;\r\n }\r\n }\r\n else {\r\n if (height instanceof Percent) {\r\n const parent = this.parent;\r\n if (parent) {\r\n h = parent.innerHeight() * height.value;\r\n }\r\n else {\r\n h = this._root.height() * height.value;\r\n }\r\n }\r\n else if ($type.isNumber(height)) {\r\n h = height;\r\n }\r\n }\r\n }\r\n if ($type.isNumber(minHeight)) {\r\n h = Math.max(minHeight, h);\r\n }\r\n if ($type.isNumber(maxHeight)) {\r\n h = Math.min(maxHeight, h);\r\n }\r\n return h;\r\n }\r\n _findStaticTemplate(f) {\r\n // templateField overrides template\r\n if (this._templateField && f(this._templateField)) {\r\n return this._templateField;\r\n }\r\n return super._findStaticTemplate(f);\r\n }\r\n _walkParents(f) {\r\n if (this._parent) {\r\n this._walkParent(f);\r\n }\r\n }\r\n _walkParent(f) {\r\n if (this._parent) {\r\n this._parent._walkParent(f);\r\n }\r\n f(this);\r\n }\r\n /**\r\n * Parent [[Container]] of this element.\r\n *\r\n * @return Parent container\r\n */\r\n get parent() {\r\n return this._parent;\r\n }\r\n _setParent(parent, updateChildren = false) {\r\n const prevParent = this._parent;\r\n if (parent !== prevParent) {\r\n this.markDirtyBounds();\r\n parent.markDirty();\r\n this._parent = parent;\r\n if (updateChildren) {\r\n this._removeParent(prevParent);\r\n if (parent) {\r\n this._addPercentageSizeChildren();\r\n this._addPercentagePositionChildren();\r\n }\r\n }\r\n this.markDirtyPosition();\r\n this._applyThemes();\r\n }\r\n }\r\n /**\r\n * Returns an instance of [[NumberFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return NumberFormatter instace\r\n */\r\n getNumberFormatter() {\r\n return this.get(\"numberFormatter\", this._root.numberFormatter);\r\n }\r\n /**\r\n * Returns an instance of [[DateFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return DateFormatter instace\r\n */\r\n getDateFormatter() {\r\n return this.get(\"dateFormatter\", this._root.dateFormatter);\r\n }\r\n /**\r\n * Returns an instance of [[DurationFormatter]] used in this element.\r\n *\r\n * If this element does not have it set, global one form [[Root]] is used.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/using-formatters/} for more info\r\n * @return DurationFormatter instace\r\n */\r\n getDurationFormatter() {\r\n return this.get(\"durationFormatter\", this._root.durationFormatter);\r\n }\r\n /**\r\n * Converts X/Y coordinate within this element to a global coordinate.\r\n *\r\n * @param point Local coordinate\r\n * @return Global coordinate\r\n */\r\n toGlobal(point) {\r\n return this._display.toGlobal(point);\r\n }\r\n /**\r\n * Converts global X/Y coordinate to a coordinate within this element.\r\n *\r\n * @param point Global coordinate\r\n * @return Local coordinate\r\n */\r\n toLocal(point) {\r\n return this._display.toLocal(point);\r\n }\r\n _getDownPoint() {\r\n const id = this._getDownPointId();\r\n if (id) {\r\n return this._downPoints[id];\r\n }\r\n }\r\n _getDownPointId() {\r\n if (this._downPoints) {\r\n return $object.keysOrdered(this._downPoints, (a, b) => {\r\n if (a > b) {\r\n return 1;\r\n }\r\n if (a < b) {\r\n return -1;\r\n }\r\n return 0;\r\n })[0];\r\n }\r\n }\r\n /**\r\n * Moves sprite to the end of the parent's children array.\r\n *\r\n * Depending on `layout` setting of the parten container, it may effect the\r\n * positioning or overlapping order of the elements.\r\n */\r\n toFront() {\r\n const parent = this.parent;\r\n if (parent) {\r\n parent.children.moveValue(this, parent.children.length - 1);\r\n }\r\n }\r\n /**\r\n * Moves sprite to the beginning of the parent's children array.\r\n *\r\n * Depending on `layout` setting of the parten container, it may effect the\r\n * positioning or overlapping order of the elements.\r\n */\r\n toBack() {\r\n const parent = this.parent;\r\n if (parent) {\r\n parent.children.moveValue(this, 0);\r\n }\r\n }\r\n}\r\nObject.defineProperty(Sprite, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Sprite\"\r\n});\r\nObject.defineProperty(Sprite, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([Sprite.className])\r\n});\r\n//# sourceMappingURL=Sprite.js.map","import { Entity } from \"../../util/Entity\";\r\n/**\r\n * Base class for patterns.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\r\n */\r\nexport class Pattern extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_display\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeGraphics()\r\n });\r\n Object.defineProperty(this, \"_backgroundDisplay\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeGraphics()\r\n });\r\n Object.defineProperty(this, \"_clear\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_pattern\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _afterNew() {\r\n // Applying themes because pattern will not have parent\r\n super._afterNewApplyThemes();\r\n }\r\n get pattern() {\r\n return this._pattern;\r\n }\r\n _draw() { }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"repetition\") || this.isDirty(\"width\") || this.isDirty(\"height\") || this.isDirty(\"rotation\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"colorOpacity\") || this.isDirty(\"fillOpacity\")) {\r\n this._clear = true;\r\n }\r\n this._checkDirtyFill();\r\n }\r\n _checkDirtyFill() {\r\n if (this.isDirty(\"color\") || this.isDirty(\"fill\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n const repetition = this.get(\"repetition\", \"\");\r\n const width = this.get(\"width\", 100);\r\n const height = this.get(\"height\", 100);\r\n const fill = this.get(\"fill\");\r\n const fillOpacity = this.get(\"fillOpacity\", 1);\r\n const backgroundDisplay = this._backgroundDisplay;\r\n const display = this._display;\r\n display.clear();\r\n backgroundDisplay.clear();\r\n if (fill && (fillOpacity > 0)) {\r\n backgroundDisplay.beginFill(fill, fillOpacity);\r\n backgroundDisplay.drawRect(0, 0, width, height);\r\n backgroundDisplay.endFill();\r\n }\r\n display.angle = this.get(\"rotation\", 0);\r\n //display.pivot = { x: width / 2, y: height / 2 };\r\n this._draw();\r\n this._pattern = this._root._renderer.createPattern(display, backgroundDisplay, repetition, width, height);\r\n }\r\n this._clear = false;\r\n }\r\n}\r\nObject.defineProperty(Pattern, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Pattern\"\r\n});\r\nObject.defineProperty(Pattern, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([Pattern.className])\r\n});\r\n//# sourceMappingURL=Pattern.js.map","import { Pattern } from \"./Pattern\";\r\n/**\r\n * Picture pattern.\r\n *\r\n * @since 5.2.15\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\r\n */\r\nexport class PicturePattern extends Pattern {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_image\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n this._clear = true;\r\n if (this.isDirty(\"src\")) {\r\n this._load();\r\n }\r\n const canvas = this.get(\"canvas\");\r\n if (canvas) {\r\n this.set(\"width\", canvas.width);\r\n this.set(\"height\", canvas.height);\r\n }\r\n }\r\n _draw() {\r\n super._draw();\r\n const image = this._image;\r\n if (image) {\r\n const patternWidth = this.get(\"width\", 100);\r\n const patternHeight = this.get(\"height\", 100);\r\n // Fit\r\n const fit = this.get(\"fit\", \"image\");\r\n let width = 0;\r\n let height = 0;\r\n if (fit == \"pattern\") {\r\n width = patternWidth;\r\n height = patternHeight;\r\n }\r\n else {\r\n width = image.width;\r\n height = image.height;\r\n if (fit == \"image\") {\r\n this.set(\"width\", width);\r\n this.set(\"height\", height);\r\n }\r\n }\r\n // Position\r\n const centered = this.get(\"centered\", true);\r\n let x = 0;\r\n let y = 0;\r\n if (centered) {\r\n x = patternWidth / 2 - width / 2;\r\n y = patternHeight / 2 - height / 2;\r\n }\r\n this._display.image(image, width, height, x, y);\r\n }\r\n const canvas = this.get(\"canvas\");\r\n if (canvas) {\r\n this._display.image(canvas, canvas.width, canvas.height, 0, 0);\r\n }\r\n }\r\n _load() {\r\n const src = this.get(\"src\");\r\n if (src) {\r\n const image = new Image();\r\n //image.crossOrigin = \"Anonymous\";\r\n image.src = src;\r\n image.decode().then(() => {\r\n this._image = image;\r\n this._draw();\r\n if (this.events.isEnabled(\"loaded\")) {\r\n this.events.dispatch(\"loaded\", { type: \"loaded\", target: this });\r\n }\r\n }).catch((_error) => {\r\n // TODO: maybe raise error?\r\n });\r\n }\r\n }\r\n}\r\nObject.defineProperty(PicturePattern, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"PicturePattern\"\r\n});\r\nObject.defineProperty(PicturePattern, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Pattern.classNames.concat([PicturePattern.className])\r\n});\r\n//# sourceMappingURL=PicturePattern.js.map","/**\r\n * From https://github.com/pixijs/pixi.js/blob/3dd0ff9a935f0bc13a09aefff9eb2872f02c51b9/packages/canvas/canvas-renderer/src/utils/mapCanvasBlendModesToPixi.ts#L13\r\n */\r\nexport var BlendMode;\r\n(function (BlendMode) {\r\n BlendMode[\"ADD\"] = \"lighter\";\r\n BlendMode[\"COLOR\"] = \"color\";\r\n BlendMode[\"COLOR_BURN\"] = \"color-burn\";\r\n BlendMode[\"COLOR_DODGE\"] = \"color-dodge\";\r\n BlendMode[\"DARKEN\"] = \"darken\";\r\n BlendMode[\"DIFFERENCE\"] = \"difference\";\r\n BlendMode[\"DST_OVER\"] = \"destination-over\";\r\n BlendMode[\"EXCLUSION\"] = \"exclusion\";\r\n BlendMode[\"HARD_LIGHT\"] = \"hard-light\";\r\n BlendMode[\"HUE\"] = \"hue\";\r\n BlendMode[\"LIGHTEN\"] = \"lighten\";\r\n BlendMode[\"LUMINOSITY\"] = \"luminosity\";\r\n BlendMode[\"MULTIPLY\"] = \"multiply\";\r\n BlendMode[\"NORMAL\"] = \"source-over\";\r\n BlendMode[\"OVERLAY\"] = \"overlay\";\r\n BlendMode[\"SATURATION\"] = \"saturation\";\r\n BlendMode[\"SCREEN\"] = \"screen\";\r\n BlendMode[\"SOFT_LIGHT\"] = \"soft-light\";\r\n BlendMode[\"SRC_ATOP\"] = \"source-atop\";\r\n BlendMode[\"XOR\"] = \"xor\";\r\n})(BlendMode || (BlendMode = {}));\r\n//# sourceMappingURL=Renderer.js.map","import { PicturePattern } from \"../render/patterns/PicturePattern\";\r\nimport { Sprite } from \"./Sprite\";\r\nimport { BlendMode } from \"./backend/Renderer\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $array from \"../util/Array\";\r\nexport const visualSettings = [\"fill\", \"fillOpacity\", \"stroke\", \"strokeWidth\", \"strokeOpacity\", \"fillPattern\", \"strokePattern\", \"fillGradient\", \"strokeGradient\", \"strokeDasharray\", \"strokeDashoffset\", \"shadowBlur\", \"shadowColor\", \"shadowOpacity\", \"shadowOffsetX\", \"shadowOffsetY\", \"blur\", \"sepia\", \"invert\", \"brightness\", \"hue\", \"contrast\", \"saturate\"];\r\n/**\r\n * Base class used for drawing shapes.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Graphics extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_display\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeGraphics()\r\n });\r\n Object.defineProperty(this, \"_clear\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"draw\") || this.isDirty(\"svgPath\")) {\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"stroke\") || this.isDirty(\"visible\") || this.isDirty(\"forceHidden\") || this.isDirty(\"scale\") || this.isDirty(\"fillGradient\") || this.isDirty(\"strokeGradient\") || this.isDirty(\"fillPattern\") || this.isDirty(\"strokePattern\") || this.isDirty(\"fillOpacity\") || this.isDirty(\"strokeOpacity\") || this.isDirty(\"strokeWidth\") || this.isDirty(\"draw\") || this.isDirty(\"blendMode\") || this.isDirty(\"strokeDasharray\") || this.isDirty(\"strokeDashoffset\") || this.isDirty(\"svgPath\") || this.isDirty(\"lineJoin\") || this.isDirty(\"shadowColor\") || this.isDirty(\"shadowBlur\") || this.isDirty(\"shadowOffsetX\") || this.isDirty(\"shadowOffsetY\")) {\r\n this._clear = true;\r\n }\r\n this._display.crisp = this.get(\"crisp\", false);\r\n if (this.isDirty(\"fillGradient\")) {\r\n const gradient = this.get(\"fillGradient\");\r\n if (gradient) {\r\n this._display.isMeasured = true;\r\n const gradientTarget = gradient.get(\"target\");\r\n if (gradientTarget) {\r\n this._disposers.push(gradientTarget.events.on(\"boundschanged\", () => {\r\n this._markDirtyKey(\"fill\");\r\n }));\r\n this._disposers.push(gradientTarget.events.on(\"positionchanged\", () => {\r\n this._markDirtyKey(\"fill\");\r\n }));\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"strokeGradient\")) {\r\n const gradient = this.get(\"strokeGradient\");\r\n if (gradient) {\r\n this._display.isMeasured = true;\r\n const gradientTarget = gradient.get(\"target\");\r\n if (gradientTarget) {\r\n this._disposers.push(gradientTarget.events.on(\"boundschanged\", () => {\r\n this._markDirtyKey(\"stroke\");\r\n }));\r\n this._disposers.push(gradientTarget.events.on(\"positionchanged\", () => {\r\n this._markDirtyKey(\"stroke\");\r\n }));\r\n }\r\n }\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n this.markDirtyBounds();\r\n this.markDirtyLayer();\r\n this._display.clear();\r\n let strokeDasharray = this.get(\"strokeDasharray\");\r\n if ($type.isNumber(strokeDasharray)) {\r\n if (strokeDasharray < 0.5) {\r\n strokeDasharray = [0];\r\n }\r\n else {\r\n strokeDasharray = [strokeDasharray];\r\n }\r\n }\r\n this._display.setLineDash(strokeDasharray);\r\n const strokeDashoffset = this.get(\"strokeDashoffset\");\r\n if (strokeDashoffset) {\r\n this._display.setLineDashOffset(strokeDashoffset);\r\n }\r\n const blendMode = this.get(\"blendMode\", BlendMode.NORMAL);\r\n this._display.blendMode = blendMode;\r\n const draw = this.get(\"draw\");\r\n if (draw && typeof draw === \"function\") {\r\n draw(this._display, this);\r\n }\r\n const svgPath = this.get(\"svgPath\");\r\n if (svgPath != null) {\r\n this._display.svgPath(svgPath);\r\n }\r\n }\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n if (this._clear) {\r\n const fill = this.get(\"fill\");\r\n const fillGradient = this.get(\"fillGradient\");\r\n const fillPattern = this.get(\"fillPattern\");\r\n const fillOpacity = this.get(\"fillOpacity\");\r\n const stroke = this.get(\"stroke\");\r\n const strokeGradient = this.get(\"strokeGradient\");\r\n const strokePattern = this.get(\"strokePattern\");\r\n const shadowColor = this.get(\"shadowColor\");\r\n const shadowBlur = this.get(\"shadowBlur\");\r\n const shadowOffsetX = this.get(\"shadowOffsetX\");\r\n const shadowOffsetY = this.get(\"shadowOffsetY\");\r\n const shadowOpacity = this.get(\"shadowOpacity\");\r\n if (shadowColor && (shadowBlur || shadowOffsetX || shadowOffsetY)) {\r\n this._display.shadow(shadowColor, shadowBlur, shadowOffsetX, shadowOffsetY, shadowOpacity);\r\n }\r\n if (fill && !fillGradient) {\r\n this._display.beginFill(fill, fillOpacity);\r\n this._display.endFill();\r\n }\r\n if (fillGradient) {\r\n if (fill) {\r\n const stops = fillGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && fill) {\r\n stop.color = fill;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = fillOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n }\r\n const gradient = fillGradient.getFill(this);\r\n if (gradient) {\r\n this._display.beginFill(gradient, fillOpacity);\r\n this._display.endFill();\r\n }\r\n }\r\n if (fillPattern) {\r\n const pattern = fillPattern.pattern;\r\n if (pattern) {\r\n this._display.beginFill(pattern, fillOpacity);\r\n this._display.endFill();\r\n if (fillPattern instanceof PicturePattern) {\r\n fillPattern.events.once(\"loaded\", () => {\r\n this._clear = true;\r\n this.markDirty();\r\n });\r\n }\r\n }\r\n }\r\n if (stroke || strokeGradient || strokePattern) {\r\n const strokeOpacity = this.get(\"strokeOpacity\");\r\n let strokeWidth = this.get(\"strokeWidth\", 1);\r\n if (this.get(\"nonScalingStroke\")) {\r\n strokeWidth = strokeWidth / this.get(\"scale\", 1);\r\n }\r\n if (this.get(\"crisp\")) {\r\n strokeWidth /= this._root._renderer.resolution;\r\n }\r\n const lineJoin = this.get(\"lineJoin\");\r\n if (stroke && !strokeGradient) {\r\n this._display.lineStyle(strokeWidth, stroke, strokeOpacity, lineJoin);\r\n this._display.endStroke();\r\n }\r\n if (strokeGradient) {\r\n const stops = strokeGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && stroke) {\r\n stop.color = stroke;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = strokeOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n const gradient = strokeGradient.getFill(this);\r\n if (gradient) {\r\n this._display.lineStyle(strokeWidth, gradient, strokeOpacity, lineJoin);\r\n this._display.endStroke();\r\n }\r\n }\r\n if (strokePattern) {\r\n /*\r\n let changed = false;\r\n \r\n if (stroke && (!strokePattern.get(\"color\") || strokePattern.get(\"colorInherited\"))) {\r\n strokePattern.set(\"color\", stroke);\r\n strokePattern.set(\"colorInherited\", true);\r\n changed = true;\r\n }\r\n if (changed) {\r\n // @todo: is this OK?\r\n strokePattern._changed();\r\n }\r\n */\r\n let pattern = strokePattern.pattern;\r\n if (pattern) {\r\n this._display.lineStyle(strokeWidth, pattern, strokeOpacity, lineJoin);\r\n this._display.endStroke();\r\n if (strokePattern instanceof PicturePattern) {\r\n strokePattern.events.once(\"loaded\", () => {\r\n this._clear = true;\r\n this.markDirty();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n if (this.getPrivate(\"showingTooltip\")) {\r\n this.showTooltip();\r\n }\r\n }\r\n this._clear = false;\r\n }\r\n}\r\nObject.defineProperty(Graphics, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Graphics\"\r\n});\r\nObject.defineProperty(Graphics, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Sprite.classNames.concat([Graphics.className])\r\n});\r\n//# sourceMappingURL=Graphics.js.map","import { Graphics } from \"./Graphics\";\r\n/**\r\n * Draws a rectangle.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Rectangle extends Graphics {\r\n _afterNew() {\r\n super._afterNew();\r\n this._display.isMeasured = true;\r\n this.setPrivateRaw(\"trustBounds\", true);\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"width\") || this.isDirty(\"height\") || this.isPrivateDirty(\"width\") || this.isPrivateDirty(\"height\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear && !this.get(\"draw\")) {\r\n this._draw();\r\n }\r\n }\r\n _draw() {\r\n this._display.drawRect(0, 0, this.width(), this.height());\r\n }\r\n _updateSize() {\r\n this.markDirty();\r\n this._clear = true;\r\n }\r\n}\r\nObject.defineProperty(Rectangle, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Rectangle\"\r\n});\r\nObject.defineProperty(Rectangle, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Graphics.classNames.concat([Rectangle.className])\r\n});\r\n//# sourceMappingURL=Rectangle.js.map","import { Entity } from \"../util/Entity\";\r\nexport function eachChildren(container, f) {\r\n if (container.get(\"reverseChildren\", false)) {\r\n container.children.eachReverse(f);\r\n }\r\n else {\r\n container.children.each(f);\r\n }\r\n}\r\n/**\r\n * Base class for [[Container]] layouts.\r\n */\r\nexport class Layout extends Entity {\r\n}\r\nObject.defineProperty(Layout, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Layout\"\r\n});\r\nObject.defineProperty(Layout, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([Layout.className])\r\n});\r\n//# sourceMappingURL=Layout.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $type from \"../util/Type\";\r\nimport { Percent } from \"../util/Percent\";\r\n/**\r\n * A horizontal children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class HorizontalLayout extends Layout {\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingLeft = container.get(\"paddingLeft\", 0);\r\n let availableWidth = container.innerWidth();\r\n let totalPercent = 0;\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childWidth = child.get(\"width\");\r\n if (childWidth instanceof Percent) {\r\n totalPercent += childWidth.value;\r\n let w = availableWidth * childWidth.value;\r\n let minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\r\n if (minWidth > w) {\r\n availableWidth -= minWidth;\r\n totalPercent -= childWidth.value;\r\n }\r\n let maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\r\n if (w > maxWidth) {\r\n availableWidth -= maxWidth;\r\n totalPercent -= childWidth.value;\r\n }\r\n }\r\n else {\r\n if (!$type.isNumber(childWidth)) {\r\n childWidth = child.width();\r\n }\r\n availableWidth -= childWidth + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0);\r\n }\r\n }\r\n }\r\n });\r\n if (availableWidth <= 0 || availableWidth == Infinity) {\r\n availableWidth = .1;\r\n }\r\n //if (availableWidth > 0) {\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childWidth = child.get(\"width\");\r\n if (childWidth instanceof Percent) {\r\n let privateWidth = availableWidth * childWidth.value / totalPercent - child.get(\"marginLeft\", 0) - child.get(\"marginRight\", 0);\r\n let minWidth = child.get(\"minWidth\", child.getPrivate(\"minWidth\", -Infinity));\r\n let maxWidth = child.get(\"maxWidth\", child.getPrivate(\"maxWidth\", Infinity));\r\n privateWidth = Math.min(Math.max(minWidth, privateWidth), maxWidth);\r\n child.setPrivate(\"width\", privateWidth);\r\n }\r\n else {\r\n if (child._prevSettings.width instanceof Percent) {\r\n child.setPrivate(\"width\", undefined);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n //}\r\n let prevX = paddingLeft;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\") {\r\n if (child.isVisible()) {\r\n let bounds = child.adjustedLocalBounds();\r\n let marginLeft = child.get(\"marginLeft\", 0);\r\n let marginRight = child.get(\"marginRight\", 0);\r\n let maxWidth = child.get(\"maxWidth\");\r\n let left = bounds.left;\r\n let right = bounds.right;\r\n if (maxWidth) {\r\n if (right - left > maxWidth) {\r\n right = left + maxWidth;\r\n }\r\n }\r\n let x = prevX + marginLeft - left;\r\n child.setPrivate(\"x\", x);\r\n prevX = x + right + marginRight;\r\n }\r\n else {\r\n child.setPrivate(\"x\", undefined);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nObject.defineProperty(HorizontalLayout, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"HorizontalLayout\"\r\n});\r\nObject.defineProperty(HorizontalLayout, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Layout.classNames.concat([HorizontalLayout.className])\r\n});\r\n//# sourceMappingURL=HorizontalLayout.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $type from \"../util/Type\";\r\nimport { Percent } from \"../util/Percent\";\r\n/**\r\n * A vertical children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class VerticalLayout extends Layout {\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingTop = container.get(\"paddingTop\", 0);\r\n let availableHeight = container.innerHeight();\r\n let totalPercent = 0;\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childHeight = child.get(\"height\");\r\n if (childHeight instanceof Percent) {\r\n totalPercent += childHeight.value;\r\n let h = availableHeight * childHeight.value;\r\n let minHeight = child.get(\"minHeight\", child.getPrivate(\"minHeight\", -Infinity));\r\n if (minHeight > h) {\r\n availableHeight -= minHeight;\r\n totalPercent -= childHeight.value;\r\n }\r\n let maxHeight = child.get(\"maxHeight\", child.getPrivate(\"maxHeight\", Infinity));\r\n if (h > maxHeight) {\r\n availableHeight -= maxHeight;\r\n totalPercent -= childHeight.value;\r\n }\r\n }\r\n else {\r\n if (!$type.isNumber(childHeight)) {\r\n childHeight = child.height();\r\n }\r\n availableHeight -= childHeight + child.get(\"marginTop\", 0) + child.get(\"marginBottom\", 0);\r\n }\r\n }\r\n }\r\n });\r\n if (availableHeight <= 0 || availableHeight == Infinity) {\r\n availableHeight = .1;\r\n }\r\n //if (availableHeight > 0) {\r\n eachChildren(container, (child) => {\r\n if (child.isVisible()) {\r\n if (child.get(\"position\") == \"relative\") {\r\n let childHeight = child.get(\"height\");\r\n if (childHeight instanceof Percent) {\r\n let privateHeight = availableHeight * childHeight.value / totalPercent - child.get(\"marginTop\", 0) - child.get(\"marginBottom\", 0);\r\n let minHeight = child.get(\"minHeight\", child.getPrivate(\"minHeight\", -Infinity));\r\n let maxHeight = child.get(\"maxHeight\", child.getPrivate(\"maxHeight\", Infinity));\r\n privateHeight = Math.min(Math.max(minHeight, privateHeight), maxHeight);\r\n child.setPrivate(\"height\", privateHeight);\r\n }\r\n else {\r\n if (child._prevSettings.height instanceof Percent) {\r\n child.setPrivate(\"height\", undefined);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n //}\r\n let prevY = paddingTop;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\") {\r\n if (child.isVisible()) {\r\n let bounds = child.adjustedLocalBounds();\r\n let marginTop = child.get(\"marginTop\", 0);\r\n let top = bounds.top;\r\n let bottom = bounds.bottom;\r\n let maxHeight = child.get(\"maxHeight\");\r\n if (maxHeight) {\r\n if (bottom - top > maxHeight) {\r\n bottom = top + maxHeight;\r\n }\r\n }\r\n let marginBottom = child.get(\"marginBottom\", 0);\r\n let y = prevY + marginTop - top;\r\n child.setPrivate(\"y\", y);\r\n prevY = y + bottom + marginBottom;\r\n }\r\n else {\r\n child.setPrivate(\"y\", undefined);\r\n }\r\n }\r\n });\r\n }\r\n}\r\nObject.defineProperty(VerticalLayout, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"VerticalLayout\"\r\n});\r\nObject.defineProperty(VerticalLayout, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Layout.classNames.concat([VerticalLayout.className])\r\n});\r\n//# sourceMappingURL=VerticalLayout.js.map","import { Layout, eachChildren } from \"./Layout\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $math from \"../util/Math\";\r\n/**\r\n * A grid children layout for [[Container]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Layout} for more info\r\n */\r\nexport class GridLayout extends Layout {\r\n _afterNew() {\r\n this._setRawDefault(\"maxColumns\", Number.MAX_VALUE);\r\n super._afterNew();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateContainer(container) {\r\n let paddingLeft = container.get(\"paddingLeft\", 0);\r\n let paddingRight = container.get(\"paddingRight\", 0);\r\n let paddingTop = container.get(\"paddingTop\", 0);\r\n let availableWidth = container.maxWidth() - paddingLeft - paddingRight;\r\n let minCellWidth = availableWidth;\r\n let maxCellWidth = 1;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"visible\") && child.getPrivate(\"visible\") && !child.get(\"forceHidden\")) {\r\n if (child.get(\"position\") != \"absolute\") {\r\n let childWidth = child.width();\r\n if (childWidth < minCellWidth) {\r\n minCellWidth = childWidth;\r\n }\r\n if (childWidth > maxCellWidth) {\r\n maxCellWidth = childWidth;\r\n }\r\n }\r\n }\r\n });\r\n minCellWidth = $math.fitToRange(minCellWidth, 1, availableWidth);\r\n maxCellWidth = $math.fitToRange(maxCellWidth, 1, availableWidth);\r\n let columnCount = 1;\r\n if (this.get(\"fixedWidthGrid\")) {\r\n columnCount = availableWidth / maxCellWidth;\r\n }\r\n else {\r\n columnCount = availableWidth / minCellWidth;\r\n }\r\n columnCount = Math.max(1, Math.floor(columnCount));\r\n columnCount = Math.min(this.get(\"maxColumns\", Number.MAX_VALUE), columnCount);\r\n let columnWidths = this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\r\n let prevY = paddingTop;\r\n let column = 0;\r\n let maxColumnHeight = 0;\r\n columnCount = columnWidths.length;\r\n let prevX = paddingLeft;\r\n eachChildren(container, (child) => {\r\n if (child.get(\"position\") == \"relative\" && child.isVisible()) {\r\n const marginTop = child.get(\"marginTop\", 0);\r\n const marginBottom = child.get(\"marginBottom\", 0);\r\n let bounds = child.adjustedLocalBounds();\r\n let marginLeft = child.get(\"marginLeft\", 0);\r\n let marginRight = child.get(\"marginRight\", 0);\r\n let x = prevX + marginLeft - bounds.left;\r\n let y = prevY + marginTop - bounds.top;\r\n child.setPrivate(\"x\", x);\r\n child.setPrivate(\"y\", y);\r\n prevX += columnWidths[column] + marginRight;\r\n maxColumnHeight = Math.max(maxColumnHeight, child.height() + marginTop + marginBottom);\r\n column++;\r\n if (column >= columnCount) {\r\n column = 0;\r\n prevX = paddingLeft;\r\n prevY += maxColumnHeight;\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getColumnWidths(container, columnCount, maxCellWidth, availableWidth) {\r\n let totalWidth = 0;\r\n let columnWidths = [];\r\n let column = 0;\r\n eachChildren(container, (child) => {\r\n let bounds = child.adjustedLocalBounds();\r\n if (child.get(\"position\") != \"absolute\" && child.isVisible()) {\r\n if (this.get(\"fixedWidthGrid\")) {\r\n columnWidths[column] = maxCellWidth;\r\n }\r\n else {\r\n columnWidths[column] = Math.max(columnWidths[column] | 0, bounds.right - bounds.left + child.get(\"marginLeft\", 0) + child.get(\"marginRight\", 0));\r\n }\r\n if (column < container.children.length - 1) {\r\n column++;\r\n if (column == columnCount) {\r\n column = 0;\r\n }\r\n }\r\n }\r\n });\r\n $array.each(columnWidths, (w) => {\r\n totalWidth += w;\r\n });\r\n if (totalWidth > availableWidth) {\r\n if (columnCount > 2) {\r\n columnCount -= 1;\r\n return this.getColumnWidths(container, columnCount, maxCellWidth, availableWidth);\r\n }\r\n else {\r\n return [availableWidth];\r\n }\r\n }\r\n return columnWidths;\r\n }\r\n}\r\nObject.defineProperty(GridLayout, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"GridLayout\"\r\n});\r\nObject.defineProperty(GridLayout, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Layout.classNames.concat([GridLayout.className])\r\n});\r\n//# sourceMappingURL=GridLayout.js.map","import { Color } from \"./Color\";\r\nimport * as $type from \"./Type\";\r\nexport class TextFormatter {\r\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\r\n static escape(text) {\r\n return text.\r\n replace(/\\[\\[/g, this.prefix + \"1\").\r\n replace(/([^\\/\\]]{1})\\]\\]/g, \"$1\" + this.prefix + \"2\").\r\n replace(/\\]\\]/g, this.prefix + \"2\").\r\n replace(/\\{\\{/g, this.prefix + \"3\").\r\n replace(/\\}\\}/g, this.prefix + \"4\").\r\n replace(/\\'\\'/g, this.prefix + \"5\");\r\n }\r\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\r\n static unescape(text) {\r\n return text.\r\n replace(new RegExp(this.prefix + \"1\", \"g\"), \"[[\").\r\n replace(new RegExp(this.prefix + \"2\", \"g\"), \"]]\").\r\n replace(new RegExp(this.prefix + \"3\", \"g\"), \"{{\").\r\n replace(new RegExp(this.prefix + \"4\", \"g\"), \"}}\").\r\n replace(new RegExp(this.prefix + \"5\", \"g\"), \"''\");\r\n }\r\n /**\r\n * Cleans up the text text for leftover double square brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Cleaned up text\r\n */\r\n static cleanUp(text) {\r\n return text.\r\n replace(/\\[\\[/g, \"[\").\r\n replace(/\\]\\]/g, \"]\").\r\n replace(/\\{\\{/g, \"{\").\r\n replace(/\\}\\}/g, \"}\").\r\n replace(/\\'\\'/g, \"'\");\r\n }\r\n /**\r\n * Splits string into chunks. (style blocks, quoted blocks, regular blocks)\r\n *\r\n * If the second parameter `quotedBlocks` is set to `true` this method will\r\n * also single out text blocks enclosed within single quotes that no\r\n * formatting should be applied to, and they should be displayed as is.\r\n *\r\n * Default for the above is `false`, so that you can use single quote in text\r\n * without escaping it.\r\n *\r\n * If enabled, single quotes can be escaped by doubling it - adding two\r\n * single quotes, which will be replaced by a one single quote in the final\r\n * output.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Text to chunk\r\n * @param quotedBlocks Use quoted blocks\r\n * @param noFormatting Formatting blocks will be treated as regular text\r\n * @return Array of string chunks\r\n */\r\n static chunk(text, quotedBlocks = false, noFormatting = false) {\r\n // Init result\r\n let res = [];\r\n // Replace double (escaped) square spaces and quotes with temporary codes\r\n text = this.escape(text);\r\n // Deal with style blocks\r\n let chunks = quotedBlocks ? text.split(\"'\") : [text];\r\n for (let i = 0; i < chunks.length; i++) {\r\n let chunk = chunks[i];\r\n // Empty?\r\n if (chunk === \"\") {\r\n continue;\r\n }\r\n if ((i % 2) === 0) {\r\n // Text outside quotes\r\n // Parse for style blocks which are \"text\" chunks, the rest chunks are\r\n // \"value\"\r\n chunk = chunk.replace(/\\]\\[/g, \"]\" + $type.PLACEHOLDER + \"[\");\r\n chunk = chunk.replace(/\\[\\]/g, \"[ ]\");\r\n let chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (let i2 = 0; i2 < chunks2.length; i2++) {\r\n let chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Placeholder?\r\n if (chunk2 === $type.PLACEHOLDER) {\r\n continue;\r\n }\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or value\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"value\",\r\n \"text\": chunk2\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": noFormatting ? \"value\" : \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n else {\r\n // A text within doublequotes\r\n // All chunks are \"text\"\r\n let chunks2 = chunk.split(/[\\[\\]]+/);\r\n for (let i2 = 0; i2 < chunks2.length; i2++) {\r\n let chunk2 = this.cleanUp(this.unescape(chunks2[i2]));\r\n // Empty?\r\n if (chunk2 === \"\") {\r\n continue;\r\n }\r\n // Block or text\r\n if ((i2 % 2) === 0) {\r\n res.push({\r\n \"type\": \"text\",\r\n \"text\": chunk2\r\n });\r\n }\r\n else if (this.isImage(chunk2)) {\r\n res.push({\r\n \"type\": \"image\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n else {\r\n res.push({\r\n \"type\": \"format\",\r\n \"text\": \"[\" + chunk2 + \"]\"\r\n });\r\n }\r\n }\r\n }\r\n }\r\n return res;\r\n }\r\n /**\r\n * Checks if supplied format contains image information and should be\r\n * formatted as such.\r\n * I.e.: `[img: myImage.png]`\r\n *\r\n * @ignore\r\n * @param text Format\r\n * @return true if it is an image\r\n */\r\n static isImage(text) {\r\n return text.match(/img[ ]?:/) ? true : false;\r\n }\r\n static getTextStyle(style) {\r\n // let textStyle: string[] = [];\r\n // let textFill: string | undefined;\r\n let format = {};\r\n if (style == \"\" || style == \"[ ]\") {\r\n return {};\r\n }\r\n // Pre-process quoted text\r\n const q = style.match(/('[^']*')|(\"[^\"]*\")/gi);\r\n if (q) {\r\n for (let i = 0; i < q.length; i++) {\r\n style = style.replace(q[i], q[i].replace(/['\"]*/g, \"\").replace(/[ ]+/g, \"+\"));\r\n }\r\n }\r\n // Get style parts\r\n let b = style.match(/([\\w\\-]*:[\\s]?[^;\\s\\]]*)|(\\#[\\w]{1,6})|([\\w\\-]+)|(\\/)/gi);\r\n // Empty?\r\n if (!b) {\r\n return {};\r\n }\r\n // Check each part\r\n for (let i = 0; i < b.length; i++) {\r\n if (b[i].match(/^(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)$/i)) {\r\n format.fontWeight = b[i];\r\n }\r\n else if (b[i].match(/^(underline|line-through)$/i)) {\r\n format.textDecoration = b[i];\r\n }\r\n else if (b[i] == \"/\") {\r\n // Just closing tag\r\n // Do nothing\r\n }\r\n else if (!b[i].match(/:/)) {\r\n // Color\r\n format.fill = Color.fromString(b[i]);\r\n }\r\n else {\r\n const p = b[i].replace(\"+\", \" \").split(/:[ ]*/);\r\n format[p[0]] = p[1];\r\n //textStyle.push(b[i].replace(/^[a-zA-Z]:[ ]*/, \"\"));\r\n //b[i] = b[i].replace(/\\+/g, \" \");\r\n }\r\n }\r\n return format;\r\n }\r\n}\r\nObject.defineProperty(TextFormatter, \"prefix\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"__amcharts__\"\r\n});\r\n//# sourceMappingURL=TextFormatter.js.map","/** @ignore */ /** */\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\nimport { Sprite } from \"../render/Sprite\";\r\nimport { TextFormatter } from \"./TextFormatter\";\r\n/**\r\n * @ignore\r\n */\r\nexport function populateString(target, string) {\r\n if (string != null) {\r\n string = \"\" + string;\r\n string = TextFormatter.escape(string);\r\n let tags = string.match(/\\{([^}]+)\\}/g);\r\n let i;\r\n if (tags) {\r\n for (i = 0; i < tags.length; i++) {\r\n let tag = tags[i].replace(/\\{([^}]+)\\}/, \"$1\");\r\n let value = getTagValue(target, tag, \"\");\r\n if (value == null) {\r\n value = \"\";\r\n }\r\n string = string.split(tags[i]).join(value);\r\n }\r\n }\r\n string = TextFormatter.unescape(string);\r\n }\r\n else {\r\n string = \"\";\r\n }\r\n // TODO: apply adapter?\r\n return string;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction getTagValue(target, tagName, format) {\r\n let value;\r\n const dataItem = target.dataItem;\r\n // Parse parts\r\n let parts = [];\r\n let reg = /(format[a-zA-Z]*)\\((.*)\\)|([^.]+)/g;\r\n let matches;\r\n while (true) {\r\n matches = reg.exec(tagName);\r\n if (matches === null) {\r\n break;\r\n }\r\n if (matches[3]) {\r\n // Simple property\r\n parts.push({\r\n prop: matches[3]\r\n });\r\n // Check if maybe we should force a formatter on this value\r\n const dateFields = target.getDateFormatter().get(\"dateFields\", []);\r\n const numericFields = target.getNumberFormatter().get(\"numericFields\", []);\r\n const durationFields = target.getDurationFormatter().get(\"durationFields\", []);\r\n if (dateFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatDate\",\r\n params: []\r\n });\r\n }\r\n else if (numericFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatNumber\",\r\n params: []\r\n });\r\n }\r\n else if (durationFields.indexOf(matches[3]) !== -1) {\r\n parts.push({\r\n method: \"formatDuration\",\r\n params: []\r\n });\r\n }\r\n }\r\n else {\r\n // Method\r\n // Parse parameters\r\n let params = [];\r\n if ($utils.trim(matches[2]) != \"\") {\r\n let reg2 = /'([^']*)'|\"([^\"]*)\"|([0-9\\-]+)/g;\r\n let matches2;\r\n while (true) {\r\n matches2 = reg2.exec(matches[2]);\r\n if (matches2 === null) {\r\n break;\r\n }\r\n params.push(matches2[1] || matches2[2] || matches2[3]);\r\n }\r\n }\r\n parts.push({\r\n method: matches[1],\r\n params: params\r\n });\r\n }\r\n }\r\n // Check if we can retrieve the value from data item\r\n if (dataItem) {\r\n // Check values\r\n value = getTagValueFromObject(target, parts, dataItem._settings);\r\n // Check properties\r\n if (value == null || $type.isObject(value)) { // isObject helps to solve problem with date axis, as for example dateX will get dateX from values object and won't get to the dateX date.\r\n value = getTagValueFromObject(target, parts, dataItem);\r\n }\r\n // Check data context\r\n let dataContext = dataItem.dataContext;\r\n if (value == null && dataContext) {\r\n value = getTagValueFromObject(target, parts, dataContext);\r\n // Maybe it's a literal dot-separated name of the key in dataContext?\r\n if (value == null) {\r\n value = getTagValueFromObject(target, [{\r\n prop: tagName\r\n }], dataContext);\r\n }\r\n // scond data context level sometimes exist (tree map)\r\n if (value == null && dataContext.dataContext) {\r\n value = getTagValueFromObject(target, parts, dataContext.dataContext);\r\n }\r\n }\r\n // Check component's data item\r\n if (value == null && dataItem.component && dataItem.component.dataItem !== dataItem) {\r\n value = getTagValue(dataItem.component, tagName, format);\r\n }\r\n }\r\n // Check sprite's properties\r\n if (value == null) {\r\n value = getTagValueFromObject(target, parts, target);\r\n }\r\n // Finally, check the parent\r\n if (value == null && target.parent) {\r\n value = getTagValue(target.parent, tagName, format);\r\n }\r\n return value;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction getCustomDataValue(target, prop) {\r\n const customData = target.getPrivate(\"customData\");\r\n if ($type.isObject(customData)) {\r\n return customData[prop];\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getTagValueFromObject(target, parts, object, format) {\r\n let current = object;\r\n let formatApplied = false;\r\n for (let i = 0, len = parts.length; i < len; i++) {\r\n let part = parts[i];\r\n if (part.prop) {\r\n // Regular property\r\n if (current instanceof Sprite) {\r\n let tmp = current.get(part.prop);\r\n if (tmp == null)\r\n tmp = current.getPrivate(part.prop);\r\n if (tmp == null)\r\n tmp = getCustomDataValue(current, part.prop);\r\n if (tmp == null)\r\n tmp = current[part.prop];\r\n current = tmp;\r\n }\r\n else if (current.get) {\r\n let tmp = current.get(part.prop);\r\n if (tmp == null)\r\n tmp = current[part.prop];\r\n current = tmp;\r\n }\r\n else {\r\n current = current[part.prop];\r\n }\r\n if (current == null) {\r\n // Not set, return undefined\r\n return;\r\n }\r\n }\r\n else {\r\n // Method\r\n switch (part.method) {\r\n case \"formatNumber\":\r\n let numberValue = $type.toNumber(current);\r\n if (numberValue != null) {\r\n current = target.getNumberFormatter().format(numberValue, format || part.params[0] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"formatDate\":\r\n let dateValue = $type.toDate(current);\r\n if (!$type.isDate(dateValue) || $type.isNaN(dateValue.getTime())) {\r\n // Was not able to get date out of value, quitting and letting\r\n // calling method try another value\r\n return;\r\n }\r\n if (dateValue != null) {\r\n current = target.getDateFormatter().format(dateValue, format || part.params[0] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"formatDuration\":\r\n let durationValue = $type.toNumber(current);\r\n if (durationValue != null) {\r\n current = target.getDurationFormatter().format(durationValue, format || part.params[0] || undefined, part.params[1] || undefined);\r\n formatApplied = true;\r\n }\r\n break;\r\n case \"urlEncode\":\r\n case \"encodeURIComponent\":\r\n current = encodeURIComponent(current);\r\n break;\r\n default:\r\n if (current[part.method]) {\r\n current[part.method].apply(object, part.params);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n // Apply default format if it wasn't applied explicitly\r\n if (!formatApplied) {\r\n let formatParts = [{\r\n method: \"\",\r\n params: format\r\n }];\r\n if (format == null) {\r\n // Format is not set\r\n // Determine from the type of the value\r\n if ($type.isNumber(current)) {\r\n formatParts[0].method = \"formatNumber\";\r\n formatParts[0].params = \"\";\r\n }\r\n else if ($type.isDate(current)) {\r\n formatParts[0].method = \"formatDate\";\r\n formatParts[0].params = \"\";\r\n }\r\n }\r\n else {\r\n // Format set\r\n // Try to determine formatter based on the format\r\n let formatterType = $utils.getFormat(format);\r\n // format\r\n if (formatterType === \"number\") {\r\n formatParts[0].method = \"formatNumber\";\r\n }\r\n else if (formatterType === \"date\") {\r\n formatParts[0].method = \"formatDate\";\r\n }\r\n else if (formatterType === \"duration\") {\r\n formatParts[0].method = \"formatDuration\";\r\n }\r\n }\r\n // Apply format\r\n if (formatParts[0].method) {\r\n current = getTagValueFromObject(target, formatParts, current);\r\n }\r\n }\r\n return current;\r\n}\r\n//# sourceMappingURL=PopulateString.js.map","import { Children } from \"../util/Children\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { Sprite } from \"./Sprite\";\r\nimport { Rectangle } from \"./Rectangle\";\r\nimport { HorizontalLayout } from \"./HorizontalLayout\";\r\nimport { VerticalLayout } from \"./VerticalLayout\";\r\nimport { GridLayout } from \"./GridLayout\";\r\nimport { populateString } from \"../util/PopulateString\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $type from \"../util/Type\";\r\nimport * as $utils from \"../util/Utils\";\r\n/**\r\n * A basic element that can have child elements, maintain their layout, and\r\n * have a background.\r\n *\r\n * It can have any [[Sprite]] element as a child, from very basic shapes, to\r\n * full-fledged charts.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/containers/} for more info\r\n * @important\r\n */\r\nexport class Container extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_display\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeContainer()\r\n });\r\n Object.defineProperty(this, \"_childrenDisplay\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeContainer()\r\n });\r\n /**\r\n * List of Container's child elements.\r\n */\r\n Object.defineProperty(this, \"children\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Children(this)\r\n });\r\n Object.defineProperty(this, \"_percentageSizeChildren\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_percentagePositionChildren\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_prevWidth\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_prevHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_contentWidth\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_contentHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_contentMask\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_vsbd0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_vsbd1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._display.addChild(this._childrenDisplay);\r\n }\r\n _dispose() {\r\n $array.eachReverse(this.allChildren(), (child) => {\r\n child.dispose();\r\n });\r\n if (this.getPrivate(\"htmlElement\")) {\r\n this._root._removeHTMLContent(this);\r\n }\r\n super._dispose();\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this.isDirty(\"interactiveChildren\")) {\r\n this._display.interactiveChildren = this.get(\"interactiveChildren\", false);\r\n }\r\n if (this.isDirty(\"layout\")) {\r\n this._prevWidth = 0;\r\n this._prevHeight = 0;\r\n this.markDirtyBounds();\r\n if (this._prevSettings.layout) {\r\n this.children.each((child) => {\r\n child.removePrivate(\"x\");\r\n child.removePrivate(\"y\");\r\n });\r\n }\r\n }\r\n if (this.isDirty(\"paddingTop\") || this.isDirty(\"paddingBottom\") || this.isDirty(\"paddingLeft\") || this.isDirty(\"paddingRight\")) {\r\n this.children.each((child) => {\r\n child.markDirtyPosition();\r\n });\r\n }\r\n if (this.isDirty(\"maskContent\")) {\r\n const childrenDisplay = this._childrenDisplay;\r\n let contentMask = this._contentMask;\r\n if (this.get(\"maskContent\")) {\r\n if (!contentMask) {\r\n contentMask = Rectangle.new(this._root, {\r\n x: -.5,\r\n y: -.5,\r\n width: this.width() + 1,\r\n height: this.height() + 1\r\n });\r\n this._contentMask = contentMask;\r\n childrenDisplay.addChildAt(contentMask._display, 0);\r\n childrenDisplay.mask = contentMask._display;\r\n }\r\n }\r\n else {\r\n if (contentMask) {\r\n childrenDisplay.removeChild(contentMask._display);\r\n childrenDisplay.mask = null;\r\n contentMask.dispose();\r\n this._contentMask = undefined;\r\n }\r\n }\r\n }\r\n }\r\n _updateSize() {\r\n super._updateSize();\r\n $array.each(this._percentageSizeChildren, (child) => {\r\n child._updateSize();\r\n });\r\n $array.each(this._percentagePositionChildren, (child) => {\r\n child.markDirtyPosition();\r\n child._updateSize();\r\n });\r\n this.updateBackground();\r\n }\r\n updateBackground() {\r\n const background = this.get(\"background\");\r\n let bounds = this._localBounds;\r\n if (bounds && !this.isHidden()) {\r\n let x = bounds.left;\r\n let y = bounds.top;\r\n let w = bounds.right - x;\r\n let h = bounds.bottom - y;\r\n let maxWidth = this.get(\"maxWidth\");\r\n let maxHeight = this.get(\"maxHeight\");\r\n if (maxHeight) {\r\n if (h > maxHeight) {\r\n h = maxHeight;\r\n }\r\n }\r\n if (maxWidth) {\r\n if (w > maxWidth) {\r\n w = maxWidth;\r\n }\r\n }\r\n let width = this.width();\r\n let height = this.height();\r\n if (background) {\r\n background.setAll({ width: w, height: h, x: x, y: y });\r\n if (this._display.interactive) {\r\n background._display.interactive = true;\r\n }\r\n }\r\n const contentMask = this._contentMask;\r\n if (contentMask) {\r\n contentMask.setAll({ width: width + 1, height: height + 1 });\r\n }\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n verticalScrollbar.set(\"height\", height);\r\n verticalScrollbar.set(\"x\", width - verticalScrollbar.width() - verticalScrollbar.get(\"marginRight\", 0));\r\n verticalScrollbar.set(\"end\", verticalScrollbar.get(\"start\", 0) + height / this._contentHeight);\r\n const bg = verticalScrollbar.get(\"background\");\r\n if (bg) {\r\n bg.setAll({ width: verticalScrollbar.width(), height: height });\r\n }\r\n let visible = true;\r\n if (this._contentHeight <= height) {\r\n visible = false;\r\n }\r\n verticalScrollbar.setPrivate(\"visible\", visible);\r\n }\r\n }\r\n }\r\n _applyThemes(force = false) {\r\n if (super._applyThemes(force)) {\r\n this.eachChildren((child) => {\r\n child._applyThemes(force);\r\n });\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n _applyState(name) {\r\n super._applyState(name);\r\n if (this.get(\"setStateOnChildren\")) {\r\n this.eachChildren((child) => {\r\n child.states.apply(name);\r\n });\r\n }\r\n }\r\n _applyStateAnimated(name, duration) {\r\n super._applyStateAnimated(name, duration);\r\n if (this.get(\"setStateOnChildren\")) {\r\n this.eachChildren((child) => {\r\n child.states.applyAnimate(name, duration);\r\n });\r\n }\r\n }\r\n /**\r\n * Returns container's inner width (width without padding) in pixels.\r\n *\r\n * @return Inner width (px)\r\n */\r\n innerWidth() {\r\n return this.width() - this.get(\"paddingRight\", 0) - this.get(\"paddingLeft\", 0);\r\n }\r\n /**\r\n * Returns container's inner height (height without padding) in pixels.\r\n *\r\n * @return Inner height (px)\r\n */\r\n innerHeight() {\r\n return this.height() - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0);\r\n }\r\n _getBounds() {\r\n let width = this.get(\"width\");\r\n let height = this.get(\"height\");\r\n let pWidth = this.getPrivate(\"width\");\r\n let pHeight = this.getPrivate(\"height\");\r\n let bounds = {\r\n left: 0,\r\n top: 0,\r\n right: this.width(),\r\n bottom: this.height()\r\n };\r\n let layout = this.get(\"layout\");\r\n let horizontal = false;\r\n let vertical = false;\r\n if (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\r\n horizontal = true;\r\n }\r\n if (layout instanceof VerticalLayout) {\r\n vertical = true;\r\n }\r\n if ((width != null || pWidth != null) && (height != null || pHeight != null) && !this.get(\"verticalScrollbar\")) {\r\n // void\r\n }\r\n else {\r\n let m = Number.MAX_VALUE;\r\n let l = m;\r\n let r = -m;\r\n let t = m;\r\n let b = -m;\r\n const paddingLeft = this.get(\"paddingLeft\", 0);\r\n const paddingTop = this.get(\"paddingTop\", 0);\r\n const paddingRight = this.get(\"paddingRight\", 0);\r\n const paddingBottom = this.get(\"paddingBottom\", 0);\r\n this.children.each((child) => {\r\n if (child.get(\"position\") != \"absolute\" && child.get(\"isMeasured\")) {\r\n let childBounds = child.adjustedLocalBounds();\r\n let childX = child.x();\r\n let childY = child.y();\r\n let cl = childX + childBounds.left;\r\n let cr = childX + childBounds.right;\r\n let ct = childY + childBounds.top;\r\n let cb = childY + childBounds.bottom;\r\n if (horizontal) {\r\n cl -= child.get(\"marginLeft\", 0);\r\n cr += child.get(\"marginRight\", 0);\r\n }\r\n if (vertical) {\r\n ct -= child.get(\"marginTop\", 0);\r\n cb += child.get(\"marginBottom\", 0);\r\n }\r\n if (cl < l) {\r\n l = cl;\r\n }\r\n if (cr > r) {\r\n r = cr;\r\n }\r\n if (ct < t) {\r\n t = ct;\r\n }\r\n if (cb > b) {\r\n b = cb;\r\n }\r\n }\r\n });\r\n if (l == m) {\r\n l = 0;\r\n }\r\n if (r == -m) {\r\n r = 0;\r\n }\r\n if (t == m) {\r\n t = 0;\r\n }\r\n if (b == -m) {\r\n b = 0;\r\n }\r\n bounds.left = l - paddingLeft;\r\n bounds.top = t - paddingTop;\r\n bounds.right = r + paddingRight;\r\n bounds.bottom = b + paddingBottom;\r\n const minWidth = this.get(\"minWidth\");\r\n if ($type.isNumber(minWidth) && minWidth > 0) {\r\n if (bounds.right - bounds.left < minWidth) {\r\n if (bounds.right >= minWidth) {\r\n bounds.left = bounds.right - minWidth;\r\n }\r\n else {\r\n bounds.right = bounds.left + minWidth;\r\n }\r\n }\r\n }\r\n const minHeight = this.get(\"minHeight\");\r\n if ($type.isNumber(minHeight) && minHeight > 0) {\r\n if (bounds.bottom - bounds.top < minHeight) {\r\n if (bounds.bottom >= minHeight) {\r\n bounds.top = bounds.bottom - minHeight;\r\n }\r\n else {\r\n bounds.bottom = bounds.top + minHeight;\r\n }\r\n }\r\n }\r\n }\r\n this._contentWidth = bounds.right - bounds.left;\r\n this._contentHeight = bounds.bottom - bounds.top;\r\n if ($type.isNumber(width)) {\r\n bounds.left = 0;\r\n bounds.right = width;\r\n }\r\n if ($type.isNumber(pWidth)) {\r\n bounds.left = 0;\r\n bounds.right = pWidth;\r\n }\r\n if ($type.isNumber(height)) {\r\n bounds.top = 0;\r\n bounds.bottom = height;\r\n }\r\n if ($type.isNumber(pHeight)) {\r\n bounds.top = 0;\r\n bounds.bottom = pHeight;\r\n }\r\n this._localBounds = bounds;\r\n }\r\n _updateBounds() {\r\n const layout = this.get(\"layout\");\r\n if (layout) {\r\n layout.updateContainer(this);\r\n }\r\n super._updateBounds();\r\n this.updateBackground();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n super.markDirty();\r\n this._root._addDirtyParent(this);\r\n }\r\n _prepareChildren() {\r\n const innerWidth = this.innerWidth();\r\n const innerHeight = this.innerHeight();\r\n if (innerWidth != this._prevWidth || innerHeight != this._prevHeight) {\r\n let layout = this.get(\"layout\");\r\n let horizontal = false;\r\n let vertical = false;\r\n if (layout) {\r\n if (layout instanceof HorizontalLayout || layout instanceof GridLayout) {\r\n horizontal = true;\r\n }\r\n if (layout instanceof VerticalLayout) {\r\n vertical = true;\r\n }\r\n }\r\n $array.each(this._percentageSizeChildren, (child) => {\r\n if (!horizontal) {\r\n let width = child.get(\"width\");\r\n if (width instanceof Percent) {\r\n child.setPrivate(\"width\", width.value * innerWidth);\r\n }\r\n }\r\n if (!vertical) {\r\n let height = child.get(\"height\");\r\n if (height instanceof Percent) {\r\n child.setPrivate(\"height\", height.value * innerHeight);\r\n }\r\n }\r\n });\r\n $array.each(this._percentagePositionChildren, (child) => {\r\n child.markDirtyPosition();\r\n child.markDirtyBounds();\r\n });\r\n this._prevWidth = innerWidth;\r\n this._prevHeight = innerHeight;\r\n this._sizeDirty = true;\r\n this.updateBackground();\r\n }\r\n this._handleStates();\r\n }\r\n _updateHTMLContent() {\r\n const html = this.get(\"html\");\r\n if (html && html !== \"\") {\r\n this._root._setHTMLContent(this, populateString(this, this.get(\"html\", \"\")));\r\n }\r\n else {\r\n this._root._removeHTMLContent(this);\r\n }\r\n this._root._positionHTMLElement(this);\r\n }\r\n _updateChildren() {\r\n if (this.isDirty(\"html\")) {\r\n this._updateHTMLContent();\r\n }\r\n if (this.isDirty(\"verticalScrollbar\")) {\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n verticalScrollbar._setParent(this);\r\n verticalScrollbar.startGrip.setPrivate(\"visible\", false);\r\n verticalScrollbar.endGrip.setPrivate(\"visible\", false);\r\n this.set(\"maskContent\", true);\r\n this.set(\"paddingRight\", verticalScrollbar.width() + verticalScrollbar.get(\"marginRight\", 0) + verticalScrollbar.get(\"marginLeft\", 0));\r\n let background = this.get(\"background\");\r\n if (!background) {\r\n background = this.set(\"background\", Rectangle.new(this._root, {\r\n themeTags: [\"background\"],\r\n fillOpacity: 0,\r\n fill: this._root.interfaceColors.get(\"alternativeBackground\")\r\n }));\r\n }\r\n this._vsbd0 = this.events.on(\"wheel\", (event) => {\r\n const wheelEvent = event.originalEvent;\r\n // Ignore wheel event if it is happening on a non-chart element, e.g. if\r\n // some page element is over the chart.\r\n if ($utils.isLocalEvent(wheelEvent, this)) {\r\n wheelEvent.preventDefault();\r\n }\r\n else {\r\n return;\r\n }\r\n let shiftY = wheelEvent.deltaY / 5000;\r\n const start = verticalScrollbar.get(\"start\", 0);\r\n const end = verticalScrollbar.get(\"end\", 1);\r\n if (start + shiftY <= 0) {\r\n shiftY = -start;\r\n }\r\n if (end + shiftY >= 1) {\r\n shiftY = 1 - end;\r\n }\r\n if (start + shiftY >= 0 && end + shiftY <= 1) {\r\n verticalScrollbar.set(\"start\", start + shiftY);\r\n verticalScrollbar.set(\"end\", end + shiftY);\r\n }\r\n });\r\n this._disposers.push(this._vsbd0);\r\n this._vsbd1 = verticalScrollbar.events.on(\"rangechanged\", () => {\r\n let h = this._contentHeight;\r\n const childrenDisplay = this._childrenDisplay;\r\n const contentMask = this._contentMask;\r\n childrenDisplay.y = -verticalScrollbar.get(\"start\", 0) * h;\r\n childrenDisplay.markDirtyLayer();\r\n if (contentMask) {\r\n contentMask._display.y = -childrenDisplay.y;\r\n childrenDisplay.mask = contentMask._display;\r\n }\r\n });\r\n this._disposers.push(this._vsbd1);\r\n this._display.addChild(verticalScrollbar._display);\r\n }\r\n else {\r\n const previous = this._prevSettings.verticalScrollbar;\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n if (this._vsbd0) {\r\n this._vsbd0.dispose();\r\n }\r\n if (this._vsbd1) {\r\n this._vsbd1.dispose();\r\n }\r\n const childrenDisplay = this._childrenDisplay;\r\n childrenDisplay.y = 0;\r\n this.setPrivate(\"height\", undefined);\r\n this.set(\"maskContent\", false);\r\n this.set(\"paddingRight\", undefined);\r\n }\r\n }\r\n }\r\n if (this.isDirty(\"background\")) {\r\n // TODO maybe this should dispose ?\r\n const previous = this._prevSettings[\"background\"];\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n }\r\n const background = this.get(\"background\");\r\n if (background instanceof Sprite) {\r\n background.set(\"isMeasured\", false);\r\n background._setParent(this);\r\n this._display.addChildAt(background._display, 0);\r\n }\r\n }\r\n if (this.isDirty(\"mask\")) {\r\n const mask = this.get(\"mask\");\r\n const previous = this._prevSettings[\"mask\"];\r\n if (previous) {\r\n this._display.removeChild(previous._display);\r\n if (previous != mask) {\r\n previous.dispose();\r\n }\r\n }\r\n if (mask) {\r\n const parent = mask.parent;\r\n if (parent) {\r\n parent.children.removeValue(mask);\r\n }\r\n mask._setParent(this);\r\n this._display.addChildAt(mask._display, 0);\r\n this._childrenDisplay.mask = mask._display;\r\n }\r\n }\r\n }\r\n _processTemplateField() {\r\n super._processTemplateField();\r\n this.children.each((child) => {\r\n child._processTemplateField();\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n walkChildren(f) {\r\n this.children.each((child) => {\r\n if (child instanceof Container) {\r\n child.walkChildren(f);\r\n }\r\n f(child);\r\n });\r\n }\r\n eachChildren(f) {\r\n const background = this.get(\"background\");\r\n if (background) {\r\n f(background);\r\n }\r\n const verticalScrollbar = this.get(\"verticalScrollbar\");\r\n if (verticalScrollbar) {\r\n f(verticalScrollbar);\r\n }\r\n const mask = this.get(\"mask\");\r\n if (mask) {\r\n f(mask);\r\n }\r\n this.children.values.forEach((child) => {\r\n f(child);\r\n });\r\n }\r\n allChildren() {\r\n const output = [];\r\n this.eachChildren((x) => {\r\n output.push(x);\r\n });\r\n return output;\r\n }\r\n _setDataItem(dataItem) {\r\n const updated = (dataItem !== this._dataItem);\r\n super._setDataItem(dataItem);\r\n const html = this.get(\"html\", \"\");\r\n if (html && html !== \"\" && updated) {\r\n this._root._setHTMLContent(this, populateString(this, html));\r\n }\r\n }\r\n}\r\nObject.defineProperty(Container, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Container\"\r\n});\r\nObject.defineProperty(Container, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Sprite.classNames.concat([Container.className])\r\n});\r\n//# sourceMappingURL=Container.js.map","import { Sprite } from \"./Sprite\";\r\nimport { populateString } from \"../util/PopulateString\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport { Disposer } from \"../util/Disposer\";\r\n/**\r\n * @ignore Text is an internal class. Use Label instead.\r\n */\r\nexport class Text extends Sprite {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"textStyle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeTextStyle()\r\n });\r\n Object.defineProperty(this, \"_display\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._root._renderer.makeText(\"\", this.textStyle)\r\n });\r\n Object.defineProperty(this, \"_textStyles\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: [\r\n \"textAlign\",\r\n \"fontFamily\",\r\n \"fontSize\",\r\n \"fontStyle\",\r\n \"fontWeight\",\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"textDecoration\",\r\n \"shadowColor\",\r\n \"shadowBlur\",\r\n \"shadowOffsetX\",\r\n \"shadowOffsetY\",\r\n \"shadowOpacity\",\r\n // \"leading\",\r\n // \"letterSpacing\",\r\n \"lineHeight\",\r\n \"baselineRatio\",\r\n //\"padding\",\r\n // \"stroke\",\r\n // \"strokeThickness\",\r\n // \"trim\",\r\n // \"wordWrap\",\r\n \"direction\",\r\n \"textBaseline\",\r\n \"oversizedBehavior\",\r\n \"breakWords\",\r\n \"ellipsis\",\r\n \"minScale\",\r\n \"maxChars\"\r\n ]\r\n });\r\n Object.defineProperty(this, \"_originalScale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _updateBounds() {\r\n if (!this.get(\"text\")) {\r\n let newBounds = {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n };\r\n this._adjustedLocalBounds = newBounds;\r\n }\r\n else {\r\n super._updateBounds();\r\n let fillGradient = this.get(\"fillGradient\");\r\n if (fillGradient) {\r\n this._display.style.fill = fillGradient.getFill(this);\r\n }\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n this._display.clear();\r\n let textStyle = this.textStyle;\r\n if (this.isDirty(\"opacity\")) {\r\n let opacity = this.get(\"opacity\", 1);\r\n this._display.alpha = opacity;\r\n }\r\n if (this.isDirty(\"text\") || this.isDirty(\"populateText\")) {\r\n this._display.text = this._getText();\r\n this.markDirtyBounds();\r\n if (this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n }\r\n if (this.isPrivateDirty(\"tooltipElement\")) {\r\n const tooltipElement = this.getPrivate(\"tooltipElement\");\r\n if (tooltipElement) {\r\n this._disposers.push(new Disposer(() => {\r\n this._root._removeTooltipElement(this);\r\n }));\r\n }\r\n }\r\n if (this.isDirty(\"width\")) {\r\n textStyle.wordWrapWidth = this.width();\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"oversizedBehavior\")) {\r\n textStyle.oversizedBehavior = this.get(\"oversizedBehavior\", \"none\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"breakWords\")) {\r\n textStyle.breakWords = this.get(\"breakWords\", false);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"ellipsis\")) {\r\n textStyle.ellipsis = this.get(\"ellipsis\");\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"ignoreFormatting\")) {\r\n textStyle.ignoreFormatting = this.get(\"ignoreFormatting\", false);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"minScale\")) {\r\n textStyle.minScale = this.get(\"minScale\", 0);\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"fillGradient\")) {\r\n const fill = this.get(\"fill\");\r\n const fillGradient = this.get(\"fillGradient\");\r\n const fillOpacity = this.get(\"fillOpacity\");\r\n if (fillGradient) {\r\n if (fill) {\r\n const stops = fillGradient.get(\"stops\", []);\r\n if (stops.length) {\r\n $array.each(stops, (stop) => {\r\n if ((!stop.color || stop.colorInherited) && fill) {\r\n stop.color = fill;\r\n stop.colorInherited = true;\r\n }\r\n if (stop.opacity == null || stop.opacityInherited) {\r\n stop.opacity = fillOpacity;\r\n stop.opacityInherited = true;\r\n }\r\n });\r\n }\r\n }\r\n textStyle.fill = fillGradient.getFill(this);\r\n }\r\n else if (fill) {\r\n textStyle.fill = fill;\r\n }\r\n }\r\n if (this.isDirty(\"fillOpacity\")) {\r\n let fillOpacity = this.get(\"fillOpacity\", 1);\r\n if (fillOpacity) {\r\n textStyle.fillOpacity = fillOpacity;\r\n }\r\n }\r\n if (this.isDirty(\"maxWidth\") || this.isPrivateDirty(\"maxWidth\")) {\r\n textStyle.maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\"));\r\n this.markDirtyBounds();\r\n }\r\n if (this.isDirty(\"maxHeight\") || this.isPrivateDirty(\"maxHeight\")) {\r\n textStyle.maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\"));\r\n this.markDirtyBounds();\r\n }\r\n $array.each(this._textStyles, (styleName) => {\r\n if (this._dirty[styleName]) {\r\n textStyle[styleName] = this.get(styleName);\r\n this.markDirtyBounds();\r\n }\r\n });\r\n textStyle[\"fontSize\"] = this.get(\"fontSize\");\r\n textStyle[\"fontFamily\"] = this.get(\"fontFamily\");\r\n this._display.style = textStyle;\r\n if (this.isDirty(\"role\") && this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n }\r\n _getText() {\r\n let text = this.get(\"text\", \"\");\r\n if (this.get(\"maxChars\")) {\r\n text = $utils.truncateTextWithEllipsis(text, this.get(\"maxChars\", 100000000), this.get(\"breakWords\"), this.get(\"ellipsis\"));\r\n }\r\n return this.get(\"populateText\") ? populateString(this, text) : text;\r\n }\r\n _getAccessibleText() {\r\n const ariaLabel = this.get(\"ariaLabel\");\r\n if (ariaLabel !== undefined) {\r\n return this.get(\"populateText\") ? populateString(this, ariaLabel) : ariaLabel;\r\n }\r\n return this._getText();\r\n }\r\n /**\r\n * Forces the text to be re-evaluated and re-populated.\r\n */\r\n markDirtyText() {\r\n this._display.text = this._getText();\r\n if (this.get(\"role\") == \"tooltip\") {\r\n this._root.updateTooltip(this);\r\n }\r\n this.markDirtyBounds();\r\n this.markDirty();\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n if (this.get(\"populateText\")) {\r\n this.markDirtyText();\r\n }\r\n }\r\n getNumberFormatter() {\r\n if (this.parent) {\r\n return this.parent.getNumberFormatter();\r\n }\r\n else {\r\n return super.getNumberFormatter();\r\n }\r\n }\r\n getDateFormatter() {\r\n if (this.parent) {\r\n return this.parent.getDateFormatter();\r\n }\r\n else {\r\n return super.getDateFormatter();\r\n }\r\n }\r\n getDurationFormatter() {\r\n if (this.parent) {\r\n return this.parent.getDurationFormatter();\r\n }\r\n else {\r\n return super.getDurationFormatter();\r\n }\r\n }\r\n}\r\nObject.defineProperty(Text, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Text\"\r\n});\r\nObject.defineProperty(Text, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Sprite.classNames.concat([Text.className])\r\n});\r\n//# sourceMappingURL=Text.js.map","/** @ignore */ /** */\r\nimport * as $array from \"./Array\";\r\nimport * as $utils from \"./Utils\";\r\n/**\r\n * @ignore\r\n */\r\nclass Native {\r\n constructor() {\r\n Object.defineProperty(this, \"_observer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_targets\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n this._observer = new ResizeObserver((entries) => {\r\n $array.each(entries, (entry) => {\r\n $array.each(this._targets, (x) => {\r\n if (x.target === entry.target) {\r\n x.callback();\r\n }\r\n });\r\n });\r\n });\r\n }\r\n addTarget(target, callback) {\r\n this._observer.observe(target, { box: \"border-box\" });\r\n this._targets.push({ target, callback });\r\n }\r\n removeTarget(target) {\r\n this._observer.unobserve(target);\r\n $array.keepIf(this._targets, (x) => {\r\n return x.target !== target;\r\n });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass Raf {\r\n constructor() {\r\n Object.defineProperty(this, \"_timer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"_targets\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n }\r\n addTarget(target, callback) {\r\n if (this._timer === null) {\r\n let lastTime = null;\r\n const loop = () => {\r\n const currentTime = Date.now();\r\n if (lastTime === null || currentTime > (lastTime + Raf.delay)) {\r\n lastTime = currentTime;\r\n $array.each(this._targets, (x) => {\r\n let newSize = x.target.getBoundingClientRect();\r\n if (newSize.width !== x.size.width || newSize.height !== x.size.height) {\r\n x.size = newSize;\r\n x.callback();\r\n }\r\n });\r\n }\r\n if (this._targets.length === 0) {\r\n this._timer = null;\r\n }\r\n else {\r\n this._timer = requestAnimationFrame(loop);\r\n }\r\n };\r\n this._timer = requestAnimationFrame(loop);\r\n }\r\n // We start off with fake bounds so that sensor always kicks in\r\n let size = { width: 0, height: 0, left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 };\r\n this._targets.push({ target, callback, size });\r\n }\r\n removeTarget(target) {\r\n $array.keepIf(this._targets, (x) => {\r\n return x.target !== target;\r\n });\r\n if (this._targets.length === 0) {\r\n if (this._timer !== null) {\r\n cancelAnimationFrame(this._timer);\r\n this._timer = null;\r\n }\r\n }\r\n }\r\n}\r\nObject.defineProperty(Raf, \"delay\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 200\r\n});\r\n/**\r\n * @ignore\r\n */\r\nlet observer = null;\r\n/**\r\n * @ignore\r\n */\r\nfunction makeSensor() {\r\n if (observer === null) {\r\n if (typeof ResizeObserver !== \"undefined\") {\r\n observer = new Native();\r\n }\r\n else {\r\n observer = new Raf();\r\n }\r\n }\r\n return observer;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class ResizeSensor {\r\n constructor(element, callback) {\r\n Object.defineProperty(this, \"_sensor\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_element\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_listener\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_disposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n this._sensor = makeSensor();\r\n this._element = element;\r\n // This is needed because we need to know when the window is zoomed\r\n this._listener = $utils.onZoom(callback);\r\n this._sensor.addTarget(element, callback);\r\n }\r\n isDisposed() {\r\n return this._disposed;\r\n }\r\n dispose() {\r\n if (!this._disposed) {\r\n this._disposed = true;\r\n this._sensor.removeTarget(this._element);\r\n this._listener.dispose();\r\n }\r\n }\r\n get sensor() {\r\n return this._sensor;\r\n }\r\n}\r\n//# sourceMappingURL=ResizeSensor.js.map","import { Entity } from \"./Entity\";\r\n/**\r\n * Presets for common UI elements.\r\n */\r\nexport class InterfaceColors extends Entity {\r\n}\r\nObject.defineProperty(InterfaceColors, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"InterfaceColors\"\r\n});\r\nObject.defineProperty(InterfaceColors, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([InterfaceColors.className])\r\n});\r\n//# sourceMappingURL=InterfaceColors.js.map","import { Text } from \"../render/Text\";\r\nimport { p50, p100 } from \"../util/Percent\";\r\nimport { Container } from \"./Container\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\n/**\r\n * Creates a label with support for in-line styling and data bindings.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/labels/} for more info\r\n */\r\nexport class Label extends Container {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_text\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_textKeys\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: [\r\n \"text\",\r\n \"fill\",\r\n \"fillGradient\",\r\n \"fillOpacity\",\r\n \"textAlign\",\r\n \"fontFamily\",\r\n \"fontSize\",\r\n \"fontStyle\",\r\n \"fontWeight\",\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"textDecoration\",\r\n \"shadowColor\",\r\n \"shadowBlur\",\r\n \"shadowOffsetX\",\r\n \"shadowOffsetY\",\r\n \"shadowOpacity\",\r\n // \"leading\",\r\n // \"letterSpacing\",\r\n \"lineHeight\",\r\n \"baselineRatio\",\r\n //\"padding\",\r\n // \"stroke\",\r\n // \"strokeThickness\",\r\n // \"trim\",\r\n // \"wordWrap\",\r\n \"direction\",\r\n \"textBaseline\",\r\n \"oversizedBehavior\",\r\n \"breakWords\",\r\n \"ellipsis\",\r\n \"minScale\",\r\n \"populateText\",\r\n \"role\",\r\n \"ignoreFormatting\",\r\n \"maxChars\",\r\n \"ariaLabel\"\r\n ]\r\n });\r\n }\r\n /**\r\n * @ignore Text is not to be used directly\r\n */\r\n get text() {\r\n return this._text;\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._makeText();\r\n $array.each(this._textKeys, (property) => {\r\n const propValue = this.get(property);\r\n if (propValue != undefined) {\r\n this._text.set(property, propValue);\r\n }\r\n });\r\n if (this.get(\"html\", \"\") !== \"\") {\r\n this._text.set(\"text\", \"\");\r\n }\r\n this.onPrivate(\"maxWidth\", () => {\r\n this._setMaxDimentions();\r\n });\r\n this.onPrivate(\"maxHeight\", () => {\r\n this._setMaxDimentions();\r\n });\r\n }\r\n _makeText() {\r\n this._text = this.children.push(Text.new(this._root, {}));\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n const text = this._text;\r\n $array.each(this._textKeys, (property) => {\r\n this._text.set(property, this.get(property));\r\n });\r\n if (this.isDirty(\"maxWidth\") || this.isDirty(\"maxHeight\") || this.isDirty(\"rotation\")) {\r\n this._setMaxDimentions();\r\n }\r\n // Do not show regular text if HTML is used\r\n if (this.get(\"html\", \"\") !== \"\") {\r\n text.set(\"text\", \"\");\r\n }\r\n else {\r\n text.set(\"text\", this.get(\"text\"));\r\n this._maybeUpdateHTMLColor();\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"fillGradient\")) {\r\n this._maybeUpdateHTMLColor();\r\n }\r\n if (this.isDirty(\"textAlign\") || this.isDirty(\"width\")) {\r\n const textAlign = this.get(\"textAlign\");\r\n let x;\r\n if (this.get(\"width\") != null) {\r\n if (textAlign == \"right\") {\r\n x = p100;\r\n }\r\n else if (textAlign == \"center\") {\r\n x = p50;\r\n }\r\n else {\r\n x = 0;\r\n }\r\n }\r\n else {\r\n if (textAlign == \"left\" || textAlign == \"start\") {\r\n x = this.get(\"paddingLeft\", 0);\r\n }\r\n else if (textAlign == \"right\" || textAlign == \"end\") {\r\n x = -this.get(\"paddingRight\", 0);\r\n }\r\n }\r\n text.set(\"x\", x);\r\n }\r\n const background = this.get(\"background\");\r\n if (background) {\r\n background.setPrivate(\"visible\", text._display.textVisible);\r\n }\r\n }\r\n _maybeUpdateHTMLColor() {\r\n const htmlElement = this.getPrivate(\"htmlElement\");\r\n if (htmlElement && this.get(\"fill\")) {\r\n htmlElement.style.color = this.get(\"fill\").toCSSHex();\r\n //@todo support gradient\r\n }\r\n }\r\n _setMaxDimentions() {\r\n const rotation = this.get(\"rotation\");\r\n const vertical = rotation == 90 || rotation == 270 || rotation == -90;\r\n const text = this._text;\r\n const maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\", Infinity));\r\n if ($type.isNumber(maxWidth)) {\r\n text.set(vertical ? \"maxHeight\" : \"maxWidth\", maxWidth - this.get(\"paddingLeft\", 0) - this.get(\"paddingRight\", 0));\r\n }\r\n else {\r\n text.set(vertical ? \"maxHeight\" : \"maxWidth\", undefined);\r\n }\r\n const maxHeight = this.get(\"maxHeight\", this.getPrivate(\"maxHeight\", Infinity));\r\n if ($type.isNumber(maxHeight)) {\r\n text.set(vertical ? \"maxWidth\" : \"maxHeight\", maxHeight - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0));\r\n }\r\n else {\r\n text.set(vertical ? \"maxWidth\" : \"maxHeight\", undefined);\r\n }\r\n this.root.events.once(\"frameended\", () => {\r\n text.markDirtyBounds();\r\n });\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n this._markDirtyKey(\"text\");\r\n const text = this._text;\r\n if (text.get(\"populateText\")) {\r\n text.markDirtyText();\r\n }\r\n const html = this.get(\"html\");\r\n if (html && html !== \"\") {\r\n this._updateHTMLContent();\r\n }\r\n }\r\n /**\r\n * Returns text with populated placeholders and formatting if `populateText` is\r\n * set to `true`.\r\n *\r\n * @return Populated text\r\n */\r\n getText() {\r\n return this._text._getText();\r\n }\r\n /**\r\n * Returns \"aria-label\" text with populated placeholders and formatting\r\n * if `populateText` is set to `true`.\r\n *\r\n * @return Populated text\r\n */\r\n getAccessibleText() {\r\n return this._text._getAccessibleText();\r\n }\r\n}\r\nObject.defineProperty(Label, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Label\"\r\n});\r\nObject.defineProperty(Label, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Container.classNames.concat([Label.className])\r\n});\r\n//# sourceMappingURL=Label.js.map","import { Graphics } from \"./Graphics\";\r\nimport * as $math from \"../util/Math\";\r\n/**\r\n * Draws a rectangle with a pointer.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class PointedRectangle extends Graphics {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"pointerBaseWidth\") || this.isDirty(\"cornerRadius\") || this.isDirty(\"pointerLength\") || this.isDirty(\"pointerX\") || this.isDirty(\"pointerY\") || this.isDirty(\"width\") || this.isDirty(\"height\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n this.markDirtyBounds();\r\n let w = this.width();\r\n let h = this.height();\r\n if (w > 0 && h > 0) {\r\n let cr = this.get(\"cornerRadius\", 8);\r\n cr = $math.fitToRange(cr, 0, Math.min(w / 2, h / 2));\r\n let x = this.get(\"pointerX\", 0);\r\n let y = this.get(\"pointerY\", 0);\r\n let bwh = this.get(\"pointerBaseWidth\", 15) / 2;\r\n // corner coordinates\r\n // top left\r\n let xtl = 0;\r\n let ytl = 0;\r\n // top right\r\n let xtr = w;\r\n let ytr = 0;\r\n // bottom right\r\n let xbr = w;\r\n let ybr = h;\r\n // bottom left\r\n let xbl = 0;\r\n let ybl = h;\r\n // find stem base side: http://$math.stackexchange.com/questions/274712/calculate-on-which-side-of-straign-line-is-dot-located\r\n // d=(x−x1)(y2−y1)−(y−y1)(x2−x1)\r\n let d1 = (x - xtl) * (ybr - ytl) - (y - ytl) * (xbr - xtl);\r\n let d2 = (x - xbl) * (ytr - ybl) - (y - ybl) * (xtr - xbl);\r\n const display = this._display;\r\n // top\r\n display.moveTo(cr, 0);\r\n if (d1 > 0 && d2 > 0) {\r\n let stemX = Math.round($math.fitToRange(x, cr + bwh, w - bwh - cr));\r\n y = $math.fitToRange(y, -Infinity, 0);\r\n display.lineTo(stemX - bwh, 0);\r\n display.lineTo(x, y);\r\n display.lineTo(stemX + bwh, 0);\r\n }\r\n display.lineTo(w - cr, 0);\r\n display.arcTo(w, 0, w, cr, cr);\r\n // right\r\n if (d1 > 0 && d2 < 0) {\r\n let stemY = Math.round($math.fitToRange(y, cr + bwh, h - bwh - cr));\r\n x = $math.fitToRange(x, w, Infinity);\r\n display.lineTo(w, cr);\r\n display.lineTo(w, Math.max(stemY - bwh, cr));\r\n display.lineTo(x, y);\r\n display.lineTo(w, stemY + bwh);\r\n }\r\n display.lineTo(w, h - cr);\r\n display.arcTo(w, h, w - cr, h, cr);\r\n // bottom\r\n if (d1 < 0 && d2 < 0) {\r\n let stemX = Math.round($math.fitToRange(x, cr + bwh, w - bwh - cr));\r\n y = $math.fitToRange(y, h, Infinity);\r\n display.lineTo(w - cr, h);\r\n display.lineTo(stemX + bwh, h);\r\n display.lineTo(x, y);\r\n display.lineTo(stemX - bwh, h);\r\n }\r\n display.lineTo(cr, h);\r\n display.arcTo(0, h, 0, h - cr, cr);\r\n // left\r\n if (d1 < 0 && d2 > 0) {\r\n let stemY = Math.round($math.fitToRange(y, cr + bwh, h - cr - bwh));\r\n x = $math.fitToRange(x, -Infinity, 0);\r\n display.lineTo(0, h - cr);\r\n display.lineTo(0, stemY + bwh);\r\n display.lineTo(x, y);\r\n display.lineTo(0, Math.max(stemY - bwh, cr));\r\n }\r\n display.lineTo(0, cr);\r\n display.arcTo(0, 0, cr, 0, cr);\r\n display.closePath();\r\n }\r\n }\r\n }\r\n}\r\nObject.defineProperty(PointedRectangle, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"PointedRectangle\"\r\n});\r\nObject.defineProperty(PointedRectangle, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Graphics.classNames.concat([PointedRectangle.className])\r\n});\r\n//# sourceMappingURL=PointedRectangle.js.map","import { MultiDisposer } from \"../util/Disposer\";\r\nimport { Label } from \"../render/Label\";\r\nimport { PointedRectangle } from \"../render/PointedRectangle\";\r\nimport { Container } from \"./Container\";\r\nimport { Percent } from \"../util/Percent\";\r\nimport { Color } from \"../util/Color\";\r\nimport * as $math from \"../util/Math\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $utils from \"../util/Utils\";\r\n/**\r\n * Creates a tooltip.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/tooltips/} for more info\r\n * @important\r\n */\r\nexport class Tooltip extends Container {\r\n constructor(root, settings, isReal, templates = []) {\r\n super(root, settings, isReal, templates);\r\n Object.defineProperty(this, \"_fx\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_fy\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_label\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_fillDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_strokeDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_labelDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_w\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_h\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_keepHoverDp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_htmlContentHovered\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"tooltip\"]);\r\n super._afterNew();\r\n const background = this._setDefaultFn(\"background\", () => {\r\n return PointedRectangle.new(this._root, {});\r\n });\r\n background.set(\"themeTags\", [\"tooltip\", \"background\"]);\r\n this._label = this.children.push(Label.new(this._root, {}));\r\n this._disposers.push(this._label.events.on(\"boundschanged\", () => {\r\n this._updateBackground();\r\n }));\r\n this._disposers.push(this.on(\"bounds\", () => {\r\n this._updateBackground();\r\n }));\r\n this._updateTextColor();\r\n this._root.tooltipContainer.children.push(this);\r\n this.hide(0);\r\n this._disposers.push(this.label.onPrivate(\"htmlElement\", (htmlElement) => {\r\n if (htmlElement) {\r\n this._disposers.push($utils.addEventListener(htmlElement, \"pointerover\", (_ev) => {\r\n this._htmlContentHovered = true;\r\n }));\r\n this._disposers.push($utils.addEventListener(htmlElement, \"pointerout\", (_ev) => {\r\n this._htmlContentHovered = false;\r\n }));\r\n }\r\n }));\r\n this.on(\"visible\", (_ev) => {\r\n this._handleReaderAnnouncement();\r\n });\r\n this.label.events.on(\"dataitemchanged\", (_ev) => {\r\n this._handleReaderAnnouncement();\r\n });\r\n this._root._tooltips.push(this);\r\n }\r\n _handleReaderAnnouncement() {\r\n if (this.get(\"readerAnnounce\") && this.isVisibleDeep()) {\r\n this._root.readerAlert(this.label.getAccessibleText());\r\n }\r\n }\r\n /**\r\n * A [[Label]] element for the tooltip.\r\n *\r\n * @readonly\r\n * @return Label\r\n */\r\n get label() {\r\n return this._label;\r\n }\r\n /**\r\n * Permanently disposes the tooltip.\r\n */\r\n dispose() {\r\n super.dispose();\r\n $array.remove(this._root._tooltips, this);\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n if (this.isDirty(\"pointerOrientation\") || this.isPrivateDirty(\"minWidth\") || this.isPrivateDirty(\"minHeight\")) {\r\n this.get(\"background\")._markDirtyKey(\"width\");\r\n }\r\n const labelText = this.get(\"labelText\");\r\n if (labelText != null) {\r\n this.label.set(\"text\", this.get(\"labelText\"));\r\n }\r\n const labelHTML = this.get(\"labelHTML\");\r\n if (labelHTML != null) {\r\n this.label.set(\"html\", this.get(\"labelHTML\"));\r\n }\r\n const labelAriaLabel = this.get(\"labelAriaLabel\");\r\n if (labelAriaLabel != null) {\r\n this.label.set(\"ariaLabel\", this.get(\"labelAriaLabel\"));\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this.isDirty(\"pointTo\") || this.isDirty(\"pointerOrientation\")) {\r\n // can't compare to previous, as sometimes pointTo is set twice (when pointer moves, so the position won't be udpated)\r\n this._updateBackground();\r\n }\r\n if (this.isDirty(\"tooltipTarget\")) {\r\n this.updateBackgroundColor();\r\n }\r\n if (this.isDirty(\"keepTargetHover\")) {\r\n const keephover = this.get(\"keepTargetHover\");\r\n if (keephover) {\r\n const bg = this.get(\"background\");\r\n this._keepHoverDp = new MultiDisposer([\r\n bg.events.on(\"pointerover\", (_ev) => {\r\n let target = this.get(\"tooltipTarget\");\r\n if (target) {\r\n if (target.parent && target.parent.getPrivate(\"tooltipTarget\") == target) {\r\n target = target.parent;\r\n }\r\n target.hover();\r\n }\r\n }),\r\n bg.events.on(\"pointerout\", (_ev) => {\r\n let target = this.get(\"tooltipTarget\");\r\n if (target) {\r\n if (target.parent && target.parent.getPrivate(\"tooltipTarget\") == target) {\r\n target = target.parent;\r\n }\r\n if (!this._htmlContentHovered) {\r\n target.unhover();\r\n }\r\n }\r\n })\r\n ]);\r\n this.label.onPrivate(\"htmlElement\", (htmlElement) => {\r\n if (this._keepHoverDp && htmlElement) {\r\n this._keepHoverDp.disposers.push($utils.addEventListener(htmlElement, \"pointerleave\", (ev) => {\r\n const outEvent = this.root._renderer.getEvent(ev);\r\n bg.events.dispatch(\"pointerout\", {\r\n type: \"pointerout\",\r\n originalEvent: outEvent.event,\r\n point: outEvent.point,\r\n simulated: false,\r\n target: bg\r\n });\r\n }));\r\n }\r\n });\r\n }\r\n else {\r\n if (this._keepHoverDp) {\r\n this._keepHoverDp.dispose();\r\n this._keepHoverDp = undefined;\r\n }\r\n }\r\n }\r\n }\r\n _onShow() {\r\n super._onShow();\r\n this.updateBackgroundColor();\r\n }\r\n updateBackgroundColor() {\r\n let tooltipTarget = this.get(\"tooltipTarget\");\r\n const background = this.get(\"background\");\r\n let fill;\r\n let stroke;\r\n if (tooltipTarget && background) {\r\n fill = tooltipTarget.get(\"fill\");\r\n stroke = tooltipTarget.get(\"stroke\");\r\n if (fill == null) {\r\n fill = stroke;\r\n }\r\n if (this.get(\"getFillFromSprite\")) {\r\n if (this._fillDp) {\r\n this._fillDp.dispose();\r\n }\r\n if (fill != null) {\r\n background.set(\"fill\", fill);\r\n }\r\n this._fillDp = tooltipTarget.on(\"fill\", (fill) => {\r\n if (fill != null) {\r\n background.set(\"fill\", fill);\r\n this._updateTextColor(fill);\r\n }\r\n });\r\n this._disposers.push(this._fillDp);\r\n }\r\n if (this.get(\"getStrokeFromSprite\")) {\r\n if (this._strokeDp) {\r\n this._strokeDp.dispose();\r\n }\r\n if (fill != null) {\r\n background.set(\"stroke\", fill);\r\n }\r\n this._strokeDp = tooltipTarget.on(\"fill\", (fill) => {\r\n if (fill != null) {\r\n background.set(\"stroke\", fill);\r\n }\r\n });\r\n this._disposers.push(this._strokeDp);\r\n }\r\n if (this.get(\"getLabelFillFromSprite\")) {\r\n if (this._labelDp) {\r\n this._labelDp.dispose();\r\n }\r\n if (fill != null) {\r\n this.label.set(\"fill\", fill);\r\n }\r\n this._labelDp = tooltipTarget.on(\"fill\", (fill) => {\r\n if (fill != null) {\r\n this.label.set(\"fill\", fill);\r\n }\r\n });\r\n this._disposers.push(this._labelDp);\r\n }\r\n }\r\n this._updateTextColor(fill);\r\n }\r\n _updateTextColor(fill) {\r\n if (this.get(\"autoTextColor\")) {\r\n if (fill == null) {\r\n fill = this.get(\"background\").get(\"fill\");\r\n }\r\n if (fill == null) {\r\n fill = this._root.interfaceColors.get(\"background\");\r\n }\r\n if (fill instanceof Color) {\r\n this.label.set(\"fill\", Color.alternative(fill, this._root.interfaceColors.get(\"alternativeText\"), this._root.interfaceColors.get(\"text\")));\r\n }\r\n }\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n this.label._setDataItem(dataItem);\r\n }\r\n _updateBackground() {\r\n super.updateBackground();\r\n const parent = this._root.container;\r\n if (parent) {\r\n let cw = 0.5;\r\n let ch = 0.5;\r\n let centerX = this.get(\"centerX\");\r\n if (centerX instanceof Percent) {\r\n cw = centerX.value;\r\n }\r\n let centerY = this.get(\"centerY\");\r\n if (centerY instanceof Percent) {\r\n ch = centerY.value;\r\n }\r\n let parentW = parent.width();\r\n let parentH = parent.height();\r\n let tooltipContainer = this.parent;\r\n let xx = 0;\r\n let yy = 0;\r\n if (tooltipContainer) {\r\n xx = tooltipContainer.x();\r\n yy = tooltipContainer.y();\r\n const layerMargin = tooltipContainer.get(\"layerMargin\");\r\n if (layerMargin) {\r\n xx += layerMargin.left || 0;\r\n yy += layerMargin.top || 0;\r\n parentW += (layerMargin.left || 0) + (layerMargin.right || 0);\r\n parentH += (layerMargin.top || 0) + (layerMargin.bottom || 0);\r\n }\r\n }\r\n const bounds = this.get(\"bounds\", { left: -xx, top: -yy, right: parentW - xx, bottom: parentH - yy });\r\n this._updateBounds();\r\n let w = this.width();\r\n let h = this.height();\r\n // use old w and h,as when tooltip is hidden, these are 0 and unneeded animation happens\r\n if (w === 0) {\r\n w = this._w;\r\n }\r\n if (h === 0) {\r\n h = this._h;\r\n }\r\n let pointTo = this.get(\"pointTo\", { x: parentW / 2, y: parentH / 2 });\r\n let x = pointTo.x;\r\n let y = pointTo.y;\r\n let pointerOrientation = this.get(\"pointerOrientation\");\r\n let background = this.get(\"background\");\r\n let pointerLength = 0;\r\n let bgStrokeSizeY = 0;\r\n let bgStrokeSizeX = 0;\r\n if (background instanceof PointedRectangle) {\r\n pointerLength = background.get(\"pointerLength\", 0);\r\n bgStrokeSizeY = background.get(\"strokeWidth\", 0) / 2;\r\n bgStrokeSizeX = bgStrokeSizeY;\r\n background.set(\"width\", w);\r\n background.set(\"height\", h);\r\n }\r\n let pointerX = 0;\r\n let pointerY = 0;\r\n let boundsW = bounds.right - bounds.left;\r\n let boundsH = bounds.bottom - bounds.top;\r\n // horizontal\r\n if (pointerOrientation == \"horizontal\" || pointerOrientation == \"left\" || pointerOrientation == \"right\") {\r\n bgStrokeSizeY = 0;\r\n if (pointerOrientation == \"horizontal\") {\r\n if (x > bounds.left + boundsW / 2) {\r\n x -= (w * (1 - cw) + pointerLength);\r\n bgStrokeSizeX *= -1;\r\n }\r\n else {\r\n x += (w * cw + pointerLength);\r\n }\r\n }\r\n else if (pointerOrientation == \"left\") {\r\n x += (w * (1 - cw) + pointerLength);\r\n }\r\n else {\r\n x -= (w * cw + pointerLength);\r\n bgStrokeSizeX *= -1;\r\n }\r\n }\r\n // vertical pointer\r\n else {\r\n bgStrokeSizeX = 0;\r\n if (pointerOrientation == \"vertical\") {\r\n if (y > bounds.top + h / 2 + pointerLength) {\r\n y -= (h * (1 - ch) + pointerLength);\r\n }\r\n else {\r\n y += (h * ch + pointerLength);\r\n bgStrokeSizeY *= -1;\r\n }\r\n }\r\n else if (pointerOrientation == \"down\") {\r\n y -= (h * (1 - ch) + pointerLength);\r\n }\r\n else {\r\n y += (h * ch + pointerLength);\r\n bgStrokeSizeY *= -1;\r\n }\r\n }\r\n x = $math.fitToRange(x, bounds.left + w * cw, bounds.left + boundsW - w * (1 - cw)) + bgStrokeSizeX;\r\n y = $math.fitToRange(y, bounds.top + h * ch, bounds.top + boundsH - h * (1 - ch)) - bgStrokeSizeY;\r\n pointerX = pointTo.x - x + w * cw + bgStrokeSizeX;\r\n pointerY = pointTo.y - y + h * ch - bgStrokeSizeY;\r\n this._fx = x;\r\n this._fy = y;\r\n const animationDuration = this.get(\"animationDuration\", 0);\r\n if (animationDuration > 0 && this.get(\"visible\") && this.get(\"opacity\") > 0.1) {\r\n const animationEasing = this.get(\"animationEasing\");\r\n this.animate({ key: \"x\", to: x, duration: animationDuration, easing: animationEasing });\r\n this.animate({ key: \"y\", to: y, duration: animationDuration, easing: animationEasing });\r\n }\r\n else {\r\n this.set(\"x\", x);\r\n this.set(\"y\", y);\r\n }\r\n if (background instanceof PointedRectangle) {\r\n background.set(\"pointerX\", pointerX);\r\n background.set(\"pointerY\", pointerY);\r\n }\r\n if (w > 0) {\r\n this._w = w;\r\n }\r\n if (h > 0) {\r\n this._h = h;\r\n }\r\n }\r\n }\r\n}\r\nObject.defineProperty(Tooltip, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Tooltip\"\r\n});\r\nObject.defineProperty(Tooltip, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Container.classNames.concat([Tooltip.className])\r\n});\r\n//# sourceMappingURL=Tooltip.js.map","import { Entity } from \"./Entity\";\r\nimport { TextFormatter } from \"./TextFormatter\";\r\nimport * as $object from \"./Object\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * Number formatter\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\r\n * @important\r\n */\r\nexport class NumberFormatter extends Entity {\r\n _setDefaults() {\r\n // Defaults\r\n this._setDefault(\"negativeBase\", 0);\r\n this._setDefault(\"numberFormat\", \"#,###.#####\");\r\n this._setDefault(\"smallNumberThreshold\", 1.00);\r\n const bns = \"_big_number_suffix_\";\r\n const sns = \"_small_number_suffix_\";\r\n const bs = \"_byte_suffix_\";\r\n this._setDefault(\"bigNumberPrefixes\", [\r\n { \"number\": 1e+3, \"suffix\": this._t(bns + \"3\") },\r\n { \"number\": 1e+6, \"suffix\": this._t(bns + \"6\") },\r\n { \"number\": 1e+9, \"suffix\": this._t(bns + \"9\") },\r\n { \"number\": 1e+12, \"suffix\": this._t(bns + \"12\") },\r\n { \"number\": 1e+15, \"suffix\": this._t(bns + \"15\") },\r\n { \"number\": 1e+18, \"suffix\": this._t(bns + \"18\") },\r\n { \"number\": 1e+21, \"suffix\": this._t(bns + \"21\") },\r\n { \"number\": 1e+24, \"suffix\": this._t(bns + \"24\") }\r\n ]);\r\n this._setDefault(\"smallNumberPrefixes\", [\r\n { \"number\": 1e-24, \"suffix\": this._t(sns + \"24\") },\r\n { \"number\": 1e-21, \"suffix\": this._t(sns + \"21\") },\r\n { \"number\": 1e-18, \"suffix\": this._t(sns + \"18\") },\r\n { \"number\": 1e-15, \"suffix\": this._t(sns + \"15\") },\r\n { \"number\": 1e-12, \"suffix\": this._t(sns + \"12\") },\r\n { \"number\": 1e-9, \"suffix\": this._t(sns + \"9\") },\r\n { \"number\": 1e-6, \"suffix\": this._t(sns + \"6\") },\r\n { \"number\": 1e-3, \"suffix\": this._t(sns + \"3\") }\r\n ]);\r\n this._setDefault(\"bytePrefixes\", [\r\n { \"number\": 1, suffix: this._t(bs + \"B\") },\r\n { \"number\": 1024, suffix: this._t(bs + \"KB\") },\r\n { \"number\": 1048576, suffix: this._t(bs + \"MB\") },\r\n { \"number\": 1073741824, suffix: this._t(bs + \"GB\") },\r\n { \"number\": 1099511627776, suffix: this._t(bs + \"TB\") },\r\n { \"number\": 1125899906842624, suffix: this._t(bs + \"PB\") }\r\n ]);\r\n super._setDefaults();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n }\r\n /**\r\n * Formats the number according to specific format.\r\n *\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @return Formatted number\r\n */\r\n format(value, format, precision) {\r\n // no format passed in or \"Number\"\r\n if (format == null || ($type.isString(format) && format.toLowerCase() === \"number\")) {\r\n format = this.get(\"numberFormat\", \"\");\r\n }\r\n // Init return value\r\n let formatted;\r\n // Cast to number just in case\r\n // TODO: maybe use better casting\r\n let source = Number(value);\r\n // Is it a built-in format or Intl.NumberFormatOptions\r\n if ($type.isObject(format)) {\r\n try {\r\n if (this.get(\"intlLocales\")) {\r\n return new Intl.NumberFormat(this.get(\"intlLocales\"), format).format(source);\r\n }\r\n else {\r\n return new Intl.NumberFormat(undefined, format).format(source);\r\n }\r\n }\r\n catch (e) {\r\n return \"Invalid\";\r\n }\r\n }\r\n else {\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // Get format info (it will also deal with parser caching)\r\n let info = this.parseFormat(format, this._root.language);\r\n // format and replace the number\r\n let details;\r\n if (source > this.get(\"negativeBase\")) {\r\n details = info.positive;\r\n }\r\n else if (source < this.get(\"negativeBase\")) {\r\n details = info.negative;\r\n }\r\n else {\r\n details = info.zero;\r\n }\r\n // Adjust precision\r\n if (precision != null && !details.mod) {\r\n details = $object.copy(details);\r\n details.decimals.active = source == 0 ? 0 : precision;\r\n }\r\n // Format\r\n formatted = details.template.split($type.PLACEHOLDER).join(this.applyFormat(source, details));\r\n }\r\n if (this.get(\"forceLTR\") === true) {\r\n formatted = \"‎\" + formatted;\r\n }\r\n return formatted;\r\n }\r\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param language Language\r\n * @ignore\r\n */\r\n parseFormat(format, language) {\r\n // Check cache\r\n // TODO\r\n // let cached = this.getCache(format);\r\n // if (cached != null) {\r\n // \treturn cached;\r\n // }\r\n const thousandSeparator = language.translateEmpty(\"_thousandSeparator\");\r\n const decimalSeparator = language.translateEmpty(\"_decimalSeparator\");\r\n // init format parse info holder\r\n let info = {\r\n \"positive\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": thousandSeparator\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": decimalSeparator\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n },\r\n \"negative\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": thousandSeparator\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": decimalSeparator\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n },\r\n \"zero\": {\r\n \"thousands\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"interval\": -1,\r\n \"separator\": thousandSeparator\r\n },\r\n \"decimals\": {\r\n \"active\": -1,\r\n \"passive\": -1,\r\n \"separator\": decimalSeparator\r\n },\r\n \"template\": \"\",\r\n \"source\": \"\",\r\n \"parsed\": false\r\n }\r\n };\r\n // Escape double vertical bars (that mean display one vertical bar)\r\n format = format.replace(\"||\", $type.PLACEHOLDER2);\r\n // Split it up and deal with different formats\r\n let parts = format.split(\"|\");\r\n info.positive.source = parts[0];\r\n if (typeof parts[2] === \"undefined\") {\r\n info.zero = info.positive;\r\n }\r\n else {\r\n info.zero.source = parts[2];\r\n }\r\n if (typeof parts[1] === \"undefined\") {\r\n info.negative = info.positive;\r\n }\r\n else {\r\n info.negative.source = parts[1];\r\n }\r\n // Parse each\r\n $object.each(info, (_part, item) => {\r\n // Already parsed\r\n if (item.parsed) {\r\n return;\r\n }\r\n // Check cached\r\n // TODO\r\n // if (typeof this.getCache(item.source) !== \"undefined\") {\r\n // \tinfo[part] = this.getCache(item.source);\r\n // \treturn;\r\n // }\r\n // Begin parsing\r\n let partFormat = item.source;\r\n // Just \"Number\"?\r\n if (partFormat.toLowerCase() === \"number\") {\r\n partFormat = this.get(\"numberFormat\", \"#,###.#####\");\r\n }\r\n // Let TextFormatter split into chunks\r\n let chunks = TextFormatter.chunk(partFormat, true);\r\n for (let i = 0; i < chunks.length; i++) {\r\n let chunk = chunks[i];\r\n // replace back double vertical bar\r\n chunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\r\n if (chunk.type === \"value\") {\r\n // Parse format\r\n // Look for codes\r\n let matches = chunk.text.match(/[#0.,]+[ ]?[abespABESP%!]?[abespABESP‰!]?/);\r\n if (matches) {\r\n if (matches === null || matches[0] === \"\") {\r\n // no codes here - assume string\r\n // nothing to do here\r\n item.template += chunk.text;\r\n }\r\n else {\r\n // look for the format modifiers at the end\r\n let mods = matches[0].match(/[abespABESP%‰!]{2}|[abespABESP%‰]{1}$/);\r\n if (mods) {\r\n item.mod = mods[0].toLowerCase();\r\n item.modSpacing = matches[0].match(/[ ]{1}[abespABESP%‰!]{1}$/) ? true : false;\r\n }\r\n // break the format up\r\n let a = matches[0].split(\".\");\r\n // Deal with thousands\r\n if (a[0] === \"\") {\r\n // No directives for thousands\r\n // Leave default settings (no formatting)\r\n }\r\n else {\r\n // Counts\r\n item.thousands.active = (a[0].match(/0/g) || []).length;\r\n item.thousands.passive = (a[0].match(/\\#/g) || []).length + item.thousands.active;\r\n // Separator interval\r\n let b = a[0].split(\",\");\r\n if (b.length === 1) {\r\n // No thousands separators\r\n // Do nothing\r\n }\r\n else {\r\n // Use length fo the last chunk as thousands length\r\n item.thousands.interval = (b.pop() || \"\").length;\r\n if (item.thousands.interval === 0) {\r\n item.thousands.interval = -1;\r\n }\r\n }\r\n }\r\n // Deal with decimals\r\n if (typeof (a[1]) === \"undefined\") {\r\n // No directives for decimals\r\n // Leave at defaults (no formatting)\r\n }\r\n else {\r\n // Counts\r\n item.decimals.active = (a[1].match(/0/g) || []).length;\r\n item.decimals.passive = (a[1].match(/\\#/g) || []).length + item.decimals.active;\r\n }\r\n // Add special code to template\r\n item.template += chunk.text.split(matches[0]).join($type.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n else {\r\n // Quoted string - take it as it is\r\n item.template += chunk.text;\r\n }\r\n }\r\n // Apply style formatting\r\n //item.template = getTextFormatter().format(item.template, this.outputFormat);\r\n // Save cache\r\n // TODO\r\n //this.setCache(item.source, item);\r\n // Mark this as parsed\r\n item.parsed = true;\r\n });\r\n // Save cache (the whole thing)\r\n // TODO\r\n //this.setCache(format, info);\r\n return info;\r\n }\r\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by parseFormat()\r\n * @return Formatted number\r\n * @ignore\r\n */\r\n applyFormat(value, details) {\r\n // Use absolute values\r\n let negative = value < 0;\r\n value = Math.abs(value);\r\n // Recalculate according to modifier\r\n let prefix = \"\", suffix = \"\";\r\n let mods = details.mod ? details.mod.split(\"\") : [];\r\n if (mods.indexOf(\"b\") !== -1) {\r\n let a = this.applyPrefix(value, this.get(\"bytePrefixes\"), mods.indexOf(\"!\") !== -1);\r\n value = a[0];\r\n prefix = a[1];\r\n suffix = a[2];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (mods.indexOf(\"a\") !== -1) {\r\n let a = this.applyPrefix(value, value < this.get(\"smallNumberThreshold\") ? this.get(\"smallNumberPrefixes\") : this.get(\"bigNumberPrefixes\"), mods.indexOf(\"!\") !== -1);\r\n value = a[0];\r\n prefix = a[1];\r\n suffix = a[2];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (mods.indexOf(\"p\") !== -1) {\r\n let ol = Math.min(value.toString().length + 2, 21);\r\n //value *= 100;\r\n value = parseFloat(value.toPrecision(ol));\r\n prefix = this._root.language.translate(\"_percentPrefix\");\r\n suffix = this._root.language.translate(\"_percentSuffix\");\r\n if (prefix == \"\" && suffix == \"\") {\r\n suffix = \"%\";\r\n }\r\n }\r\n else if (mods.indexOf(\"%\") !== -1) {\r\n let ol = Math.min(value.toString().length + 2, 21);\r\n value *= 100;\r\n value = parseFloat(value.toPrecision(ol));\r\n suffix = \"%\";\r\n }\r\n else if (mods.indexOf(\"‰\") !== -1) {\r\n let ol = Math.min(value.toString().length + 3, 21);\r\n value *= 1000;\r\n value = parseFloat(value.toPrecision(ol));\r\n suffix = \"‰\";\r\n }\r\n // Round to passive\r\n if (mods.indexOf(\"e\") !== -1) {\r\n // convert the value to exponential\r\n let exp;\r\n if (details.decimals.passive >= 0) {\r\n exp = value.toExponential(details.decimals.passive).split(\"e\");\r\n }\r\n else {\r\n exp = value.toExponential().split(\"e\");\r\n }\r\n value = Number(exp[0]);\r\n suffix = \"e\" + exp[1];\r\n if (details.modSpacing) {\r\n suffix = \" \" + suffix;\r\n }\r\n }\r\n else if (details.decimals.passive === 0) {\r\n value = Math.round(value);\r\n }\r\n else if (details.decimals.passive > 0) {\r\n const decimals = $utils.decimalPlaces(value);\r\n if (decimals > 0) {\r\n const d = Math.pow(10, details.decimals.passive);\r\n value = Math.round(parseFloat((value * d).toFixed(decimals))) / d;\r\n }\r\n }\r\n // Init return value\r\n let res = \"\";\r\n // Calc integer and decimal parts\r\n let a = $type.numberToString(value).split(\".\");\r\n // Format integers\r\n let ints = a[0];\r\n // Pad integers to active length\r\n if (ints.length < details.thousands.active) {\r\n ints = Array(details.thousands.active - ints.length + 1).join(\"0\") + ints;\r\n }\r\n // Insert thousands separators\r\n if (details.thousands.interval > 0) {\r\n let ip = [];\r\n let intsr = ints.split(\"\").reverse().join(\"\");\r\n for (let i = 0, len = ints.length; i <= len; i += details.thousands.interval) {\r\n let c = intsr.substr(i, details.thousands.interval).split(\"\").reverse().join(\"\");\r\n if (c !== \"\") {\r\n ip.unshift(c);\r\n }\r\n }\r\n ints = ip.join(details.thousands.separator);\r\n }\r\n // Add integers\r\n res += ints;\r\n // Add decimals\r\n if (a.length === 1) {\r\n a.push(\"\");\r\n }\r\n let decs = a[1];\r\n // Fill zeros?\r\n if (decs.length < details.decimals.active) {\r\n decs += Array(details.decimals.active - decs.length + 1).join(\"0\");\r\n }\r\n if (decs !== \"\") {\r\n res += details.decimals.separator + decs;\r\n }\r\n // Can't have empty return value\r\n if (res === \"\") {\r\n res = \"0\";\r\n }\r\n // Add minus sign back\r\n if (value !== 0 && negative && (mods.indexOf(\"s\") === -1)) {\r\n res = \"-\" + res;\r\n }\r\n // Add suffixes/prefixes\r\n if (prefix) {\r\n res = prefix + res;\r\n }\r\n if (suffix) {\r\n res += suffix;\r\n }\r\n return res;\r\n }\r\n applyPrefix(value, prefixes, force = false) {\r\n let newvalue = value;\r\n let prefix = \"\";\r\n let suffix = \"\";\r\n let applied = false;\r\n let k = 1;\r\n for (let i = 0, len = prefixes.length; i < len; i++) {\r\n if (prefixes[i].number <= value) {\r\n if (prefixes[i].number === 0) {\r\n newvalue = 0;\r\n }\r\n else {\r\n newvalue = value / prefixes[i].number;\r\n k = prefixes[i].number;\r\n }\r\n prefix = prefixes[i].prefix;\r\n suffix = prefixes[i].suffix;\r\n applied = true;\r\n }\r\n }\r\n if (!applied && force && prefixes.length && value != 0) {\r\n // Prefix was not applied. Use the first prefix.\r\n newvalue = value / prefixes[0].number;\r\n prefix = prefixes[0].prefix;\r\n suffix = prefixes[0].suffix;\r\n applied = true;\r\n }\r\n if (applied) {\r\n newvalue = parseFloat(newvalue.toPrecision(Math.min(k.toString().length + Math.floor(newvalue).toString().replace(/[^0-9]*/g, \"\").length, 21)));\r\n }\r\n return [newvalue, prefix, suffix];\r\n }\r\n /**\r\n * Replaces brackets with temporary placeholders.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Input text\r\n * @return Escaped text\r\n */\r\n escape(text) {\r\n return text.replace(\"||\", $type.PLACEHOLDER2);\r\n }\r\n /**\r\n * Replaces placeholders back to brackets.\r\n *\r\n * @ignore Exclude from docs\r\n * @param text Escaped text\r\n * @return Unescaped text\r\n */\r\n unescape(text) {\r\n return text.replace($type.PLACEHOLDER2, \"|\");\r\n }\r\n}\r\n//# sourceMappingURL=NumberFormatter.js.map","function parseDate(timezone, date) {\r\n let year = 0;\r\n let month = 0;\r\n let day = 1;\r\n let hour = 0;\r\n let minute = 0;\r\n let second = 0;\r\n let millisecond = 0;\r\n let weekday = 0;\r\n timezone.formatToParts(date).forEach((x) => {\r\n switch (x.type) {\r\n case \"year\":\r\n year = +x.value;\r\n break;\r\n case \"month\":\r\n month = (+x.value) - 1;\r\n break;\r\n case \"day\":\r\n day = +x.value;\r\n break;\r\n case \"hour\":\r\n hour = +x.value;\r\n break;\r\n case \"minute\":\r\n minute = +x.value;\r\n break;\r\n case \"second\":\r\n second = +x.value;\r\n break;\r\n case \"fractionalSecond\":\r\n millisecond = +x.value;\r\n break;\r\n case \"weekday\":\r\n switch (x.value) {\r\n case \"Sun\":\r\n weekday = 0;\r\n break;\r\n case \"Mon\":\r\n weekday = 1;\r\n break;\r\n case \"Tue\":\r\n weekday = 2;\r\n break;\r\n case \"Wed\":\r\n weekday = 3;\r\n break;\r\n case \"Thu\":\r\n weekday = 4;\r\n break;\r\n case \"Fri\":\r\n weekday = 5;\r\n break;\r\n case \"Sat\":\r\n weekday = 6;\r\n break;\r\n }\r\n }\r\n });\r\n if (hour === 24) {\r\n hour = 0;\r\n }\r\n return { year, month, day, hour, minute, second, millisecond, weekday };\r\n}\r\nfunction toUTCDate(timezone, date) {\r\n const { year, month, day, hour, minute, second, millisecond } = parseDate(timezone, date);\r\n return Date.UTC(year, month, day, hour, minute, second, millisecond);\r\n}\r\nexport class Timezone {\r\n constructor(timezone, isReal) {\r\n Object.defineProperty(this, \"_utc\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_dtf\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"name\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this.name = timezone;\r\n this._utc = new Intl.DateTimeFormat(\"UTC\", {\r\n hour12: false,\r\n timeZone: \"UTC\",\r\n year: \"numeric\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n second: \"2-digit\",\r\n weekday: \"short\",\r\n fractionalSecondDigits: 3,\r\n });\r\n this._dtf = new Intl.DateTimeFormat(\"UTC\", {\r\n hour12: false,\r\n timeZone: timezone,\r\n year: \"numeric\",\r\n month: \"2-digit\",\r\n day: \"2-digit\",\r\n hour: \"2-digit\",\r\n minute: \"2-digit\",\r\n second: \"2-digit\",\r\n weekday: \"short\",\r\n fractionalSecondDigits: 3,\r\n });\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param timezone IANA timezone\r\n * @return Instantiated object\r\n */\r\n static new(timezone) {\r\n return (new this(timezone, true));\r\n }\r\n convertLocal(date) {\r\n const offset = this.offsetUTC(date);\r\n const userOffset = date.getTimezoneOffset();\r\n const output = new Date(date);\r\n output.setUTCMinutes(output.getUTCMinutes() - (offset - userOffset));\r\n const newUserOffset = output.getTimezoneOffset();\r\n if (userOffset != newUserOffset) {\r\n output.setUTCMinutes(output.getUTCMinutes() + newUserOffset - userOffset);\r\n }\r\n return output;\r\n }\r\n offsetUTC(date) {\r\n const utc = toUTCDate(this._utc, date);\r\n const dtf = toUTCDate(this._dtf, date);\r\n return (utc - dtf) / 60000;\r\n }\r\n parseDate(date) {\r\n return parseDate(this._dtf, date);\r\n }\r\n}\r\n//# sourceMappingURL=Timezone.js.map","import { Entity } from \"./Entity\";\r\nimport { TextFormatter } from \"./TextFormatter\";\r\nimport { Timezone } from \"./Timezone\";\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\n/**\r\n * Date formatter class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\r\n * @important\r\n */\r\nexport class DateFormatter extends Entity {\r\n _setDefaults() {\r\n // Defaults\r\n this._setDefault(\"capitalize\", true);\r\n this._setDefault(\"dateFormat\", \"yyyy-MM-dd\");\r\n super._setDefaults();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n }\r\n /**\r\n * Formats a source `Date` object into string format\r\n * @param source inpout date\r\n * @param format Output format\r\n * @param ignoreTimezone Ignore timezone?\r\n * @return Formatted date\r\n */\r\n format(source, format, ignoreTimezone = false) {\r\n // Locale?\r\n // TODO\r\n // No format passed in or it's empty\r\n if (typeof format === \"undefined\" || format === \"\") {\r\n format = this.get(\"dateFormat\", \"yyyy-MM-dd\");\r\n }\r\n // Init return value\r\n let formatted;\r\n // Cast?\r\n // TODO: decide if we need to cast\r\n let date = source;\r\n // Is it a built-in format or Intl.DateTimeFormat\r\n if ($type.isObject(format)) {\r\n try {\r\n const locales = this.get(\"intlLocales\");\r\n if (locales) {\r\n return new Intl.DateTimeFormat(locales, format).format(date);\r\n }\r\n else {\r\n return new Intl.DateTimeFormat(undefined, format).format(date);\r\n }\r\n }\r\n catch (e) {\r\n return \"Invalid\";\r\n }\r\n }\r\n // get format info (it will also deal with parser caching)\r\n let info = this.parseFormat(format);\r\n // Should we apply custom time zone?\r\n const timezone = this._root.timezone;\r\n if (timezone && !this._root.utc && !ignoreTimezone) {\r\n date = timezone.convertLocal(date);\r\n }\r\n // Check if it's a valid date\r\n if (!$type.isNumber(date.getTime())) {\r\n // TODO translation\r\n //return this._t(\"Invalid date\");\r\n return \"Invalid date\";\r\n }\r\n // Apply format\r\n formatted = this.applyFormat(date, info, ignoreTimezone);\r\n // Capitalize\r\n if (this.get(\"capitalize\")) {\r\n formatted = formatted.replace(/^.{1}/, formatted.substr(0, 1).toUpperCase());\r\n }\r\n // We're done\r\n return formatted;\r\n }\r\n /**\r\n * Applies format to Date.\r\n *\r\n * @param date Date object\r\n * @param info Parsed format information\r\n * @return Formatted date string\r\n */\r\n applyFormat(date, info, ignoreTimezone = false) {\r\n // Init return value\r\n let res = info.template;\r\n // Get values\r\n let fullYear, month, weekday, day, hours, minutes, seconds, milliseconds, timestamp = date.getTime();\r\n if (this._root.utc && !ignoreTimezone) {\r\n fullYear = date.getUTCFullYear();\r\n month = date.getUTCMonth();\r\n weekday = date.getUTCDay();\r\n day = date.getUTCDate();\r\n hours = date.getUTCHours();\r\n minutes = date.getUTCMinutes();\r\n seconds = date.getUTCSeconds();\r\n milliseconds = date.getUTCMilliseconds();\r\n }\r\n else {\r\n fullYear = date.getFullYear();\r\n month = date.getMonth();\r\n weekday = date.getDay();\r\n day = date.getDate();\r\n hours = date.getHours();\r\n minutes = date.getMinutes();\r\n seconds = date.getSeconds();\r\n milliseconds = date.getMilliseconds();\r\n }\r\n // Go through each part and format/replace it in template\r\n for (let i = 0, len = info.parts.length; i < len; i++) {\r\n let value = \"\";\r\n switch (info.parts[i]) {\r\n case \"G\":\r\n value = this._t(fullYear < 0\r\n ? \"_era_bc\"\r\n : \"_era_ad\");\r\n break;\r\n case \"yyyy\":\r\n value = Math.abs(fullYear).toString();\r\n if (fullYear < 0) {\r\n value += this._t(\"_era_bc\");\r\n }\r\n break;\r\n case \"yyy\":\r\n case \"yy\":\r\n case \"y\":\r\n value = Math.abs(fullYear).toString().substr(-info.parts[i].length);\r\n if (fullYear < 0) {\r\n value += this._t(\"_era_bc\");\r\n }\r\n break;\r\n case \"YYYY\":\r\n case \"YYY\":\r\n case \"YY\":\r\n case \"Y\":\r\n let year = $utils.getWeekYear(date, this._root.utc);\r\n if (info.parts[i] == \"YYYY\") {\r\n value = Math.abs(year).toString();\r\n }\r\n else {\r\n value = Math.abs(year).toString().substr(-info.parts[i].length);\r\n }\r\n if (year < 0) {\r\n value += this._t(\"_era_bc\");\r\n }\r\n break;\r\n case \"u\":\r\n // @todo\r\n break;\r\n case \"q\":\r\n value = \"\" + Math.ceil((date.getMonth() + 1) / 3);\r\n break;\r\n case \"MMMMM\":\r\n value = this._t(this._getMonth(month)).substr(0, 1);\r\n break;\r\n case \"MMMM\":\r\n value = this._t(this._getMonth(month));\r\n break;\r\n case \"MMM\":\r\n value = this._t(this._getShortMonth(month));\r\n break;\r\n case \"MM\":\r\n value = $utils.padString(month + 1, 2, \"0\");\r\n break;\r\n case \"M\":\r\n value = (month + 1).toString();\r\n break;\r\n case \"ww\":\r\n value = $utils.padString($utils.getWeek(date, this._root.utc), 2, \"0\");\r\n break;\r\n case \"w\":\r\n value = $utils.getWeek(date, this._root.utc).toString();\r\n break;\r\n case \"W\":\r\n value = $utils.getMonthWeek(date, this._root.utc).toString();\r\n break;\r\n case \"dd\":\r\n value = $utils.padString(day, 2, \"0\");\r\n break;\r\n case \"d\":\r\n value = day.toString();\r\n break;\r\n case \"DD\":\r\n case \"DDD\":\r\n value = $utils.padString($utils.getYearDay(date, this._root.utc).toString(), info.parts[i].length, \"0\");\r\n break;\r\n case \"D\":\r\n value = $utils.getYearDay(date, this._root.utc).toString();\r\n break;\r\n case \"F\":\r\n // @todo\r\n break;\r\n case \"g\":\r\n // @todo\r\n break;\r\n case \"t\":\r\n value = this._root.language.translateFunc(\"_dateOrd\").call(this, day);\r\n break;\r\n case \"E\":\r\n value = (weekday || 7).toString();\r\n break;\r\n case \"EE\":\r\n value = $utils.padString((weekday || 7).toString(), 2, \"0\");\r\n break;\r\n case \"EEE\":\r\n case \"eee\":\r\n value = this._t(this._getShortWeekday(weekday));\r\n break;\r\n case \"EEEE\":\r\n case \"eeee\":\r\n value = this._t(this._getWeekday(weekday));\r\n break;\r\n case \"EEEEE\":\r\n case \"eeeee\":\r\n value = this._t(this._getShortWeekday(weekday)).substr(0, 1);\r\n break;\r\n case \"e\":\r\n case \"ee\":\r\n value = (weekday - (this._root.locale.firstDayOfWeek || 1) + 1).toString();\r\n if (info.parts[i] == \"ee\") {\r\n value = $utils.padString(value, 2, \"0\");\r\n }\r\n break;\r\n case \"a\":\r\n if (hours >= 12) {\r\n value = this._t(\"PM\");\r\n }\r\n else {\r\n value = this._t(\"AM\");\r\n }\r\n break;\r\n case \"aa\":\r\n if (hours >= 12) {\r\n value = this._t(\"P.M.\");\r\n }\r\n else {\r\n value = this._t(\"A.M.\");\r\n }\r\n break;\r\n case \"aaa\":\r\n if (hours >= 12) {\r\n value = this._t(\"P\");\r\n }\r\n else {\r\n value = this._t(\"A\");\r\n }\r\n break;\r\n case \"h\":\r\n value = $utils.get12Hours(hours).toString();\r\n break;\r\n case \"hh\":\r\n value = $utils.padString($utils.get12Hours(hours), 2, \"0\");\r\n break;\r\n case \"H\":\r\n value = hours.toString();\r\n break;\r\n case \"HH\":\r\n value = $utils.padString(hours, 2, \"0\");\r\n break;\r\n case \"K\":\r\n value = $utils.get12Hours(hours, 0).toString();\r\n break;\r\n case \"KK\":\r\n value = $utils.padString($utils.get12Hours(hours, 0), 2, \"0\");\r\n break;\r\n case \"k\":\r\n value = (hours + 1).toString();\r\n break;\r\n case \"kk\":\r\n value = $utils.padString(hours + 1, 2, \"0\");\r\n break;\r\n case \"m\":\r\n value = minutes.toString();\r\n break;\r\n case \"mm\":\r\n value = $utils.padString(minutes, 2, \"0\");\r\n break;\r\n case \"s\":\r\n value = seconds.toString();\r\n break;\r\n case \"ss\":\r\n value = $utils.padString(seconds, 2, \"0\");\r\n break;\r\n case \"S\":\r\n case \"SS\":\r\n case \"SSS\":\r\n value = Math.round((milliseconds / 1000) * Math.pow(10, info.parts[i].length)).toString();\r\n break;\r\n case \"x\":\r\n value = timestamp.toString();\r\n break;\r\n case \"n\":\r\n case \"nn\":\r\n case \"nnn\":\r\n value = $utils.padString(milliseconds, info.parts[i].length, \"0\");\r\n break;\r\n case \"z\":\r\n value = $utils.getTimeZone(date, false, false, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined).replace(/[+-]+[0-9]+$/, \"\");\r\n break;\r\n case \"zz\":\r\n value = $utils.getTimeZone(date, true, false, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined);\r\n break;\r\n case \"zzz\":\r\n value = $utils.getTimeZone(date, false, true, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined).replace(/[+-]+[0-9]+$/, \"\");\r\n break;\r\n case \"zzzz\":\r\n value = $utils.getTimeZone(date, true, true, this._root.utc, this._root.timezone ? this._root.timezone.name : undefined);\r\n break;\r\n case \"Z\":\r\n case \"ZZ\":\r\n let timezone = this._root.utc ? \"UTC\" : this._root.timezone;\r\n if (timezone instanceof Timezone) {\r\n timezone = timezone.name;\r\n }\r\n const offset = timezone ? $utils.getTimezoneOffset(timezone) : date.getTimezoneOffset();\r\n let tz = Math.abs(offset) / 60;\r\n let tzh = Math.floor(tz);\r\n let tzm = tz * 60 - tzh * 60;\r\n if (this._root.utc) {\r\n tzh = 0;\r\n tzm = 0;\r\n }\r\n if (info.parts[i] == \"Z\") {\r\n value = \"GMT\";\r\n value += offset > 0 ? \"-\" : \"+\";\r\n value += $utils.padString(tzh, 2) + \":\" + $utils.padString(tzm, 2);\r\n }\r\n else {\r\n value = offset > 0 ? \"-\" : \"+\";\r\n value += $utils.padString(tzh, 2) + $utils.padString(tzm, 2);\r\n }\r\n break;\r\n case \"i\":\r\n value = date.toISOString();\r\n break;\r\n case \"I\":\r\n value = date.toUTCString();\r\n break;\r\n }\r\n res = res.replace($type.PLACEHOLDER, value);\r\n }\r\n return res;\r\n }\r\n /**\r\n * Parses format into structured infromation.\r\n *\r\n * @param format Format template\r\n */\r\n parseFormat(format) {\r\n // Check cache\r\n // TODO: implement caching of the parsed format\r\n // Init format parse info holder\r\n let info = {\r\n \"template\": \"\",\r\n \"parts\": []\r\n };\r\n // Let TextFormatter split into chunks\r\n let chunks = TextFormatter.chunk(format, true);\r\n for (let i = 0; i < chunks.length; i++) {\r\n let chunk = chunks[i];\r\n if (chunk.type === \"value\") {\r\n // Just \"Date\"?\r\n if (chunk.text.match(/^date$/i)) {\r\n let dateFormat = this.get(\"dateFormat\", \"yyyy-MM-dd\");\r\n if (!$type.isString(dateFormat)) {\r\n dateFormat = \"yyyy-MM-dd\";\r\n }\r\n chunk.text = dateFormat;\r\n }\r\n // Find all possible parts\r\n let matches = chunk.text.match(/G|yyyy|yyy|yy|y|YYYY|YYY|YY|Y|u|q|MMMMM|MMMM|MMM|MM|M|ww|w|W|dd|d|DDD|DD|D|F|g|EEEEE|EEEE|EEE|EE|E|eeeee|eeee|eee|ee|e|aaa|aa|a|hh|h|HH|H|KK|K|kk|k|mm|m|ss|s|SSS|SS|S|A|zzzz|zzz|zz|z|ZZ|Z|t|x|nnn|nn|n|i|I/g);\r\n // Found?\r\n if (matches) {\r\n // Populate template\r\n for (let x = 0; x < matches.length; x++) {\r\n info.parts.push(matches[x]);\r\n chunk.text = chunk.text.replace(matches[x], $type.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n // Apply to template\r\n info.template += chunk.text;\r\n }\r\n // Save cache\r\n // TODO\r\n return info;\r\n }\r\n _months() {\r\n return [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\r\n }\r\n _getMonth(index) {\r\n return this._months()[index];\r\n }\r\n _shortMonths() {\r\n return [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May(short)\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n }\r\n _getShortMonth(index) {\r\n return this._shortMonths()[index];\r\n }\r\n _weekdays() {\r\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\r\n }\r\n _getWeekday(index) {\r\n return this._weekdays()[index];\r\n }\r\n _shortWeekdays() {\r\n return [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n }\r\n _getShortWeekday(index) {\r\n return this._shortWeekdays()[index];\r\n }\r\n parse(source, format) {\r\n // Is it already a Date\r\n if (source instanceof Date) {\r\n return source;\r\n }\r\n // Is it a numeric timestamp\r\n if ($type.isNumber(source)) {\r\n return new Date(source);\r\n }\r\n // Are we parsing a timestamp?\r\n if (format == \"x\") {\r\n return new Date(parseInt(source));\r\n }\r\n // No? Let's check if it's string, and try converting to it if nec\r\n if (!$type.isString(source)) {\r\n source = source.toString();\r\n }\r\n // Init return value\r\n let res;\r\n // Init RegEx for parsing\r\n let reg = \"\";\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // Clip format to length of the source string\r\n format = format.substr(0, source.length);\r\n // Parse format\r\n let info = this.parseFormat(format);\r\n // Init parsed items holder\r\n let parsedIndexes = {\r\n \"year\": -1,\r\n \"year3\": -1,\r\n \"year2\": -1,\r\n \"year1\": -1,\r\n \"month\": -1,\r\n \"monthShort\": -1,\r\n \"monthLong\": -1,\r\n \"weekdayShort\": -1,\r\n \"weekdayLong\": -1,\r\n \"day\": -1,\r\n \"yearDay\": -1,\r\n \"week\": -1,\r\n \"hourBase0\": -1,\r\n \"hour12Base0\": -1,\r\n \"hourBase1\": -1,\r\n \"hour12Base1\": -1,\r\n \"minute\": -1,\r\n \"second\": -1,\r\n \"millisecond\": -1,\r\n \"millisecondDigits\": -1,\r\n \"am\": -1,\r\n \"zone\": -1,\r\n \"timestamp\": -1,\r\n \"iso\": -1\r\n };\r\n // Init values\r\n let resValues = {\r\n \"year\": 1970,\r\n \"month\": 0,\r\n \"day\": 1,\r\n \"hour\": 0,\r\n \"minute\": 0,\r\n \"second\": 0,\r\n \"millisecond\": 0,\r\n \"timestamp\": null,\r\n \"offset\": 0,\r\n \"utc\": this._root.utc\r\n };\r\n // Index adjuster\r\n let indexAdjust = 0;\r\n let index = 0;\r\n // Iterate through all of the parts\r\n for (let i = 0; i < info.parts.length; i++) {\r\n // Set current match index\r\n index = i + indexAdjust + 1;\r\n switch (info.parts[i]) {\r\n case \"yyyy\":\r\n case \"YYYY\":\r\n reg += \"([0-9]{4})\";\r\n parsedIndexes.year = index;\r\n break;\r\n case \"yyy\":\r\n case \"YYY\":\r\n reg += \"([0-9]{3})\";\r\n parsedIndexes.year3 = index;\r\n break;\r\n case \"yy\":\r\n case \"YY\":\r\n reg += \"([0-9]{2})\";\r\n parsedIndexes.year2 = index;\r\n break;\r\n case \"y\":\r\n case \"Y\":\r\n reg += \"([0-9]{1})\";\r\n parsedIndexes.year1 = index;\r\n break;\r\n case \"MMMM\":\r\n reg += \"(\" + this.getStringList(this._months()).join(\"|\") + \")\";\r\n parsedIndexes.monthLong = index;\r\n break;\r\n case \"MMM\":\r\n reg += \"(\" + this.getStringList(this._shortMonths()).join(\"|\") + \")\";\r\n parsedIndexes.monthShort = index;\r\n break;\r\n case \"MM\":\r\n case \"M\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.month = index;\r\n break;\r\n case \"ww\":\r\n case \"w\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.week = index;\r\n break;\r\n case \"dd\":\r\n case \"d\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.day = index;\r\n break;\r\n case \"DDD\":\r\n case \"DD\":\r\n case \"D\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.yearDay = index;\r\n break;\r\n case \"dddd\":\r\n reg += \"(\" + this.getStringList(this._weekdays()).join(\"|\") + \")\";\r\n parsedIndexes.weekdayLong = index;\r\n break;\r\n case \"ddd\":\r\n reg += \"(\" + this.getStringList(this._shortWeekdays()).join(\"|\") + \")\";\r\n parsedIndexes.weekdayShort = index;\r\n break;\r\n case \"aaa\":\r\n case \"aa\":\r\n case \"a\":\r\n // TODO: fix (escape regex)\r\n reg += \"(\" + this.getStringList([\"AM\", \"PM\", \"A\\.M\\.\", \"P\\.M\\.\", \"A\", \"P\"]).join(\"|\") + \")\";\r\n parsedIndexes.am = index;\r\n break;\r\n case \"hh\":\r\n case \"h\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hour12Base1 = index;\r\n break;\r\n case \"HH\":\r\n case \"H\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hourBase0 = index;\r\n break;\r\n case \"KK\":\r\n case \"K\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hour12Base0 = index;\r\n break;\r\n case \"kk\":\r\n case \"k\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.hourBase1 = index;\r\n break;\r\n case \"mm\":\r\n case \"m\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.minute = index;\r\n break;\r\n case \"ss\":\r\n case \"s\":\r\n reg += \"([0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.second = index;\r\n break;\r\n case \"SSS\":\r\n case \"SS\":\r\n case \"S\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.millisecond = index;\r\n parsedIndexes.millisecondDigits = info.parts[i].length;\r\n break;\r\n case \"nnn\":\r\n case \"nn\":\r\n case \"n\":\r\n reg += \"([0-9]{3}|[0-9]{2}|[0-9]{1})\";\r\n parsedIndexes.millisecond = index;\r\n break;\r\n case \"x\":\r\n reg += \"([0-9]{1,})\";\r\n parsedIndexes.timestamp = index;\r\n break;\r\n case \"Z\":\r\n reg += \"GMT([-+]+[0-9]{2}:[0-9]{2})\";\r\n parsedIndexes.zone = index;\r\n break;\r\n case \"ZZ\":\r\n reg += \"([\\\\-+]+[0-9]{2}[0-9]{2})\";\r\n parsedIndexes.zone = index;\r\n break;\r\n case \"i\":\r\n reg += \"([0-9]{4})-?([0-9]{2})-?([0-9]{2})T?([0-9]{2}):?([0-9]{2}):?([0-9]{2})\\\\.?([0-9]{0,3})([zZ]|[+\\\\-][0-9]{2}:?[0-9]{2}|$)\";\r\n parsedIndexes.iso = index;\r\n indexAdjust += 7;\r\n break;\r\n case \"G\":\r\n case \"YYYY\":\r\n case \"YYY\":\r\n case \"YY\":\r\n case \"Y\":\r\n case \"MMMMM\":\r\n case \"W\":\r\n case \"EEEEE\":\r\n case \"EEEE\":\r\n case \"EEE\":\r\n case \"EE\":\r\n case \"E\":\r\n case \"eeeee\":\r\n case \"eeee\":\r\n case \"eee\":\r\n case \"ee\":\r\n case \"e\":\r\n case \"zzzz\":\r\n case \"zzz\":\r\n case \"zz\":\r\n case \"z\":\r\n case \"t\":\r\n // Ignore\r\n indexAdjust--;\r\n break;\r\n }\r\n reg += \"[^0-9]*\";\r\n }\r\n // Try matching\r\n let regex = new RegExp(reg);\r\n let matches = source.match(regex);\r\n if (matches) {\r\n // Populate the date object\r\n // Full year\r\n if (parsedIndexes.year > -1) {\r\n resValues.year = parseInt(matches[parsedIndexes.year]);\r\n }\r\n // 3-digit year\r\n if (parsedIndexes.year3 > -1) {\r\n let val = parseInt(matches[parsedIndexes.year3]);\r\n val += 1000;\r\n resValues.year = val;\r\n }\r\n // 2-digit year\r\n if (parsedIndexes.year2 > -1) {\r\n let val = parseInt(matches[parsedIndexes.year2]);\r\n if (val > 50) {\r\n val += 1000;\r\n }\r\n else {\r\n val += 2000;\r\n }\r\n resValues.year = val;\r\n }\r\n // 1-digit year\r\n if (parsedIndexes.year1 > -1) {\r\n let val = parseInt(matches[parsedIndexes.year1]);\r\n val = Math.floor((new Date().getFullYear()) / 10) * 10 + val;\r\n resValues.year = val;\r\n }\r\n // Full month\r\n if (parsedIndexes.monthLong > -1) {\r\n resValues.month = this.resolveMonth(matches[parsedIndexes.monthLong]);\r\n }\r\n // Short month\r\n if (parsedIndexes.monthShort > -1) {\r\n resValues.month = this.resolveShortMonth(matches[parsedIndexes.monthShort]);\r\n }\r\n // Numeric month\r\n if (parsedIndexes.month > -1) {\r\n resValues.month = parseInt(matches[parsedIndexes.month]) - 1;\r\n }\r\n // Weekday\r\n // @todo\r\n // Week\r\n if ((parsedIndexes.week > -1) && (parsedIndexes.day === -1)) {\r\n // We parse weeks ONLY if day is not explicitly set\r\n // TODO: this needs work\r\n // (but maybe later - I can hardly imagine anyone passing their dates in weeks)\r\n resValues.month = 0;\r\n resValues.day = $utils.getDayFromWeek(parseInt(matches[parsedIndexes.week]), resValues.year, 1, this._root.utc);\r\n }\r\n // Day\r\n if (parsedIndexes.day > -1) {\r\n resValues.day = parseInt(matches[parsedIndexes.day]);\r\n }\r\n // Year day\r\n if (parsedIndexes.yearDay > -1) {\r\n resValues.month = 0;\r\n resValues.day = parseInt(matches[parsedIndexes.yearDay]);\r\n }\r\n // 24 Hour (0-23)\r\n if (parsedIndexes.hourBase0 > -1) {\r\n resValues.hour = parseInt(matches[parsedIndexes.hourBase0]);\r\n }\r\n // 24 Hour (1-24)\r\n if (parsedIndexes.hourBase1 > -1) {\r\n resValues.hour = parseInt(matches[parsedIndexes.hourBase1]) - 1;\r\n }\r\n // 12 Hour (0-11)\r\n if (parsedIndexes.hour12Base0 > -1) {\r\n let val = parseInt(matches[parsedIndexes.hour12Base0]);\r\n if (val == 11) {\r\n val = 0;\r\n }\r\n if ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\r\n val += 12;\r\n }\r\n resValues.hour = val;\r\n }\r\n // 12 Hour (1-12)\r\n if (parsedIndexes.hour12Base1 > -1) {\r\n let val = parseInt(matches[parsedIndexes.hour12Base1]);\r\n if (val == 12) {\r\n val = 0;\r\n }\r\n if ((parsedIndexes.am > -1) && !this.isAm(matches[parsedIndexes.am])) {\r\n val += 12;\r\n }\r\n resValues.hour = val;\r\n }\r\n // Minute\r\n if (parsedIndexes.minute > -1) {\r\n resValues.minute = parseInt(matches[parsedIndexes.minute]);\r\n }\r\n // Second\r\n if (parsedIndexes.second > -1) {\r\n resValues.second = parseInt(matches[parsedIndexes.second]);\r\n }\r\n // Millisecond\r\n if (parsedIndexes.millisecond > -1) {\r\n let val = parseInt(matches[parsedIndexes.millisecond]);\r\n if (parsedIndexes.millisecondDigits == 2) {\r\n val *= 10;\r\n }\r\n else if (parsedIndexes.millisecondDigits == 1) {\r\n val *= 100;\r\n }\r\n resValues.millisecond = val;\r\n }\r\n // Timestamp\r\n if (parsedIndexes.timestamp > -1) {\r\n resValues.timestamp = parseInt(matches[parsedIndexes.timestamp]);\r\n const ts = new Date(resValues.timestamp);\r\n resValues.year = ts.getUTCFullYear();\r\n resValues.month = ts.getUTCMonth();\r\n resValues.day = ts.getUTCDate();\r\n resValues.hour = ts.getUTCHours();\r\n resValues.minute = ts.getUTCMinutes();\r\n resValues.second = ts.getUTCSeconds();\r\n resValues.millisecond = ts.getUTCMilliseconds();\r\n }\r\n // Adjust time zone\r\n if (parsedIndexes.zone > -1) {\r\n resValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.zone]);\r\n }\r\n // ISO\r\n if (parsedIndexes.iso > -1) {\r\n resValues.year = $type.toNumber(matches[parsedIndexes.iso + 0]);\r\n resValues.month = $type.toNumber(matches[parsedIndexes.iso + 1]) - 1;\r\n resValues.day = $type.toNumber(matches[parsedIndexes.iso + 2]);\r\n resValues.hour = $type.toNumber(matches[parsedIndexes.iso + 3]);\r\n resValues.minute = $type.toNumber(matches[parsedIndexes.iso + 4]);\r\n resValues.second = $type.toNumber(matches[parsedIndexes.iso + 5]);\r\n resValues.millisecond = $type.toNumber(matches[parsedIndexes.iso + 6]);\r\n if (matches[parsedIndexes.iso + 7] == \"Z\" || matches[parsedIndexes.iso + 7] == \"z\") {\r\n resValues.utc = true;\r\n }\r\n else if (matches[parsedIndexes.iso + 7] != \"\") {\r\n resValues.offset = this.resolveTimezoneOffset(new Date(resValues.year, resValues.month, resValues.day), matches[parsedIndexes.iso + 7]);\r\n }\r\n }\r\n // Create Date object\r\n if (resValues.utc) {\r\n res = new Date(Date.UTC(resValues.year, resValues.month, resValues.day, resValues.hour, resValues.minute, resValues.second, resValues.millisecond));\r\n }\r\n else {\r\n res = new Date(resValues.year, resValues.month, resValues.day, resValues.hour, resValues.minute + resValues.offset, resValues.second, resValues.millisecond);\r\n }\r\n }\r\n else {\r\n // Didn't match anything\r\n // Let's try dropping it into Date constructor and hope for the best\r\n res = new Date(source);\r\n }\r\n return res;\r\n }\r\n resolveTimezoneOffset(date, zone) {\r\n let value = zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/);\r\n if (value) {\r\n let match = zone.match(/([+\\-]?)([0-9]{2}):?([0-9]{2})/);\r\n let dir = match[1];\r\n let hour = match[2];\r\n let minute = match[3];\r\n let offset = parseInt(hour) * 60 + parseInt(minute);\r\n // Adjust offset\r\n // Making it negative does not seem to make sense, but it's right\r\n // because of how JavaScript calculates GMT offsets\r\n if (dir == \"+\") {\r\n offset *= -1;\r\n }\r\n // Check the difference in offset\r\n let originalOffset = (date || new Date()).getTimezoneOffset();\r\n let diff = offset - originalOffset;\r\n return diff;\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Resolves month name (i.e. \"December\") into a month number (11).\r\n *\r\n * @param value Month name\r\n * @return Month number\r\n */\r\n resolveMonth(value) {\r\n // Let's try English first\r\n let month = this._months().indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n // Try the translation\r\n if (!this._root.language.isDefault()) {\r\n month = this._root.language.translateAll(this._months()).indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Resolves short month name (i.e. \"Dec\") into a month number.\r\n *\r\n * @param value Short month name\r\n * @return Month number\r\n */\r\n resolveShortMonth(value) {\r\n // Let's try English first\r\n let month = this._shortMonths().indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n // Maybe long month (workaround for May)\r\n month = this._months().indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n // Try the translation\r\n if (this._root.language && !this._root.language.isDefault()) {\r\n month = this._root.language.translateAll(this._shortMonths()).indexOf(value);\r\n if (month > -1) {\r\n return month;\r\n }\r\n }\r\n return 0;\r\n }\r\n /**\r\n * Checks if passed in string represents AM/PM notation in many of its\r\n * versions.\r\n *\r\n * @param value Source string\r\n * @return Is it AM/PM?\r\n */\r\n isAm(value) {\r\n let list = this.getStringList([\"AM\", \"A.M.\", \"A\"]);\r\n return list.indexOf(value.toUpperCase()) > -1;\r\n }\r\n /**\r\n * Translates list of strings.\r\n *\r\n * @param list Source strings\r\n * @return Translated strings\r\n */\r\n getStringList(list) {\r\n let res = [];\r\n for (let i = 0; i < list.length; i++) {\r\n // translate?\r\n if (this._root.language) {\r\n res.push($utils.escapeForRgex(this._t(list[i])));\r\n }\r\n else {\r\n res.push($utils.escapeForRgex(list[i]));\r\n }\r\n }\r\n return res;\r\n }\r\n}\r\n//# sourceMappingURL=DateFormatter.js.map","import { Entity } from \"./Entity\";\r\nimport { TextFormatter } from \"./TextFormatter\";\r\nimport * as $object from \"./Object\";\r\nimport * as $utils from \"./Utils\";\r\nimport * as $type from \"./Type\";\r\n/**\r\n * A class used to format numberic values as time duration.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-durations/} for more info\r\n */\r\nexport class DurationFormatter extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Collection of aliases for units.\r\n */\r\n Object.defineProperty(this, \"_unitAliases\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {\r\n \"Y\": \"y\",\r\n \"D\": \"d\",\r\n \"H\": \"h\",\r\n \"K\": \"h\",\r\n \"k\": \"h\",\r\n \"n\": \"S\"\r\n }\r\n });\r\n }\r\n _setDefaults() {\r\n const dmillisecond = \"_duration_millisecond\";\r\n const dsecond = \"_duration_second\";\r\n const dminute = \"_duration_minute\";\r\n const dhour = \"_duration_hour\";\r\n const dday = \"_duration_day\";\r\n const dweek = \"_duration_week\";\r\n const dmonth = \"_duration_month\";\r\n const dyear = \"_duration_year\";\r\n const asecond = \"_second\";\r\n const aminute = \"_minute\";\r\n const ahour = \"_hour\";\r\n const aday = \"_day\";\r\n const aweek = \"_week\";\r\n const amonth = \"_week\";\r\n const ayear = \"_year\";\r\n // Defaults\r\n this._setDefault(\"negativeBase\", 0);\r\n this._setDefault(\"baseUnit\", \"second\");\r\n this._setDefault(\"durationFormats\", {\r\n \"millisecond\": {\r\n \"millisecond\": this._t(dmillisecond),\r\n \"second\": this._t((dmillisecond + asecond)),\r\n \"minute\": this._t((dmillisecond + aminute)),\r\n \"hour\": this._t((dmillisecond + ahour)),\r\n \"day\": this._t((dmillisecond + aday)),\r\n \"week\": this._t((dmillisecond + aweek)),\r\n \"month\": this._t((dmillisecond + amonth)),\r\n \"year\": this._t((dmillisecond + ayear))\r\n },\r\n \"second\": {\r\n \"second\": this._t((dsecond)),\r\n \"minute\": this._t((dsecond + aminute)),\r\n \"hour\": this._t((dsecond + ahour)),\r\n \"day\": this._t((dsecond + aday)),\r\n \"week\": this._t((dsecond + aweek)),\r\n \"month\": this._t((dsecond + amonth)),\r\n \"year\": this._t((dsecond + ayear))\r\n },\r\n \"minute\": {\r\n \"minute\": this._t((dminute)),\r\n \"hour\": this._t((dminute + ahour)),\r\n \"day\": this._t((dminute + aday)),\r\n \"week\": this._t((dminute + aweek)),\r\n \"month\": this._t((dminute + amonth)),\r\n \"year\": this._t((dminute + ayear))\r\n },\r\n \"hour\": {\r\n \"hour\": this._t((dhour)),\r\n \"day\": this._t((dhour + aday)),\r\n \"week\": this._t((dhour + aweek)),\r\n \"month\": this._t((dhour + amonth)),\r\n \"year\": this._t((dhour + ayear))\r\n },\r\n \"day\": {\r\n \"day\": this._t((dday)),\r\n \"week\": this._t((dday + aweek)),\r\n \"month\": this._t((dday + amonth)),\r\n \"year\": this._t((dday + ayear))\r\n },\r\n \"week\": {\r\n \"week\": this._t((dweek)),\r\n \"month\": this._t((dweek + amonth)),\r\n \"year\": this._t((dweek + ayear))\r\n },\r\n \"month\": {\r\n \"month\": this._t((dmonth)),\r\n \"year\": this._t((dmonth + ayear))\r\n },\r\n \"year\": {\r\n \"year\": this._t(dyear)\r\n }\r\n });\r\n super._setDefaults();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n }\r\n /**\r\n * Formats the number as duration.\r\n *\r\n * For example `1000` (base unit seconds) would be converted to `16:40` as in\r\n * 16 minutes and 40 seconds.\r\n *\r\n * @param value Value to format\r\n * @param format Format to apply\r\n * @param base Override base unit\r\n * @return Formatted number\r\n */\r\n format(value, format, base) {\r\n // no base unit?\r\n let baseUnit = base || this.get(\"baseUnit\");\r\n // no format passed in or empty\r\n if (typeof format === \"undefined\" || format === \"\") {\r\n if (this.get(\"durationFormat\") != null) {\r\n format = this.get(\"durationFormat\");\r\n }\r\n else {\r\n format = this.getFormat($type.toNumber(value), undefined, baseUnit);\r\n }\r\n }\r\n // Clean format\r\n format = $utils.cleanFormat(format);\r\n // get format info (it will also deal with parser caching)\r\n let info = this.parseFormat(format, baseUnit);\r\n // cast to number just in case\r\n // TODO: maybe use better casting\r\n let source = Number(value);\r\n // format and replace the number\r\n let details;\r\n if (source > this.get(\"negativeBase\")) {\r\n details = info.positive;\r\n }\r\n else if (source < this.get(\"negativeBase\")) {\r\n details = info.negative;\r\n }\r\n else {\r\n details = info.zero;\r\n }\r\n // Format\r\n let formatted = this.applyFormat(source, details);\r\n // Apply color?\r\n if (details.color !== \"\") {\r\n formatted = \"[\" + details.color + \"]\" + formatted + \"[/]\";\r\n }\r\n return formatted;\r\n }\r\n /**\r\n * Parses supplied format into structured object which can be used to format\r\n * the number.\r\n *\r\n * @param format Format string, i.e. \"#,###.00\"\r\n * @param base Override base unit\r\n * @return Parsed information\r\n */\r\n parseFormat(format, base) {\r\n // Check cache\r\n // TODO\r\n // let cached = this.getCache(format);\r\n // if (cached != null) {\r\n // \treturn cached;\r\n // }\r\n // no base unit?\r\n let baseUnit = base || this.get(\"baseUnit\");\r\n // Initialize duration parsing info\r\n let info = {\r\n \"positive\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n },\r\n \"negative\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n },\r\n \"zero\": {\r\n \"color\": \"\",\r\n \"template\": \"\",\r\n \"parts\": [],\r\n \"source\": \"\",\r\n \"baseUnit\": baseUnit,\r\n \"parsed\": false,\r\n \"absolute\": false\r\n }\r\n };\r\n // Escape double vertical bars (that mean display one vertical bar)\r\n format = format.replace(\"||\", $type.PLACEHOLDER2);\r\n // Split it up and deal with different formats\r\n let parts = format.split(\"|\");\r\n info.positive.source = parts[0];\r\n if (typeof parts[2] === \"undefined\") {\r\n info.zero = info.positive;\r\n }\r\n else {\r\n info.zero.source = parts[2];\r\n }\r\n if (typeof parts[1] === \"undefined\") {\r\n info.negative = info.positive;\r\n }\r\n else {\r\n info.negative.source = parts[1];\r\n }\r\n // Parse each\r\n $object.each(info, (_part, item) => {\r\n // Already parsed\r\n if (item.parsed) {\r\n return;\r\n }\r\n // Check cached\r\n // TODO\r\n // if (typeof this.getCache(item.source) !== \"undefined\") {\r\n // \tinfo[part] = this.getCache(item.source);\r\n // \treturn;\r\n // }\r\n // Begin parsing\r\n let partFormat = item.source;\r\n // Check for [] directives\r\n let dirs = [];\r\n dirs = item.source.match(/^\\[([^\\]]*)\\]/);\r\n if (dirs && dirs.length && dirs[0] !== \"\") {\r\n partFormat = item.source.substr(dirs[0].length);\r\n item.color = dirs[1];\r\n }\r\n // Let TextFormatter split into chunks\r\n let chunks = TextFormatter.chunk(partFormat, true);\r\n for (let i = 0; i < chunks.length; i++) {\r\n let chunk = chunks[i];\r\n // replace back double vertical bar\r\n chunk.text = chunk.text.replace($type.PLACEHOLDER2, \"|\");\r\n if (chunk.type === \"value\") {\r\n // Just \"Duration\"?\r\n // if (chunk.text.toLowerCase() === \"duration\") {\r\n // \tchunk.text = durationFormat;\r\n // }\r\n // Check for \"a\" (absolute) modifier\r\n if (chunk.text.match(/[yYMdDwhHKkmsSn]+a/)) {\r\n item.absolute = true;\r\n chunk.text = chunk.text.replace(/([yYMdDwhHKkmsSn]+)a/, \"$1\");\r\n }\r\n // Find all possible parts\r\n let matches = chunk.text.match(/y+|Y+|M+|d+|D+|w+|h+|H+|K+|k+|m+|s+|S+|n+/g);\r\n if (matches) {\r\n // Populate template\r\n for (let x = 0; x < matches.length; x++) {\r\n // Is it an alias?\r\n if (matches[x] == null) {\r\n matches[x] = this._unitAliases[matches[x]];\r\n }\r\n item.parts.push(matches[x]);\r\n chunk.text = chunk.text.replace(matches[x], $type.PLACEHOLDER);\r\n }\r\n }\r\n }\r\n // Apply to template\r\n item.template += chunk.text;\r\n }\r\n // Apply style formatting\r\n //item.template = TextFormatter.format(item.template, this.outputFormat);\r\n // Save cache\r\n // TODO\r\n //this.setCache(item.source, item);\r\n // Mark this as parsed\r\n item.parsed = true;\r\n });\r\n // Save cache (the whole thing)\r\n // TODO\r\n //this.setCache(format, info);\r\n return info;\r\n }\r\n /**\r\n * Applies parsed format to a numeric value.\r\n *\r\n * @param value Value\r\n * @param details Parsed format as returned by {parseFormat}\r\n * @return Formatted duration\r\n */\r\n applyFormat(value, details) {\r\n // Use absolute values\r\n let negative = !details.absolute && (value < this.get(\"negativeBase\"));\r\n value = Math.abs(value);\r\n // Recalculate to milliseconds\r\n let tstamp = this.toTimeStamp(value, details.baseUnit);\r\n // Init return value\r\n let res = details.template;\r\n // Iterate through duration parts\r\n for (let i = 0, len = details.parts.length; i < len; i++) {\r\n // Gather the part\r\n let part = details.parts[i];\r\n let unit = this._toTimeUnit(part.substr(0, 1));\r\n let digits = part.length;\r\n // Calculate current unit value\r\n let ints;\r\n const unitValue = this._getUnitValue(unit);\r\n if (i < (len - 1)) {\r\n ints = Math.floor(tstamp / unitValue);\r\n }\r\n else {\r\n ints = Math.round(tstamp / unitValue);\r\n }\r\n res = res.replace($type.PLACEHOLDER, $utils.padString(ints, digits, \"0\"));\r\n // Reduce timestamp\r\n tstamp -= ints * unitValue;\r\n }\r\n // Reapply negative sign\r\n if (negative) {\r\n res = \"-\" + res;\r\n }\r\n return res;\r\n }\r\n /**\r\n * Converts numeric value to timestamp in milliseconds.\r\n *\r\n * @param value A source value\r\n * @param baseUnit Base unit the source value is in: \"q\", \"s\", \"i\", \"h\", \"d\", \"w\", \"m\", \"y\"\r\n * @return Value representation as a timestamp in milliseconds\r\n */\r\n toTimeStamp(value, baseUnit) {\r\n return value * this._getUnitValue(baseUnit);\r\n }\r\n _toTimeUnit(code) {\r\n switch (code) {\r\n case \"S\":\r\n return \"millisecond\";\r\n case \"s\":\r\n return \"second\";\r\n case \"m\":\r\n return \"minute\";\r\n case \"h\":\r\n return \"hour\";\r\n case \"d\":\r\n return \"day\";\r\n case \"w\":\r\n return \"week\";\r\n case \"M\":\r\n return \"month\";\r\n case \"y\":\r\n return \"year\";\r\n }\r\n ;\r\n }\r\n /**\r\n * Returns appropriate default format for the value.\r\n *\r\n * If `maxValue` is sepcified, it will use that value to determine the time\r\n * unit for the format.\r\n *\r\n * For example if your `baseUnit` is `\"second\"` and you pass in `10`, you\r\n * will get `\"10\"`.\r\n *\r\n * However, you might want it to be formatted in the context of bigger scale,\r\n * say 10 minutes (600 seconds). If you pass in `600` as `maxValue`, all\r\n * values, including small ones will use format with minutes, e.g.:\r\n * `00:10`, `00:50`, `12: 30`, etc.\r\n *\r\n * @param value Value to format\r\n * @param maxValue Maximum value to be used to determine format\r\n * @param baseUnit Base unit of the value\r\n * @return Format\r\n */\r\n getFormat(value, maxValue, baseUnit) {\r\n // Is format override set?\r\n if (this.get(\"durationFormat\") != null) {\r\n return this.get(\"durationFormat\");\r\n }\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.get(\"baseUnit\");\r\n }\r\n if (maxValue != null && value != maxValue) {\r\n value = Math.abs(value);\r\n maxValue = Math.abs(maxValue);\r\n let maxUnit = this.getValueUnit(Math.max(value, maxValue), baseUnit);\r\n return this.get(\"durationFormats\")[baseUnit][maxUnit];\r\n }\r\n else {\r\n let unit = this.getValueUnit(value, baseUnit);\r\n return this.get(\"durationFormats\")[baseUnit][unit];\r\n }\r\n }\r\n /**\r\n * Returns value's closest denominator time unit, e.g 100 seconds is\r\n * `\"minute\"`, while 59 seconds would still be `second`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Denominator\r\n */\r\n getValueUnit(value, baseUnit) {\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.get(\"baseUnit\");\r\n }\r\n // Convert to milliseconds\r\n let currentUnit;\r\n let ms = this.getMilliseconds(value, baseUnit);\r\n $object.eachContinue(this._getUnitValues(), (key, val) => {\r\n if (key == baseUnit || currentUnit) {\r\n let num = ms / val;\r\n if (num <= 1) {\r\n if (!currentUnit) {\r\n currentUnit = key;\r\n }\r\n return false;\r\n }\r\n currentUnit = key;\r\n }\r\n return true;\r\n });\r\n return currentUnit;\r\n }\r\n /**\r\n * Converts value to milliseconds according to `baseUnit`.\r\n *\r\n * @param value Source duration value\r\n * @param baseUnit Base unit\r\n * @return Value in milliseconds\r\n */\r\n getMilliseconds(value, baseUnit) {\r\n // Get base unit\r\n if (!baseUnit) {\r\n baseUnit = this.get(\"baseUnit\");\r\n }\r\n return value * this._getUnitValue(baseUnit);\r\n }\r\n _getUnitValue(timeUnit) {\r\n return this._getUnitValues()[timeUnit];\r\n }\r\n _getUnitValues() {\r\n return {\r\n \"millisecond\": 1,\r\n \"second\": 1000,\r\n \"minute\": 60000,\r\n \"hour\": 3600000,\r\n \"day\": 86400000,\r\n \"week\": 604800000,\r\n \"month\": 2592000000,\r\n \"year\": 31536000000,\r\n };\r\n }\r\n}\r\n//# sourceMappingURL=DurationFormatter.js.map","/**\r\n * amCharts 5 locale\r\n *\r\n * Locale: en\r\n * Language: International English\r\n * Author: Martynas Majeris\r\n *\r\n * Follow instructions in [on this page](https://www.amcharts.com/docs/v5/tutorials/creating-translations/) to make corrections or add new translations.\r\n *\r\n * ---\r\n * Edit but leave the header section above this line. You can remove any\r\n * subsequent comment sections.\r\n * ---\r\n *\r\n * Use this file as a template to create translations. Leave the key part in\r\n * English intact. Fill the value with a translation.\r\n *\r\n * Empty string means no translation, so default \"International English\"\r\n * will be used.\r\n *\r\n * If you need the translation to literally be an empty string, use `null`\r\n * instead.\r\n *\r\n * IMPORTANT:\r\n * When translating make good effort to keep the translation length\r\n * at least the same chartcount as the English, especially for short prompts.\r\n *\r\n * Having significantly longer prompts may distort the actual charts.\r\n *\r\n * NOTE:\r\n * Some prompts - like months or weekdays - come in two versions: full and\r\n * shortened.\r\n *\r\n * If there's no official shortened version of these in your language, and it\r\n * would not be possible to invent such short versions that don't seem weird\r\n * to native speakers of that language, fill those with the same as full\r\n * version.\r\n *\r\n * PLACEHOLDERS:\r\n * Some prompts have placeholders like \"%1\". Those will be replaced by actual\r\n * values during translation and should be retained in the translated prompts.\r\n *\r\n * Placeholder positions may be changed to better suit structure of the\r\n * sentence.\r\n *\r\n * For example \"From %1 to %2\", when actually used will replace \"%1\" with an\r\n * actual value representing range start, and \"%2\" will be replaced by end\r\n * value.\r\n *\r\n * E.g. in a Scrollbar for Value axis \"From %1 to %2\" will become\r\n * \"From 100 to 200\". You may translate \"From\" and \"to\", as well as re-arrange\r\n * the order of the prompt itself, but make sure the \"%1\" and \"%2\" remain, in\r\n * places where they will make sense.\r\n *\r\n * Save the file as language_LOCALE, i.e. `en_GB.ts`, `fr_FR.ts`, etc.\r\n */\r\nexport default {\r\n \"firstDayOfWeek\": 1,\r\n // Number formatting options.\r\n // \r\n // Please check with the local standards which separator is accepted to be\r\n // used for separating decimals, and which for thousands.\r\n \"_decimalSeparator\": \".\",\r\n \"_thousandSeparator\": \",\",\r\n // Position of the percent sign in numbers\r\n \"_percentPrefix\": null,\r\n \"_percentSuffix\": \"%\",\r\n // Suffixes for numbers\r\n // When formatting numbers, big or small numers might be reformatted to\r\n // shorter version, by applying a suffix.\r\n // \r\n // For example, 1000000 might become \"1m\".\r\n // Or 1024 might become \"1KB\" if we're formatting byte numbers.\r\n // \r\n // This section defines such suffixes for all such cases.\r\n \"_big_number_suffix_3\": \"k\",\r\n \"_big_number_suffix_6\": \"M\",\r\n \"_big_number_suffix_9\": \"G\",\r\n \"_big_number_suffix_12\": \"T\",\r\n \"_big_number_suffix_15\": \"P\",\r\n \"_big_number_suffix_18\": \"E\",\r\n \"_big_number_suffix_21\": \"Z\",\r\n \"_big_number_suffix_24\": \"Y\",\r\n \"_small_number_suffix_3\": \"m\",\r\n \"_small_number_suffix_6\": \"μ\",\r\n \"_small_number_suffix_9\": \"n\",\r\n \"_small_number_suffix_12\": \"p\",\r\n \"_small_number_suffix_15\": \"f\",\r\n \"_small_number_suffix_18\": \"a\",\r\n \"_small_number_suffix_21\": \"z\",\r\n \"_small_number_suffix_24\": \"y\",\r\n \"_byte_suffix_B\": \"B\",\r\n \"_byte_suffix_KB\": \"KB\",\r\n \"_byte_suffix_MB\": \"MB\",\r\n \"_byte_suffix_GB\": \"GB\",\r\n \"_byte_suffix_TB\": \"TB\",\r\n \"_byte_suffix_PB\": \"PB\",\r\n // Default date formats for various periods.\r\n // \r\n // This should reflect official or de facto formatting universally accepted\r\n // in the country translation is being made for\r\n // Available format codes here:\r\n // https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#Format_codes\r\n // \r\n // This will be used when formatting date/time for particular granularity,\r\n // e.g. \"_date_hour\" will be shown whenever we need to show time as hours.\r\n // \r\n // \"date\" is used as in default date format when showing standalone dates.\r\n \"_date\": \"yyyy-MM-dd\",\r\n \"_date_millisecond\": \"mm:ss SSS\",\r\n \"_date_millisecond_full\": \"HH:mm:ss SSS\",\r\n \"_date_second\": \"HH:mm:ss\",\r\n \"_date_second_full\": \"HH:mm:ss\",\r\n \"_date_minute\": \"HH:mm\",\r\n \"_date_minute_full\": \"HH:mm - MMM dd, yyyy\",\r\n \"_date_hour\": \"HH:mm\",\r\n \"_date_hour_full\": \"HH:mm - MMM dd, yyyy\",\r\n \"_date_day\": \"MMM dd\",\r\n \"_date_day_full\": \"MMM dd, yyyy\",\r\n \"_date_week\": \"ww\",\r\n \"_date_week_full\": \"MMM dd, yyyy\",\r\n \"_date_month\": \"MMM\",\r\n \"_date_month_full\": \"MMM, yyyy\",\r\n \"_date_year\": \"yyyy\",\r\n // Default duration formats for various base units.\r\n // \r\n // This will be used by DurationFormatter to format numeric values into\r\n // duration.\r\n // \r\n // Notice how each duration unit comes in several versions. This is to ensure\r\n // that each base unit is shown correctly.\r\n // \r\n // For example, if we have baseUnit set to \"second\", meaning our duration is\r\n // in seconds.\r\n // \r\n // If we pass in `50` to formatter, it will know that we have just 50 seconds\r\n // (less than a minute) so it will use format in `\"_duration_second\"` (\"ss\"),\r\n // and the formatted result will be in like `\"50\"`.\r\n // \r\n // If we pass in `70`, which is more than a minute, the formatter will switch\r\n // to `\"_duration_second_minute\"` (\"mm:ss\"), resulting in \"01:10\" formatted\r\n // text.\r\n // \r\n // Available codes here:\r\n // https://www.amcharts.com/docs/v4/concepts/formatters/formatting-duration/#Available_Codes\r\n \"_duration_millisecond\": \"SSS\",\r\n \"_duration_millisecond_second\": \"ss.SSS\",\r\n \"_duration_millisecond_minute\": \"mm:ss SSS\",\r\n \"_duration_millisecond_hour\": \"hh:mm:ss SSS\",\r\n \"_duration_millisecond_day\": \"d'd' mm:ss SSS\",\r\n \"_duration_millisecond_week\": \"d'd' mm:ss SSS\",\r\n \"_duration_millisecond_month\": \"M'm' dd'd' mm:ss SSS\",\r\n \"_duration_millisecond_year\": \"y'y' MM'm' dd'd' mm:ss SSS\",\r\n \"_duration_second\": \"ss\",\r\n \"_duration_second_minute\": \"mm:ss\",\r\n \"_duration_second_hour\": \"hh:mm:ss\",\r\n \"_duration_second_day\": \"d'd' hh:mm:ss\",\r\n \"_duration_second_week\": \"d'd' hh:mm:ss\",\r\n \"_duration_second_month\": \"M'm' dd'd' hh:mm:ss\",\r\n \"_duration_second_year\": \"y'y' MM'm' dd'd' hh:mm:ss\",\r\n \"_duration_minute\": \"mm\",\r\n \"_duration_minute_hour\": \"hh:mm\",\r\n \"_duration_minute_day\": \"d'd' hh:mm\",\r\n \"_duration_minute_week\": \"d'd' hh:mm\",\r\n \"_duration_minute_month\": \"M'm' dd'd' hh:mm\",\r\n \"_duration_minute_year\": \"y'y' MM'm' dd'd' hh:mm\",\r\n \"_duration_hour\": \"hh'h'\",\r\n \"_duration_hour_day\": \"d'd' hh'h'\",\r\n \"_duration_hour_week\": \"d'd' hh'h'\",\r\n \"_duration_hour_month\": \"M'm' dd'd' hh'h'\",\r\n \"_duration_hour_year\": \"y'y' MM'm' dd'd' hh'h'\",\r\n \"_duration_day\": \"d'd'\",\r\n \"_duration_day_week\": \"d'd'\",\r\n \"_duration_day_month\": \"M'm' dd'd'\",\r\n \"_duration_day_year\": \"y'y' MM'm' dd'd'\",\r\n \"_duration_week\": \"w'w'\",\r\n \"_duration_week_month\": \"w'w'\",\r\n \"_duration_week_year\": \"w'w'\",\r\n \"_duration_month\": \"M'm'\",\r\n \"_duration_month_year\": \"y'y' MM'm'\",\r\n \"_duration_year\": \"y'y'\",\r\n // Era translations\r\n \"_era_ad\": \"AD\",\r\n \"_era_bc\": \"BC\",\r\n // Day part, used in 12-hour formats, e.g. 5 P.M.\r\n // Please note that these come in 3 variants:\r\n // * one letter (e.g. \"A\")\r\n // * two letters (e.g. \"AM\")\r\n // * two letters with dots (e.g. \"A.M.\")\r\n // \r\n // All three need to to be translated even if they are all the same. Some\r\n // users might use one, some the other.\r\n \"A\": \"\",\r\n \"P\": \"\",\r\n \"AM\": \"\",\r\n \"PM\": \"\",\r\n \"A.M.\": \"\",\r\n \"P.M.\": \"\",\r\n // Date-related stuff.\r\n // \r\n // When translating months, if there's a difference, use the form which is\r\n // best for a full date, e.g. as you would use it in \"2018 January 1\".\r\n // \r\n // Note that May is listed twice. This is because in English May is the same\r\n // in both long and short forms, while in other languages it may not be the\r\n // case. Translate \"May\" to full word, while \"May(short)\" to shortened\r\n // version.\r\n // \r\n // Should month names and weekdays be capitalized or not?\r\n // \r\n // Rule of thumb is this: if the names should always be capitalized,\r\n // regardless of name position within date (\"January\", \"21st January 2018\",\r\n // etc.) use capitalized names. Otherwise enter all lowercase.\r\n // \r\n // The date formatter will automatically capitalize names if they are the\r\n // first (or only) word in resulting date.\r\n \"January\": \"\",\r\n \"February\": \"\",\r\n \"March\": \"\",\r\n \"April\": \"\",\r\n \"May\": \"\",\r\n \"June\": \"\",\r\n \"July\": \"\",\r\n \"August\": \"\",\r\n \"September\": \"\",\r\n \"October\": \"\",\r\n \"November\": \"\",\r\n \"December\": \"\",\r\n \"Jan\": \"\",\r\n \"Feb\": \"\",\r\n \"Mar\": \"\",\r\n \"Apr\": \"\",\r\n \"May(short)\": \"May\",\r\n \"Jun\": \"\",\r\n \"Jul\": \"\",\r\n \"Aug\": \"\",\r\n \"Sep\": \"\",\r\n \"Oct\": \"\",\r\n \"Nov\": \"\",\r\n \"Dec\": \"\",\r\n // Weekdays.\r\n \"Sunday\": \"\",\r\n \"Monday\": \"\",\r\n \"Tuesday\": \"\",\r\n \"Wednesday\": \"\",\r\n \"Thursday\": \"\",\r\n \"Friday\": \"\",\r\n \"Saturday\": \"\",\r\n \"Sun\": \"\",\r\n \"Mon\": \"\",\r\n \"Tue\": \"\",\r\n \"Wed\": \"\",\r\n \"Thu\": \"\",\r\n \"Fri\": \"\",\r\n \"Sat\": \"\",\r\n // Date ordinal function.\r\n // \r\n // This is used when adding number ordinal when formatting days in dates.\r\n // \r\n // E.g. \"January 1st\", \"February 2nd\".\r\n // \r\n // The function accepts day number, and returns a string to be added to the\r\n // day, like in default English translation, if we pass in 2, we will receive\r\n // \"nd\" back.\r\n \"_dateOrd\": function (day) {\r\n let res = \"th\";\r\n if ((day < 11) || (day > 13)) {\r\n switch (day % 10) {\r\n case 1:\r\n res = \"st\";\r\n break;\r\n case 2:\r\n res = \"nd\";\r\n break;\r\n case 3:\r\n res = \"rd\";\r\n break;\r\n }\r\n }\r\n return res;\r\n },\r\n // Various chart controls.\r\n // Shown as a tooltip on zoom out button.\r\n \"Zoom Out\": \"\",\r\n // Timeline buttons\r\n \"Play\": \"\",\r\n \"Stop\": \"\",\r\n // Chart's Legend screen reader title.\r\n \"Legend\": \"\",\r\n // Legend's item screen reader indicator.\r\n \"Press ENTER to toggle\": \"\",\r\n // Shown when the chart is busy loading something.\r\n \"Loading\": \"\",\r\n // Shown as the first button in the breadcrumb navigation, e.g.:\r\n // Home > First level > ...\r\n \"Home\": \"\",\r\n // Chart types.\r\n // Those are used as default screen reader titles for the main chart element\r\n // unless developer has set some more descriptive title.\r\n \"Chart\": \"\",\r\n \"Serial chart\": \"\",\r\n \"X/Y chart\": \"\",\r\n \"Pie chart\": \"\",\r\n \"Gauge chart\": \"\",\r\n \"Radar chart\": \"\",\r\n \"Sankey diagram\": \"\",\r\n \"Flow diagram\": \"\",\r\n \"Chord diagram\": \"\",\r\n \"TreeMap chart\": \"\",\r\n \"Force directed tree\": \"\",\r\n \"Sliced chart\": \"\",\r\n // Series types.\r\n // Used to name series by type for screen readers if they do not have their\r\n // name set.\r\n \"Series\": \"\",\r\n \"Candlestick Series\": \"\",\r\n \"OHLC Series\": \"\",\r\n \"Column Series\": \"\",\r\n \"Line Series\": \"\",\r\n \"Pie Slice Series\": \"\",\r\n \"Funnel Series\": \"\",\r\n \"Pyramid Series\": \"\",\r\n \"X/Y Series\": \"\",\r\n // Map-related stuff.\r\n \"Map\": \"\",\r\n \"Press ENTER to zoom in\": \"\",\r\n \"Press ENTER to zoom out\": \"\",\r\n \"Use arrow keys to zoom in and out\": \"\",\r\n \"Use plus and minus keys on your keyboard to zoom in and out\": \"\",\r\n // Export-related stuff.\r\n // These prompts are used in Export menu labels.\r\n // \r\n // \"Export\" is the top-level menu item.\r\n // \r\n // \"Image\", \"Data\", \"Print\" as second-level indicating type of export\r\n // operation.\r\n // \r\n // Leave actual format untranslated, unless you absolutely know that they\r\n // would convey more meaning in some other way.\r\n \"Export\": \"\",\r\n \"Image\": \"\",\r\n \"Data\": \"\",\r\n \"Print\": \"\",\r\n \"Press ENTER or use arrow keys to navigate\": \"\",\r\n \"Press ENTER to open\": \"\",\r\n \"Press ENTER to print.\": \"\",\r\n \"Press ENTER to export as %1.\": \"\",\r\n \"(Press ESC to close this message)\": \"\",\r\n \"Image Export Complete\": \"\",\r\n \"Export operation took longer than expected. Something might have gone wrong.\": \"\",\r\n \"Saved from\": \"\",\r\n \"PNG\": \"\",\r\n \"JPG\": \"\",\r\n \"GIF\": \"\",\r\n \"SVG\": \"\",\r\n \"PDF\": \"\",\r\n \"JSON\": \"\",\r\n \"CSV\": \"\",\r\n \"XLSX\": \"\",\r\n \"HTML\": \"\",\r\n // Scrollbar-related stuff.\r\n // \r\n // Scrollbar is a control which can zoom and pan the axes on the chart.\r\n // \r\n // Each scrollbar has two grips: left or right (for horizontal scrollbar) or\r\n // upper and lower (for vertical one).\r\n // \r\n // Prompts change in relation to whether Scrollbar is vertical or horizontal.\r\n // \r\n // The final section is used to indicate the current range of selection.\r\n \"Use TAB to select grip buttons or left and right arrows to change selection\": \"\",\r\n \"Use left and right arrows to move selection\": \"\",\r\n \"Use left and right arrows to move left selection\": \"\",\r\n \"Use left and right arrows to move right selection\": \"\",\r\n \"Use TAB select grip buttons or up and down arrows to change selection\": \"\",\r\n \"Use up and down arrows to move selection\": \"\",\r\n \"Use up and down arrows to move lower selection\": \"\",\r\n \"Use up and down arrows to move upper selection\": \"\",\r\n \"From %1 to %2\": \"\",\r\n \"From %1\": \"\",\r\n \"To %1\": \"\",\r\n // Data loader-related.\r\n \"No parser available for file: %1\": \"\",\r\n \"Error parsing file: %1\": \"\",\r\n \"Unable to load file: %1\": \"\",\r\n \"Invalid date\": \"\",\r\n // Common actions\r\n \"Close\": \"\",\r\n \"Minimize\": \"\"\r\n};\r\n//# sourceMappingURL=en.js.map","import { Entity } from \"./Entity\";\r\nimport * as $array from \"./Array\";\r\nimport * as $object from \"./Object\";\r\nimport en from \"../../../locales/en\";\r\n;\r\n/**\r\n * Add localization functionality.\r\n */\r\nexport class Language extends Entity {\r\n _setDefaults() {\r\n this.setPrivate(\"defaultLocale\", en);\r\n super._setDefaults();\r\n }\r\n /**\r\n * Returns a prompt translation.\r\n *\r\n * @param prompt Prompt to translate\r\n * @param locale Target locale\r\n * @param ...rest Parameters\r\n * @return Translation\r\n */\r\n translate(prompt, locale, ...rest) {\r\n // Get langauge\r\n if (!locale) {\r\n locale = this._root.locale || this.getPrivate(\"defaultLocale\");\r\n }\r\n // Init translation\r\n let translation = prompt;\r\n let value = locale[prompt];\r\n // Try to look for the translation\r\n if (value === null) {\r\n translation = \"\";\r\n }\r\n else if (value != null) {\r\n // It might be an empty string\r\n if (value) {\r\n translation = value;\r\n }\r\n }\r\n else if (locale !== this.getPrivate(\"defaultLocale\")) {\r\n // Try to look in default language\r\n return this.translate(prompt, this.getPrivate(\"defaultLocale\"), ...rest);\r\n }\r\n // Replace %1, %2, etc params\r\n if (rest.length) {\r\n for (let len = rest.length, i = 0; i < len; ++i) {\r\n translation = translation.split(\"%\" + (i + 1)).join(rest[i]);\r\n }\r\n }\r\n // Return the translation\r\n return translation;\r\n }\r\n /**\r\n * Returns a prompt translation, including custom prompts.\r\n *\r\n * @param prompt Prompt to translate\r\n * @param locale Target locale\r\n * @param ...rest Parameters\r\n * @return Translation\r\n */\r\n translateAny(prompt, locale, ...rest) {\r\n return this.translate(prompt, locale, ...rest);\r\n }\r\n /**\r\n * Add a custom prompt to locale.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/creating-translations/#Extending_locale_with_custom_prompts}\r\n * @param prompt Source prompt\r\n * @param translation Tanslation\r\n * @param locale Target locale\r\n */\r\n setTranslationAny(prompt, translation, locale) {\r\n const localeTarget = locale || this._root.locale;\r\n localeTarget[prompt] = translation;\r\n }\r\n /**\r\n * Add a batch of custom prompts.\r\n *\r\n * @since 5.3.3\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/creating-translations/#Extending_locale_with_custom_prompts}\r\n * @param translations Translations\r\n * @param locale Target locale\r\n */\r\n setTranslationsAny(translations, locale) {\r\n $object.each(translations, (key, val) => {\r\n this.setTranslationAny(key, val, locale);\r\n });\r\n }\r\n translateEmpty(prompt, locale, ...rest) {\r\n let translation = this.translate(prompt, locale, ...rest);\r\n return translation == prompt ? \"\" : translation;\r\n }\r\n translateFunc(prompt, locale) {\r\n if (this._root.locale[prompt]) {\r\n return this._root.locale[prompt];\r\n }\r\n // Try to look in default language\r\n if (locale !== this.getPrivate(\"defaultLocale\")) {\r\n return this.translateFunc(prompt, this.getPrivate(\"defaultLocale\"));\r\n }\r\n // Fail - return empty function\r\n return () => {\r\n return \"\";\r\n };\r\n }\r\n /**\r\n * Translates a btach of prompts.\r\n *\r\n * @param list Array of prompts to translate\r\n * @param locale Target locale\r\n * @return Array of translations\r\n */\r\n translateAll(list, locale) {\r\n // Translate all items in the list\r\n if (!this.isDefault()) {\r\n return $array.map(list, (x) => this.translate(x, locale));\r\n }\r\n else {\r\n return list;\r\n }\r\n }\r\n /**\r\n * Returns `true` if the currently selected locale is a default locale.\r\n *\r\n * @return `true` if locale is default; `false` if it is not.\r\n */\r\n isDefault() {\r\n return this.getPrivate(\"defaultLocale\") === this._root.locale;\r\n }\r\n}\r\n//# sourceMappingURL=Language.js.map","import { Template } from \"./util/Template\";\r\nimport * as $order from \"./util/Order\";\r\nimport * as $array from \"./util/Array\";\r\n/**\r\n * A base class for an amCharts theme.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\r\n * @important\r\n */\r\nexport class Theme {\r\n constructor(root, isReal) {\r\n Object.defineProperty(this, \"_root\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_rules\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n this._root = root;\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n }\r\n /**\r\n * Use this method to create an instance of this class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#New_element_syntax} for more info\r\n * @param root Root element\r\n * @param settings Settings\r\n * @param template Template\r\n * @return Instantiated object\r\n */\r\n static new(root) {\r\n const x = (new this(root, true));\r\n x.setupDefaultRules();\r\n return x;\r\n }\r\n setupDefaultRules() { }\r\n /**\r\n * Looks up the rules for a specific theme class.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @return Array>\r\n */\r\n _lookupRules(themeClass) {\r\n return this._rules[themeClass];\r\n }\r\n /**\r\n * Creates a [[Template]] for specific theme class and tags.\r\n *\r\n * NOTE: the difference from `rule()` is that `ruleRaw()` does not do any\r\n * type checks.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @param themeTags Theme tags\r\n * @return Template\r\n */\r\n ruleRaw(themeClass, themeTags = []) {\r\n let rules = this._rules[themeClass];\r\n if (!rules) {\r\n rules = this._rules[themeClass] = [];\r\n }\r\n themeTags.sort($order.compare);\r\n const { index, found } = $array.getSortedIndex(rules, (x) => {\r\n const order = $order.compare(x.tags.length, themeTags.length);\r\n if (order === 0) {\r\n return $order.compareArray(x.tags, themeTags, $order.compare);\r\n }\r\n else {\r\n return order;\r\n }\r\n });\r\n if (found) {\r\n return rules[index].template;\r\n }\r\n else {\r\n const template = Template.new({});\r\n rules.splice(index, 0, {\r\n tags: themeTags,\r\n template,\r\n });\r\n return template;\r\n }\r\n }\r\n /**\r\n * Creates a [[Template]] for specific theme class and tags.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/themes/} for more info\r\n * @param themeClass Theme class\r\n * @param themeTags Theme tags\r\n * @return Template\r\n */\r\n rule(themeClass, themeTags = []) {\r\n return this.ruleRaw(themeClass, themeTags);\r\n }\r\n}\r\n//# sourceMappingURL=Theme.js.map","import { Theme } from \"../core/Theme\";\r\nimport { p100, p50 } from \"../core/util/Percent\";\r\nimport { Color } from \"../core/util/Color\";\r\nimport { GridLayout } from \"../core/render/GridLayout\";\r\nimport * as $ease from \"../core/util/Ease\";\r\n/**\r\n * @ignore\r\n */\r\nexport function setColor(rule, key, ic, name) {\r\n // TODO this shouldn't use get, figure out a better way\r\n rule.set(key, ic.get(name));\r\n ic.on(name, (value) => {\r\n rule.set(key, value);\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class DefaultTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n const language = this._root.language;\r\n const ic = this._root.interfaceColors;\r\n const horizontalLayout = this._root.horizontalLayout;\r\n const verticalLayout = this._root.verticalLayout;\r\n const r = this.rule.bind(this);\r\n /**\r\n * ========================================================================\r\n * core\r\n * ========================================================================\r\n */\r\n r(\"InterfaceColors\").setAll({\r\n stroke: Color.fromHex(0xe5e5e5),\r\n fill: Color.fromHex(0xf3f3f3),\r\n primaryButton: Color.fromHex(0x6794dc),\r\n primaryButtonHover: Color.fromHex(0x6771dc),\r\n primaryButtonDown: Color.fromHex(0x68dc76),\r\n primaryButtonActive: Color.fromHex(0x68dc76),\r\n primaryButtonDisabled: Color.fromHex(0xdadada),\r\n primaryButtonTextDisabled: Color.fromHex(0xffffff),\r\n primaryButtonText: Color.fromHex(0xffffff),\r\n primaryButtonStroke: Color.fromHex(0xffffff),\r\n secondaryButton: Color.fromHex(0xd9d9d9),\r\n secondaryButtonHover: Color.fromHex(0xa3a3a3),\r\n secondaryButtonDown: Color.fromHex(0x8d8d8d),\r\n secondaryButtonActive: Color.fromHex(0xe6e6e6),\r\n secondaryButtonText: Color.fromHex(0x000000),\r\n secondaryButtonStroke: Color.fromHex(0xffffff),\r\n grid: Color.fromHex(0x000000),\r\n background: Color.fromHex(0xffffff),\r\n alternativeBackground: Color.fromHex(0x000000),\r\n text: Color.fromHex(0x000000),\r\n alternativeText: Color.fromHex(0xffffff),\r\n disabled: Color.fromHex(0xadadad),\r\n positive: Color.fromHex(0x50b300),\r\n negative: Color.fromHex(0xb30000)\r\n });\r\n {\r\n const rule = r(\"ColorSet\");\r\n rule.setAll({\r\n passOptions: {\r\n hue: 0.05,\r\n saturation: 0,\r\n lightness: 0\r\n },\r\n colors: [\r\n Color.fromHex(0x67b7dc)\r\n ],\r\n step: 1,\r\n //baseColor: Color.fromRGB(103, 183, 220),\r\n //count: 20,\r\n reuse: false,\r\n startIndex: 0\r\n });\r\n rule.setPrivate(\"currentStep\", 0);\r\n rule.setPrivate(\"currentPass\", 0);\r\n }\r\n r(\"Entity\").setAll({\r\n stateAnimationDuration: 0,\r\n stateAnimationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Component\").setAll({\r\n interpolationDuration: 0,\r\n interpolationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Sprite\").setAll({\r\n visible: true,\r\n scale: 1,\r\n opacity: 1,\r\n rotation: 0,\r\n position: \"relative\",\r\n tooltipX: p50,\r\n tooltipY: p50,\r\n tooltipPosition: \"fixed\",\r\n isMeasured: true\r\n });\r\n r(\"Sprite\").states.create(\"default\", { \"visible\": true, opacity: 1 });\r\n r(\"Container\").setAll({\r\n interactiveChildren: true,\r\n setStateOnChildren: false\r\n });\r\n r(\"Graphics\").setAll({\r\n strokeWidth: 1\r\n });\r\n r(\"Chart\").setAll({\r\n width: p100,\r\n height: p100,\r\n interactiveChildren: false\r\n });\r\n r(\"ZoomableContainer\").setAll({\r\n width: p100,\r\n height: p100,\r\n wheelable: true,\r\n pinchZoom: true,\r\n maxZoomLevel: 32,\r\n minZoomLevel: 1,\r\n zoomStep: 2,\r\n animationEasing: $ease.out($ease.cubic),\r\n animationDuration: 600,\r\n maxPanOut: 0.4\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: alignment\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Sprite\", [\"horizontal\", \"center\"]).setAll({\r\n centerX: p50,\r\n x: p50\r\n });\r\n r(\"Sprite\", [\"vertical\", \"center\"]).setAll({\r\n centerY: p50,\r\n y: p50\r\n });\r\n r(\"Container\", [\"horizontal\", \"layout\"]).setAll({\r\n layout: horizontalLayout\r\n });\r\n r(\"Container\", [\"vertical\", \"layout\"]).setAll({\r\n layout: verticalLayout\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: patterns\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Pattern\").setAll({\r\n repetition: \"repeat\",\r\n width: 50,\r\n height: 50,\r\n rotation: 0,\r\n fillOpacity: 1\r\n });\r\n r(\"LinePattern\").setAll({\r\n gap: 6,\r\n colorOpacity: 1,\r\n width: 49,\r\n height: 49\r\n });\r\n r(\"RectanglePattern\").setAll({\r\n gap: 6,\r\n checkered: false,\r\n centered: true,\r\n maxWidth: 5,\r\n maxHeight: 5,\r\n width: 48,\r\n height: 48,\r\n strokeWidth: 0\r\n });\r\n r(\"CirclePattern\").setAll({\r\n gap: 5,\r\n checkered: false,\r\n centered: false,\r\n radius: 3,\r\n strokeWidth: 0,\r\n width: 45,\r\n height: 45\r\n });\r\n r(\"GrainPattern\").setAll({\r\n width: 200,\r\n height: 200,\r\n colors: [Color.fromHex(0x000000)],\r\n size: 1,\r\n horizontalGap: 0,\r\n verticalGap: 0,\r\n density: 1,\r\n minOpacity: 0,\r\n maxOpacity: 0.2\r\n });\r\n {\r\n const rule = r(\"PatternSet\");\r\n rule.setAll({\r\n step: 1\r\n });\r\n setColor(rule, \"color\", ic, \"stroke\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: gradients\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"LinearGradient\").setAll({\r\n rotation: 90\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Legend\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Legend\").setAll({\r\n fillField: \"fill\",\r\n strokeField: \"stroke\",\r\n nameField: \"name\",\r\n layout: GridLayout.new(this._root, {}),\r\n layer: 30,\r\n clickTarget: \"itemContainer\"\r\n });\r\n // Class: Container\r\n r(\"Container\", [\"legend\", \"item\", \"itemcontainer\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingBottom: 5,\r\n paddingTop: 5,\r\n layout: horizontalLayout,\r\n setStateOnChildren: true,\r\n interactiveChildren: false,\r\n ariaChecked: true,\r\n focusable: true,\r\n ariaLabel: language.translate(\"Press ENTER to toggle\"),\r\n role: \"checkbox\"\r\n });\r\n {\r\n const rule = r(\"Rectangle\", [\"legend\", \"item\", \"background\"]);\r\n rule.setAll({\r\n fillOpacity: 0,\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n }\r\n r(\"Container\", [\"legend\", \"marker\"]).setAll({\r\n setStateOnChildren: true,\r\n centerY: p50,\r\n paddingLeft: 0,\r\n paddingRight: 0,\r\n paddingBottom: 0,\r\n paddingTop: 0,\r\n width: 18,\r\n height: 18\r\n });\r\n r(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).setAll({\r\n width: p100,\r\n height: p100,\r\n cornerRadiusBL: 3,\r\n cornerRadiusTL: 3,\r\n cornerRadiusBR: 3,\r\n cornerRadiusTR: 3\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"legend\", \"marker\", \"rectangle\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n setColor(rule, \"stroke\", ic, \"disabled\");\r\n }\r\n r(\"Label\", [\"legend\", \"label\"]).setAll({\r\n centerY: p50,\r\n marginLeft: 5,\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n populateText: true\r\n });\r\n {\r\n const rule = r(\"Label\", [\"legend\", \"label\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n }\r\n r(\"Label\", [\"legend\", \"value\", \"label\"]).setAll({\r\n centerY: p50,\r\n marginLeft: 5,\r\n paddingRight: 0,\r\n paddingLeft: 0,\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n width: 50,\r\n centerX: p100,\r\n populateText: true\r\n });\r\n {\r\n const rule = r(\"Label\", [\"legend\", \"value\", \"label\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"disabled\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: HeatLegend\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"HeatLegend\").setAll({\r\n stepCount: 1\r\n });\r\n r(\"RoundedRectangle\", [\"heatlegend\", \"marker\"]).setAll({\r\n cornerRadiusTR: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusBL: 0\r\n });\r\n r(\"RoundedRectangle\", [\"vertical\", \"heatlegend\", \"marker\"]).setAll({\r\n height: p100,\r\n width: 15\r\n });\r\n r(\"RoundedRectangle\", [\"horizontal\", \"heatlegend\", \"marker\"]).setAll({\r\n width: p100,\r\n height: 15\r\n });\r\n r(\"HeatLegend\", [\"vertical\"]).setAll({\r\n height: p100\r\n });\r\n r(\"HeatLegend\", [\"horizontal\"]).setAll({\r\n width: p100\r\n });\r\n r(\"Label\", [\"heatlegend\", \"start\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingTop: 5,\r\n paddingBottom: 5\r\n });\r\n r(\"Label\", [\"heatlegend\", \"end\"]).setAll({\r\n paddingLeft: 5,\r\n paddingRight: 5,\r\n paddingTop: 5,\r\n paddingBottom: 5\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Labels\r\n * ------------------------------------------------------------------------\r\n */\r\n {\r\n const rule = r(\"Label\");\r\n rule.setAll({\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n fontFamily: \"-apple-system, BlinkMacSystemFont, \\\"Segoe UI\\\", Roboto, Helvetica, Arial, sans-serif, \\\"Apple Color Emoji\\\", \\\"Segoe UI Emoji\\\", \\\"Segoe UI Symbol\\\"\",\r\n fontSize: \"1em\",\r\n populateText: false\r\n });\r\n setColor(rule, \"fill\", ic, \"text\");\r\n }\r\n r(\"RadialLabel\").setAll({\r\n textType: \"regular\",\r\n centerY: p50,\r\n centerX: p50,\r\n inside: false,\r\n radius: 0,\r\n baseRadius: p100,\r\n orientation: \"auto\",\r\n textAlign: \"center\"\r\n });\r\n r(\"EditableLabel\").setAll({\r\n editOn: \"click\",\r\n //setStateOnChildren: true,\r\n themeTags: [\"editablelabel\"],\r\n multiLine: true\r\n });\r\n r(\"RoundedRectangle\", [\"editablelabel\", \"background\"]).setAll({\r\n fillOpacity: 0,\r\n fill: Color.fromHex(0x000000),\r\n cornerRadiusBL: 3,\r\n cornerRadiusBR: 3,\r\n cornerRadiusTL: 3,\r\n cornerRadiusTR: 3,\r\n strokeOpacity: 0,\r\n stroke: Color.fromHex(0x000000)\r\n });\r\n {\r\n r(\"RoundedRectangle\", [\"editablelabel\", \"background\"]).states.create(\"active\", {\r\n strokeOpacity: 0.2,\r\n });\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Elements and shapes\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"RoundedRectangle\").setAll({\r\n cornerRadiusTL: 8,\r\n cornerRadiusBL: 8,\r\n cornerRadiusTR: 8,\r\n cornerRadiusBR: 8\r\n });\r\n r(\"PointedRectangle\").setAll({\r\n pointerBaseWidth: 15,\r\n pointerLength: 10,\r\n cornerRadius: 8\r\n });\r\n r(\"Slice\").setAll({\r\n shiftRadius: 0,\r\n dRadius: 0,\r\n dInnerRadius: 0\r\n });\r\n {\r\n const rule = r(\"Tick\");\r\n rule.setAll({\r\n strokeOpacity: .15,\r\n isMeasured: false,\r\n length: 4.5,\r\n position: \"absolute\",\r\n crisp: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"Bullet\").setAll({\r\n locationX: 0.5,\r\n locationY: 0.5\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Tooltip\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Tooltip\").setAll({\r\n position: \"absolute\",\r\n getFillFromSprite: true,\r\n getStrokeFromSprite: false,\r\n autoTextColor: true,\r\n paddingTop: 9,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n marginBottom: 5,\r\n pointerOrientation: \"vertical\",\r\n centerX: p50,\r\n centerY: p50,\r\n animationEasing: $ease.out($ease.cubic),\r\n exportable: false\r\n //layer: 100\r\n });\r\n r(\"Polygon\").setAll({\r\n animationEasing: $ease.out($ease.cubic),\r\n });\r\n {\r\n const rule = r(\"PointedRectangle\", [\"tooltip\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.9,\r\n cornerRadius: 4,\r\n pointerLength: 4,\r\n pointerBaseWidth: 8,\r\n fillOpacity: 0.9,\r\n stroke: Color.fromHex(0xffffff)\r\n });\r\n }\r\n {\r\n const rule = r(\"Label\", [\"tooltip\"]);\r\n rule.setAll({\r\n role: \"tooltip\",\r\n populateText: true,\r\n paddingRight: 0,\r\n paddingTop: 0,\r\n paddingLeft: 0,\r\n paddingBottom: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Button\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\").setAll({\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n interactive: true,\r\n layout: horizontalLayout,\r\n interactiveChildren: false,\r\n setStateOnChildren: true,\r\n focusable: true\r\n });\r\n r(\"Button\").states.create(\"hover\", {});\r\n r(\"Button\").states.create(\"down\", { stateAnimationDuration: 0 });\r\n r(\"Button\").states.create(\"active\", {});\r\n r(\"Button\").states.create(\"disabled\", {\r\n forceInactive: true\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]);\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n setColor(rule, \"stroke\", ic, \"primaryButtonStroke\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"primaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"active\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonActive\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"button\", \"background\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonDisabled\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"button\", \"icon\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonTextDisabled\");\r\n }\r\n {\r\n const rule = r(\"Label\", [\"button\"]).states.create(\"disabled\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonTextDisabled\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"button\", \"icon\"]);\r\n rule.setAll({\r\n forceInactive: true\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n {\r\n const rule = r(\"Label\", [\"button\"]);\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/xy: ZoomOutButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"zoom\"]).setAll({\r\n paddingTop: 18,\r\n paddingBottom: 18,\r\n paddingLeft: 12,\r\n paddingRight: 12,\r\n centerX: 46,\r\n centerY: -10,\r\n y: 0,\r\n x: p100,\r\n role: \"button\",\r\n ariaLabel: language.translate(\"Zoom Out\"),\r\n layer: 30\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]);\r\n rule.setAll({\r\n cornerRadiusBL: 40,\r\n cornerRadiusBR: 40,\r\n cornerRadiusTL: 40,\r\n cornerRadiusTR: 40\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"primaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"button\", \"zoom\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"primaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"icon\", \"button\", \"zoom\"]);\r\n rule.setAll({\r\n crisp: true,\r\n strokeOpacity: 0.7,\r\n draw: (display) => {\r\n display.moveTo(0, 0);\r\n display.lineTo(12, 0);\r\n }\r\n });\r\n setColor(rule, \"stroke\", ic, \"primaryButtonText\");\r\n }\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: ResizeButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"resize\"]).setAll({\r\n paddingTop: 9,\r\n paddingBottom: 9,\r\n paddingLeft: 13,\r\n paddingRight: 13,\r\n draggable: true,\r\n centerX: p50,\r\n centerY: p50,\r\n position: \"absolute\",\r\n role: \"slider\",\r\n ariaValueMin: \"0\",\r\n ariaValueMax: \"100\",\r\n ariaLabel: language.translate(\"Use up and down arrows to move selection\")\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]);\r\n rule.setAll({\r\n cornerRadiusBL: 40,\r\n cornerRadiusBR: 40,\r\n cornerRadiusTL: 40,\r\n cornerRadiusTR: 40\r\n });\r\n setColor(rule, \"fill\", ic, \"secondaryButton\");\r\n setColor(rule, \"stroke\", ic, \"secondaryButtonStroke\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"secondaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"background\", \"resize\", \"button\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"secondaryButtonDown\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"resize\", \"button\", \"icon\"]);\r\n rule.setAll({\r\n interactive: false,\r\n crisp: true,\r\n strokeOpacity: 0.5,\r\n draw: (display) => {\r\n display.moveTo(0, 0.5);\r\n display.lineTo(0, 12.5);\r\n display.moveTo(4, 0.5);\r\n display.lineTo(4, 12.5);\r\n }\r\n });\r\n setColor(rule, \"stroke\", ic, \"secondaryButtonText\");\r\n }\r\n r(\"Button\", [\"resize\", \"vertical\"]).setAll({\r\n rotation: 90,\r\n cursorOverStyle: \"ns-resize\"\r\n });\r\n r(\"Button\", [\"resize\", \"horizontal\"]).setAll({\r\n cursorOverStyle: \"ew-resize\"\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: PlayButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"play\"]).setAll({\r\n paddingTop: 13,\r\n paddingBottom: 13,\r\n paddingLeft: 14,\r\n paddingRight: 14,\r\n ariaLabel: language.translate(\"Play\"),\r\n toggleKey: \"active\"\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"play\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.5,\r\n cornerRadiusBL: 100,\r\n cornerRadiusBR: 100,\r\n cornerRadiusTL: 100,\r\n cornerRadiusTR: 100\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Graphics\", [\"play\", \"icon\"]);\r\n rule.setAll({\r\n stateAnimationDuration: 0,\r\n dx: 1,\r\n draw: (display) => {\r\n display.moveTo(0, -5);\r\n display.lineTo(8, 0);\r\n display.lineTo(0, 5);\r\n display.lineTo(0, -5);\r\n }\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n r(\"Graphics\", [\"play\", \"icon\"]).states.create(\"default\", {\r\n stateAnimationDuration: 0\r\n });\r\n r(\"Graphics\", [\"play\", \"icon\"]).states.create(\"active\", {\r\n stateAnimationDuration: 0,\r\n draw: (display) => {\r\n display.moveTo(-4, -5);\r\n display.lineTo(-1, -5);\r\n display.lineTo(-1, 5);\r\n display.lineTo(-4, 5);\r\n display.lineTo(-4, -5);\r\n display.moveTo(4, -5);\r\n display.lineTo(1, -5);\r\n display.lineTo(1, 5);\r\n display.lineTo(4, 5);\r\n display.lineTo(4, -5);\r\n }\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: SwitchButton\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Button\", [\"switch\"]).setAll({\r\n paddingTop: 4,\r\n paddingBottom: 4,\r\n paddingLeft: 4,\r\n paddingRight: 4,\r\n ariaLabel: language.translate(\"Press ENTER to toggle\"),\r\n toggleKey: \"active\",\r\n width: 40,\r\n height: 24,\r\n layout: null\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"switch\", \"background\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.5,\r\n cornerRadiusBL: 100,\r\n cornerRadiusBR: 100,\r\n cornerRadiusTL: 100,\r\n cornerRadiusTR: 100\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButton\");\r\n }\r\n {\r\n const rule = r(\"Circle\", [\"switch\", \"icon\"]);\r\n rule.setAll({\r\n radius: 8,\r\n centerY: 0,\r\n centerX: 0,\r\n dx: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"primaryButtonText\");\r\n }\r\n r(\"Graphics\", [\"switch\", \"icon\"]).states.create(\"active\", {\r\n dx: 16\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * core: Scrollbar\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Scrollbar\").setAll({\r\n start: 0,\r\n end: 1,\r\n layer: 30,\r\n animationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"Scrollbar\", [\"vertical\"]).setAll({\r\n marginRight: 13,\r\n marginLeft: 13,\r\n minWidth: 12,\r\n height: p100\r\n });\r\n r(\"Scrollbar\", [\"horizontal\"]).setAll({\r\n marginTop: 13,\r\n marginBottom: 13,\r\n minHeight: 12,\r\n width: p100\r\n });\r\n this.rule(\"Button\", [\"scrollbar\"]).setAll({\r\n exportable: false\r\n });\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"main\", \"background\"]);\r\n rule.setAll({\r\n cornerRadiusTL: 8,\r\n cornerRadiusBL: 8,\r\n cornerRadiusTR: 8,\r\n cornerRadiusBR: 8,\r\n fillOpacity: 0.8,\r\n });\r\n setColor(rule, \"fill\", ic, \"fill\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]);\r\n rule.setAll({\r\n role: \"slider\",\r\n ariaLive: \"polite\",\r\n position: \"absolute\",\r\n draggable: true\r\n });\r\n setColor(rule, \"fill\", ic, \"secondaryButton\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"hover\", {});\r\n setColor(rule, \"fill\", ic, \"secondaryButtonHover\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\"]).states.create(\"down\", { stateAnimationDuration: 0 });\r\n setColor(rule, \"fill\", ic, \"secondaryButtonDown\");\r\n }\r\n r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"vertical\"]).setAll({\r\n x: p50,\r\n width: p100,\r\n centerX: p50,\r\n ariaLabel: language.translate(\"Use up and down arrows to move selection\")\r\n });\r\n r(\"RoundedRectangle\", [\"scrollbar\", \"thumb\", \"horizontal\"]).setAll({\r\n y: p50,\r\n centerY: p50,\r\n height: p100,\r\n ariaLabel: language.translate(\"Use left and right arrows to move selection\")\r\n });\r\n // @todo: is this needed? used to be \"ContentScrollbar\"\r\n // r(\"Scrollbar\", [\"content?\"]).setAll({\r\n // \tmarginRight: 0,\r\n // \tmarginLeft: 5,\r\n // \tlayer: 5\r\n // });\r\n /**\r\n * ========================================================================\r\n * charts/xy\r\n * ========================================================================\r\n *\r\n * This needs to be in DefaultTheme because it's the only theme that is\r\n * automatically applied to Root, and tooltips different ancestors\r\n * than actual charts using them.\r\n */\r\n {\r\n const rule = r(\"PointedRectangle\", [\"axis\", \"tooltip\", \"background\"]);\r\n rule.setAll({\r\n cornerRadius: 0\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n r(\"Label\", [\"axis\", \"tooltip\"]).setAll({\r\n role: undefined\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"y\"]).setAll({\r\n textAlign: \"right\"\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"y\", \"opposite\"]).setAll({\r\n textAlign: \"left\"\r\n });\r\n r(\"Label\", [\"axis\", \"tooltip\", \"x\"]).setAll({\r\n textAlign: \"center\"\r\n });\r\n r(\"Tooltip\", [\"categoryaxis\"]).setAll({\r\n labelText: \"{category}\"\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Shapes\r\n * ------------------------------------------------------------------------\r\n */\r\n // Class: Graphics\r\n r(\"Star\").setAll({\r\n spikes: 5,\r\n innerRadius: 5,\r\n radius: 10\r\n });\r\n // STOCK\r\n r(\"Tooltip\", [\"stock\"]).setAll({\r\n paddingTop: 6,\r\n paddingBottom: 5,\r\n paddingLeft: 7,\r\n paddingRight: 7\r\n });\r\n r(\"PointedRectangle\", [\"tooltip\", \"stock\", \"axis\"]).setAll({\r\n pointerLength: 0,\r\n pointerBaseWidth: 0,\r\n cornerRadius: 3\r\n });\r\n r(\"Label\", [\"tooltip\", \"stock\"]).setAll({\r\n fontSize: \"0.8em\"\r\n });\r\n // resizer\r\n r(\"SpriteResizer\").setAll({\r\n rotationStep: 10,\r\n isMeasured: false\r\n });\r\n {\r\n const rule = r(\"Container\", [\"resizer\", \"grip\"]);\r\n rule.states.create(\"hover\", {});\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.7,\r\n strokeWidth: 1,\r\n fillOpacity: 1,\r\n width: 12,\r\n height: 12\r\n });\r\n setColor(rule, \"fill\", ic, \"background\");\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n {\r\n const rule = r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"outline\"]);\r\n rule.setAll({\r\n strokeOpacity: 0,\r\n fillOpacity: 0,\r\n width: 20,\r\n height: 20\r\n });\r\n rule.states.create(\"hover\", {\r\n fillOpacity: 0.3\r\n });\r\n setColor(rule, \"fill\", ic, \"alternativeBackground\");\r\n }\r\n r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"left\"]).setAll({\r\n cornerRadiusBL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0\r\n });\r\n r(\"RoundedRectangle\", [\"resizer\", \"grip\", \"right\"]).setAll({\r\n cornerRadiusBL: 0,\r\n cornerRadiusBR: 0,\r\n cornerRadiusTL: 0,\r\n cornerRadiusTR: 0\r\n });\r\n {\r\n const rule = r(\"Rectangle\", [\"resizer\", \"rectangle\"]);\r\n rule.setAll({\r\n strokeDasharray: [2, 2],\r\n strokeOpacity: 0.5,\r\n strokeWidth: 1\r\n });\r\n setColor(rule, \"stroke\", ic, \"alternativeBackground\");\r\n }\r\n r(\"Graphics\", [\"button\", \"plus\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n draw: (display) => {\r\n display.moveTo(-4, 0);\r\n display.lineTo(4, 0);\r\n display.moveTo(0, -4);\r\n display.lineTo(0, 4);\r\n }\r\n });\r\n r(\"Graphics\", [\"button\", \"minus\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n draw: (display) => {\r\n display.moveTo(-4, 0);\r\n display.lineTo(4, 0);\r\n }\r\n });\r\n r(\"Graphics\", [\"button\", \"home\", \"icon\"]).setAll({\r\n x: p50,\r\n y: p50,\r\n svgPath: \"M 8 -1 L 6 -1 L 6 7 L 2 7 L 2 1 L -2 1 L -2 7 L -6 7 L -6 -1 L -8 -1 L 0 -9 L 8 -1 Z M 8 -1\"\r\n });\r\n r(\"Button\", [\"zoomtools\"]).setAll({\r\n marginTop: 1,\r\n marginBottom: 2\r\n });\r\n r(\"ZoomTools\").setAll({\r\n x: p100,\r\n centerX: p100,\r\n y: p100,\r\n centerY: p100,\r\n paddingRight: 10,\r\n paddingBottom: 10\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=DefaultTheme.js.map","/**\r\n * Modified from Pixi:\r\n *\r\n * The MIT License\r\n *\r\n * Copyright (c) 2013-2017 Mathew Groves, Chad Engler\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy\r\n * of this software and associated documentation files (the \"Software\"), to deal\r\n * in the Software without restriction, including without limitation the rights\r\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n * copies of the Software, and to permit persons to whom the Software is\r\n * furnished to do so, subject to the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n * THE SOFTWARE.\r\n */\r\n/**\r\n * @ignore\r\n */\r\nexport class Matrix {\r\n constructor(a = 1, b = 0, c = 0, d = 1, tx = 0, ty = 0) {\r\n Object.defineProperty(this, \"a\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"b\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"c\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"d\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"tx\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"ty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.a = a;\r\n this.b = b;\r\n this.c = c;\r\n this.d = d;\r\n this.tx = tx;\r\n this.ty = ty;\r\n }\r\n /**\r\n * Sets the matrix based on all the available properties\r\n */\r\n setTransform(x, y, pivotX, pivotY, rotation, scale = 1) {\r\n this.a = Math.cos(rotation) * scale;\r\n this.b = Math.sin(rotation) * scale;\r\n this.c = -Math.sin(rotation) * scale;\r\n this.d = Math.cos(rotation) * scale;\r\n this.tx = x - ((pivotX * this.a) + (pivotY * this.c));\r\n this.ty = y - ((pivotX * this.b) + (pivotY * this.d));\r\n }\r\n /**\r\n * Get a new position with the current transformation applied.\r\n * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\r\n */\r\n apply(origin) {\r\n return {\r\n x: (this.a * origin.x) + (this.c * origin.y) + this.tx,\r\n y: (this.b * origin.x) + (this.d * origin.y) + this.ty\r\n };\r\n }\r\n /**\r\n * Get a new position with the inverse of the current transformation applied.\r\n * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\r\n */\r\n applyInverse(origin) {\r\n const id = 1 / ((this.a * this.d) + (this.c * -this.b));\r\n return {\r\n x: (this.d * id * origin.x) + (-this.c * id * origin.y) + (((this.ty * this.c) - (this.tx * this.d)) * id),\r\n y: (this.a * id * origin.y) + (-this.b * id * origin.x) + (((-this.ty * this.a) + (this.tx * this.b)) * id)\r\n };\r\n }\r\n /**\r\n * Appends the given Matrix to this Matrix.\r\n */\r\n append(matrix) {\r\n const a1 = this.a;\r\n const b1 = this.b;\r\n const c1 = this.c;\r\n const d1 = this.d;\r\n this.a = (matrix.a * a1) + (matrix.b * c1);\r\n this.b = (matrix.a * b1) + (matrix.b * d1);\r\n this.c = (matrix.c * a1) + (matrix.d * c1);\r\n this.d = (matrix.c * b1) + (matrix.d * d1);\r\n this.tx = (matrix.tx * a1) + (matrix.ty * c1) + this.tx;\r\n this.ty = (matrix.tx * b1) + (matrix.ty * d1) + this.ty;\r\n }\r\n /**\r\n * Prepends the given Matrix to this Matrix.\r\n */\r\n prepend(matrix) {\r\n const tx1 = this.tx;\r\n if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\r\n const a1 = this.a;\r\n const c1 = this.c;\r\n this.a = (a1 * matrix.a) + (this.b * matrix.c);\r\n this.b = (a1 * matrix.b) + (this.b * matrix.d);\r\n this.c = (c1 * matrix.a) + (this.d * matrix.c);\r\n this.d = (c1 * matrix.b) + (this.d * matrix.d);\r\n }\r\n this.tx = (tx1 * matrix.a) + (this.ty * matrix.c) + matrix.tx;\r\n this.ty = (tx1 * matrix.b) + (this.ty * matrix.d) + matrix.ty;\r\n }\r\n /**\r\n * Copies the other matrix's properties into this matrix\r\n */\r\n copyFrom(matrix) {\r\n this.a = matrix.a;\r\n this.b = matrix.b;\r\n this.c = matrix.c;\r\n this.d = matrix.d;\r\n this.tx = matrix.tx;\r\n this.ty = matrix.ty;\r\n }\r\n}\r\n//# sourceMappingURL=Matrix.js.map","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar TAU = Math.PI * 2;\n\nvar mapToEllipse = function mapToEllipse(_ref, rx, ry, cosphi, sinphi, centerx, centery) {\n var x = _ref.x,\n y = _ref.y;\n\n x *= rx;\n y *= ry;\n\n var xp = cosphi * x - sinphi * y;\n var yp = sinphi * x + cosphi * y;\n\n return {\n x: xp + centerx,\n y: yp + centery\n };\n};\n\nvar approxUnitArc = function approxUnitArc(ang1, ang2) {\n // If 90 degree circular arc, use a constant\n // as derived from http://spencermortensen.com/articles/bezier-circle\n var a = ang2 === 1.5707963267948966 ? 0.551915024494 : ang2 === -1.5707963267948966 ? -0.551915024494 : 4 / 3 * Math.tan(ang2 / 4);\n\n var x1 = Math.cos(ang1);\n var y1 = Math.sin(ang1);\n var x2 = Math.cos(ang1 + ang2);\n var y2 = Math.sin(ang1 + ang2);\n\n return [{\n x: x1 - y1 * a,\n y: y1 + x1 * a\n }, {\n x: x2 + y2 * a,\n y: y2 - x2 * a\n }, {\n x: x2,\n y: y2\n }];\n};\n\nvar vectorAngle = function vectorAngle(ux, uy, vx, vy) {\n var sign = ux * vy - uy * vx < 0 ? -1 : 1;\n\n var dot = ux * vx + uy * vy;\n\n if (dot > 1) {\n dot = 1;\n }\n\n if (dot < -1) {\n dot = -1;\n }\n\n return sign * Math.acos(dot);\n};\n\nvar getArcCenter = function getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp) {\n var rxsq = Math.pow(rx, 2);\n var rysq = Math.pow(ry, 2);\n var pxpsq = Math.pow(pxp, 2);\n var pypsq = Math.pow(pyp, 2);\n\n var radicant = rxsq * rysq - rxsq * pypsq - rysq * pxpsq;\n\n if (radicant < 0) {\n radicant = 0;\n }\n\n radicant /= rxsq * pypsq + rysq * pxpsq;\n radicant = Math.sqrt(radicant) * (largeArcFlag === sweepFlag ? -1 : 1);\n\n var centerxp = radicant * rx / ry * pyp;\n var centeryp = radicant * -ry / rx * pxp;\n\n var centerx = cosphi * centerxp - sinphi * centeryp + (px + cx) / 2;\n var centery = sinphi * centerxp + cosphi * centeryp + (py + cy) / 2;\n\n var vx1 = (pxp - centerxp) / rx;\n var vy1 = (pyp - centeryp) / ry;\n var vx2 = (-pxp - centerxp) / rx;\n var vy2 = (-pyp - centeryp) / ry;\n\n var ang1 = vectorAngle(1, 0, vx1, vy1);\n var ang2 = vectorAngle(vx1, vy1, vx2, vy2);\n\n if (sweepFlag === 0 && ang2 > 0) {\n ang2 -= TAU;\n }\n\n if (sweepFlag === 1 && ang2 < 0) {\n ang2 += TAU;\n }\n\n return [centerx, centery, ang1, ang2];\n};\n\nvar arcToBezier = function arcToBezier(_ref2) {\n var px = _ref2.px,\n py = _ref2.py,\n cx = _ref2.cx,\n cy = _ref2.cy,\n rx = _ref2.rx,\n ry = _ref2.ry,\n _ref2$xAxisRotation = _ref2.xAxisRotation,\n xAxisRotation = _ref2$xAxisRotation === undefined ? 0 : _ref2$xAxisRotation,\n _ref2$largeArcFlag = _ref2.largeArcFlag,\n largeArcFlag = _ref2$largeArcFlag === undefined ? 0 : _ref2$largeArcFlag,\n _ref2$sweepFlag = _ref2.sweepFlag,\n sweepFlag = _ref2$sweepFlag === undefined ? 0 : _ref2$sweepFlag;\n\n var curves = [];\n\n if (rx === 0 || ry === 0) {\n return [];\n }\n\n var sinphi = Math.sin(xAxisRotation * TAU / 360);\n var cosphi = Math.cos(xAxisRotation * TAU / 360);\n\n var pxp = cosphi * (px - cx) / 2 + sinphi * (py - cy) / 2;\n var pyp = -sinphi * (px - cx) / 2 + cosphi * (py - cy) / 2;\n\n if (pxp === 0 && pyp === 0) {\n return [];\n }\n\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n var lambda = Math.pow(pxp, 2) / Math.pow(rx, 2) + Math.pow(pyp, 2) / Math.pow(ry, 2);\n\n if (lambda > 1) {\n rx *= Math.sqrt(lambda);\n ry *= Math.sqrt(lambda);\n }\n\n var _getArcCenter = getArcCenter(px, py, cx, cy, rx, ry, largeArcFlag, sweepFlag, sinphi, cosphi, pxp, pyp),\n _getArcCenter2 = _slicedToArray(_getArcCenter, 4),\n centerx = _getArcCenter2[0],\n centery = _getArcCenter2[1],\n ang1 = _getArcCenter2[2],\n ang2 = _getArcCenter2[3];\n\n // If 'ang2' == 90.0000000001, then `ratio` will evaluate to\n // 1.0000000001. This causes `segments` to be greater than one, which is an\n // unecessary split, and adds extra points to the bezier curve. To alleviate\n // this issue, we round to 1.0 when the ratio is close to 1.0.\n\n\n var ratio = Math.abs(ang2) / (TAU / 4);\n if (Math.abs(1.0 - ratio) < 0.0000001) {\n ratio = 1.0;\n }\n\n var segments = Math.max(Math.ceil(ratio), 1);\n\n ang2 /= segments;\n\n for (var i = 0; i < segments; i++) {\n curves.push(approxUnitArc(ang1, ang2));\n ang1 += ang2;\n }\n\n return curves.map(function (curve) {\n var _mapToEllipse = mapToEllipse(curve[0], rx, ry, cosphi, sinphi, centerx, centery),\n x1 = _mapToEllipse.x,\n y1 = _mapToEllipse.y;\n\n var _mapToEllipse2 = mapToEllipse(curve[1], rx, ry, cosphi, sinphi, centerx, centery),\n x2 = _mapToEllipse2.x,\n y2 = _mapToEllipse2.y;\n\n var _mapToEllipse3 = mapToEllipse(curve[2], rx, ry, cosphi, sinphi, centerx, centery),\n x = _mapToEllipse3.x,\n y = _mapToEllipse3.y;\n\n return { x1: x1, y1: y1, x2: x2, y2: y2, x: x, y: y };\n });\n};\n\nexport default arcToBezier;","/** @ignore */ /** */\r\nimport { BlendMode } from \"./Renderer\";\r\nimport { Color } from \"../../util/Color\";\r\nimport { Matrix } from \"../../util/Matrix\";\r\nimport { Percent, percent } from \"../../util/Percent\";\r\n//import { Throttler } from \"../../util/Throttler\";\r\nimport { ArrayDisposer, Disposer, DisposerClass, CounterDisposer, MultiDisposer } from \"../../util/Disposer\";\r\nimport { TextFormatter } from \"../../util/TextFormatter\";\r\nimport * as $utils from \"../../util/Utils\";\r\nimport * as $array from \"../../util/Array\";\r\nimport * as $object from \"../../util/Object\";\r\nimport * as $type from \"../../util/Type\";\r\nimport * as $math from \"../../util/Math\";\r\nimport arcToBezier from 'svg-arc-to-cubic-bezier';\r\n/**\r\n * @ignore\r\n */\r\nfunction checkArgs(name, actual, expected) {\r\n if (actual !== expected) {\r\n throw new Error(\"Required \" + expected + \" arguments for \" + name + \" but got \" + actual);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction checkMinArgs(name, actual, expected) {\r\n if (actual < expected) {\r\n throw new Error(\"Required at least \" + expected + \" arguments for \" + name + \" but got \" + actual);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction checkEvenArgs(name, actual, expected) {\r\n checkMinArgs(name, actual, expected);\r\n if ((actual % expected) !== 0) {\r\n throw new Error(\"Arguments for \" + name + \" must be in pairs of \" + expected);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n * This splits the flag so that way 0017 will be processed as 0 0 17\r\n *\r\n * This is important for weird paths like `M17 5A1 1 0 0017 30 1 1 0 0017 5`\r\n */\r\nfunction splitArcFlags(args) {\r\n for (let i = 0; i < args.length; i += 7) {\r\n let index = i + 3;\r\n let flag = args[index];\r\n if (flag.length > 1) {\r\n const a = /^([01])([01])(.*)$/.exec(flag);\r\n if (a !== null) {\r\n args.splice(index, 0, a[1]);\r\n ++index;\r\n args.splice(index, 0, a[2]);\r\n ++index;\r\n if (a[3].length > 0) {\r\n args[index] = a[3];\r\n }\r\n else {\r\n args.splice(index, 1);\r\n }\r\n }\r\n }\r\n ++index;\r\n flag = args[index];\r\n if (flag.length > 1) {\r\n const a = /^([01])(.+)$/.exec(flag);\r\n if (a !== null) {\r\n args.splice(index, 0, a[1]);\r\n ++index;\r\n args[index] = a[2];\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction assertBinary(value) {\r\n if (value === 0 || value === 1) {\r\n return value;\r\n }\r\n else {\r\n throw new Error(\"Flag must be 0 or 1\");\r\n }\r\n}\r\n// 1 -> 0xffffff * (2 / 2)\r\n// 2 -> 0xffffff * (1 / 2)\r\n//\r\n// 3 -> 0xffffff * (3 / 4)\r\n// 4 -> 0xffffff * (1 / 4)\r\n//\r\n// 5 -> 0xffffff * (7 / 8)\r\n// 6 -> 0xffffff * (5 / 8)\r\n// 7 -> 0xffffff * (3 / 8)\r\n// 8 -> 0xffffff * (1 / 8)\r\n//\r\n// 9 -> 0xffffff * (15 / 16)\r\n// 10 -> 0xffffff * (13 / 16)\r\n// 11 -> 0xffffff * (11 / 16)\r\n// 12 -> 0xffffff * (9 / 16)\r\n// 13 -> 0xffffff * (7 / 16)\r\n// 14 -> 0xffffff * (5 / 16)\r\n// 15 -> 0xffffff * (3 / 16)\r\n// 16 -> 0xffffff * (1 / 16)\r\n// @todo remove this old color distribution algo if the new one pans out\r\n/*function distributeId(id: number): number {\r\n if (id === 1) {\r\n return 0x000001;\r\n\r\n } else {\r\n // Finds the closest power of 2\r\n const base = Math.pow(2, Math.ceil(Math.log(id) / Math.log(2)));\r\n\r\n // Translates the id into an odd fraction index\r\n const index = ((base - id) * 2) + 1;\r\n\r\n // TODO is Math.round correct ?\r\n return Math.round(0xffffff * (index / base));\r\n }\r\n}*/\r\n/**\r\n * Function by smeans:\r\n * https://lowcode.life/generating-unique-contrasting-colors-in-javascript/\r\n * @ignore\r\n */\r\nfunction distributeId(id) {\r\n const rgb = [0, 0, 0];\r\n for (let i = 0; i < 24; i++) {\r\n rgb[i % 3] <<= 1;\r\n rgb[i % 3] |= id & 0x01;\r\n id >>= 1;\r\n }\r\n return (rgb[0] | 0) + (rgb[1] << 8) + (rgb[2] << 16);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction eachTargets(hitTarget, f) {\r\n for (;;) {\r\n if (hitTarget.interactive) {\r\n if (!f(hitTarget)) {\r\n break;\r\n }\r\n }\r\n if (hitTarget._parent) {\r\n hitTarget = hitTarget._parent;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n}\r\n// TODO feature detection for mouse/touch/pointer\r\n/**\r\n * @ignore\r\n */\r\nfunction onPointerEvent(element, name, f) {\r\n return $utils.addEventListener(element, $utils.getRendererEvent(name), (event) => {\r\n const target = $utils.getEventTarget(event);\r\n let touches = event.touches;\r\n if (touches) {\r\n if (touches.length == 0) {\r\n touches = event.changedTouches;\r\n }\r\n f($array.copy(touches), target);\r\n }\r\n else {\r\n f([event], target);\r\n }\r\n });\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction isTainted(image) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = 1;\r\n canvas.height = 1;\r\n const context = canvas.getContext(\"2d\", { willReadFrequently: true });\r\n context.drawImage(image, 0, 0, 1, 1);\r\n try {\r\n context.getImageData(0, 0, 1, 1);\r\n return false;\r\n }\r\n catch (err) {\r\n console.warn(\"Image \\\"\" + image.src + \"\\\" is loaded from different host and is not covered by CORS policy. For more information about the implications read here: https://www.amcharts.com/docs/v5/concepts/cors\");\r\n return true;\r\n }\r\n}\r\n/**\r\n * This is needed to workaround a bug in iOS which causes it to not GC canvas elements.\r\n *\r\n * @ignore\r\n */\r\nfunction clearCanvas(view) {\r\n view.width = 0;\r\n view.height = 0;\r\n view.style.width = \"0px\";\r\n view.style.height = \"0px\";\r\n}\r\n/**\r\n * Aligns the coordinate to the pixel, so it renders crisp\r\n *\r\n * @ignore\r\n */\r\nfunction crisp(x) {\r\n return Math.floor(x) + .5;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasPivot {\r\n constructor() {\r\n Object.defineProperty(this, \"_x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n set x(value) {\r\n this._x = value;\r\n }\r\n set y(value) {\r\n this._y = value;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasDisplayObject extends DisposerClass {\r\n constructor(renderer) {\r\n super();\r\n Object.defineProperty(this, \"_layer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"mask\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"visible\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"exportable\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"interactive\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"inactive\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"wheelable\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"cancelTouch\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"isMeasured\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"buttonMode\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"alpha\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n Object.defineProperty(this, \"compoundAlpha\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n Object.defineProperty(this, \"angle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"scale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"crisp\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"pivot\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new CanvasPivot()\r\n });\r\n Object.defineProperty(this, \"filter\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"cursorOverStyle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_replacedCursorStyle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_localMatrix\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Matrix()\r\n });\r\n Object.defineProperty(this, \"_matrix\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Matrix()\r\n });\r\n // TODO can this be replaced with _localMatrix ?\r\n Object.defineProperty(this, \"_uMatrix\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Matrix()\r\n });\r\n Object.defineProperty(this, \"_renderer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_parent\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_localBounds\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_bounds\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_colorId\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._renderer = renderer;\r\n }\r\n subStatus(status) {\r\n return {\r\n inactive: (this.inactive == null ? status.inactive : this.inactive),\r\n layer: this._layer || status.layer,\r\n };\r\n }\r\n _dispose() {\r\n this._renderer._removeObject(this);\r\n this.getLayer().dirty = true;\r\n }\r\n getCanvas() {\r\n return this.getLayer().view;\r\n }\r\n getLayer() {\r\n let self = this;\r\n for (;;) {\r\n if (self._layer) {\r\n return self._layer;\r\n }\r\n else if (self._parent) {\r\n self = self._parent;\r\n }\r\n else {\r\n return this._renderer.defaultLayer;\r\n }\r\n }\r\n }\r\n setLayer(order, margin) {\r\n if (order == null) {\r\n this._layer = undefined;\r\n }\r\n else {\r\n const visible = true;\r\n this._layer = this._renderer.getLayer(order, visible);\r\n this._layer.visible = visible;\r\n this._layer.margin = margin;\r\n if (margin) {\r\n $utils.setInteractive(this._layer.view, false);\r\n }\r\n this._renderer._ghostLayer.setMargin(this._renderer.layers);\r\n if (this._parent) {\r\n this._parent.registerChildLayer(this._layer);\r\n }\r\n this._layer.dirty = true;\r\n this._renderer.resizeLayer(this._layer);\r\n this._renderer.resizeGhost();\r\n }\r\n }\r\n markDirtyLayer() {\r\n this.getLayer().dirty = true;\r\n }\r\n clear() {\r\n this.invalidateBounds();\r\n }\r\n invalidateBounds() {\r\n this._localBounds = undefined;\r\n }\r\n _addBounds(_bounds) { }\r\n _getColorId() {\r\n if (this._colorId === undefined) {\r\n this._colorId = this._renderer.paintId(this);\r\n }\r\n return this._colorId;\r\n }\r\n _isInteractive(status) {\r\n return !status.inactive && (this.interactive || this._renderer._forceInteractive > 0);\r\n }\r\n _isInteractiveMask(status) {\r\n return this._isInteractive(status);\r\n }\r\n contains(child) {\r\n for (;;) {\r\n if (child === this) {\r\n return true;\r\n }\r\n else if (child._parent) {\r\n child = child._parent;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n }\r\n toGlobal(point) {\r\n return this._matrix.apply(point);\r\n }\r\n toLocal(point) {\r\n return this._matrix.applyInverse(point);\r\n }\r\n getLocalMatrix() {\r\n this._uMatrix.setTransform(0, 0, this.pivot.x, this.pivot.y, this.angle * Math.PI / 180, this.scale);\r\n return this._uMatrix;\r\n }\r\n getLocalBounds() {\r\n if (!this._localBounds) {\r\n const bn = 10000000;\r\n this._localBounds = {\r\n left: bn,\r\n top: bn,\r\n right: -bn,\r\n bottom: -bn\r\n };\r\n this._addBounds(this._localBounds);\r\n }\r\n return this._localBounds;\r\n }\r\n getAdjustedBounds(bounds) {\r\n this._setMatrix();\r\n const matrix = this.getLocalMatrix();\r\n const p0 = matrix.apply({ x: bounds.left, y: bounds.top });\r\n const p1 = matrix.apply({ x: bounds.right, y: bounds.top });\r\n const p2 = matrix.apply({ x: bounds.right, y: bounds.bottom });\r\n const p3 = matrix.apply({ x: bounds.left, y: bounds.bottom });\r\n return {\r\n left: Math.min(p0.x, p1.x, p2.x, p3.x),\r\n top: Math.min(p0.y, p1.y, p2.y, p3.y),\r\n right: Math.max(p0.x, p1.x, p2.x, p3.x),\r\n bottom: Math.max(p0.y, p1.y, p2.y, p3.y)\r\n };\r\n }\r\n on(key, callback, context) {\r\n if (this.interactive) {\r\n return this._renderer._addEvent(this, key, callback, context);\r\n }\r\n else {\r\n return new Disposer(() => { });\r\n }\r\n }\r\n _setMatrix() {\r\n // TODO only calculate this if it has actually changed\r\n this._localMatrix.setTransform(this.x, this.y, this.pivot.x, this.pivot.y, \r\n // Converts degrees to radians\r\n this.angle * Math.PI / 180, this.scale);\r\n this._matrix.copyFrom(this._localMatrix);\r\n if (this._parent) {\r\n // TODO only calculate this if it has actually changed\r\n this._matrix.prepend(this._parent._matrix);\r\n }\r\n }\r\n _transform(context, resolution) {\r\n const m = this._matrix;\r\n let tx = m.tx * resolution;\r\n let ty = m.ty * resolution;\r\n if (this.crisp) {\r\n tx = crisp(tx);\r\n ty = crisp(ty);\r\n }\r\n context.setTransform(m.a * resolution, m.b * resolution, m.c * resolution, m.d * resolution, tx, ty);\r\n }\r\n _transformMargin(context, resolution, margin) {\r\n const m = this._matrix;\r\n context.setTransform(m.a * resolution, m.b * resolution, m.c * resolution, m.d * resolution, (m.tx + margin.left) * resolution, (m.ty + margin.top) * resolution);\r\n }\r\n _transformLayer(context, resolution, layer) {\r\n if (layer.margin) {\r\n this._transformMargin(context, layer.scale || resolution, layer.margin);\r\n }\r\n else {\r\n this._transform(context, layer.scale || resolution);\r\n }\r\n }\r\n render(status) {\r\n if (this.visible && (this.exportable !== false || !this._renderer._omitTainted)) {\r\n this._setMatrix();\r\n const subStatus = this.subStatus(status);\r\n const resolution = this._renderer.resolution;\r\n const layers = this._renderer.layers;\r\n const ghostLayer = this._renderer._ghostLayer;\r\n const ghostContext = ghostLayer.context;\r\n const mask = this.mask;\r\n if (mask) {\r\n mask._setMatrix();\r\n }\r\n // TODO improve this\r\n $array.each(layers, (layer) => {\r\n if (layer) {\r\n const context = layer.context;\r\n context.save();\r\n // We must apply the mask before we transform the element\r\n if (mask) {\r\n mask._transformLayer(context, resolution, layer);\r\n mask._runPath(context);\r\n context.clip();\r\n }\r\n context.globalAlpha = this.compoundAlpha * this.alpha;\r\n this._transformLayer(context, resolution, layer);\r\n if (this.filter) {\r\n context.filter = this.filter;\r\n }\r\n }\r\n });\r\n ghostContext.save();\r\n // We must apply the mask before we transform the element\r\n if (mask && this._isInteractiveMask(subStatus)) {\r\n mask._transformMargin(ghostContext, resolution, ghostLayer.margin);\r\n mask._runPath(ghostContext);\r\n ghostContext.clip();\r\n }\r\n this._transformMargin(ghostContext, resolution, ghostLayer.margin);\r\n this._render(subStatus);\r\n ghostContext.restore();\r\n $array.each(layers, (layer) => {\r\n if (layer) {\r\n layer.context.restore();\r\n }\r\n });\r\n }\r\n }\r\n _render(status) {\r\n if (this.exportable === false) {\r\n status.layer.tainted = true;\r\n }\r\n }\r\n hovering() {\r\n return this._renderer._hovering.has(this);\r\n }\r\n dragging() {\r\n return this._renderer._dragging.some((x) => x.value === this);\r\n }\r\n shouldCancelTouch() {\r\n const renderer = this._renderer;\r\n if (renderer.tapToActivate && !renderer._touchActive) {\r\n return false;\r\n }\r\n if (this.cancelTouch) {\r\n return true;\r\n }\r\n else if (this._parent) {\r\n return this._parent.shouldCancelTouch();\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasContainer extends CanvasDisplayObject {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"interactiveChildren\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_childLayers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_children\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n }\r\n _isInteractiveMask(status) {\r\n return this.interactiveChildren || super._isInteractiveMask(status);\r\n }\r\n addChild(child) {\r\n child._parent = this;\r\n this._children.push(child);\r\n if (child._layer) {\r\n this.registerChildLayer(child._layer);\r\n }\r\n }\r\n addChildAt(child, index) {\r\n child._parent = this;\r\n this._children.splice(index, 0, child);\r\n if (child._layer) {\r\n this.registerChildLayer(child._layer);\r\n }\r\n }\r\n removeChild(child) {\r\n child._parent = undefined;\r\n $array.removeFirst(this._children, child);\r\n }\r\n _render(status) {\r\n super._render(status);\r\n const renderer = this._renderer;\r\n if (this.interactive && this.interactiveChildren) {\r\n ++renderer._forceInteractive;\r\n }\r\n $array.each(this._children, (child) => {\r\n child.compoundAlpha = this.compoundAlpha * this.alpha;\r\n child.render(status);\r\n });\r\n if (this.interactive && this.interactiveChildren) {\r\n --renderer._forceInteractive;\r\n }\r\n }\r\n registerChildLayer(layer) {\r\n if (!this._childLayers) {\r\n this._childLayers = [];\r\n }\r\n $array.pushOne(this._childLayers, layer);\r\n if (this._parent) {\r\n this._parent.registerChildLayer(layer);\r\n }\r\n }\r\n markDirtyLayer(deep = false) {\r\n super.markDirtyLayer();\r\n if (deep && this._childLayers) {\r\n $array.each(this._childLayers, (layer) => layer.dirty = true);\r\n }\r\n }\r\n _dispose() {\r\n super._dispose();\r\n if (this._childLayers) {\r\n $array.each(this._childLayers, (layer) => {\r\n layer.dirty = true;\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction setPoint(bounds, point) {\r\n bounds.left = Math.min(bounds.left, point.x);\r\n bounds.top = Math.min(bounds.top, point.y);\r\n bounds.right = Math.max(bounds.right, point.x);\r\n bounds.bottom = Math.max(bounds.bottom, point.y);\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass Op {\r\n colorize(_context, _forceColor) { }\r\n colorizeGhost(context, forceColor) {\r\n this.colorize(context, forceColor);\r\n }\r\n path(_context) { }\r\n pathGhost(context) {\r\n this.path(context);\r\n }\r\n addBounds(_bounds) { }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass BeginPath extends Op {\r\n colorize(context, _forceColor) {\r\n context.beginPath();\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass BeginFill extends Op {\r\n constructor(color) {\r\n super();\r\n Object.defineProperty(this, \"color\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: color\r\n });\r\n }\r\n colorize(context, forceColor) {\r\n if (forceColor !== undefined) {\r\n context.fillStyle = forceColor;\r\n }\r\n else {\r\n context.fillStyle = this.color;\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass EndFill extends Op {\r\n constructor(clearShadow) {\r\n super();\r\n Object.defineProperty(this, \"clearShadow\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: clearShadow\r\n });\r\n }\r\n colorize(context, _forceColor) {\r\n context.fill();\r\n if (this.clearShadow) {\r\n context.shadowColor = \"\";\r\n context.shadowBlur = 0;\r\n context.shadowOffsetX = 0;\r\n context.shadowOffsetY = 0;\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass EndStroke extends Op {\r\n colorize(context, _forceColor) {\r\n context.stroke();\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass LineStyle extends Op {\r\n constructor(width, color, lineJoin) {\r\n super();\r\n Object.defineProperty(this, \"width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: width\r\n });\r\n Object.defineProperty(this, \"color\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: color\r\n });\r\n Object.defineProperty(this, \"lineJoin\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: lineJoin\r\n });\r\n }\r\n colorize(context, forceColor) {\r\n if (forceColor !== undefined) {\r\n context.strokeStyle = forceColor;\r\n }\r\n else {\r\n context.strokeStyle = this.color;\r\n }\r\n context.lineWidth = this.width;\r\n if (this.lineJoin) {\r\n context.lineJoin = this.lineJoin;\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass LineDash extends Op {\r\n constructor(dash) {\r\n super();\r\n Object.defineProperty(this, \"dash\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: dash\r\n });\r\n }\r\n colorize(context, _forceColor) {\r\n context.setLineDash(this.dash);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass LineDashOffset extends Op {\r\n constructor(dashOffset) {\r\n super();\r\n Object.defineProperty(this, \"dashOffset\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: dashOffset\r\n });\r\n }\r\n colorize(context, _forceColor) {\r\n context.lineDashOffset = this.dashOffset;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass DrawRect extends Op {\r\n constructor(x, y, width, height) {\r\n super();\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n Object.defineProperty(this, \"width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: width\r\n });\r\n Object.defineProperty(this, \"height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: height\r\n });\r\n }\r\n path(context) {\r\n context.rect(this.x, this.y, this.width, this.height);\r\n }\r\n addBounds(bounds) {\r\n const l = this.x;\r\n const t = this.y;\r\n const r = l + this.width;\r\n const b = t + this.height;\r\n setPoint(bounds, { x: l, y: t });\r\n setPoint(bounds, { x: r, y: t });\r\n setPoint(bounds, { x: l, y: b });\r\n setPoint(bounds, { x: r, y: b });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass DrawCircle extends Op {\r\n constructor(x, y, radius) {\r\n super();\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n Object.defineProperty(this, \"radius\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: radius\r\n });\r\n }\r\n path(context) {\r\n context.moveTo(this.x + this.radius, this.y);\r\n context.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\r\n }\r\n // TODO handle skewing and rotation\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.x - this.radius, y: this.y - this.radius });\r\n setPoint(bounds, { x: this.x + this.radius, y: this.y + this.radius });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass DrawEllipse extends Op {\r\n constructor(x, y, radiusX, radiusY) {\r\n super();\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n Object.defineProperty(this, \"radiusX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: radiusX\r\n });\r\n Object.defineProperty(this, \"radiusY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: radiusY\r\n });\r\n }\r\n path(context) {\r\n context.ellipse(0, 0, this.radiusX, this.radiusY, 0, 0, Math.PI * 2);\r\n }\r\n // TODO handle skewing and rotation\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.x - this.radiusX, y: this.y - this.radiusY });\r\n setPoint(bounds, { x: this.x + this.radiusX, y: this.y + this.radiusY });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass Arc extends Op {\r\n constructor(cx, cy, radius, startAngle, endAngle, anticlockwise) {\r\n super();\r\n Object.defineProperty(this, \"cx\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cx\r\n });\r\n Object.defineProperty(this, \"cy\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cy\r\n });\r\n Object.defineProperty(this, \"radius\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: radius\r\n });\r\n Object.defineProperty(this, \"startAngle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: startAngle\r\n });\r\n Object.defineProperty(this, \"endAngle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: endAngle\r\n });\r\n Object.defineProperty(this, \"anticlockwise\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: anticlockwise\r\n });\r\n }\r\n path(context) {\r\n if (this.radius > 0) {\r\n context.arc(this.cx, this.cy, this.radius, this.startAngle, this.endAngle, this.anticlockwise);\r\n }\r\n }\r\n addBounds(bounds) {\r\n let arcBounds = $math.getArcBounds(this.cx, this.cy, this.startAngle * $math.DEGREES, this.endAngle * $math.DEGREES, this.radius);\r\n setPoint(bounds, { x: arcBounds.left, y: arcBounds.top });\r\n setPoint(bounds, { x: arcBounds.right, y: arcBounds.bottom });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass ArcTo extends Op {\r\n constructor(x1, y1, x2, y2, radius) {\r\n super();\r\n Object.defineProperty(this, \"x1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x1\r\n });\r\n Object.defineProperty(this, \"y1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y1\r\n });\r\n Object.defineProperty(this, \"x2\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x2\r\n });\r\n Object.defineProperty(this, \"y2\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y2\r\n });\r\n Object.defineProperty(this, \"radius\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: radius\r\n });\r\n }\r\n path(context) {\r\n if (this.radius > 0) {\r\n context.arcTo(this.x1, this.y1, this.x2, this.y2, this.radius);\r\n }\r\n }\r\n // TODO: add points\r\n addBounds(_bounds) {\r\n /*\r\n // not finished\r\n https://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically\r\n\r\n if (prevPoint) {\r\n let x1 = prevPoint.x;\r\n let y1 = prevPoint.y;\r\n let x2 = this.x2;\r\n let y2 = this.y2;\r\n let r = this.radius;\r\n\r\n let xa = (x2 - x1) / 2;\r\n let ya = (y2 - y1) / 2;\r\n\r\n let x0 = x1 + xa;\r\n let y0 = y1 + ya;\r\n\r\n let a = Math.hypot(xa, ya);\r\n let b = Math.sqrt(r * r - a * a);\r\n\r\n let cx = x0 + b * ya / a;\r\n let cy = y0 - b * xa / a;\r\n\r\n console.log(cx, cy);\r\n }*/\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass LineTo extends Op {\r\n constructor(x, y) {\r\n super();\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n }\r\n path(context) {\r\n context.lineTo(this.x, this.y);\r\n }\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.x, y: this.y });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass MoveTo extends Op {\r\n constructor(x, y) {\r\n super();\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n }\r\n path(context) {\r\n context.moveTo(this.x, this.y);\r\n }\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.x, y: this.y });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass ClosePath extends Op {\r\n path(context) {\r\n context.closePath();\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass BezierCurveTo extends Op {\r\n constructor(cpX, cpY, cpX2, cpY2, toX, toY) {\r\n super();\r\n Object.defineProperty(this, \"cpX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpX\r\n });\r\n Object.defineProperty(this, \"cpY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpY\r\n });\r\n Object.defineProperty(this, \"cpX2\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpX2\r\n });\r\n Object.defineProperty(this, \"cpY2\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpY2\r\n });\r\n Object.defineProperty(this, \"toX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: toX\r\n });\r\n Object.defineProperty(this, \"toY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: toY\r\n });\r\n }\r\n path(context) {\r\n context.bezierCurveTo(this.cpX, this.cpY, this.cpX2, this.cpY2, this.toX, this.toY);\r\n }\r\n // TODO: OK?\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.cpX, y: this.cpY });\r\n setPoint(bounds, { x: this.cpX2, y: this.cpY2 });\r\n setPoint(bounds, { x: this.toX, y: this.toY });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass QuadraticCurveTo extends Op {\r\n constructor(cpX, cpY, toX, toY) {\r\n super();\r\n Object.defineProperty(this, \"cpX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpX\r\n });\r\n Object.defineProperty(this, \"cpY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: cpY\r\n });\r\n Object.defineProperty(this, \"toX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: toX\r\n });\r\n Object.defineProperty(this, \"toY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: toY\r\n });\r\n }\r\n path(context) {\r\n context.quadraticCurveTo(this.cpX, this.cpY, this.toX, this.toY);\r\n }\r\n // TODO: OK?\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.cpX, y: this.cpY });\r\n setPoint(bounds, { x: this.toX, y: this.toY });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass Shadow extends Op {\r\n constructor(color, blur, offsetX, offsetY, opacity) {\r\n super();\r\n Object.defineProperty(this, \"color\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: color\r\n });\r\n Object.defineProperty(this, \"blur\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: blur\r\n });\r\n Object.defineProperty(this, \"offsetX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: offsetX\r\n });\r\n Object.defineProperty(this, \"offsetY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: offsetY\r\n });\r\n Object.defineProperty(this, \"opacity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: opacity\r\n });\r\n }\r\n colorize(context, _forceColor) {\r\n if (this.opacity) {\r\n context.fillStyle = this.color;\r\n }\r\n context.shadowColor = this.color;\r\n context.shadowBlur = this.blur;\r\n context.shadowOffsetX = this.offsetX;\r\n context.shadowOffsetY = this.offsetY;\r\n }\r\n colorizeGhost(_context, _forceColor) { }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nclass GraphicsImage extends Op {\r\n constructor(image, width, height, x, y) {\r\n super();\r\n Object.defineProperty(this, \"image\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: image\r\n });\r\n Object.defineProperty(this, \"width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: width\r\n });\r\n Object.defineProperty(this, \"height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: height\r\n });\r\n Object.defineProperty(this, \"x\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: x\r\n });\r\n Object.defineProperty(this, \"y\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: y\r\n });\r\n }\r\n path(context) {\r\n context.drawImage(this.image, this.x, this.y, this.width, this.height);\r\n }\r\n // TODO: OK?\r\n addBounds(bounds) {\r\n setPoint(bounds, { x: this.x, y: this.y });\r\n setPoint(bounds, { x: this.width, y: this.height });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasGraphics extends CanvasDisplayObject {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_operations\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"blendMode\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: BlendMode.NORMAL\r\n });\r\n Object.defineProperty(this, \"_hasShadows\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_fillAlpha\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_strokeAlpha\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n clear() {\r\n super.clear();\r\n this._operations.length = 0;\r\n }\r\n _pushOp(op) {\r\n this._operations.push(op);\r\n }\r\n beginFill(color, alpha = 1) {\r\n this._fillAlpha = alpha;\r\n if (color) {\r\n if (color instanceof Color) {\r\n this._pushOp(new BeginFill(color.toCSS(alpha)));\r\n }\r\n else {\r\n this.isMeasured = true;\r\n this._pushOp(new BeginFill(color));\r\n }\r\n }\r\n else {\r\n this._pushOp(new BeginFill(\"rgba(0, 0, 0, \" + alpha + \")\"));\r\n }\r\n }\r\n endFill() {\r\n this._pushOp(new EndFill(this._hasShadows));\r\n }\r\n endStroke() {\r\n this._pushOp(new EndStroke());\r\n }\r\n beginPath() {\r\n this._pushOp(new BeginPath());\r\n }\r\n lineStyle(width = 0, color, alpha = 1, lineJoin) {\r\n this._strokeAlpha = alpha;\r\n if (color) {\r\n if (color instanceof Color) {\r\n this._pushOp(new LineStyle(width, color.toCSS(alpha), lineJoin));\r\n }\r\n else {\r\n this._pushOp(new LineStyle(width, color, lineJoin));\r\n }\r\n }\r\n else {\r\n this._pushOp(new LineStyle(width, \"rgba(0, 0, 0, \" + alpha + \")\", lineJoin));\r\n }\r\n }\r\n setLineDash(dash) {\r\n this._pushOp(new LineDash(dash ? dash : []));\r\n }\r\n setLineDashOffset(dashOffset = 0) {\r\n this._pushOp(new LineDashOffset(dashOffset));\r\n }\r\n drawRect(x, y, width, height) {\r\n this._pushOp(new DrawRect(x, y, width, height));\r\n }\r\n drawCircle(x, y, radius) {\r\n this._pushOp(new DrawCircle(x, y, radius));\r\n }\r\n drawEllipse(x, y, radiusX, radiusY) {\r\n this._pushOp(new DrawEllipse(x, y, radiusX, radiusY));\r\n }\r\n arc(cx, cy, radius, startAngle, endAngle, anticlockwise = false) {\r\n this._pushOp(new Arc(cx, cy, radius, startAngle, endAngle, anticlockwise));\r\n }\r\n arcTo(x1, y1, x2, y2, radius) {\r\n this._pushOp(new ArcTo(x1, y1, x2, y2, radius));\r\n }\r\n lineTo(x, y) {\r\n this._pushOp(new LineTo(x, y));\r\n }\r\n moveTo(x, y) {\r\n this._pushOp(new MoveTo(x, y));\r\n }\r\n bezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY) {\r\n this._pushOp(new BezierCurveTo(cpX, cpY, cpX2, cpY2, toX, toY));\r\n }\r\n quadraticCurveTo(cpX, cpY, toX, toY) {\r\n this._pushOp(new QuadraticCurveTo(cpX, cpY, toX, toY));\r\n }\r\n closePath() {\r\n this._pushOp(new ClosePath());\r\n }\r\n shadow(color, blur = 0, offsetX = 0, offsetY = 0, opacity) {\r\n this._hasShadows = true;\r\n this._pushOp(new Shadow(opacity ? color.toCSS(opacity) : color.toCSS(this._fillAlpha || this._strokeAlpha), blur, offsetX, offsetY));\r\n }\r\n image(image, width, height, x, y) {\r\n this._pushOp(new GraphicsImage(image, width, height, x, y));\r\n }\r\n // https://svgwg.org/svg2-draft/paths.html#DProperty\r\n // TODO better error checking\r\n svgPath(path) {\r\n let x = 0;\r\n let y = 0;\r\n let cpx = null;\r\n let cpy = null;\r\n let qcpx = null;\r\n let qcpy = null;\r\n const SEGMENTS_REGEXP = /([MmZzLlHhVvCcSsQqTtAa])([^MmZzLlHhVvCcSsQqTtAa]*)/g;\r\n const ARGS_REGEXP = /[\\u0009\\u0020\\u000A\\u000C\\u000D]*([\\+\\-]?[0-9]*\\.?[0-9]+(?:[eE][\\+\\-]?[0-9]+)?)[\\u0009\\u0020\\u000A\\u000C\\u000D]*,?/g;\r\n let match;\r\n while ((match = SEGMENTS_REGEXP.exec(path)) !== null) {\r\n const name = match[1];\r\n const rest = match[2];\r\n const args = [];\r\n while ((match = ARGS_REGEXP.exec(rest)) !== null) {\r\n args.push(match[1]);\r\n }\r\n // Reset control point\r\n if (name !== \"S\" && name !== \"s\" && name !== \"C\" && name !== \"c\") {\r\n cpx = null;\r\n cpy = null;\r\n }\r\n // Reset control point\r\n if (name !== \"Q\" && name !== \"q\" && name !== \"T\" && name !== \"t\") {\r\n qcpx = null;\r\n qcpy = null;\r\n }\r\n switch (name) {\r\n case \"M\":\r\n checkEvenArgs(name, args.length, 2);\r\n x = +args[0];\r\n y = +args[1];\r\n this.moveTo(x, y);\r\n for (let i = 2; i < args.length; i += 2) {\r\n x = +args[i];\r\n y = +args[i + 1];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"m\":\r\n checkEvenArgs(name, args.length, 2);\r\n x += +args[0];\r\n y += +args[1];\r\n this.moveTo(x, y);\r\n for (let i = 2; i < args.length; i += 2) {\r\n x += +args[i];\r\n y += +args[i + 1];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"L\":\r\n checkEvenArgs(name, args.length, 2);\r\n for (let i = 0; i < args.length; i += 2) {\r\n x = +args[i];\r\n y = +args[i + 1];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"l\":\r\n checkEvenArgs(name, args.length, 2);\r\n for (let i = 0; i < args.length; i += 2) {\r\n x += +args[i];\r\n y += +args[i + 1];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"H\":\r\n checkMinArgs(name, args.length, 1);\r\n for (let i = 0; i < args.length; ++i) {\r\n x = +args[i];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"h\":\r\n checkMinArgs(name, args.length, 1);\r\n for (let i = 0; i < args.length; ++i) {\r\n x += +args[i];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"V\":\r\n checkMinArgs(name, args.length, 1);\r\n for (let i = 0; i < args.length; ++i) {\r\n y = +args[i];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"v\":\r\n checkMinArgs(name, args.length, 1);\r\n for (let i = 0; i < args.length; ++i) {\r\n y += +args[i];\r\n this.lineTo(x, y);\r\n }\r\n break;\r\n case \"C\":\r\n checkEvenArgs(name, args.length, 6);\r\n for (let i = 0; i < args.length; i += 6) {\r\n const x1 = +args[i];\r\n const y1 = +args[i + 1];\r\n cpx = +args[i + 2];\r\n cpy = +args[i + 3];\r\n x = +args[i + 4];\r\n y = +args[i + 5];\r\n this.bezierCurveTo(x1, y1, cpx, cpy, x, y);\r\n }\r\n break;\r\n case \"c\":\r\n checkEvenArgs(name, args.length, 6);\r\n for (let i = 0; i < args.length; i += 6) {\r\n const x1 = +args[i] + x;\r\n const y1 = +args[i + 1] + y;\r\n cpx = +args[i + 2] + x;\r\n cpy = +args[i + 3] + y;\r\n x += +args[i + 4];\r\n y += +args[i + 5];\r\n this.bezierCurveTo(x1, y1, cpx, cpy, x, y);\r\n }\r\n break;\r\n case \"S\":\r\n checkEvenArgs(name, args.length, 4);\r\n if (cpx === null || cpy === null) {\r\n cpx = x;\r\n cpy = y;\r\n }\r\n for (let i = 0; i < args.length; i += 4) {\r\n const x1 = 2 * x - cpx;\r\n const y1 = 2 * y - cpy;\r\n cpx = +args[i];\r\n cpy = +args[i + 1];\r\n x = +args[i + 2];\r\n y = +args[i + 3];\r\n this.bezierCurveTo(x1, y1, cpx, cpy, x, y);\r\n }\r\n break;\r\n case \"s\":\r\n checkEvenArgs(name, args.length, 4);\r\n if (cpx === null || cpy === null) {\r\n cpx = x;\r\n cpy = y;\r\n }\r\n for (let i = 0; i < args.length; i += 4) {\r\n const x1 = 2 * x - cpx;\r\n const y1 = 2 * y - cpy;\r\n cpx = +args[i] + x;\r\n cpy = +args[i + 1] + y;\r\n x += +args[i + 2];\r\n y += +args[i + 3];\r\n this.bezierCurveTo(x1, y1, cpx, cpy, x, y);\r\n }\r\n break;\r\n case \"Q\":\r\n checkEvenArgs(name, args.length, 4);\r\n for (let i = 0; i < args.length; i += 4) {\r\n qcpx = +args[i];\r\n qcpy = +args[i + 1];\r\n x = +args[i + 2];\r\n y = +args[i + 3];\r\n this.quadraticCurveTo(qcpx, qcpy, x, y);\r\n }\r\n break;\r\n case \"q\":\r\n checkEvenArgs(name, args.length, 4);\r\n for (let i = 0; i < args.length; i += 4) {\r\n qcpx = +args[i] + x;\r\n qcpy = +args[i + 1] + y;\r\n x += +args[i + 2];\r\n y += +args[i + 3];\r\n this.quadraticCurveTo(qcpx, qcpy, x, y);\r\n }\r\n break;\r\n case \"T\":\r\n checkEvenArgs(name, args.length, 2);\r\n if (qcpx === null || qcpy === null) {\r\n qcpx = x;\r\n qcpy = y;\r\n }\r\n for (let i = 0; i < args.length; i += 2) {\r\n qcpx = 2 * x - qcpx;\r\n qcpy = 2 * y - qcpy;\r\n x = +args[i];\r\n y = +args[i + 1];\r\n this.quadraticCurveTo(qcpx, qcpy, x, y);\r\n }\r\n break;\r\n case \"t\":\r\n checkEvenArgs(name, args.length, 2);\r\n if (qcpx === null || qcpy === null) {\r\n qcpx = x;\r\n qcpy = y;\r\n }\r\n for (let i = 0; i < args.length; i += 2) {\r\n qcpx = 2 * x - qcpx;\r\n qcpy = 2 * y - qcpy;\r\n x += +args[i];\r\n y += +args[i + 1];\r\n this.quadraticCurveTo(qcpx, qcpy, x, y);\r\n }\r\n break;\r\n case \"A\":\r\n case \"a\":\r\n const relative = (name === \"a\");\r\n splitArcFlags(args);\r\n checkEvenArgs(name, args.length, 7);\r\n for (let i = 0; i < args.length; i += 7) {\r\n let cx = +args[i + 5];\r\n let cy = +args[i + 6];\r\n if (relative) {\r\n cx += x;\r\n cy += y;\r\n }\r\n const bs = arcToBezier({\r\n px: x,\r\n py: y,\r\n rx: +args[i],\r\n ry: +args[i + 1],\r\n xAxisRotation: +args[i + 2],\r\n largeArcFlag: assertBinary(+args[i + 3]),\r\n sweepFlag: assertBinary(+args[i + 4]),\r\n cx,\r\n cy,\r\n });\r\n $array.each(bs, (b) => {\r\n this.bezierCurveTo(b.x1, b.y1, b.x2, b.y2, b.x, b.y);\r\n x = b.x;\r\n y = b.y;\r\n });\r\n }\r\n break;\r\n case \"Z\":\r\n case \"z\":\r\n checkArgs(name, args.length, 0);\r\n this.closePath();\r\n break;\r\n }\r\n }\r\n }\r\n _runPath(context) {\r\n context.beginPath();\r\n $array.each(this._operations, (op) => {\r\n op.path(context);\r\n });\r\n }\r\n _render(status) {\r\n super._render(status);\r\n const layerDirty = status.layer.dirty;\r\n const interactive = this._isInteractive(status);\r\n if (layerDirty || interactive) {\r\n const context = status.layer.context;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n if (layerDirty) {\r\n context.globalCompositeOperation = this.blendMode;\r\n context.beginPath();\r\n }\r\n let color;\r\n if (interactive) {\r\n ghostContext.beginPath();\r\n color = this._getColorId();\r\n }\r\n $array.each(this._operations, (op) => {\r\n if (layerDirty) {\r\n op.path(context);\r\n op.colorize(context, undefined);\r\n }\r\n if (interactive) {\r\n op.pathGhost(ghostContext);\r\n op.colorizeGhost(ghostContext, color);\r\n }\r\n });\r\n }\r\n }\r\n renderDetached(context) {\r\n if (this.visible) {\r\n this._setMatrix();\r\n context.save();\r\n // We must apply the mask before we transform the element\r\n const mask = this.mask;\r\n if (mask) {\r\n mask._setMatrix();\r\n mask._transform(context, 1);\r\n mask._runPath(context);\r\n context.clip();\r\n }\r\n // TODO handle compoundAlpha somehow ?\r\n context.globalAlpha = this.compoundAlpha * this.alpha;\r\n this._transform(context, 1);\r\n if (this.filter) {\r\n context.filter = this.filter;\r\n }\r\n context.globalCompositeOperation = this.blendMode;\r\n context.beginPath();\r\n $array.each(this._operations, (op) => {\r\n op.path(context);\r\n op.colorize(context, undefined);\r\n });\r\n context.restore();\r\n }\r\n }\r\n _addBounds(bounds) {\r\n if (this.visible && this.isMeasured) {\r\n $array.each(this._operations, (op) => {\r\n op.addBounds(bounds);\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasText extends CanvasDisplayObject {\r\n constructor(renderer, text, style) {\r\n super(renderer);\r\n Object.defineProperty(this, \"text\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"style\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"resolution\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n Object.defineProperty(this, \"textVisible\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_textInfo\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_originalScale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n this.text = text;\r\n this.style = style;\r\n }\r\n invalidateBounds() {\r\n super.invalidateBounds();\r\n this._textInfo = undefined;\r\n }\r\n _shared(context) {\r\n if (this.style.textAlign) {\r\n context.textAlign = this.style.textAlign;\r\n }\r\n if (this.style.direction) {\r\n context.direction = this.style.direction;\r\n }\r\n if (this.style.textBaseline) {\r\n context.textBaseline = this.style.textBaseline;\r\n }\r\n }\r\n _prerender(status, ignoreGhost = false, ignoreFontWeight = false) {\r\n super._render(status);\r\n const context = status.layer.context;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n // Font style\r\n const style = this.style;\r\n let fontStyle = this._getFontStyle(undefined, ignoreFontWeight);\r\n context.font = fontStyle;\r\n if (this._isInteractive(status) && !ignoreGhost) {\r\n ghostContext.font = fontStyle;\r\n }\r\n // Other parameters\r\n if (style.fill) {\r\n if (style.fill instanceof Color) {\r\n context.fillStyle = style.fill.toCSS(style.fillOpacity != undefined ? style.fillOpacity : 1);\r\n }\r\n else {\r\n context.fillStyle = style.fill;\r\n }\r\n }\r\n if (style.shadowColor) {\r\n status.layer.context.shadowColor = style.shadowColor.toCSS(style.shadowOpacity || 1);\r\n }\r\n if (style.shadowBlur) {\r\n status.layer.context.shadowBlur = style.shadowBlur;\r\n }\r\n if (style.shadowOffsetX) {\r\n status.layer.context.shadowOffsetX = style.shadowOffsetX;\r\n }\r\n if (style.shadowOffsetY) {\r\n status.layer.context.shadowOffsetY = style.shadowOffsetY;\r\n }\r\n this._shared(context);\r\n if (this._isInteractive(status) && !ignoreGhost) {\r\n ghostContext.fillStyle = this._getColorId();\r\n this._shared(ghostContext);\r\n }\r\n }\r\n _getFontStyle(style2, ignoreFontWeight = false) {\r\n // Process defaults\r\n const style = this.style;\r\n let fontStyle = [];\r\n if (style2 && style2.fontVariant) {\r\n fontStyle.push(style2.fontVariant);\r\n }\r\n else if (style.fontVariant) {\r\n fontStyle.push(style.fontVariant);\r\n }\r\n if (!ignoreFontWeight) {\r\n if (style2 && style2.fontWeight) {\r\n fontStyle.push(style2.fontWeight);\r\n }\r\n else if (style.fontWeight) {\r\n fontStyle.push(style.fontWeight);\r\n }\r\n }\r\n if (style2 && style2.fontStyle) {\r\n fontStyle.push(style2.fontStyle);\r\n }\r\n else if (style.fontStyle) {\r\n fontStyle.push(style.fontStyle);\r\n }\r\n if (style2 && style2.fontSize) {\r\n if ($type.isNumber(style2.fontSize)) {\r\n style2.fontSize = style2.fontSize + \"px\";\r\n }\r\n fontStyle.push(style2.fontSize);\r\n }\r\n else if (style.fontSize) {\r\n if ($type.isNumber(style.fontSize)) {\r\n style.fontSize = style.fontSize + \"px\";\r\n }\r\n fontStyle.push(style.fontSize);\r\n }\r\n if (style2 && style2.fontFamily) {\r\n fontStyle.push(style2.fontFamily);\r\n }\r\n else if (style.fontFamily) {\r\n fontStyle.push(style.fontFamily);\r\n }\r\n else if (fontStyle.length) {\r\n fontStyle.push(\"Arial\");\r\n }\r\n return fontStyle.join(\" \");\r\n }\r\n _render(status) {\r\n // We need measurements in order to properly position text for alignment\r\n if (!this._textInfo) {\r\n this._measure(status);\r\n }\r\n if (this.textVisible) {\r\n const interactive = this._isInteractive(status);\r\n const context = status.layer.context;\r\n const layerDirty = status.layer.dirty;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n context.save();\r\n ghostContext.save();\r\n this._prerender(status);\r\n // const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\r\n // const x = this._localBounds && (this._localBounds.left < 0) ? Math.abs(this._localBounds.left) : 0;\r\n // Process text info produced by _measure()\r\n $array.each(this._textInfo, (line, _index) => {\r\n $array.each(line.textChunks, (chunk, _index) => {\r\n // Set style\r\n if (chunk.style) {\r\n context.save();\r\n ghostContext.save();\r\n context.font = chunk.style;\r\n if (this._isInteractive(status)) {\r\n ghostContext.font = chunk.style;\r\n }\r\n }\r\n if (chunk.fill) {\r\n context.save();\r\n context.fillStyle = chunk.fill.toCSS();\r\n // Color does not affect ghostContext so we not set it\r\n }\r\n // Draw text\r\n if (layerDirty) {\r\n context.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\r\n }\r\n // Draw underline\r\n if (chunk.textDecoration == \"underline\" || chunk.textDecoration == \"line-through\") {\r\n let thickness = 1;\r\n let offset = 1;\r\n let fontSize = chunk.height;\r\n const oversizedBehavior = this.style.oversizedBehavior || \"\";\r\n if ([\"truncate\", \"wrap\", \"wrap-no-break\"].indexOf(oversizedBehavior) > -1) {\r\n // Measure actual width of the text so the line fits\r\n const metrics = this._measureText(chunk.text, context);\r\n chunk.width = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\r\n }\r\n let offsetX = chunk.offsetX;\r\n switch (this.style.textAlign) {\r\n case \"right\":\r\n case \"end\":\r\n offsetX -= chunk.width;\r\n break;\r\n case \"center\":\r\n offsetX -= chunk.width / 2;\r\n break;\r\n }\r\n if (chunk.style) {\r\n const format = TextFormatter.getTextStyle(chunk.style);\r\n switch (format.fontWeight) {\r\n case \"bolder\":\r\n case \"bold\":\r\n case \"700\":\r\n case \"800\":\r\n case \"900\":\r\n thickness = 2;\r\n break;\r\n }\r\n }\r\n if (fontSize) {\r\n offset = fontSize / 20;\r\n }\r\n let y;\r\n if (chunk.textDecoration == \"line-through\") {\r\n y = thickness + line.offsetY + chunk.offsetY - chunk.height / 2;\r\n }\r\n else {\r\n y = thickness + offset * 1.5 + line.offsetY + chunk.offsetY;\r\n }\r\n context.save();\r\n context.beginPath();\r\n if (chunk.fill) {\r\n context.strokeStyle = chunk.fill.toCSS();\r\n }\r\n else if (this.style.fill && this.style.fill instanceof Color) {\r\n context.strokeStyle = this.style.fill.toCSS();\r\n }\r\n context.lineWidth = thickness * offset;\r\n context.moveTo(offsetX, y);\r\n context.lineTo(offsetX + chunk.width, y);\r\n context.stroke();\r\n context.restore();\r\n }\r\n if (interactive && this.interactive) {\r\n // Draw text in ghost canvas ONLY if it is set as interactive\r\n // explicitly. This way we avoid hit test anomalies caused by anti\r\n // aliasing of text.\r\n ghostContext.fillText(chunk.text, chunk.offsetX, line.offsetY + chunk.offsetY);\r\n }\r\n if (chunk.fill) {\r\n context.restore();\r\n // Color does not affect ghostContext so we not set it\r\n }\r\n // Reset style\r\n if (chunk.style) {\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n });\r\n });\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n }\r\n _addBounds(bounds) {\r\n if (this.visible && this.isMeasured) {\r\n //if (this._textVisible) {\r\n const x = this._measure({\r\n inactive: this.inactive,\r\n layer: this.getLayer(),\r\n });\r\n setPoint(bounds, { x: x.left, y: x.top });\r\n setPoint(bounds, { x: x.right, y: x.bottom });\r\n //}\r\n }\r\n }\r\n _ignoreFontWeight() {\r\n return /apple/i.test(navigator.vendor);\r\n }\r\n _measure(status) {\r\n const context = status.layer.context;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n const rtl = this.style.direction == \"rtl\";\r\n // Reset text info\r\n this._textInfo = [];\r\n // Init\r\n const oversizedBehavior = this.style.oversizedBehavior;\r\n const maxWidth = this.style.maxWidth;\r\n const truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\r\n const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\r\n // Pre-render\r\n context.save();\r\n ghostContext.save();\r\n this._prerender(status, true, this._ignoreFontWeight());\r\n // Get default font metrix\r\n const refText = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 \";\r\n // Split up text into lines\r\n const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\r\n let styleRestored = true;\r\n let minX = 0;\r\n let maxX = 0;\r\n // Iterate through the lines\r\n let offsetY = 0;\r\n let currentStyle;\r\n $array.each(lines, (line, _index) => {\r\n // Split up line into format/value chunks\r\n let chunks;\r\n if (line == \"\") {\r\n chunks = [{\r\n type: \"value\",\r\n text: \"\"\r\n }];\r\n }\r\n else {\r\n chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\r\n }\r\n while (chunks.length > 0) {\r\n // Init line object\r\n let lineInfo = {\r\n offsetY: offsetY,\r\n ascent: 0,\r\n width: 0,\r\n height: 0,\r\n left: 0,\r\n right: 0,\r\n textChunks: []\r\n };\r\n // Measure reference text\r\n const metrics = this._measureText(refText, context);\r\n const height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\r\n lineInfo.height = height;\r\n lineInfo.ascent = metrics.actualBoundingBoxAscent;\r\n let currentFormat;\r\n let currentDecoration = this.style.textDecoration;\r\n let currentFill;\r\n let currentChunkWidth;\r\n let skipFurtherText = false;\r\n let firstTextChunk = true;\r\n let leftoverChunks = [];\r\n let currentVerticalAlign;\r\n //let offsetX = 0;\r\n //let chunk;\r\n //while(chunk = chunks.shift()) {\r\n $array.eachContinue(chunks, (chunk, index) => {\r\n // Format chunk\r\n if (chunk.type == \"format\") {\r\n if (chunk.text == \"[/]\") {\r\n if (!styleRestored) {\r\n context.restore();\r\n ghostContext.restore();\r\n styleRestored = true;\r\n }\r\n currentFill = undefined;\r\n currentStyle = undefined;\r\n currentChunkWidth = undefined;\r\n currentDecoration = this.style.textDecoration;\r\n currentVerticalAlign = undefined;\r\n currentFormat = chunk.text;\r\n }\r\n else {\r\n if (!styleRestored) {\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n let format = TextFormatter.getTextStyle(chunk.text);\r\n const fontStyle = this._getFontStyle(format);\r\n context.save();\r\n ghostContext.save();\r\n context.font = fontStyle;\r\n currentStyle = fontStyle;\r\n currentFormat = chunk.text;\r\n if (format.textDecoration) {\r\n currentDecoration = format.textDecoration;\r\n }\r\n if (format.fill) {\r\n currentFill = format.fill;\r\n }\r\n if (format.width) {\r\n currentChunkWidth = $type.toNumber(format.width);\r\n }\r\n if (format.verticalAlign) {\r\n currentVerticalAlign = format.verticalAlign;\r\n }\r\n styleRestored = false;\r\n // Measure reference text after change of format\r\n const metrics = this._measureText(refText, context);\r\n const height = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\r\n if (height > lineInfo.height) {\r\n lineInfo.height = height;\r\n }\r\n if (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\r\n lineInfo.ascent = metrics.actualBoundingBoxAscent;\r\n }\r\n }\r\n }\r\n // Text chunk\r\n else if (chunk.type == \"value\" && !skipFurtherText) {\r\n // Measure\r\n const metrics = this._measureText(chunk.text, context);\r\n let chunkWidth = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\r\n // Check for fit\r\n if (truncate) {\r\n // Break words?\r\n let breakWords = firstTextChunk || this.style.breakWords || false;\r\n // Measure ellipsis and check if it fits\r\n const ellipsis = this.style.ellipsis || \"\";\r\n const ellipsisMetrics = this._measureText(ellipsis, context);\r\n const ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\r\n // Check fit\r\n if ((lineInfo.width + chunkWidth) > maxWidth) {\r\n const excessWidth = maxWidth - lineInfo.width - ellipsisWidth;\r\n chunk.text = this._truncateText(context, chunk.text, excessWidth, breakWords);\r\n chunk.text += ellipsis;\r\n skipFurtherText = true;\r\n }\r\n }\r\n else if (wrap) {\r\n // Check fit\r\n if ((lineInfo.width + chunkWidth) > maxWidth) {\r\n const excessWidth = maxWidth - lineInfo.width;\r\n const tmpText = this._truncateText(context, chunk.text, excessWidth, false, (firstTextChunk && this.style.oversizedBehavior != \"wrap-no-break\"));\r\n if (tmpText == \"\") {\r\n // Unable to fit a single letter - hide the whole label\r\n this.textVisible = true;\r\n return false;\r\n }\r\n //skipFurtherText = true;\r\n //Add remaining chunks for the next line\r\n leftoverChunks = chunks.slice(index + 1);\r\n //Add remaining text of current chunk if it was forced-cut\r\n if ($utils.trim(tmpText) != $utils.trim(chunk.text)) {\r\n leftoverChunks.unshift({\r\n type: \"value\",\r\n text: chunk.text.substr(tmpText.length)\r\n });\r\n if (currentFormat) {\r\n leftoverChunks.unshift({\r\n type: \"format\",\r\n text: currentFormat\r\n });\r\n }\r\n }\r\n // Set current chunk (truncated)\r\n chunk.text = $utils.trim(tmpText);\r\n chunks = [];\r\n skipFurtherText = true;\r\n }\r\n }\r\n // Chunk width?\r\n let leftBoundMod = 1;\r\n let rightBoundMod = 1;\r\n if (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\r\n // increase horizontal bounding boxes accordingly\r\n const boundsMod = chunkWidth / currentChunkWidth;\r\n switch (this.style.textAlign) {\r\n case \"right\":\r\n case \"end\":\r\n leftBoundMod = boundsMod;\r\n break;\r\n case \"center\":\r\n leftBoundMod = boundsMod;\r\n rightBoundMod = boundsMod;\r\n break;\r\n default:\r\n rightBoundMod = boundsMod;\r\n }\r\n chunkWidth = currentChunkWidth;\r\n }\r\n const chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\r\n if (chunkHeight > lineInfo.height) {\r\n lineInfo.height = chunkHeight;\r\n }\r\n if (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\r\n lineInfo.ascent = metrics.actualBoundingBoxAscent;\r\n }\r\n lineInfo.width += chunkWidth;\r\n lineInfo.left += metrics.actualBoundingBoxLeft / leftBoundMod;\r\n lineInfo.right += metrics.actualBoundingBoxRight / rightBoundMod;\r\n lineInfo.textChunks.push({\r\n style: currentStyle,\r\n fill: currentFill,\r\n text: chunk.text,\r\n width: chunkWidth,\r\n height: chunkHeight,\r\n left: metrics.actualBoundingBoxLeft,\r\n right: metrics.actualBoundingBoxRight,\r\n ascent: metrics.actualBoundingBoxAscent,\r\n offsetX: 0,\r\n offsetY: 0,\r\n textDecoration: currentDecoration,\r\n verticalAlign: currentVerticalAlign\r\n });\r\n //offsetX += chunkWidth;\r\n firstTextChunk = false;\r\n }\r\n if (leftoverChunks) {\r\n //return false;\r\n }\r\n return true;\r\n //}\r\n });\r\n if (this.style.lineHeight instanceof Percent) {\r\n lineInfo.height *= this.style.lineHeight.value;\r\n lineInfo.ascent *= this.style.lineHeight.value;\r\n }\r\n else {\r\n lineInfo.height *= this.style.lineHeight || 1.2;\r\n lineInfo.ascent *= this.style.lineHeight || 1.2;\r\n }\r\n if (minX < lineInfo.left) {\r\n minX = lineInfo.left;\r\n }\r\n if (maxX < lineInfo.right) {\r\n maxX = lineInfo.right;\r\n }\r\n this._textInfo.push(lineInfo);\r\n //lineInfo.offsetY += lineInfo.ascent;\r\n offsetY += lineInfo.height;\r\n // Reset chunks so that it can proceed to the next line\r\n chunks = leftoverChunks || [];\r\n }\r\n });\r\n if (!styleRestored) {\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n // Adjust chunk internal offsets\r\n $array.each(this._textInfo, (lineInfo, _index) => {\r\n let currentChunkOffset = 0;\r\n $array.each(lineInfo.textChunks, (chunk) => {\r\n chunk.offsetX = currentChunkOffset + chunk.left - lineInfo.left;\r\n chunk.offsetY += lineInfo.height - lineInfo.height * (this.style.baselineRatio || 0.19);\r\n currentChunkOffset += chunk.width;\r\n if (chunk.verticalAlign) {\r\n switch (chunk.verticalAlign) {\r\n case \"super\":\r\n chunk.offsetY -= lineInfo.height / 2 - chunk.height / 2;\r\n break;\r\n case \"sub\":\r\n chunk.offsetY += chunk.height / 2;\r\n break;\r\n }\r\n }\r\n });\r\n });\r\n const bounds = {\r\n left: rtl ? -maxX : -minX,\r\n top: 0,\r\n right: rtl ? minX : maxX,\r\n bottom: offsetY,\r\n };\r\n // We need to fit?\r\n if (oversizedBehavior !== \"none\") {\r\n const ratio = this._fitRatio(bounds);\r\n if (ratio < 1) {\r\n if (oversizedBehavior == \"fit\") {\r\n if ($type.isNumber(this.style.minScale) && (ratio < this.style.minScale)) {\r\n this.textVisible = false;\r\n bounds.left = 0;\r\n bounds.top = 0;\r\n bounds.right = 0;\r\n bounds.bottom = 0;\r\n }\r\n else {\r\n if (!this._originalScale || this._originalScale == 1) {\r\n this._originalScale = this.scale;\r\n }\r\n this.scale = ratio;\r\n this.textVisible = true;\r\n }\r\n }\r\n else if (oversizedBehavior == \"hide\") {\r\n this.textVisible = false;\r\n bounds.left = 0;\r\n bounds.top = 0;\r\n bounds.right = 0;\r\n bounds.bottom = 0;\r\n }\r\n else {\r\n switch (this.style.textAlign) {\r\n case \"right\":\r\n case \"end\":\r\n bounds.left = rtl ? maxWidth : -maxWidth;\r\n bounds.right = 0;\r\n break;\r\n case \"center\":\r\n bounds.left = -maxWidth / 2;\r\n bounds.right = maxWidth / 2;\r\n break;\r\n default:\r\n bounds.left = 0;\r\n bounds.right = rtl ? -maxWidth : maxWidth;\r\n }\r\n this.scale = this._originalScale || 1;\r\n this._originalScale = undefined;\r\n this.textVisible = true;\r\n }\r\n }\r\n else {\r\n this.scale = this._originalScale || 1;\r\n this._originalScale = undefined;\r\n this.textVisible = true;\r\n }\r\n }\r\n context.restore();\r\n ghostContext.restore();\r\n return bounds;\r\n }\r\n _fitRatio(bounds) {\r\n const maxW = this.style.maxWidth;\r\n const maxH = this.style.maxHeight;\r\n if (!$type.isNumber(maxW) && !$type.isNumber(maxH)) {\r\n return 1;\r\n }\r\n const w = bounds.right - bounds.left;\r\n const h = bounds.bottom - bounds.top;\r\n return Math.min(maxW / w || 1, maxH / h || 1);\r\n }\r\n _truncateText(context, text, maxWidth, breakWords = false, fallbackBreakWords = true) {\r\n let width;\r\n do {\r\n if (breakWords) {\r\n text = text.slice(0, -1);\r\n }\r\n else {\r\n let tmp = text.replace(/[^,;:!?\\\\\\/\\s​]+[,;:!?\\\\\\/\\s​]*$/g, \"\");\r\n if ((tmp == \"\" || tmp === text) && fallbackBreakWords) {\r\n breakWords = true;\r\n }\r\n else if (tmp == \"\") {\r\n return text;\r\n }\r\n else {\r\n text = tmp;\r\n }\r\n }\r\n const metrics = this._measureText(text, context);\r\n width = metrics.actualBoundingBoxLeft + metrics.actualBoundingBoxRight;\r\n } while ((width > maxWidth) && text != \"\");\r\n return text;\r\n }\r\n _measureText(text, context) {\r\n let metrics = context.measureText(text);\r\n let fakeMetrics = {};\r\n if (metrics.actualBoundingBoxAscent == null) {\r\n const div = document.createElement(\"div\");\r\n div.innerText = text;\r\n div.style.visibility = \"hidden\";\r\n div.style.position = \"absolute\";\r\n div.style.top = \"-1000000px;\";\r\n div.style.fontFamily = this.style.fontFamily || \"\";\r\n div.style.fontSize = this.style.fontSize + \"\";\r\n document.body.appendChild(div);\r\n const bbox = div.getBoundingClientRect();\r\n document.body.removeChild(div);\r\n const h = bbox.height;\r\n const w = metrics.width;\r\n let left = 0;\r\n let right = w;\r\n fakeMetrics = {\r\n actualBoundingBoxAscent: h,\r\n actualBoundingBoxDescent: 0,\r\n actualBoundingBoxLeft: left,\r\n actualBoundingBoxRight: right,\r\n fontBoundingBoxAscent: h,\r\n fontBoundingBoxDescent: 0,\r\n width: w\r\n };\r\n //return fake;\r\n }\r\n else {\r\n fakeMetrics = {\r\n actualBoundingBoxAscent: metrics.actualBoundingBoxAscent,\r\n actualBoundingBoxDescent: metrics.actualBoundingBoxDescent,\r\n actualBoundingBoxLeft: metrics.actualBoundingBoxLeft,\r\n actualBoundingBoxRight: metrics.actualBoundingBoxRight,\r\n fontBoundingBoxAscent: metrics.actualBoundingBoxAscent,\r\n fontBoundingBoxDescent: metrics.actualBoundingBoxDescent,\r\n width: metrics.width\r\n };\r\n }\r\n const w = metrics.width;\r\n switch (this.style.textAlign) {\r\n case \"right\":\r\n case \"end\":\r\n fakeMetrics.actualBoundingBoxLeft = w;\r\n fakeMetrics.actualBoundingBoxRight = 0;\r\n break;\r\n case \"center\":\r\n fakeMetrics.actualBoundingBoxLeft = w / 2;\r\n fakeMetrics.actualBoundingBoxRight = w / 2;\r\n break;\r\n default:\r\n fakeMetrics.actualBoundingBoxLeft = 0;\r\n fakeMetrics.actualBoundingBoxRight = w;\r\n }\r\n return fakeMetrics;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasTextStyle {\r\n constructor() {\r\n //public wordWrapWidth: number = 100;\r\n Object.defineProperty(this, \"fill\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fillOpacity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"textAlign\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fontFamily\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fontSize\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fontWeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fontStyle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"fontVariant\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"textDecoration\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowColor\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowBlur\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOffsetX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOffsetY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOpacity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n // leading?: number;\r\n // letterSpacing?: number;\r\n Object.defineProperty(this, \"lineHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: percent(120)\r\n });\r\n Object.defineProperty(this, \"baselineRatio\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0.19\r\n });\r\n // padding?: number;\r\n // stroke?: number;\r\n // strokeThickness?: number;\r\n // trim?: number;\r\n // wordWrap?: boolean;\r\n Object.defineProperty(this, \"direction\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"textBaseline\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"oversizedBehavior\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"none\"\r\n });\r\n Object.defineProperty(this, \"breakWords\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"ellipsis\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"…\"\r\n });\r\n Object.defineProperty(this, \"maxWidth\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"maxHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"minScale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"ignoreFormatting\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasRadialText extends CanvasText {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"textType\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"circular\"\r\n });\r\n Object.defineProperty(this, \"radius\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"startAngle\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"inside\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"orientation\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"auto\"\r\n });\r\n Object.defineProperty(this, \"kerning\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_textReversed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n _render(status) {\r\n switch (this.textType) {\r\n case \"circular\":\r\n this._renderCircular(status);\r\n break;\r\n default:\r\n super._render(status);\r\n break;\r\n }\r\n }\r\n _renderCircular(status) {\r\n if (this.textVisible) {\r\n this._prerender(status);\r\n const interactive = this._isInteractive(status);\r\n const context = status.layer.context;\r\n const layerDirty = status.layer.dirty;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n // Savepoint\r\n context.save();\r\n if (interactive) {\r\n ghostContext.save();\r\n }\r\n // We need measurements in order to properly position text for alignment\r\n if (!this._textInfo) {\r\n this._measure(status);\r\n }\r\n // Init\r\n let radius = (this.radius || 0);\r\n let startAngle = (this.startAngle || 0);\r\n let deltaAngle = 0;\r\n let orientation = this.orientation;\r\n let inward = orientation == \"auto\" ? \"auto\" : orientation == \"inward\";\r\n const inside = this.inside;\r\n const align = this.style.textAlign || \"left\";\r\n const kerning = this.kerning || 0;\r\n let clockwise = align == \"left\" ? 1 : -1;\r\n const shouldReverse = !this._textReversed;\r\n // Check if we need to invert the whole stuff\r\n if (inward == \"auto\") {\r\n // Calc max angle so we know whether we need to flip it\r\n let maxAngle = 0;\r\n let midAngle = 0;\r\n $array.each(this._textInfo, (line, _index) => {\r\n const deltaAngle = startAngle + (line.width / (radius - line.height)) / 2 * -clockwise;\r\n if (deltaAngle > maxAngle) {\r\n maxAngle = deltaAngle;\r\n }\r\n });\r\n if (align == \"left\") {\r\n midAngle = (maxAngle + deltaAngle / 2) * $math.DEGREES;\r\n }\r\n else if (align == \"right\") {\r\n midAngle = (maxAngle - deltaAngle / 2) * $math.DEGREES;\r\n }\r\n else {\r\n midAngle = startAngle * $math.DEGREES;\r\n }\r\n midAngle = $math.normalizeAngle(midAngle);\r\n inward = (midAngle >= 270) || (midAngle <= 90);\r\n }\r\n if (inward == true && shouldReverse) {\r\n this._textInfo.reverse();\r\n this._textReversed = true;\r\n }\r\n // if ((inward == false && align == \"left\") || (inward == true && align == \"right\")) {\r\n // \tclockwise *= -1;\r\n // }\r\n // Process text info produced by _measure()\r\n $array.each(this._textInfo, (line, _index) => {\r\n const textHeight = line.height;\r\n // Adjust radius (for `inside = false`)\r\n // Radius adjustment for `inside = false` is below the line calculation\r\n if (!inside) {\r\n radius += textHeight;\r\n }\r\n // Reverse letters if we're painting them counter-clockwise\r\n if (((clockwise == -1 && inward) || (clockwise == 1 && !inward)) && shouldReverse) {\r\n line.textChunks.reverse();\r\n }\r\n // Init angles\r\n let lineStartAngle = startAngle;\r\n deltaAngle = 0;\r\n // Adjust for center-align\r\n if (align == \"center\") {\r\n lineStartAngle += (line.width / (radius - textHeight)) / 2 * -clockwise;\r\n deltaAngle = lineStartAngle - startAngle;\r\n }\r\n // if (inward == \"auto\") {\r\n // \tlet midAngle;\r\n // \tif (align == \"left\") {\r\n // \t\tmidAngle = (lineStartAngle + deltaAngle / 2) * $math.DEGREES;\r\n // \t}\r\n // \telse if () {\r\n // \t\tmidAngle = (lineStartAngle - deltaAngle / 2) * $math.DEGREES;\r\n // \t}\r\n // \tinward = (midAngle >= 270) || (midAngle <= 90);\r\n // }\r\n // Rotate letters if they are facing outward\r\n lineStartAngle += (Math.PI * (inward ? 0 : 1)); // Rotate 180 if outward\r\n // Savepoint\r\n context.save();\r\n if (interactive) {\r\n ghostContext.save();\r\n }\r\n // Assume starting angle\r\n context.rotate(lineStartAngle);\r\n if (interactive) {\r\n ghostContext.rotate(lineStartAngle);\r\n }\r\n let angleShift = 0;\r\n $array.each(line.textChunks, (chunk, _index) => {\r\n // Draw the letter\r\n const char = chunk.text;\r\n const charWidth = chunk.width;\r\n // Rotate half a letter\r\n angleShift = (charWidth / 2) / (radius - textHeight) * clockwise;\r\n context.rotate(angleShift);\r\n if (interactive) {\r\n ghostContext.rotate(angleShift);\r\n }\r\n // Set style\r\n if (chunk.style) {\r\n context.save();\r\n ghostContext.save();\r\n context.font = chunk.style;\r\n if (interactive) {\r\n ghostContext.font = chunk.style;\r\n }\r\n }\r\n if (chunk.fill) {\r\n context.save();\r\n context.fillStyle = chunk.fill.toCSS();\r\n // Color does not affect ghostContext so we not set it\r\n }\r\n // Center letters\r\n context.textBaseline = \"middle\";\r\n context.textAlign = \"center\";\r\n if (interactive) {\r\n ghostContext.textBaseline = \"middle\";\r\n ghostContext.textAlign = \"center\";\r\n }\r\n // Plop the letter\r\n if (layerDirty) {\r\n context.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\r\n }\r\n if (interactive) {\r\n ghostContext.fillText(char, 0, (inward ? 1 : -1) * (0 - radius + textHeight / 2));\r\n }\r\n if (chunk.fill) {\r\n context.restore();\r\n // Color does not affect ghostContext so we not set it\r\n }\r\n // Reset style\r\n if (chunk.style) {\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n // Rotate half a letter and add spacing\r\n angleShift = (charWidth / 2 + kerning) / (radius - textHeight) * clockwise;\r\n context.rotate(angleShift);\r\n if (interactive) {\r\n ghostContext.rotate(angleShift);\r\n }\r\n });\r\n // Restore angle\r\n context.restore();\r\n if (interactive) {\r\n ghostContext.restore();\r\n }\r\n // Adjust radius (for `inside = true`)\r\n if (inside) {\r\n radius -= textHeight;\r\n }\r\n });\r\n // Restore\r\n context.restore();\r\n if (interactive) {\r\n ghostContext.restore();\r\n }\r\n }\r\n }\r\n _measure(status) {\r\n switch (this.textType) {\r\n case \"circular\":\r\n return this._measureCircular(status);\r\n default:\r\n return super._measure(status);\r\n }\r\n }\r\n _measureCircular(status) {\r\n const context = status.layer.context;\r\n const ghostContext = this._renderer._ghostLayer.context;\r\n const rtl = this.style.direction == \"rtl\";\r\n const oversizedBehavior = this.style.oversizedBehavior;\r\n const maxWidth = this.style.maxWidth;\r\n const truncate = $type.isNumber(maxWidth) && oversizedBehavior == \"truncate\";\r\n const ellipsis = this.style.ellipsis || \"\";\r\n let ellipsisMetrics;\r\n //const wrap = $type.isNumber(maxWidth) && (oversizedBehavior == \"wrap\" || oversizedBehavior == \"wrap-no-break\");\r\n // Reset text info\r\n this.textVisible = true;\r\n this._textInfo = [];\r\n this._textReversed = false;\r\n // Pre-render\r\n context.save();\r\n ghostContext.save();\r\n this._prerender(status, true);\r\n // Split up text into lines\r\n const lines = this.text.toString().replace(/\\r/g, \"\").split(/\\n/);\r\n let styleRestored = true;\r\n let totalWidth = 0;\r\n // Iterate through the lines\r\n let offsetY = 0;\r\n $array.each(lines, (line, _index) => {\r\n // Split up line into format/value chunks\r\n let chunks = TextFormatter.chunk(line, false, this.style.ignoreFormatting);\r\n // Init line object\r\n let lineInfo = {\r\n offsetY: offsetY,\r\n ascent: 0,\r\n width: 0,\r\n height: 0,\r\n left: 0,\r\n right: 0,\r\n textChunks: []\r\n };\r\n let currentStyle;\r\n let currentFill;\r\n let currentChunkWidth;\r\n //while(chunk = chunks.shift()) {\r\n $array.each(chunks, (chunk, _index) => {\r\n // Format chunk\r\n if (chunk.type == \"format\") {\r\n if (chunk.text == \"[/]\") {\r\n if (!styleRestored) {\r\n context.restore();\r\n ghostContext.restore();\r\n styleRestored = true;\r\n }\r\n currentFill = undefined;\r\n currentStyle = undefined;\r\n currentChunkWidth = undefined;\r\n }\r\n else {\r\n let format = TextFormatter.getTextStyle(chunk.text);\r\n const fontStyle = this._getFontStyle(format);\r\n context.save();\r\n ghostContext.save();\r\n context.font = fontStyle;\r\n currentStyle = fontStyle;\r\n if (format.fill) {\r\n currentFill = format.fill;\r\n }\r\n if (format.width) {\r\n currentChunkWidth = $type.toNumber(format.width);\r\n }\r\n styleRestored = false;\r\n }\r\n if (truncate) {\r\n ellipsisMetrics = this._measureText(ellipsis, context);\r\n }\r\n }\r\n // Text format\r\n else if (chunk.type == \"value\") {\r\n // Measure each letter\r\n let chars = chunk.text.match(/./ug) || [];\r\n if (rtl) {\r\n chars = $utils.splitString(chunk.text);\r\n chars.reverse();\r\n }\r\n for (let i = 0; i < chars.length; i++) {\r\n const char = chars[i];\r\n // Measure\r\n const metrics = this._measureText(char, context);\r\n let chunkWidth = metrics.width;\r\n // Chunk width?\r\n if (currentStyle && currentChunkWidth && (currentChunkWidth > chunkWidth)) {\r\n chunkWidth = currentChunkWidth;\r\n }\r\n const chunkHeight = metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent;\r\n if (chunkHeight > lineInfo.height) {\r\n lineInfo.height = chunkHeight;\r\n }\r\n if (metrics.actualBoundingBoxAscent > lineInfo.ascent) {\r\n lineInfo.ascent = metrics.actualBoundingBoxAscent;\r\n }\r\n totalWidth += chunkWidth;\r\n // Handle oversized behavior\r\n if (truncate) {\r\n // Measure ellipsis and check if it fits\r\n if (!ellipsisMetrics) {\r\n ellipsisMetrics = this._measureText(ellipsis, context);\r\n }\r\n const ellipsisWidth = ellipsisMetrics.actualBoundingBoxLeft + ellipsisMetrics.actualBoundingBoxRight;\r\n //totalWidth += ellipsisWidth;\r\n if ((totalWidth + ellipsisWidth) > maxWidth) {\r\n if (lineInfo.textChunks.length == 1) {\r\n this.textVisible = false;\r\n }\r\n else {\r\n lineInfo.width += ellipsisWidth;\r\n lineInfo.left += ellipsisMetrics.actualBoundingBoxLeft;\r\n lineInfo.right += ellipsisMetrics.actualBoundingBoxRight;\r\n lineInfo.textChunks.push({\r\n style: currentStyle,\r\n fill: currentFill,\r\n text: ellipsis,\r\n width: ellipsisWidth,\r\n height: chunkHeight + ellipsisMetrics.actualBoundingBoxDescent,\r\n left: ellipsisMetrics.actualBoundingBoxLeft,\r\n right: ellipsisMetrics.actualBoundingBoxRight,\r\n ascent: ellipsisMetrics.actualBoundingBoxAscent,\r\n offsetX: 0,\r\n offsetY: chunkHeight,\r\n textDecoration: undefined\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n lineInfo.width += chunkWidth;\r\n lineInfo.left += metrics.actualBoundingBoxLeft;\r\n lineInfo.right += metrics.actualBoundingBoxRight;\r\n lineInfo.textChunks.push({\r\n style: currentStyle,\r\n fill: currentFill,\r\n text: char,\r\n width: chunkWidth,\r\n height: chunkHeight + metrics.actualBoundingBoxDescent,\r\n left: metrics.actualBoundingBoxLeft,\r\n right: metrics.actualBoundingBoxRight,\r\n ascent: metrics.actualBoundingBoxAscent,\r\n offsetX: 0,\r\n offsetY: chunkHeight,\r\n textDecoration: undefined\r\n });\r\n if (rtl) {\r\n // @todo still needed?\r\n //break;\r\n }\r\n }\r\n }\r\n });\r\n if (this.style.lineHeight instanceof Percent) {\r\n lineInfo.height *= this.style.lineHeight.value;\r\n }\r\n else {\r\n lineInfo.height *= this.style.lineHeight || 1.2;\r\n }\r\n this._textInfo.push(lineInfo);\r\n //lineInfo.offsetY += lineInfo.ascent;\r\n offsetY += lineInfo.height;\r\n });\r\n if (!styleRestored) {\r\n context.restore();\r\n ghostContext.restore();\r\n }\r\n if (oversizedBehavior == \"hide\" && (totalWidth > maxWidth)) {\r\n this.textVisible = false;\r\n }\r\n // Adjust chunk internal offsets\r\n $array.each(this._textInfo, (lineInfo) => {\r\n $array.each(lineInfo.textChunks, (chunk) => {\r\n chunk.offsetY += Math.round((lineInfo.height - chunk.height + (lineInfo.ascent - chunk.ascent)) / 2);\r\n });\r\n });\r\n context.restore();\r\n ghostContext.restore();\r\n return {\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n };\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasImage extends CanvasDisplayObject {\r\n constructor(renderer, image) {\r\n super(renderer);\r\n Object.defineProperty(this, \"width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"image\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"tainted\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowColor\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowBlur\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOffsetX\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOffsetY\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"shadowOpacity\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_imageMask\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.image = image;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n if (this._imageMask) {\r\n clearCanvas(this._imageMask);\r\n }\r\n }\r\n getLocalBounds() {\r\n if (!this._localBounds) {\r\n let w = 0;\r\n let h = 0;\r\n if (this.width) {\r\n w = this.width;\r\n }\r\n if (this.height) {\r\n h = this.height;\r\n }\r\n this._localBounds = {\r\n left: 0,\r\n top: 0,\r\n right: w,\r\n bottom: h\r\n };\r\n this._addBounds(this._localBounds);\r\n }\r\n return this._localBounds;\r\n }\r\n _render(status) {\r\n super._render(status);\r\n if (this.image) {\r\n if (this.tainted === undefined) {\r\n this.tainted = isTainted(this.image);\r\n status.layer.tainted = true;\r\n }\r\n if (this.tainted && this._renderer._omitTainted) {\r\n return;\r\n }\r\n if (status.layer.dirty) {\r\n if (this.shadowColor) {\r\n status.layer.context.shadowColor = this.shadowColor.toCSS(this.shadowOpacity || 1);\r\n }\r\n if (this.shadowBlur) {\r\n status.layer.context.shadowBlur = this.shadowBlur;\r\n }\r\n if (this.shadowOffsetX) {\r\n status.layer.context.shadowOffsetX = this.shadowOffsetX;\r\n }\r\n if (this.shadowOffsetY) {\r\n status.layer.context.shadowOffsetY = this.shadowOffsetY;\r\n }\r\n // TODO should this round ?\r\n const width = this.width || this.image.naturalWidth;\r\n const height = this.height || this.image.naturalHeight;\r\n status.layer.context.drawImage(this.image, 0, 0, width, height);\r\n }\r\n if (this.interactive && this._isInteractive(status)) {\r\n const mask = this._getMask(this.image);\r\n this._renderer._ghostLayer.context.drawImage(mask, 0, 0);\r\n }\r\n }\r\n }\r\n clear() {\r\n super.clear();\r\n this.image = undefined;\r\n this._imageMask = undefined;\r\n }\r\n _getMask(image) {\r\n if (this._imageMask === undefined) {\r\n // TODO should this round ?\r\n const width = this.width || image.naturalWidth;\r\n const height = this.height || image.naturalHeight;\r\n // We need to create a second canvas because destination-in clears out the entire canvas\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width;\r\n canvas.height = height;\r\n const context = canvas.getContext(\"2d\");\r\n context.imageSmoothingEnabled = false;\r\n context.fillStyle = this._getColorId();\r\n context.fillRect(0, 0, width, height);\r\n if (!isTainted(image)) {\r\n context.globalCompositeOperation = \"destination-in\";\r\n context.drawImage(image, 0, 0, width, height);\r\n }\r\n this._imageMask = canvas;\r\n }\r\n return this._imageMask;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasRendererEvent {\r\n constructor(event, originalPoint, point, bbox) {\r\n Object.defineProperty(this, \"event\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: event\r\n });\r\n Object.defineProperty(this, \"originalPoint\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: originalPoint\r\n });\r\n Object.defineProperty(this, \"point\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: point\r\n });\r\n Object.defineProperty(this, \"bbox\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: bbox\r\n });\r\n Object.defineProperty(this, \"id\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"simulated\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"native\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n if ($utils.supports(\"touchevents\") && event instanceof Touch) {\r\n this.id = event.identifier;\r\n }\r\n else {\r\n this.id = null;\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasRenderer extends ArrayDisposer {\r\n constructor(resolution) {\r\n super();\r\n Object.defineProperty(this, \"view\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: document.createElement(\"div\")\r\n });\r\n Object.defineProperty(this, \"_layerDom\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: document.createElement(\"div\")\r\n });\r\n Object.defineProperty(this, \"layers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_dirtyLayers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"defaultLayer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this.getLayer(0)\r\n });\r\n Object.defineProperty(this, \"_ghostLayer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new GhostLayer()\r\n });\r\n Object.defineProperty(this, \"_patternCanvas\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: document.createElement(\"canvas\")\r\n });\r\n Object.defineProperty(this, \"_patternContext\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._patternCanvas.getContext(\"2d\")\r\n });\r\n Object.defineProperty(this, \"_realWidth\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_realHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_calculatedWidth\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_calculatedHeight\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"resolution\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"interactionsEnabled\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_listeners\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_colorId\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_colorMap\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_forceInteractive\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_omitTainted\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n // TODO this should store the Id as well\r\n Object.defineProperty(this, \"_hovering\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new Set()\r\n });\r\n Object.defineProperty(this, \"_dragging\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_mousedown\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_lastPointerMoveEvent\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"tapToActivate\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"tapToActivateTimeout\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 3000\r\n });\r\n Object.defineProperty(this, \"_touchActive\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_touchActiveTimeout\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n if (resolution == null) {\r\n this.resolution = window.devicePixelRatio;\r\n }\r\n else {\r\n this.resolution = resolution;\r\n }\r\n this.view.style.position = \"absolute\";\r\n this.view.setAttribute(\"aria-hidden\", \"true\");\r\n this.view.appendChild(this._layerDom);\r\n this._disposers.push(new Disposer(() => {\r\n $object.each(this._events, (_key, events) => {\r\n events.disposer.dispose();\r\n });\r\n $array.each(this.layers, (layer) => {\r\n clearCanvas(layer.view);\r\n if (layer.exportableView) {\r\n clearCanvas(layer.exportableView);\r\n }\r\n });\r\n clearCanvas(this._ghostLayer.view);\r\n clearCanvas(this._patternCanvas);\r\n }));\r\n /*\r\n this._disposers.push($utils.addEventListener(this._ghostLayer.view, \"click\", (originalEvent: MouseEvent) => {\r\n const event = this.getEvent(originalEvent);\r\n const target = this._getHitTarget(event.originalPoint, event.bbox);\r\n console.debug(target);\r\n }));\r\n */\r\n // Monitor for possible pixel ratio changes (when page is zoomed)\r\n this._disposers.push($utils.onZoom(() => {\r\n if (resolution == null) {\r\n this.resolution = window.devicePixelRatio;\r\n }\r\n }));\r\n // We need this in order top prevent default touch gestures when dragging\r\n // draggable elements\r\n if ($utils.supports(\"touchevents\")) {\r\n const listener = (ev) => {\r\n if (this._dragging.length !== 0) {\r\n $array.eachContinue(this._dragging, (item) => {\r\n if (item.value.shouldCancelTouch()) {\r\n ev.preventDefault();\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n // If touch down happends, delay touch out\r\n if (this._touchActiveTimeout) {\r\n this._delayTouchDeactivate();\r\n }\r\n };\r\n this._disposers.push($utils.addEventListener(window, \"touchstart\", listener, { passive: false }));\r\n this._disposers.push($utils.addEventListener(this.view, \"touchstart\", listener, { passive: false }));\r\n this._disposers.push($utils.addEventListener(this.view, \"touchmove\", () => {\r\n // If touch is moving, delay touch out\r\n if (this._touchActiveTimeout) {\r\n this._delayTouchDeactivate();\r\n }\r\n }, { passive: true }));\r\n this._disposers.push($utils.addEventListener(window, \"click\", (_ev) => {\r\n this._touchActive = false;\r\n }, { passive: true }));\r\n this._disposers.push($utils.addEventListener(this.view, \"click\", (_ev) => {\r\n window.setTimeout(() => {\r\n this._touchActive = true;\r\n this._delayTouchDeactivate();\r\n }, 100);\r\n }, { passive: true }));\r\n }\r\n // Prevent scrolling of the window when hovering on \"wheelable\" object\r\n if ($utils.supports(\"wheelevents\")) {\r\n this._disposers.push($utils.addEventListener(this.view, \"wheel\", (ev) => {\r\n let prevent = false;\r\n this._hovering.forEach((obj) => {\r\n if (obj.wheelable) {\r\n prevent = true;\r\n return false;\r\n }\r\n });\r\n if (prevent) {\r\n ev.preventDefault();\r\n }\r\n }, { passive: false }));\r\n }\r\n }\r\n /*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\r\n this._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\r\n });\r\n */\r\n resetImageArray() {\r\n this._ghostLayer.imageArray = undefined;\r\n }\r\n _delayTouchDeactivate() {\r\n if (this._touchActiveTimeout) {\r\n clearTimeout(this._touchActiveTimeout);\r\n }\r\n if (this.tapToActivateTimeout > 0) {\r\n this._touchActiveTimeout = window.setTimeout(() => {\r\n this._touchActive = false;\r\n }, this.tapToActivateTimeout);\r\n }\r\n }\r\n get debugGhostView() {\r\n return !!this._ghostLayer.view.parentNode;\r\n }\r\n set debugGhostView(value) {\r\n if (value) {\r\n if (!this._ghostLayer.view.parentNode) {\r\n this.view.appendChild(this._ghostLayer.view);\r\n }\r\n }\r\n else {\r\n if (this._ghostLayer.view.parentNode) {\r\n this._ghostLayer.view.parentNode.removeChild(this._ghostLayer.view);\r\n }\r\n }\r\n }\r\n createLinearGradient(x1, y1, x2, y2) {\r\n return this.defaultLayer.context.createLinearGradient(x1, y1, x2, y2);\r\n }\r\n createRadialGradient(x1, y1, radius1, x2, y2, radius2) {\r\n return this.defaultLayer.context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);\r\n }\r\n createPattern(graphics, background, repetition, width, height) {\r\n // const patternCanvas = document.createElement(\"canvas\");\r\n // const patternContext = patternCanvas.getContext(\"2d\")!;\r\n // patternCanvas.width = width;\r\n // patternCanvas.height = height;\r\n // if (fill) {\r\n // \tpatternContext.fillStyle = fill.toCSS();\r\n // \tpatternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\r\n // }\r\n // const layer = {\r\n // \tview: patternCanvas,\r\n // \tcontext: patternContext,\r\n // \tvisible: true,\r\n // \torder: 0,\r\n // \twidth: width,\r\n // \theight: height,\r\n // \tdirty: true\r\n // };\r\n // // patternContext.arc(0, 0, 50, 0, .5 * Math.PI);\r\n // // patternContext.stroke();\r\n // image.targetLayer = layer;\r\n // image.render(layer);\r\n //this._layerDom.appendChild(patternCanvas);\r\n this._patternCanvas.width = width;\r\n this._patternCanvas.height = height;\r\n this._patternContext.clearRect(0, 0, width, height);\r\n // patternCanvas.style.width = width * this.resolution + \"px\";\r\n // patternCanvas.style.height = height * this.resolution + \"px\";\r\n background.renderDetached(this._patternContext);\r\n graphics.renderDetached(this._patternContext);\r\n return this._patternContext.createPattern(this._patternCanvas, repetition);\r\n }\r\n makeContainer() {\r\n return new CanvasContainer(this);\r\n }\r\n makeGraphics() {\r\n return new CanvasGraphics(this);\r\n }\r\n makeText(text, style) {\r\n return new CanvasText(this, text, style);\r\n }\r\n makeTextStyle() {\r\n return new CanvasTextStyle();\r\n }\r\n makeRadialText(text, style) {\r\n return new CanvasRadialText(this, text, style);\r\n }\r\n makePicture(image) {\r\n return new CanvasImage(this, image);\r\n }\r\n resizeLayer(layer) {\r\n layer.resize(this._calculatedWidth, this._calculatedHeight, this._calculatedWidth, this._calculatedHeight, this.resolution);\r\n }\r\n resizeGhost() {\r\n this._ghostLayer.resize(this._calculatedWidth, this._calculatedHeight, this._calculatedWidth, this._calculatedHeight, this.resolution);\r\n }\r\n resize(realWidth, realHeight, calculatedWidth, calculatedHeight) {\r\n this._realWidth = realWidth;\r\n this._realHeight = realHeight;\r\n this._calculatedWidth = calculatedWidth;\r\n this._calculatedHeight = calculatedHeight;\r\n $array.each(this.layers, (layer) => {\r\n if (layer) {\r\n layer.dirty = true;\r\n this.resizeLayer(layer);\r\n }\r\n });\r\n this.resizeGhost();\r\n this.view.style.width = calculatedWidth + \"px\";\r\n this.view.style.height = calculatedHeight + \"px\";\r\n }\r\n createDetachedLayer(willReadFrequently = false) {\r\n const view = document.createElement(\"canvas\");\r\n const context = view.getContext(\"2d\", { willReadFrequently: willReadFrequently });\r\n const layer = new CanvasLayer(view, context);\r\n view.style.position = \"absolute\";\r\n view.style.top = \"0px\";\r\n view.style.left = \"0px\";\r\n return layer;\r\n }\r\n getLayerByOrder(order) {\r\n const layers = this.layers;\r\n const length = layers.length;\r\n for (let i = 0; i < length; i++) {\r\n const layer = layers[i];\r\n if (layer.order == order) {\r\n return layer;\r\n }\r\n }\r\n }\r\n getLayer(order, visible = true) {\r\n let existingLayer = this.getLayerByOrder(order);\r\n if (existingLayer) {\r\n return existingLayer;\r\n }\r\n const layer = this.createDetachedLayer(order == 99);\r\n layer.order = order;\r\n layer.visible = visible;\r\n layer.view.className = \"am5-layer-\" + order;\r\n if (layer.visible) {\r\n this.resizeLayer(layer);\r\n }\r\n const layers = this.layers;\r\n layers.push(layer);\r\n layers.sort((a, b) => {\r\n if (a.order > b.order) {\r\n return 1;\r\n }\r\n else if (a.order < b.order) {\r\n return -1;\r\n }\r\n else {\r\n return 0;\r\n }\r\n });\r\n const length = layers.length;\r\n const layerIndex = $array.indexOf(layers, layer);\r\n let next;\r\n for (let i = layerIndex + 1; i < length; i++) {\r\n if (layers[i].visible) {\r\n next = layers[i];\r\n break;\r\n }\r\n }\r\n if (layer.visible) {\r\n if (next === undefined) {\r\n this._layerDom.appendChild(layer.view);\r\n }\r\n else {\r\n this._layerDom.insertBefore(layer.view, next.view);\r\n }\r\n }\r\n return layer;\r\n }\r\n render(root) {\r\n this._dirtyLayers.length = 0;\r\n $array.each(this.layers, (layer) => {\r\n if (layer) {\r\n if (layer.dirty && layer.visible) {\r\n this._dirtyLayers.push(layer);\r\n layer.clear();\r\n }\r\n }\r\n });\r\n this._ghostLayer.clear();\r\n root.render({\r\n inactive: null,\r\n layer: this.defaultLayer,\r\n });\r\n this._ghostLayer.context.restore();\r\n //setTimeout(() => {\r\n // Remove this after the Chrome bug is fixed:\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=1279394\r\n $array.each(this.layers, (layer) => {\r\n if (layer) {\r\n const context = layer.context;\r\n context.beginPath();\r\n context.moveTo(0, 0);\r\n context.stroke();\r\n }\r\n });\r\n $array.each(this._dirtyLayers, (layer) => {\r\n layer.context.restore();\r\n layer.dirty = false;\r\n });\r\n //}, 100)\r\n if (this._hovering.size && this._lastPointerMoveEvent) {\r\n const { events, target, native } = this._lastPointerMoveEvent;\r\n //this._mouseMoveThrottler.run();\r\n $array.each(events, (event) => {\r\n this._dispatchGlobalMousemove(event, target, native);\r\n });\r\n }\r\n }\r\n paintId(obj) {\r\n const id = distributeId(++this._colorId);\r\n const color = Color.fromHex(id).toCSS();\r\n this._colorMap[color] = obj;\r\n return color;\r\n }\r\n _removeObject(obj) {\r\n if (obj._colorId !== undefined) {\r\n delete this._colorMap[obj._colorId];\r\n }\r\n }\r\n // protected _identifyObjectByColor(colorId: number): CanvasDisplayObject | undefined {\r\n // \treturn this._colorMap[colorId];\r\n // }\r\n _adjustBoundingBox(bbox) {\r\n const margin = this._ghostLayer.margin;\r\n return new DOMRect(-margin.left, -margin.top, bbox.width + margin.left + margin.right, bbox.height + margin.top + margin.bottom);\r\n }\r\n getEvent(originalEvent, adjustPoint = true) {\r\n const bbox = this.view.getBoundingClientRect();\r\n const x = originalEvent.clientX || 0;\r\n const y = originalEvent.clientY || 0;\r\n const widthScale = this._calculatedWidth / this._realWidth;\r\n const heightScale = this._calculatedHeight / this._realHeight;\r\n const originalPoint = {\r\n x: x - bbox.left,\r\n y: y - bbox.top,\r\n };\r\n const point = {\r\n x: (x - (adjustPoint ? bbox.left : 0)) * widthScale,\r\n y: (y - (adjustPoint ? bbox.top : 0)) * heightScale,\r\n };\r\n return new CanvasRendererEvent(originalEvent, originalPoint, point, this._adjustBoundingBox(bbox));\r\n }\r\n _getHitTarget(point, bbox, target) {\r\n if (bbox.width === 0 || bbox.height === 0 || point.x < bbox.left || point.x > bbox.right || point.y < bbox.top || point.y > bbox.bottom) {\r\n return;\r\n }\r\n if (!target || !this._layerDom.contains(target)) {\r\n return;\r\n }\r\n const pixel = this._ghostLayer.getImageData(point, bbox);\r\n if (pixel.data[0] === 0 && pixel.data[1] === 0 && pixel.data[2] === 0) {\r\n return false;\r\n }\r\n const colorId = Color.fromRGB(pixel.data[0], pixel.data[1], pixel.data[2]).toCSS();\r\n const hit = this._colorMap[colorId];\r\n return hit;\r\n }\r\n getObjectAtPoint(point) {\r\n const data = this._ghostLayer.getImageArray(point);\r\n if (data[0] === 0 && data[1] === 0 && data[2] === 0) {\r\n return undefined;\r\n }\r\n const colorId = Color.fromRGB(data[0], data[1], data[2]).toCSS();\r\n const hit = this._colorMap[colorId];\r\n return hit;\r\n }\r\n _withEvents(key, f) {\r\n const events = this._events[key];\r\n if (events !== undefined) {\r\n events.dispatching = true;\r\n try {\r\n f(events);\r\n }\r\n finally {\r\n events.dispatching = false;\r\n if (events.cleanup) {\r\n events.cleanup = false;\r\n $array.keepIf(events.callbacks, (callback) => {\r\n return !callback.disposed;\r\n });\r\n if (events.callbacks.length === 0) {\r\n events.disposer.dispose();\r\n delete this._events[key];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _dispatchEventAll(key, event) {\r\n if (!this.interactionsEnabled) {\r\n return;\r\n }\r\n this._withEvents(key, (events) => {\r\n $array.each(events.callbacks, (callback) => {\r\n if (!callback.disposed) {\r\n callback.callback.call(callback.context, event);\r\n }\r\n });\r\n });\r\n }\r\n _dispatchEvent(key, target, event) {\r\n if (!this.interactionsEnabled) {\r\n return false;\r\n }\r\n let dispatched = false;\r\n this._withEvents(key, (events) => {\r\n $array.each(events.callbacks, (callback) => {\r\n if (!callback.disposed && callback.object === target) {\r\n callback.callback.call(callback.context, event);\r\n dispatched = true;\r\n }\r\n });\r\n });\r\n return dispatched;\r\n }\r\n _dispatchMousedown(originalEvent, originalTarget) {\r\n const button = originalEvent.button;\r\n if (button != 0 && button != 2 && button != 1 && button !== undefined) {\r\n // Ignore non-primary mouse buttons\r\n return;\r\n }\r\n const event = this.getEvent(originalEvent);\r\n const target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\r\n if (target) {\r\n const id = event.id;\r\n let dragged = false;\r\n eachTargets(target, (obj) => {\r\n const info = { id: id, value: obj };\r\n this._mousedown.push(info);\r\n if (!dragged && this._dispatchEvent(\"pointerdown\", obj, event)) {\r\n // Only dispatch the first element which matches\r\n dragged = true;\r\n const has = this._dragging.some((x) => {\r\n return x.value === obj && x.id === id;\r\n });\r\n if (!has) {\r\n this._dragging.push(info);\r\n }\r\n }\r\n return true;\r\n });\r\n }\r\n }\r\n _dispatchGlobalMousemove(originalEvent, originalTarget, native) {\r\n const event = this.getEvent(originalEvent);\r\n const target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\r\n event.native = native;\r\n if (target) {\r\n this._hovering.forEach((obj) => {\r\n if (!obj.contains(target)) {\r\n this._hovering.delete(obj);\r\n if (obj.cursorOverStyle) {\r\n $utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle);\r\n }\r\n this._dispatchEvent(\"pointerout\", obj, event);\r\n }\r\n });\r\n if (event.native) {\r\n eachTargets(target, (obj) => {\r\n if (!this._hovering.has(obj)) {\r\n this._hovering.add(obj);\r\n if (obj.cursorOverStyle) {\r\n obj._replacedCursorStyle = $utils.getStyle(document.body, \"cursor\");\r\n $utils.setStyle(document.body, \"cursor\", obj.cursorOverStyle);\r\n }\r\n this._dispatchEvent(\"pointerover\", obj, event);\r\n }\r\n return true;\r\n });\r\n }\r\n //} else if (target === false) {\r\n }\r\n else {\r\n this._hovering.forEach((obj) => {\r\n if (obj.cursorOverStyle) {\r\n $utils.setStyle(document.body, \"cursor\", obj._replacedCursorStyle);\r\n }\r\n this._dispatchEvent(\"pointerout\", obj, event);\r\n });\r\n this._hovering.clear();\r\n }\r\n this._dispatchEventAll(\"globalpointermove\", event);\r\n }\r\n removeHovering(graphics) {\r\n this._hovering.delete(graphics);\r\n if (graphics.cursorOverStyle) {\r\n $utils.setStyle(document.body, \"cursor\", graphics._replacedCursorStyle);\r\n }\r\n }\r\n _dispatchGlobalMouseup(originalEvent, native) {\r\n const event = this.getEvent(originalEvent);\r\n event.native = native;\r\n //const target = this._getHitTarget(event.originalPoint);\r\n this._dispatchEventAll(\"globalpointerup\", event);\r\n }\r\n _dispatchDragMove(originalEvent) {\r\n if (this._dragging.length !== 0) {\r\n const event = this.getEvent(originalEvent);\r\n const id = event.id;\r\n this._dragging.forEach((obj) => {\r\n if (obj.id === id) {\r\n this._dispatchEvent(\"pointermove\", obj.value, event);\r\n }\r\n });\r\n }\r\n }\r\n _dispatchDragEnd(originalEvent, originalTarget) {\r\n const button = originalEvent.button;\r\n let clickevent;\r\n if (button == 0 || button === undefined) {\r\n clickevent = \"click\";\r\n }\r\n else if (button == 2) {\r\n clickevent = \"rightclick\";\r\n }\r\n else if (button == 1) {\r\n clickevent = \"middleclick\";\r\n }\r\n else {\r\n // Ignore non-primary mouse buttons\r\n return;\r\n }\r\n const event = this.getEvent(originalEvent);\r\n const id = event.id;\r\n if (this._mousedown.length !== 0) {\r\n const target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\r\n if (target) {\r\n this._mousedown.forEach((obj) => {\r\n if (obj.id === id && obj.value.contains(target)) {\r\n this._dispatchEvent(clickevent, obj.value, event);\r\n }\r\n });\r\n }\r\n this._mousedown.length = 0;\r\n }\r\n if (this._dragging.length !== 0) {\r\n this._dragging.forEach((obj) => {\r\n if (obj.id === id) {\r\n this._dispatchEvent(\"pointerup\", obj.value, event);\r\n }\r\n });\r\n this._dragging.length = 0;\r\n }\r\n }\r\n _dispatchDoubleClick(originalEvent, originalTarget) {\r\n const event = this.getEvent(originalEvent);\r\n const target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\r\n if (target) {\r\n eachTargets(target, (obj) => {\r\n if (this._dispatchEvent(\"dblclick\", obj, event)) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n }\r\n }\r\n _dispatchWheel(originalEvent, originalTarget) {\r\n const event = this.getEvent(originalEvent);\r\n const target = this._getHitTarget(event.originalPoint, event.bbox, originalTarget);\r\n if (target) {\r\n eachTargets(target, (obj) => {\r\n if (this._dispatchEvent(\"wheel\", obj, event)) {\r\n return false;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n }\r\n }\r\n _makeSharedEvent(key, f) {\r\n if (this._listeners[key] === undefined) {\r\n const listener = f();\r\n this._listeners[key] = new CounterDisposer(() => {\r\n delete this._listeners[key];\r\n listener.dispose();\r\n });\r\n }\r\n return this._listeners[key].increment();\r\n }\r\n _onPointerEvent(name, f) {\r\n let native = false;\r\n let timer = null;\r\n function clear() {\r\n timer = null;\r\n native = false;\r\n }\r\n return new MultiDisposer([\r\n new Disposer(() => {\r\n if (timer !== null) {\r\n clearTimeout(timer);\r\n }\r\n clear();\r\n }),\r\n $utils.addEventListener(this.view, $utils.getRendererEvent(name), (_) => {\r\n native = true;\r\n if (timer !== null) {\r\n clearTimeout(timer);\r\n }\r\n timer = window.setTimeout(clear, 0);\r\n }),\r\n onPointerEvent(window, name, (ev, target) => {\r\n if (timer !== null) {\r\n clearTimeout(timer);\r\n timer = null;\r\n }\r\n f(ev, target, native);\r\n native = false;\r\n }),\r\n ]);\r\n }\r\n // This ensures that only a single DOM event is added (e.g. only a single mousemove event listener)\r\n _initEvent(key) {\r\n switch (key) {\r\n case \"globalpointermove\":\r\n case \"pointerover\":\r\n case \"pointerout\":\r\n return this._makeSharedEvent(\"pointermove\", () => {\r\n const listener = (events, target, native) => {\r\n this._lastPointerMoveEvent = { events, target, native };\r\n $array.each(events, (event) => {\r\n this._dispatchGlobalMousemove(event, target, native);\r\n });\r\n };\r\n return new MultiDisposer([\r\n this._onPointerEvent(\"pointerdown\", listener),\r\n this._onPointerEvent(\"pointermove\", listener),\r\n ]);\r\n });\r\n case \"globalpointerup\":\r\n return this._makeSharedEvent(\"pointerup\", () => {\r\n const mouseup = this._onPointerEvent(\"pointerup\", (events, target, native) => {\r\n $array.each(events, (event) => {\r\n this._dispatchGlobalMouseup(event, native);\r\n });\r\n this._lastPointerMoveEvent = { events, target, native };\r\n });\r\n const pointercancel = this._onPointerEvent(\"pointercancel\", (events, target, native) => {\r\n $array.each(events, (event) => {\r\n this._dispatchGlobalMouseup(event, native);\r\n });\r\n this._lastPointerMoveEvent = { events, target, native };\r\n });\r\n return new Disposer(() => {\r\n mouseup.dispose();\r\n pointercancel.dispose();\r\n });\r\n });\r\n case \"click\":\r\n case \"rightclick\":\r\n case \"middleclick\":\r\n case \"pointerdown\":\r\n /*\r\n return this._makeSharedEvent(\"pointerdown\", () => {\r\n return this._onPointerEvent(\"pointerdown\", (event, target, native) => {\r\n this._lastPointerMoveEvent = { event, target, native };\r\n this._dispatchMousedown(event)\r\n });\r\n });\r\n */\r\n case \"pointermove\":\r\n case \"pointerup\":\r\n return this._makeSharedEvent(\"pointerdown\", () => {\r\n //const throttler = new Throttler();\r\n const mousedown = this._onPointerEvent(\"pointerdown\", (events, target) => {\r\n $array.each(events, (ev) => {\r\n this._dispatchMousedown(ev, target);\r\n });\r\n });\r\n // TODO handle throttling properly for multitouch\r\n const mousemove = this._onPointerEvent(\"pointermove\", (ev) => {\r\n //throttler.throttle(() => {\r\n $array.each(ev, (ev) => {\r\n this._dispatchDragMove(ev);\r\n });\r\n //});\r\n });\r\n const mouseup = this._onPointerEvent(\"pointerup\", (ev, target) => {\r\n $array.each(ev, (ev) => {\r\n this._dispatchDragEnd(ev, target);\r\n });\r\n });\r\n const pointercancel = this._onPointerEvent(\"pointercancel\", (ev, target) => {\r\n $array.each(ev, (ev) => {\r\n this._dispatchDragEnd(ev, target);\r\n });\r\n });\r\n return new Disposer(() => {\r\n mousedown.dispose();\r\n mousemove.dispose();\r\n mouseup.dispose();\r\n pointercancel.dispose();\r\n });\r\n });\r\n case \"dblclick\":\r\n return this._makeSharedEvent(\"dblclick\", () => {\r\n return this._onPointerEvent(\"dblclick\", (ev, target) => {\r\n $array.each(ev, (ev) => {\r\n this._dispatchDoubleClick(ev, target);\r\n });\r\n });\r\n });\r\n case \"wheel\":\r\n return this._makeSharedEvent(\"wheel\", () => {\r\n return $utils.addEventListener(this.view, $utils.getRendererEvent(\"wheel\"), (event) => {\r\n this._dispatchWheel(event, $utils.getEventTarget(event));\r\n }, { passive: false });\r\n });\r\n }\r\n }\r\n _addEvent(object, key, callback, context) {\r\n let events = this._events[key];\r\n if (events === undefined) {\r\n events = this._events[key] = {\r\n disposer: this._initEvent(key),\r\n callbacks: [],\r\n dispatching: false,\r\n cleanup: false,\r\n };\r\n }\r\n const listener = { object, context, callback, disposed: false };\r\n events.callbacks.push(listener);\r\n return new Disposer(() => {\r\n listener.disposed = true;\r\n if (events.dispatching) {\r\n events.cleanup = true;\r\n }\r\n else {\r\n $array.removeFirst(events.callbacks, listener);\r\n if (events.callbacks.length === 0) {\r\n events.disposer.dispose();\r\n delete this._events[key];\r\n }\r\n }\r\n });\r\n }\r\n getCanvas(root, options) {\r\n // Make sure everything is rendered\r\n this.render(root);\r\n if (!options) {\r\n options = {};\r\n }\r\n let scale = this.resolution;\r\n let canvasWidth = Math.floor(this._calculatedWidth * this.resolution);\r\n let canvasHeight = Math.floor(this._calculatedHeight * this.resolution);\r\n // Check if we need to scale\r\n if (options.minWidth && (options.minWidth > canvasWidth)) {\r\n let minScale = options.minWidth / canvasWidth;\r\n if (minScale > scale) {\r\n scale = minScale * this.resolution;\r\n }\r\n }\r\n if (options.minHeight && (options.minHeight > canvasHeight)) {\r\n let minScale = options.minHeight / canvasHeight;\r\n if (minScale > scale) {\r\n scale = minScale * this.resolution;\r\n }\r\n }\r\n if (options.maxWidth && (options.maxWidth < canvasWidth)) {\r\n let maxScale = options.maxWidth / canvasWidth;\r\n if (maxScale < scale) {\r\n scale = maxScale * this.resolution;\r\n }\r\n }\r\n if (options.maxHeight && (options.maxHeight > canvasHeight)) {\r\n let maxScale = options.maxHeight / canvasHeight;\r\n if (maxScale < scale) {\r\n scale = maxScale * this.resolution;\r\n }\r\n }\r\n // Check if we need to compensate for pixel ratio\r\n if (options.maintainPixelRatio) {\r\n scale /= this.resolution;\r\n }\r\n // Init list canvases to remove from DOM after export\r\n const canvases = [];\r\n // Set up new canvas for export\r\n let forceRender = false;\r\n const canvas = document.createElement(\"canvas\");\r\n if (scale != this.resolution) {\r\n forceRender = true;\r\n canvasWidth = canvasWidth * scale / this.resolution;\r\n canvasHeight = canvasHeight * scale / this.resolution;\r\n }\r\n canvas.width = canvasWidth;\r\n canvas.height = canvasHeight;\r\n // Add to DOM so it inherits CSS\r\n canvas.style.position = \"fixed\";\r\n canvas.style.top = \"-10000px\";\r\n this.view.appendChild(canvas);\r\n canvases.push(canvas);\r\n // Context\r\n const context = canvas.getContext(\"2d\");\r\n let width = 0;\r\n let height = 0;\r\n let needRerender = false;\r\n $array.each(this.layers, (layer) => {\r\n if (layer && layer.visible) {\r\n if (layer.tainted || forceRender) {\r\n needRerender = true;\r\n layer.exportableView = layer.view;\r\n layer.exportableContext = layer.context;\r\n layer.view = document.createElement(\"canvas\");\r\n // Add to DOM so it inherits CSS\r\n layer.view.style.position = \"fixed\";\r\n layer.view.style.top = \"-10000px\";\r\n this.view.appendChild(layer.view);\r\n canvases.push(layer.view);\r\n let extraX = 0;\r\n let extraY = 0;\r\n if (layer.margin) {\r\n extraX += layer.margin.left || 0 + layer.margin.right || 0;\r\n extraY += layer.margin.top || 0 + layer.margin.bottom || 0;\r\n }\r\n layer.view.width = canvasWidth + extraX;\r\n layer.view.height = canvasHeight + extraY;\r\n layer.context = layer.view.getContext(\"2d\");\r\n layer.dirty = true;\r\n layer.scale = scale;\r\n }\r\n }\r\n });\r\n if (needRerender) {\r\n this._omitTainted = true;\r\n this.render(root);\r\n this._omitTainted = false;\r\n }\r\n $array.each(this.layers, (layer) => {\r\n if (layer && layer.visible) {\r\n // Layer is fine. Just plop it into our target canvas\r\n let x = 0;\r\n let y = 0;\r\n if (layer.margin) {\r\n x = -(layer.margin.left || 0) * this.resolution;\r\n y = -(layer.margin.top || 0) * this.resolution;\r\n }\r\n context.drawImage(layer.view, x, y);\r\n // Restore layer original canvas\r\n if (layer.exportableView) {\r\n layer.view = layer.exportableView;\r\n layer.exportableView = undefined;\r\n }\r\n if (layer.exportableContext) {\r\n layer.context = layer.exportableContext;\r\n layer.exportableContext = undefined;\r\n }\r\n if (width < layer.view.clientWidth) {\r\n width = layer.view.clientWidth;\r\n }\r\n if (height < layer.view.clientHeight) {\r\n height = layer.view.clientHeight;\r\n }\r\n layer.scale = undefined;\r\n }\r\n });\r\n canvas.style.width = width + \"px\";\r\n canvas.style.height = height + \"px\";\r\n $array.each(canvases, (canvas) => {\r\n canvas.style.position = \"\";\r\n canvas.style.top = \"\";\r\n this.view.removeChild(canvas);\r\n });\r\n return canvas;\r\n }\r\n}\r\nclass GhostLayer {\r\n constructor() {\r\n Object.defineProperty(this, \"view\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"context\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"margin\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n }\r\n });\r\n Object.defineProperty(this, \"_resolution\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 1\r\n });\r\n Object.defineProperty(this, \"_width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"imageArray\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.view = document.createElement(\"canvas\");\r\n this.context = this.view.getContext(\"2d\", { alpha: false, willReadFrequently: true });\r\n this.context.imageSmoothingEnabled = false;\r\n this.view.style.position = \"absolute\";\r\n this.view.style.top = \"0px\";\r\n this.view.style.left = \"0px\";\r\n }\r\n resize(canvasWidth, canvasHeight, domWidth, domHeight, resolution) {\r\n this._resolution = resolution;\r\n canvasWidth += (this.margin.left + this.margin.right);\r\n canvasHeight += (this.margin.top + this.margin.bottom);\r\n // TODO this should take into account calculateSize\r\n domWidth += (this.margin.left + this.margin.right);\r\n domHeight += (this.margin.top + this.margin.bottom);\r\n this.view.style.left = -this.margin.left + \"px\";\r\n this.view.style.top = -this.margin.top + \"px\";\r\n this._width = Math.floor(canvasWidth * resolution);\r\n this._height = Math.floor(canvasHeight * resolution);\r\n this.view.width = this._width;\r\n this.view.style.width = domWidth + \"px\";\r\n this.view.height = this._height;\r\n this.view.style.height = domHeight + \"px\";\r\n }\r\n getImageData(point, bbox) {\r\n return this.context.getImageData(\r\n // TODO should this round ?\r\n Math.round(((point.x - bbox.left) / bbox.width) * this._width), Math.round(((point.y - bbox.top) / bbox.height) * this._height), 1, 1);\r\n }\r\n getImageArray(point) {\r\n if (!this.imageArray) {\r\n this.imageArray = this.context.getImageData(0, 0, this._width, this._height).data;\r\n }\r\n const data = this.imageArray;\r\n const x = Math.round(point.x * this._resolution);\r\n const y = Math.round(point.y * this._resolution);\r\n const i = (y * this._width + x) * 4;\r\n return [data[i], data[i + 1], data[i + 2], data[i + 3]];\r\n }\r\n setMargin(layers) {\r\n this.margin.left = 0;\r\n this.margin.right = 0;\r\n this.margin.top = 0;\r\n this.margin.bottom = 0;\r\n $array.each(layers, (layer) => {\r\n if (layer.margin) {\r\n this.margin.left = Math.max(this.margin.left, layer.margin.left);\r\n this.margin.right = Math.max(this.margin.right, layer.margin.right);\r\n this.margin.top = Math.max(this.margin.top, layer.margin.top);\r\n this.margin.bottom = Math.max(this.margin.bottom, layer.margin.bottom);\r\n }\r\n });\r\n }\r\n clear() {\r\n this.context.save();\r\n this.context.fillStyle = '#000';\r\n this.context.fillRect(0, 0, this._width, this._height);\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport class CanvasLayer {\r\n constructor(view, context) {\r\n Object.defineProperty(this, \"view\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"context\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"tainted\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"margin\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"order\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"visible\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"scale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"dirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"exportableView\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"exportableContext\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_width\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_height\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n this.view = view;\r\n this.context = context;\r\n }\r\n resize(canvasWidth, canvasHeight, domWidth, domHeight, resolution) {\r\n // TODO should this take into account calculateSize ?\r\n if (this.width != null) {\r\n canvasWidth = this.width;\r\n domWidth = this.width;\r\n }\r\n // TODO should this take into account calculateSize ?\r\n if (this.height != null) {\r\n canvasHeight = this.height;\r\n domHeight = this.height;\r\n }\r\n if (this.margin) {\r\n canvasWidth += (this.margin.left + this.margin.right);\r\n canvasHeight += (this.margin.top + this.margin.bottom);\r\n // TODO this should take into account calculateSize\r\n domWidth += (this.margin.left + this.margin.right);\r\n domHeight += (this.margin.top + this.margin.bottom);\r\n this.view.style.left = -this.margin.left + \"px\";\r\n this.view.style.top = -this.margin.top + \"px\";\r\n }\r\n else {\r\n this.view.style.left = \"0px\";\r\n this.view.style.top = \"0px\";\r\n }\r\n this._width = Math.floor(canvasWidth * resolution);\r\n this._height = Math.floor(canvasHeight * resolution);\r\n this.view.width = this._width;\r\n this.view.style.width = domWidth + \"px\";\r\n this.view.height = this._height;\r\n this.view.style.height = domHeight + \"px\";\r\n }\r\n clear() {\r\n this.context.save();\r\n this.context.clearRect(0, 0, this._width, this._height);\r\n }\r\n}\r\n//# sourceMappingURL=CanvasRenderer.js.map","import { AnimationState } from \"./util/Animation\";\r\nimport { Container } from \"./render/Container\";\r\nimport { Text } from \"./render/Text\";\r\nimport { HorizontalLayout } from \"./render/HorizontalLayout\";\r\nimport { VerticalLayout } from \"./render/VerticalLayout\";\r\nimport { GridLayout } from \"./render/GridLayout\";\r\nimport { Disposer } from \"./util/Disposer\";\r\nimport { ResizeSensor } from \"./util/ResizeSensor\";\r\nimport { InterfaceColors } from \"./util/InterfaceColors\";\r\nimport { Graphics } from \"./render/Graphics\";\r\nimport { Rectangle } from \"./render/Rectangle\";\r\nimport { Tooltip } from \"./render/Tooltip\";\r\nimport { NumberFormatter } from \"./util/NumberFormatter\";\r\nimport { DateFormatter } from \"./util/DateFormatter\";\r\nimport { DurationFormatter } from \"./util/DurationFormatter\";\r\nimport { Language } from \"./util/Language\";\r\nimport { EventDispatcher } from \"./util/EventDispatcher\";\r\nimport { DefaultTheme } from \"../themes/DefaultTheme\";\r\nimport { CanvasRenderer } from \"./render/backend/CanvasRenderer\";\r\nimport { p100, percent } from \"./util/Percent\";\r\nimport { color } from \"./util/Color\";\r\nimport { populateString } from \"./util/PopulateString\";\r\nimport { registry } from \"./Registry\";\r\nimport * as $order from \"./util/Order\";\r\nimport * as $array from \"./util/Array\";\r\nimport * as $object from \"./util/Object\";\r\nimport * as $utils from \"./util/Utils\";\r\nimport * as $type from \"./util/Type\";\r\nimport en from \"../../locales/en\";\r\nfunction rAF(fps, callback) {\r\n if (fps == null) {\r\n requestAnimationFrame(callback);\r\n }\r\n else {\r\n setTimeout(() => {\r\n requestAnimationFrame(callback);\r\n }, 1000 / fps);\r\n }\r\n}\r\n// TODO implement Disposer\r\n/**\r\n * Root element of the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/#Root_element} for more info\r\n */\r\nexport class Root {\r\n constructor(id, settings = {}, isReal) {\r\n /**\r\n * A reference to original chart container (div element).\r\n */\r\n Object.defineProperty(this, \"dom\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_inner\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_settings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_isDirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_isDirtyParents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_isDirtyAnimation\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_dirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dirtyParents\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dirtyBounds\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_dirtyPositions\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n Object.defineProperty(this, \"_ticker\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"_tickers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_updateTick\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n /**\r\n * Root's event dispatcher.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/events/} for more info\r\n */\r\n Object.defineProperty(this, \"events\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new EventDispatcher()\r\n });\r\n /**\r\n * @ignore\r\n * @todo needs description\r\n */\r\n Object.defineProperty(this, \"animationTime\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: null\r\n });\r\n Object.defineProperty(this, \"_animations\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_renderer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_rootContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Main content container.\r\n */\r\n Object.defineProperty(this, \"container\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * A [[Container]] used to display tooltips in.\r\n */\r\n Object.defineProperty(this, \"tooltipContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipContainerSettings\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltip\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n // Locale-related\r\n /**\r\n * @ignore\r\n */\r\n Object.defineProperty(this, \"language\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Language.new(this, {})\r\n });\r\n /**\r\n * Locale used by the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/locales/}\r\n */\r\n Object.defineProperty(this, \"locale\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: en\r\n });\r\n // Date-time related\r\n /**\r\n * Use UTC when formatting date/time.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#utc-and-time-zones} for more info\r\n */\r\n Object.defineProperty(this, \"utc\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n /**\r\n * If set, will format date/time in specific time zone.\r\n *\r\n * The value should be named time zone, e.g.:\r\n * `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`.\r\n *\r\n * NOTE: Using time zone feature may noticeable affect performance of the\r\n * chart, especially with large data sets, since every single date will need\r\n * to be recalculated.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#time-zone} for more info\r\n * @since 5.1.0\r\n */\r\n Object.defineProperty(this, \"timezone\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * The maximum FPS that the Root will run at.\r\n *\r\n * If `undefined` it will run at the highest FPS.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Performance} for more info\r\n */\r\n Object.defineProperty(this, \"fps\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Number formatter.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/} for more info\r\n */\r\n Object.defineProperty(this, \"numberFormatter\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: NumberFormatter.new(this, {})\r\n });\r\n /**\r\n * Date/time formatter.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\r\n */\r\n Object.defineProperty(this, \"dateFormatter\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: DateFormatter.new(this, {})\r\n });\r\n /**\r\n * Duration formatter.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/} for more info\r\n */\r\n Object.defineProperty(this, \"durationFormatter\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: DurationFormatter.new(this, {})\r\n });\r\n // Accessibility\r\n /**\r\n * Global tab index for using for the whole chart\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\r\n */\r\n Object.defineProperty(this, \"tabindex\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n //@todo maybe make this better\r\n Object.defineProperty(this, \"_tabindexes\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_a11yD\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_focusElementDirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_focusElementContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_focusedSprite\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_isShift\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_keyboardDragPoint\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipElementContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_readerAlertElement\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_logo\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltipDiv\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Used for dynamically-created CSS and JavaScript with strict source policies.\r\n */\r\n Object.defineProperty(this, \"nonce\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Special color set to be used for various controls.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Interface_colors} for more info\r\n */\r\n Object.defineProperty(this, \"interfaceColors\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * An instance of vertical layout object that can be used to set `layout` setting\r\n * of a [[Container]].\r\n *\r\n * @default VerticalLayout.new()\r\n */\r\n Object.defineProperty(this, \"verticalLayout\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: VerticalLayout.new(this, {})\r\n });\r\n /**\r\n * An instance of horizontal layout object that can be used to set `layout` setting\r\n * of a [[Container]].\r\n *\r\n * @default HorizontalLayout.new()\r\n */\r\n Object.defineProperty(this, \"horizontalLayout\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: HorizontalLayout.new(this, {})\r\n });\r\n /**\r\n * An instance of grid layout object that can be used to set `layout` setting\r\n * of a [[Container]].\r\n *\r\n * @default VerticalLayout.new()\r\n */\r\n Object.defineProperty(this, \"gridLayout\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: GridLayout.new(this, {})\r\n });\r\n Object.defineProperty(this, \"_paused\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n /**\r\n * Indicates whether chart should resized automatically when parent container\r\n * width and/or height changes.\r\n *\r\n * If disabled (`autoResize = false`) you can make the chart resize manually\r\n * by calling root element's `resize()` method.\r\n */\r\n Object.defineProperty(this, \"autoResize\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: true\r\n });\r\n Object.defineProperty(this, \"_fontHash\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"\"\r\n });\r\n Object.defineProperty(this, \"_isDisposed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_disposers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_resizeSensorDisposer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_tooltips\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_htmlElementContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_htmlEnabledContainers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n if (!isReal) {\r\n throw new Error(\"You cannot use `new Class()`, instead use `Class.new()`\");\r\n }\r\n this._settings = settings;\r\n if (settings.accessible == false) {\r\n this._a11yD = true;\r\n }\r\n if (settings.useSafeResolution == null) {\r\n settings.useSafeResolution = true;\r\n }\r\n let resolution;\r\n if (settings.useSafeResolution) {\r\n resolution = $utils.getSafeResolution();\r\n }\r\n this._renderer = new CanvasRenderer(resolution);\r\n let dom;\r\n if (id instanceof HTMLElement) {\r\n dom = id;\r\n }\r\n else {\r\n dom = document.getElementById(id);\r\n }\r\n $array.each(registry.rootElements, (root) => {\r\n if (root.dom === dom) {\r\n throw new Error(\"You cannot have multiple Roots on the same DOM node\");\r\n }\r\n });\r\n this.interfaceColors = InterfaceColors.new(this, {});\r\n if (dom === null) {\r\n throw new Error(\"Could not find HTML element with id `\" + id + \"`\");\r\n }\r\n this.dom = dom;\r\n let inner = document.createElement(\"div\");\r\n inner.style.position = \"relative\";\r\n inner.style.width = \"100%\";\r\n inner.style.height = \"100%\";\r\n dom.appendChild(inner);\r\n const tooltipContainerBounds = settings.tooltipContainerBounds;\r\n if (tooltipContainerBounds) {\r\n this._tooltipContainerSettings = tooltipContainerBounds;\r\n }\r\n this._inner = inner;\r\n this._updateComputedStyles();\r\n registry.rootElements.push(this);\r\n }\r\n static new(id, settings) {\r\n const root = new Root(id, settings, true);\r\n root._init();\r\n return root;\r\n }\r\n moveDOM(id) {\r\n let dom;\r\n if (id instanceof HTMLElement) {\r\n dom = id;\r\n }\r\n else {\r\n dom = document.getElementById(id);\r\n }\r\n if (dom) {\r\n while (this.dom.childNodes.length > 0) {\r\n dom.appendChild(this.dom.childNodes[0]);\r\n }\r\n this.dom = dom;\r\n this._initResizeSensor();\r\n this.resize();\r\n }\r\n }\r\n _handleLogo() {\r\n if (this._logo) {\r\n const w = this.dom.offsetWidth;\r\n const h = this.dom.offsetHeight;\r\n if ((w <= 150) || (h <= 60)) {\r\n this._logo.hide();\r\n }\r\n else {\r\n this._logo.show();\r\n }\r\n }\r\n }\r\n _showBranding() {\r\n if (!this._logo) {\r\n const logo = this.tooltipContainer.children.push(Container.new(this, {\r\n interactive: true,\r\n interactiveChildren: false,\r\n position: \"absolute\",\r\n setStateOnChildren: true,\r\n paddingTop: 9,\r\n paddingRight: 9,\r\n paddingBottom: 9,\r\n paddingLeft: 9,\r\n scale: .6,\r\n y: percent(100),\r\n centerY: p100,\r\n tooltipText: \"Created using amCharts 5\",\r\n tooltipX: p100,\r\n cursorOverStyle: \"pointer\",\r\n background: Rectangle.new(this, {\r\n fill: color(0x474758),\r\n fillOpacity: 0,\r\n tooltipY: 5\r\n })\r\n }));\r\n const tooltip = Tooltip.new(this, {\r\n pointerOrientation: \"horizontal\",\r\n paddingTop: 4,\r\n paddingRight: 7,\r\n paddingBottom: 4,\r\n paddingLeft: 7\r\n });\r\n tooltip.label.setAll({\r\n fontSize: 12\r\n });\r\n tooltip.get(\"background\").setAll({\r\n fill: this.interfaceColors.get(\"background\"),\r\n stroke: this.interfaceColors.get(\"grid\"),\r\n strokeOpacity: 0.3\r\n });\r\n logo.set(\"tooltip\", tooltip);\r\n logo.events.on(\"click\", () => {\r\n window.open(\"https://www.amcharts.com/\", \"_blank\");\r\n });\r\n logo.states.create(\"hover\", {});\r\n const m = logo.children.push(Graphics.new(this, {\r\n stroke: color(0xcccccc),\r\n strokeWidth: 3,\r\n svgPath: \"M5 25 L13 25h13.6c3.4 0 6 0 10.3-4.3s5.2-12 8.6-12c3.4 0 4.3 8.6 7.7 8.6M83.4 25H79.8c-3.4 0-6 0-10.3-4.3s-5.2-12-8.6-12-4.3 8.6-7.7 8.6\"\r\n }));\r\n m.states.create(\"hover\", { stroke: color(0x3CABFF) });\r\n const a = logo.children.push(Graphics.new(this, {\r\n stroke: color(0x888888),\r\n strokeWidth: 3,\r\n svgPath: \"M83.4 25h-31C37 25 39.5 4.4 28.4 4.4S18.9 24.2 4.3 25H0\"\r\n }));\r\n a.states.create(\"hover\", { stroke: color(0x474758) });\r\n //logo.set(\"tooltip\", this._tooltip);\r\n //logo.setPrivate(\"tooltipTarget\", logo.get(\"background\"));\r\n this._logo = logo;\r\n this._handleLogo();\r\n }\r\n }\r\n _getRealSize() {\r\n return this.dom.getBoundingClientRect();\r\n }\r\n _getCalculatedSize(rect) {\r\n if (this._settings.calculateSize) {\r\n return this._settings.calculateSize(rect);\r\n }\r\n else {\r\n return {\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n }\r\n }\r\n _init() {\r\n const settings = this._settings;\r\n if (settings.accessible !== false) {\r\n if (settings.focusable) {\r\n this._inner.setAttribute(\"focusable\", \"true\");\r\n this._inner.setAttribute(\"tabindex\", this.tabindex + \"\");\r\n }\r\n if (settings.ariaLabel) {\r\n this._inner.setAttribute(\"aria-label\", settings.ariaLabel);\r\n }\r\n if (settings.role) {\r\n this._inner.setAttribute(\"role\", settings.role);\r\n }\r\n }\r\n const renderer = this._renderer;\r\n const rect = this._getRealSize();\r\n const size = this._getCalculatedSize(rect);\r\n const width = Math.floor(size.width);\r\n const height = Math.floor(size.height);\r\n const realWidth = Math.floor(rect.width);\r\n const realHeight = Math.floor(rect.height);\r\n const rootContainer = Container.new(this, {\r\n visible: true,\r\n width: width,\r\n height: height,\r\n });\r\n this._rootContainer = rootContainer;\r\n this._rootContainer._defaultThemes.push(DefaultTheme.new(this));\r\n const container = rootContainer.children.push(Container.new(this, { visible: true, width: p100, height: p100 }));\r\n this.container = container;\r\n renderer.resize(realWidth, realHeight, width, height);\r\n //@todo: better appendChild - refer\r\n this._inner.appendChild(renderer.view);\r\n // TODO: TMP TMP TMP for testing only, remove\r\n //renderer.debugGhostView = true;\r\n this._initResizeSensor();\r\n // HTML content holder\r\n const htmlElementContainer = document.createElement(\"div\");\r\n this._htmlElementContainer = htmlElementContainer;\r\n htmlElementContainer.className = \"am5-html-container\";\r\n htmlElementContainer.style.position = \"absolute\";\r\n htmlElementContainer.style.pointerEvents = \"none\";\r\n if (!this._tooltipContainerSettings) {\r\n htmlElementContainer.style.overflow = \"hidden\";\r\n }\r\n this._inner.appendChild(htmlElementContainer);\r\n if (this._a11yD !== true) {\r\n // Create element which is used to make announcements to screen reader\r\n const readerAlertElement = document.createElement(\"div\");\r\n readerAlertElement.className = \"am5-reader-container\";\r\n readerAlertElement.setAttribute(\"role\", \"alert\");\r\n // readerAlertElement.style.zIndex = \"-100000\";\r\n // readerAlertElement.style.opacity = \"0\";\r\n // readerAlertElement.style.top = \"0\";\r\n readerAlertElement.style.position = \"absolute\";\r\n readerAlertElement.style.width = \"1px\";\r\n readerAlertElement.style.height = \"1px\";\r\n readerAlertElement.style.overflow = \"hidden\";\r\n readerAlertElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\r\n this._readerAlertElement = readerAlertElement;\r\n this._inner.appendChild(this._readerAlertElement);\r\n const focusElementContainer = document.createElement(\"div\");\r\n focusElementContainer.className = \"am5-focus-container\";\r\n focusElementContainer.style.position = \"absolute\";\r\n focusElementContainer.style.pointerEvents = \"none\";\r\n focusElementContainer.style.top = \"0px\";\r\n focusElementContainer.style.left = \"0px\";\r\n focusElementContainer.style.overflow = \"hidden\";\r\n focusElementContainer.style.width = width + \"px\";\r\n focusElementContainer.style.height = height + \"px\";\r\n focusElementContainer.setAttribute(\"role\", \"graphics-document\");\r\n $utils.setInteractive(focusElementContainer, false);\r\n this._focusElementContainer = focusElementContainer;\r\n this._inner.appendChild(this._focusElementContainer);\r\n const tooltipElementContainer = document.createElement(\"div\");\r\n this._tooltipElementContainer = tooltipElementContainer;\r\n tooltipElementContainer.className = \"am5-tooltip-container\";\r\n this._inner.appendChild(tooltipElementContainer);\r\n // Add keyboard events for accessibility, e.g. simulating drag with arrow\r\n // keys and click with ENTER\r\n if ($utils.supports(\"keyboardevents\")) {\r\n this._disposers.push($utils.addEventListener(window, \"keydown\", (ev) => {\r\n const eventKey = $utils.getEventKey(ev);\r\n if (eventKey == \"Shift\") {\r\n this._isShift = true;\r\n }\r\n else if (eventKey == \"Tab\") {\r\n this._isShift = ev.shiftKey;\r\n }\r\n }));\r\n this._disposers.push($utils.addEventListener(window, \"keyup\", (ev) => {\r\n const eventKey = $utils.getEventKey(ev);\r\n if (eventKey == \"Shift\") {\r\n this._isShift = false;\r\n }\r\n }));\r\n this._disposers.push($utils.addEventListener(focusElementContainer, \"click\", () => {\r\n // Some screen readers convert ENTER (and some SPACE) press whil on\r\n // focused element to a \"click\" event, preventing actual \"keydown\"\r\n // event from firing. We're using this \"click\" event to still\r\n // generate internal click events.\r\n const focusedSprite = this._focusedSprite;\r\n if (focusedSprite) {\r\n const downEvent = renderer.getEvent(new MouseEvent(\"click\"));\r\n focusedSprite.events.dispatch(\"click\", {\r\n type: \"click\",\r\n originalEvent: downEvent.event,\r\n point: downEvent.point,\r\n simulated: true,\r\n target: focusedSprite\r\n });\r\n }\r\n }));\r\n this._disposers.push($utils.addEventListener(focusElementContainer, \"keydown\", (ev) => {\r\n const focusedSprite = this._focusedSprite;\r\n if (focusedSprite) {\r\n if (ev.key == \"Escape\") {\r\n // ESC pressed - lose current focus\r\n $utils.blur();\r\n this._focusedSprite = undefined;\r\n }\r\n let dragOffsetX = 0;\r\n let dragOffsetY = 0;\r\n // TODO: figure out if using bogus MouseEvent is fine, or it will\r\n // fail on some platforms\r\n const eventKey = $utils.getEventKey(ev);\r\n switch (eventKey) {\r\n case \"Enter\":\r\n case \" \":\r\n if (eventKey == \" \" && focusedSprite.get(\"role\") != \"checkbox\") {\r\n return;\r\n }\r\n ev.preventDefault();\r\n const downEvent = renderer.getEvent(new MouseEvent(\"mouse\"));\r\n focusedSprite.events.dispatch(\"click\", {\r\n type: \"click\",\r\n originalEvent: downEvent.event,\r\n point: downEvent.point,\r\n simulated: true,\r\n target: focusedSprite\r\n });\r\n return;\r\n case \"ArrowLeft\":\r\n dragOffsetX = -6;\r\n break;\r\n case \"ArrowRight\":\r\n dragOffsetX = 6;\r\n break;\r\n case \"ArrowUp\":\r\n dragOffsetY = -6;\r\n break;\r\n case \"ArrowDown\":\r\n dragOffsetY = 6;\r\n break;\r\n default:\r\n return;\r\n }\r\n if (dragOffsetX != 0 || dragOffsetY != 0) {\r\n ev.preventDefault();\r\n if (!focusedSprite.isDragging()) {\r\n // Start dragging\r\n this._keyboardDragPoint = {\r\n x: 0,\r\n y: 0\r\n };\r\n const downEvent = renderer.getEvent(new MouseEvent(\"mousedown\", {\r\n clientX: 0,\r\n clientY: 0\r\n }));\r\n if (focusedSprite.events.isEnabled(\"pointerdown\")) {\r\n focusedSprite.events.dispatch(\"pointerdown\", {\r\n type: \"pointerdown\",\r\n originalEvent: downEvent.event,\r\n point: downEvent.point,\r\n simulated: true,\r\n target: focusedSprite\r\n });\r\n }\r\n }\r\n else {\r\n // Move focus marker\r\n //this._positionFocusElement(focusedSprite);\r\n }\r\n // Move incrementally\r\n const dragPoint = this._keyboardDragPoint;\r\n dragPoint.x += dragOffsetX;\r\n dragPoint.y += dragOffsetY;\r\n const moveEvent = renderer.getEvent(new MouseEvent(\"mousemove\", {\r\n clientX: dragPoint.x,\r\n clientY: dragPoint.y\r\n }), false);\r\n if (focusedSprite.events.isEnabled(\"globalpointermove\")) {\r\n focusedSprite.events.dispatch(\"globalpointermove\", {\r\n type: \"globalpointermove\",\r\n originalEvent: moveEvent.event,\r\n point: moveEvent.point,\r\n simulated: true,\r\n target: focusedSprite\r\n });\r\n }\r\n }\r\n }\r\n }));\r\n this._disposers.push($utils.addEventListener(focusElementContainer, \"keyup\", (ev) => {\r\n if (this._focusedSprite) {\r\n const focusedSprite = this._focusedSprite;\r\n const eventKey = $utils.getEventKey(ev);\r\n switch (eventKey) {\r\n case \"ArrowLeft\":\r\n case \"ArrowRight\":\r\n case \"ArrowTop\":\r\n case \"ArrowDown\":\r\n if (focusedSprite.isDragging()) {\r\n // Simulate drag stop\r\n const dragPoint = this._keyboardDragPoint;\r\n const upEvent = renderer.getEvent(new MouseEvent(\"mouseup\", {\r\n clientX: dragPoint.x,\r\n clientY: dragPoint.y\r\n }));\r\n if (focusedSprite.events.isEnabled(\"globalpointerup\")) {\r\n focusedSprite.events.dispatch(\"globalpointerup\", {\r\n type: \"globalpointerup\",\r\n originalEvent: upEvent.event,\r\n point: upEvent.point,\r\n simulated: true,\r\n target: focusedSprite\r\n });\r\n }\r\n //this._positionFocusElement(focusedSprite);\r\n this._keyboardDragPoint = undefined;\r\n // @todo dispatch mouseup event instead of calling dragStop?\r\n // this._dispatchEvent(\"globalpointerup\", target, upEvent);\r\n return;\r\n }\r\n else if (focusedSprite.get(\"focusableGroup\")) {\r\n // Find next item in focusable group\r\n const group = focusedSprite.get(\"focusableGroup\");\r\n const items = this._tabindexes.filter((item) => {\r\n return item.get(\"focusableGroup\") == group && item.getPrivate(\"focusable\") !== false && item.isVisibleDeep() ? true : false;\r\n });\r\n let index = items.indexOf(focusedSprite);\r\n const lastIndex = items.length - 1;\r\n index += (eventKey == \"ArrowRight\" || eventKey == \"ArrowDown\") ? 1 : -1;\r\n if (index < 0) {\r\n index = lastIndex;\r\n }\r\n else if (index > lastIndex) {\r\n index = 0;\r\n }\r\n $utils.focus(items[index].getPrivate(\"focusElement\").dom);\r\n }\r\n break;\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n this._startTicker();\r\n this.setThemes([]);\r\n this._addTooltip();\r\n if (!this._hasLicense()) {\r\n this._showBranding();\r\n }\r\n }\r\n _initResizeSensor() {\r\n if (this._resizeSensorDisposer) {\r\n this._resizeSensorDisposer.dispose();\r\n }\r\n this._resizeSensorDisposer = new ResizeSensor(this.dom, () => {\r\n if (this.autoResize) {\r\n this.resize();\r\n }\r\n });\r\n this._disposers.push(this._resizeSensorDisposer);\r\n }\r\n /**\r\n * If automatic resizing of char is disabled (`root.autoResize = false`), it\r\n * can be resized manually by calling this method.\r\n */\r\n resize() {\r\n const rect = this._getRealSize();\r\n const size = this._getCalculatedSize(rect);\r\n const w = Math.floor(size.width);\r\n const h = Math.floor(size.height);\r\n if (w > 0 && h > 0) {\r\n const realWidth = Math.floor(rect.width);\r\n const realHeight = Math.floor(rect.height);\r\n const htmlElementContainer = this._htmlElementContainer;\r\n htmlElementContainer.style.width = w + \"px\";\r\n htmlElementContainer.style.height = h + \"px\";\r\n if (this._a11yD !== true) {\r\n const focusElementContainer = this._focusElementContainer;\r\n focusElementContainer.style.width = w + \"px\";\r\n focusElementContainer.style.height = h + \"px\";\r\n }\r\n this._renderer.resize(realWidth, realHeight, w, h);\r\n const rootContainer = this._rootContainer;\r\n rootContainer.setPrivate(\"width\", w);\r\n rootContainer.setPrivate(\"height\", h);\r\n this._render();\r\n this._handleLogo();\r\n }\r\n }\r\n _render() {\r\n this._renderer.render(this._rootContainer._display);\r\n if (this._focusElementDirty) {\r\n this._updateCurrentFocus();\r\n this._focusElementDirty = false;\r\n }\r\n }\r\n _runTickers(currentTime) {\r\n $array.each(this._tickers, (f) => {\r\n f(currentTime);\r\n });\r\n }\r\n _runAnimations(currentTime) {\r\n let running = 0;\r\n $array.keepIf(this._animations, (animation) => {\r\n const state = animation._runAnimation(currentTime);\r\n if (state === AnimationState.Stopped) {\r\n return false;\r\n }\r\n else if (state === AnimationState.Playing) {\r\n ++running;\r\n return true;\r\n }\r\n else {\r\n return true;\r\n }\r\n });\r\n this._isDirtyAnimation = false;\r\n return running === 0;\r\n }\r\n _runDirties() {\r\n //console.log(\"tick **************************************************************\");\r\n let allParents = {};\r\n while (this._isDirtyParents) {\r\n // This must be before calling _prepareChildren\r\n this._isDirtyParents = false;\r\n $object.keys(this._dirtyParents).forEach((key) => {\r\n const parent = this._dirtyParents[key];\r\n delete this._dirtyParents[key];\r\n if (!parent.isDisposed()) {\r\n allParents[parent.uid] = parent;\r\n parent._prepareChildren();\r\n }\r\n });\r\n }\r\n $object.keys(allParents).forEach((key) => {\r\n allParents[key]._updateChildren();\r\n });\r\n const objects = [];\r\n //\t\tconsole.log(\"_beforeChanged\")\r\n $object.keys(this._dirty).forEach((key) => {\r\n const entity = this._dirty[key];\r\n if (entity.isDisposed()) {\r\n delete this._dirty[entity.uid];\r\n }\r\n else {\r\n objects.push(entity);\r\n entity._beforeChanged();\r\n }\r\n });\r\n //\t\tconsole.log(\"_changed\")\r\n objects.forEach((entity) => {\r\n entity._changed();\r\n delete this._dirty[entity.uid];\r\n entity._clearDirty();\r\n });\r\n this._isDirty = false;\r\n const depths = {};\r\n const bounds = [];\r\n $object.keys(this._dirtyBounds).forEach((key) => {\r\n const entity = this._dirtyBounds[key];\r\n delete this._dirtyBounds[key];\r\n if (!entity.isDisposed()) {\r\n depths[entity.uid] = entity.depth();\r\n bounds.push(entity);\r\n }\r\n });\r\n this._positionHTMLElements();\r\n // High depth -> low depth\r\n bounds.sort((x, y) => {\r\n return $order.compare(depths[y.uid], depths[x.uid]);\r\n });\r\n //\t\tconsole.log(\"_updateBounds\")\r\n bounds.forEach((entity) => {\r\n entity._updateBounds();\r\n });\r\n //\t\tconsole.log(\"_updatePosition\")\r\n const dirtyPositions = this._dirtyPositions;\r\n $object.keys(dirtyPositions).forEach((key) => {\r\n const sprite = dirtyPositions[key];\r\n delete dirtyPositions[key];\r\n if (!sprite.isDisposed()) {\r\n sprite._updatePosition();\r\n }\r\n });\r\n //\t\tconsole.log(\"_afterChanged\")\r\n objects.forEach((entity) => {\r\n entity._afterChanged();\r\n });\r\n }\r\n _renderFrame(currentTime) {\r\n if (this._updateTick) {\r\n if (this.events.isEnabled(\"framestarted\")) {\r\n this.events.dispatch(\"framestarted\", {\r\n type: \"framestarted\",\r\n target: this,\r\n timestamp: currentTime,\r\n });\r\n }\r\n this._checkComputedStyles();\r\n this._runTickers(currentTime);\r\n const animationDone = this._runAnimations(currentTime);\r\n this._runDirties();\r\n this._render();\r\n this._renderer.resetImageArray();\r\n this._positionHTMLElements();\r\n if (this.events.isEnabled(\"frameended\")) {\r\n this.events.dispatch(\"frameended\", {\r\n type: \"frameended\",\r\n target: this,\r\n timestamp: currentTime,\r\n });\r\n }\r\n return this._tickers.length === 0 &&\r\n animationDone &&\r\n !this._isDirtyAnimation &&\r\n !this._isDirty;\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n _runTicker(currentTime, now) {\r\n if (!this.isDisposed()) {\r\n this.animationTime = currentTime;\r\n const done = this._renderFrame(currentTime);\r\n // No more work to do\r\n if (done) {\r\n this._ticker = null;\r\n this.animationTime = null;\r\n }\r\n else {\r\n if (!this._paused) {\r\n if (now) {\r\n this._ticker;\r\n }\r\n else {\r\n rAF(this.fps, this._ticker);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _runTickerNow(timeout = 10000) {\r\n if (!this.isDisposed()) {\r\n const endTime = performance.now() + timeout;\r\n for (;;) {\r\n const currentTime = performance.now();\r\n if (currentTime >= endTime) {\r\n this.animationTime = null;\r\n break;\r\n }\r\n this.animationTime = currentTime;\r\n const done = this._renderFrame(currentTime);\r\n if (done) {\r\n this.animationTime = null;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n _startTicker() {\r\n if (this._ticker === null) {\r\n this.animationTime = null;\r\n this._ticker = (currentTime) => {\r\n this._runTicker(currentTime);\r\n };\r\n rAF(this.fps, this._ticker);\r\n }\r\n }\r\n /**\r\n * Returns whether the root is updating or not.\r\n */\r\n get updateTick() {\r\n return this._updateTick;\r\n }\r\n /**\r\n * Enables or disables the root updating.\r\n */\r\n set updateTick(value) {\r\n this._updateTick = value;\r\n if (value) {\r\n this._startTicker();\r\n }\r\n }\r\n _addDirtyEntity(entity) {\r\n this._isDirty = true;\r\n if (this._dirty[entity.uid] === undefined) {\r\n this._dirty[entity.uid] = entity;\r\n }\r\n this._startTicker();\r\n }\r\n _addDirtyParent(parent) {\r\n this._isDirty = true;\r\n this._isDirtyParents = true;\r\n if (this._dirtyParents[parent.uid] === undefined) {\r\n this._dirtyParents[parent.uid] = parent;\r\n }\r\n this._startTicker();\r\n }\r\n _addDirtyBounds(entity) {\r\n this._isDirty = true;\r\n if (this._dirtyBounds[entity.uid] === undefined) {\r\n this._dirtyBounds[entity.uid] = entity;\r\n }\r\n this._startTicker();\r\n }\r\n _addDirtyPosition(sprite) {\r\n this._isDirty = true;\r\n if (this._dirtyPositions[sprite.uid] === undefined) {\r\n this._dirtyPositions[sprite.uid] = sprite;\r\n }\r\n this._startTicker();\r\n }\r\n _addAnimation(animation) {\r\n this._isDirtyAnimation = true;\r\n // TODO use numeric id instead\r\n if (this._animations.indexOf(animation) === -1) {\r\n this._animations.push(animation);\r\n }\r\n this._startTicker();\r\n }\r\n _markDirty() {\r\n this._isDirty = true;\r\n }\r\n _markDirtyRedraw() {\r\n this.events.once(\"frameended\", () => {\r\n this._isDirty = true;\r\n this._startTicker();\r\n });\r\n }\r\n eachFrame(f) {\r\n this._tickers.push(f);\r\n this._startTicker();\r\n return new Disposer(() => {\r\n $array.removeFirst(this._tickers, f);\r\n });\r\n }\r\n markDirtyGlobal(container) {\r\n if (!container) {\r\n container = this.container;\r\n }\r\n container.walkChildren((child) => {\r\n if (child instanceof Container) {\r\n this.markDirtyGlobal(child);\r\n }\r\n child.markDirty();\r\n child.markDirtyBounds();\r\n });\r\n }\r\n /**\r\n * Returns width of the target container, in pixels.\r\n *\r\n * @return Width\r\n */\r\n width() {\r\n // TODO make this more efficient, maybe just return the renderer's width ?\r\n return Math.floor(this._getCalculatedSize(this._getRealSize()).width);\r\n }\r\n /**\r\n * Returns height of the target container, in pixels.\r\n *\r\n * @return Height\r\n */\r\n height() {\r\n // TODO make this more efficient, maybe just return the renderer's height ?\r\n return Math.floor(this._getCalculatedSize(this._getRealSize()).height);\r\n }\r\n /**\r\n * Disposes root and all the content in it.\r\n */\r\n dispose() {\r\n if (!this._isDisposed) {\r\n this._isDisposed = true;\r\n this._rootContainer.dispose();\r\n this._renderer.dispose();\r\n this.horizontalLayout.dispose();\r\n this.verticalLayout.dispose();\r\n this.interfaceColors.dispose();\r\n $array.each(this._disposers, (x) => {\r\n x.dispose();\r\n });\r\n if (this._inner) {\r\n $utils.removeElement(this._inner);\r\n }\r\n $array.remove(registry.rootElements, this);\r\n }\r\n }\r\n /**\r\n * Returns `true` if root element is disposed.\r\n *\r\n * @return Disposed?\r\n */\r\n isDisposed() {\r\n return this._isDisposed;\r\n }\r\n /**\r\n * Triggers screen reader read out a message.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/accessibility/} for more info\r\n * @param text Alert text\r\n */\r\n readerAlert(text) {\r\n if (this._a11yD !== true) {\r\n this._readerAlertElement.innerHTML = $utils.stripTags(text);\r\n }\r\n }\r\n /**\r\n * Sets themes to be used for the chart.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/themes/} for more info\r\n * @param themes A list of themes\r\n */\r\n setThemes(themes) {\r\n this._rootContainer.set(\"themes\", themes);\r\n // otherwise new themes are not applied\r\n const tooltipContainer = this.tooltipContainer;\r\n if (tooltipContainer) {\r\n tooltipContainer._applyThemes();\r\n }\r\n // @todo review this\r\n const interfaceColors = this.interfaceColors;\r\n if (interfaceColors) {\r\n interfaceColors._applyThemes();\r\n }\r\n }\r\n _addTooltip() {\r\n if (!this.tooltipContainer) {\r\n const tooltipContainerSettings = this._tooltipContainerSettings;\r\n const tooltipContainer = this._rootContainer.children.push(Container.new(this, {\r\n position: \"absolute\",\r\n isMeasured: false,\r\n width: p100,\r\n height: p100,\r\n layer: tooltipContainerSettings ? 35 : 30,\r\n layerMargin: tooltipContainerSettings ? tooltipContainerSettings : undefined\r\n }));\r\n this.tooltipContainer = tooltipContainer;\r\n const tooltip = Tooltip.new(this, {});\r\n this.container.set(\"tooltip\", tooltip);\r\n tooltip.hide(0);\r\n this._tooltip = tooltip;\r\n }\r\n }\r\n /**\r\n * Accesibility\r\n */\r\n _registerTabindexOrder(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n if (target.get(\"focusable\")) {\r\n $array.pushOne(this._tabindexes, target);\r\n }\r\n else {\r\n $array.remove(this._tabindexes, target);\r\n }\r\n this._invalidateTabindexes();\r\n }\r\n _unregisterTabindexOrder(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n $array.remove(this._tabindexes, target);\r\n this._invalidateTabindexes();\r\n }\r\n _invalidateTabindexes() {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n this._tabindexes.sort((a, b) => {\r\n const aindex = a.get(\"tabindexOrder\", 0);\r\n const bindex = b.get(\"tabindexOrder\", 0);\r\n if (aindex == bindex) {\r\n return 0;\r\n }\r\n else if (aindex > bindex) {\r\n return 1;\r\n }\r\n else {\r\n return -1;\r\n }\r\n });\r\n const groups = [];\r\n $array.each(this._tabindexes, (item, index) => {\r\n if (!item.getPrivate(\"focusElement\")) {\r\n this._makeFocusElement(index, item);\r\n }\r\n else {\r\n this._moveFocusElement(index, item);\r\n }\r\n const group = item.get(\"focusableGroup\");\r\n if (group && item.getPrivate(\"focusable\") !== false) {\r\n if (groups.indexOf(group) !== -1) {\r\n // Non-first element in the group, make it not directly focusable\r\n item.getPrivate(\"focusElement\").dom.setAttribute(\"tabindex\", \"-1\");\r\n }\r\n else {\r\n groups.push(group);\r\n }\r\n }\r\n });\r\n }\r\n _updateCurrentFocus() {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n if (this._focusedSprite) {\r\n this._decorateFocusElement(this._focusedSprite);\r\n this._positionFocusElement(this._focusedSprite);\r\n }\r\n }\r\n _decorateFocusElement(target, focusElement) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n // Decorate with proper accessibility attributes\r\n if (!focusElement) {\r\n focusElement = target.getPrivate(\"focusElement\").dom;\r\n }\r\n if (!focusElement) {\r\n return;\r\n }\r\n const role = target.get(\"role\");\r\n if (role) {\r\n focusElement.setAttribute(\"role\", role);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"role\");\r\n }\r\n const ariaLabel = target.get(\"ariaLabel\");\r\n if (ariaLabel) {\r\n const label = populateString(target, ariaLabel);\r\n focusElement.setAttribute(\"aria-label\", label);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-label\");\r\n }\r\n const ariaLive = target.get(\"ariaLive\");\r\n if (ariaLive) {\r\n focusElement.setAttribute(\"aria-live\", ariaLive);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-live\");\r\n }\r\n const ariaChecked = target.get(\"ariaChecked\");\r\n if (ariaChecked != null && role && [\"checkbox\", \"option\", \"radio\", \"menuitemcheckbox\", \"menuitemradio\", \"treeitem\"].indexOf(role) !== -1) {\r\n focusElement.setAttribute(\"aria-checked\", ariaChecked ? \"true\" : \"false\");\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-checked\");\r\n }\r\n const ariaCurrent = target.get(\"ariaCurrent\");\r\n if (ariaCurrent != null) {\r\n focusElement.setAttribute(\"aria-current\", ariaCurrent);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-current\");\r\n }\r\n const ariaSelected = target.get(\"ariaSelected\");\r\n if (ariaSelected != null && role && [\"gridcell\", \"option\", \"row\", \"tab\", \"columnheader\", \"rowheader\", \"treeitem\"].indexOf(role) !== -1) {\r\n focusElement.setAttribute(\"aria-selected\", ariaSelected ? \"true\" : \"false\");\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-selected\");\r\n }\r\n if (target.get(\"ariaHidden\")) {\r\n focusElement.setAttribute(\"aria-hidden\", \"true\");\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-hidden\");\r\n }\r\n const ariaOrientation = target.get(\"ariaOrientation\");\r\n if (ariaOrientation) {\r\n focusElement.setAttribute(\"aria-orientation\", ariaOrientation);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-orientation\");\r\n }\r\n const ariaValueNow = target.get(\"ariaValueNow\");\r\n if (ariaValueNow) {\r\n focusElement.setAttribute(\"aria-valuenow\", ariaValueNow);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-valuenow\");\r\n }\r\n const ariaValueMin = target.get(\"ariaValueMin\");\r\n if (ariaValueMin) {\r\n focusElement.setAttribute(\"aria-valuemin\", ariaValueMin);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-valuemin\");\r\n }\r\n const ariaValueMax = target.get(\"ariaValueMax\");\r\n if (ariaValueMax) {\r\n focusElement.setAttribute(\"aria-valuemax\", ariaValueMax);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-valuemax\");\r\n }\r\n const ariaValueText = target.get(\"ariaValueText\");\r\n if (ariaValueText) {\r\n focusElement.setAttribute(\"aria-valuetext\", ariaValueText);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-valuetext\");\r\n }\r\n const ariaControls = target.get(\"ariaControls\");\r\n if (ariaControls) {\r\n focusElement.setAttribute(\"aria-controls\", ariaControls);\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-controls\");\r\n }\r\n if (target.get(\"visible\") && target.get(\"opacity\") !== 0 && target.get(\"role\") != \"tooltip\" && !target.isHidden() && target.getPrivate(\"focusable\") !== false) {\r\n if (focusElement.getAttribute(\"tabindex\") != \"-1\") {\r\n focusElement.setAttribute(\"tabindex\", \"\" + this.tabindex);\r\n }\r\n focusElement.removeAttribute(\"aria-hidden\");\r\n }\r\n else {\r\n focusElement.removeAttribute(\"tabindex\");\r\n focusElement.setAttribute(\"aria-hidden\", \"true\");\r\n }\r\n }\r\n _makeFocusElement(index, target) {\r\n if (target.getPrivate(\"focusElement\") || this._a11yD == true) {\r\n return;\r\n }\r\n // Init\r\n const focusElement = document.createElement(\"div\");\r\n if (target.get(\"role\") != \"tooltip\") {\r\n focusElement.tabIndex = this.tabindex;\r\n }\r\n focusElement.style.position = \"absolute\";\r\n $utils.setInteractive(focusElement, false);\r\n const disposers = [];\r\n target.setPrivate(\"focusElement\", {\r\n dom: focusElement,\r\n disposers,\r\n });\r\n this._decorateFocusElement(target);\r\n disposers.push($utils.addEventListener(focusElement, \"focus\", (ev) => {\r\n this._handleFocus(ev);\r\n }));\r\n disposers.push($utils.addEventListener(focusElement, \"blur\", (ev) => {\r\n this._handleBlur(ev);\r\n }));\r\n this._moveFocusElement(index, target);\r\n }\r\n _removeFocusElement(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n $array.remove(this._tabindexes, target);\r\n const focusElement = target.getPrivate(\"focusElement\");\r\n if (focusElement) {\r\n const container = this._focusElementContainer;\r\n container.removeChild(focusElement.dom);\r\n $array.each(focusElement.disposers, (x) => {\r\n x.dispose();\r\n });\r\n }\r\n }\r\n _hideFocusElement(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n const focusElement = target.getPrivate(\"focusElement\");\r\n focusElement.dom.style.display = \"none\";\r\n }\r\n _moveFocusElement(index, target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n // Get container\r\n const container = this._focusElementContainer;\r\n const focusElement = target.getPrivate(\"focusElement\").dom;\r\n if (focusElement === this._focusElementContainer.children[index]) {\r\n // Nothing to do\r\n return;\r\n }\r\n const next = this._focusElementContainer.children[index + 1];\r\n if (next) {\r\n container.insertBefore(focusElement, next);\r\n }\r\n else {\r\n container.append(focusElement);\r\n }\r\n }\r\n _positionFocusElement(target) {\r\n if (this._a11yD == true || target == undefined) {\r\n return;\r\n }\r\n const bounds = target.globalBounds();\r\n let width = bounds.right == bounds.left ? target.width() : bounds.right - bounds.left;\r\n let height = bounds.top == bounds.bottom ? target.height() : bounds.bottom - bounds.top;\r\n const padding = this._settings.focusPadding !== undefined ? this._settings.focusPadding : 2;\r\n let x = bounds.left - padding;\r\n let y = bounds.top - padding;\r\n if (width < 0) {\r\n x += width;\r\n width = Math.abs(width);\r\n }\r\n if (height < 0) {\r\n y += height;\r\n height = Math.abs(height);\r\n }\r\n const focusElement = target.getPrivate(\"focusElement\").dom;\r\n focusElement.style.top = y + \"px\";\r\n focusElement.style.left = x + \"px\";\r\n focusElement.style.width = (width + padding * 2) + \"px\";\r\n focusElement.style.height = (height + padding * 2) + \"px\";\r\n }\r\n _getSpriteByFocusElement(target) {\r\n let found;\r\n $array.eachContinue(this._tabindexes, (item, _index) => {\r\n if (item.getPrivate(\"focusElement\").dom === target) {\r\n found = item;\r\n return false;\r\n }\r\n return true;\r\n });\r\n return found;\r\n }\r\n _handleFocus(ev) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n // Get element\r\n //const focused = this._tabindexes[index];\r\n const focused = this._getSpriteByFocusElement(ev.target);\r\n if (!focused) {\r\n return;\r\n }\r\n // Jump over hidden elements\r\n if (!focused.isVisibleDeep()) {\r\n this._focusNext(ev.target, this._isShift ? -1 : 1);\r\n return;\r\n }\r\n // Size and position\r\n this._positionFocusElement(focused);\r\n //this._decorateFocusElement(focused);\r\n this._focusedSprite = focused;\r\n if (focused.events.isEnabled(\"focus\")) {\r\n focused.events.dispatch(\"focus\", {\r\n type: \"focus\",\r\n originalEvent: ev,\r\n target: focused\r\n });\r\n }\r\n }\r\n _focusNext(el, direction) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n const focusableElements = Array.from(document.querySelectorAll([\r\n 'a[href]',\r\n 'area[href]',\r\n 'button:not([disabled])',\r\n 'details',\r\n 'input:not([disabled])',\r\n 'iframe:not([disabled])',\r\n 'select:not([disabled])',\r\n 'textarea:not([disabled])',\r\n '[contentEditable=\"\"]',\r\n '[contentEditable=\"true\"]',\r\n '[contentEditable=\"TRUE\"]',\r\n '[tabindex]:not([tabindex^=\"-\"])',\r\n //':not([disabled])'\r\n ].join(',')));\r\n let index = focusableElements.indexOf(el) + direction;\r\n if (index < 0) {\r\n index = focusableElements.length - 1;\r\n }\r\n else if (index >= focusableElements.length) {\r\n index = 0;\r\n }\r\n focusableElements[index].focus();\r\n }\r\n _handleBlur(ev) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n const focused = this._focusedSprite;\r\n if (focused && !focused.isDisposed() && focused.events.isEnabled(\"blur\")) {\r\n focused.events.dispatch(\"blur\", {\r\n type: \"blur\",\r\n originalEvent: ev,\r\n target: focused\r\n });\r\n }\r\n this._focusedSprite = undefined;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateTooltip(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n const text = $utils.stripTags(target._getText());\r\n let tooltipElement = target.getPrivate(\"tooltipElement\");\r\n if (target.get(\"role\") == \"tooltip\" && text != \"\") {\r\n if (!tooltipElement) {\r\n tooltipElement = this._makeTooltipElement(target);\r\n }\r\n if (tooltipElement.innerHTML != text) {\r\n tooltipElement.innerHTML = text;\r\n }\r\n tooltipElement.setAttribute(\"aria-hidden\", target.isVisibleDeep() ? \"false\" : \"true\");\r\n }\r\n else if (tooltipElement) {\r\n tooltipElement.remove();\r\n target.removePrivate(\"tooltipElement\");\r\n }\r\n }\r\n _makeTooltipElement(target) {\r\n const container = this._tooltipElementContainer;\r\n const tooltipElement = document.createElement(\"div\");\r\n tooltipElement.style.position = \"absolute\";\r\n tooltipElement.style.width = \"1px\";\r\n tooltipElement.style.height = \"1px\";\r\n tooltipElement.style.overflow = \"hidden\";\r\n tooltipElement.style.clip = \"rect(1px, 1px, 1px, 1px)\";\r\n $utils.setInteractive(tooltipElement, false);\r\n this._decorateFocusElement(target, tooltipElement);\r\n container.append(tooltipElement);\r\n target.setPrivate(\"tooltipElement\", tooltipElement);\r\n return tooltipElement;\r\n }\r\n _removeTooltipElement(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n const tooltipElement = target.getPrivate(\"tooltipElement\");\r\n if (tooltipElement) {\r\n const parent = tooltipElement.parentElement;\r\n if (parent) {\r\n parent.removeChild(tooltipElement);\r\n }\r\n }\r\n }\r\n _invalidateAccessibility(target) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n this._focusElementDirty = true;\r\n const focusElement = target.getPrivate(\"focusElement\");\r\n if (target.get(\"focusable\")) {\r\n if (focusElement) {\r\n this._decorateFocusElement(target);\r\n this._positionFocusElement(target);\r\n }\r\n // else {\r\n // \tthis._renderer._makeFocusElement(0, this);\r\n // }\r\n }\r\n else if (focusElement) {\r\n this._removeFocusElement(target);\r\n }\r\n //this.updateCurrentFocus();\r\n }\r\n /**\r\n * Returns `true` if `target` is currently focused.\r\n *\r\n * @param target Target\r\n * @return Focused?\r\n */\r\n focused(target) {\r\n return this._focusedSprite === target;\r\n }\r\n /**\r\n * Converts document coordinates to coordinates withing root element.\r\n *\r\n * @param point Document point\r\n * @return Root point\r\n */\r\n documentPointToRoot(point) {\r\n const rect = this._getRealSize();\r\n const size = this._getCalculatedSize(rect);\r\n const scaleWidth = size.width / rect.width;\r\n const scaleHeight = size.height / rect.height;\r\n return {\r\n x: (point.x - rect.left) * scaleWidth,\r\n y: (point.y - rect.top) * scaleHeight,\r\n };\r\n }\r\n /**\r\n * Converts root coordinates to document\r\n *\r\n * @param point Document point\r\n * @return Root point\r\n */\r\n rootPointToDocument(point) {\r\n const rect = this._getRealSize();\r\n const size = this._getCalculatedSize(rect);\r\n const scaleWidth = size.width / rect.width;\r\n const scaleHeight = size.height / rect.height;\r\n return {\r\n x: (point.x / scaleWidth) + rect.left,\r\n y: (point.y / scaleHeight) + rect.top\r\n };\r\n }\r\n /**\r\n * @ignore\r\n */\r\n addDisposer(disposer) {\r\n this._disposers.push(disposer);\r\n return disposer;\r\n }\r\n _updateComputedStyles() {\r\n const styles = window.getComputedStyle(this.dom);\r\n let fontHash = \"\";\r\n $object.each(styles, (key, val) => {\r\n if ($type.isString(key) && key.match(/^font/)) {\r\n fontHash += val;\r\n }\r\n });\r\n const changed = fontHash != this._fontHash;\r\n if (changed) {\r\n this._fontHash = fontHash;\r\n }\r\n return changed;\r\n }\r\n _checkComputedStyles() {\r\n if (this._updateComputedStyles()) {\r\n this._invalidateLabelBounds(this.container);\r\n }\r\n }\r\n _invalidateLabelBounds(target) {\r\n if (target instanceof Container) {\r\n target.children.each((child) => {\r\n this._invalidateLabelBounds(child);\r\n });\r\n }\r\n else if (target instanceof Text) {\r\n target.markDirtyBounds();\r\n }\r\n }\r\n /**\r\n * To all the clever heads out there. Yes, we did not make any attempts to\r\n * scramble this.\r\n *\r\n * This is a part of a tool meant for our users to manage their commercial\r\n * licenses for removal of amCharts branding from charts.\r\n *\r\n * The only legit way to do so is to purchase a commercial license for amCharts:\r\n * https://www.amcharts.com/online-store/\r\n *\r\n * Removing or altering this code, or disabling amCharts branding in any other\r\n * way is against the license and thus illegal.\r\n */\r\n _hasLicense() {\r\n for (let i = 0; i < registry.licenses.length; i++) {\r\n if (registry.licenses[i].match(/^AM5C.{5,}/i)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n _licenseApplied() {\r\n if (this._logo) {\r\n this._logo.set(\"forceHidden\", true);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n get debugGhostView() {\r\n return this._renderer.debugGhostView;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n set debugGhostView(value) {\r\n this._renderer.debugGhostView = value;\r\n }\r\n /**\r\n * Set this to `true` if you need chart to require first a tap onto it before\r\n * touch gesture related functionality like zoom/pan is turned on.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\r\n * @default false\r\n * @since 5.2.9\r\n * @param value Needs a tap to activate touch functions\r\n */\r\n set tapToActivate(value) {\r\n this._renderer.tapToActivate = value;\r\n }\r\n /**\r\n * @return Needs a tap to activate touch functions\r\n */\r\n get tapToActivate() {\r\n return this._renderer.tapToActivate;\r\n }\r\n /**\r\n * If `tapToActivate` is set to `true`, this setting will determine number\r\n * of milliseconds the chart will stay \"active\", before releasing the\r\n * controls back to the page.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options} for more info\r\n * @default 3000\r\n * @since 5.2.9\r\n * @param value Timeout\r\n */\r\n set tapToActivateTimeout(value) {\r\n this._renderer.tapToActivateTimeout = value;\r\n }\r\n /**\r\n * @return Timeout\r\n */\r\n get tapToActivateTimeout() {\r\n return this._renderer.tapToActivateTimeout;\r\n }\r\n _makeHTMLElement(target) {\r\n // Get container\r\n const container = this._htmlElementContainer;\r\n // Init\r\n const htmlElement = document.createElement(\"div\");\r\n target.setPrivate(\"htmlElement\", htmlElement);\r\n //htmlElement.tabIndex = this.tabindex;\r\n htmlElement.style.position = \"absolute\";\r\n htmlElement.style.overflow = \"auto\";\r\n htmlElement.style.boxSizing = \"border-box\";\r\n $utils.setInteractive(htmlElement, target.get(\"interactive\", false));\r\n // Translate events\r\n if (target.events.isEnabled(\"click\")) {\r\n $utils.setInteractive(htmlElement, true);\r\n this._disposers.push($utils.addEventListener(htmlElement, \"click\", (ev) => {\r\n const downEvent = this._renderer.getEvent(ev);\r\n target.events.dispatch(\"click\", {\r\n type: \"click\",\r\n originalEvent: downEvent.event,\r\n point: downEvent.point,\r\n simulated: false,\r\n target: target\r\n });\r\n }));\r\n }\r\n this._positionHTMLElement(target);\r\n container.append(htmlElement);\r\n $array.pushOne(this._htmlEnabledContainers, target);\r\n return htmlElement;\r\n }\r\n _positionHTMLElements() {\r\n $array.each(this._htmlEnabledContainers, (target) => {\r\n this._positionHTMLElement(target);\r\n });\r\n }\r\n _positionHTMLElement(target) {\r\n const htmlElement = target.getPrivate(\"htmlElement\");\r\n if (htmlElement) {\r\n // Translate settings\r\n const visualSettings = [\"paddingTop\", \"paddingRight\", \"paddingBottom\", \"paddingLeft\", \"minWidth\", \"minHeight\", \"maxWidth\", \"maxHeight\"];\r\n $array.each(visualSettings, (setting) => {\r\n const value = target.get(setting);\r\n if (value) {\r\n htmlElement.style[setting] = value + \"px\";\r\n }\r\n else {\r\n htmlElement.style[setting] = \"\";\r\n }\r\n });\r\n // Init and reset scale / rotation\r\n const scale = target.compositeScale() || 1;\r\n const rotation = target.compositeRotation() || 0;\r\n htmlElement.style.transform = \"\";\r\n htmlElement.style.transformOrigin = \"\";\r\n // Deal with opacity\r\n const opacity = target.compositeOpacity();\r\n setTimeout(() => {\r\n htmlElement.style.opacity = opacity + \"\";\r\n }, 10);\r\n const visible = target.isVisibleDeep();\r\n if (visible) {\r\n htmlElement.style.display = \"block\";\r\n }\r\n // Deal with position\r\n const bounds = target.globalBounds();\r\n htmlElement.style.top = (bounds.top) + \"px\";\r\n htmlElement.style.left = (bounds.left) + \"px\";\r\n // Use width/height if those are set\r\n const width = target.get(\"width\");\r\n const height = target.get(\"height\");\r\n let w = 0;\r\n let h = 0;\r\n if (width) {\r\n w = target.width();\r\n }\r\n if (height) {\r\n h = target.height();\r\n }\r\n if (!width || !height) {\r\n htmlElement.style.position = \"fixed\";\r\n htmlElement.style.width = \"\";\r\n htmlElement.style.height = \"\";\r\n const bbox = htmlElement.getBoundingClientRect();\r\n htmlElement.style.position = \"absolute\";\r\n if (!width)\r\n w = bbox.width;\r\n if (!height)\r\n h = bbox.height;\r\n target._adjustedLocalBounds = { left: 0, right: 0, top: 0, bottom: 0 };\r\n target.setPrivate(\"minWidth\", w / scale);\r\n target.setPrivate(\"minHeight\", h / scale);\r\n }\r\n else {\r\n target.removePrivate(\"minWidth\");\r\n target.removePrivate(\"minHeight\");\r\n }\r\n if (w > 0) {\r\n htmlElement.style.minWidth = (w) + \"px\";\r\n }\r\n if (h > 0) {\r\n htmlElement.style.minHeight = (h) + \"px\";\r\n }\r\n // Hide or show\r\n if (!visible || opacity == 0) {\r\n htmlElement.style.display = \"none\";\r\n }\r\n // Deal with scale\r\n if (scale != 1) {\r\n htmlElement.style.transform += \"scale(\" + scale + \")\";\r\n }\r\n if (rotation != 0) {\r\n htmlElement.style.transform += \" rotate(\" + rotation + \"deg)\";\r\n }\r\n if (htmlElement.style.transform != \"\") {\r\n htmlElement.style.transformOrigin = target.get(\"centerX\", 0) + \"% \" + target.get(\"centerY\", 0) + \"%\";\r\n }\r\n }\r\n }\r\n _setHTMLContent(target, html) {\r\n let htmlElement = target.getPrivate(\"htmlElement\");\r\n if (!htmlElement) {\r\n htmlElement = this._makeHTMLElement(target);\r\n }\r\n if (htmlElement.innerHTML != html) {\r\n htmlElement.innerHTML = html;\r\n }\r\n }\r\n _removeHTMLContent(target) {\r\n let htmlElement = target.getPrivate(\"htmlElement\");\r\n if (htmlElement) {\r\n this._htmlElementContainer.removeChild(htmlElement);\r\n target.removePrivate(\"htmlElement\");\r\n }\r\n $array.remove(this._htmlEnabledContainers, target);\r\n }\r\n}\r\n//# sourceMappingURL=Root.js.map","import { Entity } from \"../../util/Entity\";\r\n/**\r\n * Base class for gradients.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\r\n */\r\nexport class Gradient extends Entity {\r\n _afterNew() {\r\n // Applying themes because gradient will not have parent\r\n super._afterNewApplyThemes();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getFill(_target) {\r\n return {\r\n addColorStop: (_offset, _color) => { }\r\n };\r\n }\r\n _changed() {\r\n super._changed();\r\n //if (this.isDirty(\"target\") && this.get(\"target\")) {\r\n //\tthis.get(\"target\")!.events.on(\"boundschanged\", () => {\r\n //\t});\r\n //}\r\n }\r\n /**\r\n * @ignore\r\n */\r\n getBounds(target) {\r\n const gradientTarget = this.get(\"target\");\r\n if (gradientTarget) {\r\n let bounds = gradientTarget.globalBounds();\r\n const p0 = target.toLocal({ x: bounds.left, y: bounds.top });\r\n const p1 = target.toLocal({ x: bounds.right, y: bounds.top });\r\n const p2 = target.toLocal({ x: bounds.right, y: bounds.bottom });\r\n const p3 = target.toLocal({ x: bounds.left, y: bounds.bottom });\r\n return {\r\n left: Math.min(p0.x, p1.x, p2.x, p3.x),\r\n top: Math.min(p0.y, p1.y, p2.y, p3.y),\r\n right: Math.max(p0.x, p1.x, p2.x, p3.x),\r\n bottom: Math.max(p0.y, p1.y, p2.y, p3.y)\r\n };\r\n }\r\n return target._display.getLocalBounds();\r\n }\r\n}\r\nObject.defineProperty(Gradient, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Gradient\"\r\n});\r\nObject.defineProperty(Gradient, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([Gradient.className])\r\n});\r\n//# sourceMappingURL=Gradient.js.map","import { Gradient } from \"./Gradient\";\r\nimport { Color } from \"../../util/Color\";\r\nimport * as $array from \"../../util/Array\";\r\nimport * as $type from \"../../util/Type\";\r\nimport * as $math from \"../../util/Math\";\r\n/**\r\n * Linear gradient.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/gradients/} for more info\r\n */\r\nexport class LinearGradient extends Gradient {\r\n /**\r\n * @ignore\r\n */\r\n getFill(target) {\r\n const rotation = this.get(\"rotation\", 0);\r\n let bounds = this.getBounds(target);\r\n let l = bounds.left || 0;\r\n let r = bounds.right || 0;\r\n let t = bounds.top || 0;\r\n let b = bounds.bottom || 0;\r\n let cos = $math.cos(rotation);\r\n let sin = $math.sin(rotation);\r\n let w = cos * (r - l);\r\n let h = sin * (b - t);\r\n if (w == 0) {\r\n w = 1;\r\n }\r\n if (h == 0) {\r\n h = 1;\r\n }\r\n let longer = Math.max(w, h);\r\n const gradient = this._root._renderer.createLinearGradient(l, t, l + longer * cos, t + longer * sin);\r\n const stops = this.get(\"stops\");\r\n if (stops) {\r\n let i = 0;\r\n $array.each(stops, (stop) => {\r\n let offset = stop.offset;\r\n if (!$type.isNumber(offset)) {\r\n offset = i / (stops.length - 1);\r\n }\r\n let opacity = stop.opacity;\r\n if (!$type.isNumber(opacity)) {\r\n opacity = 1;\r\n }\r\n let color = stop.color;\r\n if (color) {\r\n const lighten = stop.lighten;\r\n if (lighten) {\r\n color = Color.lighten(color, lighten);\r\n }\r\n const brighten = stop.brighten;\r\n if (brighten) {\r\n color = Color.brighten(color, brighten);\r\n }\r\n gradient.addColorStop(offset, 'rgba(' + color.r + ',' + color.g + ',' + color.b + ',' + opacity + ')');\r\n }\r\n i++;\r\n });\r\n }\r\n return gradient;\r\n }\r\n}\r\nObject.defineProperty(LinearGradient, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"LinearGradient\"\r\n});\r\nObject.defineProperty(LinearGradient, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Gradient.classNames.concat([LinearGradient.className])\r\n});\r\n//# sourceMappingURL=LinearGradient.js.map","import * as $type from \"../util/Type\";\r\nimport * as $math from \"../util/Math\";\r\nimport * as $utils from \"../util/Utils\";\r\nimport { Rectangle } from \"./Rectangle\";\r\n/**\r\n * Draws a rectangle with rounded corners.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class RoundedRectangle extends Rectangle {\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"cornerRadiusTL\") || this.isDirty(\"cornerRadiusTR\") || this.isDirty(\"cornerRadiusBR\") || this.isDirty(\"cornerRadiusBL\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _draw() {\r\n let width = this.width();\r\n let height = this.height();\r\n let w = width;\r\n let h = height;\r\n let wSign = w / Math.abs(width);\r\n let hSign = h / Math.abs(height);\r\n if ($type.isNumber(w) && $type.isNumber(h)) {\r\n let minSide = Math.min(w, h) / 2;\r\n let crtl = $utils.relativeToValue(this.get(\"cornerRadiusTL\", 8), minSide);\r\n let crtr = $utils.relativeToValue(this.get(\"cornerRadiusTR\", 8), minSide);\r\n let crbr = $utils.relativeToValue(this.get(\"cornerRadiusBR\", 8), minSide);\r\n let crbl = $utils.relativeToValue(this.get(\"cornerRadiusBL\", 8), minSide);\r\n let maxcr = Math.min(Math.abs(w / 2), Math.abs(h / 2));\r\n crtl = $math.fitToRange(crtl, 0, maxcr);\r\n crtr = $math.fitToRange(crtr, 0, maxcr);\r\n crbr = $math.fitToRange(crbr, 0, maxcr);\r\n crbl = $math.fitToRange(crbl, 0, maxcr);\r\n const display = this._display;\r\n display.moveTo(crtl * wSign, 0);\r\n display.lineTo(w - crtr * wSign, 0);\r\n if (crtr > 0) {\r\n display.arcTo(w, 0, w, crtr * hSign, crtr);\r\n }\r\n display.lineTo(w, h - crbr * hSign);\r\n if (crbr > 0) {\r\n display.arcTo(w, h, w - crbr * wSign, h, crbr);\r\n }\r\n display.lineTo(crbl * wSign, h);\r\n if (crbl > 0) {\r\n display.arcTo(0, h, 0, h - crbl * hSign, crbl);\r\n }\r\n display.lineTo(0, crtl * hSign);\r\n if (crtl > 0) {\r\n display.arcTo(0, 0, crtl * wSign, 0, crtl);\r\n }\r\n display.closePath();\r\n }\r\n }\r\n}\r\nObject.defineProperty(RoundedRectangle, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"RoundedRectangle\"\r\n});\r\nObject.defineProperty(RoundedRectangle, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Rectangle.classNames.concat([RoundedRectangle.className])\r\n});\r\n//# sourceMappingURL=RoundedRectangle.js.map","import { Graphics } from \"./Graphics\";\r\n/**\r\n * Draws a circle.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/graphics/} for more info\r\n * @important\r\n */\r\nexport class Circle extends Graphics {\r\n _afterNew() {\r\n super._afterNew();\r\n this._display.isMeasured = true;\r\n this.setPrivateRaw(\"trustBounds\", true);\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"radius\")) {\r\n this._clear = true;\r\n }\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this._clear) {\r\n this._display.drawCircle(0, 0, Math.abs(this.get(\"radius\", 10)));\r\n }\r\n }\r\n}\r\nObject.defineProperty(Circle, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Circle\"\r\n});\r\nObject.defineProperty(Circle, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Graphics.classNames.concat([Circle.className])\r\n});\r\n//# sourceMappingURL=Circle.js.map","import { Entity } from \"../../core/util/Entity\";\r\n/**\r\n * A universal placeholder for bullet elements.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/} for more info\r\n */\r\nexport class Bullet extends Entity {\r\n constructor() {\r\n super(...arguments);\r\n // used by MapPolygons where one data item can have multiple bullets of the same kind\r\n Object.defineProperty(this, \"_index\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * Target series object if it's a bullet for series.\r\n */\r\n Object.defineProperty(this, \"series\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _afterNew() {\r\n // Applying themes because bullet will not have parent\r\n super._afterNewApplyThemes();\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"sprite\")) {\r\n const sprite = this.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setAll({ position: \"absolute\", role: \"figure\" });\r\n this._disposers.push(sprite);\r\n }\r\n }\r\n if (this.isDirty(\"locationX\") || this.isDirty(\"locationY\")) {\r\n if (this.series) {\r\n this.series._positionBullet(this);\r\n }\r\n }\r\n }\r\n}\r\nObject.defineProperty(Bullet, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Bullet\"\r\n});\r\nObject.defineProperty(Bullet, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([Bullet.className])\r\n});\r\n//# sourceMappingURL=Bullet.js.map","import { List } from \"./List\";\r\n/**\r\n * A [[List]] that holds components data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\r\n */\r\nexport class ListData extends List {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * An optional processor for data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/#Pre_processing_data} for more info\r\n */\r\n Object.defineProperty(this, \"processor\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n incrementRef() { }\r\n /**\r\n * @ignore\r\n */\r\n decrementRef() { }\r\n _onPush(newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onPush(newValue);\r\n }\r\n _onInsertIndex(index, newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onInsertIndex(index, newValue);\r\n }\r\n _onSetIndex(index, oldValue, newValue) {\r\n if (this.processor) {\r\n this.processor.processRow(newValue);\r\n }\r\n super._onSetIndex(index, oldValue, newValue);\r\n }\r\n}\r\n/**\r\n * @deprecated\r\n * @todo remove\r\n */\r\nexport class JsonData {\r\n constructor(value) {\r\n Object.defineProperty(this, \"processor\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_value\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this._value = value;\r\n }\r\n incrementRef() { }\r\n decrementRef() { }\r\n}\r\n//# sourceMappingURL=Data.js.map","import { __awaiter } from \"tslib\";\r\nimport { Settings } from \"../util/Entity\";\r\nimport { Container } from \"./Container\";\r\nimport { ListData } from \"../util/Data\";\r\nimport * as $array from \"../util/Array\";\r\nimport * as $object from \"../util/Object\";\r\n/**\r\n * A base element that holds data bit (data item) for any [[Component]].\r\n */\r\nexport class DataItem extends Settings {\r\n constructor(component, dataContext, settings) {\r\n super(settings);\r\n /**\r\n * A data item's owener [[Component]].\r\n */\r\n Object.defineProperty(this, \"component\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * A reference to actual item in source data this item is based on.\r\n */\r\n Object.defineProperty(this, \"dataContext\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * @todo requires description\r\n */\r\n Object.defineProperty(this, \"bullets\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * A set of \"open\" values.\r\n */\r\n Object.defineProperty(this, \"open\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * A set of \"close\" values.\r\n */\r\n Object.defineProperty(this, \"close\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n this.dataContext = dataContext;\r\n this.component = component;\r\n this._settings.visible = true;\r\n this._checkDirty();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirty() {\r\n this.component.markDirtyValues(this);\r\n }\r\n _startAnimation() {\r\n this.component._root._addAnimation(this);\r\n }\r\n _animationTime() {\r\n return this.component._root.animationTime;\r\n }\r\n _dispose() {\r\n if (this.component) {\r\n this.component.disposeDataItem(this);\r\n }\r\n super._dispose();\r\n }\r\n /**\r\n * Shows a data item that's currently hidden.\r\n */\r\n show(duration) {\r\n this.setRaw(\"visible\", true);\r\n if (this.component) {\r\n this.component.showDataItem(this, duration);\r\n }\r\n }\r\n /**\r\n * Hides a data item that's currently visible.\r\n */\r\n hide(duration) {\r\n this.setRaw(\"visible\", false);\r\n if (this.component) {\r\n this.component.hideDataItem(this, duration);\r\n }\r\n }\r\n isHidden() {\r\n return !this.get(\"visible\");\r\n }\r\n}\r\n/**\r\n * A base class for elements that make use of data.\r\n */\r\nexport class Component extends Container {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_data\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListData()\r\n });\r\n Object.defineProperty(this, \"_dataItems\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_mainDataItems\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this._dataItems\r\n });\r\n Object.defineProperty(this, \"valueFields\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"fields\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: [\"id\"]\r\n });\r\n Object.defineProperty(this, \"_valueFields\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_valueFieldsF\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_fields\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_fieldsF\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_valuesDirty\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_dataChanged\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_dataGrouped\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n /**\r\n * Indicates if the component has already been initialized.\r\n */\r\n Object.defineProperty(this, \"inited\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n }\r\n /**\r\n * Component's data.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/data/} for more info\r\n */\r\n set data(data) {\r\n data.incrementRef();\r\n this._data.decrementRef();\r\n this._data = data;\r\n }\r\n /**\r\n * @return Data\r\n */\r\n get data() {\r\n return this._data;\r\n }\r\n _dispose() {\r\n super._dispose();\r\n this._data.decrementRef();\r\n }\r\n _onDataClear() {\r\n }\r\n _afterNew() {\r\n super._afterNew();\r\n this._data.incrementRef();\r\n this._updateFields();\r\n this._disposers.push(this.data.events.onAll((change) => {\r\n const dataItems = this._mainDataItems;\r\n this.markDirtyValues();\r\n this._markDirtyGroup();\r\n this._dataChanged = true;\r\n if (change.type === \"clear\") {\r\n $array.each(dataItems, (dataItem) => {\r\n dataItem.dispose();\r\n });\r\n dataItems.length = 0;\r\n this._onDataClear();\r\n }\r\n else if (change.type === \"push\") {\r\n const dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\r\n dataItems.push(dataItem);\r\n this.processDataItem(dataItem);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n const dataItem = dataItems[change.index];\r\n const properties = this._makeDataItem(change.newValue);\r\n if (dataItem.bullets && dataItem.bullets.length == 0) {\r\n dataItem.bullets = undefined;\r\n }\r\n $object.keys(properties).forEach((key) => {\r\n dataItem.animate({\r\n key: key,\r\n to: properties[key],\r\n duration: this.get(\"interpolationDuration\", 0),\r\n easing: this.get(\"interpolationEasing\"),\r\n });\r\n });\r\n dataItem.dataContext = change.newValue;\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n const dataItem = new DataItem(this, change.newValue, this._makeDataItem(change.newValue));\r\n dataItems.splice(change.index, 0, dataItem);\r\n this.processDataItem(dataItem);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n const dataItem = dataItems[change.index];\r\n dataItem.dispose();\r\n dataItems.splice(change.index, 1);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n const dataItem = dataItems[change.oldIndex];\r\n dataItems.splice(change.oldIndex, 1);\r\n dataItems.splice(change.newIndex, 0, dataItem);\r\n }\r\n else {\r\n throw new Error(\"Unknown IStreamEvent type\");\r\n }\r\n this._afterDataChange();\r\n }));\r\n }\r\n _updateFields() {\r\n if (this.valueFields) {\r\n this._valueFields = [];\r\n this._valueFieldsF = {};\r\n $array.each(this.valueFields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._valueFields.push(key);\r\n this._valueFieldsF[key] = { fieldKey: key + \"Field\", workingKey: key + \"Working\" };\r\n }\r\n });\r\n }\r\n if (this.fields) {\r\n this._fields = [];\r\n this._fieldsF = {};\r\n $array.each(this.fields, (key) => {\r\n const field = this.get((key + \"Field\"));\r\n if (field) {\r\n this._fields.push(key);\r\n this._fieldsF[key] = key + \"Field\";\r\n }\r\n });\r\n }\r\n }\r\n /**\r\n * A list of component's data items.\r\n *\r\n * @return Data items\r\n */\r\n get dataItems() {\r\n return this._dataItems;\r\n }\r\n processDataItem(_dataItem) { }\r\n _makeDataItem(data) {\r\n //const output: this[\"_dataItemSettings\"] = {};\r\n const output = {}; // temporary to solve error\r\n if (this._valueFields) {\r\n $array.each(this._valueFields, (key) => {\r\n const field = this.get((this._valueFieldsF[key].fieldKey));\r\n output[key] = data[field];\r\n output[this._valueFieldsF[key].workingKey] = output[key];\r\n });\r\n }\r\n if (this._fields) {\r\n $array.each(this._fields, (key) => {\r\n const field = this.get((this._fieldsF[key]));\r\n output[key] = data[field];\r\n });\r\n }\r\n return output;\r\n }\r\n /**\r\n * Creates a new data item and processes it.\r\n *\r\n * @param data Data item settings\r\n * @param dataContext Data context\r\n * @return New data item\r\n */\r\n makeDataItem(data, dataContext) {\r\n let dataItem = new DataItem(this, dataContext, data);\r\n this.processDataItem(dataItem);\r\n return dataItem;\r\n }\r\n /**\r\n * Adds new explicit data item to series.\r\n *\r\n * @param data Data item settings\r\n * @param dataContext Data context\r\n * @return New data item\r\n */\r\n pushDataItem(data, dataContext) {\r\n const dataItem = this.makeDataItem(data, dataContext);\r\n this._mainDataItems.push(dataItem);\r\n return dataItem;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(_dataItem) {\r\n }\r\n /**\r\n * Shows component's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param _duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, _duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n dataItem.set(\"visible\", true);\r\n });\r\n }\r\n /**\r\n * Hides component's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param _duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, _duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n dataItem.set(\"visible\", false);\r\n });\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._valuesDirty = false;\r\n }\r\n _afterDataChange() {\r\n }\r\n _afterChanged() {\r\n super._afterChanged();\r\n if (this._dataChanged) {\r\n const type = \"datavalidated\";\r\n if (this.events.isEnabled(type)) {\r\n this.events.dispatch(type, { type: type, target: this });\r\n }\r\n this._dataChanged = false;\r\n }\r\n this.inited = true;\r\n }\r\n /**\r\n * Forces a repaint of the element which relies on data.\r\n *\r\n * @since 5.0.21\r\n */\r\n markDirtyValues(_dataItem) {\r\n this.markDirty();\r\n this._valuesDirty = true;\r\n }\r\n _markDirtyGroup() {\r\n this._dataGrouped = false;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n markDirtySize() {\r\n this._sizeDirty = true;\r\n this.markDirty();\r\n }\r\n}\r\nObject.defineProperty(Component, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Component\"\r\n});\r\nObject.defineProperty(Component, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Container.classNames.concat([Component.className])\r\n});\r\n//# sourceMappingURL=Component.js.map","/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport * as $type from \"./Type\";\r\nimport * as $utils from \"./Utils\";\r\n/**\r\n * Returns a `Promise` which can be used to execute code after number of\r\n * milliseconds.\r\n *\r\n * @param ms Sleep duration in ms\r\n * @return Promise\r\n */\r\nexport function sleep(ms) {\r\n return new Promise((resolve, _reject) => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n/**\r\n * Maps time period names to their numeric representations in milliseconds.\r\n *\r\n * @ignore Exclude from docs\r\n */\r\nexport let timeUnitDurations = {\r\n millisecond: 1,\r\n second: 1000,\r\n minute: 60000,\r\n hour: 3600000,\r\n day: 86400000,\r\n week: 604800000,\r\n month: 365.242 / 12 * 86400000,\r\n year: 31536000000\r\n};\r\n/**\r\n * Returns the next time unit that goes after source `unit`.\r\n *\r\n * E.g. \"hour\" is the next unit after \"minute\", etc.\r\n *\r\n * @ignore Exclude from docs\r\n * @param unit Source time unit\r\n * @return Next time unit\r\n */\r\nexport function getNextUnit(unit) {\r\n switch (unit) {\r\n case \"year\":\r\n return;\r\n case \"month\":\r\n return \"year\";\r\n case \"week\":\r\n return \"month\";\r\n case \"day\":\r\n return \"month\"; // not a mistake\r\n case \"hour\":\r\n return \"day\";\r\n case \"minute\":\r\n return \"hour\";\r\n case \"second\":\r\n return \"minute\";\r\n case \"millisecond\":\r\n return \"second\";\r\n }\r\n}\r\n/**\r\n * Returns number of milliseconds in the `count` of time `unit`.\r\n *\r\n * Available units: \"millisecond\", \"second\", \"minute\", \"hour\", \"day\", \"week\",\r\n * \"month\", and \"year\".\r\n *\r\n * @param unit Time unit\r\n * @param count Number of units\r\n * @return Milliseconds\r\n */\r\nexport function getDuration(unit, count) {\r\n if (count == null) {\r\n count = 1;\r\n }\r\n return timeUnitDurations[unit] * count;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getIntervalDuration(interval) {\r\n if (interval) {\r\n return timeUnitDurations[interval.timeUnit] * interval.count;\r\n }\r\n return 0;\r\n}\r\nexport function getDateIntervalDuration(interval, date, firstDateOfWeek, utc, timezone) {\r\n const unit = interval.timeUnit;\r\n const count = interval.count;\r\n if (unit == \"hour\" || unit == \"minute\" || unit == \"second\" || unit == \"millisecond\") {\r\n return timeUnitDurations[interval.timeUnit] * interval.count;\r\n }\r\n else {\r\n const firstTime = round(new Date(date.getTime()), unit, count, firstDateOfWeek, utc, undefined, timezone).getTime();\r\n let lastTime = firstTime + count * getDuration(unit) * 1.05;\r\n lastTime = round(new Date(lastTime), unit, 1, firstDateOfWeek, utc, undefined, timezone).getTime();\r\n return lastTime - firstTime;\r\n }\r\n}\r\n/**\r\n * Returns current `Date` object.\r\n *\r\n * @return Current date\r\n */\r\nexport function now() {\r\n return new Date();\r\n}\r\n/**\r\n * Returns current timestamp.\r\n *\r\n * @return Current timestamp\r\n */\r\nexport function getTime() {\r\n return now().getTime();\r\n}\r\n/**\r\n * Returns a copy of the `Date` object.\r\n *\r\n * @param date Source date\r\n * @return Copy\r\n */\r\nexport function copy(date) {\r\n return new Date(date.getTime()); // todo: check if this is ok. new Date(date) used to strip milliseconds on FF in v3\r\n}\r\n/**\r\n * Checks if the `unit` part of two `Date` objects do not match. Two dates\r\n * represent a \"range\" of time, rather the same time date.\r\n *\r\n * @param timeOne timestamp\r\n * @param timeTwo timestamp\r\n * @param unit Time unit to check\r\n * @return Range?\r\n */\r\nexport function checkChange(timeOne, timeTwo, unit, utc, timezone) {\r\n // quick\r\n if ((timeTwo - timeOne) > getDuration(unit, 1.2)) {\r\n return true;\r\n }\r\n let dateOne = new Date(timeOne);\r\n let dateTwo = new Date(timeTwo);\r\n if (timezone) {\r\n dateOne = timezone.convertLocal(dateOne);\r\n dateTwo = timezone.convertLocal(dateTwo);\r\n }\r\n let timeZoneOffset1 = 0;\r\n let timeZoneOffset2 = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset1 = dateOne.getTimezoneOffset();\r\n dateOne.setUTCMinutes(dateOne.getUTCMinutes() - timeZoneOffset1);\r\n timeZoneOffset2 = dateTwo.getTimezoneOffset();\r\n dateTwo.setUTCMinutes(dateTwo.getUTCMinutes() - timeZoneOffset2);\r\n }\r\n let changed = false;\r\n switch (unit) {\r\n case \"year\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"month\":\r\n if (dateOne.getUTCFullYear() != dateTwo.getUTCFullYear()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"day\":\r\n if (dateOne.getUTCMonth() != dateTwo.getUTCMonth()) {\r\n changed = true;\r\n }\r\n else if (dateOne.getUTCDate() != dateTwo.getUTCDate()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"hour\":\r\n if (dateOne.getUTCHours() != dateTwo.getUTCHours()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"minute\":\r\n if (dateOne.getUTCMinutes() != dateTwo.getUTCMinutes()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"second\":\r\n if (dateOne.getUTCSeconds() != dateTwo.getUTCSeconds()) {\r\n changed = true;\r\n }\r\n break;\r\n case \"millisecond\":\r\n if (dateOne.getTime() != dateTwo.getTime()) {\r\n changed = true;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n return changed;\r\n }\r\n let nextUnit = getNextUnit(unit);\r\n if (nextUnit) {\r\n return checkChange(timeOne, timeTwo, nextUnit, utc, timezone);\r\n }\r\n else {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Adds `count` of time `unit` to the source date. Returns a modified `Date` object.\r\n *\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to add\r\n * @return Modified date\r\n */\r\nexport function add(date, unit, count, utc, timezone) {\r\n let timeZoneOffset = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n if (timezone) {\r\n timeZoneOffset -= timezone.offsetUTC(date);\r\n }\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n let day = date.getUTCDate();\r\n date.setUTCDate(day + count);\r\n break;\r\n case \"second\":\r\n let seconds = date.getUTCSeconds();\r\n date.setUTCSeconds(seconds + count);\r\n break;\r\n case \"millisecond\":\r\n let milliseconds = date.getUTCMilliseconds();\r\n date.setUTCMilliseconds(milliseconds + count);\r\n break;\r\n case \"hour\":\r\n let hours = date.getUTCHours();\r\n date.setUTCHours(hours + count);\r\n break;\r\n case \"minute\":\r\n let minutes = date.getUTCMinutes();\r\n date.setUTCMinutes(minutes + count);\r\n break;\r\n case \"year\":\r\n let year = date.getUTCFullYear();\r\n date.setUTCFullYear(year + count);\r\n break;\r\n case \"month\":\r\n const endDays = date.getUTCDate();\r\n const startDays = new Date(date.getUTCFullYear(), date.getUTCMonth(), 0).getUTCDate();\r\n let month = date.getUTCMonth();\r\n if (endDays > startDays) {\r\n date.setUTCMonth(month + count, startDays);\r\n }\r\n else {\r\n date.setUTCMonth(month + count);\r\n }\r\n break;\r\n case \"week\":\r\n let wday = date.getUTCDate();\r\n date.setUTCDate(wday + count * 7);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n if (timezone) {\r\n newTimeZoneOffset += timezone.offsetUTC(date);\r\n }\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n let diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n // solves issues if new time falls back to old time zone\r\n if (date.getTimezoneOffset() != newTimeZoneOffset) {\r\n date.setUTCMinutes(date.getUTCMinutes() - diff);\r\n }\r\n }\r\n }\r\n }\r\n return date;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function roun(time, unit, count, root, firstTime) {\r\n let firstDate;\r\n if (firstTime != null) {\r\n firstDate = new Date(firstTime);\r\n }\r\n return round(new Date(time), unit, count, root.locale.firstDayOfWeek, root.utc, firstDate, root.timezone).getTime();\r\n}\r\n/**\r\n * \"Rounds\" the date to specific time unit.\r\n *\r\n * @param date Source date\r\n * @param unit Time unit\r\n * @param count Number of units to round to\r\n * @param firstDateOfWeek First day of week\r\n * @param utc Use UTC timezone\r\n * @param firstDate First date to round to\r\n * @param roundMinutes Minutes to round to (some timezones use non-whole hour)\r\n * @param timezone Use specific named timezone when rounding\r\n * @return New date\r\n */\r\nexport function round(date, unit, count, firstDateOfWeek, utc, firstDate, timezone) {\r\n if (!timezone || utc) {\r\n let timeZoneOffset = 0;\r\n if (!utc && unit != \"millisecond\") {\r\n timeZoneOffset = date.getTimezoneOffset();\r\n date.setUTCMinutes(date.getUTCMinutes() - timeZoneOffset);\r\n }\r\n switch (unit) {\r\n case \"day\":\r\n let day = date.getUTCDate();\r\n if (count > 1) {\r\n //\tday = Math.floor(day / count) * count;\r\n if (firstDate) {\r\n firstDate = round(firstDate, \"day\", 1);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"day\") / count);\r\n let duration = getDuration(\"day\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\r\n }\r\n }\r\n else {\r\n date.setUTCDate(day);\r\n }\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"second\":\r\n let seconds = date.getUTCSeconds();\r\n if (count > 1) {\r\n seconds = Math.floor(seconds / count) * count;\r\n }\r\n date.setUTCSeconds(seconds, 0);\r\n break;\r\n case \"millisecond\":\r\n if (count == 1) {\r\n return date; // much better for perf!\r\n }\r\n let milliseconds = date.getUTCMilliseconds();\r\n milliseconds = Math.floor(milliseconds / count) * count;\r\n date.setUTCMilliseconds(milliseconds);\r\n break;\r\n case \"hour\":\r\n let hours = date.getUTCHours();\r\n if (count > 1) {\r\n hours = Math.floor(hours / count) * count;\r\n }\r\n date.setUTCHours(hours, 0, 0, 0);\r\n break;\r\n case \"minute\":\r\n let minutes = date.getUTCMinutes();\r\n if (count > 1) {\r\n minutes = Math.floor(minutes / count) * count;\r\n }\r\n date.setUTCMinutes(minutes, 0, 0);\r\n break;\r\n case \"month\":\r\n let month = date.getUTCMonth();\r\n if (count > 1) {\r\n month = Math.floor(month / count) * count;\r\n }\r\n date.setUTCMonth(month, 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"year\":\r\n let year = date.getUTCFullYear();\r\n if (count > 1) {\r\n year = Math.floor(year / count) * count;\r\n }\r\n date.setUTCFullYear(year, 0, 1);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n case \"week\":\r\n if (count > 1) {\r\n if (firstDate) {\r\n firstDate = round(firstDate, \"week\", 1);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"week\") / count);\r\n let duration = getDuration(\"week\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration - timeZoneOffset * getDuration(\"minute\"));\r\n }\r\n }\r\n let wday = date.getUTCDate();\r\n let weekDay = date.getUTCDay();\r\n if (!$type.isNumber(firstDateOfWeek)) {\r\n firstDateOfWeek = 1;\r\n }\r\n if (weekDay >= firstDateOfWeek) {\r\n wday = wday - weekDay + firstDateOfWeek;\r\n }\r\n else {\r\n wday = wday - (7 + weekDay) + firstDateOfWeek;\r\n }\r\n date.setUTCDate(wday);\r\n date.setUTCHours(0, 0, 0, 0);\r\n break;\r\n }\r\n if (!utc && unit != \"millisecond\") {\r\n date.setUTCMinutes(date.getUTCMinutes() + timeZoneOffset);\r\n if (unit == \"day\" || unit == \"week\" || unit == \"month\" || unit == \"year\") {\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n if (newTimeZoneOffset != timeZoneOffset) {\r\n let diff = newTimeZoneOffset - timeZoneOffset;\r\n date.setUTCMinutes(date.getUTCMinutes() + diff);\r\n }\r\n }\r\n }\r\n return date;\r\n }\r\n else {\r\n if (isNaN(date.getTime())) {\r\n return date;\r\n }\r\n let tzoffset = timezone.offsetUTC(date);\r\n let timeZoneOffset = date.getTimezoneOffset();\r\n let parsedDate = timezone.parseDate(date);\r\n let year = parsedDate.year;\r\n let month = parsedDate.month;\r\n let day = parsedDate.day;\r\n let hour = parsedDate.hour;\r\n let minute = parsedDate.minute;\r\n let second = parsedDate.second;\r\n let millisecond = parsedDate.millisecond;\r\n let weekday = parsedDate.weekday;\r\n let offsetDif = tzoffset - timeZoneOffset;\r\n switch (unit) {\r\n case \"day\":\r\n if (count > 1 && firstDate) {\r\n firstDate = round(firstDate, \"day\", 1, firstDateOfWeek, utc, undefined, timezone);\r\n let difference = date.getTime() - firstDate.getTime();\r\n let unitCount = Math.floor(difference / getDuration(\"day\") / count);\r\n let duration = getDuration(\"day\", unitCount * count);\r\n date.setTime(firstDate.getTime() + duration);\r\n parsedDate = timezone.parseDate(date);\r\n year = parsedDate.year;\r\n month = parsedDate.month;\r\n day = parsedDate.day;\r\n }\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"second\":\r\n minute += offsetDif;\r\n if (count > 1) {\r\n second = Math.floor(second / count) * count;\r\n }\r\n millisecond = 0;\r\n break;\r\n case \"millisecond\":\r\n minute += offsetDif;\r\n if (count > 1) {\r\n millisecond = Math.floor(millisecond / count) * count;\r\n }\r\n break;\r\n case \"hour\":\r\n if (count > 1) {\r\n hour = Math.floor(hour / count) * count;\r\n }\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"minute\":\r\n if (count > 1) {\r\n minute = Math.floor(minute / count) * count;\r\n }\r\n minute += offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"month\":\r\n if (count > 1) {\r\n month = Math.floor(month / count) * count;\r\n }\r\n day = 1;\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"year\":\r\n if (count > 1) {\r\n year = Math.floor(year / count) * count;\r\n }\r\n month = 0;\r\n day = 1;\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"week\":\r\n if (!$type.isNumber(firstDateOfWeek)) {\r\n firstDateOfWeek = 1;\r\n }\r\n if (weekday >= firstDateOfWeek) {\r\n day = day - weekday + firstDateOfWeek;\r\n }\r\n else {\r\n day = day - (7 + weekday) + firstDateOfWeek;\r\n }\r\n hour = 0;\r\n minute = offsetDif;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n }\r\n date = new Date(year, month, day, hour, minute, second, millisecond);\r\n let newTimeZoneOffset = date.getTimezoneOffset();\r\n let newTzoffset = timezone.offsetUTC(date);\r\n let newDiff = newTzoffset - newTimeZoneOffset;\r\n if (newDiff != offsetDif) {\r\n date.setTime(date.getTime() + (newDiff - offsetDif) * 60000);\r\n }\r\n return date;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function chooseInterval(index, duration, gridCount, intervals) {\r\n let gridInterval = intervals[index];\r\n let intervalDuration = getIntervalDuration(gridInterval);\r\n let lastIndex = intervals.length - 1;\r\n if (index >= lastIndex) {\r\n return Object.assign({}, intervals[lastIndex]);\r\n }\r\n let count = Math.ceil(duration / intervalDuration);\r\n if (duration < intervalDuration && index > 0) {\r\n return Object.assign({}, intervals[index - 1]);\r\n }\r\n if (count <= gridCount) {\r\n return Object.assign({}, intervals[index]);\r\n }\r\n else {\r\n if (index + 1 < intervals.length) {\r\n return chooseInterval(index + 1, duration, gridCount, intervals);\r\n }\r\n else {\r\n return Object.assign({}, intervals[index]);\r\n }\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function getUnitValue(date, unit) {\r\n switch (unit) {\r\n case \"day\":\r\n return date.getDate();\r\n case \"second\":\r\n return date.getSeconds();\r\n case \"millisecond\":\r\n return date.getMilliseconds();\r\n case \"hour\":\r\n return date.getHours();\r\n case \"minute\":\r\n return date.getMinutes();\r\n case \"month\":\r\n return date.getMonth();\r\n case \"year\":\r\n return date.getFullYear();\r\n case \"week\":\r\n return $utils.getWeek(date);\r\n }\r\n}\r\n//# sourceMappingURL=Time.js.map","import { __awaiter } from \"tslib\";\r\nimport { Component } from \"../../core/render/Component\";\r\nimport { List } from \"../../core/util/List\";\r\nimport { Color } from \"../../core/util/Color\";\r\nimport { percentInterpolate } from \"../../core/util/Animation\";\r\nimport { Percent } from \"../../core/util/Percent\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Label } from \"../../core/render/Label\";\r\n//import { Animations } from \"../../core/util/Animation\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $time from \"../../core/util/Time\";\r\n/**\r\n * A base class for all series.\r\n */\r\nexport class Series extends Component {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_aggregatesCalculated\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_selectionAggregatesCalculated\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_dataProcessed\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_psi\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_pei\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * A chart series belongs to.\r\n */\r\n Object.defineProperty(this, \"chart\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n /**\r\n * List of bullets to use for the series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/} for more info\r\n */\r\n Object.defineProperty(this, \"bullets\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new List()\r\n });\r\n /**\r\n * A [[Container]] series' bullets are stored in.\r\n *\r\n * @default Container.new()\r\n */\r\n Object.defineProperty(this, \"bulletsContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Container.new(this._root, { width: p100, height: p100, position: \"absolute\" })\r\n });\r\n }\r\n _afterNew() {\r\n this.valueFields.push(\"value\", \"customValue\");\r\n super._afterNew();\r\n this.setPrivate(\"customData\", {});\r\n this._disposers.push(this.bullets.events.onAll((change) => {\r\n if (change.type === \"clear\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else if (change.type === \"push\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else if (change.type === \"setIndex\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else if (change.type === \"insertIndex\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else if (change.type === \"removeIndex\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else if (change.type === \"moveIndex\") {\r\n this._handleBullets(this.dataItems);\r\n }\r\n else {\r\n throw new Error(\"Unknown IListEvent type\");\r\n }\r\n }));\r\n }\r\n _dispose() {\r\n this.bulletsContainer.dispose(); // can be in a different parent\r\n super._dispose();\r\n }\r\n startIndex() {\r\n let len = this.dataItems.length;\r\n return Math.min(this.getPrivate(\"startIndex\", 0), len);\r\n }\r\n endIndex() {\r\n let len = this.dataItems.length;\r\n return Math.min(this.getPrivate(\"endIndex\", len), len);\r\n }\r\n _handleBullets(dataItems) {\r\n $array.each(dataItems, (dataItem) => {\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n bullet.dispose();\r\n });\r\n dataItem.bullets = undefined;\r\n }\r\n });\r\n this.markDirtyValues();\r\n }\r\n /**\r\n * Looks up and returns a data item by its ID.\r\n *\r\n * @param id ID\r\n * @return Data item\r\n */\r\n getDataItemById(id) {\r\n return $array.find(this.dataItems, (dataItem) => {\r\n return dataItem.get(\"id\") == id;\r\n });\r\n }\r\n _makeBullets(dataItem) {\r\n if (this._shouldMakeBullet(dataItem)) {\r\n dataItem.bullets = [];\r\n this.bullets.each((bulletFunction) => {\r\n this._makeBullet(dataItem, bulletFunction);\r\n });\r\n }\r\n }\r\n _shouldMakeBullet(_dataItem) {\r\n return true;\r\n }\r\n _makeBullet(dataItem, bulletFunction, index) {\r\n const bullet = bulletFunction(this._root, this, dataItem);\r\n if (bullet) {\r\n bullet._index = index;\r\n this._makeBulletReal(dataItem, bullet);\r\n }\r\n return bullet;\r\n }\r\n _makeBulletReal(dataItem, bullet) {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite._setDataItem(dataItem);\r\n sprite.setRaw(\"position\", \"absolute\");\r\n this.bulletsContainer.children.push(sprite);\r\n }\r\n bullet.series = this;\r\n dataItem.bullets.push(bullet);\r\n }\r\n /**\r\n * Adds bullet directly to a data item.\r\n *\r\n * Please note: method accepts [[Bullet]] instance as a paramter, not a\r\n * reference to a function.\r\n *\r\n * You should add Bullet instance, not a method like you do it on series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#Adding_directly_to_data_item} for more info\r\n * @since 5.6.0\r\n *\r\n * @param dataItem Target data item\r\n * @param bullet Bullet instance\r\n */\r\n addBullet(dataItem, bullet) {\r\n if (!dataItem.bullets) {\r\n dataItem.bullets = [];\r\n }\r\n if (bullet) {\r\n this._makeBulletReal(dataItem, bullet);\r\n }\r\n }\r\n _clearDirty() {\r\n super._clearDirty();\r\n this._aggregatesCalculated = false;\r\n this._selectionAggregatesCalculated = false;\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (this.isDirty(\"name\")) {\r\n this.updateLegendValue();\r\n }\r\n if (this.isDirty(\"heatRules\")) {\r\n this._valuesDirty = true;\r\n }\r\n if (this.isPrivateDirty(\"baseValueSeries\")) {\r\n const baseValueSeries = this.getPrivate(\"baseValueSeries\");\r\n if (baseValueSeries) {\r\n this._disposers.push(baseValueSeries.onPrivate(\"startIndex\", () => {\r\n this.markDirtyValues();\r\n }));\r\n }\r\n }\r\n const calculateAggregates = this.get(\"calculateAggregates\");\r\n if (calculateAggregates) {\r\n if (this._valuesDirty && !this._dataProcessed) {\r\n if (!this._aggregatesCalculated) {\r\n this._calculateAggregates(0, this.dataItems.length);\r\n this._aggregatesCalculated = true;\r\n if (startIndex != 0) {\r\n this._psi = undefined;\r\n }\r\n }\r\n }\r\n if ((this._psi != startIndex || this._pei != endIndex || this.isPrivateDirty(\"adjustedStartIndex\")) && !this._selectionAggregatesCalculated) {\r\n if (startIndex === 0 && endIndex === this.dataItems.length && this._aggregatesCalculated) {\r\n // void\r\n }\r\n else {\r\n this._calculateAggregates(startIndex, endIndex);\r\n }\r\n this._selectionAggregatesCalculated = true;\r\n }\r\n }\r\n if (this.isDirty(\"tooltip\")) {\r\n let tooltip = this.get(\"tooltip\");\r\n if (tooltip) {\r\n tooltip.hide(0);\r\n tooltip.set(\"tooltipTarget\", this);\r\n }\r\n }\r\n if (this.isDirty(\"fill\") || this.isDirty(\"stroke\")) {\r\n let markerRectangle;\r\n const legendDataItem = this.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n markerRectangle = legendDataItem.get(\"markerRectangle\");\r\n if (markerRectangle) {\r\n if (this.isVisible()) {\r\n if (this.isDirty(\"stroke\")) {\r\n let stroke = this.get(\"stroke\");\r\n markerRectangle.set(\"stroke\", stroke);\r\n }\r\n if (this.isDirty(\"fill\")) {\r\n let fill = this.get(\"fill\");\r\n markerRectangle.set(\"fill\", fill);\r\n }\r\n }\r\n }\r\n }\r\n this.updateLegendMarker(undefined);\r\n }\r\n if (this.bullets.length > 0) {\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (endIndex < this.dataItems.length) {\r\n endIndex++;\r\n }\r\n for (let i = startIndex; i < endIndex; i++) {\r\n let dataItem = this.dataItems[i];\r\n if (!dataItem.bullets) {\r\n this._makeBullets(dataItem);\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n _adjustStartIndex(index) {\r\n return index;\r\n }\r\n _calculateAggregates(startIndex, endIndex) {\r\n let fields = this._valueFields;\r\n if (!fields) {\r\n throw new Error(\"No value fields are set for the series.\");\r\n }\r\n const sum = {};\r\n const absSum = {};\r\n const count = {};\r\n const low = {};\r\n const high = {};\r\n const open = {};\r\n const close = {};\r\n const average = {};\r\n const previous = {};\r\n $array.each(fields, (key) => {\r\n sum[key] = 0;\r\n absSum[key] = 0;\r\n count[key] = 0;\r\n });\r\n $array.each(fields, (key) => {\r\n let change = key + \"Change\";\r\n let changePercent = key + \"ChangePercent\";\r\n let changePrevious = key + \"ChangePrevious\";\r\n let changePreviousPercent = key + \"ChangePreviousPercent\";\r\n let changeSelection = key + \"ChangeSelection\";\r\n let changeSelectionPercent = key + \"ChangeSelectionPercent\";\r\n let openKey = \"valueY\";\r\n if (key == \"valueX\" || key == \"openValueX\" || key == \"lowValueX\" || key == \"highValueX\") {\r\n openKey = \"valueX\";\r\n }\r\n const baseValueSeries = this.getPrivate(\"baseValueSeries\");\r\n const adjustedStartIndex = this.getPrivate(\"adjustedStartIndex\", startIndex);\r\n for (let i = adjustedStartIndex; i < endIndex; i++) {\r\n const dataItem = this.dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (value != null) {\r\n count[key]++;\r\n sum[key] += value;\r\n absSum[key] += Math.abs(value);\r\n average[key] = sum[key] / count[key];\r\n if (low[key] > value || low[key] == null) {\r\n low[key] = value;\r\n }\r\n if (high[key] < value || high[key] == null) {\r\n high[key] = value;\r\n }\r\n close[key] = value;\r\n if (open[key] == null) {\r\n open[key] = value;\r\n previous[key] = value;\r\n if (baseValueSeries) {\r\n open[openKey] = baseValueSeries._getBase(openKey);\r\n }\r\n }\r\n if (startIndex === 0) {\r\n dataItem.setRaw((change), value - open[openKey]);\r\n dataItem.setRaw((changePercent), (value - open[openKey]) / open[openKey] * 100);\r\n }\r\n dataItem.setRaw((changePrevious), value - previous[openKey]);\r\n dataItem.setRaw((changePreviousPercent), (value - previous[openKey]) / previous[openKey] * 100);\r\n dataItem.setRaw((changeSelection), value - open[openKey]);\r\n dataItem.setRaw((changeSelectionPercent), (value - open[openKey]) / open[openKey] * 100);\r\n previous[key] = value;\r\n }\r\n }\r\n }\r\n if (endIndex < this.dataItems.length - 1) {\r\n const dataItem = this.dataItems[endIndex];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n dataItem.setRaw((changePrevious), value - previous[openKey]);\r\n dataItem.setRaw((changePreviousPercent), (value - previous[openKey]) / previous[openKey] * 100);\r\n dataItem.setRaw((changeSelection), value - open[openKey]);\r\n dataItem.setRaw((changeSelectionPercent), (value - open[openKey]) / open[openKey] * 100);\r\n }\r\n }\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n delete previous[key];\r\n for (let i = startIndex; i < adjustedStartIndex; i++) {\r\n const dataItem = this.dataItems[i];\r\n if (dataItem) {\r\n let value = dataItem.get(key);\r\n if (previous[key] == null) {\r\n previous[key] = value;\r\n }\r\n if (value != null) {\r\n dataItem.setRaw((changePrevious), value - previous[openKey]);\r\n dataItem.setRaw((changePreviousPercent), (value - previous[openKey]) / previous[openKey] * 100);\r\n dataItem.setRaw((changeSelection), value - open[openKey]);\r\n dataItem.setRaw((changeSelectionPercent), (value - open[openKey]) / open[openKey] * 100);\r\n previous[key] = value;\r\n }\r\n }\r\n }\r\n });\r\n $array.each(fields, (key) => {\r\n this.setPrivate((key + \"AverageSelection\"), average[key]);\r\n this.setPrivate((key + \"CountSelection\"), count[key]);\r\n this.setPrivate((key + \"SumSelection\"), sum[key]);\r\n this.setPrivate((key + \"AbsoluteSumSelection\"), absSum[key]);\r\n this.setPrivate((key + \"LowSelection\"), low[key]);\r\n this.setPrivate((key + \"HighSelection\"), high[key]);\r\n this.setPrivate((key + \"OpenSelection\"), open[key]);\r\n this.setPrivate((key + \"CloseSelection\"), close[key]);\r\n });\r\n if (startIndex === 0 && endIndex === this.dataItems.length) {\r\n $array.each(fields, (key) => {\r\n this.setPrivate((key + \"Average\"), average[key]);\r\n this.setPrivate((key + \"Count\"), count[key]);\r\n this.setPrivate((key + \"Sum\"), sum[key]);\r\n this.setPrivate((key + \"AbsoluteSum\"), absSum[key]);\r\n this.setPrivate((key + \"Low\"), low[key]);\r\n this.setPrivate((key + \"High\"), high[key]);\r\n this.setPrivate((key + \"Open\"), open[key]);\r\n this.setPrivate((key + \"Close\"), close[key]);\r\n });\r\n }\r\n }\r\n _updateChildren() {\r\n super._updateChildren();\r\n this._psi = this.startIndex();\r\n this._pei = this.endIndex();\r\n if (this.isDirty(\"visible\")) {\r\n this.bulletsContainer.set(\"visible\", this.get(\"visible\"));\r\n }\r\n // Apply heat rules\r\n const rules = this.get(\"heatRules\");\r\n if (this._valuesDirty && rules && rules.length > 0) {\r\n $array.each(rules, (rule) => {\r\n const minValue = rule.minValue || this.getPrivate((rule.dataField + \"Low\")) || 0;\r\n const maxValue = rule.maxValue || this.getPrivate((rule.dataField + \"High\")) || 0;\r\n $array.each(rule.target._entities, (target) => {\r\n const value = target.dataItem.get(rule.dataField);\r\n if (!$type.isNumber(value)) {\r\n if (rule.neutral) {\r\n target.set(rule.key, rule.neutral);\r\n }\r\n const states = target.states;\r\n if (states) {\r\n const defaultState = states.lookup(\"default\");\r\n if (defaultState && rule.neutral) {\r\n defaultState.set(rule.key, rule.neutral);\r\n }\r\n }\r\n if (!rule.customFunction) {\r\n return;\r\n }\r\n }\r\n if (rule.customFunction) {\r\n rule.customFunction.call(this, target, minValue, maxValue, value);\r\n }\r\n else {\r\n let percent;\r\n if (rule.logarithmic) {\r\n percent = (Math.log(value) * Math.LOG10E - Math.log(minValue) * Math.LOG10E) / ((Math.log(maxValue) * Math.LOG10E - Math.log(minValue) * Math.LOG10E));\r\n }\r\n else {\r\n percent = (value - minValue) / (maxValue - minValue);\r\n }\r\n if ($type.isNumber(value) && (!$type.isNumber(percent) || Math.abs(percent) == Infinity)) {\r\n percent = 0.5;\r\n }\r\n // fixes problems if all values are the same\r\n let propertyValue;\r\n if ($type.isNumber(rule.min)) {\r\n propertyValue = rule.min + (rule.max - rule.min) * percent;\r\n }\r\n else if (rule.min instanceof Color) {\r\n propertyValue = Color.interpolate(percent, rule.min, rule.max);\r\n }\r\n else if (rule.min instanceof Percent) {\r\n propertyValue = percentInterpolate(percent, rule.min, rule.max);\r\n }\r\n target.set(rule.key, propertyValue);\r\n const states = target.states;\r\n if (states) {\r\n const defaultState = states.lookup(\"default\");\r\n if (defaultState) {\r\n defaultState.set(rule.key, propertyValue);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n if (this.get(\"visible\")) {\r\n let count = this.dataItems.length;\r\n let startIndex = this.startIndex();\r\n let endIndex = this.endIndex();\r\n if (endIndex < count) {\r\n endIndex++;\r\n }\r\n if (startIndex > 0) {\r\n startIndex--;\r\n }\r\n for (let i = 0; i < startIndex; i++) {\r\n this._hideBullets(this.dataItems[i]);\r\n }\r\n for (let i = startIndex; i < endIndex; i++) {\r\n this._positionBullets(this.dataItems[i]);\r\n }\r\n for (let i = endIndex; i < count; i++) {\r\n this._hideBullets(this.dataItems[i]);\r\n }\r\n }\r\n }\r\n _positionBullets(dataItem) {\r\n if (dataItem.bullets) {\r\n $array.each(dataItem.bullets, (bullet) => {\r\n this._positionBullet(bullet);\r\n const sprite = bullet.get(\"sprite\");\r\n if (bullet.get(\"dynamic\")) {\r\n if (sprite) {\r\n sprite._markDirtyKey(\"fill\");\r\n sprite.markDirtySize();\r\n }\r\n if (sprite instanceof Container) {\r\n sprite.walkChildren((child) => {\r\n child._markDirtyKey(\"fill\");\r\n child.markDirtySize();\r\n if (child instanceof Label) {\r\n child.text.markDirtyText();\r\n }\r\n });\r\n }\r\n }\r\n if (sprite instanceof Label && sprite.get(\"populateText\")) {\r\n sprite.text.markDirtyText();\r\n }\r\n });\r\n }\r\n }\r\n _hideBullets(dataItem) {\r\n if (dataItem.bullets) {\r\n $array.each(dataItem.bullets, (bullet) => {\r\n let sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n sprite.setPrivate(\"visible\", false);\r\n }\r\n });\r\n }\r\n }\r\n _positionBullet(_bullet) {\r\n }\r\n _placeBulletsContainer(chart) {\r\n chart.bulletsContainer.children.moveValue(this.bulletsContainer);\r\n }\r\n _removeBulletsContainer() {\r\n const bulletsContainer = this.bulletsContainer;\r\n if (bulletsContainer.parent) {\r\n bulletsContainer.parent.children.removeValue(bulletsContainer);\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n //super.disposeDataItem(dataItem); // does nothing\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n bullet.dispose();\r\n });\r\n }\r\n }\r\n _getItemReaderLabel() {\r\n return \"\";\r\n }\r\n /**\r\n * Shows series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n showDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n showDataItem: { get: () => super.showDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.showDataItem.call(this, dataItem, duration)];\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n promises.push(sprite.show(duration));\r\n }\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Hides series's data item.\r\n *\r\n * @param dataItem Data item\r\n * @param duration Animation duration in milliseconds\r\n * @return Promise\r\n */\r\n hideDataItem(dataItem, duration) {\r\n const _super = Object.create(null, {\r\n hideDataItem: { get: () => super.hideDataItem }\r\n });\r\n return __awaiter(this, void 0, void 0, function* () {\r\n const promises = [_super.hideDataItem.call(this, dataItem, duration)];\r\n const bullets = dataItem.bullets;\r\n if (bullets) {\r\n $array.each(bullets, (bullet) => {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n promises.push(sprite.hide(duration));\r\n }\r\n });\r\n }\r\n yield Promise.all(promises);\r\n });\r\n }\r\n _sequencedShowHide(show, duration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (this.get(\"sequencedInterpolation\")) {\r\n if (!$type.isNumber(duration)) {\r\n duration = this.get(\"interpolationDuration\", 0);\r\n }\r\n if (duration > 0) {\r\n const startIndex = this.startIndex();\r\n const endIndex = this.endIndex();\r\n yield Promise.all($array.map(this.dataItems, (dataItem, i) => __awaiter(this, void 0, void 0, function* () {\r\n let realDuration = duration || 0;\r\n if (i < startIndex - 10 || i > endIndex + 10) {\r\n realDuration = 0;\r\n }\r\n //let delay = this.get(\"sequencedDelay\", 0) * i + realDuration * (i - startIndex) / (endIndex - startIndex);\r\n let delay = this.get(\"sequencedDelay\", 0) + realDuration / (endIndex - startIndex);\r\n yield $time.sleep(delay * (i - startIndex));\r\n if (show) {\r\n yield this.showDataItem(dataItem, realDuration);\r\n }\r\n else {\r\n yield this.hideDataItem(dataItem, realDuration);\r\n }\r\n })));\r\n }\r\n else {\r\n yield Promise.all($array.map(this.dataItems, (dataItem) => {\r\n if (show) {\r\n return this.showDataItem(dataItem, 0);\r\n }\r\n else {\r\n return this.hideDataItem(dataItem, 0);\r\n }\r\n }));\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendValue(dataItem) {\r\n if (dataItem) {\r\n const legendDataItem = dataItem.get(\"legendDataItem\");\r\n if (legendDataItem) {\r\n const valueLabel = legendDataItem.get(\"valueLabel\");\r\n if (valueLabel) {\r\n const text = valueLabel.text;\r\n let txt = \"\";\r\n valueLabel._setDataItem(dataItem);\r\n txt = this.get(\"legendValueText\", text.get(\"text\", \"\"));\r\n valueLabel.set(\"text\", txt);\r\n text.markDirtyText();\r\n }\r\n const label = legendDataItem.get(\"label\");\r\n if (label) {\r\n const text = label.text;\r\n let txt = \"\";\r\n label._setDataItem(dataItem);\r\n txt = this.get(\"legendLabelText\", text.get(\"text\", \"\"));\r\n label.set(\"text\", txt);\r\n text.markDirtyText();\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateLegendMarker(_dataItem) {\r\n }\r\n _onHide() {\r\n super._onHide();\r\n const tooltip = this.getTooltip();\r\n if (tooltip) {\r\n tooltip.hide();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n hoverDataItem(_dataItem) { }\r\n /**\r\n * @ignore\r\n */\r\n unhoverDataItem(_dataItem) { }\r\n /**\r\n * @ignore\r\n */\r\n _getBase(key) {\r\n const dataItem = this.dataItems[this.startIndex()];\r\n if (dataItem) {\r\n return dataItem.get(key);\r\n }\r\n return 0;\r\n }\r\n}\r\nObject.defineProperty(Series, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Series\"\r\n});\r\nObject.defineProperty(Series, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Component.classNames.concat([Series.className])\r\n});\r\n//# sourceMappingURL=Series.js.map","import { Series } from \"./Series\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Label } from \"../../core/render/Label\";\r\nimport { RoundedRectangle } from \"../../core/render/RoundedRectangle\";\r\nimport { Template } from \"../../core/util/Template\";\r\nimport { ListTemplate } from \"../../core/util/List\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\n/**\r\n * A universal legend control.\r\n *\r\n * @important\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/legend/} for more info\r\n */\r\nexport class Legend extends Series {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * List of all [[Container]] elements for legend items.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"itemContainers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => Container._new(this._root, {\r\n themeTags: $utils.mergeTags(this.itemContainers.template.get(\"themeTags\", []), [\"legend\", \"item\"]),\r\n themeTagsSelf: $utils.mergeTags(this.itemContainers.template.get(\"themeTagsSelf\", []), [\"itemcontainer\"]),\r\n background: RoundedRectangle.new(this._root, {\r\n themeTags: $utils.mergeTags(this.itemContainers.template.get(\"themeTags\", []), [\"legend\", \"item\", \"background\"]),\r\n themeTagsSelf: $utils.mergeTags(this.itemContainers.template.get(\"themeTagsSelf\", []), [\"itemcontainer\"])\r\n })\r\n }, [this.itemContainers.template]))\r\n });\r\n /**\r\n * List of legend marker elements.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"markers\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => Container._new(this._root, {\r\n themeTags: $utils.mergeTags(this.markers.template.get(\"themeTags\", []), [\"legend\", \"marker\"])\r\n }, [this.markers.template]))\r\n });\r\n /**\r\n * List of legend label elements.\r\n *\r\n * @default new ListTemplate