UNPKG

440 kBSource Map (JSON)View Raw
1{"version":3,"file":"Sprite.js","sourceRoot":"","sources":["../../../../src/.internal/core/Sprite.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * This is the main class that encapsulates every object on the chart.\r\n *\r\n * If it's an element that is to be displayed on the screen at some point, its\r\n * class must extend [[Sprite]] class.\r\n */\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { SpriteState } from \"./SpriteState\";\r\nimport { ISpriteEvents, SpriteEventDispatcher, AMEvent } from \"./SpriteEvents\";\r\nexport { ISpriteEvents, SpriteEventDispatcher, AMEvent };\r\n\r\nimport { BaseObjectEvents } from \"./Base\";\r\nimport { Adapter, globalAdapter } from \"./utils/Adapter\";\r\nimport { ITheme } from \"../themes/ITheme\";\r\nimport { Dictionary, IDictionaryEvents, DictionaryTemplate, DictionaryDisposer } from \"./utils/Dictionary\";\r\nimport { ListTemplate, ListDisposer, List } from \"./utils/List\";\r\nimport { EventDispatcher } from \"./utils/EventDispatcher\";\r\nimport { MultiDisposer, IDisposer, Disposer, MutableValueDisposer } from \"./utils/Disposer\";\r\nimport { Animation, IAnimatable, IAnimationOptions, AnimationDisposer } from \"./utils/Animation\";\r\nimport { Optional } from \"./utils/Type\";\r\nimport { Group } from \"./rendering/Group\";\r\nimport { Paper, getGhostPaper } from \"./rendering/Paper\";\r\nimport { DataItem } from \"./DataItem\";\r\nimport { Container } from \"./Container\";\r\nimport { Pattern } from \"./rendering/fills/Pattern\";\r\nimport { LinearGradient } from \"./rendering/fills/LinearGradient\";\r\nimport { RadialGradient } from \"./rendering/fills/RadialGradient\";\r\nimport { SVGContainer } from \"./rendering/SVGContainer\";\r\nimport { Align } from \"./defs/Align\";\r\nimport { Roles, AriaLive } from \"./defs/Accessibility\";\r\nimport { IPlugin } from \"./utils/Plugin\";\r\nimport { Popup } from \"./elements/Popup\";\r\nimport { Modal } from \"./elements/Modal\";\r\nimport { Color, color, toColor } from \"./utils/Color\";\r\nimport { Ordering } from \"./utils/Order\";\r\n\r\nimport { HorizontalCenter } from \"./defs/HorizontalCenter\";\r\nimport { VerticalCenter } from \"./defs/VerticalCenter\";\r\nimport { VerticalAlign } from \"./defs/VerticalAlign\";\r\nimport { ShapeRendering } from \"./defs/ShapeRendering\";\r\nimport { AMElement } from \"./rendering/AMElement\";\r\nimport { Filter } from \"./rendering/filters/Filter\";\r\n\r\nimport { ColorModifier } from \"./rendering/fills/ColorModifier\";\r\n\r\nimport { getInteraction } from \"./interaction/Interaction\";\r\nimport { InteractionObject } from \"./interaction/InteractionObject\";\r\n\r\nimport { IInertiaOptions, ISwipeOptions, IHitOptions, IHoverOptions, ICursorOptions, IKeyboardOptions, IMouseOptions } from \"./interaction/InteractionOptions\";\r\nimport { IPointer } from \"./interaction/Pointer\";\r\nimport { MouseCursorStyle } from \"./interaction/Mouse\";\r\nimport { InertiaTypes } from \"./interaction/Inertia\";\r\nimport { IStyleProperty } from \"./defs/IStyleProperty\";\r\n\r\nimport { options } from \"./Options\";\r\nimport { registry } from \"./Registry\";\r\nimport { IPoint } from \"./defs/IPoint\";\r\nimport { IRectangle } from \"./defs/IRectangle\";\r\nimport { Tooltip } from \"./elements/Tooltip\";\r\n\r\nimport { NumberFormatter } from \"./formatters/NumberFormatter\";\r\nimport { DateFormatter } from \"./formatters/DateFormatter\";\r\nimport { DurationFormatter } from \"./formatters/DurationFormatter\";\r\nimport { getTextFormatter } from \"./formatters/TextFormatter\";\r\nimport { Language } from \"./utils/Language\";\r\nimport { Export } from \"./export/Export\";\r\nimport { AmChartsLogo } from \"./elements/AmChartsLogo\";\r\n\r\n\r\nimport { ISVGAttribute } from \"./rendering/AMElement\";\r\n\r\nimport * as $utils from \"./utils/Utils\";\r\nimport * as $math from \"./utils/Math\";\r\nimport * as $strings from \"./utils/Strings\";\r\nimport * as $array from \"./utils/Array\";\r\nimport * as $object from \"./utils/Object\";\r\nimport * as $type from \"./utils/Type\";\r\nimport * as $iter from \"./utils/Iterator\";\r\n\r\nimport { system } from \"./System\";\r\n\r\nimport { Percent, percent } from \"./utils/Percent\";\r\n\r\n\r\n/**\r\n * ============================================================================\r\n * REQUISITES\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines properties for [[Sprite]]\r\n */\r\nexport interface ISpriteProperties {\r\n\tdisabled?: boolean;\r\n\tx?: number | Percent;\r\n\ty?: number | Percent;\r\n\twidth?: number | Percent;\r\n\theight?: number | Percent;\r\n\tscale?: number;\r\n\trotation?: number;\r\n\tpixelPerfect?: boolean;\r\n\tmarginLeft?: number;\r\n\tmarginRight?: number;\r\n\tmarginTop?: number;\r\n\tmarginBottom?: number;\r\n\tfillOpacity?: number;\r\n\tfill?: Color | LinearGradient | RadialGradient | Pattern;\r\n\topacity?: number;\r\n\tstroke?: Color | LinearGradient | RadialGradient | Pattern;\r\n\tstrokeOpacity?: number;\r\n\tstrokeWidth?: number;\r\n\tstrokeDasharray?: string;\r\n\tstrokeDashoffset?: number;\r\n\tstrokeLinecap?: \"butt\" | \"square\" | \"round\";\r\n\tstrokeLinejoin?: \"miter\" | \"round\" | \"bevel\";\r\n\tshapeRendering?: ShapeRendering;\r\n\tdraggable?: boolean;\r\n\tinert?: boolean;\r\n\tresizable?: boolean;\r\n\tswipeable?: boolean;\r\n\ttrackable?: boolean;\r\n\thoverable?: boolean;\r\n\tclickable?: boolean;\r\n\ttogglable?: boolean;\r\n\twheelable?: boolean;\r\n\tfocusable?: boolean;\r\n\ttabindex?: number;\r\n\tcontextMenuDisabled?: boolean;\r\n\tvisible?: boolean;\r\n\ttooltipText?: string;\r\n\ttooltipHTML?: string;\r\n\ttooltipX?: number | Percent;\r\n\ttooltipY?: number | Percent;\r\n\talwaysShowTooltip?: boolean;\r\n\ttooltipPosition?: \"fixed\" | \"pointer\";\r\n\tshowTooltipOn?: \"hover\" | \"hit\" | \"always\";\r\n\tinteractionsEnabled?: boolean;\r\n\thorizontalCenter?: HorizontalCenter;\r\n\tverticalCenter?: VerticalCenter;\r\n\talign?: Align;\r\n\tvalign?: VerticalAlign;\r\n\tpaddingLeft?: number;\r\n\tpaddingRight?: number;\r\n\tpaddingTop?: number;\r\n\tpaddingBottom?: number;\r\n\tminX?: number;\r\n\tminY?: number;\r\n\tmaxX?: number;\r\n\tmaxY?: number;\r\n\tdx?: number;\r\n\tdy?: number;\r\n\trole?: Roles;\r\n\treaderDescribedBy?: string;\r\n\treaderLabelledBy?: string;\r\n\treaderLive?: AriaLive;\r\n\treaderControls?: string;\r\n\treaderChecked?: boolean;\r\n\treaderHidden?: boolean;\r\n\treaderDescription?: string;\r\n\treaderTitle?: string;\r\n\treaderOrientation?: string;\r\n\treaderValueNow?: string;\r\n\treaderValueText?: string;\r\n\tnonScaling?: boolean;\r\n\tnonScalingStroke?: boolean;\r\n\tzIndex?: number;\r\n\tminWidth?: number;\r\n\tmaxWidth?: number;\r\n\tminHeight?: number;\r\n\tmaxHeight?: number;\r\n\tfillModifier?: ColorModifier;\r\n\tstrokeModifier?: ColorModifier;\r\n\thoverOnFocus?: boolean;\r\n\tpath?: string;\r\n\turlTarget?: string;\r\n\turl?: string;\r\n\thidden?: boolean;\r\n\tshowOnInit?: boolean;\r\n\tid?: string;\r\n\tisActive?: boolean;\r\n\tisHover?: boolean;\r\n\tuserClassName?: string;\r\n}\r\n\r\n/**\r\n * Defines animation options\r\n */\r\nexport interface ISpriteAnimationOptions {\r\n\tfrom?: Percent | Color | number | string;\r\n\tto: Percent | Color | number | string;\r\n\tproperty: any; // todo: this[\"_properties\"] can not be used here, think.\r\n}\r\n\r\n/**\r\n * Defines list ofvisual properties\r\n */\r\nexport const visualProperties: (keyof ISpriteProperties)[] = [\"fill\", \"fillOpacity\", \"stroke\", \"strokeOpacity\", \"strokeWidth\", \"strokeDasharray\", \"strokeDashoffset\", \"strokeLinecap\", \"strokeLinejoin\"]; // do not add opacity here, as it is used for showing/hiding\r\n\r\n/**\r\n * Represents a list of available adapters for [[Sprite]]\r\n */\r\nexport interface ISpriteAdapters extends ISpriteProperties {\r\n\r\n\tpixelHeight: number;\r\n\tpixelWidth: number;\r\n\trelativeHeight: number\r\n\trelativeWidth: number;\r\n\tmeasuredHeight: number;\r\n\tmeasuredWidth: number;\r\n\touterHeight: number;\r\n\touterWidth: number;\r\n\tinnerHeight: number;\r\n\tinnerWidth: number;\r\n\tglobalScale: number;\r\n\tpixelMarginRight: number;\r\n\trelativeMarginRight: number;\r\n\tpixelMarginLeft: number;\r\n\trelativeMarginLeft: number;\r\n\tpixelMarginTop: number;\r\n\trelativeMarginTop: number;\r\n\tpixelMarginBottom: number;\r\n\trelativeMarginBottom: number;\r\n\tpixelX: number;\r\n\trelativeX: number;\r\n\tpixelY: number;\r\n\trelativeY: number;\r\n\tmask: Sprite;\r\n\tpopulateString: string;\r\n\r\n\tinertiaOptions: Dictionary<InertiaTypes, IInertiaOptions>;\r\n\thitOptions: IHitOptions;\r\n\thoverOptions: IHoverOptions;\r\n\tswipeOptions: ISwipeOptions;\r\n\tkeyboardOptions: IKeyboardOptions;\r\n\tmouseOptions: IMouseOptions;\r\n\tcursorOptions: ICursorOptions;\r\n\tcriticalError: Error;\r\n};\r\n\r\n/**\r\n * ============================================================================\r\n * MAIN CLASS\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Sprite represents any displayable element.\r\n *\r\n * This is the main class that encapsulates every object on the chart.\r\n *\r\n * If it's an element that is to be displayed on the screen at some point, its\r\n * class must extend [[Sprite]] class.\r\n *\r\n * [[Sprite]] class represents the a hierarchical structure. Every object that\r\n * extends [[Sprite]] can have children, that would inherit their properties,\r\n * such as language, formatters, etc.\r\n *\r\n * @see {@link SpriteState}\r\n * @see {@link ISpriteEvents} for a list of available events\r\n * @see {@link ISpriteAdapters} for a list of available Adapters\r\n *\r\n * @todo Review child elements that need to go into `_disposers`\r\n * @important\r\n */\r\nexport class Sprite extends BaseObjectEvents implements IAnimatable {\r\n\r\n\t/**\r\n\t * Defines property types.\r\n\t */\r\n\tpublic _properties!: ISpriteProperties;\r\n\r\n\t/**\r\n\t * Defines state type.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\t//public _state: SpriteState;\r\n\r\n\t/**\r\n\t * Defines type used in the Sprite.\r\n\t */\r\n\tpublic _adapter!: ISpriteAdapters;\r\n\r\n\t/**\r\n\t * Holds values for Sprite's properties.\r\n\t */\r\n\tpublic properties: this[\"_properties\"] = {};\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: ISpriteEvents;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _eventDispatcher: SpriteEventDispatcher<AMEvent<this, this[\"_events\"]>> = new SpriteEventDispatcher(this);\r\n\r\n\t/**\r\n\t * Event dispatcher.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/event-listeners/} for more info about Events\r\n\t */\r\n\tpublic get events(): SpriteEventDispatcher<AMEvent<this, this[\"_events\"]>> {\r\n\t\treturn this._eventDispatcher;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic _adapterO: Adapter<this, this[\"_adapter\"]>;\r\n\r\n\t/**\r\n\t * Holds Adapter.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/adapters/} for more info about Adapters\r\n\t */\r\n\tpublic get adapter(): Adapter<this, this[\"_adapter\"]> {\r\n\t\tif (!this._adapterO) {\r\n\t\t\tthis._adapterO = new Adapter<this, this[\"_adapter\"]>(this);\r\n\t\t}\r\n\t\treturn this._adapterO;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprivate _bindings: { [key: string]: IDisposer } = {};\r\n\r\n\t/**\r\n\t * Holds indicator if this Sprite is a \"template\" to be used for creating\r\n\t * other Sprites from and should not be treated as full-fledged element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _isTemplate: boolean = false;\r\n\r\n\tprotected _isPath: boolean = false;\r\n\r\n\t/**\r\n\t * Holds collection of Sprite States.\r\n\t */\r\n\tpublic _states: $type.Optional<DictionaryTemplate<string, SpriteState<this[\"_properties\"], this[\"_adapter\"]>>>;\r\n\r\n\t/**\r\n\t * Holds indicator whether this sprite was already initialized.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _inited: boolean = false;\r\n\r\n\t/**\r\n\t * Holds indicator whether this sprite was already initialized and ready.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _ready: boolean = false;\r\n\r\n\t/**\r\n\t * A reference to a Tooltip for this Sprite.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _tooltip: $type.Optional<Tooltip>;\r\n\r\n\t/**\r\n\t * A special data item which tooltip will use when formatting data. In case\r\n\t * it is not set, dataItem will be used.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _tooltipDataItem: $type.Optional<DataItem>;\r\n\r\n\t/**\r\n\t * A reference to another sprite or sprite template from which tooltip should take colors if getFillFromObject or getStrokeFromObject are set to true.\r\n\t * Mostly used when we need to adjust tooltip color for a series, depending on column or bullet color.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _tooltipColorSource: $type.Optional<Sprite>;\r\n\r\n\t/**\r\n\t * If `sprite.hide()` is called and we have \"hidden\" state and\r\n\t * `transitionDuration > 0`, we set `isHiding` flag to `true` in order to\r\n\t * avoid restarting animations in case `hide()` method is called multiple\r\n\t * times.\r\n\t */\r\n\tpublic isHiding: boolean = false;\r\n\r\n\t/**\r\n\t * If `sprite.hide()` is called, we set isHidden to true when sprite is hidden.\r\n\t * This was added becaus hidden state might have visibility set to true and so\r\n\t * there would not be possible to find out if a sprite is technically hidden or not.\r\n\t */\r\n\tprotected _isHidden: boolean = false;\r\n\r\n\t/**\r\n\t * This property indicates if Sprite is currently being revealed from hidden\r\n\t * state. This is used to prevent multiple calls to `sprite.show()` to\r\n\t * restart reveal animation. (if enabled)\r\n\t */\r\n\tpublic isShowing: boolean = false;\r\n\r\n\t/**\r\n\t * Indicates if this element is a standalone instance. A \"standalone\r\n\t * instance\" means this is a autonomous object which maintains its own\r\n\t * set of controls like Preloader, Export, etc.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic isStandaloneInstance: boolean = false;\r\n\r\n\t/**\r\n\t * Indicates if togglable Sprite is currently active (toggled on).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _isActive: boolean = false;\r\n\r\n\t/**\r\n\t * A Sprite element to use as a mask for this Sprite.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _mask = new MutableValueDisposer<Sprite>();\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected _clipPath: Optional<Group>;\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected _clipElement: $type.Optional<AMElement>;\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected _positionPrecision: number = 3;\r\n\r\n\t/**\r\n\t * Holds reference to Sprite's [[InteractionObject]]. Sprite does not\r\n\t * perform any user interactions directly, it happens via [[InteractionObject]].\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _interaction: $type.Optional<InteractionObject>;\r\n\r\n\t/**\r\n\t * An instance of [[Language]].\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _language = new MutableValueDisposer<Language>();\r\n\r\n\t/**\r\n\t * An instance of [[NumberFormatter]].\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _numberFormatter: $type.Optional<NumberFormatter>;\r\n\r\n\t/**\r\n\t * An instance of [[DateFormatter]].\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _dateFormatter: $type.Optional<DateFormatter>;\r\n\r\n\t/**\r\n\t * An instance of [[DurationFormatter]].\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _durationFormatter: $type.Optional<DurationFormatter>;\r\n\r\n\t/**\r\n\t * An HTML element to which [[svgContainer]] is added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _htmlContainer: $type.Optional<HTMLElement>;\r\n\r\n\t/**\r\n\t * An HTML element to which all chart elements are added.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _svgContainer: $type.Optional<SVGContainer>;\r\n\r\n\t/**\r\n\t * A [[Container]] instance to place this element's [[Tooltip]] elements in\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _tooltipContainer: $type.Optional<Container>;\r\n\r\n\r\n\tprotected _urlDisposer: $type.Optional<IDisposer>;\r\n\r\n\t/**\r\n\t * Should this element be measured when measuring its parent container's\r\n\t * dimentions?\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _isMeasured: $type.Optional<boolean>;\r\n\r\n\t/**\r\n\t * Indicates if the chart should follow right-to-left rules.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _rtl: boolean;\r\n\r\n\t/**\r\n\t * Holds [[Export]] object.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _exporting = new MutableValueDisposer<Export>();\r\n\r\n\t/**\r\n\t * Should this Sprite be included when exporting?\r\n\t */\r\n\tprotected _exportable: boolean = true;\r\n\r\n\t/**\r\n\t * A reference to a top-level SVG node for this Sprite element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _element: Optional<AMElement>;\r\n\r\n\t/**\r\n\t * Holds Sprite's main SVG group (`<g>`) element. Other Sprite's elements\r\n\t * are all placed in this group.\r\n\t */\r\n\tpublic group: Group;\r\n\r\n\t/**\r\n\t * A reference to [[Paper]] SVG renderer used to create SVG nodes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _paper: $type.Optional<Paper>;\r\n\r\n\t/**\r\n\t * Elements's top-level [[Container]].\r\n\t *\r\n\t *\r\n\t * @return Top-level ascendant\r\n\t */\r\n\tprotected _topParent: Optional<Container>;\r\n\r\n\t/**\r\n\t * Data item assigned to the sprite. It might contain information defining\r\n\t * some style properties.\r\n\t */\r\n\tpublic _dataItem: $type.Optional<DataItem>;\r\n\r\n\t/**\r\n\t * Parent container.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _parent: Container;\r\n\r\n\t/**\r\n\t * Sprite's \"virtual\" parent.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _virtualParent: Sprite;\r\n\r\n\t/**\r\n\t * Defines bounding box (square) for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _bbox: IRectangle = { x: 0, y: 0, width: 0, height: 0 };\r\n\r\n\t/**\r\n\t * Base tab index for the Sprite. Used for TAB-key selection order.\r\n\t *\r\n\t * Use accessors `tabIndex` to set and retrieve.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _tabindex: $type.Optional<number>;\r\n\r\n\t/**\r\n\t * Should system tooltips be allowed to be displayed if the element has\r\n\t * `readerTitle` set?\r\n\t *\r\n\t * Use accessors `showSystemTooltip` to set and retrieve.\r\n\t *\r\n\t * This is an accessibility feature.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _showSystemTooltip: $type.Optional<boolean>;\r\n\r\n\t/**\r\n\t * List of animations currently playing for this Sprite.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _animations: $type.Optional<Array<Animation>>;\r\n\r\n\t/**\r\n\t * A link to [[Disposer]] for event handler which is attached to hide\r\n\t * animation. In some cases we need to cancel this event. This property is\r\n\t * used to hold the reference to disposer of this event so that we can\r\n\t * cancel it by calling its `dispose()` method.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _showHideDisposer: $type.Optional<IDisposer>;\r\n\r\n\t/**\r\n\t * If element is currently hiding, this property will hold a reference to\r\n\t * [[Animation]] instance, which is handling hiding animation.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _hideAnimation: $type.Optional<Animation>;\r\n\r\n\t/**\r\n\t * List of [[Filter]] items that are currently applied to the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _filters: $type.Optional<List<Filter>>;\r\n\r\n\t/**\r\n\t * A shortcut to the special \"Focus\" filter which is applied when the element\r\n\t * gains focus.\r\n\t *\r\n\t * This is an accessibility feature.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _focusFilter: $type.Optional<Filter>;\r\n\r\n\t/**\r\n\t * Indicates if this element is invalid and should be re-validated (redrawn).\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalid: boolean = false;\r\n\r\n\t/**\r\n\t * Indicates if this elements position is invalid and should be repositioned\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic positionInvalid: boolean = false;\r\n\r\n\t/**\r\n\t * A collection of key/value pairs that can be used to bind specific Sprite\r\n\t * properties to [[DataItem]].\r\n\t *\r\n\t * For example: `fill` property can be bound to `myCustomColor` field in\r\n\t * DataItem. The Sprite will automatically get the value for `fill` from its\r\n\t * DataItem.\r\n\t *\r\n\t * Can be set for each [[SpriteState]] individually to override default\r\n\t * bindings.\r\n\t *\r\n\t * @see {@link SpriteState}\r\n\t */\r\n\tpublic propertyFields: { [index in keyof this[\"_properties\"]]?: string } = {};\r\n\t//public propertyFields: Dictionary<keyof this[\"_properties\"], string> = new Dictionary<keyof this[\"_properties\"], string>();\r\n\r\n\t/**\r\n\t * Element's relative width.\r\n\t *\r\n\t * Do not set this property directly. Use `width` accessor with [[Percent]]\r\n\t * value instead.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic percentWidth: $type.Optional<number>;\r\n\r\n\t/**\r\n\t * Element's relative height.\r\n\t *\r\n\t * Do not set this property directly. Use `height` accessor with [[Percent]]\r\n\t * value instead.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic percentHeight: $type.Optional<number>;\r\n\r\n\t/**\r\n\t * An SVG group element that is used to put all SVG filters to.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic filterElement: $type.Optional<Group>;\r\n\r\n\t/**\r\n\t * A field in data context of element's `dataItem` that holds config values\r\n\t * for this element.\r\n\t *\r\n\t * This is a very powerful feature, allowing changing virtually any setting,\r\n\t * including those for element's children, for the element via data.\r\n\t *\r\n\t * Example data:\r\n\t *\r\n\t * ```JSON\r\n\t * {\r\n\t * \"value\": 100,\r\n\t * \"config\": {\r\n\t * \"fill\": \"#F00\"\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * If you set element's `configField = \"config\"`, the element for this\r\n\t * specific data point will have a red fill.\r\n\t */\r\n\tpublic configField: $type.Optional<string>;\r\n\r\n\t/**\r\n\t * Reference to element's `<title>` element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _titleElement: Optional<AMElement>;\r\n\r\n\t/**\r\n\t * Reference to element's `<description>` element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected _descriptionElement: Optional<AMElement>;\r\n\r\n\t/**\r\n\t * Specifies if property changes on this object should be propagated to the\r\n\t * objects cloned from this object.\r\n\t *\r\n\t * This setting affects property changes *after* cloning, since at the moment\r\n\t * of cloning all of properties from source object are copied to the clone\r\n\t * anyway.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tpublic applyOnClones: boolean = false;\r\n\r\n\t/**\r\n\t * a reference to an object which should be used when populating string. used for tooltip label mostly.\r\n\t * @ignore\r\n\t */\r\n\tpublic populateStringFrom: any;\r\n\r\n\t/**\r\n\t * Internal storage properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\r\n\tprotected _measuredWidth: number;\r\n\tprotected _measuredHeight: number;\r\n\r\n\t// unrotated unscaled\r\n\tprotected _measuredWidthSelf: number = 0;\r\n\tprotected _measuredHeightSelf: number = 0;\r\n\r\n\tprotected _prevMeasuredWidth: number;\r\n\tprotected _prevMeasuredHeight: number;\r\n\r\n\tprotected _pixelWidth: $type.Optional<number>;\r\n\tprotected _pixelHeight: $type.Optional<number>;\r\n\r\n\tprotected _relativeWidth: $type.Optional<number>;\r\n\tprotected _relativeHeight: $type.Optional<number>;\r\n\r\n\t// read only, sprite extreme coordinates\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxLeft: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxRight: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxTop: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxBottom: number = 0;\r\n\r\n\t// not rotated and not scaled\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxLeftSelf: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxRightSelf: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxTopSelf: number = 0;\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic maxBottomSelf: number = 0;\r\n\r\n\tprotected _isDragged: boolean = false;\r\n\r\n\tprotected _isResized: boolean = false;\r\n\r\n\t/**\r\n\t * @deprecated Moved to [[SpriteProperties]]\r\n\t */\r\n\tprotected _disabled: boolean = false;\r\n\r\n\tprotected _internalDisabled: boolean = false;\r\n\r\n\tprotected _updateDisabled: boolean = false;\r\n\r\n\tprotected _maskRectangle: $type.Optional<IRectangle>;\r\n\r\n\tprotected _internalDefaultsApplied: boolean = false;\r\n\r\n\tprotected _interactionDisposer: $type.Optional<IDisposer>;\r\n\r\n\t/**\r\n\t * You can set bbox from outside if you know what size your element must be (used in radar chart for example)\r\n\t * @ignore\r\n\t */\r\n\tpublic definedBBox: IRectangle;\r\n\r\n\t/**\r\n\t * Time in milliseconds after which rollout event happens when user rolls-out of the sprite. This helps to avoid flickering in some cases.\r\n\t */\r\n\tpublic rollOutDelay: number = 0;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _outTimeout: $type.Optional<IDisposer>;\r\n\r\n\t/**\r\n\t * This flag is set to `true` for the initial sprite you create and place\r\n\t * to the div so that we could clear all additional\r\n\t * sprites/containers when this sprite is disposed.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic isBaseSprite: boolean = false;\r\n\r\n\t/**\r\n\t * Indicates whether this sprite should be cloned when cloning its parent\r\n\t * container. We set this to `false` in those cases when a sprite is created\r\n\t * by the class, so that when cloning a duplicate sprite would not appear.\r\n\t */\r\n\tpublic shouldClone: boolean = true;\r\n\r\n\t/**\r\n\t * A property which you can use to store any data you want.\r\n\t */\r\n\tpublic dummyData: any;\r\n\r\n\t/**\r\n\t * A reference to a real fill object. Sometimes might be useful to modify\r\n\t * gradient (when fill is color but we have FillModifier).\r\n\t */\r\n\tpublic realFill: Color | Pattern | LinearGradient | RadialGradient;\r\n\r\n\t/**\r\n\t * A reference to a real stroke object. Sometimes might be useful to modify\r\n\t * gradient (when fill is color but we have a FillModifier).\r\n\t */\r\n\tpublic realStroke: Color | Pattern | LinearGradient | RadialGradient;\r\n\r\n\t/**\r\n\t * A reference to amCharts logo element.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic logo: AmChartsLogo;\r\n\r\n\t/**\r\n\t * [_baseId description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _baseId: string;\r\n\r\n\t/**\r\n\t * A read-only flag which indicates if a sprite has completed its initial\r\n\t * animation (if `showOnInit = true`).\r\n\t *\r\n\t * In case `showOnInit = false`, `appeared` is set to `true` on init.\r\n\t *\r\n\t * @readonly\r\n\t */\r\n\tpublic appeared: boolean = false;\r\n\r\n\t/**\r\n\t * [ex description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore\r\n\t */\r\n\tpublic ex: number = 0;\r\n\r\n\t/**\r\n\t * [ey description]\r\n\t *\r\n\t * @todo Description\r\n\t * @ignore\r\n\t */\r\n\tpublic ey: number = 0;\r\n\r\n\t/**\r\n\t * [_showOnInitDisposer description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _showOnInitDisposer: MultiDisposer;\r\n\r\n\t/**\r\n\t * Holds the list of plugins attached to this Sprite.\r\n\t */\r\n\tprotected _plugins: $type.Optional<List<IPlugin>>;\r\n\r\n\t/**\r\n\t * Indicates if the sprite can be moved around when resizing it with two fingers (will only work if draggable = false)\r\n\t * @ignore\r\n\t */\r\n\tpublic dragWhileResize: boolean = false;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic vpDisposer: MultiDisposer;\r\n\r\n\tprotected _alwaysShowDisposers: IDisposer[];\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic measureFailed: boolean = false;\r\n\r\n\t/**\r\n\t * If this flag is set to true, calling show() will not reveal the sprite.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic preventShow: boolean = false;\r\n\r\n\t/**\r\n\t * When cloning a sprite, if the template has it's own tooltip assigned, this tooltip is also cloned by default.\r\n\t * This is not good for cpu and sometimes you might only need one single tooltip for all clones. Set this to false in order not to clone tooltip.\r\n\t */\r\n\tpublic cloneTooltip: boolean = true;\r\n\r\n\t/**\r\n\t * Constructor:\r\n\t * * Creates initial node\r\n\t * * Sets default properties\r\n\t * * Creates required default states\r\n\t * * Inits accessibility\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\r\n\t\tthis.className = \"Sprite\";\r\n\r\n\t\tthis._disposers.push(this._eventDispatcher);\r\n\r\n\t\t// Generate a unique ID\r\n\t\t$utils.used(this.uid);\r\n\r\n\t\t// Create SVG group to hold everything in\r\n\t\tthis.group = this.paper.addGroup(\"g\");\r\n\r\n\t\t// Set defaults\r\n\t\t// it is better to set defauls like this in order to save invaliation calls and events\r\n\t\tthis.setPropertyValue(\"scale\", 1);\r\n\t\tthis.setPropertyValue(\"rotation\", 0);\r\n\t\tthis.setPropertyValue(\"align\", \"none\");\r\n\t\tthis.setPropertyValue(\"valign\", \"none\");\r\n\t\tthis.setPropertyValue(\"pixelPerfect\", false);\r\n\t\tthis.setPropertyValue(\"visible\", true);\r\n\t\tthis.setPropertyValue(\"tooltipPosition\", \"fixed\");\r\n\t\tthis.setPropertyValue(\"verticalCenter\", \"none\");\r\n\t\tthis.setPropertyValue(\"horizontalCenter\", \"none\");\r\n\r\n\t\tthis.setPropertyValue(\"tooltipX\", percent(50));\r\n\t\tthis.setPropertyValue(\"tooltipX\", percent(50));\r\n\r\n\t\tthis.setPropertyValue(\"marginTop\", 0);\r\n\t\tthis.setPropertyValue(\"marginBottom\", 0);\r\n\t\tthis.setPropertyValue(\"marginLeft\", 0);\r\n\t\tthis.setPropertyValue(\"marginRight\", 0);\r\n\r\n\t\tthis.setPropertyValue(\"dx\", 0);\r\n\t\tthis.setPropertyValue(\"dy\", 0);\r\n\r\n\t\tthis.setPropertyValue(\"paddingTop\", 0);\r\n\t\tthis.setPropertyValue(\"paddingBottom\", 0);\r\n\t\tthis.setPropertyValue(\"paddingRight\", 0);\r\n\t\tthis.setPropertyValue(\"paddingLeft\", 0);\r\n\r\n\t\tthis.setPropertyValue(\"togglable\", false);\r\n\t\tthis.setPropertyValue(\"hidden\", false);\r\n\t\tthis.setPropertyValue(\"urlTarget\", \"_self\");\r\n\t\tthis.setPropertyValue(\"alwaysShowTooltip\", false);\r\n\t\tthis.setPropertyValue(\"showTooltipOn\", \"hover\");\r\n\r\n\t\tthis._prevMeasuredWidth = 0;\r\n\t\tthis._prevMeasuredHeight = 0;\r\n\t\tthis._measuredWidth = 0;\r\n\t\tthis._measuredHeight = 0;\r\n\r\n\t\tthis._isMeasured = true;\r\n\r\n\t\t// Invalidate the Sprite so that renderer knows it needs to be drawn\r\n\t\tthis.invalidate();\r\n\r\n\t\t//this.states.create(\"default\").properties.opacity = 1;\r\n\r\n\t\t// Apply the theme\r\n\t\tthis.applyTheme();\r\n\r\n\t\t//this._disposers.push(this._clickable);\r\n\r\n\t\t// Decorate adapter with events so that we can apply its settings whenever\r\n\t\t// it is modified\r\n\t\t// @todo Think what to do here. We can't just apply the adapter value to\r\n\t\t// property since not all of those are for properties. Commented out for\r\n\t\t// now.\r\n\t\t/*this.adapter.events.on(\"inserted\", (ev: any) => {\r\n\t\t\t(<any>this)[ev.newValue.key] = (<any>this)[ev.newValue.key];\r\n\t\t});\r\n\t\tthis.adapter.events.on(\"removed\", (ev: any) => {\r\n\t\t\t(<any>this)[ev.newValue.key] = (<any>this)[ev.newValue.key];\r\n\t\t});*/\r\n\r\n\t\t// Add disposable dependencies to `_disposers` so they are automatically\r\n\t\t// disposed of when this object is disposed\r\n\t\tthis._disposers.push(this.events);\r\n\t\tthis._disposers.push(this.group);\r\n\t\tthis._disposers.push(this._mask);\r\n\t\tthis._disposers.push(this._language);\r\n\t\tthis._disposers.push(this._exporting);\r\n\t\t//this._disposers.push(this._parent);\r\n\t\t//this._disposers.push(this._modal);\r\n\r\n\t\tthis._disposers.push(new Disposer(() => {\r\n\t\t\t$object.each(this._bindings, (key, value) => {\r\n\t\t\t\tvalue.dispose();\r\n\t\t\t});\r\n\t\t}));\r\n\r\n\t\tthis.setPropertyValue(\"interactionsEnabled\", true);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * ELEMENT VALIDATION, INIT, AND DRAWING STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Applies properties from all assigned themes.\r\n\t *\r\n\t * We do this here so that we can apply class names as well.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic applyTheme(): void {\r\n\t\tsuper.applyTheme();\r\n\t\tif (options.autoSetClassName) {\r\n\t\t\tthis.setClassName();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns theme(s) used by this object either set explicitly on this\r\n\t * element, inherited from parent, or inherited from [[System]].\r\n\t *\r\n\t * @return An array of theme references\r\n\t */\r\n\tpublic getCurrentThemes(): ITheme[] {\r\n\t\tconst themes = this._themes;\r\n\r\n\t\tif (themes) {\r\n\t\t\treturn themes;\r\n\r\n\t\t} else {\r\n\t\t\tconst parent = this._parent;\r\n\r\n\t\t\tif (parent) {\r\n\t\t\t\treturn parent.getCurrentThemes();\r\n\r\n\t\t\t} else {\r\n\t\t\t\treturn registry.themes;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Called just before element's validation, this function allows setting\r\n\t * defaults.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\r\n\t\t// Nothing here, but extending classes might override this function\r\n\t\t// so that they can set their defaults\r\n\t\tthis._internalDefaultsApplied = true;\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates element.\r\n\t *\r\n\t * Object will be redrawn during the next update cycle.\r\n\t *\r\n\t * Please note that in most cases elements will auto-invalidate when needed. If\r\n\t * everything works, DO NOT use this method. Use it only if some changes do\r\n\t * not take otherwise.\r\n\t */\r\n\tpublic invalidate(): void {\r\n\t\tif (this.disabled || this._isTemplate || this.__disabled) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t// We no longer reset this on each invalidate, so that they are applied\r\n\t\t// only once, and do not overwrite user-defined settings\r\n\t\t//this._internalDefaultsApplied = false;\r\n\r\n\t\tif (!this.invalid) {\r\n\t\t\tthis.invalid = true;\r\n\t\t\tregistry.addToInvalidSprites(this);\r\n\t\t\tsystem.requestFrame();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates element:\r\n\t * * Triggers events\r\n\t * * Redraws the element\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validate(): void {\r\n\t\tthis.dispatchImmediately(\"beforevalidated\");\r\n\r\n\t\t// prevents from drawing if topparent is 0x0\r\n\t\t/*\r\n\t\tlet topParent = this.topParent;\r\n\r\n\t\tif (topParent) {\r\n\t\t\tif (!topParent.maxWidth || !topParent.maxHeight) {\r\n\t\t\t\tthis._disposers.push(topParent.events.once(\"maxsizechanged\", this.invalidate, this));\r\n\t\t\t}\r\n\t\t}*/\r\n\r\n\t\t// Set internal defaults\r\n\t\tif (!this._internalDefaultsApplied) {\r\n\t\t\tthis.applyInternalDefaults();\r\n\t\t}\r\n\r\n\t\tthis.beforeDraw();\r\n\t\tthis.draw();\r\n\r\n\t\tthis.invalid = false;\r\n\r\n\t\tregistry.removeFromInvalidSprites(this);\r\n\t\tthis.afterDraw();\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates element's position.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic invalidatePosition(): void {\r\n\t\tif (this.disabled || this._isTemplate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!this.positionInvalid) {\r\n\t\t\tthis.positionInvalid = true;\r\n\t\t\tregistry.addToInvalidPositions(this);\r\n\t\t\tsystem.requestFrame();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Transforms the element.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validatePosition(): void {\r\n\r\n\t\tlet pixelX = this.pixelX;\r\n\t\tlet pixelY = this.pixelY;\r\n\t\tlet dx = this.dx;\r\n\t\tlet dy = this.dy;\r\n\r\n\t\tlet x: number = pixelX + dx;\r\n\t\tlet y: number = pixelY + dy;\r\n\r\n\t\tif (this._updateDisabled) {\r\n\t\t\tif (this._internalDisabled) {\r\n\t\t\t\tthis.group.attr({ \"display\": \"none\" })\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (!this.disabled) {\r\n\t\t\t\t\tthis.removeSVGAttribute(\"display\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._updateDisabled = false;\r\n\t\t}\r\n\r\n\t\tlet sizeChanged: boolean = this.measure();\r\n\r\n\t\t//if (!this.invalid) {\r\n\t\tlet prevGroupTransform: string = this.group.transformString;\r\n\r\n\t\tthis.group.moveTo({ x: x, y: y });\r\n\t\tthis.group.rotation = this.rotation;\r\n\t\tif (this.nonScaling) {\r\n\t\t\tthis.group.scale = this.scale / this.globalScale;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.group.scale = this.scale;\r\n\t\t}\r\n\r\n\t\tif (prevGroupTransform != this.group.transformString || sizeChanged) {\r\n\t\t\t// not yet sure, this is to avoid many transforms=>container layout invalidation on initial buid\r\n\t\t\tif (prevGroupTransform == null) {\r\n\t\t\t\tthis.dispatch(\"transformed\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.dispatchImmediately(\"transformed\");\r\n\t\t\t}\r\n\t\t\t// TODO clear existing positionchanged dispatches ?\r\n\t\t\tthis.dispatch(\"positionchanged\");\r\n\r\n\t\t\tif (this.showTooltipOn == \"hit\" || this.showTooltipOn == \"always\") {\r\n\t\t\t\tthis.updateTooltipPosition();\r\n\t\t\t}\r\n\t\t}\r\n\t\t//}\r\n\r\n\t\t// it might happen that x and y changed again, so we only remove if they didn't\r\n\t\tif (pixelX + dx == x && pixelY + dy == y) {\r\n\t\t\tregistry.removeFromInvalidPositions(this);\r\n\t\t\tthis.positionInvalid = false;\r\n\t\t}\r\n\t\tlet maskRectangle = this._maskRectangle;\r\n\t\t// todo: verify this\r\n\t\tif (maskRectangle) {\r\n\t\t\tthis._clipElement.moveTo({ x: maskRectangle.x - pixelX, y: maskRectangle.y - pixelY });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A placeholder method that is called **before** element begins to be drawn.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected beforeDraw(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * A placeholder method that draws the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected draw(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * A placeholder method that is called **after** element finishes drawing\r\n\t * itself.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected afterDraw(): void {\r\n\t\tif (this.isMeasured || this.horizontalCenter !== \"none\" || this.verticalCenter !== \"none\") {\r\n\t\t\tthis.measureElement();\r\n\t\t}\r\n\r\n\t\t//this.applyMask();\r\n\r\n\t\tif (!this._inited) {\r\n\t\t\tif (this._adapterO) {\r\n\t\t\t\t// used to be applySVGAttrbutes here, this is more efficient\r\n\t\t\t\tfor (let key of this._adapterO.keys()) {\r\n\t\t\t\t\tswitch (key) {\r\n\t\t\t\t\t\tcase \"mask\":\r\n\t\t\t\t\t\tcase \"fill\":\r\n\t\t\t\t\t\tcase \"opacity\":\r\n\t\t\t\t\t\tcase \"fillOpacity\":\r\n\t\t\t\t\t\tcase \"stroke\":\r\n\t\t\t\t\t\tcase \"strokeOpacity\":\r\n\t\t\t\t\t\tcase \"strokeWidth\":\r\n\t\t\t\t\t\tcase \"shapeRendering\":\r\n\t\t\t\t\t\tcase \"strokeDasharray\":\r\n\t\t\t\t\t\tcase \"strokeDashoffset\":\r\n\t\t\t\t\t\tcase \"strokeLinecap\":\r\n\t\t\t\t\t\tcase \"strokeLinejoin\":\r\n\t\t\t\t\t\tcase \"textDecoration\":\r\n\t\t\t\t\t\tcase \"fontSize\":\r\n\t\t\t\t\t\tcase \"fontFamily\":\r\n\t\t\t\t\t\tcase \"fontWeight\":\r\n\t\t\t\t\t\t\t//case \"focusable\":\r\n\t\t\t\t\t\t\t//case \"tabindex\":\r\n\t\t\t\t\t\t\t//case \"role\":\r\n\t\t\t\t\t\t\t(<any>this)[key] = (<any>this)[key];\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.applyFilters();\r\n\r\n\t\t\tthis.visible = this.visible;\r\n\t\t\tthis.interactionsEnabled = this.getPropertyValue(\"interactionsEnabled\"); // can't use .interactionsEnabled as it get's parent's\r\n\r\n\t\t\tthis._inited = true;\r\n\r\n\t\t\tif (!this.showOnInit) {\r\n\t\t\t\tthis.appeared = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.hidden) {\r\n\t\t\t\tthis.hide(0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.applyMask();\r\n\t\t\tthis.dispatch(\"validated\");\r\n\t\t\tthis.dispatch(\"inited\");\r\n\t\t\tthis.dispatchReady();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.dispatch(\"validated\");\r\n\t\t}\r\n\r\n\t\tif (this.showTooltipOn == \"always\") {\r\n\t\t\tif (this.visible && !this.disabled && !this.__disabled) {\r\n\t\t\t\tthis.showTooltip();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.hideTooltip(0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Dispatches `\"ready\"` event. Sprite dispatches it right after `\"inited\"` event.\r\n\t *\r\n\t * @ignore\r\n\t */\r\n\tpublic dispatchReady(): void {\r\n\t\tif (!this.isReady()) {\r\n\t\t\tthis._ready = true;\r\n\t\t\tthis.dispatch(\"ready\");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Triggers a re-initialization of this element.\r\n\t *\r\n\t * Will result in complete redrawing of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic reinit(): void {\r\n\t\tthis._inited = false;\r\n\t\tthis.setState(this.defaultState);\r\n\t\tthis.invalidate();\r\n\t}\r\n\r\n\t/**\r\n\t * Handles the situation where parent element is resized.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic handleGlobalScale(): void {\r\n\t\tthis.dispatch(\"globalscalechanged\");\r\n\r\n\t\tif (this.nonScalingStroke) {\r\n\t\t\tthis.strokeWidth = this.strokeWidth;\r\n\t\t}\r\n\r\n\t\tif (this.nonScaling) {\r\n\t\t\tthis.validatePosition();\r\n\t\t}\r\n\r\n\t\tthis.updateFilterScale();\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Updates filter properties which might depend on scale\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected updateFilterScale(): void {\r\n\t\t$iter.each(this.filters.iterator(), (filter) => {\r\n\t\t\tfilter.scale = this.globalScale;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Removes itself from system's invalid lists.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected removeFromInvalids() {\r\n\t\tregistry.removeFromInvalidSprites(this);\r\n\t\tregistry.removeFromInvalidPositions(this);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all parameters from another [[Sprite]].\r\n\t *\r\n\t * @param source Source Sprite\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\r\n\t\tthis.isMeasured = source.isMeasured;\r\n\r\n\t\tthis.states.copyFrom(source.states);\r\n\r\n\t\tif (source.filters.length > 0) {\r\n\t\t\tsource.filters.each((filter) => {\r\n\t\t\t\tthis.filters.push(filter.clone());\r\n\t\t\t})\r\n\t\t}\r\n\t\tif (source._adapterO) {\r\n\t\t\tthis.adapter.copyFrom(source._adapterO);\r\n\t\t}\r\n\r\n\t\t//helps to avoid calling getter which creates instance\r\n\t\tif ((<any>source)[\"_interaction\"]) {\r\n\t\t\tthis.interactions.copyFrom(source.interactions);\r\n\t\t}\r\n\r\n\t\tif ((<any>source)[\"_plugins\"]) {\r\n\t\t\tthis.plugins.copyFrom(source.plugins);\r\n\t\t}\r\n\r\n\t\tthis.configField = source.configField;\r\n\r\n\t\tthis.applyOnClones = source.applyOnClones;\r\n\r\n\t\t// this.numberFormatter = source.numberFormatter; // todo: this creates loose number formatter and copies it to all clones. somehow we need to know if source had numberFormatter explicitly created and not just because a getter was called.\r\n\r\n\t\t//this.mask = source.mask; need to think about this, generally this causes a lot of problems\r\n\t\tthis.disabled = source.disabled;\r\n\r\n\t\tthis.virtualParent = source.virtualParent;\r\n\r\n\t\tthis.exportable = source.exportable;\r\n\t\t//@todo: create tooltip if it's on source but not on this?\r\n\t\t//const tooltip = this._tooltip;\r\n\t\t//if (tooltip) {\r\n\t\t//\ttooltip.copyFrom(source.tooltip);\r\n\t\t//}\r\n\r\n\t\tif (source._tooltip) {\r\n\t\t\tif (this._tooltip) {\r\n\t\t\t\tthis._tooltip.copyFrom(source.tooltip);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (source.cloneTooltip) {\r\n\t\t\t\t\tthis.tooltip = source.tooltip.clone();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._tooltip = source.tooltip;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//if ((<any>source)[\"_tooltip\"] && !this._tooltip) {\r\n\t\t//\tthis._tooltip = (<any>source)[\"_tooltip\"];\r\n\t\t//}\r\n\r\n\t\tthis._showSystemTooltip = source.showSystemTooltip;\r\n\r\n\t\t$utils.copyProperties(source.propertyFields, this.propertyFields);\r\n\t\t$utils.copyProperties(source.properties, this);\r\n\r\n\t\tif (source.fillModifier) {\r\n\t\t\tthis.fillModifier = source.fillModifier.clone();\r\n\t\t}\r\n\r\n\t\tif (source.strokeModifier) {\r\n\t\t\tthis.strokeModifier = source.strokeModifier.clone();\r\n\t\t}\r\n\r\n\t\tif (source.focusFilter) {\r\n\t\t\tthis.focusFilter = source.focusFilter.clone();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Destroys this object and all related data.\r\n\t */\r\n\tpublic dispose(): void {\r\n\t\tif (!this.isDisposed()) {\r\n\r\n\t\t\tif (this.showTooltipOn == \"always\" && this.tooltip) {\r\n\t\t\t\tthis.tooltip.hide();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchImmediately(\"beforedisposed\");\r\n\r\n\t\t\tif (this.isBaseSprite) {\r\n\t\t\t\tif (this.htmlContainer) {\r\n\t\t\t\t\twhile (this.htmlContainer.childNodes.length > 0) {\r\n\t\t\t\t\t\tthis.htmlContainer.removeChild(this.htmlContainer.firstChild);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.isBaseSprite = false;\r\n\t\t\t}\r\n\r\n\t\t\tsuper.dispose();\r\n\r\n\t\t\t// Clear adapters\r\n\t\t\tif (this._adapterO) {\r\n\t\t\t\tthis._adapterO.clear();\r\n\t\t\t}\r\n\r\n\t\t\tif (this.applyOnClones) {\r\n\t\t\t\tif (this._clones) {\r\n\t\t\t\t\tfor (let i = this._clones.length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tlet clone = this._clones.getIndex(i);\r\n\t\t\t\t\t\tclone.dispose();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this._svgContainer) {\r\n\t\t\t\tthis._svgContainer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (this._interactionDisposer) {\r\n\t\t\t\tthis._interactionDisposer.dispose();\r\n\t\t\t\tthis._interactionDisposer = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._urlDisposer) {\r\n\t\t\t\tthis._urlDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tthis.removeFromInvalids();\r\n\r\n\t\t\tif (this.element) {\r\n\t\t\t\tthis.element.dispose();\r\n\t\t\t}\r\n\t\t\tif (this.group) {\r\n\t\t\t\tthis.group.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (this._numberFormatter) {\r\n\t\t\t\tthis._numberFormatter.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tif (this._focusFilter) {\r\n\t\t\t\tthis._focusFilter.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tlet stroke = this.stroke;\r\n\t\t\tif (stroke && !(stroke instanceof Color) && stroke.dispose) {\r\n\t\t\t\tif (this.clonedFrom && this.clonedFrom.stroke == stroke) {\r\n\t\t\t\t\t// do nothing\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tstroke.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// TODO a bit hacky\r\n\t\t\tlet fill = this.fill;\r\n\t\t\tif (fill && !(fill instanceof Color) && fill.dispose) {\r\n\t\t\t\tif (this.clonedFrom && this.clonedFrom.fill == fill) {\r\n\t\t\t\t\t// do nothing\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tfill.dispose();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// remove from map\r\n\t\t\tif ($type.hasValue(this.id)) {\r\n\t\t\t\tthis.map.removeKey(this.id);\r\n\t\t\t}\r\n\r\n\t\t\tthis.parent = undefined;\r\n\t\t\tif (this._filters) {\r\n\t\t\t\twhile (this._filters.length > 0) {\r\n\t\t\t\t\tlet filter = <Filter>this._filters.getIndex(0);\r\n\t\t\t\t\tfilter.dispose();\r\n\t\t\t\t\tthis._filters.removeValue(filter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._alwaysShowDisposers = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element is a \"template\".\r\n\t *\r\n\t * Template Sprites act only as a holders for config for other \"real\"\r\n\t * elements to be cloned from.\r\n\t *\r\n\t * Templates are treated differently, as they are not validated, redrawn, or\r\n\t * otherwise are processed.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Is template?\r\n\t */\r\n\tpublic set isTemplate(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this._isTemplate != value) {\r\n\t\t\tthis._isTemplate = value;\r\n\r\n\t\t\tif (this instanceof Container) {\r\n\t\t\t\t$iter.each(this.children.iterator(), (child) => {\r\n\t\t\t\t\tchild.isTemplate = value;\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\tif (value) {\r\n\t\t\t\tthis.parent = this._parent;\r\n\t\t\t\tthis.removeFromInvalids();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Is template?\r\n\t */\r\n\tpublic get isTemplate(): boolean {\r\n\t\treturn this._isTemplate;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates whether the element should attempt to construct itself in a way\r\n\t * so that system tooltip is shown if its `readerTitle` is set.\r\n\t *\r\n\t * @param value Show system tooltip?\r\n\t */\r\n\tpublic set showSystemTooltip(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this._showSystemTooltip != value) {\r\n\t\t\tthis._showSystemTooltip = value;\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Show system tooltip?\r\n\t */\r\n\tpublic get showSystemTooltip(): boolean {\r\n\t\tif (!$type.hasValue(this._showSystemTooltip)) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.showSystemTooltip;\r\n\t\t\t}\r\n\t\t\telse if (this._parent) {\r\n\t\t\t\treturn this._parent.showSystemTooltip;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._showSystemTooltip;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * HIERARCHY AND STRUCTURE RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Sprites's top-level [[Container]].\r\n\t *\r\n\t * Please note that in most cases it won't be the chart element.\r\n\t *\r\n\t * To access base chart element, use `baseSprite` instead.\r\n\t *\r\n\t * @return Top-level ascendant\r\n\t */\r\n\tpublic get topParent(): Optional<Container> {\r\n\t\tif (this._topParent) {\r\n\t\t\treturn this._topParent;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.topParent;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @param value {Container} top parent of a sprite\r\n\t */\r\n\tpublic set topParent(value: Container) {\r\n\t\tthis._topParent = value;\r\n\t}\r\n\r\n\t/**\r\n\t * Elements' parent [[Container]].\r\n\t *\r\n\t * @param parent Parent container\r\n\t */\r\n\tpublic set parent(parent: Optional<Container>) {\r\n\t\tif (this._isTemplate) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// TODO is this needed ?\r\n\t\t$utils.used(this.paper);\r\n\r\n\t\tlet oldParent = this._parent;\r\n\t\tif (oldParent != parent) {\r\n\r\n\t\t\tif (oldParent) {\r\n\t\t\t\toldParent.children.removeValue(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis._parent = parent;\r\n\r\n\t\t\tif (parent) {\r\n\r\n\t\t\t\tthis.topParent = parent.topParent;\r\n\r\n\t\t\t\tif (parent.isTemplate) {\r\n\t\t\t\t\tthis.isTemplate = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.baseId = parent.baseId;\r\n\r\n\t\t\t\tparent.children.push(this);\r\n\t\t\t\t// insert handler at Container invalidates + invalidatesLayout + adds to group\r\n\r\n\t\t\t\tif (this._tooltip && !this._tooltipContainer) {\r\n\t\t\t\t\tthis._tooltip.parent = parent.tooltipContainer;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (!this._dataItem) {\r\n\t\t\t\t\tthis.dataItem = parent.dataItem;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.handleAlwaysShowTooltip();\r\n\r\n\t\t\t\tif (this.dataItem) {\r\n\t\t\t\t\t// No need to apply accessibility if there's no data item\r\n\t\t\t\t\t// The whole reason of applying it here is to populate data\r\n\t\t\t\t\t// placesholders, and if tehre's no data item, it won't work anyway\r\n\t\t\t\t\tthis.applyAccessibility();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchImmediately(\"parentset\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.topParent = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAlwaysShow() {\r\n\t\tthis.showTooltip();\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected handleAlwaysShowTooltip() {\r\n\t\tlet sprite: Sprite = this;\r\n\r\n\t\tlet oldDisposers = this._alwaysShowDisposers;\r\n\t\tif (oldDisposers) {\r\n\t\t\t$array.each(oldDisposers, (oldDisposer) => {\r\n\t\t\t\toldDisposer.dispose();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tthis._alwaysShowDisposers = [];\r\n\r\n\t\tif (this.showTooltipOn == \"always\") {\r\n\t\t\twhile (sprite != undefined) {\r\n\t\t\t\tlet disposer = sprite.events.on(\"visibilitychanged\", this.handleAlwaysShow, this, false);\r\n\t\t\t\tthis.addDisposer(disposer);\r\n\t\t\t\tthis._alwaysShowDisposers.push(disposer);\r\n\t\t\t\tsprite = sprite.parent;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Parent container\r\n\t */\r\n\tpublic get parent(): Optional<Container> {\r\n\t\treturn this._parent;\r\n\t}\r\n\r\n\t/**\r\n\t * Element's \"virtual\" parent.\r\n\t *\r\n\t * This is required in ordere to maintain proper inheritance (like\r\n\t * formatters).\r\n\t *\r\n\t * Sometimes an element is a \"logical\" parent, even though it's not a direct\r\n\t * ascendant.\r\n\t *\r\n\t * Example: a bullet is not a child of the axis, but it would make sense\r\n\t * for it to inherit series' formatters.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Virtual parent\r\n\t */\r\n\tpublic set virtualParent(value: Sprite) {\r\n\t\tthis._virtualParent = value;\r\n\t\tif (this.dataItem) {\r\n\t\t\t// No need to apply accessibility if there's no data item\r\n\t\t\t// The whole reason of applying it here is to populate data\r\n\t\t\t// placesholders, and if tehre's no data item, it won't work anyway\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Virtual parent\r\n\t */\r\n\tpublic get virtualParent(): Optional<Sprite> {\r\n\t\treturn this._virtualParent;\r\n\t}\r\n\r\n\t/**\r\n\t * Moves `<defs>` to correct place in DOM.\r\n\t *\r\n\t * Some elements are initially created in \"ghost\" container. When moving\r\n\t * those into proper place in DOM, their respective `<defs>` need to be moved\r\n\t * as well.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic appendDefs(): void {\r\n\r\n\t\tif (this.filterElement) {\r\n\t\t\tthis.paper.appendDef(this.filterElement);\r\n\t\t}\r\n\r\n\t\tlet fill = <any>this.fill;\r\n\r\n\t\tif (fill && fill.element) {\r\n\t\t\tthis.paper.appendDef(fill.element);\r\n\t\t}\r\n\r\n\t\tlet stroke = <any>this.stroke;\r\n\t\tif (stroke && stroke.element) {\r\n\t\t\tthis.paper.appendDef(stroke.element);\r\n\t\t}\r\n\r\n\t\tif (this.fillModifier && this.fill instanceof Color) {\r\n\t\t\tlet fill = <any>this.fillModifier.modify(this.fill);\r\n\t\t\tif (fill && fill.element) {\r\n\t\t\t\tthis.paper.appendDef(fill.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.strokeModifier && this.stroke instanceof Color) {\r\n\t\t\tlet stroke = <any>this.strokeModifier.modify(this.stroke);\r\n\t\t\tif (stroke && stroke.element) {\r\n\t\t\t\tthis.paper.appendDef(stroke.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this._clipPath) {\r\n\t\t\tthis.paper.appendDef(this._clipPath);\r\n\t\t}\r\n\r\n\t\tif (this._exportable === false) {\r\n\t\t\tthis.exportable = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[Dictionary]] which maps object ids with their respective\r\n\t * objects.\r\n\t *\r\n\t * Can be used to retrieve any object by id, e.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * console.log(mySprite.map.getKey(\"myid\"));\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * console.log(mySprite.map.getKey(\"myid\"));\r\n\t * ```\r\n\t *\r\n\t * @return Map collection\r\n\t */\r\n\tpublic get map(): Dictionary<string, any> {\r\n\t\tconst top = this.topParent;\r\n\r\n\t\tif (top) {\r\n\t\t\treturn top.map;\r\n\t\t} else if (!this._map) {\r\n\t\t\tthis._map = new Dictionary<string, any>();\r\n\t\t}\r\n\r\n\t\treturn this._map;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @return Map collection\r\n\t */\r\n\tpublic get delayedMap(): Dictionary<string, any> {\r\n\t\tconst top = this.topParent;\r\n\r\n\t\tif (top) {\r\n\t\t\treturn top.delayedMap;\r\n\t\t} else if (!this._delayedMap) {\r\n\t\t\tthis._delayedMap = new Dictionary<string, any>();\r\n\t\t}\r\n\r\n\t\treturn this._delayedMap;\r\n\t}\r\n\r\n\t/**\r\n\t * Element's user-defined ID.\r\n\t *\r\n\t * Will throw an Error if there already is an object with the same ID.\r\n\t *\r\n\t * Please note that above check will be performed withing the scope of the\r\n\t * current chart instance. It will not do checks across other chart instances\r\n\t * or in globally in DOM.\r\n\t *\r\n\t * Make sure the IDs are unique.\r\n\t *\r\n\t * @param value ID\r\n\t */\r\n\tpublic set id(value: string) {\r\n\t\tif (this._id != value) {\r\n\t\t\tthis._id = value;\r\n\t\t\tif (this.map.hasKey(value)) {\r\n\t\t\t\tthrow Error(\"Duplicate id (\" + value + \") used on multiple objects.\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.map.setKey(value, this);\r\n\t\t\t}\r\n\t\t\tif (options.autoSetClassName) {\r\n\t\t\t\tthis.setClassName();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return ID\r\n\t */\r\n\tpublic get id(): string {\r\n\t\treturn this._id;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * ELEMENT AND DOM TREE MANIPULATION AND MEASURING\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns DOM element reference associated with this element.\r\n\t *\r\n\t * @readonly\r\n\t * @return DOM element\r\n\t */\r\n\tpublic get dom(): SVGSVGElement {\r\n\t\treturn this.group.node;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Paper]] instance to place elements on.\r\n\t *\r\n\t * If there's no Paper set for this element, it goes up the ascendant tree\r\n\t * until it finds one.\r\n\t *\r\n\t * This method is used by important `addChild()` method, so it's essential\r\n\t * to have a [[Paper]] instance.\r\n\t *\r\n\t * If this element has a separate `htmlContainer` set, it will have a\r\n\t * [[Paper]] instance itself.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param paper Paper\r\n\t */\r\n\tpublic set paper(paper: Paper) {\r\n\t\tthis.setPaper(paper);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets [[Paper]] instance to use to draw elements.\r\n\t * @ignore\r\n\t * @param paper Paper\r\n\t * @return true if paper was changed, false, if it's the same\r\n\t */\r\n\tpublic setPaper(paper: Paper): boolean {\r\n\t\tlet oldPaper = this._paper;\r\n\r\n\t\tif (oldPaper != paper) {\r\n\t\t\tthis._paper = paper;\r\n\r\n\t\t\tthis.appendDefs();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Paper\r\n\t */\r\n\tpublic get paper(): Paper {\r\n\t\tif (this._paper) {\r\n\t\t\treturn this._paper;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet parent = this._parent;\r\n\t\t\tif (parent) {\r\n\t\t\t\treturn parent.paper;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn getGhostPaper();\r\n\t}\r\n\r\n\t/**\r\n\t * An HTML element to be used when placing wrapper element (`<div>`)\r\n\t * for the whole chart.\r\n\t *\r\n\t * This is the same for **all** elements within the same chart.\r\n\t *\r\n\t * @param htmlContainer HTML element\r\n\t */\r\n\tpublic set htmlContainer(htmlContainer: $type.Optional<HTMLElement>) {\r\n\t\tthis._htmlContainer = htmlContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * @return HTML element\r\n\t */\r\n\tpublic get htmlContainer(): $type.Optional<HTMLElement> {\r\n\t\tif (this._htmlContainer) {\r\n\t\t\treturn this._htmlContainer;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet parent = this._parent;\r\n\t\t\tif (parent) {\r\n\t\t\t\treturn parent.htmlContainer;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates (if not yet created) and returns element's `<title>` element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Title element\r\n\t */\r\n\tpublic get titleElement(): AMElement {\r\n\t\tif (!this._titleElement) {\r\n\t\t\tthis._titleElement = this.paper.add(\"title\");\r\n\t\t\tthis.group.add(this._titleElement);\r\n\t\t}\r\n\t\treturn this._titleElement;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates (if not yet created) and returns element's `<desc>` element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Desc element\r\n\t */\r\n\tpublic get descriptionElement(): AMElement {\r\n\t\tif (!this._descriptionElement) {\r\n\t\t\tthis._descriptionElement = this.paper.add(\"desc\");\r\n\t\t\tthis.group.add(this._descriptionElement);\r\n\t\t}\r\n\t\treturn this._descriptionElement;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns list of SVG filters (effects) applied to element. If the filter\r\n\t * list is not yet initilized, creates and returns an empty one.\r\n\t * Note, not all filters combine well with one another. We recommend using one filter per sprite.\r\n\t *\r\n\t * @return List of filters\r\n\t */\r\n\tpublic get filters(): List<Filter> {\r\n\t\tif (!this._filters) {\r\n\t\t\tthis._filters = new List<Filter>();\r\n\t\t\t// TODO only add certain events ?\r\n\t\t\tthis._disposers.push(this._filters.events.onAll(this.applyFilters, this));\r\n\t\t\tthis._disposers.push(new ListDisposer(this._filters));\r\n\t\t}\r\n\t\treturn this._filters;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets required SVG attributes. Must be called every time an element is\r\n\t * redrawn so that attributes are (re)applied.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected setSVGAttributes(): void {\r\n\t\tthis.fill = this.fill;\r\n\t\tthis.opacity = this.opacity;\r\n\t\tthis.fillOpacity = this.fillOpacity;\r\n\t\tthis.stroke = this.stroke;\r\n\t\tthis.strokeOpacity = this.strokeOpacity;\r\n\t\tthis.shapeRendering = this.shapeRendering;\r\n\t\tthis.strokeDasharray = this.strokeDasharray;\r\n\t\tthis.strokeDashoffset = this.strokeDashoffset;\r\n\t\tthis.strokeLinecap = this.strokeLinecap;\r\n\t\tthis.strokeLinejoin = this.strokeLinejoin;\r\n\t\tthis.focusable = this.focusable;\r\n\t\tthis.tabindex = this.tabindex;\r\n\t\tthis.role = this.role;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets an attribute directly on an SVG element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param attribute Attribute object\r\n\t */\r\n\tprotected setSVGAttribute(attribute: ISVGAttribute): void {\r\n\t\tthis.group.attr(attribute);\r\n\t}\r\n\r\n\t/**\r\n\t * Removes an attribute directly from SVG element.\r\n\t *\r\n\t * @param attribute Attribute key to remove\r\n\t */\r\n\tprotected removeSVGAttribute(attribute: string): void {\r\n\t\tthis.group.removeAttr(attribute);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets `class` attribute of the elements SVG node.\r\n\t *\r\n\t * Uses `am4core.options.classNamePrefix`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic setClassName(): void {\r\n\r\n\t\tlet className = this.className;\r\n\t\tlet classNamePrefix = options.classNamePrefix;\r\n\r\n\t\tif (this.element) {\r\n\t\t\tthis.element.addClass(classNamePrefix + className);\r\n\t\t}\r\n\r\n\t\tthis.group.addClass(classNamePrefix + className + \"-group\");\r\n\r\n\t\tif ($type.hasValue(this.id)) {\r\n\t\t\tthis.group.addClass(classNamePrefix + this.id);\r\n\t\t}\r\n\r\n\t\tif (this.userClassName) {\r\n\t\t\tthis.group.addClass(this.userClassName);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Adds an `id` attribute the the element and returns the id.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Element's ID\r\n\t */\r\n\tpublic uidAttr(): string {\r\n\t\tthis.setSVGAttribute({ \"id\": this.uid });\r\n\t\treturn this.uid;\r\n\t}\r\n\r\n\t/**\r\n\t * [updateClipPath description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected updateClipPath(): void {\r\n\t\tconst element = this._clipElement;\r\n\r\n\t\tif (element) {\r\n\t\t\telement.moveTo({ x: this.mask.pixelX, y: this.mask.pixelY });\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected createClipPath() {\r\n\t\tif (!this._clipPath) {\r\n\t\t\tthis._clipPath = this.paper.addGroup(\"clipPath\");\r\n\t\t\tthis.paper.appendDef(this._clipPath);\r\n\t\t\tthis._disposers.push(this._clipPath);\r\n\t\t\tlet id: string = registry.getUniqueId();\r\n\t\t\tthis._clipPath.attr({ \"id\": id });\r\n\t\t\tthis.group.attr({ \"clip-path\": \"url(\\\"\" + $utils.getBaseURI() + id + \"\\\")\" });\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Applies the mask Sprite.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected applyMask(): void {\r\n\t\tlet mask = this.mask;\r\n\r\n\t\tif (this._clipPath && mask) {\r\n\t\t\t// Container\r\n\t\t\tif (mask instanceof Container) {\r\n\t\t\t\tthis._clipElement.attr({ \"width\": $math.max(0, mask.pixelWidth), \"height\": $math.max(0, mask.pixelHeight) });\r\n\r\n\t\t\t\tlet point = $utils.spritePointToSprite({ x: mask.pixelX, y: mask.pixelY }, mask.parent, this);\r\n\r\n\t\t\t\tthis._clipPath.x = point.x;\r\n\t\t\t\tthis._clipPath.y = point.y;\r\n\t\t\t}\r\n\t\t\t// Sprite\r\n\t\t\telse {\r\n\t\t\t\tif (mask.element && mask.element != this._clipElement) {\r\n\t\t\t\t\tthis._clipElement = mask.element;\r\n\t\t\t\t\tthis._clipPath.add(this._clipElement);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._clipPath.scale = mask.scale;\r\n\t\t\t\tthis._clipPath.x = mask.pixelX;\r\n\t\t\t\tthis._clipPath.y = mask.pixelY;\r\n\t\t\t\tthis._clipPath.rotation = mask.rotation;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Applies filters to the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected applyFilters(): void {\r\n\t\t// we create a separate filter for each sprite as otherwise it would be impossible to animate filter.\r\n\t\t// svg doesn't support multiple filters applied to one element, so we put all the primitives to one filterElement of a sprite.\r\n\t\tif (this._filters && this._filters.length > 0) {\r\n\r\n\t\t\tlet width = 100;\r\n\t\t\tlet height = 100;\r\n\r\n\t\t\tif (!this.filterElement) {\r\n\t\t\t\tthis.filterElement = this.paper.addGroup(\"filter\");\r\n\t\t\t\tthis._disposers.push(this.filterElement);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.filterElement.removeChildNodes();\r\n\t\t\t}\r\n\r\n\t\t\tthis.paper.appendDef(this.filterElement);\r\n\r\n\t\t\tlet id: string = \"filter-\" + this.uid;\r\n\t\t\tthis.filterElement.attr({ \"id\": id });\r\n\r\n\t\t\t$iter.each(this.filters.iterator(), (filter) => {\r\n\t\t\t\tfilter.sprite = this;\r\n\t\t\t\tfilter.paper = this.paper;\r\n\r\n\t\t\t\tthis.filterElement.attr({ filterUnits: filter.filterUnits });\r\n\r\n\t\t\t\tfilter.appendPrimitives(this.filterElement);\r\n\r\n\t\t\t\tif (filter.width > width) {\r\n\t\t\t\t\twidth = filter.width;\r\n\t\t\t\t}\r\n\t\t\t\tif (filter.height > height) {\r\n\t\t\t\t\theight = filter.height;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilter.scale = this.globalScale;\r\n\t\t\t});\r\n\r\n\t\t\tlet w = width + \"%\";\r\n\t\t\tlet h = height + \"%\";\r\n\r\n\t\t\t/* temporarily removed as it is breaking tooltips on Safari @todo come back to this\r\n\t\t\tif (this._measuredHeight <= 1) {\r\n\t\t\t\th = height + \"\";\r\n\t\t\t}\r\n\r\n\t\t\tif (this._measuredWidth <= 1) {\r\n\t\t\t\th = width + \"\";\r\n\t\t\t}*/\r\n\r\n\t\t\tthis.filterElement.attr({ \"width\": w, \"height\": h, \"x\": -(width - 100) / 2 + \"%\", \"y\": -(height - 100) / 2 + \"%\" });\r\n\r\n\t\t\tthis.group.attr({ \"filter\": \"url(\\\"\" + $utils.getBaseURI() + id + \"\\\")\" });\r\n\t\t}\r\n\t\telse if (this.filterElement) {\r\n\t\t\tthis.group.removeAttr(\"filter\");\r\n\t\t\tthis.filterElement.removeChildNodes();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [removeClipPath description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tprotected removeClipPath(): void {\r\n\t\tif (this._clipPath) {\r\n\t\t\t//this._clipPath.dispose();\r\n\t\t\tthis.removeDispose(this._clipPath);\r\n\t\t\tthis._clipPath = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [setElement description]\r\n\t *\r\n\t * @ignore\r\n\t * @todo Description\r\n\t * @param element [description]\r\n\t */\r\n\tpublic setElement(element: AMElement) {\r\n\t\tthis.element = element;\r\n\t\tthis.setSVGAttributes();\r\n\t\tthis.applyAccessibility();\r\n\t}\r\n\r\n\t/**\r\n\t * The main element for this Sprite, usually an SVG `<g>`.\r\n\t *\r\n\t * All other sub-elements are created in it.\r\n\t *\r\n\t * @param element Element\r\n\t */\r\n\tpublic set element(element: Optional<AMElement>) {\r\n\r\n\t\t// Destroy previous element if there was one before\r\n\t\tthis.removeElement();\r\n\r\n\t\t// Set new element\r\n\t\tthis._element = element;\r\n\r\n\t\t// Add element to group\r\n\t\t// Since we are adding Element to group, which is already in the\r\n\t\t// `.disposers` it will be removed automatically when Sprite is disposed\r\n\t\t// of\r\n\t\tthis.group.add(element);\r\n\r\n\t\tif (element.node instanceof SVGPathElement) {\r\n\t\t\tthis._isPath = true;\r\n\t\t}\r\n\r\n\t\t// This is needed if someone is setting element not in draw method but\r\n\t\t// from outside\r\n\t\tif (!this.invalid) {\r\n\t\t\tthis.validate();\r\n\t\t}\r\n\r\n\t\tif (options.autoSetClassName) {\r\n\t\t\tthis.setClassName();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Element\r\n\t */\r\n\tpublic get element(): Optional<AMElement> {\r\n\t\treturn this._element;\r\n\t}\r\n\r\n\t/**\r\n\t * HTML container (`<div>`) which is used to place chart's `<svg>` element\r\n\t * in.\r\n\t *\r\n\t * @return Container for chart elements\r\n\t */\r\n\tpublic get svgContainer(): $type.Optional<SVGContainer> {\r\n\t\tif (this._svgContainer) {\r\n\t\t\treturn this._svgContainer;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.svgContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets HTML container to add SVG and other chart elements to.\r\n\t *\r\n\t * @param svgContainer Container for chart elements\r\n\t */\r\n\tpublic set svgContainer(svgContainer: $type.Optional<SVGContainer>) {\r\n\t\tthis._svgContainer = svgContainer;\r\n\t}\r\n\r\n\t/**\r\n\t * Measures main element.\r\n\t *\r\n\t * Saves measurements into private `_bbox` property.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected measureElement() {\r\n\r\n\t\tif (this.element) {\r\n\t\t\tif (this.definedBBox) {\r\n\t\t\t\tthis._bbox = this.definedBBox;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tlet svgBBox: IRectangle = this.element.getBBox();\r\n\t\t\t\tthis._bbox = { x: svgBBox.x, y: svgBBox.y, width: svgBBox.width, height: svgBBox.height };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * Positions element according its center settings.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic updateCenter() {\r\n\t\tif (this.element) {\r\n\t\t\tlet prevElementTransform: string = this.element.transformString;\r\n\r\n\t\t\tlet bbox = this.bbox;\r\n\r\n\t\t\tlet ex = 0;\r\n\t\t\tlet ey = 0;\r\n\r\n\t\t\tlet elementX = bbox.x;\r\n\t\t\tlet elementY = bbox.y;\r\n\r\n\t\t\tlet elementWidth = bbox.width;\r\n\t\t\tlet elementHeigth = bbox.height;\r\n\r\n\t\t\tlet pixelPaddingLeft = this.pixelPaddingLeft;\r\n\t\t\tlet pixelPaddingRight = this.pixelPaddingRight;\r\n\t\t\tlet pixelPaddingTop = this.pixelPaddingTop;\r\n\t\t\tlet pixelPaddingBottom = this.pixelPaddingBottom;\r\n\r\n\t\t\t// add padding to the measured size\r\n\t\t\tlet measuredWidth = $math.max(elementWidth + pixelPaddingLeft + pixelPaddingRight, this.pixelWidth);\r\n\t\t\tlet measuredHeight = $math.max(elementHeigth + pixelPaddingTop + pixelPaddingBottom, this.pixelHeight);\r\n\r\n\t\t\t// extremes\r\n\t\t\tlet left = bbox.x;\r\n\t\t\tlet right = bbox.x + measuredWidth;\r\n\r\n\t\t\tlet top = bbox.y;\r\n\t\t\tlet bottom = bbox.y + measuredHeight;\r\n\r\n\t\t\tlet horizontalCenter = this.horizontalCenter;\r\n\t\t\tlet verticalCenter = this.verticalCenter;\r\n\r\n\t\t\tswitch (horizontalCenter) {\r\n\t\t\t\tcase \"none\":\r\n\t\t\t\t\tex = elementX + pixelPaddingLeft;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"left\":\r\n\t\t\t\t\tex = pixelPaddingLeft;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tex = pixelPaddingLeft - (elementWidth + pixelPaddingRight + pixelPaddingLeft) / 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"right\":\r\n\t\t\t\t\tex = -pixelPaddingRight - elementWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tswitch (verticalCenter) {\r\n\t\t\t\tcase \"none\":\r\n\t\t\t\t\tey = elementY + pixelPaddingTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"top\":\r\n\t\t\t\t\tey = pixelPaddingTop;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tey = pixelPaddingTop - (elementHeigth + pixelPaddingBottom + pixelPaddingTop) / 2;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"bottom\":\r\n\t\t\t\t\tey = -pixelPaddingBottom - elementHeigth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis._measuredHeight = measuredHeight;\r\n\t\t\tthis._measuredWidth = measuredWidth;\r\n\r\n\t\t\tlet x: number = $math.round(ex - elementX, this._positionPrecision, true);\r\n\t\t\tlet y: number = $math.round(ey - elementY, this._positionPrecision, true);\r\n\r\n\t\t\tthis.ex = x - pixelPaddingLeft;\r\n\t\t\tthis.ey = y - pixelPaddingTop;\r\n\r\n\t\t\tthis.maxLeft = left + x - pixelPaddingLeft;\r\n\t\t\tthis.maxRight = right + x - pixelPaddingLeft;\r\n\r\n\t\t\tthis.maxTop = top + y - pixelPaddingTop;\r\n\t\t\tthis.maxBottom = bottom + y - pixelPaddingTop;\r\n\r\n\t\t\tif (this.pixelPerfect && options.pixelPerfectPrecision == 0) {\r\n\t\t\t\tx -= 0.5;\r\n\t\t\t\ty -= 0.5;\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.moveTo({ x: x, y: y });\r\n\r\n\t\t\tif (prevElementTransform != this.element.transformString) {\r\n\t\t\t\tthis.dispatchImmediately(\"transformed\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Measures the whole element.\r\n\t *\r\n\t * Returns `true` if the size has changed from the last measurement.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Did the size changed from the last measurement?\r\n\t */\r\n\tpublic measure(): boolean {\r\n\r\n\t\tthis.updateCenter();\r\n\r\n\t\tlet measuredWidth = this._measuredWidth;\r\n\t\tlet measuredHeight = this._measuredHeight;\r\n\r\n\t\t// extremes\r\n\t\tlet left = this.maxLeft;\r\n\t\tlet right = this.maxRight;\r\n\r\n\t\tlet top = this.maxTop;\r\n\t\tlet bottom = this.maxBottom;\r\n\r\n\t\t// non-parent wise size\r\n\t\tthis._measuredWidthSelf = measuredWidth;\r\n\t\tthis._measuredHeightSelf = measuredHeight;\r\n\r\n\t\tlet positionPrecision = this._positionPrecision;\r\n\r\n\t\tthis.maxLeftSelf = this.maxLeft;\r\n\t\tthis.maxRightSelf = this.maxRight;\r\n\t\tthis.maxTopSelf = this.maxTop;\r\n\t\tthis.maxBottomSelf = this.maxBottom;\r\n\r\n\t\t// if a sprite is rotated or scaled, calculate measured size after transformations\r\n\r\n\t\tif (this.rotation !== 0 || this.scale !== 1 || this.nonScaling) {\r\n\r\n\t\t\t// not good to handleGlobalScale here.\r\n\t\t\tif (this.nonScalingStroke) {\r\n\t\t\t\tthis.strokeWidth = this.strokeWidth;\r\n\t\t\t}\r\n\r\n\t\t\tlet svg = this.paper.svg;\r\n\r\n\t\t\tlet matrix: SVGMatrix = svg.createSVGMatrix();\r\n\t\t\tlet rotation: number = this.rotation;\r\n\r\n\t\t\tlet scale = this.scale;\r\n\r\n\t\t\tif (this.nonScaling) {\r\n\t\t\t\tscale = this.scale / this.globalScale;\r\n\t\t\t}\r\n\r\n\t\t\tmatrix.a = $math.cos(rotation) * scale;\r\n\t\t\tmatrix.c = - $math.sin(rotation) * scale;\r\n\t\t\tmatrix.e = 0;\r\n\t\t\tmatrix.b = $math.sin(rotation) * scale;\r\n\t\t\tmatrix.d = $math.cos(rotation) * scale;\r\n\t\t\tmatrix.f = 0;\r\n\r\n\t\t\tlet p1: SVGPoint = svg.createSVGPoint();\r\n\t\t\tp1.x = left;\r\n\t\t\tp1.y = top;\r\n\r\n\t\t\tlet p2: SVGPoint = svg.createSVGPoint();\r\n\t\t\tp2.x = right;\r\n\t\t\tp2.y = top;\r\n\r\n\t\t\tlet p3: SVGPoint = svg.createSVGPoint();\r\n\t\t\tp3.x = right;\r\n\t\t\tp3.y = bottom;\r\n\r\n\t\t\tlet p4: SVGPoint = svg.createSVGPoint();\r\n\t\t\tp4.x = left;\r\n\t\t\tp4.y = bottom;\r\n\r\n\t\t\tlet pt1: SVGPoint = p1.matrixTransform(matrix);\r\n\t\t\tlet pt2: SVGPoint = p2.matrixTransform(matrix);\r\n\t\t\tlet pt3: SVGPoint = p3.matrixTransform(matrix);\r\n\t\t\tlet pt4: SVGPoint = p4.matrixTransform(matrix);\r\n\r\n\t\t\tleft = Math.min(pt1.x, pt2.x, pt3.x, pt4.x);\r\n\t\t\tright = Math.max(pt1.x, pt2.x, pt3.x, pt4.x);\r\n\t\t\ttop = Math.min(pt1.y, pt2.y, pt3.y, pt4.y);\r\n\t\t\tbottom = Math.max(pt1.y, pt2.y, pt3.y, pt4.y);\r\n\r\n\t\t\tmeasuredWidth = right - left;\r\n\t\t\tmeasuredHeight = bottom - top;\r\n\r\n\t\t\tthis.maxLeft = $math.round(left, positionPrecision, true);\r\n\t\t\tthis.maxRight = $math.round(right, positionPrecision, true);\r\n\t\t\tthis.maxTop = $math.round(top, positionPrecision, true);\r\n\t\t\tthis.maxBottom = $math.round(bottom, positionPrecision, true);\r\n\t\t}\r\n\r\n\t\tthis._measuredWidth = $math.round(measuredWidth, positionPrecision, true);\r\n\t\tthis._measuredHeight = $math.round(measuredHeight, positionPrecision, true);\r\n\r\n\r\n\t\t// dispatch event\r\n\t\tif (this._measuredWidth != this._prevMeasuredWidth || this._measuredHeight != this._prevMeasuredHeight) {\r\n\t\t\tthis._prevMeasuredHeight = this._measuredHeight;\r\n\t\t\tthis._prevMeasuredWidth = this._measuredWidth;\r\n\r\n\t\t\t// TODO clear existing sizechanged dispatches ?\r\n\t\t\tthis.dispatch(\"sizechanged\");\r\n\r\n\t\t\tif ((this.isHover || this.showTooltipOn == \"hit\" || this.showTooltipOn == \"always\") && this.tooltip && this.tooltip.visible && ($type.hasValue(this.tooltipText) || $type.hasValue(this.tooltipHTML))) {\r\n\t\t\t\tthis.updateTooltipPosition();\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Insert this element before sibling element.\r\n\t *\r\n\t * @param sprite Target element\r\n\t * @return This element\r\n\t */\r\n\tpublic insertBefore(sprite: Sprite): Sprite {\r\n\t\tlet parent = this._parent;\r\n\r\n\t\tif (parent) {\r\n\t\t\tlet index: number = parent.children.indexOf(sprite);\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tparent.children.moveValue(this, index);\r\n\t\t\t\tparent.sortChildren();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Insert this element after sibling element.\r\n\t *\r\n\t * @param sprite Target element\r\n\t * @return This element\r\n\t */\r\n\tpublic insertAfter(sprite: Sprite): Sprite {\r\n\t\tlet parent = this._parent;\r\n\r\n\t\tif (parent) {\r\n\t\t\tlet index: number = parent.children.indexOf(sprite);\r\n\t\t\tif (index !== -1) {\r\n\t\t\t\tparent.children.moveValue(this, index + 1);\r\n\t\t\t\tparent.sortChildren();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the main SVG element.\r\n\t *\r\n\t * This does not destroy the whole Sprite element. To do that use\r\n\t * `dispose()` instead.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected removeElement() {\r\n\t\t// remove visual element\r\n\t\tif (this._element) {\r\n\t\t\tthis.removeDispose(this._element);\r\n\t\t\tthis._element = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative (percent) value of the X coordindate within this element.\r\n\t *\r\n\t * A relative value is a hundredth of a percent. So 100% would result in a 1\r\n\t * as relative value.\r\n\t *\r\n\t * @param value Absolute or relative X coordinate\r\n\t * @return Relative value\r\n\t */\r\n\tpublic getRelativeX(value: number | Percent): number {\r\n\t\tif (value instanceof Percent) {\r\n\t\t\treturn value.value;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn value / this._parent.innerWidth;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns relative (percent) value of the Y coordindate within this element.\r\n\t *\r\n\t * A relative value is a hundredth of a percent. So 100% would result in a 1\r\n\t * as relative value.\r\n\t *\r\n\t * @param value Absolute or relative Y coordinate\r\n\t * @return Relative value\r\n\t */\r\n\tpublic getRelativeY(value: number | Percent): number {\r\n\t\tif (value instanceof Percent) {\r\n\t\t\treturn value.value;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn value / this._parent.innerHeight;\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an X coordinate in pixel within the element.\r\n\t *\r\n\t * If number is passed in as parameter, the same number will be returned\r\n\t * back.\r\n\t *\r\n\t * If [[Percent]] is passed in, it will be recalculated to pixels.\r\n\t *\r\n\t * @param value Absolute or relative X coordinate\r\n\t * @return X coordinate in pixels\r\n\t */\r\n\tpublic getPixelX(value: number | Percent): number {\r\n\r\n\t\t// we don't use $utils.valueToRelative as this would mean that we should access parent.innerWidth\r\n\t\t// all the time and this would result chain of the same actions and will slow down the system a lot\r\n\r\n\t\tlet pixel: number = 0;\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tpixel = value;\r\n\t\t}\r\n\t\telse if (value instanceof Percent) {\r\n\t\t\tlet relative: number = value.value;\r\n\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tpixel = $math.round(this._parent.innerWidth * relative, this._positionPrecision, true);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn pixel;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an Y coordinate in pixel within the element.\r\n\t *\r\n\t * If number is passed in as parameter, the same number will be returned\r\n\t * back.\r\n\t *\r\n\t * If [[Percent]] is passed in, it will be recalculated to pixels.\r\n\t *\r\n\t * @param value Absolute or relative Y coordinate\r\n\t * @return Y coordinate in pixels\r\n\t */\r\n\tpublic getPixelY(value: number | Percent): number {\r\n\r\n\t\t// we don't use $utils.valueToRelative as this would mean that we should access parent.innerWidth\r\n\t\t// all the time and this would result chain of the same actions and will slow down the system a lot\r\n\r\n\t\tlet pixel: number = 0;\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tpixel = value;\r\n\t\t}\r\n\t\telse if (value instanceof Percent) {\r\n\t\t\tlet relative: number = value.value;\r\n\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tpixel = $math.round(this._parent.innerHeight * relative, this._positionPrecision, true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn pixel;\r\n\t}\r\n\r\n\t/**\r\n\t * Moves the element to a specified coordinates.\r\n\t *\r\n\t * Using this method is preferred method of moving element, as it saves some\r\n\t * CPU processing power over setting `x` and `y` properties separately.\r\n\t *\r\n\t * The method respects element's center settings. The element will be\r\n\t * positioned so that `point` coordinates come in whatever \"center\" of the\r\n\t * element is, as set in `horizontalCenter` and `verticalCenter`.\r\n\t *\r\n\t * Besides moving the element, you can also at the same time scale and\r\n\t * rotate the element.\r\n\t *\r\n\t * @param point New coordinates\r\n\t * @param rotation New rotation\r\n\t * @param scale New Scale\r\n\t */\r\n\tpublic moveTo(point: IPoint, rotation?: number, scale?: number, isDragged?: boolean): void {\r\n\t\tif (this.isDragged && !isDragged) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (point) {\r\n\t\t\tif ($type.isNumber(point.x)) {\r\n\t\t\t\tthis.setPropertyValue(\"x\", $math.round(point.x, this._positionPrecision, true));\r\n\t\t\t}\r\n\t\t\tif ($type.isNumber(point.y)) {\r\n\t\t\t\tthis.setPropertyValue(\"y\", $math.round(point.y, this._positionPrecision, true));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(rotation)) {\r\n\t\t\tthis.rotation = rotation;\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(scale)) {\r\n\t\t\tthis.scale = scale;\r\n\t\t}\r\n\r\n\t\t// must leave this\r\n\t\tthis.invalidatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets another [[Sprite]] element as this elements mask.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param mask A [[Sprite]] to use as mask\r\n\t */\r\n\tpublic set mask(mask: Optional<Sprite>) {\r\n\t\tif (this._mask.get() !== mask) {\r\n\t\t\t// this is good\r\n\t\t\tif (mask) {\r\n\r\n\t\t\t\tthis.createClipPath();\r\n\r\n\t\t\t\tif (!(mask instanceof Container)) {\r\n\t\t\t\t\tmask.isMeasured = false;\r\n\t\t\t\t\tif (mask.element) {\r\n\t\t\t\t\t\tthis._clipElement = mask.element;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis._clipElement = this.paper.add(\"rect\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this._clipElement) {\r\n\t\t\t\t\tthis._clipPath.add(this._clipElement);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis._mask.set(mask, new MultiDisposer([\r\n\t\t\t\t\t//mask.addEventListener(SpriteEvent.TRANSFORMED, this.applyMask, false, this);\r\n\t\t\t\t\tmask.events.on(\"maxsizechanged\", () => { if (this.inited) { this.applyMask(); } }, undefined, false),\r\n\t\t\t\t\tmask.events.on(\"validated\", this.applyMask, this, false),\r\n\t\t\t\t\tmask.events.on(\"positionchanged\", this.applyMask, this, false)\r\n\t\t\t\t]));\r\n\r\n\t\t\t\tthis.applyMask();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._mask.reset();\r\n\t\t\t\tthis.group.removeAttr(\"clip-path\");\r\n\t\t\t\tthis.removeClipPath();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns [[Sprite]] element currently used as mask for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return A [[Sprite]] to use as mask\r\n\t */\r\n\tpublic get mask(): Optional<Sprite> {\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn this._mask.get();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"mask\", this._mask.get());\r\n\t\t}\r\n\t}\r\n\r\n\t// you can set IRectangle as a mask instead o a sprite. Note, the changes of the object won't be monitored\r\n\r\n\t/**\r\n\t * Instead of creating a [[Sprite]] for mask, you can just use a\r\n\t * [[Rectangle]] by setting this accessor.\r\n\t *\r\n\t * Please note that the element will not monitor any changes to the mask\r\n\t * rectangle.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param rect Mask Rectangle\r\n\t */\r\n\tpublic set maskRectangle(rect: IRectangle) {\r\n\t\tif (rect) {\r\n\r\n\t\t\tthis.createClipPath();\r\n\r\n\t\t\tif (!this._clipElement) {\r\n\t\t\t\tthis._clipElement = this.paper.add(\"rect\");\r\n\t\t\t\tthis._clipPath.add(this._clipElement);\r\n\t\t\t}\r\n\t\t\tthis._clipElement.attr({ \"width\": rect.width, \"height\": rect.height });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeClipPath();\r\n\t\t\tthis._clipElement = undefined;\r\n\t\t}\r\n\t\tthis._maskRectangle = rect;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Mask Rectangle\r\n\t */\r\n\tpublic get maskRectangle(): IRectangle {\r\n\t\treturn this._maskRectangle;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element was already measured.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Was element already measured?\r\n\t */\r\n\tpublic set isMeasured(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\r\n\t\tif (!value) {\r\n\t\t\tthis._measuredWidth = 0;\r\n\t\t\tthis._measuredHeight = 0;\r\n\t\t\t//this._pixelHeight = 0;\r\n\t\t\t//this._pixelWidth = 0;\r\n\t\t}\r\n\r\n\t\tif (this._isMeasured != value) {\r\n\t\t\tthis._isMeasured = value;\r\n\t\t\tthis.invalidatePosition();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Was element already measured?\r\n\t */\r\n\tpublic get isMeasured(): boolean {\r\n\t\treturn this._isMeasured;\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the this element has any of its parts overlapping with another\r\n\t * element.\r\n\t *\r\n\t * @todo Description (review)\r\n\t * @param sprite Second element to test again\r\n\t * @return Overlapping?\r\n\t */\r\n\tpublic hitTest(sprite: Sprite): boolean {\r\n\t\t// validate, otherwise we will not know measuredWidth and measuredHeight\r\n\t\tif (this.invalid) {\r\n\t\t\tthis.validate();\r\n\t\t}\r\n\t\tif (sprite.invalid) {\r\n\t\t\tsprite.validate();\r\n\t\t}\r\n\r\n\t\tlet ax1 = this.pixelX + this.maxLeft;\r\n\t\tlet ay1 = this.pixelY + this.maxTop;\r\n\t\tlet ax2 = ax1 + this.maxRight;\r\n\t\tlet ay2 = ay1 + this.maxBottom;\r\n\r\n\t\tlet bx1 = sprite.pixelX + sprite.maxLeft;\r\n\t\tlet by1 = sprite.pixelY + sprite.maxTop;\r\n\t\tlet bx2 = bx1 + sprite.maxRight;\r\n\t\tlet by2 = by1 + sprite.maxBottom;\r\n\r\n\t\treturn !(bx1 > ax2 || bx2 < ax1 || by1 > ay2 || by2 < ay1);\r\n\t}\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * STATE-RELATED\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns `true` if Sprite has already finished initializing.\r\n\t *\r\n\t * @return Initialized?\r\n\t */\r\n\tpublic get inited(): boolean {\r\n\t\treturn this._inited;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns `true` if Sprite has already finished initializing and is ready.\r\n\t *\r\n\t * If this object is a [[Container]] it will wait for all of its children\r\n\t * are ready before becoming ready itself and firing a `\"ready\"` event.\r\n\t *\r\n\t * @return is ready?\r\n\t */\r\n\tpublic isReady(): boolean {\r\n\t\treturn this._ready;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a collection of element's available [[SpriteState]] entries.\r\n\t *\r\n\t * @see {@link SpriteState}\r\n\t * @return States\r\n\t */\r\n\tpublic get states(): DictionaryTemplate<string, SpriteState<this[\"_properties\"], this[\"_adapter\"]>> {\r\n\t\tif (!this._states) {\r\n\t\t\tconst state = new SpriteState<this[\"_properties\"], this[\"_adapter\"]>();\r\n\r\n\t\t\t// works\r\n\t\t\tthis._states = new DictionaryTemplate<string, SpriteState<this[\"_properties\"], this[\"_adapter\"]>>(state);\r\n\r\n\t\t\t// TODO what about removeKey ?\r\n\t\t\tthis._disposers.push(this._states.events.on(\"insertKey\", this.processState, this, false));\r\n\t\t\tthis._disposers.push(this._states.events.on(\"setKey\", this.processState, this, false));\r\n\r\n\t\t\tthis._disposers.push(new DictionaryDisposer(this._states));\r\n\t\t\tthis._disposers.push(state);\r\n\t\t}\r\n\t\treturn this._states;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[SpriteState]] object for \"hidden\" state.\r\n\t *\r\n\t * This is a shortcut to `this.states.getKey(\"hidden\")`.\r\n\t *\r\n\t * @return Hidden state\r\n\t */\r\n\tpublic get hiddenState(): SpriteState<this[\"_properties\"], this[\"_adapter\"]> {\r\n\t\tif (!this.states.getKey(\"hidden\")) {\r\n\t\t\tlet hiddenState = this.states.create(\"hidden\");\r\n\t\t\thiddenState.properties.opacity = 0;\r\n\t\t\thiddenState.properties.visible = false;\r\n\t\t}\r\n\r\n\t\treturn this.states.getKey(\"hidden\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[SpriteState]] object for \"default\" state.\r\n\t *\r\n\t * This is a shortcut to `this.states.getKey(\"default\")`.\r\n\t *\r\n\t * @return Hidden state\r\n\t */\r\n\tpublic get defaultState(): SpriteState<this[\"_properties\"], this[\"_adapter\"]> {\r\n\r\n\t\tif (!this.states.getKey(\"default\")) {\r\n\t\t\tlet defaultState = this.states.create(\"default\");\r\n\t\t\tdefaultState.properties.opacity = 1;\r\n\t\t}\r\n\r\n\t\treturn this.states.getKey(\"default\");\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if some key states are defined and updates Sprite properties\r\n\t * accordingly.\r\n\t *\r\n\t * For example if there's a state \"down\" defined for Sprite, we automatically\r\n\t * make it \"clickable\".\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param event An event which caused state list update\r\n\t */\r\n\tprotected processState(event: IDictionaryEvents<string, SpriteState<this[\"_properties\"], this[\"_adapter\"]>>[\"insertKey\" | \"setKey\"]): void {\r\n\t\tlet state: SpriteState<this[\"_properties\"], this[\"_adapter\"]> = event.newValue;\r\n\t\tstate.sprite = this;\r\n\t\tstate.name = event.key;\r\n\t\tif (this.states.hasKey(\"hover\") || (this.showTooltipOn == \"hover\" && ($type.hasValue(this.tooltipHTML) || $type.hasValue(this.tooltipText)))) {\r\n\t\t\tthis.hoverable = true;\r\n\t\t}\r\n\r\n\t\tif (this.states.hasKey(\"down\") || (this.showTooltipOn == \"hover\" && ($type.hasValue(this.tooltipHTML) || $type.hasValue(this.tooltipText)))) {\r\n\t\t\tthis.clickable = true;\r\n\t\t}\r\n\r\n\t\tif (this.states.hasKey(\"focus\")) {\r\n\t\t\tthis.focusable = true;\r\n\t\t}\r\n\r\n\t\t// Propagate the new state to clones\r\n\t\tif (this.applyOnClones) {\r\n\t\t\tconst clones = this.clones.values;\r\n\t\t\tconst length = clones.length;\r\n\r\n\t\t\tfor (let i = 0; i < length; ++i) {\r\n\t\t\t\tconst clone = clones[i];\r\n\t\t\t\tif (!clone.isDisposed()) {\r\n\t\t\t\t\tclone.states.setKey(state.name, state);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a list elements's animations currently being played.\r\n\t *\r\n\t * If the list has not been initialized it is created.\r\n\t *\r\n\t * @return List of animations\r\n\t */\r\n\tpublic get animations(): Array<Animation> {\r\n\t\tif (!this._animations) {\r\n\t\t\tthis._animations = [];\r\n\t\t\tthis._disposers.push(new AnimationDisposer(this._animations));\r\n\t\t}\r\n\t\treturn this._animations;\r\n\t}\r\n\r\n\t/**\r\n\t * Converts element's local coordinates to the coordinates within the main\r\n\t * chart container.\r\n\t *\r\n\t * @param point Local point\r\n\t * @return Global point\r\n\t */\r\n\tpublic getSvgPoint(point: IPoint): IPoint {\r\n\t\ttry {\r\n\t\t\t// Calculate SVG point\r\n\t\t\tlet bbox = this.htmlContainer.getBoundingClientRect();\r\n\r\n\t\t\treturn {\r\n\t\t\t\t\"x\": point.x - bbox.left,\r\n\t\t\t\t\"y\": point.y - bbox.top\r\n\t\t\t};\r\n\t\t}\r\n\t\tcatch (e) {\r\n\t\t\treturn point;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Creates and starts an [[Animation]] with given `animationOptions`.\r\n\t *\r\n\t * @see {@link Animation} for additional information about available options\r\n\t * @param animationOptions Animation options\r\n\t * @param duration Duration in milliseconds\r\n\t * @param easing Easing function\r\n\t * @return Animation instance\r\n\t */\r\n\tpublic animate(animationOptions: ISpriteAnimationOptions[] | ISpriteAnimationOptions, duration: number, easing?: (value: number) => number): Animation {\r\n\t\treturn new Animation(this, animationOptions, duration, easing).start();\r\n\t}\r\n\r\n\t/**\r\n\t * Applies a [[SpriteState]] on this element.\r\n\t *\r\n\t * The first parameter can either be a name state or a [[SpriteState]]\r\n\t * instance.\r\n\t *\r\n\t * When run, this method will apply SVG properties defined in a\r\n\t * [[SpriteState]], but only those that are relevant to this particular\r\n\t * element, i.e. are in the `properties` array.\r\n\t *\r\n\t * @see {@link SpriteState}\r\n\t * @param value A state - name key or instance\r\n\t * @param transitionDuration Duration of the transition between current and new state\r\n\t * @param easing An easing function\r\n\t */\r\n\tpublic setState(value: string | SpriteState<this[\"_properties\"], this[\"_adapter\"]>, transitionDuration?: number, easing?: (value: number) => number): $type.Optional<Animation> {\r\n\t\tlet state: Optional<SpriteState<this[\"_properties\"], this[\"_adapter\"]>>;\r\n\t\tif (value instanceof SpriteState) {\r\n\t\t\tthis.states.setKey(value.name, value);\r\n\t\t\tstate = value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstate = this.states.getKey(value);\r\n\t\t\tif (!state) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// stop previous transition\r\n\t\t// not good - foe expample, we are animating to some \"active\" state and in them middle \"hover\" state happens. then \"active\" stat won't be applied\r\n\t\t//if (this._transition) {\r\n\t\t//this._transition.stop();\r\n\t\t//}\r\n\r\n\t\tif (state.name == \"hover\") {\r\n\t\t\tif (this.isHidden) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.isHover = true;\r\n\t\t}\r\n\r\n\t\tif (state.name == \"hidden\") {\r\n\t\t\tthis.isHiding = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (!this.visible) {\r\n\t\t\t\tthis.setVisibility(state.properties.visible || this.defaultState.properties.visible);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (state.name == \"active\") {\r\n\t\t\tthis.isActive = true;\r\n\t\t}\r\n\t\t// we do not set isActive = false here if it's not active, but container does that if setStateOnChildren = true\r\n\r\n\r\n\t\tif (!$type.isNumber(transitionDuration)) {\r\n\t\t\ttransitionDuration = state.transitionDuration;\r\n\t\t}\r\n\r\n\t\tif (!$type.hasValue(easing)) {\r\n\t\t\teasing = state.transitionEasing;\r\n\t\t}\r\n\r\n\t\treturn this.transitTo(state, transitionDuration, easing);\r\n\t}\r\n\r\n\t/**\r\n\t * Applies proper state based on the condition of the element. A condition is\r\n\t * deducted in this order:\r\n\t * * \"hover\" if Sprite has currently any pointers over it\r\n\t * * \"down\" if Sprite has any pointers (touch or mouse) currently pressed over it\r\n\t * * \"focus\" if Sprite has currently got focus (accessibility)\r\n\t * * \"hidden\" if Sprite is currently hidden\r\n\t *\r\n\t * Returns an [[Animation]] object, which is handling gradual transition from\r\n\t * current values of properties, to the new target state(s).\r\n\t *\r\n\t * @param duration Duration for the animation (ms)\r\n\t * @return [[Animation]] object which is handling the transition\r\n\t */\r\n\tpublic applyCurrentState(duration?: number): $type.Optional<Animation> {\r\n\r\n\t\t//if (!this.isHidden) { // this was done for hover state not to take effect if \"hidden\" is actually visible, need to think about it.\r\n\r\n\t\tlet animation: $type.Optional<Animation> = this.setState(this.defaultState, duration);\r\n\r\n\t\tif (this.isHover) {\r\n\t\t\tanimation = this.setState(\"hover\", duration);\r\n\t\t}\r\n\r\n\t\tif (this.isDown && this.interactions.downPointers.length) {\r\n\t\t\tanimation = this.setState(\"down\", duration);\r\n\t\t}\r\n\r\n\t\tthis.isFocused = this.isFocused;\r\n\r\n\t\tif (this.isActive) {\r\n\t\t\tanimation = this.setState(\"active\", duration);\r\n\t\t\tif (this.isHover && this.states.hasKey(\"hoverActive\")) {\r\n\t\t\t\tanimation = this.setState(\"hoverActive\", duration);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn animation;\r\n\t\t//}\r\n\t}\r\n\r\n\t/**\r\n\t * Starts an [[Animation]] of the properties to specific values as they are\r\n\t * set in `state`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param state Target State\r\n\t * @param duration Duration in milliseconds\r\n\t * @param easing Easing function\r\n\t * @return Transition Animation\r\n\t */\r\n\tprotected transitTo(state: SpriteState<this[\"_properties\"], this[\"_adapter\"]>, duration: number, easing?: (value: number) => number): Optional<Animation> {\r\n\t\t// Init\r\n\t\tlet options: ISpriteAnimationOptions[] = [],\r\n\t\t\tpropValues = state.allValues,\r\n\t\t\ttransition: Optional<Animation>;\r\n\r\n\t\t// todo: do this for numeric/color properties only?\r\n\t\t// @todo use state.getPropertyValue instead\r\n\t\t$object.each(propValues, (propertyName, finalValue) => {\r\n\t\t\tlet currentValue: any = (<any>this)[propertyName];\r\n\t\t\t// save current value to default state. this solves a big problem where values must be set both on sprite and default state\r\n\t\t\tif (finalValue != currentValue && this.defaultState.properties[propertyName] == undefined) {\r\n\t\t\t\tthis.defaultState.properties[propertyName] = currentValue;\r\n\t\t\t}\r\n\r\n\t\t\t//if (finalValue != currentValue && $type.hasValue(finalValue)) {\r\n\t\t\tif (<any>finalValue != \"__unset\") {\r\n\t\t\t\tlet option: ISpriteAnimationOptions = { from: currentValue, to: <any>finalValue, property: propertyName };\r\n\t\t\t\toptions.push(option);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif (options.length > 0) {\r\n\t\t\ttransition = this.animate(options, duration, easing);\r\n\t\t\tif (transition && !transition.isFinished()) {\r\n\t\t\t\t// TODO should this use events.once ?\r\n\t\t\t\t// TODO push onto _disposers array ?\r\n\t\t\t\tthis._disposers.push(transition.events.on(\"animationended\", () => {\r\n\t\t\t\t\tthis.dispatchImmediately(\"transitionended\");\r\n\t\t\t\t}));\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.dispatchImmediately(\"transitionended\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// apply filters if set\r\n\t\tif (state.filters.length > 0) {\r\n\t\t\tlet newFilters: Filter[] = [];\r\n\t\t\t// check for the same filters\r\n\t\t\t$iter.each(state.filters.iterator(), (stateFilter) => {\r\n\t\t\t\tlet newFilter: Filter = <Filter>stateFilter.clone();\r\n\t\t\t\tnewFilters.push(newFilter);\r\n\t\t\t\tlet animationOptions: IAnimationOptions[] = [];\r\n\r\n\t\t\t\t$iter.each(this.filters.iterator(), (currentFilter) => {\r\n\t\t\t\t\t// if we have the same filters\r\n\t\t\t\t\tif (currentFilter.className == newFilter.className) {\r\n\r\n\t\t\t\t\t\tif (!$iter.contains(this.defaultState.filters.iterator(), (x) => x.className === newFilter.className)) {\r\n\t\t\t\t\t\t\tthis.defaultState.filters.push(currentFilter);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t$object.each(newFilter.properties, (propertyName, newValue) => {\r\n\t\t\t\t\t\t\tlet currentValue = (<any>currentFilter).properties[propertyName];\r\n\t\t\t\t\t\t\t// if values are not the same, push to animation options array\r\n\t\t\t\t\t\t\tif (currentValue != newValue) {\r\n\t\t\t\t\t\t\t\tanimationOptions.push({ property: propertyName, from: currentValue, to: newValue });\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\t// animate to new value\r\n\t\t\t\tnewFilter.animate(animationOptions, duration, easing);\r\n\t\t\t});\r\n\t\t\tthis.filters.clear();\r\n\t\t\tthis.filters.pushAll(newFilters);\r\n\t\t}\r\n\r\n\t\treturn transition;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns `true` if Sprite is currently transiting from one state/value to\r\n\t * another.\r\n\t *\r\n\t * @return Is in transition?\r\n\t */\r\n\tpublic isInTransition(): boolean {\r\n\t\treturn this.animations.length > 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element has a mouse pointer currently hovering\r\n\t * over it, or if it has any touch pointers pressed on it.\r\n\t *\r\n\t * You can force element to be \"hovered\" manually, by setting this property\r\n\t * to `true`.\r\n\t *\r\n\t * @param value Is hovered?\r\n\t */\r\n\tpublic set isHover(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (value !== this.isHover) {\r\n\t\t\tif (this.isInteractive()) {\r\n\t\t\t\tthis.interactions.isHover = value;\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.handleOver();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.interactions.isRealHover = false;\r\n\t\t\t\t\tthis.handleOut();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is hovered?\r\n\t */\r\n\tpublic get isHover(): boolean {\r\n\t\tif (this.isInteractive()) {\r\n\t\t\treturn this.interactions.isHover;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns indicator if this element is being dragged at the moment.\r\n\t *\r\n\t * @return Is dragged?\r\n\t */\r\n\tpublic get isDragged(): boolean {\r\n\t\treturn this._isDragged;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns indicator if this element is being resized at the moment.\r\n\t *\r\n\t * @return Is resized?\r\n\t */\r\n\tpublic get isResized(): boolean {\r\n\t\treturn this._isResized;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element has any pointers (mouse or touch) pressing down\r\n\t * on it.\r\n\t *\r\n\t * @param value Is down?\r\n\t */\r\n\tpublic set isDown(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.isInteractive() && this.isDown != value) {\r\n\t\t\tthis.interactions.isDown = value;\r\n\t\t\tif (value) {\r\n\t\t\t\tthis.handleDown();\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.handleUp();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is down?\r\n\t */\r\n\tpublic get isDown(): boolean {\r\n\t\tif (this.isInteractive()) {\r\n\t\t\treturn this.interactions.isDown;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element is focused (possibly by tab navigation).\r\n\t *\r\n\t * @param value Is focused?\r\n\t */\r\n\tpublic set isFocused(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.focusable && this.isFocused != value) {\r\n\t\t\tif (this.isInteractive()) {\r\n\t\t\t\tthis.interactions.isFocused = value;\r\n\t\t\t\tif (value === true) {\r\n\t\t\t\t\tthis.handleFocus();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.handleBlur();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is focused?\r\n\t */\r\n\tpublic get isFocused(): boolean {\r\n\t\tif (this.isInteractive()) {\r\n\t\t\treturn this.interactions.isFocused;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if this element is currently active (toggled on) or not\r\n\t * (toggled off).\r\n\t *\r\n\t * @param value Is active?\r\n\t */\r\n\tpublic set isActive(value: boolean) {\r\n\t\tthis.setActive(value);\r\n\t}\r\n\r\n\r\n\tprotected setActive(value: boolean) {\r\n\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this._isActive !== value) {\r\n\t\t\tthis._isActive = value;\r\n\t\t\tif (value && this.states.hasKey(\"active\")) {\r\n\t\t\t\tthis.setState(\"active\");\r\n\t\t\t\tif (this.isHover && this.states.hasKey(\"hoverActive\")) {\r\n\t\t\t\t\tthis.setState(\"hoverActive\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCurrentState();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchImmediately(\"toggled\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is active?\r\n\t */\r\n\tpublic get isActive(): boolean {\r\n\t\treturn this._isActive;\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if element is disabled.\r\n\t *\r\n\t * A disabled element is hidden, and is removed from any processing, layout\r\n\t * calculations, and generally treated as if it does not exist.\r\n\t *\r\n\t * The element itself is not destroyed, though. Setting this back to `false`,\r\n\t * will \"resurrect\" the element.\r\n\t *\r\n\t * @param value Disabled?\r\n\t */\r\n\tpublic set disabled(value: boolean) {\r\n\t\tthis.setDisabled(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Disabled?\r\n\t */\r\n\tpublic get disabled(): boolean {\r\n\t\t//if(this._internalDisabled){\r\n\t\t//\treturn true;\r\n\t\t//}\r\n\t\tlet current = this.getPropertyValue(\"disabled\");\r\n\t\tif ($type.hasValue(current)) {\r\n\t\t\treturn current;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.disabled;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.disabled;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\tprotected setDisabled(value: boolean): boolean {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tlet current = this.getPropertyValue(\"disabled\");\r\n\t\tif (current != value) {\r\n\t\t\tthis.setPropertyValue(\"disabled\", value, true);\r\n\t\t\tif (value) {\r\n\t\t\t\tthis.parent = this._parent;\r\n\t\t\t\tthis.removeFromInvalids();\r\n\t\t\t\tthis.group.attr({ \"display\": \"none\" });\r\n\t\t\t\tthis.dispatch(\"disabled\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif (this._parent) {\r\n\t\t\t\t\tlet group = <Group>this._parent.element;\r\n\t\t\t\t\tif (!group.hasChild(this.group)) {\r\n\t\t\t\t\t\tgroup.add(this.group);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this instanceof Container) {\r\n\t\t\t\t\tthis.deepInvalidate();\r\n\t\t\t\t\tif (this._background) {\r\n\t\t\t\t\t\tthis._background.invalidate();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.invalidate();\r\n\t\t\t\t}\r\n\t\t\t\tif (!this.__disabled) {\r\n\t\t\t\t\tthis.removeSVGAttribute(\"display\");\r\n\t\t\t\t}\r\n\t\t\t\tthis.dispatch(\"enabled\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"transformed\");\r\n\t\t\tsystem.requestFrame();\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Internal disable method.\r\n\t *\r\n\t * Do not use it for disabling elements. Use `disabled` accessor instead.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Disabled?\r\n\t */\r\n\tpublic set __disabled(value: boolean) {\r\n\t\tif (this._internalDisabled != value) {\r\n\t\t\tthis._internalDisabled = value;\r\n\t\t\tthis._updateDisabled = true;\r\n\t\t\tthis.invalidatePosition(); // better use this instead of invalidate()\r\n\r\n\t\t\tif(!value){\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\t\t\t\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t * @return Disabled?\r\n\t */\r\n\tpublic get __disabled(): boolean {\r\n\t\treturn this._internalDisabled;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * FORMATTERS AND OTHER EXTERNAL HELPERS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * A [[NumberFormatter]] instance.\r\n\t *\r\n\t * This is used to format numbers.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.numberFormatter.numberFormat = \"#,###.#####\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.numberFormatter.numberFormat = \"#,###.#####\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"numberFormatter\": {\r\n\t * \"numberFormat\": \"#,###.#####\"\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * You can set a separate instance of formatter for each\r\n\t * individual element. However that would be unnecessary overhead as\r\n\t * all elements would automatically inherit formatter from their parents,\r\n\t * all the way up to the chart itself.\r\n\t *\r\n\t *\r\n\t * @see {@link NumberFormatter} for more info on formatting numbers\r\n\t * @param value An instance of NumberFormatter\r\n\t */\r\n\tpublic set numberFormatter(value: NumberFormatter) {\r\n\t\tthis._numberFormatter = value;\r\n\t\tthis._numberFormatter.language = this.language;\r\n\t}\r\n\r\n\t/**\r\n\t * @return A [[NumberFormatter]] instance to be used\r\n\t */\r\n\tpublic get numberFormatter(): NumberFormatter {\r\n\t\tif (this._numberFormatter) {\r\n\t\t\treturn this._numberFormatter;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.numberFormatter;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.numberFormatter;\r\n\t\t}\r\n\t\tthis._numberFormatter = new NumberFormatter();\r\n\t\tthis._numberFormatter.language = this.language;\r\n\t\treturn this.numberFormatter;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[DateFormatter]] instance.\r\n\t *\r\n\t * This is used to format dates, e.g. on a date axes, balloons, etc.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.dateFormatter.dateFormat = \"yyyy-MM-dd\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.dateFormatter.dateFormat = \"yyyy-MM-dd\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"dateFormatter\": {\r\n\t * \"dateFormat\": \"yyyy-MM-dd\"\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * You can set a separate instance of formatter for each\r\n\t * individual element. However that would be unnecessary overhead as\r\n\t * all elements would automatically inherit formatter from their parents,\r\n\t * all the way up to the chart itself.\r\n\t *\r\n\t * @see {@link DateFormatter} for more info on dates formatting\r\n\t * @param value An instance of DateFormatter\r\n\t */\r\n\tpublic set dateFormatter(value: DateFormatter) {\r\n\t\tthis._dateFormatter = value;\r\n\t\tthis._dateFormatter.language = this.language;\r\n\t}\r\n\r\n\t/**\r\n\t * @return An instance of DateFormatter\r\n\t */\r\n\tpublic get dateFormatter(): DateFormatter {\r\n\t\tif (this._dateFormatter) {\r\n\t\t\treturn this._dateFormatter;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.dateFormatter;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.dateFormatter;\r\n\t\t}\r\n\t\tthis._dateFormatter = new DateFormatter();\r\n\t\tthis._dateFormatter.language = this.language;\r\n\t\treturn this.dateFormatter;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[DurationFormatter]] instance.\r\n\t *\r\n\t * This is used to format numbers as durations, e.g. on a value axes.\r\n\t *\r\n\t * You can set a separate instance of formatter for each\r\n\t * individual element. However that would be unnecessary overhead as\r\n\t * all elements would automatically inherit formatter from their parents,\r\n\t * all the way up to the chart itself.\r\n\t *\r\n\t * @see {@link DurationFormatter} for more info on durations\r\n\t * @param value An instance of DurationFormatter\r\n\t */\r\n\tpublic set durationFormatter(value: DurationFormatter) {\r\n\t\tthis._durationFormatter = value;\r\n\t\tthis._durationFormatter.language = this.language;\r\n\t}\r\n\r\n\t/**\r\n\t * @return An instance of DurationFormatter\r\n\t */\r\n\tpublic get durationFormatter(): DurationFormatter {\r\n\t\tif (this._durationFormatter) {\r\n\t\t\treturn this._durationFormatter;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.durationFormatter;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.durationFormatter;\r\n\t\t}\r\n\t\tthis._durationFormatter = new DurationFormatter();\r\n\t\tthis._durationFormatter.language = this.language;\r\n\t\treturn this.durationFormatter;\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Language]] instance to use for translations.\r\n\t *\r\n\t * Normally it is enough to set language for the top-most element - chart.\r\n\t *\r\n\t * All other element child elements will automatically re-use that language\r\n\t * object.\r\n\t *\r\n\t * @param value An instance of Language\r\n\t */\r\n\tpublic set language(value: Language) {\r\n\t\tif (this._language.get() !== value) {\r\n\t\t\tthis._language.set(value, value.events.on(\"localechanged\", (ev) => {\r\n\t\t\t\tif (this._numberFormatter) {\r\n\t\t\t\t\tthis._numberFormatter.language = this.language;\r\n\t\t\t\t}\r\n\t\t\t\tif (this._dateFormatter) {\r\n\t\t\t\t\tthis._dateFormatter.language = this.language;\r\n\t\t\t\t}\r\n\t\t\t\tif (this._durationFormatter) {\r\n\t\t\t\t\tthis._durationFormatter.language = this.language;\r\n\t\t\t\t}\r\n\t\t\t\tif (this._exporting.get()) {\r\n\t\t\t\t\tconst exporting = this._exporting.get();\r\n\t\t\t\t\texporting.numberFormatter.language = this.language;\r\n\t\t\t\t\texporting.dateFormatter.language = this.language;\r\n\t\t\t\t\texporting.durationFormatter.language = this.language;\r\n\t\t\t\t\texporting.language = this.language;\r\n\t\t\t\t}\r\n\t\t\t\tif (this instanceof Container) {\r\n\t\t\t\t\tthis.deepInvalidate();\r\n\t\t\t\t}\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return An instance of Language\r\n\t */\r\n\tpublic get language(): Language {\r\n\t\tlet language = this._language.get();\r\n\t\tif (language) {\r\n\t\t\treturn language;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.language;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.language;\r\n\t\t}\r\n\t\tlanguage = new Language();\r\n\t\tthis.language = language;\r\n\t\treturn language;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * DATA-RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Parses the string for meta tags `{tag}` and replaces them with a real\r\n\t * value. Supports straight up tags referring to the field in data, i.e.\r\n\t * `{value}` or tags with additional formatting info. E.g.:\r\n\t *\r\n\t * ```Text\r\n\t * {myfield.formatDate(\"yyyy-MM-dd\")}\r\n\t * {myfield.formatDate()}\r\n\t * {myfield.formatNumber(\"#,####.00\")}\r\n\t * {myfield.formatNumber()}\r\n\t * {myField.formatDuration(\"mm:ss\")}\r\n\t * ```\r\n\t *\r\n\t * Etc.\r\n\t *\r\n\t * This method Will automatically detect and use proper formatter for the\r\n\t * value.\r\n\t *\r\n\t * The source value will be looked up in various places: (in order)\r\n\t * * Sprite's own `dataItem`\r\n\t * * Sprite's properties\r\n\t * * Parent's `dataItem`\r\n\t * * Parent's properties\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param string A string to format\r\n\t * @param dataItem DataItem\r\n\t * @return Formatted string\r\n\t */\r\n\r\n\tpublic populateString(string: string, dataItem?: DataItem): string {\r\n\t\tif ($type.hasValue(string)) {\r\n\t\t\tstring = $type.castString(string);\r\n\t\t\tstring = getTextFormatter().escape(string);\r\n\t\t\tlet tags = string.match(/\\{([^}]+)\\}/g);\r\n\t\t\tlet i;\r\n\t\t\tif (tags) {\r\n\t\t\t\tfor (i = 0; i < tags.length; i++) {\r\n\t\t\t\t\tlet tag = tags[i].replace(/\\{([^}]+)\\}/, \"$1\");\r\n\t\t\t\t\tlet value = this.getTagValue(tag, \"\", dataItem);\r\n\r\n\t\t\t\t\tif (!$type.hasValue(value)) {\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tstring = string.split(tags[i]).join(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstring = getTextFormatter().unescape(string);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tstring = \"\";\r\n\t\t}\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn string;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"populateString\", string);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Gets the value from data item and formats it according to specified format.\r\n\t *\r\n\t * If `format` is specified, it will use its contents to choose formatter for\r\n\t * the value. Otherwise it will select formatter accordingly to actual value\r\n\t * type.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Ability to force certain formatter on known numeric and date values\r\n\t * @see {@link NumberFormatter}\r\n\t * @see {@link DateFormatter}\r\n\t * @see {@link DurationFormatter}\r\n\t * @param tagName Tag name to replace\r\n\t * @param format Format to use\r\n\t * @param dataItem DataItem\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic getTagValue(tagName: string, format?: string, dataItem?: DataItem): string {\r\n\t\tlet value: any;\r\n\t\tif (!$type.hasValue(dataItem)) {\r\n\t\t\tdataItem = this.dataItem;\r\n\t\t}\r\n\r\n\t\t// Parse parts\r\n\t\tlet parts: any[] = [];\r\n\t\tlet reg = /([^.]+)\\(([^)]*)\\)|([^.]+)/g;;\r\n\t\tlet matches;\r\n\r\n\t\twhile (true) {\r\n\t\t\tmatches = reg.exec(tagName);\r\n\r\n\t\t\tif (matches === null) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif (matches[3]) {\r\n\t\t\t\t// Simple property\r\n\t\t\t\tparts.push({\r\n\t\t\t\t\tprop: matches[3]\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Method\r\n\t\t\t\t// Parse parameters\r\n\t\t\t\tlet params: any[] = [];\r\n\t\t\t\tif ($utils.trim(matches[2]) != \"\") {\r\n\t\t\t\t\tlet reg2 = /'([^']*)'|\"([^\"]*)\"|([0-9\\-]+)/g;\r\n\t\t\t\t\tlet matches2;\r\n\r\n\t\t\t\t\twhile (true) {\r\n\t\t\t\t\t\tmatches2 = reg2.exec(matches[2]);\r\n\r\n\t\t\t\t\t\tif (matches2 === null) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tparams.push(matches2[1] || matches2[2] || matches2[3])\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tparts.push({\r\n\t\t\t\t\tmethod: matches[1],\r\n\t\t\t\t\tparams: params\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// Check if we can retrieve the value from data item\r\n\t\tif (dataItem) {\r\n\r\n\r\n\t\t\t// Check values\r\n\t\t\tvalue = this.getTagValueFromObject(parts, dataItem.values);\r\n\r\n\t\t\t// Check properties\r\n\t\t\tif (!$type.hasValue(value) || $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\t\t\t\tvalue = this.getTagValueFromObject(parts, dataItem);\r\n\t\t\t}\r\n\r\n\t\t\t// Check data context\r\n\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\tif (!$type.hasValue(value) && dataContext) {\r\n\t\t\t\tvalue = this.getTagValueFromObject(parts, dataItem.dataContext);\r\n\r\n\t\t\t\t// Maybe it's a literal dot-separated name of the key in dataContext?\r\n\t\t\t\tif (!$type.hasValue(value)) {\r\n\t\t\t\t\tvalue = this.getTagValueFromObject([{\r\n\t\t\t\t\t\tprop: tagName\r\n\t\t\t\t\t}], dataContext);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// scond data context level sometimes exist (tree map)\r\n\t\t\t\tif (!$type.hasValue(value) && dataContext.dataContext) {\r\n\t\t\t\t\tvalue = this.getTagValueFromObject(parts, dataContext.dataContext);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// Check component's data item\r\n\t\t\tif (!$type.hasValue(value) && dataItem.component && dataItem.component.dataItem !== dataItem) {\r\n\t\t\t\tvalue = dataItem.component.getTagValue(tagName, format);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Check sprite's properties\r\n\t\tif (!$type.hasValue(value)) {\r\n\t\t\tvalue = this.getTagValueFromObject(parts, this.populateStringFrom || <any>this);\r\n\t\t}\r\n\r\n\t\t// Finally, check the parent\r\n\t\tif (!$type.hasValue(value) && this._parent) {\r\n\t\t\tvalue = this._parent.getTagValue(tagName, format);\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Tries to retrieve values from properties of any object, then applies\r\n\t * proper formatting to it.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (improve)\r\n\t * @param parts Properties ant methods to access\r\n\t * @param object Source object\r\n\t * @param format A specific format to apply\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic getTagValueFromObject(parts: any[], object: any, format?: string): any {\r\n\t\tlet current: any = object;\r\n\t\tlet formatApplied = false;\r\n\t\tfor (let i = 0, len = parts.length; i < len; i++) {\r\n\t\t\tlet part = parts[i];\r\n\t\t\tif (part.prop) {\r\n\t\t\t\t// Regular property\r\n\t\t\t\tcurrent = current[part.prop];\r\n\t\t\t\tif (!$type.hasValue(current)) {\r\n\t\t\t\t\t// Not set, return undefined\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Method\r\n\r\n\t\t\t\tswitch (part.method) {\r\n\t\t\t\t\tcase \"formatNumber\":\r\n\t\t\t\t\t\tlet numberValue = $utils.anyToNumber(current);\r\n\t\t\t\t\t\tif ($type.hasValue(numberValue)) {\r\n\t\t\t\t\t\t\tcurrent = this.numberFormatter.format(\r\n\t\t\t\t\t\t\t\tnumberValue,\r\n\t\t\t\t\t\t\t\tformat || part.params[0] || undefined\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tformatApplied = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"formatDate\":\r\n\t\t\t\t\t\tlet dateValue;\r\n\t\t\t\t\t\tif ($type.isString(current)) {\r\n\t\t\t\t\t\t\tdateValue = this.dateFormatter.parse(current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tdateValue = $utils.anyToDate(current);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (!$type.isDate(dateValue) || $type.isNaN(dateValue.getTime())) {\r\n\t\t\t\t\t\t\t// Was not able to get date out of value, quitting and letting\r\n\t\t\t\t\t\t\t// calling method try another value\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif ($type.hasValue(dateValue)) {\r\n\t\t\t\t\t\t\tcurrent = this.dateFormatter.format(\r\n\t\t\t\t\t\t\t\tdateValue,\r\n\t\t\t\t\t\t\t\tformat || part.params[0] || undefined\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tformatApplied = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"formatDuration\":\r\n\t\t\t\t\t\tlet durationValue = $utils.anyToNumber(current);\r\n\t\t\t\t\t\tif ($type.hasValue(durationValue)) {\r\n\t\t\t\t\t\t\tcurrent = this.durationFormatter.format(\r\n\t\t\t\t\t\t\t\tdurationValue,\r\n\t\t\t\t\t\t\t\tformat || part.params[0] || undefined,\r\n\t\t\t\t\t\t\t\tpart.params[1] || undefined\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\tformatApplied = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tcase \"urlEncode\":\r\n\t\t\t\t\tcase \"encodeURIComponent\":\r\n\t\t\t\t\t\tcurrent = encodeURIComponent(current);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif (current[part.method]) {\r\n\t\t\t\t\t\t\tcurrent[part.method].apply(this, part.params);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Apply default format if it wasn't applied explicitly\r\n\t\tif (!formatApplied) {\r\n\r\n\t\t\tlet formatParts = [{\r\n\t\t\t\tmethod: \"\",\r\n\t\t\t\tparams: format\r\n\t\t\t}];\r\n\r\n\t\t\tif (!$type.hasValue(format)) {\r\n\r\n\t\t\t\t// Format is not set\r\n\t\t\t\t// Determine from the type of the value\r\n\t\t\t\tif ($type.isNumber(current)) {\r\n\t\t\t\t\tformatParts[0].method = \"formatNumber\";\r\n\t\t\t\t\tformatParts[0].params = \"\";\r\n\t\t\t\t}\r\n\t\t\t\telse if ($type.isDate(current)) {\r\n\t\t\t\t\tformatParts[0].method = \"formatDate\";\r\n\t\t\t\t\tformatParts[0].params = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t\telse {\r\n\r\n\t\t\t\t// Format set\r\n\t\t\t\t// Try to determine formatter based on the format\r\n\t\t\t\tlet formatterType: string = $utils.getFormat(format);\r\n\r\n\t\t\t\t// format\r\n\t\t\t\tif (formatterType === $strings.NUMBER) {\r\n\t\t\t\t\tformatParts[0].method = \"formatNumber\";\r\n\t\t\t\t}\r\n\t\t\t\telse if (formatterType === $strings.DATE) {\r\n\t\t\t\t\tformatParts[0].method = \"formatDate\";\r\n\t\t\t\t}\r\n\t\t\t\telse if (formatterType === $strings.DURATION) {\r\n\t\t\t\t\tformatParts[0].method = \"formatDuration\";\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t// Apply format\r\n\t\t\tif (formatParts[0].method) {\r\n\t\t\t\tcurrent = this.getTagValueFromObject(formatParts, current);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\treturn current;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * A [[DataItem]] to use as element's data source.\r\n\t *\r\n\t * @todo Review type\r\n\t * @param dataItem DataItem\r\n\t */\r\n\tpublic set dataItem(dataItem: this[\"_dataItem\"]) {\r\n\t\t//an not use this[\"_dataItem\"] here, as we return parent data item if this sprite doesn't have one.\r\n\t\t// @todo:think about it\r\n\t\tthis.setDataItem(dataItem);\r\n\t}\r\n\r\n\t/**\r\n\t * @return [[DataItem]]\r\n\t */\r\n\tpublic get dataItem(): this[\"_dataItem\"] {\r\n\t\tif (!this._dataItem) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.dataItem;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.dataItem;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets currently used [[DataItem]].\r\n\t *\r\n\t * If the element has also `configField` set, it will also look for any\r\n\t * config in DataItem's data context to apply to this element.\r\n\t *\r\n\t * @param dataItem DataItem\r\n\t */\r\n\tprotected setDataItem(dataItem: DataItem) {\r\n\t\tif (this._dataItem != dataItem) {\r\n\t\t\tthis._dataItem = dataItem;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tif (this.configField) {\r\n\t\t\t\t\tlet dataContext: any = dataItem.dataContext;\r\n\t\t\t\t\tif (dataContext) {\r\n\t\t\t\t\t\tthis.config = dataContext[this.configField];\r\n\t\t\t\t\t\tif (!this.config && dataContext.dataContext) {\r\n\t\t\t\t\t\t\tthis.config = dataContext.dataContext[this.configField];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet dataContext = <any>dataItem.dataContext;\r\n\r\n\t\t\t\tif (dataContext) {\r\n\r\n\t\t\t\t\tlet dataContext2 = dataContext.dataContext;\r\n\r\n\t\t\t\t\t$object.each(this.propertyFields, (propertyName, fieldValue) => {\r\n\t\t\t\t\t\tif ($type.hasValue(dataContext[fieldValue])) {\r\n\t\t\t\t\t\t\tlet anyThis = <any>this;\r\n\t\t\t\t\t\t\tanyThis[propertyName] = dataContext[fieldValue];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\tif (dataContext2) {\r\n\t\t\t\t\t\t\t\tlet value = dataContext2[fieldValue];\r\n\t\t\t\t\t\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\t\t\t\t\t\tlet anyThis = <any>this;\r\n\t\t\t\t\t\t\t\t\tanyThis[propertyName] = value;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * PROPERTY UTILITIES\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns element's property value.\r\n\t *\r\n\t * Will check if there are any bindings with [[DataItem]].\r\n\t *\r\n\t * Will also apply any adapters bound to `propertyName`.\r\n\t *\r\n\t * @param propertyName Property name\r\n\t * @return Property value\r\n\t */\r\n\tpublic getPropertyValue<Key extends keyof this[\"_properties\"]>(propertyName: Key): this[\"_properties\"][Key] {\r\n\t\tlet propValue: this[\"_properties\"][Key] = this.properties[propertyName];\r\n\r\n\t\t// Apply adapter\r\n\t\tif (!this._isTemplate) {\r\n\t\t\tif (this._adapterO) {\r\n\t\t\t\tpropValue = this._adapterO.apply(propertyName, <any>propValue);\r\n\t\t\t}\r\n\r\n\t\t\tpropValue = globalAdapter.applyAll(this, propertyName, propValue);\r\n\t\t}\r\n\r\n\t\treturn propValue;\r\n\t}\r\n\r\n\r\n\tprotected setColorProperty<Key extends keyof this[\"properties\"]>(property: Key, value: $type.Optional<Color | Pattern | LinearGradient | RadialGradient>, invalidate?: boolean): boolean {\r\n\t\tlet currentValue = this.properties[property];\r\n\t\tif (value instanceof Color && currentValue instanceof Color && value.toString() == currentValue.toString()) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.setPropertyValue(property, value, invalidate);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tprotected setPercentProperty<Key extends keyof this[\"properties\"]>(property: Key, value: Percent | number, invalidate?: boolean, transform?: boolean, precision?: number, floor?: boolean): boolean {\r\n\t\tvalue = $type.toNumberOrPercent(value);\r\n\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tif ($type.isNumber(precision)) {\r\n\t\t\t\tvalue = $math.round(value, precision, floor);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.setPropertyValue(property, value, invalidate, transform);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet currentValue = this.properties[property];\r\n\r\n\t\t\tif (value instanceof Percent && currentValue instanceof Percent && value.value == currentValue.value) {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this.setPropertyValue(property, value, invalidate, transform);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets elements's property value. Will also propagate the same property value\r\n\t * on all element's clones.\r\n\t *\r\n\t * @param property Property\r\n\t * @param value Value\r\n\t * @param invalidate Should the sprite be invalidated, cause it's re-rendering\r\n\t * @param transform Re-apply positioning of the element\r\n\t * @return Did the value change? It will return `true` if the new value and the old value of the property are not the same\r\n\t * @todo Review propagation to clones. Right now we simply check if clone is disposed before setting the same property on it. It's better to remove from clone list altogether.\r\n\t */\r\n\tpublic setPropertyValue<Key extends keyof this[\"properties\"]>(property: Key, value: any, invalidate?: boolean, transform?: boolean): boolean {\r\n\t\tif (this.properties[property] !== value && !this.isDisposed()) {\r\n\t\t\tthis.properties[property] = value;\r\n\r\n\t\t\tif (this.events.isEnabled(\"propertychanged\")) {\r\n\r\n\t\t\t\tconst event: AMEvent<this, ISpriteEvents>[\"propertychanged\"] = {\r\n\t\t\t\t\ttype: \"propertychanged\",\r\n\t\t\t\t\ttarget: this,\r\n\t\t\t\t\tproperty: <string>property\r\n\t\t\t\t};\r\n\t\t\t\tthis.events.dispatchImmediately(\"propertychanged\", event);\r\n\t\t\t}\r\n\r\n\t\t\tif (invalidate) {\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\r\n\r\n\t\t\tif (transform) {\r\n\t\t\t\tthis.invalidatePosition();\r\n\t\t\t}\r\n\r\n\t\t\tif (this.applyOnClones) {\r\n\t\t\t\tconst clones = this.clones.values;\r\n\t\t\t\tconst length = clones.length;\r\n\r\n\t\t\t\tfor (let i = 0; i < length; ++i) {\r\n\t\t\t\t\tconst clone = clones[i];\r\n\r\n\t\t\t\t\tif (!clone.isDisposed()) {\r\n\t\t\t\t\t\t//(<Sprite>clone).setPropertyValue(<any>property, value, invalidate, transform);\r\n\t\t\t\t\t\t(<any>clone)[property] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @todo Verify this\r\n\t */\r\n\tpublic bind<\r\n\t\tS extends { cloneId: string, events: EventDispatcher<{ propertychanged: { property: string } }> },\r\n\t\tFrom extends (keyof S & keyof this),\r\n\t\tTo extends keyof this\r\n\t>(\r\n\t\tproperty: To,\r\n\t\tsource: S,\r\n\t\tbindToProperty: From,\r\n\t\tmodifier?: (value: this[From]) => this[To]\r\n\t): void;\r\n\tpublic bind<\r\n\t\tS extends { cloneId: string, events: EventDispatcher<{ propertychanged: { property: string } }> },\r\n\t\tKey extends (keyof S & keyof this)\r\n\t>(\r\n\t\tproperty: Key,\r\n\t\tsource: S,\r\n\t\tmodifier?: (value: this[Key]) => this[Key]\r\n\t): void;\r\n\tpublic bind<\r\n\t\tS extends this & { cloneId: string, events: EventDispatcher<{ propertychanged: { property: string } }> },\r\n\t\tKey extends (keyof S & keyof this)\r\n\t>(\r\n\t\tproperty: Key,\r\n\t\tsource: S,\r\n\t\tbindToProperty: Key = property,\r\n\t\tmodifier?: (value: this[Key]) => this[Key]\r\n\t): void {\r\n\t\tif ($type.hasValue(this._bindings[<string>property])) {\r\n\t\t\tthis._bindings[<string>property].dispose();\r\n\t\t}\r\n\r\n\t\t// set current value\r\n\t\tthis[property] = source[bindToProperty];\r\n\r\n\t\t//source.addEventListener(AMEvent.PROPERTY_CHANGED, this.handleBindings, false, this);\r\n\t\tthis._bindings[<string>property] = source.events.on(\"propertychanged\", (event) => {\r\n\t\t\tif (event.property === bindToProperty) {\r\n\t\t\t\tlet value: this[Key] = source[bindToProperty];\r\n\r\n\t\t\t\tif (modifier) {\r\n\t\t\t\t\tvalue = modifier(value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// TODO clonesById\r\n\t\t\t\tthis[property] = value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Sets up and obeserver function to monitor changes in particular property\r\n\t * or properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param property Element's property name\r\n\t * @param listener Handler function\r\n\t * @param context Context for handler function\r\n\t * @returns Event Disposer\r\n\t */\r\n\tpublic observe<C>(property: string | string[], listener: (this: C, event: AMEvent<this, ISpriteEvents>[\"propertychanged\"]) => void, context?: C, shouldClone?: boolean): IDisposer {\r\n\t\treturn new MultiDisposer($array.map($array.toArray(property), (prop) => {\r\n\t\t\treturn this.events.on(\"propertychanged\", (e) => {\r\n\t\t\t\tif (e.property === prop) {\r\n\t\t\t\t\tlistener.call(context, e);\r\n\t\t\t\t}\r\n\t\t\t}, context, shouldClone);\r\n\t\t}));\r\n\t}\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * ACCESSIBILITY-RELATED PROPERTIES\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Applies accessibility to the SVG element.\r\n\t *\r\n\t * Adds `<title>` and `<description>` elements as well as `aria-labelledby`\r\n\t * and `role` properties.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected applyAccessibility(): void {\r\n\r\n\t\t// Check if we need to add label and description\r\n\t\tlet title = this.readerTitle,\r\n\t\t\tdescription = this.readerDescription,\r\n\t\t\trole = this.role,\r\n\t\t\thidden = this.readerHidden,\r\n\t\t\tchecked = this.readerChecked,\r\n\t\t\tcontrols = this.readerControls,\r\n\t\t\tlive = this.readerLive,\r\n\t\t\torientation = this.readerOrientation,\r\n\t\t\tvalueNow = this.readerValueNow,\r\n\t\t\tvalueText = this.readerValueText;\r\n\r\n\t\t// Init label/describe ids\r\n\t\tlet labelledByIds: string[] = [];\r\n\t\tlet describedByIds: string[] = [];\r\n\r\n\t\tlet labelledBy: string = this.readerLabelledBy;\r\n\t\tif (labelledBy) {\r\n\t\t\tlabelledByIds.push(labelledBy);\r\n\t\t}\r\n\r\n\t\tlet describedBy: string = this.readerDescribedBy;\r\n\t\tif (describedBy) {\r\n\t\t\tdescribedByIds.push(describedBy);\r\n\t\t}\r\n\r\n\t\t// Add arial-label attribute if present\r\n\t\t// If not readerTitle and labelledBy is set we will use <title> element\r\n\t\t// instead of aria-label\r\n\t\t// TODO: should we check agains this.showSystemTooltip?\r\n\t\tif (title) {\r\n\r\n\t\t\tif (labelledByIds.length || this.showSystemTooltip) {\r\n\r\n\t\t\t\tconst titleElement = this.titleElement;\r\n\t\t\t\tconst titleId = this.uid + \"-title\";\r\n\t\t\t\tif (titleElement.node.textContent != title) {\r\n\t\t\t\t\ttitleElement.node.textContent = title;\r\n\t\t\t\t\ttitleElement.attr({ id: titleId });\r\n\t\t\t\t}\r\n\t\t\t\tlabelledByIds.push(titleId);\r\n\r\n\t\t\t}\r\n\t\t\telse {\r\n\r\n\t\t\t\tif (this._titleElement) {\r\n\t\t\t\t\tthis.group.removeElement(this._titleElement);\r\n\t\t\t\t\tthis._titleElement = undefined;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setSVGAttribute({\r\n\t\t\t\t\t\"aria-label\": title\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"aria-label\");\r\n\t\t\tif (this._titleElement) {\r\n\t\t\t\tthis.group.removeElement(this._titleElement);\r\n\t\t\t\tthis._titleElement = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t// Add description\r\n\t\tif (description) {\r\n\r\n\t\t\tconst descriptionElement = this.descriptionElement;\r\n\t\t\tconst descriptionId = this.uid + \"-description\";\r\n\t\t\tif (descriptionElement.node.textContent != description) {\r\n\t\t\t\tdescriptionElement.node.textContent = description;\r\n\t\t\t\tdescriptionElement.attr({ id: descriptionId });\r\n\t\t\t}\r\n\t\t\tdescribedByIds.push(descriptionId);\r\n\r\n\t\t}\r\n\t\telse if (this._descriptionElement) {\r\n\t\t\tthis.group.removeElement(this._descriptionElement);\r\n\t\t\tthis._descriptionElement = undefined;\r\n\t\t}\r\n\r\n\r\n\t\t// Add label and described properties\r\n\t\tif (labelledByIds.length) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-labelledby\": labelledByIds.join(\" \") });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"aria-labelledby\");\r\n\t\t}\r\n\r\n\t\tif (describedByIds.length) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-describedby\": describedByIds.join(\" \") });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"aria-describedby\");\r\n\t\t}\r\n\r\n\t\t// Apply role\r\n\t\tif (role) {\r\n\t\t\tthis.setSVGAttribute({ \"role\": role });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"role\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-hidden\r\n\t\tif (hidden) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-hidden\": \"true\" });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"aria-hidden\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-checked\r\n\t\tif (checked) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-checked\": \"true\" });\r\n\t\t}\r\n\t\telse if (checked === false) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-checked\": \"false\" });\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.removeSVGAttribute(\"aria-checked\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-controls\r\n\t\tif (controls) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-controls\": controls });\r\n\t\t} else {\r\n\t\t\tthis.removeSVGAttribute(\"aria-controls\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-live\r\n\t\tif (live) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-live\": live });\r\n\t\t} else {\r\n\t\t\tthis.removeSVGAttribute(\"aria-live\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-orientation\r\n\t\tif (orientation) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-orientation\": orientation });\r\n\t\t} else {\r\n\t\t\tthis.removeSVGAttribute(\"aria-orientation\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-valuenow\r\n\t\tif (valueNow) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-valuenow\": valueNow });\r\n\t\t} else {\r\n\t\t\tthis.removeSVGAttribute(\"aria-valuenow\");\r\n\t\t}\r\n\r\n\t\t// Apply aria-valuetext\r\n\t\tif (valueText) {\r\n\t\t\tthis.setSVGAttribute({ \"aria-valuetext\": valueText });\r\n\t\t} else {\r\n\t\t\tthis.removeSVGAttribute(\"aria-valuetext\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Screen reader title of the element.\r\n\t *\r\n\t * @param value Title\r\n\t */\r\n\tpublic set readerTitle(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerTitle\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Title\r\n\t */\r\n\tpublic get readerTitle(): string {\r\n\t\tconst title = this.getPropertyValue(\"readerTitle\");\r\n\t\tif ($type.hasValue(title) && this.dataItem) {\r\n\t\t\treturn this.populateString(title);\r\n\t\t}\r\n\t\treturn title;\r\n\t}\r\n\r\n\t/**\r\n\t * Screen reader description of the element.\r\n\t *\r\n\t * @param value Description\r\n\t */\r\n\tpublic set readerDescription(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerDescription\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Description\r\n\t */\r\n\tpublic get readerDescription(): string {\r\n\t\tconst description = this.getPropertyValue(\"readerDescription\");\r\n\t\tif ($type.hasValue(description) && this.dataItem) {\r\n\t\t\treturn this.populateString(description);\r\n\t\t}\r\n\t\treturn this.getPropertyValue(\"readerDescription\");\r\n\t}\r\n\r\n\t/**\r\n\t * A WAI-ARIA role for the element.\r\n\t *\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#role_definitions} for more information on WAI-ARIA roles\r\n\t * @param value Role\r\n\t */\r\n\tpublic set role(value: Roles) {\r\n\t\tvalue = <Roles>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"role\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\r\n\t\t\tif (value == \"slider\") {\r\n\t\t\t\tthis.setSVGAttribute({ \"aria-valuemin\": \"0\" });\r\n\t\t\t\tthis.setSVGAttribute({ \"aria-valuemax\": \"100\" });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Role\r\n\t */\r\n\tpublic get role(): Roles {\r\n\t\treturn this.getPropertyValue(\"role\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if element should be hidden from screen readers.\r\n\t *\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-hidden} for more information\r\n\t * @param value Hidden?\r\n\t */\r\n\tpublic set readerHidden(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"readerHidden\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Hidden?\r\n\t */\r\n\tpublic get readerHidden(): boolean {\r\n\t\treturn this.getPropertyValue(\"readerHidden\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if element is currently marked as \"checked\".\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-checked} for more information\r\n\t * @param value Checked?\r\n\t */\r\n\tpublic set readerChecked(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"readerChecked\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Checked?\r\n\t */\r\n\tpublic get readerChecked(): boolean {\r\n\t\treturn this.getPropertyValue(\"readerChecked\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `uid` of an element this element controls.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-controls} for more information\r\n\t * @param value Setting value\r\n\t */\r\n\tpublic set readerControls(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerControls\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Setting value\r\n\t */\r\n\tpublic get readerControls(): string {\r\n\t\treturn this.getPropertyValue(\"readerControls\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls accessibility setting \"aria-live\" for the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions} for more information\r\n\t * @param value Setting value\r\n\t */\r\n\tpublic set readerLive(value: AriaLive) {\r\n\t\tvalue = <AriaLive>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerLive\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Setting value\r\n\t */\r\n\tpublic get readerLive(): AriaLive {\r\n\t\treturn this.getPropertyValue(\"readerLive\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `uid` of an element that describes this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby} for more information\r\n\t * @param value Target element\r\n\t */\r\n\tpublic set readerLabelledBy(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerLabelledBy\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Target element\r\n\t */\r\n\tpublic get readerLabelledBy(): string {\r\n\t\treturn this.getPropertyValue(\"readerLabelledBy\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `uid` of an element that describes this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @see {@link https://www.w3.org/TR/wai-aria-1.1/#aria-describedby} for more information\r\n\t * @param value Target element\r\n\t */\r\n\tpublic set readerDescribedBy(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerDescribedBy\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Target element\r\n\t */\r\n\tpublic get readerDescribedBy(): string {\r\n\t\treturn this.getPropertyValue(\"readerDescribedBy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Orientation of the element.\r\n\t *\r\n\t * @since 4.7.16\r\n\t * @param value Orientation\r\n\t */\r\n\tpublic set readerOrientation(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerOrientation\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Orientation\r\n\t */\r\n\tpublic get readerOrientation(): string {\r\n\t\treturn this.getPropertyValue(\"readerOrientation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current value of the element.\r\n\t *\r\n\t * @since 4.7.16\r\n\t * @param value Current value\r\n\t */\r\n\tpublic set readerValueNow(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerValueNow\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current value\r\n\t */\r\n\tpublic get readerValueNow(): string {\r\n\t\treturn this.getPropertyValue(\"readerValueNow\");\r\n\t}\r\n\r\n\t/**\r\n\t * Text representation of the current value of the element.\r\n\t *\r\n\t * @since 4.7.16\r\n\t * @param value Current value (text)\r\n\t */\r\n\tpublic set readerValueText(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"readerValueText\", value)) {\r\n\t\t\tthis.applyAccessibility();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Current value (text)\r\n\t */\r\n\tpublic get readerValueText(): string {\r\n\t\treturn this.getPropertyValue(\"readerValueText\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * USER INTERACTIONS\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns elements keyboard options.\r\n\t *\r\n\t * @return Keyboard options\r\n\t */\r\n\tpublic get keyboardOptions(): IKeyboardOptions {\r\n\t\tif (!this.interactions.keyboardOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.keyboardOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.keyboardOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.keyboardOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Mouse options.\r\n\t *\r\n\t * Enables controlling options related to the mouse, for example sensitivity\r\n\t * of its mouse wheel.\r\n\t *\r\n\t * E.g. the below will reduce chart's wheel-zoom speed to half its default\r\n\t * speed:\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.plotContainer.mouseOptions.sensitivity = 0.5;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"plotContainer\": {\r\n\t * \"mouseOptions\": {\r\n\t * \"sensitivity\": 0.5\r\n\t * }\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @return Mouse options\r\n\t */\r\n\tpublic get mouseOptions(): IMouseOptions {\r\n\t\tif (!this.interactions.mouseOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.mouseOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.mouseOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.mouseOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns (creates if necessary) an [[InteractionObject]] associated with\r\n\t * this element.\r\n\t *\r\n\t * [[InteractionObject]] is used to attach all kinds of user-interactions to\r\n\t * the element, e.g. click/touch, dragging, hovering, and similar events.\r\n\t *\r\n\t * @return Interaction object\r\n\t */\r\n\tpublic get interactions(): InteractionObject {\r\n\t\tif (!this._interaction) {\r\n\t\t\tconst interaction = getInteraction().getInteraction(this.dom);\r\n\t\t\tthis._interaction = interaction;\r\n\t\t\tinteraction.clickable = this.clickable;\r\n\t\t\tinteraction.hoverable = this.hoverable;\r\n\t\t\tinteraction.trackable = this.trackable;\r\n\t\t\tinteraction.draggable = this.draggable;\r\n\t\t\tinteraction.swipeable = this.swipeable;\r\n\t\t\tinteraction.resizable = this.resizable;\r\n\t\t\tinteraction.wheelable = this.wheelable;\r\n\t\t\tinteraction.contextMenuDisabled = this.contextMenuDisabled;\r\n\t\t\tinteraction.inert = this.inert;\r\n\t\t\tinteraction.sprite = this;\r\n\t\t\tthis._disposers.push(interaction);\r\n\t\t}\r\n\t\treturn this._interaction;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns true if interactions object was created. Mostly used just to avoid creating interactions object if not needed.\r\n\t * @return Is Sprite interactive?\r\n\t */\r\n\tpublic isInteractive(): boolean {\r\n\t\tif (this._interaction) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * ELEMENT FOCUS-RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Controls if the element can gain focus.\r\n\t *\r\n\t * Focusable element will be selectable via TAB key.\r\n\t *\r\n\t * Please note, clicking it with a mouse or touching will not add focus to\r\n\t * it.\r\n\t *\r\n\t * Focused element will show a system-specific highlight, which might ruin\r\n\t * the overal look. This is why we don't focus element on click/touch.\r\n\t *\r\n\t * A default setting varies for different elements. By default all elements\r\n\t * are not focusable, except certain items like buttons, legend items, etc.\r\n\t *\r\n\t * @default undefined (auto)\r\n\t * @param value Can element be focused?\r\n\t */\r\n\tpublic set focusable(value: Optional<boolean>) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"focusable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.interactions.focusable = value;\r\n\t\t\t\tif (value) {\r\n\t\t\t\t\tthis.setSVGAttribute({ \"focusable\": value });\r\n\t\t\t\t\tif (!$type.hasValue(this._tabindex)) {\r\n\t\t\t\t\t\tthis.tabindex = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.removeSVGAttribute(\"focusable\");\r\n\t\t\t\t\tthis.tabindex = undefined;\r\n\t\t\t\t}\r\n\t\t\t\t// Set focus events that would apply \"focus\" state\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-focusable\", value, () => new MultiDisposer([\r\n\t\t\t\t\tthis.events.on(\"blur\", this.handleBlur, this, false),\r\n\t\t\t\t\tthis.events.on(\"focus\", this.handleFocus, this, false)\r\n\t\t\t\t]));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Can element be focused?\r\n\t */\r\n\tpublic get focusable(): Optional<boolean> {\r\n\t\treturn this.getPropertyValue(\"focusable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Applies filters (if set) when element gains focus.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Original event\r\n\t */\r\n\tpublic handleFocus(ev?: AMEvent<Sprite, ISpriteEvents>[\"focus\"]): void {\r\n\t\tif (this.focusable) {\r\n\t\t\tif (this.topParent) {\r\n\t\t\t\tthis.topParent.hasFocused = true;\r\n\t\t\t\tthis.topParent.focusedElement = this;\r\n\t\t\t}\r\n\t\t\tif (this.focusFilter) {\r\n\t\t\t\t// Any `filters` manipulation will trigger `applyFilters()` so we don't\r\n\t\t\t\t// need to call it here\r\n\t\t\t\tthis.filters.push(this.focusFilter);\r\n\t\t\t}\r\n\t\t\tif (this.hoverOnFocus) {\r\n\t\t\t\t// Trigger a hover event as well\r\n\t\t\t\tthis.isHover = true;\r\n\t\t\t\tthis.handleOver();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes focus filter (if set) when elementloses focus.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Original event\r\n\t */\r\n\tpublic handleBlur(ev?: AMEvent<Sprite, ISpriteEvents>[\"blur\"]): void {\r\n\t\tif (this.focusable) {\r\n\t\t\tif (this.topParent) {\r\n\t\t\t\tthis.topParent.hasFocused = false;\r\n\t\t\t\tthis.topParent.focusedElement = undefined;\r\n\t\t\t}\r\n\t\t\tif (this.focusFilter) {\r\n\t\t\t\t// Any `filters` manipulation will trigger `applyFilters()` so we don't\r\n\t\t\t\t// need to call it here\r\n\t\t\t\tthis.filters.removeValue(this.focusFilter);\r\n\t\t\t}\r\n\t\t\tif (this.hoverOnFocus) {\r\n\t\t\t\t// Trigger a out event as well\r\n\t\t\t\tthis.isHover = false;\r\n\t\t\t\tthis.handleOut();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A reference to a [[Filter]] to apply to element when it gains focus.\r\n\t *\r\n\t * Normally, browsers will draw a default ugly square around focused element,\r\n\t * which totally makes sense because its purpose is to help identify active\r\n\t * element for visually impaired people.\r\n\t *\r\n\t * However, if you would rather apply a filter, so you can modify how focused\r\n\t * element looks like, use `focusFilter`.\r\n\t *\r\n\t * Simply set it to an anstance of [[FocusFilter]], or any other filter\r\n\t * object.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.focusFilter = new am4core.FocusFilter();\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.focusFilter = new am4core.FocusFilter();\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"focusFilter\": {\r\n\t * \"type\": \"FocusFilter\"\r\n\t * },\r\n\t * // ...\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @see {@link Filter}\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/accessibility/} more about accessibility\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/changing-appearance-of-focused-items/} cusomizing focus appearance\r\n\t * @ignore Exclude from docs\r\n\t * @return Focused element filter\r\n\t */\r\n\tpublic get focusFilter(): $type.Optional<Filter> {\r\n\t\t/*if (!this._focusFilter) {\r\n\t\t\tthis._focusFilter = new FocusFilter();\r\n\t\t\tthis._disposers.push(this._focusFilter);\r\n\t\t}*/\r\n\t\t//return this._focusFilter;\r\n\r\n\t\tconst focusFilter = this._focusFilter;\r\n\r\n\t\tif (focusFilter) {\r\n\t\t\treturn focusFilter;\r\n\t\t}\r\n\t\tif (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.focusFilter;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.focusFilter;\r\n\t\t}\r\n\r\n\t\t//this._focusFilter = new FocusFilter();\r\n\t\t//this._disposers.push(this._focusFilter);\r\n\t}\r\n\r\n\t/**\r\n\t * @see {@link Filter}\r\n\t * @ignore Exclude from docs\r\n\t * @todo This is still experimental, don't use it\r\n\t */\r\n\tpublic set focusFilter(value: $type.Optional<Filter>) {\r\n\t\tthis._focusFilter = value;\r\n\t}\r\n\r\n\t/**\r\n\t * If set to `true`, this element will also trigger `\"over\"` event with all\r\n\t * the related consequences, like \"hover\" state being applied and tooltip\r\n\t * being shown.\r\n\t *\r\n\t * Useful as an accessibility feature to display rollover tooltips on items\r\n\t * selected via keyboard.\r\n\t *\r\n\t * @param value Trigger hover on focus?\r\n\t * @default false\r\n\t */\r\n\tpublic set hoverOnFocus(value: boolean) {\r\n\t\tif (value !== this.hoverOnFocus) {\r\n\t\t\tthis.setPropertyValue(\"hoverOnFocus\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Trigger hover on focus?\r\n\t */\r\n\tpublic get hoverOnFocus(): boolean {\r\n\t\treturn this.getPropertyValue(\"hoverOnFocus\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sets or returns TAB index.\r\n\t *\r\n\t * Tab index maintains the order in which focusable elements gain focus when\r\n\t * TAB key is pressed.\r\n\t *\r\n\t * Please note, tab index is not local to the chart. It affects the whole\r\n\t * of the page, including non-SVG elements. Maintain extreme causion when\r\n\t * setting tab indexes, as it affects the user experience for the whole\r\n\t * web page.\r\n\t *\r\n\t * @param value TAB index\r\n\t */\r\n\tpublic set tabindex(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tif (this.setPropertyValue(\"tabindex\", value) && $type.isNumber(value)) {\r\n\t\t\tthis.interactions.tabindex = value;\r\n\t\t\tthis.setSVGAttribute({ \"tabindex\": value });\r\n\t\t\tthis._tabindex = value;\r\n\t\t\tthis.focusable = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return TAB index\r\n\t */\r\n\tpublic get tabindex(): $type.Optional<number> {\r\n\t\tconst index = this._tabindex;\r\n\r\n\t\tif (index != null) {\r\n\t\t\treturn index;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.tabindex;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.tabindex;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * DRAGGING AND RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns element's options to be used for inertia. This setting is\r\n\t * inheritable, meaning that if not set directly, it will search in all its\r\n\t * ascendants until very top.\r\n\t *\r\n\t * Inertia is used only if element's `inert` is set to `true`.\r\n\t *\r\n\t * \"Inert\" element, when dragged and released, will carry the momentum of the\r\n\t * movement, and will continue moving in the same drag direction, gradually\r\n\t * reducing in speed until finally stops.\r\n\t *\r\n\t * Check [[IInertiaOptions]] for how you tweak inertia animations.\r\n\t *\r\n\t * @return Inertia options\r\n\t */\r\n\tpublic get inertiaOptions(): Dictionary<InertiaTypes, IInertiaOptions> {\r\n\t\tif (!this.interactions.inertiaOptions) {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.inertiaOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.inertiaOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if the element is draggable.\r\n\t *\r\n\t * @param value `true` if element can be dragged\r\n\t */\r\n\tpublic set draggable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"draggable\", value)) {\r\n\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.draggable = value;\r\n\t\t\t\t//interaction.processDraggable(this);\r\n\r\n\t\t\t\t// Add events\r\n\t\t\t\t// @todo Maybe attach to InteractionObject's multidisposer so that\r\n\t\t\t\t// sprites events get disposed together with them?\r\n\t\t\t\t// this.interactions.disposers.getItem(\"movable\")\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-draggable\", value, () => new MultiDisposer([\r\n\t\t\t\t\tthis.events.on(\"down\", this.handleDown, this, false),\r\n\t\t\t\t\tthis.events.on(\"dragstart\", this.handleDragStart, this, false),\r\n\t\t\t\t\tthis.events.on(\"drag\", this.handleDragMove, this, false),\r\n\t\t\t\t\tthis.events.on(\"dragstop\", this.handleDragStop, this, false)\r\n\t\t\t\t]));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `true` if element can be dragged\r\n\t */\r\n\tpublic get draggable(): boolean {\r\n\t\treturn this.getPropertyValue(\"draggable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Executes when dragged element is being started to drag.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected handleDragStart(ev: AMEvent<Sprite, ISpriteEvents>[\"dragstart\"]): void {\r\n\t\tif (!this.interactions.isTouchProtected || !ev.touch) {\r\n\t\t\tthis.interactions.originalPosition = {\r\n\t\t\t\tx: this.pixelX,\r\n\t\t\t\ty: this.pixelY\r\n\t\t\t};\r\n\t\t\tthis._isDragged = true;\r\n\t\t\tthis.hideTooltip(0);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Tell this element to start being dragged. This is useful if you want to\r\n\t * drag items by interactions performed not directly on the target element.\r\n\t *\r\n\t * Parameter `pointer` is highly recommended. By passing in the Pointer you\r\n\t * will ensure that movement is tracked for the pointer that you want. If not\r\n\t * supplied, the system will try to determine the most logical pointer.\r\n\t *\r\n\t * However this may fail if you have more than one pointer active, which\r\n\t * might happen if you have several objects being dragged on a touch device.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param pointer Pointer to use for movement\r\n\t */\r\n\tpublic dragStart(pointer?: IPointer): void {\r\n\t\t//this.dragStop(pointer);\r\n\t\t//this.draggable = true;\r\n\t\tthis._isDragged = true;\r\n\t\tgetInteraction().dragStart(this.interactions, pointer);\r\n\t}\r\n\r\n\t/**\r\n\t * Executes when dragged element is being dropped.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected handleDragStop(ev: AMEvent<Sprite, ISpriteEvents>[\"dragstop\"]): void {\r\n\t\tif (!this.interactions.isTouchProtected || !ev.touch) {\r\n\t\t\tthis._isDragged = false;\r\n\t\t\tthis.showTooltip();\r\n\t\t\tthis.interactions.originalPosition = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Stops manually initiated dragging of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param pointer Pointer to use as a reference\r\n\t */\r\n\tpublic dragStop(pointer?: IPointer, cancelled?: boolean): void {\r\n\t\t//this.draggable = false;\r\n\t\tthis._isDragged = false;\r\n\t\tgetInteraction().dragStop(this.interactions, pointer, cancelled);\r\n\t\t//this.handleDragStop();\r\n\t}\r\n\r\n\t/**\r\n\t * Executes when {Sprite} is being dragged.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event object\r\n\t * @todo Implement parent position offset calculation\r\n\t */\r\n\tpublic handleDragMove(ev: AMEvent<Sprite, ISpriteEvents>[\"drag\"]): void {\r\n\t\tif (!this.interactions.isTouchProtected || !ev.touch) {\r\n\t\t\tlet point: Optional<IPoint> = this.interactions.originalPosition;\r\n\r\n\t\t\tif (point && this._isDragged) {\r\n\t\t\t\tlet globalScale = this._parent.globalScale * this.svgContainer.cssScale;\r\n\t\t\t\tthis.moveTo({ x: point.x + ev.shift.x / globalScale, y: point.y + ev.shift.y / globalScale }, undefined, undefined, true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchImmediately(\"dragged\", ev);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if the element should use inertia when interacted with.\r\n\t *\r\n\t * \"Inert\" element, when dragged and released, will carry the momentum of the\r\n\t * movement, and will continue moving in the same drag direction, gradually\r\n\t * reducing in speed until finally stops.\r\n\t *\r\n\t * @default false\r\n\t * @param value `true` if element should use inertia when animated\r\n\t */\r\n\tpublic set inert(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"inert\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.interactions.inert = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `true` if element should use inertia when animated\r\n\t */\r\n\tpublic get inert(): boolean {\r\n\t\treturn this.getPropertyValue(\"inert\");\r\n\t}\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * HOVERING\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns Sprite's hover options.\r\n\t *\r\n\t * @see {@link IHoverOptions} for available options.\r\n\t * @return Options\r\n\t */\r\n\tpublic get hoverOptions(): IHoverOptions {\r\n\t\tif (!this.interactions.hoverOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.hoverOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.hoverOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.hoverOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if the element is hoverable (hover events are registered).\r\n\t *\r\n\t * Use `over` and `out` events, to watch for those respective actions.\r\n\t *\r\n\t * @default false\r\n\t * @param value `true` if element can be hovered\r\n\t */\r\n\tpublic set hoverable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"hoverable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.hoverable = value;\r\n\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-hoverable\", value, () => new MultiDisposer([\r\n\t\t\t\t\tthis.events.on(\"over\", this.handleOver, this, false),\r\n\t\t\t\t\tthis.events.on(\"out\", this.handleOut, this, false),\r\n\t\t\t\t]));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `true` if element is hoverable\r\n\t */\r\n\tpublic get hoverable(): boolean {\r\n\t\treturn this.getPropertyValue(\"hoverable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles tasks when element becomes hovered:\r\n\t * * Shows [[Tooltip]] if applicable\r\n\t * * Applies \"hover\" state\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event object\r\n\t */\r\n\tpublic handleOver(ev?: AMEvent<Sprite, ISpriteEvents>[\"over\"]): void {\r\n\t\tif (this._outTimeout) {\r\n\t\t\tthis._outTimeout.dispose();\r\n\t\t}\r\n\t\tif (this.isHover) {\r\n\r\n\t\t\tif (this.states.hasKey(\"hover\")) {\r\n\t\t\t\t//this.setState(\"hover\");\r\n\t\t\t\t// This will check `isHover` and will set \"hover\" state\r\n\t\t\t\tif (!this.isHidden) {\r\n\t\t\t\t\tthis.applyCurrentState();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet point: IPoint\r\n\t\t\tif (ev && ev.pointer) {\r\n\t\t\t\tpoint = $utils.documentPointToSvg(ev.pointer.point, this.svgContainer.SVGContainer, this.svgContainer.cssScale)\r\n\t\t\t}\r\n\r\n\t\t\tif (this.showTooltipOn == \"hover\") {\r\n\t\t\t\tthis.showTooltip(point);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.showTooltipOn == \"hover\") {\r\n\t\t\t\tthis.hideTooltip();\r\n\t\t\t}\r\n\t\t\tif (!this.isHidden && this.states.hasKey(\"hover\")) {\r\n\t\t\t\tthis.applyCurrentState();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Handles tasks when element loses hover:\r\n\t *\r\n\t * * Hides [[Tooltip]]\r\n\t * * Applies default state\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev [description]\r\n\t */\r\n\tpublic handleOut(ev?: AMEvent<Sprite, ISpriteEvents>[\"out\"]): void {\r\n\t\tif (this.tooltip && this.tooltip.targetSprite == this && this.tooltip.keepTargetHover) {\r\n\t\t\tthis._outTimeout = this.setTimeout(() => {\r\n\t\t\t\tif (!this.tooltip.isHover) {\r\n\t\t\t\t\tif (this.tooltip.targetSprite == this) {\r\n\t\t\t\t\t\tthis.hideTooltip();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._outTimeout = this.setTimeout(this.handleOutReal.bind(this), this.rollOutDelay);\r\n\t\t\t\t}\r\n\t\t\t}, 10);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (this.showTooltipOn == \"hover\") {\r\n\t\t\tthis.hideTooltip();\r\n\t\t}\r\n\t\tthis._outTimeout = this.setTimeout(this.handleOutReal.bind(this), this.rollOutDelay);\r\n\t}\r\n\r\n\t/**\r\n\t * [handleOutReal description]\r\n\t *\r\n\t * @ignore\r\n\t * @todo description\r\n\t */\r\n\tpublic handleOutReal() {\r\n\t\tif (!this.isHidden && !this.isHiding && this.states.hasKey(\"hover\")) {\r\n\t\t\tthis.applyCurrentState();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * CLICKING/TAPPING AND TOGGLING STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns Sprite's click (hit) options.\r\n\t *\r\n\t * Click (hit) options control things like double-click, timeouts, etc.\r\n\t *\r\n\t * @see {@link IHitOptions} for available options.\r\n\t * @return Options\r\n\t */\r\n\tpublic get hitOptions(): IHitOptions {\r\n\t\tif (!this.interactions.hitOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.hitOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.hitOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.hitOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Prepares element's after `down` event.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event\r\n\t */\r\n\tpublic handleDown(ev?: AMEvent<Sprite, ISpriteEvents>[\"down\"]): void {\r\n\t\tif (this.interactions.downPointers.length === 1) {\r\n\t\t\tthis.interactions.originalPosition = {\r\n\t\t\t\tx: this.pixelX,\r\n\t\t\t\ty: this.pixelY\r\n\t\t\t};\r\n\t\t\tthis.interactions.originalAngle = this.rotation;\r\n\t\t\tthis.interactions.originalScale = this.scale;\r\n\t\t\tif (this.states.hasKey(\"down\")) {\r\n\t\t\t\tthis.setState(\"down\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Prepares element's after `up` event.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event\r\n\t */\r\n\tpublic handleUp(ev?: AMEvent<Sprite, ISpriteEvents>[\"up\"]): void {\r\n\t\t/*if (!this.isDown) {\r\n\t\t\tthis.interactions.originalPosition = null;\r\n\t\t\tthis.interactions.originalAngle = null;\r\n\t\t\tthis.interactions.originalScale = null;\r\n\t\t}*/\r\n\t\tthis._isResized = false;\r\n\t\tif (this.states.hasKey(\"down\")) {\r\n\t\t\tthis.applyCurrentState();\r\n\t\t}\r\n\t\tif (this.showTooltipOn == \"hit\") {\r\n\t\t\tthis.updateTooltipPosition(ev.pointer ? ev.pointer.point : undefined);\r\n\t\t\tthis._disposers.push(registry.events.once(\"exitframe\", () => {\r\n\t\t\t\tthis.showTooltip();\r\n\t\t\t}));\r\n\r\n\t\t\tthis._disposers.push(getInteraction().body.events.once(\"down\", (ev) => {\r\n\t\t\t\tthis.hideTooltip();\r\n\t\t\t}));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if the element is clickable.\r\n\t *\r\n\t * Some type of the elements, like buttons are clickable by default.\r\n\t *\r\n\t * Most of the elements are not clickable by default.\r\n\t *\r\n\t * Use `hit`, `doublehit`, `up`, `down`, `toggled` events to watch for\r\n\t * respective click/touch actions.\r\n\t *\r\n\t * @param value `true` if element can be clicked\r\n\t */\r\n\tpublic set clickable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"clickable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.clickable = value;\r\n\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-clickable\", value, () => new MultiDisposer([\r\n\t\t\t\t\tthis.events.on(\"down\", this.handleDown, this, false),\r\n\t\t\t\t\tthis.events.on(\"up\", this.handleUp, this, false)\r\n\t\t\t\t]));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return {boolean}\r\n\t */\r\n\tpublic get clickable(): boolean {\r\n\t\treturn this.getPropertyValue(\"clickable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if element can be toggled on and off by subsequent clicks/taps.\r\n\t *\r\n\t * Togglable element will alternate its `isActive` property between `true`\r\n\t * and `false` with each click.\r\n\t *\r\n\t * @param value Is togglable?\r\n\t */\r\n\tpublic set togglable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"togglable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-togglable\", value, () => this.events.on(\"hit\", this.handleToggle, this, false));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is togglable?\r\n\t */\r\n\tpublic get togglable(): boolean {\r\n\t\treturn this.getPropertyValue(\"togglable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles toggling of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event\r\n\t */\r\n\tpublic handleToggle(ev: AMEvent<Sprite, ISpriteEvents>[\"hit\"]) {\r\n\t\tthis.isActive = !this.isActive;\r\n\t}\r\n\r\n\t/**\r\n\t * Should element prevent context menu to be displayed, e.g. when\r\n\t * right-clicked?\r\n\t *\r\n\t * @default false\r\n\t * @param value Context menu disabled?\r\n\t */\r\n\tpublic set contextMenuDisabled(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"contextMenuDisabled\", value)) {\r\n\t\t\tthis.interactions.contextMenuDisabled = value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Context menu disabled?\r\n\t */\r\n\tpublic get contextMenuDisabled(): boolean {\r\n\t\treturn this.getPropertyValue(\"contextMenuDisabled\");\r\n\t}\r\n\r\n\t/**\r\n\t * Click-through URL for this element.\r\n\t *\r\n\t * If set, clicking/tapping this element will open the new URL in a target\r\n\t * window/tab as set by `urlTarget`.\r\n\t *\r\n\t * Please note that URL will be parsed by data placeholders in curly\r\n\t * brackets, to be populated from data. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.columns.template.url = \"https://www.google.com/search?q={category.urlEncode()}\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.columns.template.url = \"https://www.google.com/search?q={category.urlEncode()}\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * // ...\r\n\t * \"columns\": {\r\n\t * \"url\": \"https://www.google.com/search?q={category.urlEncode()}\"\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param value URL\r\n\t */\r\n\tpublic set url(value: $type.Optional<string>) {\r\n\t\tif (this.setPropertyValue(\"url\", value)) {\r\n\t\t\tif (this._urlDisposer) {\r\n\t\t\t\tthis._urlDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\t// If URL is not empty, set up events\r\n\t\t\tif ($utils.isNotEmpty(value)) {\r\n\t\t\t\tthis._urlDisposer = this.events.on(\"hit\", this.urlHandler, this, false);\r\n\r\n\t\t\t\t// Set other required parameters\r\n\t\t\t\tthis.clickable = true;\r\n\t\t\t\tthis.cursorOverStyle = MouseCursorStyle.pointer;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return URL\r\n\t */\r\n\tpublic get url(): $type.Optional<string> {\r\n\t\treturn this.getPropertyValue(\"url\");\r\n\t}\r\n\r\n\t/**\r\n\t * [baseId description]\r\n\t *\r\n\t * @ignore\r\n\t * @param value [description]\r\n\t */\r\n\tpublic set baseId(value: string) {\r\n\t\tthis.setBaseId(value);\r\n\t}\r\n\r\n\t/**\r\n\t * [baseId description]\r\n\t *\r\n\t * @ignore\r\n\t * @return [description]\r\n\t */\r\n\tpublic get baseId(): string {\r\n\t\tif (!this._baseId && this._parent) {\r\n\t\t\tthis.baseId = this._parent.baseId;\r\n\t\t}\r\n\r\n\t\treturn this._baseId;\r\n\t}\r\n\r\n\tprotected setBaseId(value: string) {\r\n\t\tif (value != this._baseId) {\r\n\t\t\tif (this.invalid) {\r\n\t\t\t\tthis.invalid = false;\r\n\t\t\t\tregistry.removeFromInvalidSprites(this);\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\r\n\t\t\tthis._baseId = value;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the mail chart object that this element belongs to.\r\n\t *\r\n\t * In most cases it will mean the chart object.\r\n\t *\r\n\t * Can be used to retrieve chart object in various events and adapters.\r\n\t *\r\n\t * ```TypeScript\r\n\t * chart.seriesContainer.events.on(\"hit\", function(ev) {\r\n\t * console.log(ev.target.baseSprite);\r\n\t * });\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * chart.seriesContainer.events.on(\"hit\", function(ev) {\r\n\t * console.log(ev.target.baseSprite);\r\n\t * });\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"seriesContainer\": {\r\n\t * \"events\": {\r\n\t * \"hit\": function(ev) {\r\n\t * console.log(ev.target.baseSprite);\r\n\t * }\r\n\t * }\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @readonly\r\n\t * @return Base chart object\r\n\t */\r\n\tpublic get baseSprite(): $type.Optional<Sprite> {\r\n\t\tif (this.isBaseSprite) {\r\n\t\t\treturn this;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.baseSprite;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Target to use for URL clicks:\r\n\t *\r\n\t * * _blank\r\n\t * * _self (default)\r\n\t * * _parent\r\n\t * * _top\r\n\t * * Name of the window/frame\r\n\t *\r\n\t * Ignored if `url` is not set.\r\n\t *\r\n\t * @param value URL target\r\n\t */\r\n\tpublic set urlTarget(value: string) {\r\n\t\tthis.setPropertyValue(\"urlTarget\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return URL target\r\n\t */\r\n\tpublic get urlTarget(): string {\r\n\t\treturn this.getPropertyValue(\"urlTarget\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles URL transition on element click.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev An event object\r\n\t */\r\n\tpublic urlHandler(ev: AMEvent<Sprite, ISpriteEvents>[\"hit\"]): void {\r\n\t\t// Is URL set?\r\n\t\tif ($utils.isNotEmpty(this.url)) {\r\n\t\t\t// Proceed to the URL\r\n\t\t\tlet url = this.populateString(this.url);\r\n\t\t\tif (this.urlTarget === \"_self\") {\r\n\t\t\t\twindow.location.href = url;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\twindow.open(url, this.urlTarget);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * SWIPING GESTURE TRACKING\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns element's swipe gesture options.\r\n\t *\r\n\t * @return Swipe gesture options\r\n\t */\r\n\tpublic get swipeOptions(): ISwipeOptions {\r\n\t\tif (!this.interactions.swipeOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.swipeOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.swipeOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.swipeOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if element is swipeable.\r\n\t *\r\n\t * Swipable element will invoke `swipe`, `swipeleft` and `swiperight` events,\r\n\t * when quick horizontal drag action is performed with either mouse or touch.\r\n\t *\r\n\t * Please note that combining swipe and drag is possible, however will incur\r\n\t * a slight but noticeable delay in drag start.\r\n\t *\r\n\t * @param value Element swipable?\r\n\t */\r\n\tpublic set swipeable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"swipeable\", value)) {\r\n\t\t\tthis.applyCursorStyle();\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.interactions.swipeable = value;\r\n\t\t\t}\r\n\t\t\t//interaction.processSwipeable(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Element swipable?\r\n\t */\r\n\tpublic get swipeable(): boolean {\r\n\t\treturn this.getPropertyValue(\"swipeable\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * POINTER TRACKING\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Indicates if the element is trackable (mouse position over it is reported to\r\n\t * event listeners).\r\n\t *\r\n\t * Will invoke `track` events whenever pointer (cursor) changes position\r\n\t * while over element.\r\n\t *\r\n\t * Please note, touch devices will also invoke `track` events when touch\r\n\t * point is moved while holding down on a trackable element.\r\n\t *\r\n\t * @param value Track cursor movement over element?\r\n\t */\r\n\tpublic set trackable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"trackable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.trackable = value;\r\n\t\t\t}\r\n\t\t\t//interaction.processTrackable(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Track cursor movement over element?\r\n\t */\r\n\tpublic get trackable(): boolean {\r\n\t\treturn this.getPropertyValue(\"trackable\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * MOUSE-WHEEL RELATED\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Indicates if the element can be interacted with mouse wheel.\r\n\t *\r\n\t * Will invoke `wheel`, `wheelup`, `wheeldown`, `wheelleft`, and `wheelright`\r\n\t * events when using mouse wheel over the element.\r\n\t *\r\n\t * @param value Mouse wheel events enabled?\r\n\t */\r\n\tpublic set wheelable(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"wheelable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.wheelable = value;\r\n\t\t\t}\r\n\t\t\t//interaction.processWheelable(this);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Mouse wheel events enabled?\r\n\t */\r\n\tpublic get wheelable(): boolean {\r\n\t\treturn this.getPropertyValue(\"wheelable\");\r\n\t}\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * RESIZE\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Indicates if this element is resizable.\r\n\t *\r\n\t * Enabling resize will turn on various interactions on the element. Their\r\n\t * actual functionality will depend on other properties.\r\n\t *\r\n\t * If the element also `draggable`, resize will only happen with two points\r\n\t * of contact on a touch device.\r\n\t *\r\n\t * If the element is not draggable, resize can be performed with just one\r\n\t * point of contact, touch or mouse.\r\n\t *\r\n\t * Will invoke `resize` event every time the size of the element changes.\r\n\t *\r\n\t * @param value Element resizable?\r\n\t */\r\n\tpublic set resizable(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"resizable\", value)) {\r\n\t\t\tif (!value && !this.isInteractive()) {\r\n\t\t\t\t// void\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.applyCursorStyle();\r\n\t\t\t\tthis.interactions.resizable = value;\r\n\t\t\t\t// setEventDisposer will also remove listeners if value == false\r\n\t\t\t\tthis.interactions.setEventDisposer(\"sprite-resizable\", value, () => new MultiDisposer([\r\n\t\t\t\t\tthis.events.on(\"down\", this.handleDown, this, false),\r\n\t\t\t\t\tthis.events.on(\"resize\", this.handleResize, this, false)\r\n\t\t\t\t]));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Element resizable?\r\n\t */\r\n\tpublic get resizable(): boolean {\r\n\t\treturn this.getPropertyValue(\"resizable\");\r\n\t}\r\n\r\n\t/**\r\n\t * Handles resize intermediate step.\r\n\t *\r\n\t * By default this method resizes actual element. Each element, can override\r\n\t * this method to implement their own resize logic.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param ev Event object\r\n\t */\r\n\tpublic handleResize(ev: AMEvent<Sprite, ISpriteEvents>[\"resize\"]): void {\r\n\t\tif (!this.interactions.isTouchProtected || !ev.touch) {\r\n\t\t\tthis._isResized = true;\r\n\r\n\t\t\tthis.scale = this.interactions.originalScale * ev.scale;\r\n\r\n\t\t\tthis.validatePosition();\r\n\t\t\t/*center: (io.draggable\r\n\t\t\t? $math.getMidPoint(point1, point2)\r\n\t\t\t: {\r\n\t\t\t\t\"x\": io.originalPosition.x,\r\n\t\t\t\t\"y\": io.originalPosition.y\r\n\t\t\t})*/\r\n\t\t\t//this.moveTo(this.originalPosition.x + ev.shift.x, this.originalPosition.y + ev.shift.y);\r\n\t\t\tif (this.draggable || this.dragWhileResize) {\r\n\t\t\t\tthis._isDragged = false;\r\n\t\t\t\tlet svgPoint1: IPoint = $utils.documentPointToSvg(ev.point1, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\t\t\tlet svgPoint2: IPoint = $utils.documentPointToSvg(ev.point2, this.htmlContainer, this.svgContainer.cssScale);\r\n\t\t\t\tlet svgMidPoint: IPoint = $math.getMidPoint(svgPoint1, svgPoint2);\r\n\r\n\t\t\t\tlet parentPoint1: IPoint = $utils.documentPointToSprite(ev.startPoint1, this._parent);\r\n\t\t\t\tlet parentPoint2: IPoint = $utils.documentPointToSprite(ev.startPoint2, this._parent);\r\n\r\n\t\t\t\tlet originalPosition: Optional<IPoint> = this.interactions.originalPosition;\r\n\t\t\t\tlet originalScale: number = this.interactions.originalScale;\r\n\r\n\t\t\t\tif (originalPosition) {\r\n\t\t\t\t\tlet spritePoint1: IPoint = { x: (parentPoint1.x - originalPosition.x) / originalScale, y: (parentPoint1.y - originalPosition.y) / originalScale };\r\n\t\t\t\t\tlet spritePoint2: IPoint = { x: (parentPoint2.x - originalPosition.x) / originalScale, y: (parentPoint2.y - originalPosition.y) / originalScale };\r\n\r\n\t\t\t\t\tlet spriteMidPoint: IPoint = $math.getMidPoint(spritePoint1, spritePoint2);\r\n\r\n\t\t\t\t\tlet parentPoint: IPoint = $utils.svgPointToSprite(svgMidPoint, this._parent);\r\n\t\t\t\t\tthis.moveTo({ x: parentPoint.x - spriteMidPoint.x * this.scale, y: parentPoint.y - spriteMidPoint.y * this.scale }, undefined, undefined, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * MOUSE-RELATED\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Returns element's cursor options.\r\n\t *\r\n\t * Cursor options usually define cursor style for various states of the\r\n\t * hovered element.\r\n\t *\r\n\t * Elements inherit `cursorOptions` from their parents if they don't have\r\n\t * them set explicitly.\r\n\t *\r\n\t * @see {@link ICursorOptions} for a list of available options\r\n\t * @return Cursor options\r\n\t */\r\n\tpublic get cursorOptions(): ICursorOptions {\r\n\t\tif (!this.interactions.cursorOptions) {\r\n\t\t\tif (this.virtualParent) {\r\n\t\t\t\treturn this.virtualParent.cursorOptions;\r\n\t\t\t}\r\n\t\t\tif (this._parent) {\r\n\t\t\t\treturn this._parent.cursorOptions;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.interactions.cursorOptions;\r\n\t}\r\n\r\n\t/**\r\n\t * A shortcut to setting mouse cursor on hover.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.slices.template.cursorOverStyle = am4core.MouseCursorStyle.pointer;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.slices.template.cursorOverStyle = am4core.MouseCursorStyle.pointer;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": {\r\n\t * // ...\r\n\t * \"slices\": {\r\n\t * \"cursorOverStyle\": \"pointer\"\r\n\t * }\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param style An array of styles to apply onhover\r\n\t */\r\n\tpublic set cursorOverStyle(style: Array<IStyleProperty>) {\r\n\t\tif (!this.cursorOptions.overStyle) {\r\n\t\t\tthis.interactions.cursorOptions = {\r\n\t\t\t\tdefaultStyle: this.cursorOptions.defaultStyle\r\n\t\t\t};\r\n\t\t}\r\n\t\tthis.cursorOptions.overStyle = style;\r\n\t\tgetInteraction().applyCursorOverStyle(this.interactions);\r\n\t}\r\n\r\n\t/**\r\n\t * A shortcut to setting mouse cursor when button is pressed down.\r\n\t *\r\n\t * Example:\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.slices.template.cursorDownStyle = am4core.MouseCursorStyle.grabbing;\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.slices.template.cursorDownStyle = am4core.MouseCursorStyle.grabbing;\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": {\r\n\t * // ...\r\n\t * \"slices\": {\r\n\t * \"cursorDownStyle\": \"grabbing\"\r\n\t * }\r\n\t * }\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @param style An array of styles to apply onhover\r\n\t */\r\n\tpublic set cursorDownStyle(style: Array<IStyleProperty>) {\r\n\t\tthis.cursorOptions.downStyle = style;\r\n\t}\r\n\r\n\t/**\r\n\t * Applies default cursor styles for interactable elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Determine if this is necessary. Maybe let's not apply any cursor styles by default\r\n\t */\r\n\tpublic applyCursorStyle(): void {\r\n\r\n\t\t// Draggable styles\r\n\t\t/*if (this.draggable) {\r\n\r\n\t\t\tif (!$type.hasValue(this.cursorOptions.overStyle)) {\r\n\t\t\t\tthis.cursorOptions.overStyle = MouseCursorStyle.grab;\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.hasValue(this.cursorOptions.downStyle)) {\r\n\t\t\t\tthis.cursorOptions.downStyle = MouseCursorStyle.grabbing;\r\n\t\t\t}\r\n\t\t}*/\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Setting this to `false` will effectively disable all interactivity on the\r\n\t * element.\r\n\t *\r\n\t * @param value Is interaction enabled for this element?\r\n\t */\r\n\tpublic set interactionsEnabled(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\r\n\t\tif (this.setPropertyValue(\"interactionsEnabled\", value)) {\r\n\t\t\tlet pointerEvents = null; // must be null, not \"null\"!\r\n\t\t\tif (!value) {\r\n\t\t\t\tpointerEvents = \"none\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// this is for IE\r\n\t\t\t\tthis.group.node.style.pointerEvents = \"\";\r\n\t\t\t}\r\n\t\t\tthis.group.node.style.pointerEvents = pointerEvents;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is interaction enabled for this element?\r\n\t */\r\n\tpublic get interactionsEnabled(): boolean {\r\n\t\tlet value = this.getPropertyValue(\"interactionsEnabled\");\r\n\t\tif (value === false) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tif (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.interactionsEnabled;\r\n\t\t}\r\n\t\tif (this._parent) {\r\n\t\t\treturn this._parent.interactionsEnabled;\r\n\t\t}\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * EXPORT-RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * An [[Export]] instance.\r\n\t *\r\n\t * Used to access API of the chart export functionality.\r\n\t *\r\n\t * If `exporting` is not set, the element inherits [[Export]] instance from\r\n\t * its parents.\r\n\t *\r\n\t * Upon request, if no parent has such instance, a new one is created, using\r\n\t * default settings, what in most cases is just enough.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/exporting/} for more info about exporting\r\n\t * @param exp Export\r\n\t */\r\n\tpublic set exporting(exp: Export) {\r\n\t\tthis._exporting.set(exp, exp);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Export instance\r\n\t */\r\n\tpublic get exporting(): Export {\r\n\t\treturn this.getExporting();\r\n\t}\r\n\r\n\t/**\r\n\t * This is here as a method so that inheriting classes could override it.\r\n\t *\r\n\t * @return Export instance\r\n\t */\r\n\tprotected getExporting(): Export {\r\n\t\tlet _export = this._exporting.get();\r\n\r\n\t\tif (_export) {\r\n\t\t\treturn _export;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this.isStandaloneInstance || !this._parent) {\r\n\t\t\t\t_export = new Export(this.svgContainer.SVGContainer);\r\n\t\t\t\t_export.sprite = this;\r\n\t\t\t\t_export.language = this.language;\r\n\t\t\t\t_export.numberFormatter = this.numberFormatter;\r\n\t\t\t\t_export.dateFormatter = this.dateFormatter;\r\n\t\t\t\t_export.durationFormatter = this.durationFormatter;\r\n\t\t\t\tthis._exporting.set(_export, _export);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this._parent.exporting;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn _export;\r\n\t}\r\n\r\n\t/**\r\n\t * If set to `false` this element will be omitted when exporting the chart\r\n\t * to an image.\r\n\t *\r\n\t * @default true\r\n\t * @param value Export?\r\n\t */\r\n\tpublic set exportable(value: boolean) {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tthis._exportable = value;\r\n\t\tif (svgContainer) {\r\n\t\t\tif (value) {\r\n\t\t\t\t$array.remove(svgContainer.nonExportableSprites, this);\r\n\t\t\t}\r\n\t\t\telse if ($array.indexOf(svgContainer.nonExportableSprites, this) == -1) {\r\n\t\t\t\tsvgContainer.nonExportableSprites.push(this);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Export?\r\n\t */\r\n\tpublic get exportable(): boolean {\r\n\t\treturn this._exportable;\r\n\t\t/*const svgContainer = this.svgContainer;\r\n\t\treturn !svgContainer || $array.indexOf(svgContainer.nonExportableSprites, this) == -1;*/\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * MODAL/POPUP RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Private method to be used for \"classPrefix\" adapter for modals/popups.\r\n\t *\r\n\t * @param value Prefix\r\n\t */\r\n\tprivate modalPrefix(value: string) {\r\n\t\tvalue = options.classNamePrefix + value;\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a [[Modal]] instance, associated with this chart.\r\n\t * (elements top parent)\r\n\t *\r\n\t * Accessing modal does not make it appear. To make a modal appear, use\r\n\t * `showModal()` method.\r\n\t *\r\n\t * @see {@link Modal} for more information about using Modal windows\r\n\t * @return Modal instance\r\n\t */\r\n\tpublic get modal(): Optional<Modal> {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\tconst modal = svgContainer.modal;\r\n\t\t\tif (!modal.adapter.has(\"classPrefix\", this.modalPrefix)) {\r\n\t\t\t\tmodal.adapter.add(\"classPrefix\", this.modalPrefix);\r\n\t\t\t}\r\n\t\t\treturn modal;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Opens a modal window with specific content (`text` parameter) and,\r\n\t * optionally, `title`.\r\n\t *\r\n\t * The `text` parameter can contain HTML content.\r\n\t *\r\n\t * @see {@link Modal} for more information about using Modal windows\r\n\t * @param text Modal contents\r\n\t * @param title Title for the modal window\r\n\t */\r\n\tpublic openModal(text: string, title?: string): Optional<Modal> {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\treturn svgContainer.openModal(text, title);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides modal window if there is one currently open.\r\n\t */\r\n\tpublic closeModal(): void {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\tsvgContainer.closeModal();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A list of popups for this chart.\r\n\t *\r\n\t * @return Popups\r\n\t */\r\n\tpublic get popups(): Optional<ListTemplate<Popup>> {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\tconst popups = svgContainer.popups;\r\n\t\t\tpopups.template.sprite = this;\r\n\r\n\t\t\tif (!popups.template.adapter.has(\"classPrefix\", this.modalPrefix)) {\r\n\t\t\t\tpopups.template.adapter.add(\"classPrefix\", this.modalPrefix);\r\n\t\t\t}\r\n\t\t\treturn popups;\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Creates, opens, and returns a new [[Popup]] window.\r\n\t *\r\n\t * `text` can be any valid HTML.\r\n\t *\r\n\t * `title` is currently not supported.\r\n\t *\r\n\t * @param text Popup contents\r\n\t * @param title Popup title\r\n\t * @return Popup instance\r\n\t */\r\n\tpublic openPopup(text: string, title?: string): Optional<Popup> {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\treturn svgContainer.openPopup(text, title);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Closes all currently open popup windows\r\n\t */\r\n\tpublic closeAllPopups(): void {\r\n\t\tconst svgContainer = this.svgContainer;\r\n\t\tif (svgContainer) {\r\n\t\t\tsvgContainer.closeAllPopups();\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * POSITIONAL PROPERTIES AND RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Element's absolute or relative X coordinate.\r\n\t *\r\n\t * If setting both X and Y, please consider using `moveTo()` method instead,\r\n\t * as it will be faster to set both coordinates at once.\r\n\t *\r\n\t * @param value X coordinate\r\n\t */\r\n\tpublic set x(value: number | Percent) {\r\n\t\tif (!this.isDragged) {\r\n\t\t\tthis.setPercentProperty(\"x\", value, false, true, this._positionPrecision, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return X coordinate\r\n\t */\r\n\tpublic get x(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"x\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's current absolute X coordinate in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return X coordinate (px)\r\n\t */\r\n\tpublic get pixelX(): number {\r\n\t\tlet value = $math.fitToRange(this.getPixelX(this.x), this.minX, this.maxX);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelX\", value);\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's current relative X coordinate in [[Percent]].\r\n\t *\r\n\t * @return X coordinate ([[Percent]])\r\n\t */\r\n\tpublic get relativeX(): number {\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn this.getRelativeX(this.x)\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeX\", this.getRelativeX(this.x));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The smallest allowable absolute X coordinate for this element.\r\n\t *\r\n\t * This is used to contain element movement within certain boundaries.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Min X (px)\r\n\t */\r\n\tpublic set minX(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"minX\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Min X (px)\r\n\t */\r\n\tpublic get minX(): number {\r\n\t\treturn this.getPropertyValue(\"minX\");\r\n\t}\r\n\r\n\t/**\r\n\t * The biggest allowable absolute X coordinate for this element.\r\n\t *\r\n\t * This is used to contain element movement within certain boundaries.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Max X (px)\r\n\t */\r\n\tpublic set maxX(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"maxX\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Max X (px)\r\n\t */\r\n\tpublic get maxX(): number {\r\n\t\treturn this.getPropertyValue(\"maxX\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's absolute or relative Y coordinate.\r\n\t *\r\n\t * If setting both X and Y, please consider using `moveTo()` method instead,\r\n\t * as it will be faster to set both coordinates at once.\r\n\t *\r\n\t * @param value Y coordinate\r\n\t */\r\n\tpublic set y(value: number | Percent) {\r\n\t\tif (!this.isDragged) {\r\n\t\t\tthis.setPercentProperty(\"y\", value, false, true, this._positionPrecision, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Y coordinate\r\n\t */\r\n\tpublic get y(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"y\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's current absolute Y coordinate in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Y coordinate (px)\r\n\t */\r\n\tpublic get pixelY(): number {\r\n\t\tlet value = $math.fitToRange(this.getPixelY(this.y), this.minY, this.maxY);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelY\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's current relative Y coordinate in [[Percent]].\r\n\t *\r\n\t * @readonly\r\n\t * @return Y coordinate ([[Percent]])\r\n\t */\r\n\tpublic get relativeY(): number {\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn this.getRelativeX(this.y);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeY\", this.getRelativeX(this.y));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * The smallest allowable absolute Y coordinate for this element.\r\n\t *\r\n\t * This is used to contain element movement within certain boundaries.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Min Y (px)\r\n\t */\r\n\tpublic set minY(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"minY\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Min Y (px)\r\n\t */\r\n\tpublic get minY(): number {\r\n\t\treturn this.getPropertyValue(\"minY\");\r\n\t}\r\n\r\n\t/**\r\n\t * The biggest allowable absolute Y coordinate for this element.\r\n\t *\r\n\t * This is used to contain element movement within certain boundaries.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Max Y (px)\r\n\t */\r\n\tpublic set maxY(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"maxY\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Max Y (px)\r\n\t */\r\n\tpublic get maxY(): number {\r\n\t\treturn this.getPropertyValue(\"maxY\");\r\n\t}\r\n\r\n\t/**\r\n\t * A horizontal offset for the element in pixels.\r\n\t *\r\n\t * Can be negative value for offset to the left.\r\n\t *\r\n\t * @param value Horizontal offset (px)\r\n\t */\r\n\tpublic set dx(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"dx\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Horizontal offset (px)\r\n\t */\r\n\tpublic get dx(): number {\r\n\t\treturn this.getPropertyValue(\"dx\");\r\n\t}\r\n\r\n\t/**\r\n\t * A vertical offset for the element in pixels.\r\n\t *\r\n\t * Can be negative value for offset upwards.\r\n\t *\r\n\t * @param value Vertical offset (px)\r\n\t */\r\n\tpublic set dy(value: number) {\r\n\t\tif ($type.isNumber(value)) {\r\n\t\t\tvalue = $math.round(value, this._positionPrecision, true);\r\n\t\t\tthis.setPropertyValue(\"dy\", value, false, true);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Vertical offset (px)\r\n\t */\r\n\tpublic get dy(): number {\r\n\t\treturn this.getPropertyValue(\"dy\");\r\n\t}\r\n\r\n\t/**\r\n\t * Rotation of the element in degrees. (0-360)\r\n\t *\r\n\t * Note: For convenience purposes, negative values (for counter-clockwise\r\n\t * rotation) and values exceeding 360 can also be used.\r\n\t *\r\n\t * @param value Rotation (0-360)\r\n\t */\r\n\tpublic set rotation(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t}\r\n\t\tthis.setPropertyValue(\"rotation\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Rotation (0-360)\r\n\t */\r\n\tpublic get rotation(): number {\r\n\t\treturn this.getPropertyValue(\"rotation\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls horizontal alignment of the element.\r\n\t *\r\n\t * This is used by parent [[Container]] when layouting its children.\r\n\t *\r\n\t * @param value Horizontal align\r\n\t */\r\n\tpublic set align(value: Align) {\r\n\t\tvalue = <Align>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"align\", value)) {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tthis._parent.invalidateLayout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Horizontal align\r\n\t */\r\n\tpublic get align(): Align {\r\n\t\treturn this.getPropertyValue(\"align\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls vertical alignment of the element.\r\n\t *\r\n\t * This is used by parent [[Container]] when layouting its children.\r\n\t *\r\n\t * @param value Vertical align\r\n\t */\r\n\tpublic set valign(value: VerticalAlign) {\r\n\t\tvalue = <VerticalAlign>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"valign\", value)) {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tthis._parent.invalidateLayout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Vertical align\r\n\t */\r\n\tpublic get valign(): VerticalAlign {\r\n\t\treturn this.getPropertyValue(\"valign\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls which part of the element to treat as a horizontal center.\r\n\t *\r\n\t * The setting will be used when positioning, resizing and rotating the\r\n\t * element.\r\n\t *\r\n\t * @param value Horizontal center\r\n\t */\r\n\tpublic set horizontalCenter(value: HorizontalCenter) {\r\n\t\tvalue = <HorizontalCenter>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"horizontalCenter\", value)) {\r\n\t\t\tthis.updateCenter();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Horizontal center\r\n\t */\r\n\tpublic get horizontalCenter(): HorizontalCenter {\r\n\t\treturn this.getPropertyValue(\"horizontalCenter\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls which part of the element to treat as a vertical center.\r\n\t *\r\n\t * The setting will be used when positioning, resizing and rotating the\r\n\t * element.\r\n\t *\r\n\t * @param value Vertical center\r\n\t */\r\n\tpublic set verticalCenter(value: VerticalCenter) {\r\n\t\tvalue = <VerticalCenter>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"verticalCenter\", value)) {\r\n\t\t\tthis.updateCenter();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Vertical center\r\n\t */\r\n\tpublic get verticalCenter(): VerticalCenter {\r\n\t\treturn this.getPropertyValue(\"verticalCenter\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * DIMENSIONAL PROPERTIES AND RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Maximum allowed width for the element in pixels.\r\n\t *\r\n\t * @param value Maximum width (px)\r\n\t */\r\n\tpublic set maxWidth(value: number) {\r\n\t\tthis.setMaxWidth(value);\r\n\t}\r\n\r\n\tprotected setMaxWidth(value: number) {\r\n\t\tlet prevWidth = this.maxWidth;\r\n\t\tlet prevHeight = this.maxHeight;\r\n\t\tif (this.setPropertyValue(\"maxWidth\", value)) {\r\n\t\t\tif ($type.isNumber(this.relativeWidth)) {\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\r\n\r\n\t\t\tconst event: AMEvent<this, ISpriteEvents>[\"maxsizechanged\"] = {\r\n\t\t\t\ttype: \"maxsizechanged\",\r\n\t\t\t\ttarget: this,\r\n\t\t\t\tpreviousWidth: prevWidth,\r\n\t\t\t\tpreviousHeight: prevHeight\r\n\t\t\t};\r\n\r\n\t\t\tthis.dispatchImmediately(\"maxsizechanged\", event);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum width (px)\r\n\t */\r\n\tpublic get maxWidth(): number {\r\n\t\tlet maxWidth = this.getPropertyValue(\"maxWidth\");\r\n\r\n\t\tif (!$type.isNumber(maxWidth)) {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tlet parentWidth = this._parent.maxWidth;\r\n\t\t\t\tif (this._parent.layout != \"absolute\" && this.align != \"none\" && this.align != undefined) {\r\n\t\t\t\t\tparentWidth = parentWidth - this.pixelMarginLeft - this.pixelMarginRight;\r\n\t\t\t\t}\r\n\t\t\t\treturn parentWidth;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn maxWidth;\r\n\t}\r\n\r\n\t/**\r\n\t * Maximum allowed height for the element in pixels.\r\n\t *\r\n\t * @param value Maximum height (px)\r\n\t */\r\n\tpublic set maxHeight(value: number) {\r\n\t\tthis.setMaxHeight(value);\r\n\t}\r\n\r\n\tprotected setMaxHeight(value: number) {\r\n\r\n\t\tlet prevWidth = this.maxWidth;\r\n\t\tlet prevHeight = this.maxHeight;\r\n\r\n\t\tif (this.setPropertyValue(\"maxHeight\", value)) {\r\n\r\n\t\t\tif ($type.isNumber(this.relativeHeight)) {\r\n\t\t\t\tthis.invalidate();\r\n\t\t\t}\r\n\r\n\t\t\tconst event: AMEvent<this, ISpriteEvents>[\"maxsizechanged\"] = {\r\n\t\t\t\ttype: \"maxsizechanged\",\r\n\t\t\t\ttarget: this,\r\n\t\t\t\tpreviousWidth: prevWidth,\r\n\t\t\t\tpreviousHeight: prevHeight\r\n\t\t\t};\r\n\r\n\t\t\tthis.dispatchImmediately(\"maxsizechanged\", event);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Maximum height (px)\r\n\t */\r\n\tpublic get maxHeight(): number {\r\n\t\tlet maxHeight = this.getPropertyValue(\"maxHeight\");\r\n\t\tif (!$type.isNumber(maxHeight)) {\r\n\t\t\tif (this._parent) {\r\n\t\t\t\tlet parentHeight = this._parent.maxHeight;\r\n\t\t\t\tif (this._parent.layout != \"absolute\" && this.valign != \"none\" && this.valign != undefined) {\r\n\t\t\t\t\tparentHeight = parentHeight - this.pixelMarginTop - this.pixelMarginBottom;\r\n\t\t\t\t}\r\n\t\t\t\treturn parentHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn maxHeight;\r\n\t}\r\n\r\n\t/**\r\n\t * Minimum width of the element in pixels.\r\n\t *\r\n\t * Set to `undefined` to remove the limit.\r\n\t *\r\n\t * @param value Minimum width (px)\r\n\t */\r\n\tpublic set minWidth(value: Optional<number>) {\r\n\t\tthis.setPropertyValue(\"minWidth\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Minimum width (px)\r\n\t */\r\n\tpublic get minWidth(): Optional<number> {\r\n\t\treturn this.getPropertyValue(\"minWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * Minimum height for the element in pixels.\r\n\t *\r\n\t * Set to `undefined` to remove the limit.\r\n\t *\r\n\t * @param value Minimum height (px)\r\n\t */\r\n\tpublic set minHeight(value: Optional<number>) {\r\n\t\tthis.setPropertyValue(\"minHeight\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Minimum height (px)\r\n\t */\r\n\tpublic get minHeight(): Optional<number> {\r\n\t\treturn this.getPropertyValue(\"minHeight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's absolute or relative width.\r\n\t *\r\n\t * The width can either be absolute, set in numeric pixels, or relative, set\r\n\t * in [[Percent]].\r\n\t *\r\n\t * Relative width will be calculated using closest measured ancestor\r\n\t * [[Container]].\r\n\t *\r\n\t * NOTE: `width` is an accessor, which allows setting width in pixels or\r\n\t * percent. It is a sort of a \"shortcut\" for the users. Actual renderer does\r\n\t * not ever use it. It uses either `pixelWidth` or `percentWidth`, so if\r\n\t * you need to add an adapter for width add it for either of the two\r\n\t * properties - whichever suits your requirements.\r\n\t *\r\n\t * @param value Width (numeric in pixels or relative)\r\n\t */\r\n\tpublic set width(value: number | Percent) {\r\n\r\n\t\tlet changed: boolean = this.setPercentProperty(\"width\", value, true, false, this._positionPrecision, true);\r\n\r\n\t\tif (changed) {\r\n\t\t\tthis.percentWidth = undefined;\r\n\t\t\tthis.relativeWidth = undefined;\r\n\r\n\t\t\tif (value instanceof Percent) {\r\n\t\t\t\tthis.percentWidth = value.percent;\r\n\t\t\t\tif ($type.isNumber(this._pixelWidth)) {\r\n\t\t\t\t\tthis.maxWidth = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tthis._pixelWidth = undefined;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._pixelWidth = Number(value);\r\n\t\t\t\t//this._measuredWidth = this._pixelWidth;\r\n\t\t\t\tthis.maxWidth = this._pixelWidth;\r\n\t\t\t}\r\n\t\t\tthis.invalidatePosition();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Width (absolute or relative)\r\n\t */\r\n\tpublic get width(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"width\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's absolute or relative height.\r\n\t *\r\n\t * The height can either be absolute, set in numeric pixels, or relative, set\r\n\t * in [[Percent]].\r\n\t *\r\n\t * Relative height will be calculated using closest measured ancestor\r\n\t * [[Container]].\r\n\t *\r\n\t * NOTE: `height` is an accessor, which allows setting height in pixels or\r\n\t * percent. It is a sort of a \"shortcut\" for the users. Actual renderer does\r\n\t * not ever use it. It uses either `pixelHeight` or `percentHeight`, so if\r\n\t * you need to add an adapter for height add it for either of the two\r\n\t * properties - whichever suits your requirements.\r\n\t *\r\n\t * @param value Height (numeric in pixels or relative)\r\n\t */\r\n\tpublic set height(value: number | Percent) {\r\n\r\n\t\tlet changed: boolean = this.setPercentProperty(\"height\", value, true, false, this._positionPrecision, true);\r\n\r\n\t\tif (changed) {\r\n\t\t\tthis.percentHeight = undefined;\r\n\t\t\tthis._relativeHeight = undefined;\r\n\r\n\t\t\tif (value instanceof Percent) {\r\n\t\t\t\tthis.percentHeight = value.percent;\r\n\t\t\t\tif ($type.isNumber(this._pixelHeight)) {\r\n\t\t\t\t\tthis.maxHeight = undefined;\r\n\t\t\t\t}\r\n\t\t\t\tthis._pixelHeight = undefined;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis._pixelHeight = Number(value);\r\n\t\t\t\t//this._measuredHeight = this._pixelHeight;\r\n\t\t\t\tthis.maxHeight = this._pixelHeight; // yes, we reset maxWidth\r\n\t\t\t}\r\n\r\n\t\t\tthis.invalidatePosition();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return height (absolute or relative)\r\n\t */\r\n\tpublic get height(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"height\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's width in pixels, if width was set. For actual width use measuredWidth property.\r\n\t *\r\n\t * @readonly\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get pixelWidth(): number {\r\n\t\tlet width: number;\r\n\t\tif ($type.isNumber(this.percentWidth)) {\r\n\t\t\twidth = this.maxWidth;\r\n\t\t}\r\n\t\telse if ($type.isNumber(this._pixelWidth)) {\r\n\t\t\twidth = this._pixelWidth;\r\n\t\t}\r\n\t\telse {\r\n\t\t\twidth = 0;\r\n\t\t}\r\n\r\n\t\tconst minWidth = this.minWidth;\r\n\r\n\t\tif (minWidth != null && width < minWidth) {\r\n\t\t\twidth = minWidth;\r\n\t\t}\r\n\t\tlet value = $math.round(width, this._positionPrecision, true);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelWidth\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's height in pixels. For actual height use measuredHeight property.\r\n\t *\r\n\t * @readonly\r\n\t * @return Height (px)\r\n\t */\r\n\tpublic get pixelHeight(): number {\r\n\t\tlet height: number;\r\n\t\tif ($type.isNumber(this.percentHeight)) {\r\n\t\t\theight = this.maxHeight;\r\n\t\t}\r\n\t\telse if ($type.isNumber(this._pixelHeight)) {\r\n\t\t\theight = this._pixelHeight;\r\n\t\t}\r\n\t\telse {\r\n\t\t\theight = 0//this._measuredHeightSelf;\r\n\t\t}\r\n\r\n\t\tconst minHeight = this.minHeight;\r\n\r\n\t\tif (minHeight != null && height < minHeight) {\r\n\t\t\theight = minHeight;\r\n\t\t}\r\n\t\tlet value = $math.round(height, this._positionPrecision, true);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelHeight\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Element's relative width in [[Percent]].\r\n\t * @ignore\r\n\t *\r\n\t * @param value Relative width\r\n\t */\r\n\tpublic set relativeWidth(value: $type.Optional<number>) {\r\n\t\tif (this._relativeWidth != value) {\r\n\t\t\tthis._relativeWidth = value;\r\n\t\t\t//\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Relative width\r\n\t * @ignore\r\n\t */\r\n\tpublic get relativeWidth(): $type.Optional<number> {\r\n\t\tconst relativeWidth = this._relativeWidth;\r\n\r\n\t\tif ($type.isNumber(relativeWidth)) {\r\n\t\t\tif (!this._adapterO) {\r\n\t\t\t\treturn relativeWidth;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this._adapterO.apply(\"relativeWidth\", relativeWidth);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Element's relative height in [[Percent]].\r\n\t *\r\n\t * @param value Relative height\r\n\t * @ignore\r\n\t */\r\n\tpublic set relativeHeight(value: $type.Optional<number>) {\r\n\t\tif (this._relativeHeight != value) {\r\n\t\t\tthis._relativeHeight = value;\r\n\t\t\t//\t\t\tthis.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Relative height\r\n\t * @ignore\r\n\t */\r\n\tpublic get relativeHeight(): $type.Optional<number> {\r\n\t\tconst relativeHeight = this._relativeHeight;\r\n\r\n\t\tif ($type.isNumber(relativeHeight)) {\r\n\t\t\tif (!this._adapterO) {\r\n\t\t\t\treturn relativeHeight;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this._adapterO.apply(\"relativeHeight\", relativeHeight);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's measured width in pixels.\r\n\t *\r\n\t * A measured width is actual width of contents plus `paddingRight` and* `paddingLeft`, relative to sprite parent, meaning that\r\n\t * rotation and scale is taken into account.\r\n\t *\r\n\t * @readonly\r\n\t * @return Width (px)\r\n\t */\r\n\tpublic get measuredWidth(): number {\r\n\r\n\t\tif (this.disabled || this.__disabled) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn this._measuredWidth;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"measuredWidth\", this._measuredWidth);\r\n\t\t}\r\n\t\t// it's not good to fit to min/max range as then rotations and scale won't be taken into account\r\n\t\t//return this.adapter.apply(\"measuredWidth\", $math.fitToRange(this._measuredWidth, this.minWidth, this.maxWidth));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns elements's measured height in pixels.\r\n\t *\r\n\t * A measured height is actual height of contents plus `paddingTop` and `paddingBottom`, relative to sprite parent, meaning that\r\n\t * rotation and scale taken into account.\r\n\t *\r\n\t * @readonly\r\n\t * @return Height (px)\r\n\t */\r\n\tpublic get measuredHeight(): number {\r\n\r\n\t\tif (this.disabled || this.__disabled) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\t// it's not good to fit to min/max range as then rotations and scale won't be taken into account\r\n\t\t//return this.adapter.apply(\"measuredHeight\", $math.fitToRange(this._measuredHeight, this.minHeight, this.maxHeight));\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn this._measuredHeight;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"measuredHeight\", this._measuredHeight);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's measured width plus its left and right margins in\r\n\t * pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Outer width (px)\r\n\t */\r\n\tpublic get outerWidth(): number {\r\n\t\tlet value = this.pixelWidth + this.pixelMarginRight + this.pixelMarginLeft;\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"outerWidth\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's measured height plus its top and bottom margins in\r\n\t * pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Outer height (px)\r\n\t */\r\n\tpublic get outerHeight(): number {\r\n\t\tlet value = this.pixelHeight + this.pixelMarginTop + this.pixelMarginBottom;\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"outerHeight\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's measured inner width in pixels.\r\n\t *\r\n\t * Inner width is actual available space for content, e.g. element's width\r\n\t * minus horizontal padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Inner width (px)\r\n\t */\r\n\tpublic get innerWidth(): number {\r\n\t\tlet value = Math.max(0, this.pixelWidth - this.pixelPaddingRight - this.pixelPaddingLeft);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"innerWidth\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's measured inner height in pixels.\r\n\t *\r\n\t * Inner height is actual available space for content, e.g. element's height\r\n\t * minus vertical padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Inner height (px)\r\n\t */\r\n\tpublic get innerHeight(): number {\r\n\t\tlet value = Math.max(0, this.pixelHeight - this.pixelPaddingTop - this.pixelPaddingBottom);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"innerHeight\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns element's current \"global\" scale.\r\n\t *\r\n\t * Scale values accumulate over hierarchy of elements.\r\n\t *\r\n\t * E.g. if a [[Container]] has `scale = 2` and it's child has a `scale = 2`,\r\n\t * the child's `globalScale` will be 4. (a multitude of `2 x 2`)\r\n\t *\r\n\t * @readonly\r\n\t * @return Global scale\r\n\t */\r\n\tpublic get globalScale(): number {\r\n\t\tlet scale: number = this.scale;\r\n\t\tif (this._parent) {\r\n\t\t\tscale = scale * this._parent.globalScale;\r\n\t\t}\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn scale;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"globalScale\", scale);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Scale of the element.\r\n\t *\r\n\t * The scale is set from 0 (element reduced to nothing) to 1 (default size).\r\n\t * * 2 will mean element is increased twice.\r\n\t * * 0.5 - reduced by 50%.\r\n\t *\r\n\t * Etc.\r\n\t *\r\n\t * @param value Scale (0-1)\r\n\t */\r\n\tpublic set scale(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tif (value < 0) {\r\n\t\t\tvalue = 0;\r\n\t\t}\r\n\t\tif (value != this.getPropertyValue(\"scale\")) {\r\n\t\t\tthis.setPropertyValue(\"scale\", value, false, true);\r\n\t\t\tthis.handleGlobalScale();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Scale (0-1)\r\n\t */\r\n\tpublic get scale(): number {\r\n\t\treturn this.getPropertyValue(\"scale\");\r\n\t}\r\n\r\n\t/**\r\n\t * Sets all four margins for the element at once.\r\n\t *\r\n\t * Margins are set in pixels.\r\n\t *\r\n\t * @param top Top margin\r\n\t * @param right Right margin\r\n\t * @param bottom Bottom margin\r\n\t * @param left Left margin\r\n\t * @return Current element\r\n\t */\r\n\tpublic margin(top: number, right: number, bottom: number, left: number): Sprite {\r\n\t\tthis.marginTop = top;\r\n\t\tthis.marginRight = right;\r\n\t\tthis.marginBottom = bottom;\r\n\t\tthis.marginLeft = left;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Left margin - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Margin value\r\n\t */\r\n\tpublic set marginLeft(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"marginLeft\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Margin value\r\n\t */\r\n\tpublic get marginLeft(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"marginLeft\");\r\n\t}\r\n\r\n\t/**\r\n\t * Right margin - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Margin value\r\n\t */\r\n\tpublic set marginRight(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"marginRight\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Margin value\r\n\t */\r\n\tpublic get marginRight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"marginRight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Top margin - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Margin value\r\n\t */\r\n\tpublic set marginTop(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"marginTop\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Margin value\r\n\t */\r\n\tpublic get marginTop(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"marginTop\");\r\n\t}\r\n\r\n\t/**\r\n\t * Bottom margin - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Margin value\r\n\t */\r\n\tpublic set marginBottom(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"marginBottom\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Margin value\r\n\t */\r\n\tpublic get marginBottom(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"marginBottom\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current right margin in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Right margin (px)\r\n\t */\r\n\tpublic get pixelMarginRight(): number {\r\n\t\tlet value = this.getPixelX(this.marginRight);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelMarginRight\", value);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative right margin.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative right margin\r\n\t */\r\n\tpublic get relativeMarginRight(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\tlet value = this.getRelativeX(this.marginRight);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeMarginRight\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current left margin in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Left margin (px)\r\n\t */\r\n\tpublic get pixelMarginLeft(): number {\r\n\t\tlet value = this.getPixelX(this.marginLeft);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelMarginLeft\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative left margin.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative left margin\r\n\t */\r\n\tpublic get relativeMarginLeft(): number {\r\n\t\t//@todo Maybe use [[Percent]]?\r\n\t\tlet value = this.getRelativeX(this.marginLeft);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeMarginLeft\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current top margin in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Top margin (px)\r\n\t */\r\n\tpublic get pixelMarginTop(): number {\r\n\t\tlet value = this.getPixelY(this.marginTop);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelMarginTop\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative top margin.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative top margin\r\n\t */\r\n\tpublic get relativeMarginTop(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\tlet value = this.getRelativeY(this.marginTop);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeMarginTop\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current bottom margin in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Bottom margin (px)\r\n\t */\r\n\tpublic get pixelMarginBottom(): number {\r\n\t\tlet value = this.getPixelY(this.marginBottom);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"pixelMarginBottom\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative bottom margin.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative bottom margin\r\n\t */\r\n\tpublic get relativeMarginBottom(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\tlet value = this.getRelativeY(this.marginBottom);\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn value;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"relativeMarginBottom\", value);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets padding for the element in pixels.\r\n\t *\r\n\t * @param top Top padding (px)\r\n\t * @param right Right padding (px)\r\n\t * @param bottom Bottom padding (px)\r\n\t * @param left Left padding (px)\r\n\t * @return Element\r\n\t */\r\n\tpublic padding(top: number, right: number, bottom: number, left: number): Sprite {\r\n\t\tthis.paddingTop = top;\r\n\t\tthis.paddingRight = right;\r\n\t\tthis.paddingBottom = bottom;\r\n\t\tthis.paddingLeft = left;\r\n\t\treturn this;\r\n\t}\r\n\r\n\t/**\r\n\t * Left padding - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Padding value\r\n\t */\r\n\tpublic set paddingLeft(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"paddingLeft\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding value\r\n\t */\r\n\tpublic get paddingLeft(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"paddingLeft\");\r\n\t}\r\n\r\n\t/**\r\n\t * Right padding - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Padding value\r\n\t */\r\n\tpublic set paddingRight(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"paddingRight\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding value\r\n\t */\r\n\tpublic get paddingRight(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"paddingRight\");\r\n\t}\r\n\r\n\t/**\r\n\t * Top padding - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Padding value\r\n\t */\r\n\tpublic set paddingTop(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"paddingTop\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding value\r\n\t */\r\n\tpublic get paddingTop(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"paddingTop\");\r\n\t}\r\n\r\n\t/**\r\n\t * Bottom padding - absolute (px) or relative ([[Percent]]).\r\n\t *\r\n\t * @param value Padding value\r\n\t */\r\n\tpublic set paddingBottom(value: number | Percent) {\r\n\t\tthis.setPercentProperty(\"paddingBottom\", value, true, true, this._positionPrecision, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Padding value\r\n\t */\r\n\tpublic get paddingBottom(): number | Percent {\r\n\t\treturn this.getPropertyValue(\"paddingBottom\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current right padding in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Right padding (px)\r\n\t */\r\n\tpublic get pixelPaddingRight(): number {\r\n\t\treturn this.getPixelX(this.paddingRight);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative right padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative right padding\r\n\t */\r\n\tpublic get relativePaddingRight(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\treturn this.getRelativeX(this.paddingRight);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current left padding in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Left padding (px)\r\n\t */\r\n\tpublic get pixelPaddingLeft(): number {\r\n\t\treturn this.getPixelX(this.paddingLeft);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative left padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative left padding\r\n\t */\r\n\tpublic get relativePaddingLeft(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\treturn this.getRelativeX(this.paddingLeft);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current top padding in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Top padding (px)\r\n\t */\r\n\tpublic get pixelPaddingTop(): number {\r\n\t\treturn this.getPixelY(this.paddingTop);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative top padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative top padding\r\n\t */\r\n\tpublic get relativePaddingTop(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\treturn this.getRelativeY(this.paddingTop);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current bottom padding in pixels.\r\n\t *\r\n\t * @readonly\r\n\t * @return Bottom padding (px)\r\n\t */\r\n\tpublic get pixelPaddingBottom(): number {\r\n\t\treturn this.getPixelY(this.paddingBottom);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns current relative bottom padding.\r\n\t *\r\n\t * @readonly\r\n\t * @return Relative bottom padding\r\n\t */\r\n\tpublic get relativePaddingBottom(): number {\r\n\t\t// @todo Maybe use [[Percent]]?\r\n\t\treturn this.getRelativeY(this.paddingBottom);\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * APPEARANCE-RELATED PROPERTIES AND RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * Path of Sprite element\r\n\t */\r\n\tpublic set path(value: string) {\r\n\t\tthis.setPath(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setPath(value: string): boolean {\r\n\t\tif (this.setPropertyValue(\"path\", value)) {\r\n\r\n\t\t\tif (this._adapterO) {\r\n\t\t\t\tvalue = this._adapterO.apply(\"path\", value);\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._isPath) {\r\n\t\t\t\tif (!this.element || (this.element.node && !(this.element.node instanceof SVGPathElement))) {\r\n\t\t\t\t\tthis.element = this.paper.add(\"path\");\r\n\t\t\t\t}\r\n\t\t\t\tthis._isPath = true;\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\tthis.element.attr({ \"d\": value });\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.element.removeAttr(\"d\");\r\n\t\t\t}\r\n\t\t\tthis.invalidatePosition();\r\n\t\t\t// otherwise is 0x0\r\n\t\t\tif (!this.inited) {\r\n\t\t\t\tthis.events.once(\"inited\", this.validatePosition, this, false);\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Path of a Sprite element\r\n\t */\r\n\tpublic get path(): string {\r\n\t\treturn this.getPropertyValue(\"path\");\r\n\t}\r\n\r\n\t/**\r\n\t * [[ColorModifier]] that can be used to modify color and pattern of the\r\n\t * element's fill, e.g. create gradients.\r\n\t *\r\n\t * @param value Fill color modifiier\r\n\t */\r\n\tpublic set fillModifier(value: ColorModifier) {\r\n\t\tif (this.setPropertyValue(\"fillModifier\", value)) {\r\n\t\t\tthis.setFill(this.fill);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Fill color modifier\r\n\t */\r\n\tpublic get fillModifier(): ColorModifier {\r\n\t\treturn this.getPropertyValue(\"fillModifier\");\r\n\t}\r\n\r\n\t/**\r\n\t * [[ColorModifier]] that can be used to modify color and pattern of the\r\n\t * element's stroke (outline), e.g. create gradients.\r\n\t *\r\n\t * @param value Stroke color modifier\r\n\t */\r\n\tpublic set strokeModifier(value: ColorModifier) {\r\n\t\tthis.setPropertyValue(\"strokeModifier\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Stroke color modifier\r\n\t */\r\n\tpublic get strokeModifier(): ColorModifier {\r\n\t\treturn this.getPropertyValue(\"strokeModifier\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's fill opacity.\r\n\t *\r\n\t * Opacity ranges from 0 (fully transparent) to 1 (fully opaque).\r\n\t *\r\n\t * @param value Opacity (0-1)\r\n\t */\r\n\tpublic set fillOpacity(value: number) {\r\n\t\tvalue = $math.toNumberRange(value, 0, 1);\r\n\t\tif (this.setPropertyValue(\"fillOpacity\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"fill-opacity\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Opacity (0-9)\r\n\t */\r\n\tpublic get fillOpacity(): number {\r\n\t\treturn this.getPropertyValue(\"fillOpacity\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's fill color or pattern.\r\n\t *\r\n\t * @param value Fill\r\n\t */\r\n\tpublic set fill(value: $type.Optional<Color | Pattern | LinearGradient | RadialGradient>) {\r\n\t\tthis.setFill(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets actual `fill` property on the SVG element, including applicable color\r\n\t * modifiers.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Fill\r\n\t */\r\n\tprotected setFill(value: $type.Optional<Color | Pattern | LinearGradient | RadialGradient>): void {\r\n\t\tif (!$type.isObject(value) || \"r\" in value) {\r\n\t\t\tvalue = toColor(value);\r\n\t\t}\r\n\r\n\t\tif (this.setColorProperty(\"fill\", value) || this.fillModifier) {\r\n\t\t\t// this can not go into next if, as value is turned to Gradient\r\n\t\t\tif (value instanceof Color) {\r\n\t\t\t\tif (this.fillModifier) {\r\n\t\t\t\t\tvalue = this.fillModifier.modify(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.realFill = value;\r\n\r\n\t\t\t// todo: review this place when some Color type will be added\r\n\t\t\tif (value instanceof Color) {\r\n\t\t\t\tthis.setSVGAttribute({ \"fill\": value.toString() });\r\n\t\t\t}\r\n\t\t\telse if (!$type.hasValue(value)) {\r\n\t\t\t\tthis.removeSVGAttribute(\"fill\");\r\n\t\t\t}\r\n\t\t\telse if (<any>value instanceof Pattern || <any>value instanceof LinearGradient || <any>value instanceof RadialGradient) {\r\n\t\t\t\tlet fill = value;\r\n\t\t\t\tfill.paper = this.paper;\r\n\t\t\t\tthis.setSVGAttribute({ \"fill\": \"url(\\\"\" + $utils.getBaseURI() + fill.id + \"\\\")\" });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Fill\r\n\t */\r\n\tpublic get fill(): $type.Optional<Color | Pattern | LinearGradient | RadialGradient> {\r\n\t\treturn this.getPropertyValue(\"fill\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's opacity.\r\n\t *\r\n\t * Opacity setting can range from 0 (fully transparent) to 1 (fully opaque).\r\n\t *\r\n\t * ATTENTION: It is highly not recommended to use `opacity` directly on the\r\n\t * element. The charts use `opacity` to hide/show elements, so your setting\r\n\t * might be lost if element is hidden and then later shown.\r\n\t *\r\n\t * Instead use methods `hide()` and `show()` to completely toggle off and on\r\n\t * the element.\r\n\t *\r\n\t * Or, use properties `fillOpacity` and `strokeOpacity`, if you need to make\r\n\t * the element semi-transparent.\r\n\t *\r\n\t * @param value Opacity (0-1)\r\n\t */\r\n\tpublic set opacity(value: number) {\r\n\t\tvalue = $math.toNumberRange(value, 0, 1);\r\n\t\tif (this.setPropertyValue(\"opacity\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"opacity\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Opacity (0-1)\r\n\t */\r\n\tpublic get opacity(): number {\r\n\t\treturn this.getPropertyValue(\"opacity\");\r\n\t}\r\n\r\n\t/**\r\n\t * Element's stroke (outline) color or pattern.\r\n\t *\r\n\t * @param value Stroke setting\r\n\t */\r\n\tpublic set stroke(value: Color | Pattern | LinearGradient | RadialGradient) {\r\n\t\tthis.setStroke(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Sets actual `stroke` property on the SVG element, including applicable\r\n\t * color modifiers.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Stroke setting\r\n\t */\r\n\tprotected setStroke(value: Color | Pattern | LinearGradient | RadialGradient) {\r\n\t\tif (!$type.isObject(value) || \"r\" in value) {\r\n\t\t\tvalue = toColor(value);\r\n\t\t}\r\n\r\n\t\tif (this.setColorProperty(\"stroke\", value) || this.strokeModifier) {\r\n\r\n\t\t\t// this can not go into next if, as value is turned to Gradient\r\n\t\t\tif (value instanceof Color) {\r\n\t\t\t\tif (this.strokeModifier) {\r\n\t\t\t\t\tvalue = this.strokeModifier.modify(value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.realStroke = value;\r\n\r\n\t\t\tif (value instanceof Color) {\r\n\t\t\t\tif (value.hex == \"none\") {\r\n\t\t\t\t\tthis.removeSVGAttribute(\"stroke\");\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.setSVGAttribute({ \"stroke\": value.toString() });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse if (!$type.hasValue(value)) {\r\n\t\t\t\tthis.removeSVGAttribute(\"stroke\");\r\n\t\t\t}\r\n\t\t\telse if (<any>value instanceof Pattern || <any>value instanceof LinearGradient || <any>value instanceof RadialGradient) {\r\n\t\t\t\tlet stroke = value;\r\n\t\t\t\tstroke.paper = this.paper;\r\n\t\t\t\tthis.setSVGAttribute({ \"stroke\": \"url(\\\"\" + $utils.getBaseURI() + stroke.id + \"\\\")\" });\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Stroke setting\r\n\t */\r\n\tpublic get stroke(): Color | Pattern | LinearGradient | RadialGradient {\r\n\t\treturn this.getPropertyValue(\"stroke\");\r\n\t}\r\n\r\n\t/**\r\n\t * Stroke (outline) opacity.\r\n\t *\r\n\t * The values may range from 0 (fully transparent) to 1 (fully opaque).\r\n\t *\r\n\t * @param value Opacity (0-1)\r\n\t */\r\n\tpublic set strokeOpacity(value: number) {\r\n\t\tvalue = $math.toNumberRange(value, 0, 1);\r\n\t\tif (this.setPropertyValue(\"strokeOpacity\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"stroke-opacity\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Opacity (0-1)\r\n\t */\r\n\tpublic get strokeOpacity(): number {\r\n\t\treturn this.getPropertyValue(\"strokeOpacity\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if the element's stroke (outline) should remain keep constant\r\n\t * thicnkess and do not scale when the whole element is resized.\r\n\t *\r\n\t * @param value Do not scale stroke (outline)\r\n\t */\r\n\tpublic set nonScalingStroke(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.setPropertyValue(\"nonScalingStroke\", value)) {\r\n\t\t\tthis.strokeWidth = this.strokeWidth;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Do not scale stroke (outline)\r\n\t */\r\n\tpublic get nonScalingStroke(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonScalingStroke\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if element should keep constant size and not scale even if there is\r\n\t * space available, or it does not fit.\r\n\t *\r\n\t * @param value Is element scaleable?\r\n\t */\r\n\tpublic set nonScaling(value: boolean) {\r\n\t\t// @todo Description (review)\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tthis.setPropertyValue(\"nonScaling\", value, false, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is element scaleable?\r\n\t */\r\n\tpublic get nonScaling(): boolean {\r\n\t\treturn this.getPropertyValue(\"nonScaling\");\r\n\t}\r\n\r\n\t/**\r\n\t * Stroke (outline) thickness in pixels.\r\n\t *\r\n\t * @param value Thickness (px)\r\n\t */\r\n\tpublic set strokeWidth(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tthis.setPropertyValue(\"strokeWidth\", value, true);\r\n\r\n\t\tif (this.nonScalingStroke) {\r\n\t\t\tif (!$type.isNumber(value)) {\r\n\t\t\t\tvalue = 1;\r\n\t\t\t}\r\n\t\t\tvalue = value / this.globalScale;\r\n\t\t}\r\n\t\tthis.setSVGAttribute({ \"stroke-width\": value });\r\n\t}\r\n\r\n\t/**\r\n\t * @return Thickness (px)\r\n\t */\r\n\tpublic get strokeWidth(): number {\r\n\t\treturn this.getPropertyValue(\"strokeWidth\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `stroke-dasharray` for the stroke (outline).\r\n\t *\r\n\t * \"Dasharray\" allows setting rules to make lines dashed, dotted, etc.\r\n\t *\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray} for more info on `stroke-dasharray`\r\n\t * @param value `stroke-dasharray`\r\n\t */\r\n\tpublic set strokeDasharray(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (this.setPropertyValue(\"strokeDasharray\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"stroke-dasharray\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `stroke-dasharray`\r\n\t */\r\n\tpublic get strokeDasharray(): string {\r\n\t\treturn this.getPropertyValue(\"strokeDasharray\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `stroke-dashoffset` for the stroke (outline).\r\n\t *\r\n\t * \"Dashoffset\" allows setting the start position of the dashes if\r\n\t * `strokeDasharray` is used.\r\n\t *\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset} for more info on `stroke-dashoffset`\r\n\t * @param value `stroke-dashoffset`\r\n\t */\r\n\tpublic set strokeDashoffset(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tif (this.setPropertyValue(\"strokeDashoffset\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"stroke-dashoffset\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `stroke-dashoffset`\r\n\t */\r\n\tpublic get strokeDashoffset(): number {\r\n\t\treturn this.getPropertyValue(\"strokeDashoffset\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `stroke-linecap` to indicate how line ends are drawn.\r\n\t *\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes#Stroke} for more info on `stroke-linecap`\r\n\t * @param value `stroke-linecap`\r\n\t */\r\n\tpublic set strokeLinecap(value: \"butt\" | \"square\" | \"round\") {\r\n\t\tif (this.setPropertyValue(\"strokeLinecap\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"stroke-linecap\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `stroke-linecap`\r\n\t */\r\n\tpublic get strokeLinecap(): \"butt\" | \"square\" | \"round\" {\r\n\t\treturn this.getPropertyValue(\"strokeLinecap\");\r\n\t}\r\n\r\n\t/**\r\n\t * A `stroke-linejoin` to indicate how line ends are drawn.\r\n\t *\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Fills_and_Strokes#Stroke} for more info on `stroke-linejoin`\r\n\t * @param value `stroke-linejoin`\r\n\t */\r\n\tpublic set strokeLinejoin(value: \"miter\" | \"round\" | \"bevel\") {\r\n\t\tif (this.setPropertyValue(\"strokeLinejoin\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"stroke-linejoin\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return `stroke-linejoin`\r\n\t */\r\n\tpublic get strokeLinejoin(): \"miter\" | \"round\" | \"bevel\" {\r\n\t\treturn this.getPropertyValue(\"strokeLinejoin\");\r\n\t}\r\n\r\n\t/**\r\n\t * An SVG-specific `shape-rendering` value.\r\n\t *\r\n\t * `shape-rendering` controls how vector graphics are drawn and rendered.\r\n\t *\r\n\t * @see {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering} for more information about `shape-rendering`\r\n\t * @default \"auto\"\r\n\t * @param value 'shape-rendering' value\r\n\t */\r\n\tpublic set shapeRendering(value: ShapeRendering) {\r\n\t\tvalue = <ShapeRendering>$type.toText(value);\r\n\t\tif (this.setPropertyValue(\"shapeRendering\", value)) {\r\n\t\t\tthis.setSVGAttribute({ \"shape-rendering\": value });\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return 'shape-rendering' value\r\n\t */\r\n\tpublic get shapeRendering(): ShapeRendering {\r\n\t\treturn this.getPropertyValue(\"shapeRendering\");\r\n\t}\r\n\r\n\t/**\r\n\t * Controls if SVG vectors should be drawn with \"pixel\" precision, producing\r\n\t * perfectly crisp lines on retina displays.\r\n\t *\r\n\t * Setting this to `true` might improve visual quality, but may have a\r\n\t * negative effect on performance.\r\n\t *\r\n\t * Different elements use different default setting for `pixelPerfect`.\r\n\t *\r\n\t * We recommend leaving this at their default settings, unless there's a\r\n\t * specific need.\r\n\t *\r\n\t * @param value Use pixel perfect?\r\n\t */\r\n\tpublic set pixelPerfect(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (value) {\r\n\t\t\tthis._positionPrecision = options.pixelPerfectPrecision;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._positionPrecision = 3;\r\n\t\t}\r\n\r\n\t\tthis.setPropertyValue(\"pixelPerfect\", value, true);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use pixel perfect?\r\n\t */\r\n\tpublic get pixelPerfect(): boolean {\r\n\t\treturn this.getPropertyValue(\"pixelPerfect\");\r\n\t}\r\n\r\n\t/**\r\n\t * An RTL (right-to-left) setting.\r\n\t *\r\n\t * RTL may affect alignment, text, and other visual properties.\r\n\t *\r\n\t * If you set this on a top-level chart object, it will be used for all\r\n\t * child elements, e.g. labels, unless they have their own `rtl` setting\r\n\t * set directly on them.\r\n\t *\r\n\t * @param value `true` for to use RTL\r\n\t */\r\n\tpublic set rtl(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (this.isBaseSprite) {\r\n\t\t\tthis.topParent.rtl = value;\r\n\t\t}\r\n\t\tthis._rtl = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return RTL?\r\n\t */\r\n\tpublic get rtl(): boolean {\r\n\t\tif ($type.hasValue(this._rtl)) {\r\n\t\t\treturn this._rtl;\r\n\t\t}\r\n\t\telse if (this._topParent) {\r\n\t\t\treturn this._topParent.rtl;\r\n\t\t}\r\n\t\t//this.rtl = false;\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * VISIBILITY AND ORDER PROPERTIES AND RELATED STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n \t * Reveals hidden element.\r\n \t *\r\n \t * Has no effect if element is already visible.\r\n \t *\r\n \t * If `duration` is not specified, it will use default.\r\n \t *\r\n \t * @param duration Fade in duration (ms)\r\n \t * @return Animation object if such object was created\r\n \t */\r\n\tpublic show(duration?: number): $type.Optional<Animation> {\r\n\t\treturn this.showReal(duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Performs actual operations to reveal this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param duration Fade in duration (ms)\r\n\t * @return Fade in duration (ms)\r\n\t */\r\n\tprotected showReal(duration?: number): $type.Optional<Animation> {\r\n\t\tif (this.preventShow) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet transition: $type.Optional<Animation>;\r\n\r\n\t\tconst properties = this.defaultState.properties;\r\n\r\n\t\tif (!this.disabled && (this.isHidden || !this.visible || this.isHiding || (properties.opacity != null && this.opacity < properties.opacity && !this.isShowing)) && !this.isDisposed()) {\r\n\r\n\t\t\t// helps to avoid flicker, as show might change opacity or visibility but item might be at invalid state/position\r\n\t\t\tif (this.invalid) {\r\n\t\t\t\tthis.validate();\r\n\t\t\t}\r\n\r\n\t\t\tif (this.positionInvalid) {\r\n\t\t\t\tthis.validatePosition();\r\n\t\t\t}\r\n\r\n\t\t\tif (!$type.isNumber(duration)) {\r\n\t\t\t\tduration = this.defaultState.transitionDuration;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._hideAnimation) {\r\n\t\t\t\tthis._hideAnimation.kill();\r\n\t\t\t\tthis._hideAnimation = undefined;\r\n\t\t\t}\r\n\r\n\t\t\t// Cancel hide handler just in case it was there\r\n\t\t\tif (this._showHideDisposer) {\r\n\t\t\t\tthis.removeDispose(this._showHideDisposer);\r\n\t\t\t}\r\n\r\n\t\t\tthis._isHidden = false;\r\n\t\t\tthis.isHiding = false;\r\n\t\t\tthis.isShowing = true;\r\n\r\n\t\t\t// Apply current state\r\n\t\t\ttransition = this.applyCurrentState(duration);\r\n\r\n\t\t\tif (transition && !transition.isFinished()) {\r\n\r\n\t\t\t\tthis._showHideDisposer = transition.events.on(\"animationended\", () => {\r\n\t\t\t\t\tthis.isShowing = false;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._disposers.push(this._showHideDisposer);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.isShowing = false;\r\n\t\t\t}\r\n\t\t\t// Make it visible\r\n\t\t\tlet visible = this.defaultState.properties.visible;\r\n\t\t\tif (!$type.hasValue(visible)) {\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t\tthis.visible = visible;\r\n\r\n\t\t\t// Unhide from screen readers\r\n\t\t\tthis.readerHidden = false;\r\n\r\n\t\t\t// Dispatch \"show\" event\r\n\t\t\tthis.dispatchImmediately(\"shown\");\r\n\t\t}\r\n\r\n\t\treturn transition;\r\n\t}\r\n\r\n\t/**\r\n\t * Initiates hiding of Sprite.\r\n\t * When called it will fade out the the Sprite to transparency, then make it\r\n\t * invisible.\r\n\t * @param duration Duration in millisecons\r\n\t */\r\n\r\n\t/**\r\n\t * Hides the element, by applying `hidden` state.\r\n\t *\r\n\t * Has no effect if element is already hidden.\r\n \t *\r\n \t * If `duration` is not specified, it will use default.\r\n \t *\r\n \t * While element is fading out, its `isHiding` property will resolve to\r\n \t * `true`.\r\n \t *\r\n \t * When element is hidden, its `visible` property will resolve to `false`.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return hide Animation object if such object was created\r\n\t */\r\n\tpublic hide(duration?: number): $type.Optional<Animation> {\r\n\t\treturn this.hideReal(duration);\r\n\t}\r\n\r\n\t/**\r\n\t * Hides actual SVG elements and handles hiding animations.\r\n\t *\r\n\t * @param duration Fade out duration (ms)\r\n\t * @return Fade out duration (ms)\r\n\t * @ignore\r\n\t */\r\n\tprotected hideReal(duration?: number): $type.Optional<Animation> {\r\n\t\tlet transition: $type.Optional<Animation>;\r\n\r\n\t\tif (!this.isHiding && this.visible && !this.isDisposed()) {\r\n\t\t\t// added to solve 51375\r\n\t\t\tif (this.tooltip && this.tooltip.currentSprite == this) {\r\n\t\t\t\tthis.hideTooltip(0);\r\n\t\t\t}\r\n\r\n\t\t\tif (this._hideAnimation) {\r\n\t\t\t\tthis._hideAnimation.kill();\r\n\t\t\t\tthis._hideAnimation = undefined;\r\n\t\t\t}\r\n\r\n\t\t\tthis.isShowing = false;\r\n\r\n\t\t\t// Cancel hide handler just in case it was there\r\n\t\t\tif (this._showHideDisposer) {\r\n\t\t\t\tthis.removeDispose(this._showHideDisposer);\r\n\t\t\t}\r\n\r\n\t\t\t// Get state\r\n\t\t\tlet hiddenState = this.hiddenState;\r\n\r\n\t\t\t// Transition to \"hidden\" state, provided Sprite has one set\r\n\t\t\tif (hiddenState) {\r\n\t\t\t\t// Yes, we have a \"hidden\" state\r\n\t\t\t\t// `setState` will return an `Animation` object which we can set\r\n\t\t\t\t// events on\r\n\t\t\t\ttransition = this.setState(hiddenState, duration, undefined);\r\n\r\n\t\t\t\tif (transition && !transition.isFinished()) {\r\n\t\t\t\t\tthis._hideAnimation = transition;\r\n\t\t\t\t\tthis._showHideDisposer = transition.events.on(\"animationended\", () => {\r\n\t\t\t\t\t\tthis.isHiding = false;\r\n\t\t\t\t\t\tthis._isHidden = true;\r\n\t\t\t\t\t\tif (hiddenState.properties.visible == false) {\r\n\t\t\t\t\t\t\tthis.visible = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}, this);\r\n\r\n\t\t\t\t\tthis._disposers.push(this._showHideDisposer);\r\n\r\n\t\t\t\t\t// Thrown everything into `_disposers` just in case Sprite gets\r\n\t\t\t\t\t// destroyed in the meantime\r\n\t\t\t\t\tthis._disposers.push(transition);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.isHiding = false;\r\n\t\t\t\t\tthis._isHidden = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// No hidden state, let's just set `visible` and call it a day\r\n\t\t\t\tthis.visible = false;\r\n\t\t\t\tthis.isHiding = false;\r\n\t\t\t\tthis._isHidden = true;\r\n\t\t\t}\r\n\r\n\t\t\t// Hide from screen readers\r\n\t\t\tthis.readerHidden = true;\r\n\r\n\t\t\t// Dispach \"hidden\" event\r\n\t\t\tthis.dispatchImmediately(\"hidden\");\r\n\t\t\tthis.invalidate(); // hide it at once to avoid flickers // validate() causes SO\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(duration)) {\r\n\t\t\tduration = this.hiddenState.transitionDuration;\r\n\t\t}\r\n\r\n\t\treturn transition;\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if element is current visible (`true`) or hidden (`false`).\r\n\t *\r\n\t * @param value Visible?\r\n\t */\r\n\tpublic set visible(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tthis.setVisibility(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Visible?\r\n\t */\r\n\tpublic get visible(): boolean {\r\n\t\treturn this.getVisibility();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns visibility value\r\n\t * @ignore\r\n\t */\r\n\tprotected getVisibility(): boolean {\r\n\t\tlet value = this.getPropertyValue(\"visible\");\r\n\t\tif (!$type.hasValue(value)) {\r\n\t\t\tvalue = true;\r\n\t\t}\r\n\t\treturn value;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Sets `visibility` property:\r\n\t *\r\n\t * * `true` - visible\r\n\t * * `false` - hidden\r\n\t *\r\n\t * @param value true - visible, false - hidden\r\n\t * @return Current visibility\r\n\t */\r\n\tpublic setVisibility(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"visible\", value)) {\r\n\t\t\tif (value) {\r\n\t\t\t\tthis.group.removeAttr(\"visibility\");\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.group.attr({ \"visibility\": \"hidden\" });\r\n\t\t\t}\r\n\t\t\t//this.invalidatePosition();\r\n\r\n\t\t\tif (this.events.isEnabled(\"visibilitychanged\")) {\r\n\t\t\t\tconst event: AMEvent<this, ISpriteEvents>[\"visibilitychanged\"] = {\r\n\t\t\t\t\ttype: \"visibilitychanged\",\r\n\t\t\t\t\ttarget: this,\r\n\t\t\t\t\tvisible: value\r\n\t\t\t\t};\r\n\t\t\t\tthis.events.dispatchImmediately(\"visibilitychanged\", event);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A \"zIndex\" of the element.\r\n\t *\r\n\t * \"zIndex\" determines the order of how elements are placed over each other.\r\n\t *\r\n\t * Higher \"zIndex\" will mean the element will be draw on top of elements\r\n\t * with lower \"zIndexes\".\r\n\t *\r\n\t * @param value zIndex\r\n\t */\r\n\tpublic set zIndex(value: number) {\r\n\t\tvalue = $type.toNumber(value);\r\n\t\tif (this.setPropertyValue(\"zIndex\", value)) {\r\n\t\t\tthis.dispatch(\"zIndexChanged\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return zIndex\r\n\t */\r\n\tpublic get zIndex(): number {\r\n\t\treturn this.getPropertyValue(\"zIndex\");\r\n\t}\r\n\r\n\t/**\r\n\t * Moves the element to the very top in element order, so that it appears\r\n\t * in front of other elements.\r\n\t */\r\n\tpublic toFront(): void {\r\n\t\tlet parent = this._parent;\r\n\t\tif (parent && parent.children.indexOf(this) != parent.children.length - 1) {\r\n\t\t\tparent.children.moveValue(this, parent.children.length - 1);\r\n\t\t\tthis.dispatch(\"zIndexChanged\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Moves the element to the very bottom in the element order, so that it\r\n\t * appears behind other elements.\r\n\t */\r\n\tpublic toBack(): void {\r\n\t\tlet parent = this._parent;\r\n\t\tif (parent && parent.children.indexOf(this) != 0) {\r\n\t\t\tparent.children.moveValue(this, 0);\r\n\t\t\tthis.dispatch(\"zIndexChanged\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A custom class name to set on the element.\r\n\t *\r\n\t * If set, the value will be added to element's `class` attribute.\r\n\t *\r\n\t * @since 4.9.11\r\n\t * @param value Class name\r\n\t */\r\n\tpublic set userClassName(value: string) {\r\n\t\tif (this.setPropertyValue(\"userClassName\", value)) {\r\n\t\t\tif (!value && this.userClassName) {\r\n\t\t\t\tthis.group.removeClass(this.userClassName);\r\n\t\t\t}\r\n\t\t\tthis.setClassName();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Class name\r\n\t */\r\n\tpublic get userClassName(): string {\r\n\t\treturn this.getPropertyValue(\"userClassName\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * ==========================================================================\r\n\t * TOOLTIP-RELATED PROPERTIES STUFF\r\n\t * ==========================================================================\r\n\t * @hidden\r\n\t */\r\n\r\n\t/**\r\n\t * A [[Tooltip]] object to be used when displayed rollover information for\r\n\t * the element.\r\n\t *\r\n\t * @param tooltip Tooltip\r\n\t */\r\n\tpublic set tooltip(tooltip: $type.Optional<Tooltip>) {\r\n\t\tif (this._tooltip) {\r\n\t\t\t//this._tooltip.dispose();\r\n\t\t\tthis.removeDispose(this._tooltip);\r\n\t\t}\r\n\r\n\t\tthis._tooltip = tooltip;\r\n\r\n\t\tif (tooltip) {\r\n\t\t\ttooltip.parent = this.tooltipContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip\r\n\t */\r\n\tpublic get tooltip(): $type.Optional<Tooltip> {\r\n\t\tif (this._tooltip) {\r\n\t\t\treturn this._tooltip;\r\n\t\t}\r\n\t\telse if (this.virtualParent) {\r\n\t\t\treturn this.virtualParent.tooltip;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.tooltip;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A [[DataItem]] to use when populating content for the element's\r\n\t * [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t * @see {@link DataItem}\r\n\t * @param value Tooltip data item\r\n\t */\r\n\tpublic set tooltipDataItem(value: DataItem) {\r\n\t\t// important: do not dispose tooltip dataItem, as it is some actual data item from data!\r\n\t\tthis._tooltipDataItem = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip data item\r\n\t */\r\n\tpublic get tooltipDataItem(): DataItem {\r\n\t\tconst tooltipDataItem = this._tooltipDataItem;\r\n\r\n\t\tif (tooltipDataItem) {\r\n\t\t\treturn tooltipDataItem;\r\n\r\n\t\t} else {\r\n\t\t\treturn this.dataItem;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A [[Sprite]] or sprite template to use when getting colors for tooltip. If a template is set,\r\n\t * tooltip will look for a clone in tooltipDataItem.sprites. If no clone is found, then template colors will be used.\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t * @see {@link Sprite}\r\n\t * @param sprite Sprite\r\n\t */\r\n\tpublic set tooltipColorSource(sprite: $type.Optional<Sprite>) {\r\n\t\tthis._tooltipColorSource = sprite;\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip color source\r\n\t */\r\n\tpublic get tooltipColorSource(): $type.Optional<Sprite> {\r\n\t\treturn this._tooltipColorSource;\r\n\t}\r\n\r\n\t/**\r\n\t * Shows the element's [[Tooltip]].\r\n\t *\r\n\t * A tooltip will be populated using text templates in either `tooltipHTML` or\r\n\t * `tooltipText` as well as data in `tooltipDataItem`.\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t * @param optional point (sprite-related) to which tooltip must point.\r\n\t * @return returns true if the tooltip was shown and false if it wasn't (no text was found)\r\n\t */\r\n\tpublic showTooltip(point?: IPoint): boolean {\r\n\r\n\t\tif (this.showTooltipOn == \"always\" && !this._tooltip && this.tooltip) {\r\n\t\t\tthis._tooltip = this.tooltip.clone();\r\n\t\t}\r\n\r\n\t\tif (!point && this.tooltipPosition == \"pointer\" && this.isHover) {\r\n\t\t\tpoint = $utils.documentPointToSvg(getInteraction().lastPointer.point, this.svgContainer.SVGContainer, this.svgContainer.cssScale);\r\n\t\t}\r\n\r\n\t\t// do not show if hidden\r\n\t\tlet sprite: Sprite = this;\r\n\t\twhile (sprite != undefined) {\r\n\t\t\tif (!sprite.visible || sprite.disabled || sprite.__disabled) {\r\n\t\t\t\tif (this._tooltip && this._tooltip.visible) {\r\n\t\t\t\t\tthis._tooltip.hide(0);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tsprite = sprite.parent;\r\n\t\t}\r\n\r\n\t\tif ($type.hasValue(this.tooltipText) || $type.hasValue(this.tooltipHTML)) {\r\n\t\t\tlet tooltip = this.tooltip;\r\n\t\t\tlet tooltipDataItem = this.tooltipDataItem;\r\n\r\n\t\t\tif (tooltip) {\r\n\r\n\t\t\t\ttooltip.targetSprite = this;\r\n\r\n\t\t\t\tlet colorSource: Sprite = this;\r\n\t\t\t\tlet tooltipColorSource = this.tooltipColorSource;\r\n\t\t\t\tif ((tooltip.getStrokeFromObject || tooltip.getFillFromObject) && tooltipColorSource) {\r\n\t\t\t\t\tif (tooltipColorSource.isTemplate) {\r\n\t\t\t\t\t\tif (tooltipDataItem) {\r\n\t\t\t\t\t\t\t$array.eachContinue(tooltipDataItem.sprites, (sprite) => {\r\n\t\t\t\t\t\t\t\tif (sprite.clonedFrom == tooltipColorSource) {\r\n\t\t\t\t\t\t\t\t\tcolorSource = sprite;\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tcolorSource = tooltipColorSource;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\tif (tooltip.getStrokeFromObject) {\r\n\t\t\t\t\tlet stroke = this.stroke;\r\n\t\t\t\t\tlet source: Sprite = colorSource;\r\n\r\n\t\t\t\t\twhile (source.parent != undefined) {\r\n\t\t\t\t\t\tstroke = source.stroke;\r\n\t\t\t\t\t\tif (stroke == undefined) {\r\n\t\t\t\t\t\t\tsource = source.parent;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (stroke != undefined) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (stroke instanceof Color) {\r\n\t\t\t\t\t\ttooltip.background.animate({ property: \"stroke\", to: stroke }, tooltip.animationDuration);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttooltip.background.stroke = stroke;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Set data item\r\n\t\t\t\ttooltip.dataItem = tooltipDataItem;\r\n\t\t\t\ttooltip.label.populateStringFrom = this;\r\n\r\n\t\t\t\tif (tooltip.getFillFromObject) {\r\n\r\n\t\t\t\t\tlet fill = this.fill;\r\n\r\n\t\t\t\t\tlet source: Sprite = colorSource;\r\n\r\n\t\t\t\t\twhile (source.parent != undefined) {\r\n\t\t\t\t\t\tfill = source.fill;\r\n\t\t\t\t\t\tif (fill == undefined || (fill instanceof Color && fill.rgb == undefined)) {\r\n\t\t\t\t\t\t\tsource = source.parent;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse if (fill != undefined) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (fill == undefined) {\r\n\t\t\t\t\t\tfill = color(\"#000000\");\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (fill instanceof Color) {\r\n\t\t\t\t\t\tif (!tooltip.visible) {\r\n\t\t\t\t\t\t\ttooltip.background.fill = fill;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\ttooltip.background.animate({ property: \"fill\", to: fill }, tooltip.animationDuration);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttooltip.background.fill = fill;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (tooltip.autoTextColor && fill instanceof Color) {\r\n\t\t\t\t\t\ttooltip.label.fill = fill.alternative;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// Apply tooltip text\r\n\t\t\t\tlet text = \"\";\r\n\t\t\t\tif (this.tooltipHTML) {\r\n\t\t\t\t\ttooltip.html = this.tooltipHTML;\r\n\t\t\t\t\ttext = this.tooltipHTML;\r\n\t\t\t\t}\r\n\t\t\t\tif (this.tooltipText) {\r\n\t\t\t\t\ttooltip.text = this.tooltipText;\r\n\t\t\t\t\ttext = this.tooltipText;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.updateTooltipPosition(point)) {\r\n\r\n\t\t\t\t\t// Set accessibility option\r\n\t\t\t\t\ttooltip.readerDescribedBy = this.uidAttr();\r\n\r\n\t\t\t\t\t// make label to render to be able to check currentText\r\n\t\t\t\t\tif (tooltip.label.invalid) {\r\n\t\t\t\t\t\ttooltip.label.validate();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (text != undefined && text != \"\" && tooltip.label.currentText != \"\") {\r\n\r\n\t\t\t\t\t\t//@todo: think of how to solve this better\r\n\t\t\t\t\t\tif (tooltip && !tooltip.parent) {\r\n\t\t\t\t\t\t\ttooltip.parent = this.tooltipContainer;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// Reveal tooltip\r\n\t\t\t\t\t\t// showing it in 1 ms helps to avoid strange flickering in IE\r\n\t\t\t\t\t\tlet duration = tooltip.defaultState.transitionDuration;\r\n\t\t\t\t\t\tif (duration <= 0) {\r\n\t\t\t\t\t\t\tduration = 1;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\ttooltip.show(duration);\r\n\t\t\t\t\t\ttooltip.currentSprite = this;\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.hideTooltip(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.hideTooltip(0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected updateTooltipPosition(point?: IPoint): boolean {\r\n\t\tif (this.tooltipPosition == \"pointer\") {\r\n\r\n\t\t\tif (this._interactionDisposer) {\r\n\t\t\t\tthis._interactionDisposer.dispose();\r\n\t\t\t}\r\n\r\n\t\t\tthis._interactionDisposer = getInteraction().body.events.on(\"track\", (ev) => {\r\n\t\t\t\treturn this.pointTooltipTo($utils.documentPointToSvg(ev.point, this.svgContainer.SVGContainer, this.svgContainer.cssScale), true);\r\n\t\t\t});\r\n\t\t\tif (point) {\r\n\t\t\t\treturn this.pointTooltipTo(point, true);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\t// Point to the X/Y of this Sprite\r\n\t\t\tlet globalPoint = $utils.spritePointToSvg({\r\n\t\t\t\t\"x\": this.getTooltipX(),\r\n\t\t\t\t\"y\": this.getTooltipY()\r\n\t\t\t}, this);\r\n\t\t\treturn this.pointTooltipTo(globalPoint);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the point the [[Tooltip]] should point to.\r\n\t *\r\n\t * @param point Coordinates to point to\r\n\t * @param instantly Move instantly without animation\r\n\t */\r\n\tprotected pointTooltipTo(point: IPoint, instantly?: boolean): boolean {\r\n\t\tlet tooltip = this.tooltip;\r\n\t\tif (tooltip && this.topParent) {\r\n\r\n\t\t\tif (tooltip.showInViewport) {\r\n\t\t\t\ttooltip.pointTo(point, instantly);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tif ($math.isInRectangle(point, { x: 0, y: 0, width: this.topParent.maxWidth, height: this.topParent.maxHeight })) {\r\n\t\t\t\ttooltip.pointTo(point, instantly);\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Hides element's [[Tooltip]].\r\n\t *\r\n\t * @see {@link Tooltip}\r\n\t */\r\n\tpublic hideTooltip(duration?: number): void {\r\n\r\n\t\tif (this.showTooltipOn == \"always\") {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet tooltip = this.tooltip;\r\n\t\tif (tooltip) {\r\n\t\t\tif (tooltip.targetSprite == this) {\r\n\t\t\t\ttooltip.targetSprite = undefined;\r\n\t\t\t}\r\n\t\t\ttooltip.hide(duration);\r\n\t\t\tif (this._interactionDisposer) {\r\n\t\t\t\tthis._interactionDisposer.dispose();\r\n\t\t\t\tthis._interactionDisposer = undefined;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * An HTML template to be used to populate [[Tooltip]] contents.\r\n\t *\r\n\t * If element has `tooltipDataItem` or `dataItem` set, this will be parsed\r\n\t * for any data values to be replaced with the values from respective data\r\n\t * items.\r\n\t *\r\n\t * @param value Tooltip HTML content template\r\n\t */\r\n\tpublic set tooltipHTML(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tthis.hoverable = true;\r\n\t\tif (this.setPropertyValue(\"tooltipHTML\", value)) {\r\n\t\t\tif (this.tooltip) {\r\n\t\t\t\tif (this.tooltip.visible) {\r\n\t\t\t\t\tthis.showTooltip();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip HTML content template\r\n\t */\r\n\tpublic get tooltipHTML(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipHTML\");\r\n\t}\r\n\r\n\t/**\r\n\t * A text template to be used to populate Tooltip's contents.\r\n\t *\r\n\t * If element has `tooltipDataItem` or `dataItem` set, this will be parsed\r\n\t * for any data values to be replaced with the values from respective data\r\n\t * items.\r\n\t *\r\n\t * This template will also be parsed for any special formatting tags.\r\n\t *\r\n\t * @param value Tooltip content template\r\n\t * @see {@link TextFormatter}\r\n\t */\r\n\tpublic set tooltipText(value: string) {\r\n\t\tvalue = $type.toText(value);\r\n\t\tif (value) {\r\n\t\t\tthis.hoverable = true;\r\n\t\t}\r\n\t\tif (this.setPropertyValue(\"tooltipText\", value)) {\r\n\t\t\tif (this.tooltip) {\r\n\t\t\t\tif (this.tooltip.visible) {\r\n\t\t\t\t\tthis.showTooltip();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip content template\r\n\t */\r\n\tpublic get tooltipText(): string {\r\n\t\treturn this.getPropertyValue(\"tooltipText\");\r\n\t}\r\n\r\n\t/**\r\n\t * A container reference that should be used to place element's\r\n\t * [[Tooltip]] in.\r\n\t *\r\n\t * Will use parent's container if does not have one set.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param value Container\r\n\t * @todo Dispose of the old _tooltipContainer ?\r\n\t */\r\n\tpublic set tooltipContainer(value: $type.Optional<Container>) {\r\n\t\tthis._tooltipContainer = value;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore Exclude from docs\r\n\t * @return Container\r\n\t */\r\n\tpublic get tooltipContainer(): $type.Optional<Container> {\r\n\t\tif (this._tooltipContainer) {\r\n\t\t\treturn this._tooltipContainer;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.tooltipContainer;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * X coordinate the [[Tooltip]] should be shown at.\r\n\t *\r\n\t * @param value Tooltip X (px)\r\n\t */\r\n\tpublic set tooltipX(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"tooltipX\", value) && this.tooltip) {\r\n\t\t\tthis.tooltip.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip X (px)\r\n\t */\r\n\tpublic get tooltipX(): number | Percent {\r\n\t\treturn this.getTooltipX();\r\n\t}\r\n\r\n\t/**\r\n\t * DEPRECATION NOTICE: This setting is deprecated in favor of a more flexible\r\n\t * setting: `showTooltipOn`. Please use `showTooltipOn = \"always\"` instead.\r\n\t *\r\n\t * Indicates if this element should display a tooltip permanently.\r\n\t *\r\n\t * Useful, if you want to show permanent tooltips on some items.\r\n\t *\r\n\t * @default false\r\n\t * @since 4.5.4\r\n\t * @deprecated Use `showTooltipOn = \"always\"` instead\r\n\t * @param value Always show tooltip?\r\n\t */\r\n\tpublic set alwaysShowTooltip(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tif (value) {\r\n\t\t\tthis.showTooltipOn = \"always\";\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Always show tooltip?\r\n\t */\r\n\tpublic get alwaysShowTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"showTooltipOn\") == \"always\";\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates when tooltip needs to be shown on this element:\r\n\t *\r\n\t * * `\"hover\"` (default) - Tooltip will be shown when element is hovered on.\r\n\t * * `\"hit\"` - Tooltip will be shown when element is clicked/tapped. Tooltip will be hidden when clicked/tapped anywhere else.\r\n\t * * `\"always\"` - Tooltip will be shown on the element permanently.\r\n\t *\r\n\t * For example, if you would like to show tooltips on all of the columns of\r\n\t * a [[ColumnSeries]]:\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.columns.template.showTooltipOn = \"always\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.columns.template.showTooltipOn = \"always\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * // ...\r\n\t * \"columns\": {\r\n\t * \"showTooltipOn\": \"always\"\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * It can even be set to display on a selected columns via `propertyFields`:\r\n\t *\r\n\t * ```TypeScript\r\n\t * series.columns.template.propertyFields.showTooltipOn = \"tooltip\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * series.columns.template.propertyFields.showTooltipOn = \"tooltip\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"series\": [{\r\n\t * // ...\r\n\t * \"columns\": {\r\n\t * \"propertyFields\": {\r\n\t * \"showTooltipOn\": \"tooltip\"\r\n\t * }\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default \"hover\"\r\n\t * @since 4.7.9\r\n\t * @param value When to show tooltip\r\n\t */\r\n\tpublic set showTooltipOn(value: \"hover\" | \"hit\" | \"always\") {\r\n\t\tif (this.setPropertyValue(\"showTooltipOn\", value)) {\r\n\t\t\tif (value == \"hit\") {\r\n\t\t\t\tthis.clickable = true;\r\n\t\t\t}\r\n\t\t\tif (this.tooltip) {\r\n\t\t\t\tif (value == \"always\") {\r\n\t\t\t\t\tthis.showTooltip();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.handleAlwaysShowTooltip();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return When to show tooltip\r\n\t */\r\n\tpublic get showTooltipOn(): \"hover\" | \"hit\" | \"always\" {\r\n\t\treturn this.getPropertyValue(\"showTooltipOn\");\r\n\t}\r\n\r\n\t/**\r\n\t * Specifies if [[Tooltip]] should follow the mouse or touch pointer or stay\r\n\t * at the fixed position.\r\n\t *\r\n\t * @param value Position\r\n\t */\r\n\tpublic set tooltipPosition(value: \"fixed\" | \"pointer\") {\r\n\t\tthis.setPropertyValue(\"tooltipPosition\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * Position\r\n\t */\r\n\tpublic get tooltipPosition(): \"fixed\" | \"pointer\" {\r\n\t\treturn this.getPropertyValue(\"tooltipPosition\");\r\n\t}\r\n\r\n\t/**\r\n\t * Y coordinate the [[Tooltip]] should be shown at.\r\n\t *\r\n\t * @param value Tooltip Y (px)\r\n\t */\r\n\tpublic set tooltipY(value: number | Percent) {\r\n\t\tif (this.setPercentProperty(\"tooltipY\", value) && this.tooltip) {\r\n\t\t\tthis.tooltip.invalidate();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Tooltip Y (px)\r\n\t */\r\n\tpublic get tooltipY(): number | Percent {\r\n\t\treturn this.getTooltipY();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns Tooltip X coordinate if it's set, or middle of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return X (px)\r\n\t */\r\n\tpublic getTooltipX(): number {\r\n\r\n\t\tlet x = this.getPropertyValue(\"tooltipX\");\r\n\r\n\t\tif (!$type.hasValue(x)) {\r\n\t\t\tx = percent(50);\r\n\t\t}\r\n\r\n\t\tlet value: number;\r\n\t\tif ($type.isNumber(x)) {\r\n\t\t\tvalue = x;\r\n\t\t}\r\n\r\n\t\tif (x instanceof Percent) {\r\n\t\t\tvalue = this.maxLeftSelf + this._measuredWidthSelf * x.value - this.pixelPaddingLeft - this.ex; // overflow is know only for measured items, so this is not always good\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns Tooltip Y coordinate if it's set, or middle of the element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Y (px)\r\n\t */\r\n\tpublic getTooltipY(): number {\r\n\t\tlet y = this.getPropertyValue(\"tooltipY\");\r\n\r\n\t\tif (!$type.hasValue(y)) {\r\n\t\t\ty = percent(50);\r\n\t\t}\r\n\r\n\t\tlet value: number;\r\n\t\tif ($type.isNumber(y)) {\r\n\t\t\tvalue = y;\r\n\t\t}\r\n\r\n\t\tif (y instanceof Percent) {\r\n\t\t\tvalue = this.maxTopSelf + this._measuredHeightSelf * y.value - this.pixelPaddingTop - this.ey; // overflow is know only for measured items, so this is not always good\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = 0;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t/**\r\n\t * Displays a modal or console message with error, and halts any further\r\n\t * processing of this item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param e Error\r\n\t * @todo Implement from applying further actions to this item\r\n\t */\r\n\tpublic raiseCriticalError(e: Error, closable?: boolean) {\r\n\r\n\t\tif (this.svgContainer) {\r\n\t\t\tif (!this._adapterO) {\r\n\t\t\t\tthis.modal.content = e.message;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.modal.content = this._adapterO.apply(\"criticalError\", e).message;\r\n\t\t\t}\r\n\r\n\t\t\tif (!closable) {\r\n\t\t\t\tthis.disabled = true;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.modal.closable = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (!options.suppressErrors) {\r\n\t\t\t\tthis.modal.open();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (options.verbose) {\r\n\t\t\tconsole.log(e);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n * Processes JSON-based config before it is applied to the object.\r\n *\r\n * @ignore Exclude from docs\r\n * @param config Config\r\n */\r\n\tpublic processConfig(config?: { [index: string]: any }): void {\r\n\r\n\t\tif (config) {\r\n\r\n\t\t\t// Tooltip color source\r\n\t\t\tif ($type.hasValue(config.tooltipColorSource) && $type.isString(config.tooltipColorSource) && this.map.hasKey(config.tooltipColorSource)) {\r\n\t\t\t\tconfig.tooltipColorSource = this.map.getKey(config.tooltipColorSource);\r\n\t\t\t}\r\n\r\n\t\t\t// Cursor styles\r\n\t\t\tif ($type.hasValue(config.cursorOverStyle) && $type.isString(config.cursorOverStyle)) {\r\n\t\t\t\tconfig.cursorOverStyle = this.getCursorStyle(config.cursorOverStyle);\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.cursorDowntyle) && $type.isString(config.cursorDowntyle)) {\r\n\t\t\t\tconfig.cursorDowntyle = this.getCursorStyle(config.cursorDowntyle);\r\n\t\t\t}\r\n\t\t\tif ($type.hasValue(config.cursorOptions)) {\r\n\t\t\t\tif ($type.hasValue(config.cursorOptions.overStyle) && $type.isString(config.cursorOptions.overStyle)) {\r\n\t\t\t\t\tconfig.cursorOptions.overStyle = this.getCursorStyle(config.cursorOptions.overStyle);\r\n\t\t\t\t}\r\n\t\t\t\tif ($type.hasValue(config.cursorOptions.downStyle) && $type.isString(config.cursorOptions.downStyle)) {\r\n\t\t\t\t\tconfig.cursorOptions.downStyle = this.getCursorStyle(config.cursorOptions.downStyle);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tsuper.processConfig(config);\r\n\r\n\t\tthis.processDelayedMap();\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Converts string name of the cursor into actual [[MouseCursorStyle]].\r\n\t *\r\n\t * @param style Cursor type\r\n\t * @return Cursor definition\r\n\t */\r\n\tprivate getCursorStyle(style: string): MouseCursorStyle {\r\n\t\tswitch (style) {\r\n\t\t\tcase \"grab\":\r\n\t\t\t\treturn MouseCursorStyle.grab;\r\n\t\t\tcase \"grabbing\":\r\n\t\t\t\treturn MouseCursorStyle.grabbing;\r\n\t\t\tcase \"pointer\":\r\n\t\t\t\treturn MouseCursorStyle.pointer;\r\n\t\t\tcase \"horizontalResize\":\r\n\t\t\t\treturn MouseCursorStyle.horizontalResize;\r\n\t\t\tcase \"verticalResize\":\r\n\t\t\t\treturn MouseCursorStyle.verticalResize;\r\n\t\t\tdefault:\r\n\t\t\t\treturn MouseCursorStyle.default;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * This function is used to sort element's JSON config properties, so that\r\n\t * some properties that absolutely need to be processed last, can be put at\r\n\t * the end.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param a Element 1\r\n\t * @param b Element 2\r\n\t * @return Sorting number\r\n\t */\r\n\tprotected configOrder(a: string, b: string): Ordering {\r\n\t\tif (a == b) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\t// Must come last\r\n\t\telse if (a == \"tooltipColorSource\") {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\t\telse if (b == \"tooltipColorSource\") {\r\n\t\t\treturn -1;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn super.configOrder(a, b);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If `sprite.hide()` is called, we set isHidden to true when sprite is hidden.\r\n\t * This was added becaus hidden state might have visibility set to true and so\r\n\t * there would not be possible to find out if a sprite is technically hidden or not.\r\n\t */\r\n\tpublic get isHidden(): boolean {\r\n\t\tif (this._isHidden) {\r\n\t\t\treturn this._isHidden;\r\n\t\t}\r\n\t\telse if (this._parent) {\r\n\t\t\treturn this._parent.isHidden;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * If this is set to `true`, Sprite, when inited will be instantly hidden\r\n\t * (\"hidden\" state applied) and then shown (\"default\" state applied).\r\n\t *\r\n\t * If your \"default\" state's `transitionDuration > 0` this will result in\r\n\t * initial animation from \"hidden\" state to \"default\" state.\r\n\t *\r\n\t * If you need a Sprite which has `showOnInit = true` not to be shown\r\n\t * initially, set `sprite.hidden = true`. Setting `sprite.visible = false`\r\n\t * will not prevent the animation and the sprite will be shown.\r\n\t *\r\n\t * @param value show on init?\r\n\t */\r\n\tpublic set showOnInit(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tthis.setShowOnInit(value);\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected setShowOnInit(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"showOnInit\", value)) {\r\n\t\t\tif (!this.isTemplate) {\r\n\t\t\t\tif (value && !this.inited && !this.hidden) {\r\n\t\t\t\t\tthis._showOnInitDisposer = new MultiDisposer([\r\n\t\t\t\t\t\tregistry.events.once(\"enterframe\", this.hideInitially, this),\r\n\t\t\t\t\t\tthis.events.once(\"beforevalidated\", this.hideInitially, this, false),\r\n\t\t\t\t\t\tthis.events.on(\"inited\", this.appear, this, false)\r\n\t\t\t\t\t])\r\n\r\n\t\t\t\t\tthis._disposers.push(this._showOnInitDisposer);\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (this._showOnInitDisposer) {\r\n\t\t\t\t\t\tthis._showOnInitDisposer.dispose();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected hideInitially() {\r\n\t\tif (!this.isDisposed()) {\r\n\t\t\tthis.appeared = false;\r\n\t\t\t//if (!this.hidden && !this._isHidden) { // not good for series, as on enterframe it doesn't have data items yet.\r\n\t\t\tif (!this.inited) {\r\n\t\t\t\tthis.hide(0);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Hides the chart instantly and then shows it. If defaultState.transitionDuration > 0, this will result an animation in which properties of hidden state will animate to properties of visible state.\r\n\t */\r\n\tpublic appear() {\r\n\t\tthis.appeared = false;\r\n\t\tif (!this.hidden && !this.isHidden) {\r\n\t\t\tthis.hide(0);\r\n\t\t}\r\n\t\tif (!this.hidden) {\r\n\r\n\t\t\tlet animation = this.show();\r\n\r\n\t\t\tif (animation && !animation.isFinished()) {\r\n\t\t\t\tthis.addDisposer(animation.events.on(\"animationended\", () => {\r\n\t\t\t\t\tthis.appeared = true;\r\n\t\t\t\t\tthis.dispatch(\"appeared\");\r\n\t\t\t\t}))\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.appeared = true;\r\n\t\t\t\tthis.dispatch(\"appeared\");\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.appeared = true;\r\n\t\t\tthis.dispatch(\"appeared\");\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Show on init?\r\n\t */\r\n\tpublic get showOnInit(): boolean {\r\n\t\treturn this.getPropertyValue(\"showOnInit\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * If a sprite has `showOnInit = true`, it will animate from \"hidden\" to\r\n\t * \"default\" state when initialized. To prevent this but keep\r\n\t * `showOnInit = true`, you can set `sprite.hidden = true`.\r\n\t *\r\n\t * @param value initially hidden?\r\n\t */\r\n\tpublic set hidden(value: boolean) {\r\n\t\tvalue = $type.toBoolean(value);\r\n\t\tthis.setPropertyValue(\"hidden\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Is initially hidden?\r\n\t */\r\n\tpublic get hidden(): boolean {\r\n\t\treturn this.getPropertyValue(\"hidden\");\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns bounding box (square) for this element.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic get bbox(): IRectangle {\r\n\t\tif (this.definedBBox) {\r\n\t\t\treturn this.definedBBox;\r\n\t\t}\r\n\t\treturn this._bbox;\r\n\t}\r\n\r\n\t/**\r\n\t * A list of plugins (objects that implement [[IPlugin]] interface) attached\r\n\t * to this object.\r\n\t *\r\n\t * @since 4.2.2\r\n\t * @return List of plugins\r\n\t */\r\n\tpublic get plugins(): List<IPlugin> {\r\n\t\tif (!this._plugins) {\r\n\t\t\tthis._plugins = new List<IPlugin>();\r\n\t\t\tthis._disposers.push(this._plugins.events.on(\"inserted\", (ev) => {\r\n\t\t\t\tev.newValue.target = this;\r\n\t\t\t\tev.newValue.init();\r\n\t\t\t}));\r\n\t\t\tthis._disposers.push(new ListDisposer(this._plugins));\r\n\t\t}\r\n\t\treturn this._plugins;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Called during the System.update method\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic _systemUpdate(skippedSprites: Array<Sprite>) {\r\n\t\tthis.validate();\r\n\t}\r\n\r\n\t/**\r\n\t * Called during the System.update method\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic _systemCheckIfValidate(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Called during the System.validatePositions method\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic _systemValidatePositions() {\r\n\t\tthis.validatePosition();\r\n\t}\r\n\r\n\t/**\r\n\t * Called during the System.validateLayouts method\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic _systemValidateLayouts() {\r\n\r\n\t}\r\n}\r\n\r\n/**\r\n * Register class in system, so that it can be instantiated using its name from\r\n * anywhere.\r\n *\r\n * @ignore\r\n */\r\nregistry.registeredClasses[\"Sprite\"] = Sprite;\r\n"]}
\No newline at end of file