{"version":3,"sources":["webpack:///./src/assets/images/calendar.png","webpack:///./src/components/currency.vue?7806","webpack:///src/components/currency.vue","webpack:///./src/components/currency.vue?a6ea","webpack:///./src/components/currency.vue?aec4","webpack:///./src/assets/images/close.svg","webpack:///./src/components/currency.vue?f641","webpack:///./src/components/download-btn.vue?7a1e","webpack:///./src/views/pages/reconciliation/dashboard.vue?58e8","webpack:///./src/components/country.vue?2490","webpack:///src/components/country.vue","webpack:///./src/components/country.vue?e9e1","webpack:///./src/components/country.vue?ef95","webpack:///./src/components/per-page.vue?71b0","webpack:///src/components/per-page.vue","webpack:///./src/components/per-page.vue?7793","webpack:///./src/components/per-page.vue?dc38","webpack:///./src/components/download-btn.vue?c435","webpack:///src/components/download-btn.vue","webpack:///./src/components/download-btn.vue?7383","webpack:///./src/components/download-btn.vue?b8a1","webpack:///./src/assets/images/sms.svg","webpack:///./src/assets/images/filter.svg","webpack:///./src/assets/images/download.svg","webpack:///./src/components/per-page.vue?57b2","webpack:///./src/views/pages/reconciliation/dashboard.vue?1d42","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/Disposer.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/EventDispatcher.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/Percent.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/util/Object.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/Animation.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/util/ColorSet.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/FlowDefaultTheme.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/gradients/Gradient.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/gradients/LinearGradient.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/Flow.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/FlowNode.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/FlowNodes.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/RoundedRectangle.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/SankeyNodes.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/FlowLink.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/SankeyLink.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/core/render/MonotoneXTension.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/core/render/MonotoneYTension.js","webpack:///./node_modules/d3-sankey/node_modules/d3-array/src/sum.js","webpack:///./node_modules/d3-sankey/node_modules/d3-array/src/max.js","webpack:///./node_modules/d3-sankey/node_modules/d3-array/src/min.js","webpack:///./node_modules/d3-sankey/src/align.js","webpack:///./node_modules/d3-sankey/src/constant.js","webpack:///./node_modules/d3-sankey/src/sankey.js","webpack:///./node_modules/d3-sankey/node_modules/d3-path/src/path.js","webpack:///./node_modules/d3-sankey/node_modules/d3-shape/src/array.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/charts/flow/Sankey.js","webpack:///./node_modules/@amcharts/amcharts5/.internal/themes/AnimatedTheme.js","webpack:///./node_modules/@amcharts/amcharts5/themes/Animated.js","webpack:///src/views/pages/reconciliation/dashboard.vue","webpack:///./src/views/pages/reconciliation/dashboard.vue?81ff","webpack:///./src/views/pages/reconciliation/dashboard.vue?c727","webpack:///./src/components/country.vue?03f1"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","scopedSlots","_u","key","fn","_v","_s","selectedCurrency","proxy","on","$event","currencyChanged","_e","_l","option","i","staticRenderFns","props","currency","currencies","type","default","unselect","data","created","watch","methods","component","invalid","disabled","staticStyle","country","length","flags","getRegionName","countryChanged","countries","fallback","$t","perPage","page","handleInput","currentPage","tableRowsCount","totalRows","prop","pageOptions","variant","downloading","clicked","text","loadingSankey","dataSources","dataSourceAChanged","model","value","callback","$$v","dataSourceA","expression","dataSources2","dataSourceBChanged","dataSourceB","dateChanged","selectedDates","slot","sankeyChangeData","parameterType","marketPlaceList","brandList","toggleFilter","directives","name","rawName","filtersCount","$router","push","query","activeTab","filters","$set","resetAdvanceFilters","applyFilter","reconSummary","_f","lastUpdatedDate","dataFields","ref","userPermissions","includes","userRoles","showFileUploadmodal","tableTitle","display_name","downloadData","toggleDownloadModal","$store","state","auth","currentUser","email_address","sendOverEmail","tableDataFromStore","tableColumns","loadingTable","fetchReconSummaryRecords","paymentChannelListMap","category","modifiers","column_category","label","field","item","data_type","Number","parent_key","col_key","toLocaleString","style","pageCurrency","row","tag","class","hidePagination","totalElementsFromStore","getType","toString","call","toNumber","isNumber","converted","isString","replace","isDate","Date","num","numberToString","Infinity","negative","Math","abs","res","parsed","exec","digits","decimals","undefined","exponent","zeros","repeat","slice","string","amount","Array","join","isObject","PLACEHOLDER","PLACEHOLDER2","indexOf","array","any","test","map","output","each","eachReverse","eachContinue","element","found","index","splice","removeFirst","pushOne","copy","insertIndex","removeIndex","findIndex","matches","findIndexReverse","find","findReverse","getSortedIndex","ordering","start","end","pivot","order","getFirstSortedIndex","keepIf","keep","DisposerClass","Object","defineProperty","enumerable","configurable","writable","_disposed","_dispose","Disposer","dispose","super","arguments","_disposers","x","disposers","CounterDisposer","_counter","_listeners","_killed","_disabled","_iterating","_enabled","a","disposer","killed","listener","Error","once","context","_eachListener","info","hasListenersByType","count","_removeListener","event","_shouldDispatch","dispatch","shouldClone","_removeExistingListener","_on","_type","source","onAll","checkBounds","len","initial","_values","newValue","events","isEnabled","target","oldValue","oldIndex","newIndex","oldValues","_onSetIndex","_onInsertIndex","b","value_a","value_b","_onRemoveIndex","toIndex","_onMoveIndex","_onPush","values","pushAll","newArray","old","_onClear","setAll","Symbol","iterator","f","autoDispose","ListTemplate","template","make","container","_container","_events","change","_onRemoved","_onInserted","child","_setParent","childrenDisplay","_childrenDisplay","addChild","_display","addChildAt","removeChild","markDirtyBounds","markDirty","Percent","percent","_value","min","max","p100","p50","keys","object","keysOrdered","sort","assign","forEach","hasKey","hasOwnProperty","removeElement","el","parentNode","addEventListener","dom","options","removeEventListener","onZoom","window","_ev","supports","cap","getPointerId","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","cursor","host","isLocalEvent","root","setInteractive","interactive","pointerEvents","iOS","navigator","vendor","getSafeResolution","relativeToValue","full","padString","char","trimLeft","trimRight","trim","getFormat","format","toLowerCase","hints","cleanFormat","stripTags","escapeForRgex","getYearDay","date","utc","getFullYear","diff","getTime","getTimezoneOffset","oneDay","floor","getWeek","_utc","d","UTC","getMonth","getDate","day","getUTCDay","setUTCDate","getUTCDate","firstDay","getUTCFullYear","ceil","getWeekYear","getMonthWeek","firstWeek","currentWeek","getDayFromWeek","week","year","weekday","setUTCFullYear","getDay","get12Hours","hours","base","getTimeZone","long","savings","timezone","d1","timeZone","d2","timeZoneName","substr","wotz","wtz","utcDate","tzDate","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","filter","self","string2hex","parseInt","rgba2hex","hex","val","fromAny","_hex","alpha","fromRGB","toCSSHex","fromString","fromCSS","fromHex","from","to","mode","fromHSL","toHSL","range","waitForAnimations","animations","promises","_","animation","waitForStop","Promise","all","defaultInterpolate","percentInterpolate","colorInterpolate","interpolate","getInterpolate","PI","RADIANS","DEGREES","precision","rounded","pow","fitToRange","angle","sin","tan","cos","normalizeAngle","getArcBounds","cx","cy","startAngle","endAngle","radius","minX","MAX_VALUE","minY","maxX","maxY","bpoints","getArcPoint","fromAngle","toAngle","pt","y","right","bottom","arc","inBounds","point","bounds","getAngle","point1","point2","diffX","diffY","atan2","linear","cubic","out","ease","tau","amplitude","period","asin","entity","settings","_entity","_settings","_userSettings","setRaw","set","seen","defaultState","states","lookup","_eachSetting","get","duration","stateAnimationDuration","easing","stateAnimationEasing","animate","States","_states","newState","apply","_applyState","applyAnimate","_applyStateAnimated","Registry","registry","compare","compareArray","leftLength","rightLength","callbacks","_callbacks","_markDirtyKey","loops","startingTime","_animation","_from","_to","_duration","_easing","_loops","_interpolate","_oldTime","_playing","_stopped","_startAnimation","_time","resolve","_reject","stopped","currentTime","counter","_userProperties","isDisposed","_animatingSettings","_stopAnimation","_run","percentage","_checkEnded","_reset","_set","_animatingPrivateSettings","_stopAnimationPrivate","setPrivate","_setPrivate","_playingAnimations","_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","_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","isConnected","defaults","themes","themeTags","Set","tags","add","_walkParents","_defaultThemes","theme","concat","_removeTemplates","allRules","rules","_lookupRules","rule","every","has","result","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","_renderer","removeHovering","_addPercentagePositionChildren","markDirtyPosition","_templateField","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","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","getTooltip","tooltipPosition","tooltipTarget","_setMatrix","toGlobal","_getTooltipPoint","width","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","maxWidth","w","maxHeight","_walkParent","updateChildren","prevParent","numberFormatter","dateFormatter","durationFormatter","toLocal","_getDownPointId","moveValue","makeGraphics","_afterNewApplyThemes","_pattern","_clear","_checkDirtyFill","repetition","fill","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","strokeWidth","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","split","chunk","chunks2","i2","chunk2","cleanUp","unescape","isImage","fontWeight","textDecoration","populateString","getTagValue","tagName","parts","reg","dateFields","getDateFormatter","numericFields","getNumberFormatter","durationFields","getDurationFormatter","method","params","matches2","reg2","getTagValueFromObject","getCustomDataValue","customData","current","formatApplied","part","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","startGrip","endGrip","interfaceColors","_vsbd0","wheelEvent","preventDefault","shiftY","deltaY","_vsbd1","walkChildren","updated","makeTextStyle","makeText","textStyle","_getText","updateTooltip","tooltipElement","_removeTooltipElement","wordWrapWidth","oversizedBehavior","breakWords","ellipsis","ignoreFormatting","minScale","_textStyles","styleName","_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","textAlign","rotation","bwh","xtl","ytl","xtr","ytr","xbr","ybr","xbl","ybl","moveTo","stemX","lineTo","arcTo","stemY","closePath","_label","_updateBackground","_updateTextColor","tooltipContainer","htmlElement","_htmlContentHovered","_tooltips","labelText","labelHTML","updateBackgroundColor","keephover","_keepHoverDp","hover","unhover","outEvent","getEvent","_fillDp","_strokeDp","_labelDp","alternative","cw","ch","parentW","parentH","layerMargin","_w","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","active","applyFormat","thousandSeparator","translateEmpty","decimalSeparator","_part","partFormat","mods","modSpacing","thousands","passive","interval","pop","applyPrefix","ol","parseFloat","toPrecision","exp","toExponential","ints","ip","intsr","reverse","c","unshift","separator","decs","prefixes","force","newvalue","applied","k","number","parseDate","month","hour","minute","second","millisecond","formatToParts","toUTCDate","Timezone","DateTimeFormat","hour12","fractionalSecondDigits","_dtf","offset","offsetUTC","userOffset","setUTCMinutes","getUTCMinutes","newUserOffset","dtf","locales","convertLocal","toUpperCase","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","_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","primaryButtonText","primaryButtonStroke","secondaryButton","secondaryButtonHover","secondaryButtonDown","secondaryButtonActive","secondaryButtonText","secondaryButtonStroke","grid","alternativeBackground","alternativeText","passOptions","lightness","colors","reuse","startIndex","interpolationDuration","interpolationEasing","tooltipX","tooltipY","setStateOnChildren","gap","colorOpacity","checkered","horizontalGap","verticalGap","density","minOpacity","maxOpacity","fillField","strokeField","nameField","layer","clickTarget","ariaChecked","focusable","ariaLabel","role","cornerRadiusBL","cornerRadiusTL","cornerRadiusBR","cornerRadiusTR","populateText","stepCount","fontFamily","fontSize","textType","inside","baseRadius","orientation","pointerBaseWidth","cornerRadius","shiftRadius","dRadius","dInnerRadius","locationX","locationY","getFillFromSprite","getStrokeFromSprite","autoTextColor","ariaValueMin","ariaValueMax","ariaLive","spikes","innerRadius","rotationStep","Matrix","tx","ty","pivotX","pivotY","origin","matrix","a1","b1","c1","tx1","_slicedToArray","sliceIterator","arr","_arr","_n","_d","_i","next","done","err","isArray","TypeError","TAU","mapToEllipse","_ref","rx","ry","cosphi","sinphi","centerx","centery","xp","yp","approxUnitArc","ang1","ang2","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","segments","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","ghostLayer","ghostContext","save","_transformLayer","_runPath","clip","globalAlpha","compoundAlpha","_isInteractiveMask","_render","subStatus","restore","tainted","_hovering","_dragging","some","tapToActivate","_touchActive","shouldCancelTouch","_children","_childLayers","deep","setPoint","Op","_context","_forceColor","BeginPath","beginPath","BeginFill","forceColor","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","colorize","addBounds","_textInfo","direction","textBaseline","ignoreGhost","ignoreFontWeight","fontStyle","_getFontStyle","font","_shared","style2","fontVariant","_measure","textVisible","_prerender","line","_index","textChunks","fillText","thickness","getTextStyle","rtl","truncate","wrap","_ignoreFontWeight","refText","lines","currentStyle","styleRestored","lineInfo","ascent","metrics","_measureText","actualBoundingBoxAscent","actualBoundingBoxDescent","currentFormat","currentFill","currentChunkWidth","currentVerticalAlign","currentDecoration","skipFurtherText","firstTextChunk","leftoverChunks","verticalAlign","chunkWidth","actualBoundingBoxLeft","actualBoundingBoxRight","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","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","colorId","hit","dispatching","cleanup","disposed","interactionsEnabled","_withEvents","dispatched","originalTarget","button","_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","_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","keyCode","_isShift","shiftKey","focusedSprite","_focusedSprite","downEvent","dragOffsetX","dragOffsetY","_keyboardDragPoint","moveEvent","upEvent","group","items","_tabindexes","lastIndex","_startTicker","setThemes","_addTooltip","_hasLicense","_showBranding","_resizeSensorDisposer","autoResize","_focusElementDirty","_updateCurrentFocus","_tickers","_animations","_runAnimation","allParents","_isDirtyParents","_dirtyParents","uid","_prepareChildren","objects","_isDirty","depths","_dirtyBounds","_positionHTMLElements","dirtyPositions","_dirtyPositions","_updatePosition","_updateTick","_checkComputedStyles","_runTickers","_runAnimations","_runDirties","_renderFrame","_ticker","_paused","endTime","performance","_runTicker","markDirtyGlobal","_isDisposed","innerHTML","tooltipContainerSettings","_tooltip","_invalidateTabindexes","aindex","bindex","groups","_moveFocusElement","_makeFocusElement","_decorateFocusElement","_positionFocusElement","focusElement","removeAttribute","ariaOrientation","ariaValueNow","ariaValueText","ariaControls","getAttribute","tabIndex","_handleFocus","_handleBlur","append","_focusNext","focusableElements","querySelectorAll","_makeTooltipElement","parentElement","scaleWidth","scaleHeight","styles","getComputedStyle","fontHash","changed","_fontHash","_invalidateLabelBounds","licenses","debugGhostView","boxSizing","_htmlEnabledContainers","visualSettings","setting","_makeHTMLElement","reset","pass","generateColors","getIndex","currentStep","hiddenSize","minSize","minHiddenValue","legendLabelText","legendValueText","outgoing","linkDataItem","link","incoming","rectangle","nodeAlign","linkTension","nodePadding","nodeWidth","controlPointDistance","padAngle","linkHeadRadius","sourceRadius","targetRadius","headRadius","linkType","minRadius","radiusKey","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","_handleBullets","bulletsContainer","bullet","_shouldMakeBullet","bulletFunction","_makeBullet","series","_aggregatesCalculated","_selectionAggregatesCalculated","endIndex","baseValueSeries","calculateAggregates","_dataProcessed","_calculateAggregates","_psi","_pei","markerRectangle","legendDataItem","updateLegendMarker","_makeBullets","sum","absSum","low","high","close","average","changePercent","changePrevious","changePreviousPercent","changeSelection","changeSelectionPercent","openKey","_getBase","minValue","dataField","customFunction","propertyValue","logarithmic","log","LOG10E","neutral","_hideBullets","_positionBullets","_positionBullet","markDirtySize","_bullet","chart","_super","realDuration","valueLabel","txt","_target","addColorStop","_offset","_color","getBounds","longer","lighten","brighten","nodes","flow","unknown","sourceId","sourceDataItem","getDataItemById","targetId","targetDataItem","addOutgoingLink","addincomingLink","makeLink","sourceIndex","targetIndex","_linksByIndex","_updateLinkColor","_userDataSet","valueLow","valueHigh","valueSum","_nodesData","d3SankeyNode","sumIncoming","sumIncomingWorking","workingValue","sumOutgoing","sumOutgoingWorking","updateLegendValue","_linksData","valueWorking","d3SankeyLink","sourceFill","targetFill","_fillGradient","sourceStop","targetStop","_strokeGradient","links","hiddenState","linkGraphics","getPoint","_getBulletLocation","_new","labels","node","makeNode","disabledField","disableDataItem","themeTag","addTag","enableDataItem","_updateNodeColor","wSign","hSign","minSide","crtl","crtr","crbr","crbl","maxcr","rectangles","_setSoft","x0","y0","updateSankey","createElementNS","sourceNode","targetNode","xt0","yt0","xt1","yt1","xb0","xb1","yb0","yb1","xm0","xm1","ym0","ym1","angle0","angle1","cpd","kxt0","kyt0","kxt1","kyt1","kxm0","kym0","kxm1","kym1","kxb0","kyb0","kxb1","kyb1","segment","_fillGenerator","middleSegment","_strokeGenerator","_svgPath","_totalLength","getTotalLength","location","getPointAtLength","prototype","Linear","areaStart","_line","areaEnd","NaN","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","j","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","MonotoneXTension","tension","_tension","_t0","slope2","t1","slope3","curveMonotoneXTension","monotoneXTension","that","h0","h1","s0","s1","t0","MonotoneYTension","curveMonotoneYTension","monotoneYTension","valueof","targetDepth","justify","sourceLinks","center","targetLinks","ascendingSourceBreadth","ascendingBreadth","ascendingTargetBreadth","defaultId","defaultNodes","graph","defaultLinks","nodeById","computeLinkBreadths","linkSort","iterations","sankey","computeNodeLinks","computeNodeValues","computeNodeDepths","computeNodeHeights","computeNodeBreadths","Map","fixedValue","computeNodeLayers","kx","columns","initializeNodeBreadths","ky","reorderLinks","beta","relaxRightToLeft","relaxLeftToRight","v","targetTop","reorderNodeLinks","resolveCollisions","sourceTop","subject","resolveCollisionsBottomToTop","resolveCollisionsTopToBottom","update","nodeId","nodeSort","extent","linksContainer","d3Graph","_d3Graph","_d3Sankey","d3Sankey","Animated","components","Layout","DatePicker","Multiselect","DownloadBtn","Country","PerPage","Currency","sortable","tdClass","thClass","selectedNodes","selectedNodeNames","mismatch_filter","transactionType","brand","marketPlace","time","computed","paymentChannelList","additionalColumns","dates","source_a","source_b","dateArr","fetchProperties","property_type","data_sources","data_source_a","data_source_b","response","msm_id","max_date","min_date","fetchBrandList","error","closeOnClick","fetchMarketPlaceList","source_name","setColumnsByPSPType","fromDate","toDate","localStorage","summaryApiPayload","brand_id","marketplace_id","fetchReconSummary","finally","reconRecordsApiPayload","mismatches","record_type","data_source","page_size","node_id","payload","createSankey","am5flow","sourceIdField","targetIdField","valueField","templateField","idField","removeEvents","nodeList","minimumFractionDigits","maximumFractionDigits","settlementValue","nodeSelection","showReconStatus","beforeDestroy"],"mappings":"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,WACAO,2BACAJ,cACAgB,iBACAI,iBACA/B,aACAb,cACA88D,YACA76D,iBACAqD,gBACA0pE,iBACAC,qBACA/xB,oBACAv3C,8BACAupE,iBACA,eACA,WAEApsE,gDACAG,uBACAksE,0BACAjsE,mBACAC,aACAisE,SACAC,eACAnuE,aACAjB,cACAoG,kBACAI,kBACA3E,eACA+B,SACAhD,aACAb,cACAovE,SACAC,kBAKAxrE,SACA8R,QACA,oCAEA25D,QACA,iCAIAC,UACAC,qBACA,sEAEAhqE,wBACA,gEAGAvB,eACA,2DAGAmB,qBACA,gEAEAqqE,oBACA,qEAEApqE,eACA,wBAWA,OATA,wBACA,+BACAoM,uBACAA,gBACAA,iCACAm7D,YAIA,GAEAlmE,yBACA,4DAGAhC,aACA,uCACA,mCAKA,sCAGAJ,kBACA,2DAEAE,YACA,qDAEAhB,eACA,QAaA,OAZA,2BACA0lC,IAEA,qBACAA,IAEA,cACAA,IAEA,eACAA,IAEA,IAIA5oC,UACA,oDACA,IACAovE,gBACA,aACA,4CAEA,WACA,2CAqBA,2DACA,yBACA,eACA,WACA,6BACAC,iDAEA,mBACA,0BACA,eACA,WACA,6BACAC,iDAGA,8BACA,6BACAC,2BAEA,6BACAA,2BAEA,qBAEA,mBAGA,+BAcArvE,SACAsvE,kBACA,uCACA,wCACA,2EACAtU,yBAGA,iDACAuU,gBACAC,yDACAC,mCACAC,qCACAj5C,KAAAk5C,IAEA,yBACA,cACA,kBACA,qBACA,oCAKA,+BACA,oBACA,wBACA,2BACA,gDAKA,yBACA,mBACA,qBACA,kFAKA,wBACA,kBACA,oBACA,8EAEA,0BACA,+BACA,uCACA,kEAKA,6BAIAjuE,cACA,4BACA,SAEA,SACA,kDACA+0C,QACAh4C,MACA0F,wDACA3E,gDACAowE,8CAGA,UAEA1tE,eACA,qBACA,SAEA,SACA,2DACAu0C,QACAh4C,kBACAoxE,oBACAC,oBACAF,wDACAzrE,sEAGA,UAEA4rE,iBACA,cACA,kBACA,iDACAR,2BACA94C,KAAAk5C,IACA,YACA,4BAEAj5C,MAAAs5C,IACA5zB,eACA,cACA18C,aACA8B,eACAyuE,qBAIAC,uBACA,oBACA,wBACA,6FACA,iDACAX,+BACAY,uCACA15C,KAAAk5C,IACA,YACA,kCAEAj5C,MAAAs5C,IACA5zB,eACA,cACA18C,aACA8B,eACAyuE,qBAKAG,sBACA,gCACA,wFACAvnE,mBACAA,oBAGA,0KACAA,mBACAA,oBAGA,IAGA,wBAIAxG,cACA,SACAguE,+BACAC,8BAEAC,gEACA,0BAEAC,oBACA,qCACA,qCAEA,sCACAH,kBAEA,sCACAC,qBAEA,SACA,qBACA,sBACAjwE,WAEAA,sBAIA,SACA,sBACA,uBACAb,WAEAA,uBAIA,SACAqb,yBACAC,uBACA20D,mCACAC,mCACAe,WACAC,iBACA,8DACA,6BACAd,+BACAvvE,UACAb,YAEA,UAEAmxE,oBACA,iCACA,sBACA,6DACA,aACA,oBAEA,gCACA,0BAEAC,QAAA,4BAEAC,0BACA,qCACA,qCAEA,SACA,oDACA,KACA,KAEA,kCACA,8BACAvO,sEAGA,iCACAwO,sBAEA,WACAp0B,cAEAq0B,cAAAnB,UAAA,GAEA,sCACAS,kBAEA,sCACAC,qBAEA,SACA,qBACA,sBACAjwE,WAEAA,sBAIA,SACA,sBACA,uBACAb,WAEAA,uBAIA,SACAqb,yBACAC,uBACAk2D,iCACAD,cACAr0B,SACA57C,sBACAmwE,uBACAR,WACAC,iBACAI,aACAlB,SACAsB,iBACA7wE,UACAb,YAWA,MARA,iBACA2xE,mCAGA,IACAA,oBACAA,sCAEA,GAEApsE,4BAEA,GADA,uBACA,6BACA,yDACA,IACA,wBAIA,uCACA,qBACA,mDACA6rE,QAAA,2BAEAQ,eACA,qCAEAx9D,yBAEA,sCACAy9D,UACAC,qBACAC,mBACAC,2BACApY,cACAD,eACAF,iBACAC,iBAKA,yCACA7rC,aACAW,mBAIA,8CACAyK,cACAwb,iBACAE,iBACAH,iBACAE,iBACAu9B,gCAIA,mCACAp8C,iBAIA,0CACAD,YACAlB,aACAsM,2BAGA,0BACAkxC,aACAj+B,qBAGAk+B,eACA,iDACA9vE,yBACA,wDAIAW,mBAEA,oBACA,2CAEAovE,cACA,SA6BA,GA5BA,kCACA,4BACA/vE,uBAEA,oCAEAA,EADA,EACAA,+BAEAA,8BAKAA,EADA,2BACAA,QAEAA,gCAAA+D,iBAAApG,+EAAAqyE,wBAAAC,0BAEA,qGACAjwE,aAIA,oCACAoP,iBAAAmkB,eAAAsC,gBAGAzmB,mCAEA,kIACA,6CAAArL,iBAAApG,+EAAAqyE,wBAAAC,0BACAjwE,WACAoP,gEAEA,iFACA,+CAAArL,iBAAApG,+EAAAqyE,wBAAAC,0BACAjwE,0BACAkwE,4BACA9gE,mDAEA,2BACAA,gFACA,4BACAA,iFAGA,WAGA,iCAGA,qDAGA,iDACApP,wBACA,wDAIAmwE,iBACA,+BACA,mCACA,0DACA,oEAEA,wCACA,+FAGA,mCACA,8BACA,sCAEA,0BACA,iCAGA,uCACA,iDAIA,mCACA,sBACA,4BAEA,0BACA,iCAGA,sBACA,eACA,YAIA,UACA,mIACAC,MAIA,2CACA,gCACA,wFACA,gCACAppE,aACAA,eAEAA,mBACAA,qBAIA,0KACAA,mBACAA,oBAGA,mBACA,GACAA,aACAA,eAEAA,mBACAA,qBAGA,KAIA,wBACA,uBACA,qHACA,yCACA,qFACA,yCACA,uCACA,6CAEA,0CAIA,yBACA,8LACA,0BACA,4BAEA,gCACA,oCAKA,uCACA,yBAEA,gCACA,oCAEA,gCACA,yBAEAzE,eACA,oBACA,SAEA,QAeA,GAdA,4BACA,qCACA,yCACA,YACAgI,cAEAA,cAKAA,wCAGA,MACA,+BACA,CACA,6CACA,mBACA,OAEA,oBACA,kDACAwkE,QAAA,2BAGAvsE,sBACA,wDAEAM,gBACA,sCACAwsE,mEACA,mBACA,OACA,6DACA,cACAzxE,eACA8B,8BACAyuE,kBAEA,6BAEAv5C,MAAAs5C,IACA5zB,eACA,cACA18C,aACA8B,eACAyuE,qBAQAxvE,kBACA,wBAEAxB,mBACA,yBAEA2D,eACA,cACAvC,qBACAb,uBACAovE,iBACAC,8BAEA,4DAEAtrE,sBACA,4DACA,mBACA,cACA,oBACA,cACAlD,qBACAb,cACAovE,SACAC,gBAEA,0DACA,0BAEAltE,qBACA,sBACA,0BACA,0BAEA,0CACA,EAOA,mBANA,WACA,sBAEA,sBAMA,mCACA,kBACA,2CAGAQ,sBACA,sBACA,0BACA,mCACA,oDACA,6BACA+sE,2BAEA,6BACAA,2BAEA,qBACA,4BAEA1rE,cACA,kCACA,oCACA,8BACA,0CACA,0DACA,2BAGA0uE,gBACA,cACA,oBACA,sBACA,oBCn4BiX,M,yBCQ7WjyE,GAAY,gBACd,GACAnC,EACAwB,GACA,EACA,KACA,WACA,MAIa,aAAAW,G,kECnBf","file":"js/chunk-bac0ba3a.7ae11422.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAACE4AAAhOAFFljFgAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAM8SURBVHgB7Vmvd9swEP66FQQMGAYMCAwYBhQUGgYODgbuzykcGCgsDAw0DCwMGBAMGAgYCJyulmr5fJItpYn7XvO9d8/2WWfdyffLFvDBMbc0lTw+Ix9LQ98N3RmaGfqDNJwq/4JPyAOt2r13fY+0lTxV/hW3yMNM4KkAX4KkbGFoj0TcJIxVhhaGSoxXNBUHQ9rQztIgxhig0PhqgcuCjKkNPccGDQVxhUb5c614DDRnac91aFDMgMrS1FD2qKWboSAmX68C9zSa17tg/A3GByEF8ZLxyFXITZUwvrLzan4jZEAl8Ei5jX0IKcAN0BhvwFHgba08GbFCP+bIlR+4kORC5Hd3jEcr/tvQX3v9D42PfvUmjwYbQ0z+aM+/GfriydB4bXV5hZSFyFK+ug9c0MLl8+T8PUJeoXkTPsiwtc+4DQj60JCVD02cgpi8tqQ8XskH8VaCXlMhPGgq8GI2A0vp/A1IxeqIyxexGDotBzdAKlhL9FPelOjomNuNvhtcDZgaY74HaoTT6LnBP3x6GGOAxnSpVGHAgGsMTI3cb2IH6pkUWjfzY4X4rvRv2b2ZlZ1buZRGsINTDPCbPjqSgr/QVG5S/Ic3lvz4CU1rwNtltwhrZCDXhRT6HWvh8aTKvfRkeWvijEhGrgGh3mgeue94CmnPjCLXgFBd0OzoY8+OIdkk5Bqg0RQ4H+TfLhjp09M3kuLiyZ5LX281MovlKWm0RmsEKbTx7u09pUj5R3QVpLE7T7ZGJk4xgLJQZc8pCFdoW90S7c8w4v1Em1ILdr2wY7NwzUIM1yyUCm6A9MOpCExWM945spD0idvRkbcSYx/iJiVFFNrf4g60yo9oXIrkd2ziNdpfiVzWh7SP0NGRG3C05CtN2WILGQeEG7ED4rldYxhKeGbnDUgxsBMeonB5SD96NR8kGSCtKKXAS+4R0Fwrgd/btZEM0Oi/evJFKj5ZqS4RCvLfadKpZ8DNwEMkaLS/0o94G7iKXSLsri7wO4jtkVV4Hzs0hBqBfim2xaTtUWFa1Ig0e0ObfBqN77l8fknQvFT8nmODUvaJS7Q+eq5gpphyFV2PEUgxwIfbR3irt0KK94rUh8B/zvC3tmrlVIEAAAAASUVORK5CYII=\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-dropdown',{staticClass:\"w-100 currency\",attrs:{\"variant\":\"white\",\"dropup\":\"\",\"menu-class\":\"w-100\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('p',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.selectedCurrency || '-- Select Currency --'))]),_c('img',{staticClass:\"mr-0\",attrs:{\"src\":require(\"@/assets/images/down.svg\"),\"alt\":\"down\",\"height\":\"18\",\"width\":\"18\"}})]},proxy:true}])},[(_vm.unselect)?_c('b-dropdown-item',{attrs:{\"link-class\":{'active': !_vm.selectedCurrency, 'd-flex': true}},on:{\"click\":function($event){return _vm.currencyChanged('')}}},[_vm._v(\" -- Select Currency -- \")]):_vm._e(),_vm._l((_vm.currencies),function(option,i){return _c('b-dropdown-item',{key:(\"currency\" + i),attrs:{\"link-class\":{'active': option === _vm.selectedCurrency, 'd-flex': true}},on:{\"click\":function($event){return _vm.currencyChanged(option)}}},[_c('div',{staticClass:\"my-auto\"},[_vm._v(\" \"+_vm._s(option)+\" \")])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n \n \n {{ selectedCurrency || '-- Select Currency --' }}\n \n \n\n \n -- Select Currency --\n \n\n \n \n {{ option }}\n \n \n \n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./currency.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./currency.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./currency.vue?vue&type=template&id=707d0b5d&scoped=true&\"\nimport script from \"./currency.vue?vue&type=script&lang=js&\"\nexport * from \"./currency.vue?vue&type=script&lang=js&\"\nimport style0 from \"./currency.vue?vue&type=style&index=0&id=707d0b5d&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"707d0b5d\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/close.b94d0f7a.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./currency.vue?vue&type=style&index=0&id=707d0b5d&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../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!./download-btn.vue?vue&type=style&index=0&id=063cd5e2&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dashboard.vue?vue&type=style&index=0&id=16f42c82&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-dropdown',{staticClass:\"w-100\",attrs:{\"variant\":\"white\",\"dropup\":\"\",\"menu-class\":\"w-100\",\"toggle-class\":{'border-danger': _vm.invalid},\"disabled\":_vm.disabled},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('div',{staticClass:\"d-flex align-items-center\",staticStyle:{\"gap\":\"15px\"}},[(_vm.country && _vm.country.length <= 2)?_c('b-img',{attrs:{\"src\":_vm.flags[_vm.country],\"alt\":\"Country\",\"width\":\"24\"}}):_vm._e(),_c('p',{staticClass:\"mb-0\"},[_vm._v(_vm._s(_vm.country ? _vm.getRegionName(_vm.country) : '-- Select Country --'))])],1),_c('img',{staticClass:\"mr-0\",attrs:{\"src\":require(\"@/assets/images/down.svg\"),\"alt\":\"down\",\"height\":\"18\",\"width\":\"18\"}})]},proxy:true}])},[_c('b-dropdown-item',{on:{\"click\":function($event){return _vm.countryChanged(null)}}},[_vm._v(\" -- Select Country -- \")]),_vm._l((_vm.countries),function(option,i){return _c('b-dropdown-item',{key:(\"country\" + i),attrs:{\"link-class\":{'active': option === _vm.country, 'd-flex flex-wrap': true}},on:{\"click\":function($event){return _vm.countryChanged(option)}}},[_c('div',{staticClass:\"my-auto\"},[_c('div',{staticClass:\"d-flex align-items-center\",staticStyle:{\"gap\":\"15px\"}},[(option && option.length <= 2)?_c('b-img',{attrs:{\"src\":_vm.flags[option],\"alt\":\"Country\",\"width\":\"24\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.getRegionName(option))+\" \")],1)])])})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n \n \n \n \n {{ country ? getRegionName(country) : '-- Select Country --' }}\n \n \n \n \n -- Select Country --\n \n\n \n \n \n \n {{ getRegionName(option) }}\n \n \n \n \n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./country.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./country.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./country.vue?vue&type=template&id=309ffd22&scoped=true&\"\nimport script from \"./country.vue?vue&type=script&lang=js&\"\nexport * from \"./country.vue?vue&type=script&lang=js&\"\nimport style0 from \"./country.vue?vue&type=style&index=0&id=309ffd22&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"309ffd22\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-dropdown',{attrs:{\"toggle-class\":\"language w-100\",\"menu-class\":\"drop-menu\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.$t('common.show'))+\" \"+_vm._s(_vm.perPage)+\" \"+_vm._s(_vm.$t('common.entries'))+\" \"),_c('img',{staticClass:\"mr-0\",attrs:{\"src\":require(\"@/assets/images/down.svg\"),\"alt\":\"down\",\"height\":\"18\",\"width\":\"18\"}})]},proxy:true}])},_vm._l((_vm.pageOptions),function(page,i){return _c('b-dropdown-item',{key:(\"page\" + i),staticClass:\"language-menu-item\",attrs:{\"link-class\":{'active': page === _vm.perPage, 'language-menu-item d-flex': true}},on:{\"click\":function($event){return _vm.handleInput(page)}}},[_c('div',{staticClass:\"my-auto\"},[_vm._v(\" \"+_vm._s(_vm.$t('common.show'))+\" \"+_vm._s(page)+\" \"+_vm._s(_vm.$t('common.entries'))+\" \")])])}),1),_c('div',{staticClass:\"showing-1-to\"},[_vm._v(\"Showing \"+_vm._s(((_vm.currentPage - 1) * _vm.perPage) + 1)+\" to \"+_vm._s(((_vm.currentPage - 1) * _vm.perPage) + _vm.tableRowsCount)+\" rows of \"+_vm._s(_vm.totalRows)+\" results\")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n {{ $t('common.show') }} {{ perPage }} {{ $t('common.entries') }}\n \n \n\n \n \n {{ $t('common.show') }} {{ page }} {{ $t('common.entries') }}\n \n \n \n Showing {{ ((currentPage - 1) * perPage) + 1 }} to {{ ((currentPage - 1) * perPage) + tableRowsCount }} rows of {{ totalRows }} results\n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./per-page.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./per-page.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./per-page.vue?vue&type=template&id=68d20ee4&scoped=true&\"\nimport script from \"./per-page.vue?vue&type=script&lang=js&\"\nexport * from \"./per-page.vue?vue&type=script&lang=js&\"\nimport style0 from \"./per-page.vue?vue&type=style&index=0&id=68d20ee4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68d20ee4\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('b-btn',{staticClass:\"d-flex align-items-center text-white\",staticStyle:{\"padding\":\"12px 16px\",\"gap\":\"10px\"},attrs:{\"variant\":_vm.variant,\"disabled\":_vm.downloading},on:{\"click\":_vm.clicked}},[(_vm.variant !== 'primary')?_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\"}},[_c('path',{attrs:{\"d\":\"M16.44 8.9C20.04 9.21 21.51 11.06 21.51 15.11V15.24C21.51 19.71 19.72 21.5 15.25 21.5H8.73998C4.26998 21.5 2.47998 19.71 2.47998 15.24V15.11C2.47998 11.09 3.92998 9.24 7.46998 8.91M12 2V14.88\",\"stroke\":\"black\",\"stroke-width\":\"1.5\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}}),_c('path',{attrs:{\"d\":\"M15.3499 12.6504L11.9999 16.0004L8.6499 12.6504\",\"stroke\":\"black\",\"stroke-width\":\"1.5\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}})]):_c('img',{attrs:{\"src\":require(\"@/assets/images/download.svg\"),\"alt\":\"download\"}}),_vm._v(\" \"+_vm._s(_vm.downloading ? 'Downloading...' : (_vm.text || _vm.$t(\"common.download\")))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n {{ downloading ? 'Downloading...' : (text || $t(\"common.download\")) }}\n \n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./download-btn.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./download-btn.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./download-btn.vue?vue&type=template&id=063cd5e2&scoped=true&\"\nimport script from \"./download-btn.vue?vue&type=script&lang=js&\"\nexport * from \"./download-btn.vue?vue&type=script&lang=js&\"\nimport style0 from \"./download-btn.vue?vue&type=style&index=0&id=063cd5e2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"063cd5e2\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/sms.7f3b653f.svg\";","module.exports = __webpack_public_path__ + \"img/filter.77e52150.svg\";","module.exports = __webpack_public_path__ + \"img/download.16bed02b.svg\";","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../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!./per-page.vue?vue&type=style&index=0&id=68d20ee4&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Layout',[_c('div',{staticClass:\"menu-content mb-1\"},[_c('div',{staticClass:\"d-flex\",staticStyle:{\"gap\":\"8px\"}},[_c('multiselect',{staticStyle:{\"min-width\":\"230px\"},attrs:{\"disabled\":_vm.loadingSankey,\"options\":_vm.dataSources(),\"allow-empty\":false,\"track-by\":\"key\",\"label\":\"display_name\",\"placeholder\":_vm.$t('menuitems.recon.list.data_source')},on:{\"input\":_vm.dataSourceAChanged},model:{value:(_vm.dataSourceA),callback:function ($$v) {_vm.dataSourceA=$$v},expression:\"dataSourceA\"}}),_c('multiselect',{staticStyle:{\"min-width\":\"230px\"},attrs:{\"disabled\":_vm.loadingSankey,\"options\":_vm.dataSources2(),\"allow-empty\":false,\"track-by\":\"key\",\"label\":\"display_name\",\"placeholder\":_vm.$t('menuitems.recon.list.data_source')},on:{\"input\":_vm.dataSourceBChanged},model:{value:(_vm.dataSourceB),callback:function ($$v) {_vm.dataSourceB=$$v},expression:\"dataSourceB\"}})],1),_c('div',{staticClass:\"d-flex\",staticStyle:{\"gap\":\"8px\"}},[_c('date-picker',{attrs:{\"type\":\"date\",\"format\":\"DD MMM, YYYY\",\"range\":\"\",\"clearable\":false,\"name\":\"startdate\",\"prefix-class\":\"xmx\",\"disabled\":_vm.loadingSankey},on:{\"change\":_vm.dateChanged},model:{value:(_vm.selectedDates),callback:function ($$v) {_vm.selectedDates=$$v},expression:\"selectedDates\"}},[_c('i',{attrs:{\"slot\":\"icon-calendar\"},slot:\"icon-calendar\"},[_c('img',{attrs:{\"src\":require(\"@/assets/images/calendar.png\"),\"alt\":\"Filter\"}})])]),_c('multiselect',{staticStyle:{\"width\":\"110px\"},attrs:{\"options\":['Amount', 'Count']},on:{\"input\":_vm.sankeyChangeData},model:{value:(_vm.parameterType),callback:function ($$v) {_vm.parameterType=$$v},expression:\"parameterType\"}}),(_vm.countries.length !== 0 || _vm.marketPlaceList.length !== 0 || _vm.brandList.length !== 0 || _vm.currencies.length !== 0)?_c('b-btn',{staticClass:\"px-3 d-flex\",staticStyle:{\"min-width\":\"fit-content\",\"line-height\":\"20px\",\"border\":\"1px solid #000\",\"gap\":\"8px\",\"border-radius\":\"12px\"},attrs:{\"variant\":\"white\",\"disabled\":_vm.loadingSankey},on:{\"click\":_vm.toggleFilter}},[_c('img',{staticClass:\"my-auto\",attrs:{\"height\":\"16px\",\"src\":require(\"@/assets/images/filter.svg\"),\"alt\":\"Filter\"}}),_c('span',{staticClass:\"my-auto\"},[_vm._v(_vm._s(_vm.$t('common.filters')))]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.filtersCount > 0),expression:\"filtersCount > 0\"}],staticClass:\"rounded-circle text-center\",staticStyle:{\"height\":\"16px\",\"width\":\"16px\",\"font-size\":\"10px\",\"padding-top\":\"2px\",\"line-height\":\"12px\",\"background\":\"#FC6B2D\",\"color\":\"#fff\",\"margin-left\":\"75px\",\"position\":\"absolute\",\"margin-top\":\"-11px\"}},[_vm._v(_vm._s(_vm.filtersCount))])]):_vm._e(),_c('b-dropdown',{staticClass:\"show_details\",attrs:{\"variant\":\"white button-border h-100\",\"right\":\"\"},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\"}},[_c('g',{attrs:{\"opacity\":\"0.5\"}},[_c('path',{attrs:{\"d\":\"M8.33398 15.8333C8.33398 16.75 9.08398 17.5 10.0007 17.5C10.9173 17.5 11.6673 16.75 11.6673 15.8333C11.6673 14.9167 10.9173 14.1667 10.0007 14.1667C9.08398 14.1667 8.33398 14.9167 8.33398 15.8333ZM8.33398 4.16667C8.33398 5.08333 9.08398 5.83333 10.0007 5.83333C10.9173 5.83333 11.6673 5.08333 11.6673 4.16667C11.6673 3.25 10.9173 2.5 10.0007 2.5C9.08398 2.5 8.33398 3.25 8.33398 4.16667ZM8.33398 10C8.33398 10.9167 9.08398 11.6667 10.0007 11.6667C10.9173 11.6667 11.6673 10.9167 11.6673 10C11.6673 9.08333 10.9173 8.33333 10.0007 8.33333C9.08398 8.33333 8.33398 9.08333 8.33398 10Z\",\"stroke\":\"black\",\"stroke-width\":\"1.5\"}})])])]},proxy:true}])},[_c('b-dropdown-item-button',{on:{\"click\":function($event){return _vm.$router.push({name: 'Upload Files'})}}},[_vm._v(\"Upload Files\")]),_c('b-dropdown-item-button',{on:{\"click\":function($event){return _vm.$router.push({name: 'Configuration', query: {activeTab: 'fee'}})}}},[_vm._v(\"Manage Fee\")]),_c('b-dropdown-item-button',{on:{\"click\":function($event){return _vm.$router.push({name: 'Configuration', query: {activeTab: 'file'}})}}},[_vm._v(\"Configure File\")])],1)],1)]),(!(_vm.countries.length === 0 && _vm.marketPlaceList.length === 0 && _vm.brandList.length === 0 && _vm.currencies.length === 0))?_c('b-collapse',{staticClass:\"common-border bg-white\",staticStyle:{\"padding\":\"25px\"},attrs:{\"id\":\"filter-collapse\",\"accordion\":\"my-accordion\"}},[_c('div',{staticClass:\"row\"},[(_vm.countries.length > 0)?_c('b-form-group',{staticClass:\"col-md-4\",attrs:{\"label\":\"Country\"}},[_c('Country',{attrs:{\"countries\":_vm.countries,\"country\":_vm.filters.country,\"disabled\":_vm.loadingSankey},on:{\"country-changed\":_vm.countryChanged}})],1):_vm._e(),(_vm.brandList.length > 0)?_c('b-form-group',{staticClass:\"col-md-4\",attrs:{\"label\":\"Brand\",\"label-for\":\"psp\"}},[_c('multiselect',{attrs:{\"options\":_vm.brandList,\"placeholder\":\"Select Brand\",\"track-by\":\"data_id\",\"label\":\"value\",\"disabled\":_vm.loadingSankey,\"multiple\":\"\"},model:{value:(_vm.filters.brand),callback:function ($$v) {_vm.$set(_vm.filters, \"brand\", $$v)},expression:\"filters.brand\"}})],1):_vm._e(),(_vm.marketPlaceList.length > 0)?_c('b-form-group',{staticClass:\"col-md-4\",attrs:{\"label\":\"Marketplace\",\"label-for\":\"psp\"}},[_c('multiselect',{attrs:{\"options\":_vm.marketPlaceList,\"placeholder\":\"Select Marketplace\",\"track-by\":\"data_id\",\"label\":\"value\",\"disabled\":_vm.loadingSankey,\"multiple\":\"\"},model:{value:(_vm.filters.marketPlace),callback:function ($$v) {_vm.$set(_vm.filters, \"marketPlace\", $$v)},expression:\"filters.marketPlace\"}})],1):_vm._e()],1),_c('div',{staticClass:\"row\"},[(_vm.currencies.length > 0)?_c('b-form-group',{staticClass:\"col-md-4\",attrs:{\"label\":\"Currency\"}},[_c('Currency',{attrs:{\"currencies\":_vm.currencies,\"currency\":_vm.filters.currency,\"disabled\":_vm.loadingSankey,\"unselect\":\"\"},on:{\"currency-changed\":_vm.currencyChanged}})],1):_vm._e()],1),_c('div',{staticClass:\"d-flex justify-content-between\"},[_c('b-btn',{staticClass:\"p-0 text-chai my-auto\",staticStyle:{\"font-size\":\"14px\",\"line-height\":\"20px\"},attrs:{\"variant\":\"link\"},on:{\"click\":_vm.resetAdvanceFilters}},[_vm._v(\"Clear Filters\")]),_c('div',[_c('b-btn',{staticClass:\"mr-2 bg-white text-dark cancel\",attrs:{\"variant\":\"primary\",\"disabled\":_vm.loadingSankey},on:{\"click\":_vm.toggleFilter}},[_vm._v(\"Cancel\")]),_c('b-btn',{staticClass:\"btn-padding filter-btn\",attrs:{\"variant\":\"primary\",\"disabled\":_vm.loadingSankey},on:{\"click\":_vm.applyFilter}},[_vm._v(\"Apply Filters\")])],1)],1)]):_vm._e(),_c('div',{staticClass:\"d-flex justify-content-between mt-4\"},[_c('div',[_c('h6',{staticClass:\"mb-0\",staticStyle:{\"color\":\"#000\",\"font-size\":\"18px\",\"font-style\":\"normal\",\"font-weight\":\"350\",\"line-height\":\"24px\"}},[_vm._v(\"Reconciliation Results\")]),_c('p',{staticClass:\"section-text\"},[_vm._v(\"Below are the reconciliation results for the selected data sources. \"),_c('router-link',{staticClass:\"text-chai\",staticStyle:{\"text-decoration\":\"underline !important\"},attrs:{\"to\":{ name: 'Reconciliation' }}},[_vm._v(\"Check more reconciliations\")])],1)]),_c('div',[(_vm.reconSummary.lastUpdatedDate)?_c('div',{staticClass:\"d-flex\",staticStyle:{\"gap\":\"8px\"}},[_c('label',{staticClass:\"section-text my-auto\"},[_vm._v(\"Last Updated:\")]),_c('div',{staticStyle:{\"border-radius\":\"12px\",\"border\":\"1px solid #DCDAD5\",\"background\":\"#FFF\",\"padding\":\"12px 16px\",\"font-size\":\"14px\",\"font-weight\":\"350\",\"line-height\":\"20px\"}},[_vm._v(\" \"+_vm._s(_vm._f(\"date\")(_vm.reconSummary.lastUpdatedDate))+\" \"),_c('span',{staticStyle:{\"color\":\"#DCDAD5\"}},[_vm._v(\"|\")]),_vm._v(\" \"+_vm._s(_vm._f(\"time\")(_vm.reconSummary.lastUpdatedDate))+\" \")])]):_vm._e()])]),_c('hr',{staticClass:\"my-3\",staticStyle:{\"background\":\"rgba(220, 218, 213, 0.30)\",\"height\":\"2px\",\"border\":\"none\"}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.loadingSankey && _vm.reconSummary.dataFields.length > 0),expression:\"!loadingSankey && reconSummary.dataFields.length > 0\"}],ref:\"sankeyrecon\",staticClass:\"sankeyrecon\"}),(_vm.loadingSankey)?_c('div',{staticClass:\"d-flex justify-content-center sankeyrecon\"},[_c('b-spinner',{staticClass:\"my-auto\",attrs:{\"small\":\"\",\"type\":\"grow\"}}),_c('strong',{staticClass:\"ml-2 my-auto\"},[_vm._v(\"Loading...\")])],1):_vm._e(),(!_vm.loadingSankey && _vm.reconSummary.dataFields.length === 0)?_c('div',{staticClass:\"d-flex justify-content-center align-items-center flex-column sankeyrecon\",staticStyle:{\"border-radius\":\"12px\",\"background\":\"rgba(220, 218, 213, 0.30)\"}},[_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"98\",\"height\":\"98\",\"viewBox\":\"0 0 98 98\",\"fill\":\"none\"}},[_c('ellipse',{attrs:{\"cx\":\"49\",\"cy\":\"95.0601\",\"rx\":\"49\",\"ry\":\"2.94\",\"fill\":\"#DCDAD5\"}}),_c('path',{attrs:{\"fill-rule\":\"evenodd\",\"clip-rule\":\"evenodd\",\"d\":\"M23.5205 24.5002C23.5205 21.2527 26.1531 18.6202 29.4005 18.6202H56.799C56.9921 18.6202 57.1841 18.6296 57.3746 18.6484V31.8064C57.3746 33.9714 59.1296 35.7264 61.2946 35.7264H73.5005V60.0959C72.5534 59.8891 71.5697 59.7802 70.5605 59.7802C62.9832 59.7802 56.8405 65.9228 56.8405 73.5002C56.8405 75.7433 57.3788 77.8606 58.3333 79.7302H29.4005C26.1531 79.7302 23.5205 77.0976 23.5205 73.8502V24.5002ZM59.5521 81.6902H29.4005C25.0706 81.6902 21.5605 78.1801 21.5605 73.8502V24.5002C21.5605 20.1702 25.0706 16.6602 29.4005 16.6602H56.799C58.8783 16.6602 60.8725 17.4862 62.3428 18.9564L73.1643 29.7779C74.6345 31.2482 75.4605 33.2424 75.4605 35.3217V35.6567L75.4608 35.7264L75.4605 60.681C80.618 62.6536 84.2805 67.6492 84.2805 73.5002C84.2805 81.0775 78.1379 87.2202 70.5605 87.2202C66.053 87.2202 62.0532 85.0465 59.5521 81.6902ZM32.6276 30.6672C33.0103 30.2845 33.6308 30.2845 34.0135 30.6672L37.4855 34.1392L40.9576 30.6672C41.3403 30.2845 41.9608 30.2845 42.3435 30.6672C42.7262 31.0499 42.7262 31.6704 42.3435 32.0531L38.8715 35.5252L42.3435 38.9972C42.7262 39.3799 42.7262 40.0004 42.3435 40.3831C41.9608 40.7658 41.3403 40.7658 40.9576 40.3831L37.4855 36.9111L34.0135 40.3831C33.6308 40.7658 33.0103 40.7658 32.6276 40.3831C32.2449 40.0004 32.2449 39.3799 32.6276 38.9972L36.0996 35.5252L32.6276 32.0531C32.2449 31.6704 32.2449 31.0499 32.6276 30.6672ZM32.3405 49.4902C32.3405 48.1371 33.4374 47.0402 34.7905 47.0402H49.4905C50.8436 47.0402 51.9405 48.1371 51.9405 49.4902C51.9405 50.8433 50.8436 51.9402 49.4905 51.9402H34.7905C33.4374 51.9402 32.3405 50.8433 32.3405 49.4902ZM34.7905 49.0002C34.5199 49.0002 34.3005 49.2195 34.3005 49.4902C34.3005 49.7608 34.5199 49.9802 34.7905 49.9802H49.4905C49.7612 49.9802 49.9805 49.7608 49.9805 49.4902C49.9805 49.2195 49.7612 49.0002 49.4905 49.0002H34.7905ZM34.7905 54.8802C33.4374 54.8802 32.3405 55.9771 32.3405 57.3302C32.3405 58.6833 33.4375 59.7802 34.7905 59.7802H62.2305C63.5836 59.7802 64.6805 58.6833 64.6805 57.3302C64.6805 55.9771 63.5836 54.8802 62.2305 54.8802H34.7905ZM34.3005 57.3302C34.3005 57.0595 34.5199 56.8402 34.7905 56.8402H62.2305C62.5012 56.8402 62.7205 57.0595 62.7205 57.3302C62.7205 57.6008 62.5012 57.8202 62.2305 57.8202H34.7905C34.5199 57.8202 34.3005 57.6008 34.3005 57.3302ZM78.4805 24.7214C77.8371 23.8081 76.6784 23.4136 75.6114 23.7447C73.9414 24.2629 73.262 26.2589 74.269 27.6883L76.4048 30.72C77.0667 31.6595 77.425 32.7793 77.4314 33.9286L77.4522 37.6543C77.4601 39.0793 78.6209 40.2285 80.046 40.2222C81.4727 40.2159 82.624 39.0539 82.617 37.6271L82.597 33.5805C82.5872 31.6034 81.9715 29.6768 80.8328 28.0604L78.4805 24.7214ZM76.1923 25.6167C76.4473 25.5375 76.7244 25.6318 76.8782 25.8502L79.2305 29.1892C80.1384 30.4779 80.6292 32.0139 80.637 33.5902L80.657 37.6368C80.6587 37.9807 80.3812 38.2607 80.0373 38.2623C79.6939 38.2638 79.4141 37.9868 79.4122 37.6433L79.3913 33.9177C79.3827 32.368 78.8996 30.8581 78.0071 29.5911L75.8713 26.5595C75.6306 26.2178 75.793 25.7406 76.1923 25.6167ZM58.8005 73.5002C58.8005 67.0053 64.0657 61.7402 70.5605 61.7402C77.0554 61.7402 82.3205 67.0053 82.3205 73.5002C82.3205 79.995 77.0554 85.2602 70.5605 85.2602C64.0657 85.2602 58.8005 79.995 58.8005 73.5002ZM68.1105 67.1302C68.1105 65.7771 69.2074 64.6802 70.5605 64.6802C71.9136 64.6802 73.0105 65.7771 73.0105 67.1302V73.0102C73.0105 74.3633 71.9136 75.4602 70.5605 75.4602C69.2074 75.4602 68.1105 74.3633 68.1105 73.0102V67.1302ZM70.5605 66.6402C70.2899 66.6402 70.0705 66.8595 70.0705 67.1302V73.0102C70.0705 73.2808 70.2899 73.5002 70.5605 73.5002C70.8312 73.5002 71.0505 73.2808 71.0505 73.0102V67.1302C71.0505 66.8595 70.8312 66.6402 70.5605 66.6402ZM70.5605 82.3202C69.2074 82.3202 68.1105 81.2233 68.1105 79.8702C68.1105 78.5171 69.2074 77.4202 70.5605 77.4202C71.9136 77.4202 73.0105 78.5171 73.0105 79.8702C73.0105 81.2233 71.9136 82.3202 70.5605 82.3202ZM70.0705 79.8702C70.0705 80.1408 70.2899 80.3602 70.5605 80.3602C70.8312 80.3602 71.0505 80.1408 71.0505 79.8702C71.0505 79.5995 70.8312 79.3802 70.5605 79.3802C70.2899 79.3802 70.0705 79.5995 70.0705 79.8702Z\",\"fill\":\"black\",\"fill-opacity\":\"0.5\"}})]),_c('p',{staticClass:\"mb-2 mt-4\",staticStyle:{\"font-size\":\"18px\",\"font-style\":\"normal\",\"font-weight\":\"350\"}},[_vm._v(\"You don’t have any data for the reconciliation process!\")]),_c('p',{staticClass:\"mb-2\",staticStyle:{\"font-size\":\"14px\",\"font-style\":\"normal\",\"font-weight\":\"325\",\"color\":\"rgba(0, 0, 0, 0.50)\"}},[_vm._v(\"Please upload the files you want to reconcile in order to check the results.\")]),(_vm.userPermissions.includes('create-recons') || _vm.userRoles.includes('admin') || _vm.userRoles.includes('sub-admin'))?_c('button',{staticClass:\"btn btn-primary mt-4\",staticStyle:{\"height\":\"44px\",\"line-height\":\"20px\"},on:{\"click\":function($event){return _vm.$router.push({name: 'Upload Files', query: {showFileUploadmodal: true}})}}},[_c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"20\",\"height\":\"20\",\"viewBox\":\"0 0 20 20\",\"fill\":\"none\"}},[_c('path',{attrs:{\"d\":\"M13.6997 7.41634C16.6997 7.67467 17.9247 9.21634 17.9247 12.5913V12.6997C17.9247 16.4247 16.4331 17.9163 12.7081 17.9163H7.28307C3.55807 17.9163 2.06641 16.4247 2.06641 12.6997V12.5913C2.06641 9.24134 3.27474 7.69967 6.22474 7.42467M9.99974 12.4997V3.01634M12.7914 4.87467L9.99974 2.08301L7.20807 4.87467\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}})]),_vm._v(\" \"+_vm._s(_vm.$t(\"views.reconciliation.add_files\"))+\" \")]):_vm._e()]):_vm._e(),(!_vm.loadingSankey && _vm.reconSummary.dataFields.length > 0)?_c('div',[_c('div',{staticClass:\"d-flex justify-content-between flex-wrap section-header px-4 py-3 mt-4\",staticStyle:{\"gap\":\"10px\"}},[_c('div',[_c('p',{staticClass:\"section-title\"},[_vm._v(_vm._s(_vm.tableTitle))]),_c('p',{staticClass:\"section-text text-black\"},[_vm._v(\"DS1 = \"+_vm._s(_vm.dataSourceA.display_name))]),_c('p',{staticClass:\"section-text text-black\"},[_vm._v(\"DS2 = \"+_vm._s(_vm.dataSourceB.display_name))])]),_c('DownloadBtn',{staticClass:\"my-auto\",attrs:{\"downloading\":_vm.downloading},on:{\"download-button-clicked\":_vm.downloadData}})],1),_c('b-modal',{attrs:{\"id\":\"download-modal\",\"no-close-on-backdrop\":\"\",\"hide-footer\":\"\",\"hide-header\":\"\"}},[_c('div',{staticClass:\"d-flex justify-content-between mb-4\",staticStyle:{\"padding-bottom\":\"25px\"}},[_c('h5',{staticClass:\"text-black\",staticStyle:{\"font-size\":\"24px\",\"font-weight\":\"400\",\"line-height\":\"24px\",\"letter-spacing\":\"-0.36px\"}},[_vm._v(\"File Too Large to Download\")]),_c('img',{staticClass:\"modal-close my-auto\",attrs:{\"src\":require(\"@/assets/images/close.svg\"),\"alt\":\"close\"},on:{\"click\":_vm.toggleDownloadModal}})]),_c('p',{staticClass:\"mb-2 pb-1\"},[_vm._v(\"The file is too large to download. It will be sent to your email for easier access. Would you like to send it to the email below?\")]),_c('div',{staticClass:\"d-flex mb-3\",staticStyle:{\"border-radius\":\"12px\",\"border\":\"2px solid rgba(220, 218, 213, 0.30)\",\"padding\":\"10px\"}},[_c('div',{staticClass:\"p-1\",staticStyle:{\"height\":\"34px\",\"border-radius\":\"8px\",\"border\":\"1px solid rgba(220, 218, 213, 0.30)\",\"background\":\"rgba(220, 218, 213, 0.30)\"}},[_c('img',{staticStyle:{\"height\":\"24px\",\"width\":\"24px\"},attrs:{\"src\":require(\"@/assets/images/sms.svg\"),\"alt\":\"Email\"}})]),_c('p',{staticClass:\"my-auto font-14px ml-3\",staticStyle:{\"font-weight\":\"350\",\"line-height\":\"20px\"}},[_vm._v(_vm._s(_vm.$store.state.auth.currentUser.email_address))])]),_c('div',{staticClass:\"d-flex justify-content-end\"},[_c('b-btn',{staticClass:\"mr-2 bg-white text-dark cancel\",attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.toggleDownloadModal}},[_vm._v(\"Cancel\")]),_c('b-btn',{staticClass:\"btn-padding filter-btn\",attrs:{\"variant\":\"primary\"},on:{\"click\":_vm.sendOverEmail}},[_vm._v(\" Send Over Email \"),_c('svg',{staticClass:\"ml-2\",attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":\"18\",\"height\":\"18\",\"viewBox\":\"0 0 18 18\",\"fill\":\"none\"}},[_c('path',{attrs:{\"d\":\"M1.5 6.375C1.5 3.75 3 2.625 5.25 2.625H12.75C15 2.625 16.5 3.75 16.5 6.375V11.625C16.5 14.25 15 15.375 12.75 15.375H5.25\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-miterlimit\":\"10\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}}),_c('path',{attrs:{\"d\":\"M12.75 6.75L10.4025 8.625C9.63 9.24 8.3625 9.24 7.59 8.625L5.25 6.75\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-miterlimit\":\"10\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}}),_c('path',{attrs:{\"d\":\"M1.5 12.375H6\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-miterlimit\":\"10\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}}),_c('path',{attrs:{\"d\":\"M1.5 9.375H3.75\",\"stroke\":\"white\",\"stroke-width\":\"1.5\",\"stroke-miterlimit\":\"10\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}})])])],1)]),_c('b-table',{staticClass:\"table-custom\",attrs:{\"items\":_vm.tableDataFromStore,\"fields\":_vm.tableColumns,\"responsive\":\"sm\",\"sticky-header\":\"500px\",\"show-empty\":\"\",\"empty-text\":_vm.$t('common.no-records'),\"busy\":_vm.loadingTable,\"hover\":\"\"},on:{\"sort-changed\":_vm.fetchReconSummaryRecords},scopedSlots:_vm._u([{key:\"head(transaction_id)\",fn:function(){return [_vm._v(\" \"+_vm._s(_vm.dataSourceA && _vm.paymentChannelListMap[_vm.dataSourceA.key].category === 'MARKETPLACE' ? 'Order Number' : 'Txn Ref')+\" \")]},proxy:true},{key:\"head(amount)\",fn:function(data){return [_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.top\",modifiers:{\"hover\":true,\"top\":true}}],attrs:{\"title\":_vm.column_category == 'settlement' ? 'DS2' : 'DS1'}},[_vm._v(\" \"+_vm._s(_vm.$t(data.label))+\" \"),_c('b-icon',{attrs:{\"icon\":\"info-circle-fill\"}})],1)]}},{key:\"head(quantity)\",fn:function(data){return [_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.top\",modifiers:{\"hover\":true,\"top\":true}}],attrs:{\"title\":_vm.column_category == 'settlement' ? 'DS2' : 'DS1'}},[_vm._v(\" \"+_vm._s(_vm.$t(data.label))+\" \"),_c('b-icon',{attrs:{\"icon\":\"info-circle-fill\"}})],1)]}},{key:\"head(amount_mismatch)\",fn:function(data){return [_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.top\",modifiers:{\"hover\":true,\"top\":true}}],attrs:{\"title\":\"DS1 - DS2\"}},[_vm._v(\" \"+_vm._s(_vm.$t(data.label))+\" \"),_c('b-icon',{attrs:{\"icon\":\"info-circle-fill\"}})],1)]}},{key:\"head(fee_mismatch)\",fn:function(data){return [_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.top\",modifiers:{\"hover\":true,\"top\":true}}],attrs:{\"title\":\"DS1 - DS2\"}},[_vm._v(\" \"+_vm._s(_vm.$t(data.label))+\" \"),_c('b-icon',{attrs:{\"icon\":\"info-circle-fill\"}})],1)]}},{key:\"head(quantity_mismatch)\",fn:function(data){return [_c('span',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover.top\",modifiers:{\"hover\":true,\"top\":true}}],attrs:{\"title\":\"DS1 - DS2\"}},[_vm._v(\" \"+_vm._s(_vm.$t(data.label))+\" \"),_c('b-icon',{attrs:{\"icon\":\"info-circle-fill\"}})],1)]}},{key:\"cell()\",fn:function(ref){\nvar field = ref.field;\nvar item = ref.item;\nvar value = ref.value;\nreturn [(field.display_name)?_c('div',[(field.data_type === 'amount')?_c('span',[_vm._v(\" \"+_vm._s((Number(item[field.parent_key][field.col_key])).toLocaleString(\"en-US\", {style: \"currency\",currency: _vm.pageCurrency || (_vm.dataSourceA ? _vm.dataSourceA.currency : \"USD\")}))+\" \")]):_c('span',[_vm._v(\" \"+_vm._s(item[field.parent_key][field.col_key])+\" \")])]):_c('div',[_vm._v(\" \"+_vm._s(value)+\" \")])]}},{key:\"cell(record_created_at)\",fn:function(row){return [_c('p',{staticClass:\"table-date\"},[_vm._v(_vm._s(_vm._f(\"date\")(row.value)))]),_c('p',{staticClass:\"table-time\"},[_vm._v(\"at \"+_vm._s(_vm._f(\"time\")(row.value)))])]}},{key:\"cell(amount)\",fn:function(row){return [_vm._v(\" \"+_vm._s((row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: _vm.pageCurrency || (_vm.dataSourceA ? _vm.dataSourceA.currency : \"USD\")}))+\" \")]}},{key:\"cell(sku_id)\",fn:function(ref){\nvar value = ref.value;\nreturn [_vm._v(\" \"+_vm._s(value || 'NA')+\" \")]}},{key:\"cell(tags)\",fn:function(ref){\nvar value = ref.value;\nreturn _vm._l((value),function(tag){return _c('div',{key:tag,staticClass:\"mb-1 badge d-block custom-status\",class:{\n 'badge-soft-danger': tag === 'refund',\n 'badge-soft-success': tag === 'charge',\n 'badge-soft-warning': tag === 'adjustment',\n 'badge-soft-secondary': tag === 'chargeback',\n 'badge-orange': tag === 'chargeback won',\n 'badge-soft-info': tag === 'dispute_reversal',\n 'badge-purple': tag === 'refund_failure',\n 'badge-gold': tag === 'FB/IG Tax',\n 'badge-crimson-red': tag === 'exchange rate',\n }},[_vm._v(\" \"+_vm._s(tag)+\" \")])})}},{key:\"cell(amount_mismatch)\",fn:function(row){return [_vm._v(\" \"+_vm._s((row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: _vm.pageCurrency || (_vm.dataSourceA ? _vm.dataSourceA.currency : \"USD\")}))+\" \")]}},{key:\"cell(fee_mismatch)\",fn:function(row){return [_vm._v(\" \"+_vm._s((row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: _vm.pageCurrency || (_vm.dataSourceA ? _vm.dataSourceA.currency : \"USD\")}))+\" \")]}},{key:\"cell(tax_mismatch)\",fn:function(row){return [_vm._v(\" \"+_vm._s((row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: _vm.pageCurrency || (_vm.dataSourceA ? _vm.dataSourceA.currency : \"USD\")}))+\" \")]}},{key:\"cell(status)\",fn:function(ref){\n var value = ref.value;\nreturn [_c('div',{staticClass:\"badge custom-status\",class:{\n 'badge-soft-danger': value === 'unreconciled',\n 'badge-soft-success': value === 'reconciled'\n },staticStyle:{\"text-transform\":\"capitalize\"}},[_vm._v(_vm._s(value))])]}},{key:\"table-busy\",fn:function(){return [_c('div',{staticClass:\"text-center\"},[_c('b-spinner',{staticClass:\"align-middle\",attrs:{\"small\":true}})],1)]},proxy:true}],null,false,1113855297)}),_c('div',{staticClass:\"d-flex justify-content-between\"},[_c('per-page',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hidePagination),expression:\"!hidePagination\"}],attrs:{\"currentPage\":_vm.currentPage,\"totalRows\":_vm.totalElementsFromStore,\"tableRowsCount\":_vm.tableDataFromStore.length},on:{\"input\":_vm.fetchReconSummaryRecords},model:{value:(_vm.perPage),callback:function ($$v) {_vm.perPage=$$v},expression:\"perPage\"}}),_c('b-pagination',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hidePagination),expression:\"!hidePagination\"}],staticClass:\"my-auto\",attrs:{\"per-page\":_vm.perPage,\"current-page\":_vm.currentPage,\"total-rows\":_vm.totalElementsFromStore},on:{\"input\":_vm.fetchReconSummaryRecords},model:{value:(_vm.currentPage),callback:function ($$v) {_vm.currentPage=$$v},expression:\"currentPage\"}})],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\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","/**\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","/**\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 { 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","/**\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.p1000`\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 * @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","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","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 //console.log(type, dom);\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 //console.log(event);\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\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 $object.each(styles, (key, value) => {\r\n this.setStyle(key, value);\r\n });\r\n }\r\n catch (err) {\r\n // Create an empty rule on failed selectors\r\n this._rule = new CSSStyleRule();\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\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 * ============================================================================\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 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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * Returns a color that is `percent` brighter than the reference color.\r\n *\r\n * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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 * @ignore Exclude from docs\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\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 * @deprecated\r\n */\r\n// export function unshiftThemeClass(settings: any, themeClass: string) {\r\n// \tlet themeClasses = settings.themeClasses;\r\n// \tif (!themeClasses) {\r\n// \t\tthemeClasses = [];\r\n// \t}\r\n// \tthemeClasses.unshift(themeClass);\r\n// \tsettings.themeClasses = themeClasses;\r\n// }\r\n/**\r\n * @ignore\r\n * @deprecated\r\n */\r\n// export function pushThemeClass(settings: any, themeClass: string) {\r\n// \tlet themeClasses = settings.themeClasses;\r\n// \tif (!themeClasses) {\r\n// \t\tthemeClasses = [];\r\n// \t}\r\n// \tthemeClasses.push(themeClass);\r\n// \tsettings.themeClasses = themeClasses;\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","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\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 true;\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 false;\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 true;\r\n }\r\n }\r\n }\r\n else {\r\n return false;\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 { 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\nexport function boundsOverlap(bounds1, bounds2) {\r\n return !(bounds1.bottom < bounds2.top || bounds2.bottom < bounds1.top || bounds1.right < bounds2.left || bounds2.right < bounds1.left);\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.5.0\"\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//# 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 { 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, \"_playingAnimations\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 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 // 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 if (!this.isDisposed()) {\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 animation._reset(currentTime);\r\n this._set(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n this._set(key, animation._value(diff));\r\n }\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 animation._reset(currentTime);\r\n this._setPrivate(key, animation._value(1));\r\n }\r\n }\r\n else {\r\n this._setPrivate(key, animation._value(diff));\r\n }\r\n }\r\n });\r\n return this._playingAnimations !== 0;\r\n }\r\n else {\r\n return false;\r\n }\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 * 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 * @ignore\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 * @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 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 --this._playingAnimations;\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 --this._playingAnimations;\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._playingAnimations;\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._playingAnimations;\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 _setDefault(key, value) {\r\n if (!(key in this._settings)) {\r\n super.set(key, value);\r\n }\r\n }\r\n _setRawDefault(key, value) {\r\n if (!(key in this._settings)) {\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() {\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) {\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) {\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;\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 (!$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 _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(() => this.showTooltip(), 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\")) {\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 }\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\")) {\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 while (parent != null) {\r\n angle += parent.get(\"rotation\", 0);\r\n parent = parent.parent;\r\n }\r\n let x = e.point.x - dragEvent.point.x;\r\n let y = e.point.y - dragEvent.point.y;\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 }\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 this.showTooltip();\r\n this._handleOver();\r\n }\r\n /**\r\n * Simulate unhover over element.\r\n */\r\n unhover() {\r\n this.hideTooltip();\r\n this._handleOut();\r\n }\r\n /**\r\n * Shows element's [[Tooltip]].\r\n */\r\n showTooltip(point) {\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 * 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 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 //console.log(this.isDirty(\"repetition\"), this.isDirty(\"width\"), this.isDirty(\"height\"), this.isDirty(\"rotation\"), this.isDirty(\"color\"), this.isDirty(\"strokeWidth\"), this.isDirty(\"strokeDasharray\"), this.isDirty(\"strokeDashoffset\"), this.isDirty(\"colorOpacity\"), this.isDirty(\"fillOpacity\"))\t\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\"];\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) {\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 //const bounds = this._display.getLocalBounds();\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 /*\r\n let changed = false;\r\n if (fill && (!fillPattern.get(\"fill\") || fillPattern.get(\"fillInherited\"))) {\r\n fillPattern.set(\"fill\", fill);\r\n fillPattern.set(\"fillInherited\", true)\r\n changed = true;\r\n }\r\n if (stroke && (!fillPattern.get(\"color\") || fillPattern.get(\"colorInherited\"))) {\r\n fillPattern.set(\"color\", stroke);\r\n fillPattern.set(\"colorInherited\", true)\r\n changed = true;\r\n }\r\n if (changed) {\r\n // @todo: is this OK?\r\n fillPattern._changed();\r\n }\r\n */\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() {\r\n if (super._applyThemes()) {\r\n this.eachChildren((child) => {\r\n child._applyThemes();\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 }\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 _updateChildren() {\r\n if (this.isDirty(\"html\")) {\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 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\") * 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 { 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 ]\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 }\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\")) {\r\n let fill = this.get(\"fill\");\r\n 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 const text = this.get(\"text\", \"\");\r\n return this.get(\"populateText\") ? populateString(this, text) : text;\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 \"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 ]\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 $array.each(this._textKeys, (property) => {\r\n this._text.set(property, this.get(property));\r\n });\r\n if (this.isDirty(\"maxWidth\")) {\r\n this._setMaxDimentions();\r\n }\r\n if (this.isDirty(\"maxHeight\")) {\r\n this._setMaxDimentions();\r\n }\r\n if (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 this._text.set(\"text\", \"\");\r\n }\r\n else {\r\n this._text.set(\"text\", this.get(\"text\"));\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\");\r\n }\r\n else if (textAlign == \"right\" || textAlign == \"end\") {\r\n x = -this.get(\"paddingRight\");\r\n }\r\n }\r\n this.text.set(\"x\", x);\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 maxWidth = this.get(\"maxWidth\", this.getPrivate(\"maxWidth\", Infinity));\r\n if ($type.isNumber(maxWidth)) {\r\n this.text.set(vertical ? \"maxHeight\" : \"maxWidth\", maxWidth - this.get(\"paddingLeft\", 0) - this.get(\"paddingRight\", 0));\r\n }\r\n else {\r\n this.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 this.text.set(vertical ? \"maxWidth\" : \"maxHeight\", maxHeight - this.get(\"paddingTop\", 0) - this.get(\"paddingBottom\", 0));\r\n }\r\n else {\r\n this.text.set(vertical ? \"maxWidth\" : \"maxHeight\", undefined);\r\n }\r\n }\r\n _setDataItem(dataItem) {\r\n super._setDataItem(dataItem);\r\n this._markDirtyKey(\"text\");\r\n if (this.text.get(\"populateText\")) {\r\n this.text.markDirtyText();\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\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 this.set(\"background\", PointedRectangle.new(this._root, {\r\n themeTags: [\"tooltip\", \"background\"]\r\n }));\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 $utils.addEventListener(htmlElement, \"pointerover\", (_ev) => {\r\n this._htmlContentHovered = true;\r\n });\r\n $utils.addEventListener(htmlElement, \"pointerout\", (_ev) => {\r\n this._htmlContentHovered = false;\r\n });\r\n }\r\n }));\r\n this._root._tooltips.push(this);\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 }\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 let d = Math.pow(10, details.decimals.passive);\r\n value = Math.round(value * d) / d;\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\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 format(source, format) {\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) {\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);\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) {\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) {\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);\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);\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 // 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 = Math.floor(tstamp / this._getUnitValue(unit));\r\n res = res.replace($type.PLACEHOLDER, $utils.padString(ints, digits, \"0\"));\r\n // Reduce timestamp\r\n tstamp -= ints * this._getUnitValue(unit);\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 //let diffUnit = this.getValueUnit(Math.abs(maxValue - value), baseUnit);\r\n //console.log(maxUnit, diffUnit);\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 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\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 * ------------------------------------------------------------------------\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\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\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(\"Graphics\", [\"button\", \"icon\"]);\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 });\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\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);\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() {\r\n return !this.inactive && (this.interactive || this._renderer._forceInteractive > 0);\r\n }\r\n _isInteractiveMask() {\r\n return this._isInteractive();\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 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()) {\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(this.subStatus(status));\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() {\r\n return this.interactiveChildren || super._isInteractiveMask();\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 path(_context) { }\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}\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();\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.path(ghostContext);\r\n op.colorize(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() && !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() && !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();\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()) {\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 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 = -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 = 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();\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 const chars = chunk.text.match(/./ug) || [];\r\n if (rtl) {\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 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 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 if (rtl) {\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()) {\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 /*protected _mouseMoveThrottler: Throttler = new Throttler(() => {\r\n this._dispatchGlobalMousemove(this._lastPointerMoveEvent.event, this._lastPointerMoveEvent.native);\r\n });\r\n */\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 _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 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 _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(window, $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, \"_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 = 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 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 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 { 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, \"_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 }\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 if (ev.keyCode == 16) {\r\n this._isShift = true;\r\n }\r\n else if (ev.keyCode == 9) {\r\n this._isShift = ev.shiftKey;\r\n }\r\n }));\r\n this._disposers.push($utils.addEventListener(window, \"keyup\", (ev) => {\r\n if (ev.keyCode == 16) {\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.keyCode == 27) {\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 switch (ev.keyCode) {\r\n case 13:\r\n ev.preventDefault();\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 return;\r\n case 37:\r\n dragOffsetX = -6;\r\n break;\r\n case 39:\r\n dragOffsetX = 6;\r\n break;\r\n case 38:\r\n dragOffsetY = -6;\r\n break;\r\n case 40:\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 keyCode = ev.keyCode;\r\n switch (keyCode) {\r\n case 37:\r\n case 39:\r\n case 38:\r\n case 40:\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 ? true : false;\r\n });\r\n let index = items.indexOf(focusedSprite);\r\n const lastIndex = items.length - 1;\r\n index += (keyCode == 39 || keyCode == 40) ? 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 $array.keepIf(this._animations, (animation) => {\r\n return animation._runAnimation(currentTime);\r\n });\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 this._runAnimations(currentTime);\r\n this._runDirties();\r\n this._render();\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 this._animations.length === 0 &&\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 if (this._dirty[entity.uid] === undefined) {\r\n this._isDirty = true;\r\n this._dirty[entity.uid] = entity;\r\n this._startTicker();\r\n }\r\n }\r\n _addDirtyParent(parent) {\r\n if (this._dirtyParents[parent.uid] === undefined) {\r\n this._isDirty = true;\r\n this._isDirtyParents = true;\r\n this._dirtyParents[parent.uid] = parent;\r\n this._startTicker();\r\n }\r\n }\r\n _addDirtyBounds(entity) {\r\n if (this._dirtyBounds[entity.uid] === undefined) {\r\n this._isDirty = true;\r\n this._dirtyBounds[entity.uid] = entity;\r\n this._startTicker();\r\n }\r\n }\r\n _addDirtyPosition(sprite) {\r\n if (this._dirtyPositions[sprite.uid] === undefined) {\r\n this._isDirty = true;\r\n this._dirtyPositions[sprite.uid] = sprite;\r\n this._startTicker();\r\n }\r\n }\r\n _addAnimation(animation) {\r\n // TODO use numeric id instead\r\n if (this._animations.indexOf(animation) === -1) {\r\n this._animations.push(animation);\r\n this._startTicker();\r\n }\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) {\r\n focusElement.setAttribute(\"aria-checked\", ariaChecked ? \"true\" : \"false\");\r\n }\r\n else {\r\n focusElement.removeAttribute(\"aria-checked\");\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, index);\r\n }));\r\n disposers.push($utils.addEventListener(focusElement, \"blur\", (ev) => {\r\n this._handleBlur(ev, index);\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 let x = bounds.left - 2;\r\n let y = bounds.top - 2;\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 + 4) + \"px\";\r\n focusElement.style.height = (height + 4) + \"px\";\r\n }\r\n _handleFocus(ev, index) {\r\n if (this._a11yD == true) {\r\n return;\r\n }\r\n // Get element\r\n const focused = this._tabindexes[index];\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, _index) {\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 }\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 // 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 w = bbox.width;\r\n h = bbox.height;\r\n target._adjustedLocalBounds = { left: 0, right: 0, top: 0, bottom: 0 };\r\n target.setPrivate(\"minWidth\", w);\r\n target.setPrivate(\"minHeight\", h);\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 }\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 }\r\n $array.remove(this._htmlEnabledContainers, target);\r\n }\r\n}\r\n//# sourceMappingURL=Root.js.map","import { Entity } from \"./Entity\";\r\nimport { Color } from \"./Color\";\r\n/**\r\n * An object which holds list of colors and can generate new ones.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/#Color_sets} for more info\r\n */\r\nexport class ColorSet extends Entity {\r\n //protected _currentPass: number = 0;\r\n _afterNew() {\r\n // Applying themes because color set will not have parent\r\n super._afterNewApplyThemes();\r\n this._dirty[\"colors\"] = false;\r\n }\r\n _beforeChanged() {\r\n if (this.isDirty(\"colors\")) {\r\n this.reset();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n generateColors() {\r\n this.setPrivate(\"currentPass\", this.getPrivate(\"currentPass\", 0) + 1);\r\n const pass = this.getPrivate(\"currentPass\");\r\n const colors = this.get(\"colors\", [this.get(\"baseColor\", Color.fromHex(0xff0000))]);\r\n if (!this.getPrivate(\"numColors\")) {\r\n this.setPrivate(\"numColors\", colors.length);\r\n }\r\n //const len = colors.length;\r\n const len = this.getPrivate(\"numColors\");\r\n //const start = len - this.getPrivate(\"numColors\")!;\r\n const start = 0;\r\n const passOptions = this.get(\"passOptions\");\r\n const reuse = this.get(\"reuse\");\r\n for (let i = start; i < len; i++) {\r\n if (reuse) {\r\n colors.push(colors[i]);\r\n }\r\n else {\r\n const hsl = colors[i].toHSL();\r\n let h = hsl.h + (passOptions.hue || 0) * pass;\r\n while (h > 1)\r\n h -= 1;\r\n let s = hsl.s + (passOptions.saturation || 0) * pass;\r\n //if (s > 1) s -= Math.floor(s);\r\n if (s > 1)\r\n s = 1;\r\n if (s < 0)\r\n s = 0;\r\n let l = hsl.l + (passOptions.lightness || 0) * pass;\r\n //if (l > 1) l -= Math.floor(l);\r\n while (l > 1)\r\n l -= 1;\r\n colors.push(Color.fromHSL(h, s, l));\r\n }\r\n }\r\n }\r\n /**\r\n * Returns a [[Color]] at specific index.\r\n *\r\n * If there's no color at this index, a new color is generated.\r\n *\r\n * @param index Index\r\n * @return Color\r\n */\r\n getIndex(index) {\r\n const colors = this.get(\"colors\", []);\r\n const saturation = this.get(\"saturation\");\r\n if (index >= colors.length) {\r\n this.generateColors();\r\n return this.getIndex(index);\r\n }\r\n return saturation != null ? Color.saturate(colors[index], saturation) : colors[index];\r\n }\r\n /**\r\n * Returns next [[Color]] in the list.\r\n *\r\n * If the list is out of colors, new ones are generated dynamically.\r\n */\r\n next() {\r\n let currentStep = this.getPrivate(\"currentStep\", this.get(\"startIndex\", 0));\r\n this.setPrivate(\"currentStep\", currentStep + this.get(\"step\", 1));\r\n return this.getIndex(currentStep);\r\n }\r\n /**\r\n * Resets counter to the start of the list, so the next call for `next()` will\r\n * return the first color.\r\n */\r\n reset() {\r\n this.setPrivate(\"currentStep\", this.get(\"startIndex\", 0));\r\n this.setPrivate(\"currentPass\", 0);\r\n }\r\n}\r\nObject.defineProperty(ColorSet, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"ColorSet\"\r\n});\r\nObject.defineProperty(ColorSet, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Entity.classNames.concat([ColorSet.className])\r\n});\r\n//# sourceMappingURL=ColorSet.js.map","import { Theme } from \"../../core/Theme\";\r\nimport { percent, p100, p50 } from \"../../core/util/Percent\";\r\nimport { ColorSet } from \"../../core/util/ColorSet\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $ease from \"../../core/util/Ease\";\r\n/**\r\n * @ignore\r\n */\r\nexport class FlowDefaultTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n const ic = this._root.interfaceColors;\r\n const r = this.rule.bind(this);\r\n /**\r\n * ========================================================================\r\n * charts/flow\r\n * ========================================================================\r\n */\r\n r(\"Flow\").setAll({\r\n width: p100,\r\n height: p100,\r\n paddingLeft: 10,\r\n paddingRight: 10,\r\n paddingTop: 10,\r\n paddingBottom: 10,\r\n hiddenSize: 0.05,\r\n minSize: 0,\r\n minHiddenValue: 0\r\n });\r\n r(\"FlowNodes\").setAll({\r\n colors: ColorSet.new(this._root, {}),\r\n legendLabelText: \"{name}\",\r\n legendValueText: \"{sumOutgoing.formatNumber('#.#')}\"\r\n });\r\n r(\"FlowNode\").setAll({\r\n setStateOnChildren: true,\r\n cursorOverStyle: \"pointer\",\r\n toggleKey: \"disabled\"\r\n });\r\n r(\"FlowNode\").states.create(\"disabled\", {}); // do not remove\r\n r(\"FlowNode\", [\"unknown\"]).setAll({\r\n draggable: false,\r\n opacity: 0\r\n });\r\n r(\"Label\", [\"flow\"]).states.create(\"disabled\", {\r\n fill: ic.get(\"disabled\")\r\n });\r\n r(\"RadialLabel\", [\"flow\", \"node\"]).setAll({\r\n text: \"{name}\",\r\n populateText: true\r\n });\r\n r(\"FlowLink\").setAll({\r\n fillStyle: \"gradient\",\r\n strokeStyle: \"gradient\"\r\n });\r\n r(\"FlowLink\", [\"source\", \"unknown\"]).setAll({});\r\n r(\"FlowLink\", [\"target\", \"unknown\"]).setAll({});\r\n r(\"FlowNode\").events.on(\"pointerover\", (e) => {\r\n const dataItem = e.target.dataItem;\r\n if (dataItem) {\r\n const outgoing = dataItem.get(\"outgoingLinks\");\r\n if (outgoing) {\r\n $array.each(outgoing, (linkDataItem) => {\r\n const link = linkDataItem.get(\"link\");\r\n link.hover();\r\n link.hideTooltip();\r\n });\r\n }\r\n const incoming = dataItem.get(\"incomingLinks\");\r\n if (incoming) {\r\n $array.each(incoming, (linkDataItem) => {\r\n const link = linkDataItem.get(\"link\");\r\n link.hover();\r\n link.hideTooltip();\r\n });\r\n }\r\n }\r\n let rectangle = dataItem.get(\"slice\") || dataItem.get(\"rectangle\");\r\n if (rectangle && rectangle.get(\"tooltipText\")) {\r\n rectangle.showTooltip();\r\n }\r\n });\r\n r(\"FlowNode\").events.on(\"pointerout\", (e) => {\r\n const dataItem = e.target.dataItem;\r\n if (dataItem) {\r\n const outgoing = dataItem.get(\"outgoingLinks\");\r\n if (outgoing) {\r\n $array.each(outgoing, (linkDataItem) => {\r\n linkDataItem.get(\"link\").unhover();\r\n });\r\n }\r\n const incoming = dataItem.get(\"incomingLinks\");\r\n if (incoming) {\r\n $array.each(incoming, (linkDataItem) => {\r\n linkDataItem.get(\"link\").unhover();\r\n });\r\n }\r\n }\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/flow: Sankey\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Sankey\").setAll({\r\n orientation: \"horizontal\",\r\n nodeAlign: \"justify\",\r\n linkTension: 0.5,\r\n nodePadding: 10,\r\n nodeWidth: 10\r\n });\r\n // Class: RoundedRectangle\r\n r(\"RoundedRectangle\", [\"sankey\", \"node\", \"shape\"]).setAll({\r\n cornerRadiusTL: 0,\r\n cornerRadiusBL: 0,\r\n cornerRadiusTR: 0,\r\n cornerRadiusBR: 0\r\n });\r\n r(\"RoundedRectangle\", [\"shape\"]).states.create(\"disabled\", {\r\n fill: ic.get(\"disabled\")\r\n });\r\n r(\"SankeyLink\").setAll({\r\n controlPointDistance: 0.2\r\n });\r\n r(\"FlowNode\", [\"sankey\"]).setAll({\r\n draggable: true\r\n });\r\n {\r\n const rule = r(\"Graphics\", [\"sankey\", \"link\"]);\r\n rule.setAll({\r\n fillOpacity: 0.2,\r\n strokeOpacity: 0,\r\n interactive: true,\r\n tooltipText: \"{sourceId} - {targetId}: {value}\"\r\n });\r\n setColor(rule, \"fill\", ic, \"grid\");\r\n }\r\n r(\"Graphics\", [\"sankey\", \"link\"]).states.create(\"hover\", { fillOpacity: 0.5 });\r\n r(\"Label\", [\"sankey\", \"node\"]).setAll({\r\n text: \"{name}\",\r\n populateText: true\r\n });\r\n r(\"Label\", [\"sankey\", \"horizontal\"]).setAll({\r\n y: p50,\r\n centerY: p50,\r\n paddingLeft: 15\r\n });\r\n r(\"Label\", [\"sankey\", \"vertical\"]).setAll({\r\n x: p50,\r\n centerX: p50,\r\n paddingTop: 15\r\n });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/flow: Chord\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"Chord\").setAll({\r\n radius: percent(90),\r\n nodeWidth: 10,\r\n padAngle: 1,\r\n startAngle: 0,\r\n sort: \"none\"\r\n });\r\n r(\"ChordDirected\").setAll({\r\n linkHeadRadius: 10\r\n });\r\n r(\"ChordNodes\").setAll({\r\n x: p50,\r\n y: p50\r\n });\r\n r(\"FlowNode\", [\"chord\"]).setAll({\r\n draggable: true\r\n });\r\n r(\"ChordLink\").setAll({\r\n sourceRadius: p100,\r\n targetRadius: p100,\r\n fillStyle: \"solid\",\r\n strokeStyle: \"solid\",\r\n tooltipText: \"{sourceId} - {targetId}: {value}\"\r\n });\r\n r(\"Slice\", [\"chord\", \"node\", \"shape\"]).setAll({\r\n cornerRadius: 0\r\n });\r\n r(\"Slice\", [\"shape\"]).states.create(\"disabled\", {\r\n fill: ic.get(\"disabled\")\r\n });\r\n r(\"RadialLabel\", [\"chord\", \"node\"]).setAll({\r\n radius: 5,\r\n textType: \"circular\"\r\n });\r\n r(\"ChordLinkDirected\").setAll({\r\n headRadius: 10\r\n });\r\n // Class: Graphics\r\n {\r\n const rule = r(\"Graphics\", [\"chord\", \"link\", \"shape\"]);\r\n rule.setAll({\r\n fillOpacity: 0.2,\r\n strokeOpacity: 0,\r\n interactive: true\r\n });\r\n setColor(rule, \"fill\", ic, \"grid\");\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"Graphics\", [\"chord\", \"link\", \"shape\"]).states.create(\"hover\", { fillOpacity: 0.5 });\r\n r(\"ChordNonRibbon\").setAll({\r\n linkType: \"curve\" // \"line\" | \"curve\"\r\n });\r\n r(\"ChordLink\", [\"basic\"]).setAll({\r\n fillStyle: \"none\",\r\n strokeStyle: \"source\"\r\n });\r\n r(\"Graphics\", [\"chord\", \"link\", \"shape\", \"basic\"]).setAll({\r\n strokeOpacity: 0.4\r\n });\r\n r(\"Graphics\", [\"chord\", \"link\", \"shape\", \"basic\"]).states.create(\"hover\", { strokeWidth: 2, strokeOpacity: 1 });\r\n /**\r\n * ------------------------------------------------------------------------\r\n * charts/flow: ArcDiagram\r\n * ------------------------------------------------------------------------\r\n */\r\n r(\"ArcDiagram\").setAll({\r\n orientation: \"horizontal\",\r\n nodePadding: 5,\r\n minRadius: 5,\r\n radiusKey: \"sum\",\r\n animationEasing: $ease.out($ease.cubic)\r\n });\r\n r(\"ArcDiagramNodes\", [\"horizontal\"]).setAll({\r\n y: p100,\r\n centerY: p100\r\n });\r\n r(\"ArcDiagramNodes\", [\"vertical\"]).setAll({\r\n centerX: 0\r\n });\r\n r(\"Circle\", [\"arcdiagram\", \"node\", \"shape\"]).setAll({\r\n tooltipText: \"{name}: {sum}\"\r\n });\r\n r(\"Circle\", [\"arcdiagram\", \"node\", \"shape\"]).states.create(\"disabled\", {\r\n fill: ic.get(\"disabled\")\r\n });\r\n {\r\n const rule = r(\"ArcDiagramLink\", [\"link\", \"shape\"]);\r\n rule.setAll({\r\n strokeOpacity: 0.15,\r\n strokeStyle: \"solid\",\r\n fillStyle: \"none\",\r\n isMeasured: false\r\n });\r\n setColor(rule, \"stroke\", ic, \"grid\");\r\n }\r\n r(\"ArcDiagramLink\", [\"link\", \"shape\"]).states.create(\"hover\", {\r\n strokeOpacity: 1\r\n });\r\n r(\"Label\", [\"arcdiagram\", \"node\"]).setAll({\r\n text: \"{name}\",\r\n populateText: true\r\n });\r\n r(\"Label\", [\"arcdiagram\", \"horizontal\"]).setAll({\r\n y: 0,\r\n centerY: p50,\r\n centerX: p100,\r\n rotation: -90\r\n });\r\n r(\"Label\", [\"arcdiagram\", \"vertical\"]).setAll({\r\n centerY: p50,\r\n centerX: p100,\r\n paddingRight: 15\r\n });\r\n }\r\n}\r\n//# sourceMappingURL=FlowDefaultTheme.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 //console.log(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 * @ignore\r\n */\r\n makeDataItem(data) {\r\n let dataItem = new DataItem(this, undefined, data);\r\n this.processDataItem(dataItem);\r\n return dataItem;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n pushDataItem(data) {\r\n const dataItem = this.makeDataItem(data);\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 let month = date.getUTCMonth();\r\n date.setUTCMonth(month + count);\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 * \"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 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 //console.log(parsedDate)\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 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 = tzoffset - timeZoneOffset;\r\n second = 0;\r\n millisecond = 0;\r\n break;\r\n case \"second\":\r\n minute += tzoffset - timeZoneOffset;\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 += tzoffset - timeZoneOffset;\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 = tzoffset - timeZoneOffset;\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 += tzoffset - timeZoneOffset;\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 = tzoffset - timeZoneOffset;\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 = tzoffset - timeZoneOffset;\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 = tzoffset - timeZoneOffset;\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 newOffset = date.getTimezoneOffset();\r\n if (newOffset != timeZoneOffset) {\r\n date.setTime(date.getTime() + (timeZoneOffset - newOffset) * 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 * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $time from \"../../core/util/Time\";\r\nimport { p100 } from \"../../core/util/Percent\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { Label } from \"../../core/render/Label\";\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\");\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 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._index = index;\r\n bullet.series = this;\r\n dataItem.bullets.push(bullet);\r\n }\r\n return bullet;\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(\"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 }\r\n }\r\n if ((this._psi != startIndex || this._pei != endIndex) && !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 _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 for (let i = startIndex; i < endIndex; i++) {\r\n const dataItem = this.dataItems[i];\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 $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 return;\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 }\r\n });\r\n });\r\n }\r\n if (this.get(\"visible\")) {\r\n if (this.bullets.length > 0) {\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 }\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 { 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 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 { __awaiter } from \"tslib\";\r\nimport { FlowDefaultTheme } from \"./FlowDefaultTheme\";\r\nimport { Series } from \"../../core/render/Series\";\r\nimport { Container } from \"../../core/render/Container\";\r\nimport { LinearGradient } from \"../../core/render/gradients/LinearGradient\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\n/**\r\n * A base class for all flow type series: [[Sankey]] and [[Chord]].\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/flow-charts/} for more info\r\n */\r\nexport class Flow extends Series {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Container series will place their links in.\r\n *\r\n * @default Container.new()\r\n */\r\n Object.defineProperty(this, \"linksContainer\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this.children.push(Container.new(this._root, {}))\r\n });\r\n Object.defineProperty(this, \"_nodesData\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_linksData\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: []\r\n });\r\n Object.defineProperty(this, \"_index\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_nodesDataSet\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: false\r\n });\r\n Object.defineProperty(this, \"_linksByIndex\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: {}\r\n });\r\n }\r\n _afterNew() {\r\n this._defaultThemes.push(FlowDefaultTheme.new(this._root));\r\n this.fields.push(\"disabled\", \"sourceId\", \"targetId\");\r\n if (this.nodes) {\r\n this.nodes.flow = this;\r\n }\r\n super._afterNew();\r\n this.children.push(this.bulletsContainer);\r\n }\r\n processDataItem(dataItem) {\r\n super.processDataItem(dataItem);\r\n const nodes = this.nodes;\r\n if (nodes) {\r\n let unknown = false;\r\n let sourceId = dataItem.get(\"sourceId\");\r\n let sourceDataItem = nodes.getDataItemById(sourceId);\r\n if (!sourceDataItem) {\r\n if (sourceId == null) {\r\n sourceId = \"undefined\" + this._index;\r\n this._index++;\r\n unknown = true;\r\n }\r\n nodes.data.push({ id: sourceId, unknown: unknown });\r\n sourceDataItem = nodes.getDataItemById(sourceId);\r\n if (!unknown) {\r\n sourceDataItem.set(\"name\", sourceId);\r\n }\r\n }\r\n unknown = false;\r\n let targetId = dataItem.get(\"targetId\");\r\n let targetDataItem = nodes.getDataItemById(targetId);\r\n if (!targetDataItem) {\r\n if (targetId == null) {\r\n targetId = \"undefined\" + this._index;\r\n this._index++;\r\n unknown = true;\r\n }\r\n nodes.data.push({ id: targetId, unknown: unknown });\r\n targetDataItem = nodes.getDataItemById(targetId);\r\n if (!unknown) {\r\n targetDataItem.set(\"name\", targetId);\r\n }\r\n }\r\n if (sourceDataItem) {\r\n dataItem.set(\"source\", sourceDataItem);\r\n nodes.addOutgoingLink(sourceDataItem, dataItem);\r\n }\r\n if (targetDataItem) {\r\n dataItem.set(\"target\", targetDataItem);\r\n nodes.addincomingLink(targetDataItem, dataItem);\r\n }\r\n dataItem.set(\"link\", this.makeLink(dataItem));\r\n const sourceIndex = this.nodes.dataItems.indexOf(sourceDataItem);\r\n const targetIndex = this.nodes.dataItems.indexOf(targetDataItem);\r\n this._linksByIndex[sourceIndex + \"_\" + targetIndex] = dataItem;\r\n if (sourceDataItem.get(\"unknown\")) {\r\n if (targetDataItem) {\r\n sourceDataItem.set(\"fill\", targetDataItem.get(\"fill\"));\r\n }\r\n dataItem.get(\"link\").set(\"fillStyle\", \"gradient\");\r\n }\r\n if (targetDataItem.get(\"unknown\")) {\r\n if (sourceDataItem) {\r\n targetDataItem.set(\"fill\", sourceDataItem.get(\"fill\"));\r\n }\r\n dataItem.get(\"link\").set(\"fillStyle\", \"gradient\");\r\n }\r\n this._updateLinkColor(dataItem);\r\n }\r\n }\r\n _onDataClear() {\r\n if (!this.nodes._userDataSet) {\r\n this.nodes.data.setAll([]);\r\n this.nodes._userDataSet = false;\r\n }\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n let valueLow = Infinity;\r\n let valueHigh = -Infinity;\r\n let valueSum = 0;\r\n if (this._valuesDirty) {\r\n this._nodesData = [];\r\n const nodes = this.nodes;\r\n if (nodes) {\r\n $array.each(nodes.dataItems, (dataItem) => {\r\n const d3SankeyNode = dataItem.get(\"d3SankeyNode\");\r\n this._nodesData.push(d3SankeyNode);\r\n const incoming = dataItem.get(\"incomingLinks\");\r\n let sumIncoming = 0;\r\n let sumIncomingWorking = 0;\r\n if (incoming) {\r\n $array.each(incoming, (link) => {\r\n const value = link.get(\"value\");\r\n const workingValue = link.get(\"valueWorking\");\r\n sumIncoming += value;\r\n sumIncomingWorking += workingValue;\r\n });\r\n }\r\n dataItem.set(\"sumIncoming\", sumIncoming);\r\n dataItem.set(\"sumIncomingWorking\", sumIncomingWorking);\r\n const outgoing = dataItem.get(\"outgoingLinks\");\r\n let sumOutgoing = 0;\r\n let sumOutgoingWorking = 0;\r\n if (outgoing) {\r\n $array.each(outgoing, (link) => {\r\n const value = link.get(\"value\");\r\n const workingValue = link.get(\"valueWorking\");\r\n sumOutgoing += value;\r\n sumOutgoingWorking += workingValue;\r\n });\r\n }\r\n dataItem.set(\"sumOutgoing\", sumOutgoing);\r\n dataItem.set(\"sumOutgoingWorking\", sumOutgoingWorking);\r\n dataItem.set(\"sum\", sumIncoming + sumOutgoing);\r\n dataItem.set(\"sumWorking\", sumIncomingWorking + sumOutgoingWorking);\r\n nodes.updateLegendValue(dataItem);\r\n });\r\n }\r\n this._linksData = [];\r\n $array.each(this.dataItems, (dataItem) => {\r\n let value = dataItem.get(\"value\");\r\n if ($type.isNumber(value)) {\r\n if (value < valueLow) {\r\n valueLow = value;\r\n }\r\n if (value > valueHigh) {\r\n valueHigh = value;\r\n }\r\n valueSum += value;\r\n }\r\n });\r\n $array.each(this.dataItems, (dataItem) => {\r\n let value = dataItem.get(\"value\");\r\n if ($type.isNumber(value)) {\r\n let valueWorking = dataItem.get(\"valueWorking\");\r\n let minSize = this.get(\"minSize\", 0);\r\n if (minSize > 0) {\r\n if (valueWorking < minSize * valueSum) {\r\n valueWorking = minSize * valueSum;\r\n }\r\n }\r\n let d3SankeyLink = { source: dataItem.get(\"source\").get(\"d3SankeyNode\"), target: dataItem.get(\"target\").get(\"d3SankeyNode\"), value: valueWorking };\r\n dataItem.setRaw(\"d3SankeyLink\", d3SankeyLink);\r\n this._linksData.push(d3SankeyLink);\r\n this.updateLegendValue(dataItem);\r\n }\r\n });\r\n this.setPrivateRaw(\"valueHigh\", valueHigh);\r\n this.setPrivateRaw(\"valueLow\", valueLow);\r\n this.setPrivateRaw(\"valueSum\", valueSum);\r\n }\r\n }\r\n _updateLinkColor(dataItem) {\r\n const link = dataItem.get(\"link\");\r\n const fillStyle = link.get(\"fillStyle\");\r\n const strokeStyle = link.get(\"strokeStyle\");\r\n const source = dataItem.get(\"source\");\r\n const target = dataItem.get(\"target\");\r\n const sourceFill = source.get(\"fill\");\r\n const targetFill = target.get(\"fill\");\r\n link.remove(\"fillGradient\");\r\n link.remove(\"strokeGradient\");\r\n switch (fillStyle) {\r\n case \"solid\":\r\n link._applyTemplates();\r\n break;\r\n case \"source\":\r\n link.set(\"fill\", sourceFill);\r\n break;\r\n case \"target\":\r\n link.set(\"fill\", targetFill);\r\n break;\r\n case \"gradient\":\r\n let gradient = link._fillGradient;\r\n if (!gradient) {\r\n gradient = LinearGradient.new(this._root, {});\r\n }\r\n const sourceStop = { color: sourceFill };\r\n if (source.get(\"unknown\")) {\r\n sourceStop.opacity = 0;\r\n }\r\n const targetStop = { color: targetFill };\r\n if (target.get(\"unknown\")) {\r\n targetStop.opacity = 0;\r\n }\r\n gradient.set(\"stops\", [sourceStop, targetStop]);\r\n link._fillGradient = gradient;\r\n link.set(\"fillGradient\", gradient);\r\n break;\r\n case \"none\":\r\n link.set(\"fill\", undefined); // do not use remove!\r\n break;\r\n }\r\n switch (strokeStyle) {\r\n case \"solid\":\r\n link._applyTemplates();\r\n break;\r\n case \"source\":\r\n link.set(\"stroke\", sourceFill);\r\n break;\r\n case \"target\":\r\n link.set(\"stroke\", targetFill);\r\n break;\r\n case \"gradient\":\r\n let gradient = link._strokeGradient;\r\n if (!gradient) {\r\n gradient = LinearGradient.new(this._root, {});\r\n const sourceStop = { color: sourceFill };\r\n if (source.get(\"unknown\")) {\r\n sourceStop.opacity = 0;\r\n }\r\n const targetStop = { color: targetFill };\r\n if (target.get(\"unknown\")) {\r\n targetStop.opacity = 0;\r\n }\r\n gradient.set(\"stops\", [sourceStop, targetStop]);\r\n link._strokeGradient = gradient;\r\n }\r\n link.set(\"strokeGradient\", gradient);\r\n break;\r\n case \"none\":\r\n link.remove(\"stroke\");\r\n break;\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n let link = dataItem.get(\"link\");\r\n if (link) {\r\n this.links.removeValue(link);\r\n link.dispose();\r\n }\r\n }\r\n /**\r\n * Shows diagram'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 hiddenState = this.states.create(\"hidden\", {});\r\n const stateAnimationDuration = \"stateAnimationDuration\";\r\n const stateAnimationEasing = \"stateAnimationEasing\";\r\n if (!$type.isNumber(duration)) {\r\n duration = hiddenState.get(stateAnimationDuration, this.get(stateAnimationDuration, 0));\r\n }\r\n const easing = hiddenState.get(stateAnimationEasing, this.get(stateAnimationEasing));\r\n promises.push(dataItem.animate({\r\n key: \"valueWorking\",\r\n to: Math.max(this.get(\"minHiddenValue\", 0), this.get(\"hiddenSize\", 0) * dataItem.get(\"value\")),\r\n duration: duration,\r\n easing: easing\r\n }).waitForStop());\r\n const linkGraphics = dataItem.get(\"link\");\r\n linkGraphics.hide();\r\n yield Promise.all(promises);\r\n });\r\n }\r\n /**\r\n * Shows diagram'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 if (!$type.isNumber(duration)) {\r\n duration = this.get(\"stateAnimationDuration\", 0);\r\n }\r\n const easing = this.get(\"stateAnimationEasing\");\r\n promises.push(dataItem.animate({ key: \"valueWorking\", to: dataItem.get(\"value\"), duration: duration, easing: easing }).waitForStop());\r\n const linkGraphics = dataItem.get(\"link\");\r\n linkGraphics.show();\r\n yield Promise.all(promises);\r\n });\r\n }\r\n _positionBullet(bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n const dataItem = sprite.dataItem;\r\n if (dataItem) {\r\n const link = dataItem.get(\"link\");\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n const point = link.getPoint(this._getBulletLocation(bullet));\r\n sprite.setAll({ x: point.x, y: point.y });\r\n if (bullet.get(\"autoRotate\")) {\r\n sprite.set(\"rotation\", point.angle + bullet.get(\"autoRotateAngle\", 0));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n _getBulletLocation(bullet) {\r\n return bullet.get(\"locationY\", 0);\r\n }\r\n}\r\nObject.defineProperty(Flow, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Flow\"\r\n});\r\nObject.defineProperty(Flow, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Series.classNames.concat([Flow.className])\r\n});\r\n//# sourceMappingURL=Flow.js.map","import { Container } from \"../../core/render/Container\";\r\n/**\r\n * Base class for flow chart nodes.\r\n */\r\nexport class FlowNode extends Container {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * Related 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}\r\nObject.defineProperty(FlowNode, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"FlowNode\"\r\n});\r\nObject.defineProperty(FlowNode, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Container.classNames.concat([FlowNode.className])\r\n});\r\n//# sourceMappingURL=FlowNode.js.map","import { __awaiter } from \"tslib\";\r\nimport { Label } from \"../../core/render/Label\";\r\nimport { Series } from \"../../core/render/Series\";\r\nimport { Template } from \"../../core/util/Template\";\r\nimport { ListTemplate } from \"../../core/util/List\";\r\nimport { FlowNode } from \"./FlowNode\";\r\nimport * as $array from \"../../core/util/Array\";\r\n/**\r\n * Holds instances of nodes for a [[Flow]] series.\r\n */\r\nexport class FlowNodes extends Series {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * List of label elements.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"labels\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => Label._new(this._root, { themeTags: [\"flow\"] }, [this.labels.template]))\r\n });\r\n /**\r\n * List of node elements.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"nodes\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => FlowNode._new(this._root, { themeTags: [\"node\"] }, [this.nodes.template]))\r\n });\r\n Object.defineProperty(this, \"_userDataSet\", {\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.fields.push(\"unknown\", \"name\", \"fill\");\r\n this.set(\"idField\", \"id\");\r\n this.set(\"nameField\", \"id\");\r\n this.set(\"fillField\", \"fill\");\r\n this.set(\"unknownField\", \"unknown\");\r\n this.children.push(this.bulletsContainer);\r\n super._afterNew();\r\n }\r\n _onDataClear() {\r\n const colors = this.get(\"colors\");\r\n if (colors) {\r\n colors.reset();\r\n }\r\n this._userDataSet = true;\r\n }\r\n processDataItem(dataItem) {\r\n super.processDataItem(dataItem);\r\n dataItem.setRaw(\"d3SankeyNode\", { name: dataItem.get(\"id\"), dataItem: dataItem });\r\n if (dataItem.get(\"fill\") == null) {\r\n let colors = this.get(\"colors\");\r\n if (colors) {\r\n dataItem.setRaw(\"fill\", colors.next());\r\n }\r\n }\r\n const node = this.makeNode(dataItem);\r\n dataItem.setRaw(\"node\", node);\r\n const disabledField = this.get(\"disabledField\");\r\n if (disabledField) {\r\n const dataContext = dataItem.dataContext;\r\n if (dataContext) {\r\n if (dataContext[disabledField]) {\r\n this.root.events.once(\"frameended\", () => {\r\n this.disableDataItem(dataItem, 0);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeNode(dataItem, themeTag) {\r\n const node = this.nodes.make();\r\n this.nodes.push(node);\r\n if (themeTag) {\r\n node.addTag(themeTag);\r\n }\r\n if (dataItem.get(\"unknown\")) {\r\n node.addTag(\"unknown\");\r\n }\r\n this.children.push(node);\r\n node._setDataItem(dataItem);\r\n node.series = this;\r\n node.events.on(\"click\", (e) => {\r\n const node = e.target;\r\n if (node.get(\"toggleKey\") == \"disabled\") {\r\n const dataItem = node.dataItem;\r\n if (dataItem) {\r\n if (dataItem.isHidden()) {\r\n this.enableDataItem(dataItem);\r\n }\r\n else {\r\n this.disableDataItem(dataItem);\r\n }\r\n }\r\n }\r\n });\r\n dataItem.on(\"fill\", () => {\r\n this._updateNodeColor(dataItem);\r\n });\r\n dataItem.set(\"node\", node);\r\n return node;\r\n }\r\n _updateNodeColor(_dataItem) {\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n let node = dataItem.get(\"node\");\r\n if (node) {\r\n this.nodes.removeValue(node);\r\n node.dispose();\r\n }\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n this.labels.removeValue(label);\r\n label.dispose();\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n addincomingLink(dataItem, link) {\r\n let incoming = dataItem.get(\"incomingLinks\");\r\n if (!incoming) {\r\n incoming = [];\r\n dataItem.set(\"incomingLinks\", incoming);\r\n }\r\n incoming.push(link);\r\n }\r\n /**\r\n * @ignore\r\n */\r\n addOutgoingLink(dataItem, link) {\r\n let outgoing = dataItem.get(\"outgoingLinks\");\r\n if (!outgoing) {\r\n outgoing = [];\r\n dataItem.set(\"outgoingLinks\", outgoing);\r\n }\r\n outgoing.push(link);\r\n }\r\n /**\r\n * Shows node'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 flow = this.flow;\r\n if (flow) {\r\n const node = dataItem.get(\"node\");\r\n if (node) {\r\n node.show();\r\n }\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n label.show(duration);\r\n }\r\n let links = dataItem.get(\"outgoingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.showDataItem(link, duration);\r\n });\r\n }\r\n links = dataItem.get(\"incomingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.showDataItem(link, duration);\r\n });\r\n }\r\n }\r\n yield 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 flow = this.flow;\r\n if (flow) {\r\n const node = dataItem.get(\"node\");\r\n if (node) {\r\n node.hide();\r\n }\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n label.hide(duration);\r\n }\r\n let links = dataItem.get(\"outgoingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.hideDataItem(link, duration);\r\n });\r\n }\r\n links = dataItem.get(\"incomingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.hideDataItem(link, duration);\r\n });\r\n }\r\n }\r\n yield promises;\r\n });\r\n }\r\n /**\r\n * Shows node'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 enableDataItem(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 flow = this.flow;\r\n if (flow) {\r\n const node = dataItem.get(\"node\");\r\n if (node) {\r\n this.root.events.once(\"frameended\", () => {\r\n node.set(\"disabled\", false);\r\n });\r\n }\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n label.set(\"disabled\", false);\r\n }\r\n let links = dataItem.get(\"outgoingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.showDataItem(link, duration);\r\n });\r\n }\r\n links = dataItem.get(\"incomingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.showDataItem(link, duration);\r\n });\r\n }\r\n }\r\n yield 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 disableDataItem(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 flow = this.flow;\r\n if (flow) {\r\n const node = dataItem.get(\"node\");\r\n if (node) {\r\n this.root.events.once(\"frameended\", () => {\r\n node.set(\"disabled\", true);\r\n });\r\n }\r\n let label = dataItem.get(\"label\");\r\n if (label) {\r\n label.set(\"disabled\", true);\r\n }\r\n let links = dataItem.get(\"outgoingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.hideDataItem(link, duration);\r\n });\r\n }\r\n links = dataItem.get(\"incomingLinks\");\r\n if (links) {\r\n $array.each(links, (link) => {\r\n flow.hideDataItem(link, duration);\r\n });\r\n }\r\n }\r\n yield promises;\r\n });\r\n }\r\n}\r\nObject.defineProperty(FlowNodes, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"FlowNodes\"\r\n});\r\nObject.defineProperty(FlowNodes, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Series.classNames.concat([FlowNodes.className])\r\n});\r\n//# sourceMappingURL=FlowNodes.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 { Template } from \"../../core/util/Template\";\r\nimport { ListTemplate } from \"../../core/util/List\";\r\nimport { FlowNodes } from \"./FlowNodes\";\r\nimport { RoundedRectangle } from \"../../core/render/RoundedRectangle\";\r\n/**\r\n * Holds instances of nodes for a [[Sankey]] series.\r\n */\r\nexport class SankeyNodes extends FlowNodes {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * List of rectangle elements.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"rectangles\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => RoundedRectangle._new(this._root, { themeTags: [\"shape\"] }, [this.rectangles.template]))\r\n });\r\n /**\r\n * Related [[Sankey]] series.\r\n */\r\n Object.defineProperty(this, \"flow\", {\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 makeNode(dataItem) {\r\n const flow = this.flow;\r\n const node = super.makeNode(dataItem, \"sankey\");\r\n const rectangle = node.children.insertIndex(0, this.rectangles.make());\r\n this.rectangles.push(rectangle);\r\n rectangle._setSoft(\"fill\", dataItem.get(\"fill\"));\r\n dataItem.set(\"rectangle\", rectangle);\r\n node.events.on(\"dragged\", () => {\r\n const d3SankeyNode = node.dataItem.get(\"d3SankeyNode\");\r\n if (d3SankeyNode) {\r\n if (flow) {\r\n if (flow.get(\"orientation\") == \"horizontal\") {\r\n d3SankeyNode.x0 = node.x();\r\n d3SankeyNode.y0 = node.y();\r\n }\r\n else {\r\n d3SankeyNode.x0 = node.y();\r\n d3SankeyNode.y0 = node.x();\r\n }\r\n flow.updateSankey();\r\n }\r\n }\r\n });\r\n const label = this.labels.make();\r\n this.labels.push(label);\r\n if (flow) {\r\n label.addTag(flow.get(\"orientation\", \"\"));\r\n }\r\n node.children.push(label);\r\n dataItem.set(\"label\", label);\r\n label._setDataItem(dataItem);\r\n rectangle._setDataItem(dataItem);\r\n return node;\r\n }\r\n _positionBullet(bullet) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n const dataItem = sprite.dataItem;\r\n if (dataItem) {\r\n const sprite = bullet.get(\"sprite\");\r\n if (sprite) {\r\n const rectangle = dataItem.get(\"rectangle\");\r\n const node = dataItem.get(\"node\");\r\n const locationX = bullet.get(\"locationX\", 0.5);\r\n const locationY = bullet.get(\"locationY\", 0.5);\r\n if (rectangle) {\r\n sprite.setAll({ x: node.x() + rectangle.width() * locationX, y: node.y() + rectangle.height() * locationY });\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /**\r\n * @ignore\r\n */\r\n disposeDataItem(dataItem) {\r\n super.disposeDataItem(dataItem);\r\n let rectangle = dataItem.get(\"rectangle\");\r\n if (rectangle) {\r\n this.rectangles.removeValue(rectangle);\r\n rectangle.dispose();\r\n }\r\n }\r\n _updateNodeColor(dataItem) {\r\n const rectangle = dataItem.get(\"rectangle\");\r\n if (rectangle) {\r\n rectangle.set(\"fill\", dataItem.get(\"fill\"));\r\n }\r\n }\r\n}\r\nObject.defineProperty(SankeyNodes, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"SankeyNodes\"\r\n});\r\nObject.defineProperty(SankeyNodes, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: FlowNodes.classNames.concat([SankeyNodes.className])\r\n});\r\n//# sourceMappingURL=SankeyNodes.js.map","import { Graphics } from \"../../core/render/Graphics\";\r\nimport { Percent } from \"../../core/util/Percent\";\r\n/**\r\n * A base class for a flow link.\r\n */\r\nexport class FlowLink extends Graphics {\r\n constructor() {\r\n super(...arguments);\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 Object.defineProperty(this, \"_fillGradient\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_strokeGradient\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n }\r\n _changed() {\r\n super._changed();\r\n if (this.isDirty(\"fillStyle\")) {\r\n const series = this.series;\r\n const dataItem = this.dataItem;\r\n if (series && dataItem) {\r\n series._updateLinkColor(dataItem);\r\n }\r\n }\r\n }\r\n _getTooltipPoint() {\r\n let tooltipY = this.get(\"tooltipY\");\r\n let position = 0.5;\r\n if (tooltipY instanceof Percent) {\r\n position = tooltipY.value;\r\n }\r\n return this.getPoint(position);\r\n }\r\n}\r\nObject.defineProperty(FlowLink, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"FlowLink\"\r\n});\r\nObject.defineProperty(FlowLink, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Graphics.classNames.concat([FlowLink.className])\r\n});\r\n//# sourceMappingURL=FlowLink.js.map","import { FlowLink } from \"./FlowLink\";\r\nimport * as $math from \"../../core/util/Math\";\r\nexport class SankeyLink extends FlowLink {\r\n constructor() {\r\n super(...arguments);\r\n Object.defineProperty(this, \"_svgPath\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\")\r\n });\r\n Object.defineProperty(this, \"_totalLength\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n }\r\n _beforeChanged() {\r\n super._beforeChanged();\r\n if (this.isDirty(\"source\")) {\r\n const source = this.get(\"source\");\r\n if (source) {\r\n const sourceNode = source.get(\"node\");\r\n this._disposers.push(sourceNode.events.on(\"positionchanged\", () => {\r\n this.markDirty();\r\n }));\r\n }\r\n }\r\n if (this.isDirty(\"target\")) {\r\n const target = this.get(\"target\");\r\n if (target) {\r\n const targetNode = target.get(\"node\");\r\n this._disposers.push(targetNode.events.on(\"positionchanged\", () => {\r\n this.markDirty();\r\n }));\r\n }\r\n }\r\n if (this.isPrivateDirty(\"orientation\")) {\r\n const series = this.series;\r\n const dataItem = this.dataItem;\r\n if (dataItem && series) {\r\n series._updateLinkColor(dataItem);\r\n }\r\n }\r\n const target = this.get(\"target\");\r\n const source = this.get(\"source\");\r\n let sourceNode;\r\n let targetNode;\r\n if (source && target) {\r\n this._clear = true;\r\n sourceNode = source.get(\"node\");\r\n targetNode = target.get(\"node\");\r\n let x0 = 0;\r\n let x1 = 0;\r\n let y0 = 0;\r\n let y1 = 0;\r\n let xt0 = 0;\r\n let yt0 = 0;\r\n let xt1 = 0;\r\n let yt1 = 0;\r\n let xb0 = 0;\r\n let xb1 = 0;\r\n let yb0 = 0;\r\n let yb1 = 0;\r\n let xm0 = 0;\r\n let xm1 = 0;\r\n let ym0 = 0;\r\n let ym1 = 0;\r\n let angle0 = 0;\r\n let angle1 = 0;\r\n const dataItem = this.dataItem;\r\n if (dataItem) {\r\n const d3SankeyLink = dataItem.get(\"d3SankeyLink\");\r\n if (d3SankeyLink) {\r\n let w = d3SankeyLink.width || 0;\r\n let orientation = this.getPrivate(\"orientation\");\r\n if (orientation == \"vertical\") {\r\n if (sourceNode) {\r\n y0 = sourceNode.y();\r\n }\r\n if (targetNode) {\r\n y1 = targetNode.y();\r\n }\r\n angle0 = 90;\r\n angle1 = 90;\r\n x0 = d3SankeyLink.y0 || 0;\r\n x1 = d3SankeyLink.y1 || 0;\r\n if (y1 < y0) {\r\n [x0, x1] = [x1, x0];\r\n [y0, y1] = [y1, y0];\r\n }\r\n if (source.get(\"unknown\")) {\r\n x0 = x1;\r\n y0 = y0 + (y1 - y0) / 2;\r\n }\r\n if (target.get(\"unknown\")) {\r\n x1 = x0;\r\n y1 = y0 + (y1 - y0) / 2;\r\n }\r\n xt0 = x0 - w / 2;\r\n yt0 = y0;\r\n xt1 = x1 - w / 2;\r\n yt1 = y1;\r\n xb0 = x0 + w / 2;\r\n xb1 = x1 + w / 2;\r\n yb0 = y0;\r\n yb1 = y1;\r\n xm0 = x0;\r\n xm1 = x1;\r\n ym0 = y0;\r\n ym1 = y1;\r\n }\r\n else {\r\n if (sourceNode) {\r\n x0 = sourceNode.x();\r\n }\r\n if (targetNode) {\r\n x1 = targetNode.x();\r\n }\r\n y0 = d3SankeyLink.y0 || 0;\r\n y1 = d3SankeyLink.y1 || 0;\r\n if (x1 < x0) {\r\n [x0, x1] = [x1, x0];\r\n [y0, y1] = [y1, y0];\r\n }\r\n if (source.get(\"unknown\")) {\r\n y0 = y1;\r\n x0 = x0 + (x1 - x0) / 2;\r\n }\r\n if (target.get(\"unknown\")) {\r\n y1 = y0;\r\n x1 = x0 + (x1 - x0) / 2;\r\n }\r\n xt0 = x0;\r\n yt0 = y0 - w / 2;\r\n xt1 = x1;\r\n yt1 = y1 - w / 2;\r\n xb0 = x0;\r\n xb1 = x1;\r\n yb0 = y0 + w / 2;\r\n yb1 = y1 + w / 2;\r\n xm0 = x0;\r\n xm1 = x1;\r\n ym0 = y0;\r\n ym1 = y1;\r\n }\r\n if ($math.round(xt0, 3) == $math.round(xt1, 3)) {\r\n xt1 += 0.01;\r\n }\r\n if ($math.round(yt0, 3) == $math.round(yt1, 3)) {\r\n yt1 += 0.01;\r\n }\r\n if ($math.round(xb0, 3) == $math.round(xb1, 3)) {\r\n xb1 += 0.01;\r\n }\r\n if ($math.round(yb0, 3) == $math.round(yb1, 3)) {\r\n yb1 += 0.01;\r\n }\r\n let cpd = this.get(\"controlPointDistance\", 0.2);\r\n cpd = Math.min(0.4999, cpd);\r\n let kxt0 = xt0 + (xt1 - xt0) * cpd * $math.cos(angle0);\r\n let kyt0 = yt0 + (yt1 - yt0) * cpd * $math.sin(angle0);\r\n let kxt1 = xt1 - (xt1 - xt0) * cpd * $math.cos(angle1);\r\n let kyt1 = yt1 - (yt1 - yt0) * cpd * $math.sin(angle1);\r\n let kxm0 = xm0 + (xm1 - xm0) * cpd * $math.cos(angle0);\r\n let kym0 = ym0 + (ym1 - ym0) * cpd * $math.sin(angle0);\r\n let kxm1 = xm1 - (xm1 - xm0) * cpd * $math.cos(angle1);\r\n let kym1 = ym1 - (ym1 - ym0) * cpd * $math.sin(angle1);\r\n let angle = $math.getAngle({ x: kxt0, y: kyt0 }, { x: kxt1, y: kyt1 });\r\n let dx = (w / $math.cos(angle) - w) / $math.tan(angle) * $math.cos(angle0);\r\n let dy = (w / $math.sin(angle) - w) * $math.tan(angle) * $math.sin(angle0);\r\n let kxb0 = -dx / 2 + xb0 + (xb1 - xb0) * cpd * $math.cos(angle0);\r\n let kyb0 = -dy / 2 + yb0 + (yb1 - yb0) * cpd * $math.sin(angle0);\r\n let kxb1 = -dx / 2 + xb1 - (xb1 - xb0) * cpd * $math.cos(angle1);\r\n let kyb1 = -dy / 2 + yb1 - (yb1 - yb0) * cpd * $math.sin(angle1);\r\n kxt0 += dx / 2;\r\n kyt0 += dy / 2;\r\n kxt1 += dx / 2;\r\n kyt1 += dy / 2;\r\n if (orientation == \"vertical\") {\r\n kyt0 = Math.min(yt1, Math.max(yt0 + 1, kyt0));\r\n kyb0 = Math.min(yb1, Math.max(yb0 + 1, kyb0));\r\n kyt1 = Math.max(yt0, Math.min(yt1 - 1, kyt1));\r\n kyb1 = Math.max(yb0, Math.min(yb1 - 1, kyb1));\r\n }\r\n else {\r\n kxt0 = Math.min(xt1, Math.max(xt0 + 1, kxt0));\r\n kxb0 = Math.min(xb1, Math.max(xb0 + 1, kxb0));\r\n kxt1 = Math.max(xt0, Math.min(xt1 - 1, kxt1));\r\n kxb1 = Math.max(xb0, Math.min(xb1 - 1, kxb1));\r\n }\r\n let segment = [[xt0, yt0, xb0, yb0], [kxt0, kyt0, kxb0, kyb0], [kxt1, kyt1, kxb1, kyb1], [xt1, yt1, xb1, yb1]];\r\n this.set(\"draw\", (display) => {\r\n const series = this.series;\r\n series._fillGenerator.context(display);\r\n series._fillGenerator(segment);\r\n });\r\n let middleSegment = [[xm0, ym0], [kxm0, kym0], [kxm1, kym1], [xm1, ym1]];\r\n const path = this.series._strokeGenerator(middleSegment);\r\n if (path) {\r\n this._svgPath.setAttribute(\"d\", path);\r\n this._totalLength = this._svgPath.getTotalLength();\r\n }\r\n }\r\n }\r\n }\r\n if (this.series && this.dataItem) {\r\n this.series._positionBullets(this.dataItem);\r\n }\r\n }\r\n getPoint(location) {\r\n if (this._svgPath) {\r\n if (this._svgPath.getAttribute(\"d\")) {\r\n let p0 = this._svgPath.getPointAtLength(location * this._totalLength - 0.1);\r\n let p1 = this._svgPath.getPointAtLength(location * this._totalLength + 0.1);\r\n let p = this.toGlobal(this._svgPath.getPointAtLength(location * this._totalLength));\r\n return { x: p.x, y: p.y, angle: $math.getAngle(p0, p1) };\r\n }\r\n }\r\n return { x: 0, y: 0, angle: 0 };\r\n }\r\n _getTooltipPoint() {\r\n return this.toLocal(super._getTooltipPoint());\r\n }\r\n}\r\nObject.defineProperty(SankeyLink, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"SankeyLink\"\r\n});\r\nObject.defineProperty(SankeyLink, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: FlowLink.classNames.concat([SankeyLink.className])\r\n});\r\n//# sourceMappingURL=SankeyLink.js.map","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n return typeof x === \"object\" && \"length\" in x\n ? x // Array, TypedArray, NodeList, array-like\n : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // falls through\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n let digits = 3;\n\n shape.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) {\n digits = null;\n } else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n return shape;\n };\n\n return () => new Path(digits);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n var defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(line);\n\n x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n function line(data) {\n var i,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n var x1 = null,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null,\n path = withPath(area);\n\n x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n function area(data) {\n var i,\n j,\n k,\n n = (data = array(data)).length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","/**\r\n * @ignore\r\n */\r\nexport class MonotoneXTension {\r\n constructor(context, tension) {\r\n Object.defineProperty(this, \"_line\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_point\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 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, \"_x0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_x1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_y0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_y1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_t0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_tension\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n this._context = context;\r\n this._tension = tension;\r\n }\r\n areaStart() {\r\n this._line = 0;\r\n }\r\n areaEnd() {\r\n this._line = NaN;\r\n }\r\n lineStart() {\r\n this._x0 = this._x1 =\r\n this._y0 = this._y1 =\r\n this._t0 = NaN;\r\n this._point = 0;\r\n }\r\n lineEnd() {\r\n switch (this._point) {\r\n case 2:\r\n this._context.lineTo(this._x1, this._y1);\r\n break;\r\n case 3:\r\n point(this, this._t0, slope2(this, this._t0));\r\n break;\r\n }\r\n if (this._line || (this._line !== 0 && this._point === 1))\r\n this._context.closePath();\r\n this._line = 1 - this._line;\r\n }\r\n point(x, y) {\r\n let t1 = NaN;\r\n x = +x, y = +y;\r\n if (x === this._x1 && y === this._y1)\r\n return; // Ignore coincident points.\r\n switch (this._point) {\r\n case 0:\r\n this._point = 1;\r\n this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y);\r\n break;\r\n case 1:\r\n this._point = 2;\r\n break;\r\n case 2:\r\n this._point = 3;\r\n point(this, slope2(this, t1 = slope3(this, x, y)), t1);\r\n break;\r\n default:\r\n point(this, this._t0, t1 = slope3(this, x, y));\r\n break;\r\n }\r\n this._x0 = this._x1, this._x1 = x;\r\n this._y0 = this._y1, this._y1 = y;\r\n this._t0 = t1;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function curveMonotoneXTension(tension) {\r\n function monotoneXTension(context) {\r\n return new MonotoneXTension(context, tension);\r\n }\r\n return monotoneXTension;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction sign(x) {\r\n return x < 0 ? -1 : 1;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction slope3(that, x2, y2) {\r\n let h0 = (that._x1 - that._x0);\r\n let h1 = (x2 - that._x1);\r\n let s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0);\r\n let s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0);\r\n let p = (s0 * h1 + s1 * h0) / (h0 + h1);\r\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction slope2(that, t) {\r\n let h = that._x1 - that._x0;\r\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction point(that, t0, t1) {\r\n let x0 = that._x0, y0 = that._y0, x1 = that._x1, y1 = that._y1, dx = (x1 - x0) / 1.5 * (1 - that._tension);\r\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\r\n}\r\n//# sourceMappingURL=MonotoneXTension.js.map","/**\r\n * @ignore\r\n */\r\nexport class MonotoneYTension {\r\n constructor(context, tension) {\r\n Object.defineProperty(this, \"_line\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_point\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 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, \"_x0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_x1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_y0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_y1\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_t0\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n Object.defineProperty(this, \"_tension\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: 0\r\n });\r\n this._context = context;\r\n this._tension = tension;\r\n }\r\n areaStart() {\r\n this._line = 0;\r\n }\r\n areaEnd() {\r\n this._line = NaN;\r\n }\r\n lineStart() {\r\n this._x0 = this._x1 =\r\n this._y0 = this._y1 =\r\n this._t0 = NaN;\r\n this._point = 0;\r\n }\r\n lineEnd() {\r\n switch (this._point) {\r\n case 2:\r\n this._context.lineTo(this._x1, this._y1);\r\n break;\r\n case 3:\r\n point(this, this._t0, slope2(this, this._t0));\r\n break;\r\n }\r\n if (this._line || (this._line !== 0 && this._point === 1))\r\n this._context.closePath();\r\n this._line = 1 - this._line;\r\n }\r\n point(x, y) {\r\n [x, y] = [y, x];\r\n let t1 = NaN;\r\n x = +x, y = +y;\r\n if (x === this._x1 && y === this._y1)\r\n return; // Ignore coincident points.\r\n switch (this._point) {\r\n case 0:\r\n this._point = 1;\r\n this._line ? this._context.lineTo(y, x) : this._context.moveTo(y, x);\r\n break;\r\n case 1:\r\n this._point = 2;\r\n break;\r\n case 2:\r\n this._point = 3;\r\n point(this, slope2(this, t1 = slope3(this, x, y)), t1);\r\n break;\r\n default:\r\n point(this, this._t0, t1 = slope3(this, x, y));\r\n break;\r\n }\r\n this._x0 = this._x1, this._x1 = x;\r\n this._y0 = this._y1, this._y1 = y;\r\n this._t0 = t1;\r\n }\r\n}\r\n/**\r\n * @ignore\r\n */\r\nexport function curveMonotoneYTension(tension) {\r\n function monotoneYTension(context) {\r\n return new MonotoneYTension(context, tension);\r\n }\r\n monotoneYTension.tension = function (tension) {\r\n return curveMonotoneYTension(+tension);\r\n };\r\n return monotoneYTension;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction sign(x) {\r\n return x < 0 ? -1 : 1;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction slope3(that, x2, y2) {\r\n let h0 = (that._x1 - that._x0);\r\n let h1 = (x2 - that._x1);\r\n let s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0);\r\n let s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0);\r\n let p = (s0 * h1 + s1 * h0) / (h0 + h1);\r\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction slope2(that, t) {\r\n let h = that._x1 - that._x0;\r\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\r\n}\r\n/**\r\n * @ignore\r\n */\r\nfunction point(that, t0, t1) {\r\n let x0 = that._x0, y0 = that._y0, x1 = that._x1, y1 = that._y1, dx = (x1 - x0) / 1.5 * (1 - that._tension);\r\n that._context.bezierCurveTo(y0 + dx * t0, x0 + dx, y1 - dx * t1, x1 - dx, y1, x1);\r\n}\r\n//# sourceMappingURL=MonotoneYTension.js.map","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {min} from \"d3-array\";\n\nfunction targetDepth(d) {\n return d.target.depth;\n}\n\nexport function left(node) {\n return node.depth;\n}\n\nexport function right(node, n) {\n return n - 1 - node.height;\n}\n\nexport function justify(node, n) {\n return node.sourceLinks.length ? node.depth : n - 1;\n}\n\nexport function center(node) {\n return node.targetLinks.length ? node.depth\n : node.sourceLinks.length ? min(node.sourceLinks, targetDepth) - 1\n : 0;\n}\n","export default function constant(x) {\n return function() {\n return x;\n };\n}\n","import {max, min, sum} from \"d3-array\";\nimport {justify} from \"./align.js\";\nimport constant from \"./constant.js\";\n\nfunction ascendingSourceBreadth(a, b) {\n return ascendingBreadth(a.source, b.source) || a.index - b.index;\n}\n\nfunction ascendingTargetBreadth(a, b) {\n return ascendingBreadth(a.target, b.target) || a.index - b.index;\n}\n\nfunction ascendingBreadth(a, b) {\n return a.y0 - b.y0;\n}\n\nfunction value(d) {\n return d.value;\n}\n\nfunction defaultId(d) {\n return d.index;\n}\n\nfunction defaultNodes(graph) {\n return graph.nodes;\n}\n\nfunction defaultLinks(graph) {\n return graph.links;\n}\n\nfunction find(nodeById, id) {\n const node = nodeById.get(id);\n if (!node) throw new Error(\"missing: \" + id);\n return node;\n}\n\nfunction computeLinkBreadths({nodes}) {\n for (const node of nodes) {\n let y0 = node.y0;\n let y1 = y0;\n for (const link of node.sourceLinks) {\n link.y0 = y0 + link.width / 2;\n y0 += link.width;\n }\n for (const link of node.targetLinks) {\n link.y1 = y1 + link.width / 2;\n y1 += link.width;\n }\n }\n}\n\nexport default function Sankey() {\n let x0 = 0, y0 = 0, x1 = 1, y1 = 1; // extent\n let dx = 24; // nodeWidth\n let dy = 8, py; // nodePadding\n let id = defaultId;\n let align = justify;\n let sort;\n let linkSort;\n let nodes = defaultNodes;\n let links = defaultLinks;\n let iterations = 6;\n\n function sankey() {\n const graph = {nodes: nodes.apply(null, arguments), links: links.apply(null, arguments)};\n computeNodeLinks(graph);\n computeNodeValues(graph);\n computeNodeDepths(graph);\n computeNodeHeights(graph);\n computeNodeBreadths(graph);\n computeLinkBreadths(graph);\n return graph;\n }\n\n sankey.update = function(graph) {\n computeLinkBreadths(graph);\n return graph;\n };\n\n sankey.nodeId = function(_) {\n return arguments.length ? (id = typeof _ === \"function\" ? _ : constant(_), sankey) : id;\n };\n\n sankey.nodeAlign = function(_) {\n return arguments.length ? (align = typeof _ === \"function\" ? _ : constant(_), sankey) : align;\n };\n\n sankey.nodeSort = function(_) {\n return arguments.length ? (sort = _, sankey) : sort;\n };\n\n sankey.nodeWidth = function(_) {\n return arguments.length ? (dx = +_, sankey) : dx;\n };\n\n sankey.nodePadding = function(_) {\n return arguments.length ? (dy = py = +_, sankey) : dy;\n };\n\n sankey.nodes = function(_) {\n return arguments.length ? (nodes = typeof _ === \"function\" ? _ : constant(_), sankey) : nodes;\n };\n\n sankey.links = function(_) {\n return arguments.length ? (links = typeof _ === \"function\" ? _ : constant(_), sankey) : links;\n };\n\n sankey.linkSort = function(_) {\n return arguments.length ? (linkSort = _, sankey) : linkSort;\n };\n\n sankey.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], sankey) : [x1 - x0, y1 - y0];\n };\n\n sankey.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], sankey) : [[x0, y0], [x1, y1]];\n };\n\n sankey.iterations = function(_) {\n return arguments.length ? (iterations = +_, sankey) : iterations;\n };\n\n function computeNodeLinks({nodes, links}) {\n for (const [i, node] of nodes.entries()) {\n node.index = i;\n node.sourceLinks = [];\n node.targetLinks = [];\n }\n const nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d]));\n for (const [i, link] of links.entries()) {\n link.index = i;\n let {source, target} = link;\n if (typeof source !== \"object\") source = link.source = find(nodeById, source);\n if (typeof target !== \"object\") target = link.target = find(nodeById, target);\n source.sourceLinks.push(link);\n target.targetLinks.push(link);\n }\n if (linkSort != null) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(linkSort);\n targetLinks.sort(linkSort);\n }\n }\n }\n\n function computeNodeValues({nodes}) {\n for (const node of nodes) {\n node.value = node.fixedValue === undefined\n ? Math.max(sum(node.sourceLinks, value), sum(node.targetLinks, value))\n : node.fixedValue;\n }\n }\n\n function computeNodeDepths({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.depth = x;\n for (const {target} of node.sourceLinks) {\n next.add(target);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeHeights({nodes}) {\n const n = nodes.length;\n let current = new Set(nodes);\n let next = new Set;\n let x = 0;\n while (current.size) {\n for (const node of current) {\n node.height = x;\n for (const {source} of node.targetLinks) {\n next.add(source);\n }\n }\n if (++x > n) throw new Error(\"circular link\");\n current = next;\n next = new Set;\n }\n }\n\n function computeNodeLayers({nodes}) {\n const x = max(nodes, d => d.depth) + 1;\n const kx = (x1 - x0 - dx) / (x - 1);\n const columns = new Array(x);\n for (const node of nodes) {\n const i = Math.max(0, Math.min(x - 1, Math.floor(align.call(null, node, x))));\n node.layer = i;\n node.x0 = x0 + i * kx;\n node.x1 = node.x0 + dx;\n if (columns[i]) columns[i].push(node);\n else columns[i] = [node];\n }\n if (sort) for (const column of columns) {\n column.sort(sort);\n }\n return columns;\n }\n\n function initializeNodeBreadths(columns) {\n const ky = min(columns, c => (y1 - y0 - (c.length - 1) * py) / sum(c, value));\n for (const nodes of columns) {\n let y = y0;\n for (const node of nodes) {\n node.y0 = y;\n node.y1 = y + node.value * ky;\n y = node.y1 + py;\n for (const link of node.sourceLinks) {\n link.width = link.value * ky;\n }\n }\n y = (y1 - y + py) / (nodes.length + 1);\n for (let i = 0; i < nodes.length; ++i) {\n const node = nodes[i];\n node.y0 += y * (i + 1);\n node.y1 += y * (i + 1);\n }\n reorderLinks(nodes);\n }\n }\n\n function computeNodeBreadths(graph) {\n const columns = computeNodeLayers(graph);\n py = Math.min(dy, (y1 - y0) / (max(columns, c => c.length) - 1));\n initializeNodeBreadths(columns);\n for (let i = 0; i < iterations; ++i) {\n const alpha = Math.pow(0.99, i);\n const beta = Math.max(1 - alpha, (i + 1) / iterations);\n relaxRightToLeft(columns, alpha, beta);\n relaxLeftToRight(columns, alpha, beta);\n }\n }\n\n // Reposition each node based on its incoming (target) links.\n function relaxLeftToRight(columns, alpha, beta) {\n for (let i = 1, n = columns.length; i < n; ++i) {\n const column = columns[i];\n for (const target of column) {\n let y = 0;\n let w = 0;\n for (const {source, value} of target.targetLinks) {\n let v = value * (target.layer - source.layer);\n y += targetTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - target.y0) * alpha;\n target.y0 += dy;\n target.y1 += dy;\n reorderNodeLinks(target);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n // Reposition each node based on its outgoing (source) links.\n function relaxRightToLeft(columns, alpha, beta) {\n for (let n = columns.length, i = n - 2; i >= 0; --i) {\n const column = columns[i];\n for (const source of column) {\n let y = 0;\n let w = 0;\n for (const {target, value} of source.sourceLinks) {\n let v = value * (target.layer - source.layer);\n y += sourceTop(source, target) * v;\n w += v;\n }\n if (!(w > 0)) continue;\n let dy = (y / w - source.y0) * alpha;\n source.y0 += dy;\n source.y1 += dy;\n reorderNodeLinks(source);\n }\n if (sort === undefined) column.sort(ascendingBreadth);\n resolveCollisions(column, beta);\n }\n }\n\n function resolveCollisions(nodes, alpha) {\n const i = nodes.length >> 1;\n const subject = nodes[i];\n resolveCollisionsBottomToTop(nodes, subject.y0 - py, i - 1, alpha);\n resolveCollisionsTopToBottom(nodes, subject.y1 + py, i + 1, alpha);\n resolveCollisionsBottomToTop(nodes, y1, nodes.length - 1, alpha);\n resolveCollisionsTopToBottom(nodes, y0, 0, alpha);\n }\n\n // Push any overlapping nodes down.\n function resolveCollisionsTopToBottom(nodes, y, i, alpha) {\n for (; i < nodes.length; ++i) {\n const node = nodes[i];\n const dy = (y - node.y0) * alpha;\n if (dy > 1e-6) node.y0 += dy, node.y1 += dy;\n y = node.y1 + py;\n }\n }\n\n // Push any overlapping nodes up.\n function resolveCollisionsBottomToTop(nodes, y, i, alpha) {\n for (; i >= 0; --i) {\n const node = nodes[i];\n const dy = (node.y1 - y) * alpha;\n if (dy > 1e-6) node.y0 -= dy, node.y1 -= dy;\n y = node.y0 - py;\n }\n }\n\n function reorderNodeLinks({sourceLinks, targetLinks}) {\n if (linkSort === undefined) {\n for (const {source: {sourceLinks}} of targetLinks) {\n sourceLinks.sort(ascendingTargetBreadth);\n }\n for (const {target: {targetLinks}} of sourceLinks) {\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n function reorderLinks(nodes) {\n if (linkSort === undefined) {\n for (const {sourceLinks, targetLinks} of nodes) {\n sourceLinks.sort(ascendingTargetBreadth);\n targetLinks.sort(ascendingSourceBreadth);\n }\n }\n }\n\n // Returns the target.y0 that would produce an ideal link from source to target.\n function targetTop(source, target) {\n let y = source.y0 - (source.sourceLinks.length - 1) * py / 2;\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y += width + py;\n }\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y -= width;\n }\n return y;\n }\n\n // Returns the source.y0 that would produce an ideal link from source to target.\n function sourceTop(source, target) {\n let y = target.y0 - (target.targetLinks.length - 1) * py / 2;\n for (const {source: node, width} of target.targetLinks) {\n if (node === source) break;\n y += width + py;\n }\n for (const {target: node, width} of source.sourceLinks) {\n if (node === target) break;\n y -= width;\n }\n return y;\n }\n\n return sankey;\n}\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export var slice = Array.prototype.slice;\n","import { Flow } from \"./Flow\";\r\nimport { SankeyNodes } from \"./SankeyNodes\";\r\nimport { SankeyLink } from \"./SankeyLink\";\r\nimport { area, line } from \"d3-shape\";\r\nimport { curveMonotoneXTension } from \"../../core/render/MonotoneXTension\";\r\nimport { curveMonotoneYTension } from \"../../core/render/MonotoneYTension\";\r\nimport { Template } from \"../../core/util/Template\";\r\nimport { ListTemplate } from \"../../core/util/List\";\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $type from \"../../core/util/Type\";\r\nimport * as $utils from \"../../core/util/Utils\";\r\nimport * as d3sankey from \"d3-sankey\";\r\n/**\r\n * Sankey series.\r\n *\r\n * @see {@link https://www.amcharts.com/docs/v5/charts/flow-charts/} for more information\r\n * @important\r\n */\r\nexport class Sankey extends Flow {\r\n constructor() {\r\n super(...arguments);\r\n /**\r\n * List of link elements.\r\n *\r\n * @default new ListTemplate\r\n */\r\n Object.defineProperty(this, \"links\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: new ListTemplate(Template.new({}), () => SankeyLink._new(this._root, { themeTags: [\"link\", \"shape\"] }, [this.links.template]))\r\n });\r\n /**\r\n * A series representing sankey nodes.\r\n *\r\n * @default SankeyNodes.new()\r\n */\r\n Object.defineProperty(this, \"nodes\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: this.children.push(SankeyNodes.new(this._root, {}))\r\n });\r\n Object.defineProperty(this, \"_d3Sankey\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: d3sankey.sankey()\r\n });\r\n Object.defineProperty(this, \"_d3Graph\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: void 0\r\n });\r\n Object.defineProperty(this, \"_fillGenerator\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: area()\r\n });\r\n Object.defineProperty(this, \"_strokeGenerator\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: line()\r\n });\r\n }\r\n _afterNew() {\r\n this._settings.themeTags = $utils.mergeTags(this._settings.themeTags, [\"sankey\", this._settings.orientation || \"horizontal\"]);\r\n this._fillGenerator.y0(function (p) {\r\n return p[3];\r\n });\r\n this._fillGenerator.x0(function (p) {\r\n return p[2];\r\n });\r\n this._fillGenerator.y1(function (p) {\r\n return p[1];\r\n });\r\n this._fillGenerator.x1(function (p) {\r\n return p[0];\r\n });\r\n super._afterNew();\r\n }\r\n /**\r\n * @ignore\r\n */\r\n makeLink(dataItem) {\r\n const source = dataItem.get(\"source\");\r\n const target = dataItem.get(\"target\");\r\n const link = this.links.make();\r\n if (source.get(\"unknown\")) {\r\n link.addTag(\"source\");\r\n link.addTag(\"unknown\");\r\n }\r\n if (target.get(\"unknown\")) {\r\n link.addTag(\"target\");\r\n link.addTag(\"unknown\");\r\n }\r\n this.linksContainer.children.push(link);\r\n link._setDataItem(dataItem);\r\n link.set(\"source\", source);\r\n link.set(\"target\", target);\r\n link.series = this;\r\n this.links.push(link);\r\n return link;\r\n }\r\n /**\r\n * @ignore\r\n */\r\n updateSankey() {\r\n const d3Graph = this._d3Graph;\r\n if (d3Graph) {\r\n this._d3Sankey.update(d3Graph);\r\n $array.each(this.dataItems, (dataItem) => {\r\n const link = dataItem.get(\"link\");\r\n link.setPrivate(\"orientation\", this.get(\"orientation\"));\r\n link.markDirty();\r\n });\r\n }\r\n }\r\n _updateLinkColor(dataItem) {\r\n super._updateLinkColor(dataItem);\r\n const orientation = this.get(\"orientation\");\r\n const fillGradient = dataItem.get(\"link\")._fillGradient;\r\n const strokeGradient = dataItem.get(\"link\")._strokeGradient;\r\n if (orientation == \"vertical\") {\r\n if (fillGradient) {\r\n fillGradient.set(\"rotation\", 90);\r\n }\r\n if (strokeGradient) {\r\n strokeGradient.set(\"rotation\", 90);\r\n }\r\n }\r\n else {\r\n if (fillGradient) {\r\n fillGradient.set(\"rotation\", 0);\r\n }\r\n if (strokeGradient) {\r\n strokeGradient.set(\"rotation\", 0);\r\n }\r\n }\r\n }\r\n _getBulletLocation(bullet) {\r\n if (this.get(\"orientation\") == \"vertical\") {\r\n return bullet.get(\"locationY\", 0);\r\n }\r\n else {\r\n return bullet.get(\"locationX\", 0);\r\n }\r\n }\r\n _prepareChildren() {\r\n super._prepareChildren();\r\n let vertical = false;\r\n if (this.get(\"orientation\") == \"vertical\") {\r\n vertical = true;\r\n }\r\n if (this.isDirty(\"orientation\") || this.isDirty(\"linkTension\")) {\r\n const linkTension = this.get(\"linkTension\", 0.5);\r\n if (vertical) {\r\n this._fillGenerator.curve(curveMonotoneYTension(linkTension));\r\n this._strokeGenerator.curve(curveMonotoneYTension(linkTension));\r\n }\r\n else {\r\n this._fillGenerator.curve(curveMonotoneXTension(linkTension));\r\n this._strokeGenerator.curve(curveMonotoneXTension(linkTension));\r\n }\r\n }\r\n if (this._valuesDirty || this._sizeDirty || this.isDirty(\"nodePadding\") || this.isDirty(\"nodeWidth\") || this.isDirty(\"nodeAlign\") || this.isDirty(\"nodeSort\") || this.isDirty(\"orientation\") || this.isDirty(\"linkTension\") || this.isDirty(\"linkSort\")) {\r\n if (this._nodesData.length > 0) {\r\n const d3Sankey = this._d3Sankey;\r\n let w = this.innerWidth();\r\n let h = this.innerHeight();\r\n if (vertical) {\r\n [w, h] = [h, w];\r\n }\r\n d3Sankey.size([w, h]);\r\n d3Sankey.nodePadding(this.get(\"nodePadding\", 10));\r\n d3Sankey.nodeWidth(this.get(\"nodeWidth\", 10));\r\n d3Sankey.nodeSort(this.get(\"nodeSort\", null));\r\n d3Sankey.linkSort(this.get(\"linkSort\"));\r\n switch (this.get(\"nodeAlign\")) {\r\n case \"right\":\r\n d3Sankey.nodeAlign(d3sankey.sankeyRight);\r\n break;\r\n case \"justify\":\r\n d3Sankey.nodeAlign(d3sankey.sankeyJustify);\r\n break;\r\n case \"center\":\r\n d3Sankey.nodeAlign(d3sankey.sankeyCenter);\r\n break;\r\n default:\r\n d3Sankey.nodeAlign(d3sankey.sankeyLeft);\r\n break;\r\n }\r\n this._d3Graph = d3Sankey({ nodes: this._nodesData, links: this._linksData });\r\n $array.each(this.dataItems, (dataItem) => {\r\n const link = dataItem.get(\"link\");\r\n link.setPrivate(\"orientation\", this.get(\"orientation\"));\r\n link.markDirty();\r\n });\r\n const d3Graph = this._d3Graph;\r\n if (d3Graph) {\r\n const nodes = d3Graph.nodes;\r\n $array.each(nodes, (d3SankeyNode) => {\r\n const dataItem = d3SankeyNode.dataItem;\r\n const node = dataItem.get(\"node\");\r\n let x0;\r\n let x1;\r\n let y0;\r\n let y1;\r\n if (vertical) {\r\n x0 = d3SankeyNode.y0;\r\n x1 = d3SankeyNode.y1;\r\n y0 = d3SankeyNode.x0;\r\n y1 = d3SankeyNode.x1;\r\n }\r\n else {\r\n x0 = d3SankeyNode.x0;\r\n x1 = d3SankeyNode.x1;\r\n y0 = d3SankeyNode.y0;\r\n y1 = d3SankeyNode.y1;\r\n }\r\n if ($type.isNumber(x0) && $type.isNumber(x1) && $type.isNumber(y0) && $type.isNumber(y1)) {\r\n node.setAll({ x: x0, y: y0, width: x1 - x0, height: y1 - y0 });\r\n const rectangle = dataItem.get(\"rectangle\");\r\n rectangle.setAll({ width: x1 - x0, height: y1 - y0 });\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n}\r\nObject.defineProperty(Sankey, \"className\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: \"Sankey\"\r\n});\r\nObject.defineProperty(Sankey, \"classNames\", {\r\n enumerable: true,\r\n configurable: true,\r\n writable: true,\r\n value: Flow.classNames.concat([Sankey.className])\r\n});\r\n//# sourceMappingURL=Sankey.js.map","import { Theme } from \"../core/Theme\";\r\n/**\r\n * @ignore\r\n */\r\nexport class AnimatedTheme extends Theme {\r\n setupDefaultRules() {\r\n super.setupDefaultRules();\r\n this.rule(\"Component\").setAll({\r\n interpolationDuration: 600\r\n });\r\n this.rule(\"Hierarchy\").set(\"animationDuration\", 600);\r\n this.rule(\"Scrollbar\").set(\"animationDuration\", 600);\r\n this.rule(\"Tooltip\").set(\"animationDuration\", 300);\r\n this.rule(\"MapChart\").set(\"animationDuration\", 1000);\r\n this.rule(\"MapChart\").set(\"wheelDuration\", 300);\r\n this.rule(\"Entity\").setAll({\r\n stateAnimationDuration: 600\r\n });\r\n this.rule(\"Sprite\").states.create(\"default\", { stateAnimationDuration: 600 });\r\n this.rule(\"Tooltip\", [\"axis\"]).setAll({\r\n animationDuration: 200\r\n });\r\n this.rule(\"WordCloud\").set(\"animationDuration\", 500);\r\n this.rule(\"Polygon\").set(\"animationDuration\", 600);\r\n this.rule(\"ArcDiagram\").set(\"animationDuration\", 600);\r\n }\r\n}\r\n//# sourceMappingURL=AnimatedTheme.js.map","import { AnimatedTheme } from \"../.internal/themes/AnimatedTheme\";\r\nexport default AnimatedTheme;\r\n//# sourceMappingURL=Animated.js.map","\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n {{ $t('common.filters') }}\n 0\" style=\"height: 16px; width: 16px; font-size: 10px; padding-top: 2px; line-height: 12px; background: #FC6B2D; color: #fff; margin-left: 75px; position: absolute; margin-top: -11px;\">{{ filtersCount }}\n \n \n \n \n \n \n \n \n \n Upload Files\n Manage Fee\n Configure File\n \n \n \n \n \n 0\"\n label=\"Country\"\n class=\"col-md-4\"\n >\n \n \n 0\"\n label=\"Brand\"\n label-for=\"psp\"\n class=\"col-md-4\"\n >\n \n \n 0\"\n label=\"Marketplace\"\n label-for=\"psp\"\n class=\"col-md-4\"\n >\n \n \n \n\n \n 0\"\n label=\"Currency\"\n class=\"col-md-4\"\n >\n \n \n \n\n \n Clear Filters\n \n Cancel\n Apply Filters\n \n \n \n\n \n \n Reconciliation Results\n Below are the reconciliation results for the selected data sources. Check more reconciliations\n \n\n \n \n Last Updated:\n \n {{ reconSummary.lastUpdatedDate | date }} | {{ reconSummary.lastUpdatedDate | time }}\n \n \n \n \n \n\n \n\n 0\" class=\"sankeyrecon\" ref=\"sankeyrecon\">\n \n \n Loading...\n \n \n \n \n \n \n You don’t have any data for the reconciliation process!\n Please upload the files you want to reconcile in order to check the results.\n \n \n \n \n {{ $t(\"views.reconciliation.add_files\") }}\n \n \n\n 0\">\n \n \n {{ tableTitle }}\n DS1 = {{dataSourceA.display_name}}\n DS2 = {{dataSourceB.display_name}}\n \n \n \n\n \n \n File Too Large to Download\n \n \n The file is too large to download. It will be sent to your email for easier access. Would you like to send it to the email below?\n \n \n \n \n {{ $store.state.auth.currentUser.email_address }}\n \n \n Cancel\n \n Send Over Email\n \n \n \n \n \n \n \n \n \n\n \n \n {{dataSourceA && paymentChannelListMap[dataSourceA.key].category === 'MARKETPLACE' ? 'Order Number' : 'Txn Ref'}}\n \n \n \n {{ $t(data.label) }} \n \n \n \n \n {{ $t(data.label) }} \n \n \n\n \n \n {{ $t(data.label) }} \n \n \n \n \n {{ $t(data.label) }} \n \n \n \n \n {{ $t(data.label) }} \n \n \n\n \n \n \n {{ (Number(item[field.parent_key][field.col_key])).toLocaleString(\"en-US\", {style: \"currency\",currency: pageCurrency || (dataSourceA ? dataSourceA.currency : \"USD\")}) }}\n \n \n {{ item[field.parent_key][field.col_key] }}\n \n \n \n {{ value }}\n \n \n\n \n {{ row.value | date }}\n at {{ row.value | time }}\n \n \n \n {{ (row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: pageCurrency || (dataSourceA ? dataSourceA.currency : \"USD\")}) }}\n \n\n \n {{ value || 'NA' }}\n \n\n \n \n {{tag}}\n \n \n\n \n {{ (row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: pageCurrency || (dataSourceA ? dataSourceA.currency : \"USD\")}) }}\n \n \n \n {{ (row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: pageCurrency || (dataSourceA ? dataSourceA.currency : \"USD\")}) }}\n \n \n \n {{ (row.value).toLocaleString(\"en-US\", {style: \"currency\",currency: pageCurrency || (dataSourceA ? dataSourceA.currency : \"USD\")}) }}\n \n \n \n {{ value }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./dashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./dashboard.vue?vue&type=template&id=16f42c82&scoped=true&\"\nimport script from \"./dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./dashboard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./dashboard.vue?vue&type=style&index=0&id=16f42c82&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"16f42c82\",\n null\n \n)\n\nexport default component.exports","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./country.vue?vue&type=style&index=0&id=309ffd22&lang=scss&scoped=true&\""],"sourceRoot":""}
{{ selectedCurrency || '-- Select Currency --' }}
{{ country ? getRegionName(country) : '-- Select Country --' }}
Below are the reconciliation results for the selected data sources. Check more reconciliations
You don’t have any data for the reconciliation process!
Please upload the files you want to reconcile in order to check the results.
{{ tableTitle }}
DS1 = {{dataSourceA.display_name}}
DS2 = {{dataSourceB.display_name}}
The file is too large to download. It will be sent to your email for easier access. Would you like to send it to the email below?
{{ $store.state.auth.currentUser.email_address }}
{{ row.value | date }}
at {{ row.value | time }}