UNPKG

164 kBSource Map (JSON)View Raw
1{"version":3,"file":"DateAxis.js","sourceRoot":"","sources":["../../../../../src/.internal/charts/axes/DateAxis.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * DateAxis module\r\n */\r\n\r\n/**\r\n * ============================================================================\r\n * IMPORTS\r\n * ============================================================================\r\n * @hidden\r\n */\r\nimport { ValueAxis, ValueAxisDataItem, IValueAxisProperties, IValueAxisDataFields, IValueAxisAdapters, IValueAxisEvents } from \"./ValueAxis\";\r\nimport { AxisItemLocation } from \"./Axis\";\r\nimport { AxisRenderer } from \"./AxisRenderer\";\r\nimport { AxisTick } from \"./AxisTick\";\r\nimport { AxisLabel } from \"./AxisLabel\";\r\nimport { AxisFill } from \"./AxisFill\";\r\nimport { List } from \"../../core/utils/List\";\r\nimport { Dictionary } from \"../../core/utils/Dictionary\";\r\nimport { IPoint, IOrientationPoint } from \"../../core/defs/IPoint\";\r\nimport { Grid } from \"./Grid\";\r\nimport { XYSeries, XYSeriesDataItem } from \"../series/XYSeries\";\r\nimport { LineSeriesDataItem } from \"../series/LineSeries\";\r\nimport { TimeUnit } from \"../../core/defs/TimeUnit\";\r\nimport { ITimeInterval } from \"../../core/defs/ITimeInterval\";\r\nimport { IMinMaxStep } from \"./ValueAxis\";\r\nimport { DateAxisBreak } from \"./DateAxisBreak\";\r\nimport { registry } from \"../../core/Registry\";\r\nimport * as $time from \"../../core/utils/Time\";\r\nimport * as $type from \"../../core/utils/Type\";\r\nimport * as $iter from \"../../core/utils/Iterator\";\r\nimport * as $math from \"../../core/utils/Math\";\r\nimport * as $array from \"../../core/utils/Array\";\r\nimport * as $object from \"../../core/utils/Object\";\r\nimport * as $utils from \"../../core/utils/Utils\";\r\nimport { IRange } from \"../../core/defs/IRange\";\r\nimport { DateFormatter } from \"../../core/formatters/DateFormatter\";\r\nimport { OrderedListTemplate } from \"../../core/utils/SortedList\";\r\nimport { Animation } from \"../../core/utils/Animation\";\r\n\r\n/**\r\n * ============================================================================\r\n * DATA ITEM\r\n * ============================================================================\r\n * @hidden\r\n */\r\n\r\n/**\r\n * Defines data item for [[DateAxis]].\r\n *\r\n * @see {@link DataItem}\r\n */\r\nexport class DateAxisDataItem extends ValueAxisDataItem {\r\n\r\n\t/**\r\n\t * Defines a type of [[Component]] this data item is used for.\r\n\t */\r\n\tpublic _component!: DateAxis;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxisDataItem\";\r\n\t\tthis.applyTheme();\r\n\r\n\t\tthis.values.date = {};\r\n\t\tthis.values.endDate = {};\r\n\t}\r\n\r\n\t/**\r\n\t * Date position of the data item.\r\n\t *\r\n\t * @param date Date\r\n\t */\r\n\tpublic set date(date: Date) {\r\n\t\tthis.setDate(\"date\", date);\r\n\t\tthis.value = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date\r\n\t */\r\n\tpublic get date(): Date {\r\n\t\treturn this.dates[\"date\"];\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * End date for data item.\r\n\t *\r\n\t * @param date End date\r\n\t */\r\n\tpublic set endDate(date: Date) {\r\n\t\tthis.setDate(\"endDate\", date);\r\n\t\tthis.endValue = date.getTime();\r\n\t}\r\n\r\n\t/**\r\n\t * @return End date\r\n\t */\r\n\tpublic get endDate(): Date {\r\n\t\treturn this.dates[\"endDate\"];\r\n\t}\r\n\r\n}\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 data fields for [[DateAxis]].\r\n */\r\nexport interface IDateAxisDataFields extends IValueAxisDataFields {\r\n\r\n\t/**\r\n\t * Date.\r\n\t */\r\n\tdate?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines properties for [[DateAxis]].\r\n */\r\nexport interface IDateAxisProperties extends IValueAxisProperties {\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * @default false\r\n\t */\r\n\tskipEmptyPeriods?: boolean;\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tmarkUnitChange?: boolean;\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t */\r\n\tsnapTooltip?: boolean;\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t */\r\n\ttooltipDateFormat?: string | Intl.DateTimeFormatOptions;\r\n\r\n\t/**\r\n\t * Indicates if data should be aggregated to composide data items if there\r\n\t * are more data items in selected range than `groupCount`.\r\n\t *\r\n\t * @default false\r\n\t * @since 4.7.0\r\n\t */\r\n\tgroupData?: boolean;\r\n\r\n\t/**\r\n\t * Indicates threshold of data items in selected range at which to start\r\n\t * aggregating data items if `groupData = true`.\r\n\t * \r\n\t * @default 200\r\n\t * @since 4.7.0\r\n\t */\r\n\tgroupCount?: number;\r\n\r\n\t/**\r\n\t * Disables automatic selection of data grouping intervals and always uses\r\n\t * `groupInterval` if set. Works only if `groupData = true`.\r\n\t * \r\n\t * @since 4.9.24\r\n\t */\r\n\tgroupInterval?: ITimeInterval;\r\n\r\n\t/**\r\n\t * If set will recalculate all timestamps in data by applying specific offset\r\n\t * in minutes.\r\n\t *\r\n\t * IMPORTANT: do not set `timezoneOffset` on both `DateAxis` and `dateFormatter`. It\r\n\t * will skew your results by applying offset twice.\r\n\t *\r\n\t * @since 4.8.5\r\n\t */\r\n\ttimezoneOffset?: number;\r\n\r\n\t/**\r\n\t * If set will recalculate all timestamps in data to specific named timezone,\r\n\t * e.g. `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`, etc.\r\n\t *\r\n\t * IMPORTANT: do not set `timezone` on both `DateAxis` and `dateFormatter`. It\r\n\t * will skew your results by applying timezone twice.\r\n\t * \r\n\t * @since 4.10.1\r\n\t */\r\n\ttimezone?: string;\r\n\r\n}\r\n\r\n/**\r\n * Defines events for [[DateAxis]].\r\n */\r\nexport interface IDateAxisEvents extends IValueAxisEvents {\r\n\t/**\r\n\t * Invoked when data grouping is on and grouping period is changed. You can find our the period via dateAxis.currentDataSetId property.\r\n\t */\r\n\tgroupperiodchanged: IDateAxisEvents;\r\n}\r\n\r\n/**\r\n * Defines adapters for [[DateAxis]].\r\n *\r\n * @see {@link Adapter}\r\n */\r\nexport interface IDateAxisAdapters extends IValueAxisAdapters, IDateAxisProperties { }\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 * Used to create a date/time-based axis for the chart.\r\n *\r\n * ```TypeScript\r\n * // Create the axis\r\n * let xAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * xAxis.title.text = \"Time\";\r\n * ```\r\n * ```JavaScript\r\n * // Create the axis\r\n * var valueAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n *\r\n * // Set settings\r\n * valueAxis.title.text = \"Time\";\r\n * ```\r\n * ```JSON\r\n * \"xAxes\": [{\r\n * \"type\": \"DateAxis\",\r\n * \"title\": {\r\n * \"text\": \"Time\"\r\n * }\r\n * }]\r\n * ```\r\n *\r\n * @see {@link IDateAxisEvents} for a list of available Events\r\n * @see {@link IDateAxisAdapters} for a list of available Adapters\r\n * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/} got `DateAxis` documention\r\n * @important\r\n */\r\nexport class DateAxis<T extends AxisRenderer = AxisRenderer> extends ValueAxis<T> {\r\n\r\n\t/**\r\n\t * Defines data fields.\r\n\t */\r\n\tpublic _dataFields: IDateAxisDataFields;\r\n\r\n\t/**\r\n\t * Defines available properties.\r\n\t */\r\n\tpublic _properties!: IDateAxisProperties;\r\n\r\n\t/**\r\n\t * Defines available adapters.\r\n\t */\r\n\tpublic _adapter!: IDateAxisAdapters;\r\n\r\n\t/**\r\n\t * Defines available events.\r\n\t */\r\n\tpublic _events!: IDateAxisEvents;\r\n\r\n\t/**\r\n\t * Defines the type of the Date Items.\r\n\t */\r\n\tpublic _dataItem: DateAxisDataItem;\r\n\r\n\t/**\r\n\t * Defines the type of the axis breaks.\r\n\t */\r\n\tpublic _axisBreak: DateAxisBreak;\r\n\r\n\tprotected _gapBreaks: boolean = false;\r\n\r\n\t/**\r\n\t * A list of date/time intervals for Date axis.\r\n\t *\r\n\t * This define various granularities available for the axis. For example\r\n\t * if you have an axis spanning an hour, and space for 6 grid lines / labels\r\n\t * the axis will choose the granularity of 10 minutes, displaying a label\r\n\t * every 10 minutes.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1 },\r\n\t * { timeUnit: \"millisecond\", count: 5 },\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 50 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"millisecond\", count: 500 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 5 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"second\", count: 30 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 5 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 30 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"hour\", count: 3 },\r\n\t * { timeUnit: \"hour\", count: 6 },\r\n\t * { timeUnit: \"hour\", count: 12 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 2 },\r\n\t * { timeUnit: \"day\", count: 3 },\r\n\t * { timeUnit: \"day\", count: 4 },\r\n\t * { timeUnit: \"day\", count: 5 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 2 },\r\n\t * { timeUnit: \"month\", count: 3 },\r\n\t * { timeUnit: \"month\", count: 6 },\r\n\t * { timeUnit: \"year\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 2 },\r\n\t * { timeUnit: \"year\", count: 5 },\r\n\t * { timeUnit: \"year\", count: 10 },\r\n\t * { timeUnit: \"year\", count: 50 },\r\n\t * { timeUnit: \"year\", count: 100 }\r\n\t * ]\r\n\t * ```\r\n\t */\r\n\tpublic gridIntervals: List<ITimeInterval> = new List<ITimeInterval>();\r\n\r\n\t/**\r\n\t * If data aggregation is enabled by setting Axis' `groupData = true`, the\r\n\t * chart will try to aggregate data items into grouped data items.\r\n\t *\r\n\t * If there are more data items in selected period than `groupCount`, it will\r\n\t * group data items into bigger period.\r\n\t *\r\n\t * For example seconds might be grouped into 10-second aggregate data items.\r\n\t *\r\n\t * This setting indicates what group intervals can the chart group to.\r\n\t *\r\n\t * Default intervals:\r\n\t *\r\n\t * ```JSON\r\n\t * [\r\n\t * { timeUnit: \"millisecond\", count: 1},\r\n\t * { timeUnit: \"millisecond\", count: 10 },\r\n\t * { timeUnit: \"millisecond\", count: 100 },\r\n\t * { timeUnit: \"second\", count: 1 },\r\n\t * { timeUnit: \"second\", count: 10 },\r\n\t * { timeUnit: \"minute\", count: 1 },\r\n\t * { timeUnit: \"minute\", count: 10 },\r\n\t * { timeUnit: \"hour\", count: 1 },\r\n\t * { timeUnit: \"day\", count: 1 },\r\n\t * { timeUnit: \"week\", count: 1 },\r\n\t * { timeUnit: \"month\", count: 1 },\r\n\t * { timeUnit: \"year\", count: 1 }\r\n\t * ]\r\n\t * ```\r\n\t * `groupData = true` does not work in combination with `skipEmptyPeriods = true`.\r\n\t * \r\n\t * @since 4.7.0\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n\t */\r\n\tpublic groupIntervals: List<ITimeInterval> = new List<ITimeInterval>();\r\n\r\n\t/**\r\n\t * A collection of date formats to use when formatting different time units\r\n\t * on Date/time axis.\r\n\t *\r\n\t * Actual defaults will depend on the language locale set for the chart.\r\n\t *\r\n\t * To override format for a specific time unit, say days, you need to set\r\n\t * the appropriate key to a format string. E.g.:\r\n\t *\r\n\t * ```TypeScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * axis.dateFormats.setKey(\"day\", \"MMMM d, yyyy\");\r\n\t * ```\r\n\t * ```JSON\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"dateFormats\": {\r\n\t * \"day\": \"MMMM d, yyyy\"\r\n\t * }\r\n\t * }]\r\n\t * ```\r\n\t *\r\n\t * @see {@link DateFormatter}\r\n\t */\r\n\tpublic dateFormats: Dictionary<TimeUnit, string | Intl.DateTimeFormatOptions> = new Dictionary<TimeUnit, string | Intl.DateTimeFormatOptions>();\r\n\r\n\t/**\r\n\t * These formats are applied to labels that are first in a larger unit.\r\n\t *\r\n\t * For example, if we have a DateAxis with days on it, the first day of month\r\n\t * indicates a break in month - a start of the bigger period.\r\n\t *\r\n\t * For those labels, `periodChangeDateFormats` are applied instead of\r\n\t * `dateFormats`.\r\n\t *\r\n\t * This allows us implement convenient structures, like instead of:\r\n\t *\r\n\t * `Jan 1 - Jan 2 - Jan 3 - ...`\r\n\t *\r\n\t * We can have:\r\n\t *\r\n\t * `Jan - 1 - 2 - 3 - ...`\r\n\t *\r\n\t * This can be disabled by setting `markUnitChange = false`.\r\n\t */\r\n\tpublic periodChangeDateFormats: Dictionary<TimeUnit, string | Intl.DateTimeFormatOptions> = new Dictionary<TimeUnit, string | Intl.DateTimeFormatOptions>();\r\n\r\n\t/**\r\n\t * At which intervals grid elements are displayed.\r\n\t */\r\n\tprotected _gridInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * [_intervalDuration description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _intervalDuration: number;\r\n\r\n\t/**\r\n\t * [_gridDate description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _gridDate: Date;\r\n\r\n\t/**\r\n\t * [_nextGridUnit description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _nextGridUnit: TimeUnit;\r\n\r\n\t/**\r\n\t * User-defined granularity of data.\r\n\t */\r\n\tprotected _baseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * This is base interval of the main data set.\r\n\t */\r\n\tprotected _mainBaseInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * This is base interval of the currently selected data set.\r\n\t */\r\n\tprotected _groupInterval: ITimeInterval;\r\n\r\n\t/**\r\n\t * Actual interval (granularity) derived from the actual data.\r\n\t */\r\n\tprotected _baseIntervalReal: ITimeInterval = { timeUnit: \"day\", count: 1 };\r\n\r\n\t/**\r\n\t */\r\n\tprotected _prevSeriesTime: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * [_minDifference description]\r\n\t *\r\n\t * @todo Description\r\n\t */\r\n\tprotected _minDifference: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A function which applies fills to axis cells.\r\n\t *\r\n\t * Default function fills every second fill. You can set this to a function\r\n\t * that follows some other logic.\r\n\t *\r\n\t * Function should accept a [[DateAxisDataItem]] and modify its `axisFill`\r\n\t * property accordingly.\r\n\t */\r\n\tpublic fillRule(dataItem: this[\"_dataItem\"]): void {\r\n\t\tlet value = dataItem.value;\r\n\t\tlet axis = dataItem.component;\r\n\t\tlet gridInterval = axis._gridInterval;\r\n\t\tlet gridDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tif (Math.round((value - axis.min) / gridDuration) / 2 == Math.round(Math.round((value - axis.min) / gridDuration) / 2)) {\r\n\t\t\tdataItem.axisFill.__disabled = true;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tdataItem.axisFill.__disabled = false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _firstWeekDay: number = 1;\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected _df: DateFormatter;\r\n\r\n\t/**\r\n\t * A collection of start timestamps to use as axis' min timestamp for\r\n\t * particular data item item periods.\r\n\t *\r\n\t * @since 4.7.0\r\n\t * @readonly\r\n\t */\r\n\tpublic groupMin: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * A collection of start timestamps to use as axis' max timestamp for\r\n\t * particular data item item periods.\r\n\t *\r\n\t * @since 4.7.0\r\n\t * @readonly\r\n\t */\r\n\tpublic groupMax: { [index: string]: number } = {};\r\n\r\n\t/**\r\n\t * Date of the last shown axis tooltip.\r\n\t *\r\n\t * @since 4.9.7\r\n\t * @readonly\r\n\t */\r\n\tpublic tooltipDate: Date;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t */\r\n\tconstructor() {\r\n\r\n\t\t// Init\r\n\t\tsuper();\r\n\t\tthis.className = \"DateAxis\";\r\n\r\n\t\tthis.setPropertyValue(\"markUnitChange\", true);\r\n\t\tthis.snapTooltip = true;\r\n\t\tthis.tooltipPosition = \"pointer\";\r\n\r\n\t\tthis.setPropertyValue(\"groupData\", false);\r\n\t\tthis.groupCount = 200;\r\n\r\n\t\tthis.events.on(\"parentset\", this.getDFFormatter, this, false);\r\n\r\n\t\t// Translatable defaults are applied in `applyInternalDefaults()`\r\n\t\t// ...\r\n\r\n\t\t// Define default intervals\r\n\t\tthis.gridIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 5 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 50 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 500 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 5 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"second\", count: 30 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 5 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 15 },\r\n\t\t\t{ timeUnit: \"minute\", count: 30 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"hour\", count: 3 },\r\n\t\t\t{ timeUnit: \"hour\", count: 6 },\r\n\t\t\t{ timeUnit: \"hour\", count: 12 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 2 },\r\n\t\t\t{ timeUnit: \"day\", count: 3 },\r\n\t\t\t{ timeUnit: \"day\", count: 4 },\r\n\t\t\t{ timeUnit: \"day\", count: 5 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 2 },\r\n\t\t\t{ timeUnit: \"month\", count: 3 },\r\n\t\t\t{ timeUnit: \"month\", count: 6 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 2 },\r\n\t\t\t{ timeUnit: \"year\", count: 5 },\r\n\t\t\t{ timeUnit: \"year\", count: 10 },\r\n\t\t\t{ timeUnit: \"year\", count: 50 },\r\n\t\t\t{ timeUnit: \"year\", count: 100 },\r\n\t\t\t{ timeUnit: \"year\", count: 200 },\r\n\t\t\t{ timeUnit: \"year\", count: 500 },\r\n\t\t\t{ timeUnit: \"year\", count: 1000 },\r\n\t\t\t{ timeUnit: \"year\", count: 2000 },\r\n\t\t\t{ timeUnit: \"year\", count: 5000 },\r\n\t\t\t{ timeUnit: \"year\", count: 10000 },\r\n\t\t\t{ timeUnit: \"year\", count: 100000 }\r\n\t\t]);\r\n\r\n\t\tthis.groupIntervals.pushAll([\r\n\t\t\t{ timeUnit: \"millisecond\", count: 1 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 10 },\r\n\t\t\t{ timeUnit: \"millisecond\", count: 100 },\r\n\t\t\t{ timeUnit: \"second\", count: 1 },\r\n\t\t\t{ timeUnit: \"second\", count: 10 },\r\n\t\t\t{ timeUnit: \"minute\", count: 1 },\r\n\t\t\t{ timeUnit: \"minute\", count: 10 },\r\n\t\t\t{ timeUnit: \"hour\", count: 1 },\r\n\t\t\t{ timeUnit: \"day\", count: 1 },\r\n\t\t\t{ timeUnit: \"week\", count: 1 },\r\n\t\t\t{ timeUnit: \"month\", count: 1 },\r\n\t\t\t{ timeUnit: \"year\", count: 1 }\r\n\t\t]);\r\n\r\n\t\t// Set field name\r\n\t\tthis.axisFieldName = \"date\";\r\n\r\n\t\t// Apply theme\r\n\t\tthis.applyTheme();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets defaults that instantiate some objects that rely on parent, so they\r\n\t * cannot be set in constructor.\r\n\t */\r\n\tprotected applyInternalDefaults(): void {\r\n\t\tsuper.applyInternalDefaults();\r\n\r\n\t\t// Set default date formats\r\n\t\tif (!this.dateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.dateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.dateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.dateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.dateFormats.setKey(\"hour\", this.language.translate(\"_date_hour\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.dateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.dateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\t // not a mistake\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.dateFormats.setKey(\"month\", this.language.translate(\"_date_month\"));\r\n\t\t}\r\n\t\tif (!this.dateFormats.hasKey(\"year\")) {\r\n\t\t\tthis.dateFormats.setKey(\"year\", this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"millisecond\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"millisecond\", this.language.translate(\"_date_millisecond\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"second\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"second\", this.language.translate(\"_date_second\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"minute\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"minute\", this.language.translate(\"_date_minute\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"hour\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"hour\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"day\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"day\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"week\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"week\", this.language.translate(\"_date_day\"));\r\n\t\t}\r\n\t\tif (!this.periodChangeDateFormats.hasKey(\"month\")) {\r\n\t\t\tthis.periodChangeDateFormats.setKey(\"month\", this.language.translate(\"_date_month\") + \" \" + this.language.translate(\"_date_year\"));\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[DataItem]] of the type appropriate for this object.\r\n\t *\r\n\t * @see {@link DataItem}\r\n\t * @return Data Item\r\n\t */\r\n\tprotected createDataItem(): this[\"_dataItem\"] {\r\n\t\treturn new DateAxisDataItem();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a new/empty [[AxisBreak]] of the appropriate type.\r\n\t *\r\n\t * @return Axis break\r\n\t */\r\n\tprotected createAxisBreak(): this[\"_axisBreak\"] {\r\n\t\treturn new DateAxisBreak();\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis' data items.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateDataItems(): void {\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet start: number = this.start;\r\n\t\tlet end: number = this.end;\r\n\t\tlet baseDuration = this.baseDuration;\r\n\t\tlet periodCount: number = (this.max - this.min) / baseDuration;\r\n\r\n\t\tthis._firstWeekDay = this.getFirstWeekDay();\r\n\t\tthis.getDFFormatter();\r\n\r\n\t\tsuper.validateDataItems();\r\n\r\n\t\tlet mainBaseDuration = $time.getDuration(this.mainBaseInterval.timeUnit, this.mainBaseInterval.count)\r\n\r\n\t\tthis.maxZoomFactor = Math.max(1, (this.max - this.min) / mainBaseDuration);\r\n\r\n\t\tthis._deltaMinMax = this.baseDuration / 2;\r\n\r\n\t\t// allows to keep selection of the same size\r\n\t\tlet newPeriodCount: number = (this.max - this.min) / baseDuration;\r\n\t\tstart = start + (end - start) * (1 - periodCount / newPeriodCount);\r\n\t\tthis.zoom({ start: start, end: end }, false, true); // added instantlyto solve zoomout problem when we have axes gaps. @todo: check how this affects maxZoomFactor\r\n\t}\r\n\r\n\t/**\r\n\t * Handles process after zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Does nothing?\r\n\t */\r\n\tpublic handleSelectionExtremesChange(): void {\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates all positions, related to axis as per current zoom.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic calculateZoom(): void {\r\n\t\tsuper.calculateZoom();\r\n\r\n\t\tlet difference = this.adjustDifference(this._minZoomed, this._maxZoomed);\r\n\t\tlet dataSetChanged = false;\r\n\r\n\t\t// if data has to be grouped, choose interval and set dataset\r\n\t\tif (this.groupData && $type.hasValue(difference)) {\r\n\t\t\tlet mainBaseInterval = this.mainBaseInterval;\r\n\r\n\t\t\tlet modifiedDifference = difference + (this.startLocation + (1 - this.endLocation)) * this.baseDuration;\r\n\t\t\tlet groupInterval: ITimeInterval;\r\n\t\t\tif (this.groupInterval) {\r\n\t\t\t\tgroupInterval = { ...this.groupInterval }\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tgroupInterval = this.chooseInterval(0, modifiedDifference, this.groupCount, this.groupIntervals);\r\n\t\t\t\tif ($time.getDuration(groupInterval.timeUnit, groupInterval.count) < $time.getDuration(mainBaseInterval.timeUnit, mainBaseInterval.count)) {\r\n\t\t\t\t\tgroupInterval = { ...mainBaseInterval };\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\tthis._groupInterval = groupInterval;\r\n\t\t\tlet newId = groupInterval.timeUnit + groupInterval.count;\r\n\t\t\tif (this._currentDataSetId != newId) {\r\n\t\t\t\tthis._currentDataSetId = newId;\r\n\t\t\t\tthis.dispatch(\"groupperiodchanged\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\t\tif (series.setDataSet(this._currentDataSetId)) {\r\n\t\t\t\t\t\tdataSetChanged = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tlet gridInterval: ITimeInterval = this.chooseInterval(0, difference, this._gridCount);\r\n\r\n\t\tif ($time.getDuration(gridInterval.timeUnit, gridInterval.count) < this.baseDuration) {\r\n\t\t\tgridInterval = { ...this.baseInterval };\r\n\t\t}\r\n\r\n\t\tthis._gridInterval = gridInterval;\r\n\t\tthis._nextGridUnit = $time.getNextUnit(gridInterval.timeUnit);\r\n\r\n\t\t// the following is needed to avoid grid flickering while scrolling\r\n\t\tthis._intervalDuration = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\t\tthis._gridDate = $time.round(\r\n\t\t\tnew Date(this.minZoomed - $time.getDuration(gridInterval.timeUnit, gridInterval.count)),\r\n\t\t\tgridInterval.timeUnit,\r\n\t\t\tgridInterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tnew Date(this.min),\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\r\n\t\t// tell series start/end\r\n\t\t$iter.each(this.series.iterator(), (series) => {\r\n\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\tlet field = <keyof XYSeriesDataItem>series.getAxisField(this);\r\n\r\n\t\t\t\tlet minZoomed = $time.round(\r\n\t\t\t\t\tnew Date(this._minZoomed + this.baseDuration * 0.05),\r\n\t\t\t\t\tthis.baseInterval.timeUnit, this.baseInterval.count,\r\n\t\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t).getTime();\r\n\t\t\t\tlet minZoomedStr = minZoomed.toString();\r\n\t\t\t\tlet startDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(minZoomedStr + series.currentDataSetId);\r\n\r\n\t\t\t\tlet startIndex: number = 0;\r\n\t\t\t\tif (this.start != 0) {\r\n\t\t\t\t\tif (startDataItem) {\r\n\t\t\t\t\t\tstartDataItem = this.findFirst(startDataItem, minZoomed, field);\r\n\t\t\t\t\t\tstartIndex = startDataItem.index;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tstartIndex = series.dataItems.findClosestIndex(this._minZoomed, (x) => <number>x[field], \"left\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// 1 millisecond is removed so that if only first item is selected, it would not count in the second.\r\n\t\t\t\tlet baseInterval = this.baseInterval;\r\n\t\t\t\tlet maxZoomed = $time.add(\r\n\t\t\t\t\t$time.round(\r\n\t\t\t\t\t\tnew Date(this._maxZoomed),\r\n\t\t\t\t\t\tbaseInterval.timeUnit,\r\n\t\t\t\t\t\tbaseInterval.count,\r\n\t\t\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\t\tundefined,\r\n\t\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t\t),\r\n\t\t\t\t\tbaseInterval.timeUnit,\r\n\t\t\t\t\tbaseInterval.count,\r\n\t\t\t\t\tthis._df.utc\r\n\t\t\t\t).getTime();\r\n\r\n\t\t\t\tlet maxZoomedStr = maxZoomed.toString();\r\n\t\t\t\tlet endDataItem = series.dataItemsByAxis.getKey(this.uid).getKey(maxZoomedStr + series.currentDataSetId);\r\n\t\t\t\tlet endIndex: number = series.dataItems.length;\r\n\t\t\t\tif (this.end != 1) {\r\n\t\t\t\t\tif (endDataItem) {\r\n\t\t\t\t\t\tendIndex = endDataItem.index;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tmaxZoomed -= 1;\r\n\t\t\t\t\t\tendIndex = series.dataItems.findClosestIndex(maxZoomed, (x) => <number>x[field], \"right\");\r\n\t\t\t\t\t\t// not good - if end is in the gap, indexes go like 5,4,3,4,2,1\r\n\t\t\t\t\t\t//if (endIndex < series.dataItems.length) {\r\n\t\t\t\t\t\tendIndex++;\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\tif (series.max(this) < minZoomed) {\r\n\t\t\t\t\tseries.startIndex = series.dataItems.length;\r\n\t\t\t\t\tseries.endIndex = series.dataItems.length;\r\n\t\t\t\t\tseries.outOfRange = true;\r\n\t\t\t\t}\r\n\t\t\t\telse if (series.min(this) > maxZoomed) {\r\n\t\t\t\t\tseries.startIndex = 0;\r\n\t\t\t\t\tseries.endIndex = 0;\r\n\t\t\t\t\tseries.outOfRange = true;\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tseries.outOfRange = false;\r\n\t\t\t\t\tseries.startIndex = startIndex;\r\n\t\t\t\t\tseries.endIndex = endIndex;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//\tconsole.log(series.name, startIndex, endIndex);\r\n\r\n\t\t\t\tif (!dataSetChanged && series.dataRangeInvalid) {\r\n\t\t\t\t\tseries.validateDataRange();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected findFirst(dataItem: XYSeriesDataItem, time: number, key: string): XYSeriesDataItem {\r\n\t\tlet index = dataItem.index;\r\n\r\n\t\tif (index > 0) {\r\n\t\t\tlet series = dataItem.component;\r\n\t\t\tlet previousDataItem = series.dataItems.getIndex(index - 1);\r\n\r\n\t\t\tlet previousDate = (<any>previousDataItem)[key];\r\n\r\n\t\t\tif (!previousDate || previousDate.getTime() < time) {\r\n\t\t\t\treturn dataItem;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\treturn this.findFirst(previousDataItem, time, key);\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn dataItem;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * (Re)validates data.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic validateData(): void {\r\n\t\tsuper.validateData();\r\n\t\tif (!$type.isNumber(this.baseInterval.count)) {\r\n\t\t\tthis.baseInterval.count = 1;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic get minDifference(): number {\r\n\t\tlet minDifference = Number.MAX_VALUE;\r\n\r\n\t\tthis.series.each((series) => {\r\n\t\t\tif (minDifference > this._minDifference[series.uid]) {\r\n\t\t\t\tminDifference = this._minDifference[series.uid];\r\n\t\t\t}\r\n\t\t})\r\n\r\n\t\tif (minDifference == Number.MAX_VALUE || minDifference == 0) {\r\n\t\t\tminDifference = $time.getDuration(\"day\");\r\n\t\t}\r\n\r\n\t\treturn minDifference;\r\n\t}\r\n\r\n\t/**\r\n\t * [dataChangeUpdate description]\r\n\t *\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic seriesDataChangeUpdate(series: XYSeries): void {\r\n\t\tthis._minDifference[series.uid] = Number.MAX_VALUE;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItems description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic postProcessSeriesDataItems(series?: XYSeries): void {\r\n\t\tthis._firstWeekDay = this.getFirstWeekDay();\r\n\t\tif (series) {\r\n\t\t\tthis.seriesGroupUpdate(series);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tthis.seriesGroupUpdate(series);\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tthis.addEmptyUnitsBreaks();\r\n\t}\r\n\r\n\tprotected seriesGroupUpdate(series: XYSeries) {\r\n\t\tif (JSON.stringify(series._baseInterval[this.uid]) != JSON.stringify(this.mainBaseInterval)) {\r\n\r\n\t\t\tseries._baseInterval[this.uid] = this.mainBaseInterval;\r\n\r\n\t\t\tseries.mainDataSet.each((dataItem) => {\r\n\t\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t\t});\r\n\r\n\t\t\tif (this.groupData) {\r\n\t\t\t\tthis.groupSeriesData(series);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates series group data.\r\n\t * \r\n\t * @param series Series\r\n\t * @ignore\r\n\t */\r\n\tpublic groupSeriesData(series: XYSeries): void {\r\n\t\tif (series.baseAxis == this && series.dataItems.length > 0 && !series.dataGrouped) {\r\n\r\n\t\t\tseries.bulletsContainer.removeChildren();\r\n\r\n\t\t\t// make array of intervals which will be used;\r\n\t\t\tlet intervals: ITimeInterval[] = [];\r\n\t\t\tlet mainBaseInterval = this.mainBaseInterval;\r\n\t\t\tlet mainIntervalDuration = $time.getDuration(mainBaseInterval.timeUnit, mainBaseInterval.count);\r\n\r\n\t\t\tthis.groupIntervals.each((interval) => {\r\n\t\t\t\tlet intervalDuration = $time.getDuration(interval.timeUnit, interval.count);\r\n\t\t\t\tif ((intervalDuration > mainIntervalDuration && intervalDuration < (this.max - this.min)) || this.groupInterval) {\r\n\t\t\t\t\tintervals.push(interval);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tif (series._dataSets) {\r\n\t\t\t\tseries._dataSets.each((key, dataItems) => {\r\n\t\t\t\t\tdataItems.each((dataItem) => {\r\n\t\t\t\t\t\tdataItem.dispose();\r\n\t\t\t\t\t})\r\n\t\t\t\t\tdataItems.clear();\r\n\t\t\t\t})\r\n\t\t\t\tseries._dataSets.clear();\r\n\t\t\t}\r\n\r\n\t\t\tseries.dataGrouped = true;\r\n\r\n\t\t\t$array.each(intervals, (interval) => {\r\n\r\n\t\t\t\t//let mainBaseInterval = this._mainBaseInterval;\r\n\t\t\t\tlet key = \"date\" + this.axisLetter;\r\n\r\n\t\t\t\t// create data set\r\n\t\t\t\tlet dataSetId = interval.timeUnit + interval.count;\r\n\t\t\t\t// todo: check where this clone goes\r\n\t\t\t\tlet dataSet = new OrderedListTemplate(series.mainDataSet.template.clone());\r\n\r\n\t\t\t\tseries.dataSets.setKey(dataSetId, dataSet);\r\n\r\n\t\t\t\tlet dataItems = series.mainDataSet;\r\n\t\t\t\tlet previousTime: number = Number.NEGATIVE_INFINITY;\r\n\t\t\t\tlet i = 0;\r\n\t\t\t\tlet newDataItem: XYSeriesDataItem;\r\n\r\n\t\t\t\tlet dataFields: string[] = [];\r\n\r\n\t\t\t\t$object.each(series.dataFields, (dfkey, df) => {\r\n\t\t\t\t\tlet dfk = <string>dfkey;\r\n\t\t\t\t\tif (dfk != key && dfk.indexOf(\"Show\") == -1) {\r\n\t\t\t\t\t\tdataFields.push(dfk);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\r\n\t\t\t\tlet roundedDate: Date;\r\n\t\t\t\tdataItems.each((dataItem) => {\r\n\t\t\t\t\tlet date = dataItem.getDate(key);\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tlet time = date.getTime();\r\n\t\t\t\t\t\troundedDate = $time.round(\r\n\t\t\t\t\t\t\tnew Date(time),\r\n\t\t\t\t\t\t\tinterval.timeUnit,\r\n\t\t\t\t\t\t\tinterval.count,\r\n\t\t\t\t\t\t\tthis._df.firstDayOfWeek,\r\n\t\t\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\t\t\tundefined,\r\n\t\t\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tlet currentTime = roundedDate.getTime();\r\n\t\t\t\t\t\t// changed period\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tif (previousTime < currentTime) {\r\n\r\n\t\t\t\t\t\t\tif (newDataItem && series._adapterO) {\r\n\t\t\t\t\t\t\t\t$array.each(dataFields, (vkey) => {\r\n\t\t\t\t\t\t\t\t\tnewDataItem.values[vkey].value = series._adapterO.apply(\"groupDataItem\", {\r\n\t\t\t\t\t\t\t\t\t\tdataItem: newDataItem,\r\n\t\t\t\t\t\t\t\t\t\tinterval: interval,\r\n\t\t\t\t\t\t\t\t\t\tdataField: <any>vkey,\r\n\t\t\t\t\t\t\t\t\t\tdate: roundedDate,\r\n\t\t\t\t\t\t\t\t\t\tvalue: newDataItem.values[vkey].value\r\n\t\t\t\t\t\t\t\t\t}).value;\r\n\r\n\t\t\t\t\t\t\t\t\tnewDataItem.values[vkey].workingValue = newDataItem.values[vkey].value\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tnewDataItem = dataSet.create();\r\n\r\n\t\t\t\t\t\t\tnewDataItem.dataContext = {};\r\n\r\n\t\t\t\t\t\t\tnewDataItem.setWorkingLocation(\"dateX\", series.dataItems.template.locations.dateX, 0);\r\n\t\t\t\t\t\t\tnewDataItem.setWorkingLocation(\"openDateX\", series.dataItems.template.locations.openDateX, 0);\r\n\t\t\t\t\t\t\tnewDataItem.setWorkingLocation(\"dateY\", series.dataItems.template.locations.dateY, 0);\r\n\t\t\t\t\t\t\tnewDataItem.setWorkingLocation(\"openDateY\", series.dataItems.template.locations.openDateY, 0);\r\n\r\n\t\t\t\t\t\t\tnewDataItem.component = series;\r\n\t\t\t\t\t\t\t// other Dates?\r\n\t\t\t\t\t\t\tnewDataItem.setDate(key, roundedDate);\r\n\t\t\t\t\t\t\tnewDataItem._index = i;\r\n\t\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t\t\t$array.each(dataFields, (vkey) => {\r\n\t\t\t\t\t\t\t\t//let groupFieldName = vkey + \"Group\";\r\n\t\t\t\t\t\t\t\tlet dvalues = dataItem.values[vkey];\r\n\t\t\t\t\t\t\t\tif (dvalues) {\r\n\t\t\t\t\t\t\t\t\tlet value = dvalues.value;\r\n\r\n\t\t\t\t\t\t\t\t\tif (series._adapterO) {\r\n\t\t\t\t\t\t\t\t\t\tvalue = series._adapterO.apply(\"groupValue\", {\r\n\t\t\t\t\t\t\t\t\t\t\tdataItem: dataItem,\r\n\t\t\t\t\t\t\t\t\t\t\tinterval: interval,\r\n\t\t\t\t\t\t\t\t\t\t\tdataField: <any>vkey,\r\n\t\t\t\t\t\t\t\t\t\t\tdate: roundedDate,\r\n\t\t\t\t\t\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t\t\t\t\t\t}).value;\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tlet values = newDataItem.values[vkey];\r\n\t\t\t\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\r\n\t\t\t\t\t\t\t\t\t\tvalues.value = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.workingValue = value;\r\n\r\n\t\t\t\t\t\t\t\t\t\tvalues.open = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.close = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.low = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.high = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.sum = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.average = value;\r\n\t\t\t\t\t\t\t\t\t\tvalues.count = 1;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\tvalues.count = 0;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t})\r\n\r\n\t\t\t\t\t\t\tthis.postProcessSeriesDataItem(newDataItem, interval);\r\n\r\n\t\t\t\t\t\t\t$object.each(series.propertyFields, (key, fieldValue) => {\r\n\t\t\t\t\t\t\t\tconst f: string = <string>key;\r\n\t\t\t\t\t\t\t\tlet value: any = (<any>dataItem.properties)[key];\r\n\r\n\t\t\t\t\t\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\t\t\t\t\t\tnewDataItem.hasProperties = true;\r\n\t\t\t\t\t\t\t\t\tnewDataItem.setProperty(f, 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\tnewDataItem.groupDataItems = [dataItem];\r\n\t\t\t\t\t\t\tpreviousTime = currentTime;\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 (newDataItem) {\r\n\t\t\t\t\t\t\t\t$array.each(dataFields, (vkey) => {\r\n\t\t\t\t\t\t\t\t\tlet groupFieldName = (<any>series.groupFields)[vkey];\r\n\t\t\t\t\t\t\t\t\tlet dvalues = dataItem.values[vkey];\r\n\t\t\t\t\t\t\t\t\tif (dvalues) {\r\n\t\t\t\t\t\t\t\t\t\tlet value = dvalues.value;\r\n\r\n\t\t\t\t\t\t\t\t\t\tif (series._adapterO) {\r\n\t\t\t\t\t\t\t\t\t\t\tvalue = series._adapterO.apply(\"groupValue\", {\r\n\t\t\t\t\t\t\t\t\t\t\t\tdataItem: dataItem,\r\n\t\t\t\t\t\t\t\t\t\t\t\tinterval: interval,\r\n\t\t\t\t\t\t\t\t\t\t\t\tdataField: <any>vkey,\r\n\t\t\t\t\t\t\t\t\t\t\t\tdate: roundedDate,\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalue: value\r\n\t\t\t\t\t\t\t\t\t\t\t}).value;\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\tif ($type.isNumber(value)) {\r\n\t\t\t\t\t\t\t\t\t\t\tlet values = newDataItem.values[vkey];\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (!$type.isNumber(values.open)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.open = value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvalues.close = value;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif (values.low > value || !$type.isNumber(values.low)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.low = value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif (values.high < value || !$type.isNumber(values.high)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.high = value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tif ($type.isNumber(values.sum)) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.sum += value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.sum = value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\tvalues.count++;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tvalues.average = values.sum / values.count;\r\n\r\n\t\t\t\t\t\t\t\t\t\t\tif ($type.isNumber(values[groupFieldName])) {\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.value = values[groupFieldName];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.workingValue = values.value;\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t$utils.copyProperties(dataItem.properties, newDataItem.properties);\r\n\r\n\t\t\t\t\t\t\t\t$object.each(series.propertyFields, (key, fieldValue) => {\r\n\t\t\t\t\t\t\t\t\tconst f: string = <string>key;\r\n\t\t\t\t\t\t\t\t\tlet value: any = (<any>dataItem.properties)[key];\r\n\t\t\t\t\t\t\t\t\tif ($type.hasValue(value)) {\r\n\t\t\t\t\t\t\t\t\t\tnewDataItem.hasProperties = true;\r\n\t\t\t\t\t\t\t\t\t\tnewDataItem.setProperty(f, value);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tnewDataItem.groupDataItems.push(dataItem);\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\r\n\t\t\t\t\tif (newDataItem) {\r\n\t\t\t\t\t\t$utils.copyProperties(dataItem.dataContext, newDataItem.dataContext);\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t\tif (newDataItem && series._adapterO) {\r\n\r\n\t\t\t\t\t$array.each(dataFields, (vkey) => {\r\n\t\t\t\t\t\tnewDataItem.values[vkey].value = series._adapterO.apply(\"groupDataItem\", {\r\n\t\t\t\t\t\t\tdataItem: newDataItem,\r\n\t\t\t\t\t\t\tinterval: interval,\r\n\t\t\t\t\t\t\tdataField: <any>vkey,\r\n\t\t\t\t\t\t\tdate: roundedDate,\r\n\t\t\t\t\t\t\tvalue: newDataItem.values[vkey].value\r\n\t\t\t\t\t\t}).value;\r\n\r\n\t\t\t\t\t\tnewDataItem.values[vkey].workingValue = newDataItem.values[vkey].value;\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.calculateZoom();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected getDFFormatter() {\r\n\t\tthis._df = this.dateFormatter;\r\n\t}\r\n\r\n\t/**\r\n\t * [postProcessSeriesDataItem description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic postProcessSeriesDataItem(dataItem: XYSeriesDataItem, interval?: ITimeInterval): void {\r\n\t\t// we need to do this for all series data items not only added recently, as baseInterval might change\r\n\t\tlet intervalID = \"\";\r\n\t\tif (interval) {\r\n\t\t\tintervalID = interval.timeUnit + interval.count;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinterval = this.mainBaseInterval;\r\n\t\t}\r\n\r\n\t\tlet series: XYSeries = dataItem.component;\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\t$object.each(dataItem.dates, (key) => {\r\n\t\t\tlet date: Date = dataItem.getDate(key);\r\n\t\t\tlet time = date.getTime();\r\n\r\n\t\t\tlet startDate: Date = $time.round(\r\n\t\t\t\tnew Date(time),\r\n\t\t\t\tinterval.timeUnit,\r\n\t\t\t\tinterval.count,\r\n\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\tthis._df.utc,\r\n\t\t\t\tundefined,\r\n\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\tthis._df.timezone\r\n\t\t\t);\r\n\t\t\tlet startTime = startDate.getTime();\r\n\t\t\tlet endDate: Date = $time.add(new Date(startTime), interval.timeUnit, interval.count, this._df.utc);\r\n\r\n\t\t\tdataItem.setCalculatedValue(key, startTime, \"open\");\r\n\t\t\tdataItem.setCalculatedValue(key, endDate.getTime(), \"close\");\r\n\t\t\tdataItemsByAxis.setKey(startTime + intervalID, dataItem);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Collapses empty stretches of date/time scale by creating [[AxisBreak]]\r\n\t * elements for them.\r\n\t *\r\n\t * Can be used to automatically remove strethes without data, like weekends.\r\n\t *\r\n\t * No, need to call this manually. It will automatically be done if\r\n\t * `skipEmptyPeriods = true`.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tprotected addEmptyUnitsBreaks(): void {\r\n\r\n\t\tif (this.skipEmptyPeriods && $type.isNumber(this.min) && $type.isNumber(this.max)) {\r\n\t\t\tlet timeUnit: TimeUnit = this.baseInterval.timeUnit;\r\n\t\t\tlet count: number = this.baseInterval.count;\r\n\r\n\t\t\tif (this._axisBreaks) {\r\n\t\t\t\tthis._axisBreaks.clear(); // TODO: what about breaks added by user?\r\n\t\t\t}\r\n\r\n\t\t\tlet date: Date = $time.round(\r\n\t\t\t\tnew Date(this.min),\r\n\t\t\t\ttimeUnit,\r\n\t\t\t\tcount,\r\n\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\tthis._df.utc,\r\n\t\t\t\tundefined,\r\n\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\tthis._df.timezone\r\n\t\t\t);\r\n\t\t\tlet axisBreak: DateAxisBreak;\r\n\r\n\t\t\twhile (date.getTime() < this.max - this.baseDuration) {\r\n\t\t\t\t$time.add(date, timeUnit, count, this._df.utc);\r\n\r\n\t\t\t\tlet startTime: number = date.getTime();\r\n\t\t\t\tlet startTimeStr: string = startTime.toString();\r\n\r\n\t\t\t\tlet hasData = $iter.contains(this.series.iterator(), (series) => {\r\n\t\t\t\t\treturn !!series.dataItemsByAxis.getKey(this.uid).getKey(startTimeStr + series.currentDataSetId);\r\n\t\t\t\t});\r\n\r\n\t\t\t\t// open break if not yet opened\r\n\t\t\t\tif (!hasData) {\r\n\t\t\t\t\tif (!axisBreak) {\r\n\t\t\t\t\t\taxisBreak = <DateAxisBreak>this.axisBreaks.create();\r\n\t\t\t\t\t\taxisBreak.startDate = new Date(startTime);\r\n\t\t\t\t\t\tthis._gapBreaks = true;\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\t// close if already opened\r\n\t\t\t\t\tif (axisBreak) {\r\n\t\t\t\t\t\t// close at end time minus one millisecond\r\n\t\t\t\t\t\taxisBreak.endDate = new Date(startTime - 1);\r\n\t\t\t\t\t\taxisBreak = undefined;\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 * Updates positioning of Axis breaks after something changes.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic fixAxisBreaks(): void {\r\n\t\tsuper.fixAxisBreaks();\r\n\t\tlet axisBreaks = this._axisBreaks;\r\n\t\tif (axisBreaks) {\r\n\t\t\tif (axisBreaks.length > 0) {\r\n\t\t\t\t// process breaks\r\n\t\t\t\taxisBreaks.each((axisBreak) => {\r\n\t\t\t\t\tlet breakGridCount: number = Math.ceil(this._gridCount * (Math.min(this.end, axisBreak.endPosition) - Math.max(this.start, axisBreak.startPosition)) / (this.end - this.start));\r\n\t\t\t\t\taxisBreak.gridInterval = this.chooseInterval(0, axisBreak.adjustedEndValue - axisBreak.adjustedStartValue, breakGridCount);\r\n\t\t\t\t\tlet gridDate = $time.round(\r\n\t\t\t\t\t\tnew Date(axisBreak.adjustedStartValue),\r\n\t\t\t\t\t\taxisBreak.gridInterval.timeUnit,\r\n\t\t\t\t\t\taxisBreak.gridInterval.count,\r\n\t\t\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\t\tundefined,\r\n\t\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (gridDate.getTime() > axisBreak.startDate.getTime()) {\r\n\t\t\t\t\t\t$time.add(gridDate, axisBreak.gridInterval.timeUnit, axisBreak.gridInterval.count, this._df.utc);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\taxisBreak.gridDate = gridDate;\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 getFirstWeekDay(): number {\r\n\t\tif (this._df) {\r\n\t\t\treturn this._df.firstDayOfWeek;\r\n\t\t}\r\n\t\treturn 1;\r\n\t}\r\n\r\n\t/**\r\n\t * [getGridDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param date [description]\r\n\t * @param intervalCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getGridDate(date: Date, intervalCount: number): Date {\r\n\t\tlet timeUnit: TimeUnit = this._gridInterval.timeUnit;\r\n\t\tlet realIntervalCount: number = this._gridInterval.count;\r\n\t\t// round date\r\n\t\t$time.round(\r\n\t\t\tdate,\r\n\t\t\ttimeUnit,\r\n\t\t\t1,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\r\n\t\tlet prevTimestamp: number = date.getTime();\r\n\r\n\t\tlet newDate: Date = $time.copy(date);\r\n\t\t// modify date by adding intervalcount\r\n\t\tlet timestamp: number = $time.add(newDate, timeUnit, intervalCount, this._df.utc).getTime();\r\n\r\n\t\t// if it's axis break, get first rounded date which is not in a break\r\n\t\tlet axisBreak: DateAxisBreak = <DateAxisBreak>this.isInBreak(timestamp);\r\n\t\tif (axisBreak && axisBreak.endDate) {\r\n\t\t\tnewDate = new Date(axisBreak.endDate.getTime());\r\n\t\t\t$time.round(\r\n\t\t\t\tnewDate,\r\n\t\t\t\ttimeUnit,\r\n\t\t\t\trealIntervalCount,\r\n\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\tthis._df.utc,\r\n\t\t\t\tundefined,\r\n\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\tthis._df.timezone\r\n\t\t\t);\r\n\t\t\tif (newDate.getTime() < axisBreak.endDate.getTime()) {\r\n\t\t\t\t$time.add(newDate, timeUnit, realIntervalCount, this._df.utc);\r\n\t\t\t}\r\n\t\t\ttimestamp = newDate.getTime();\r\n\t\t}\r\n\r\n\t\t// get duration between grid lines with break duration removed\r\n\t\tlet durationBreaksRemoved: number = this.adjustDifference(prevTimestamp, timestamp);\r\n\t\t// calculate how many time units fit to this duration\r\n\t\tlet countBreaksRemoved: number = Math.round(durationBreaksRemoved / $time.getDuration(timeUnit));\r\n\r\n\t\t// if less units fit, add one and repeat\r\n\t\tif (countBreaksRemoved < realIntervalCount) {\r\n\t\t\treturn this.getGridDate(date, intervalCount + realIntervalCount);\r\n\t\t}\r\n\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * [getBreaklessDate description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param axisBreak [description]\r\n\t * @param timeUnit [description]\r\n\t * @param count [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic getBreaklessDate(axisBreak: DateAxisBreak, timeUnit: TimeUnit, count: number): Date {\r\n\t\tlet date = new Date(axisBreak.endValue);\r\n\t\t$time.round(\r\n\t\t\tdate,\r\n\t\t\ttimeUnit,\r\n\t\t\tcount,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\t\t$time.add(date, timeUnit, count, this._df.utc);\r\n\r\n\t\tlet timestamp = date.getTime();\r\n\r\n\t\taxisBreak = <DateAxisBreak>this.isInBreak(timestamp);\r\n\t\tif (axisBreak) {\r\n\t\t\treturn this.getBreaklessDate(axisBreak, timeUnit, count);\r\n\t\t}\r\n\t\treturn date;\r\n\t}\r\n\r\n\t/**\r\n\t * (Re)validates all Axis elements.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t */\r\n\tpublic validateAxisElements(): void {\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\r\n\t\t\tthis.calculateZoom();\r\n\r\n\t\t\t// first regular items\r\n\t\t\tlet timestamp = this._gridDate.getTime();\r\n\t\t\tlet timeUnit = this._gridInterval.timeUnit;\r\n\t\t\tlet intervalCount = this._gridInterval.count;\r\n\t\t\tlet prevGridDate = $time.copy(this._gridDate);\r\n\r\n\t\t\tlet dataItemsIterator = this._dataItemsIterator;\r\n\t\t\tthis.resetIterators();\r\n\r\n\t\t\twhile (timestamp <= this._maxZoomed) {\r\n\t\t\t\tlet date = this.getGridDate($time.copy(prevGridDate), intervalCount);\r\n\t\t\t\ttimestamp = date.getTime();\r\n\r\n\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount, this._df.utc);\r\n\r\n\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit, this._df.utc)) {\r\n\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\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 text = this._df.format(date, format);\r\n\r\n\t\t\t\tlet dataItem = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t}\r\n\t\t\t\tthis.appendDataItem(dataItem);\r\n\r\n\t\t\t\tdataItem.axisBreak = undefined;\r\n\t\t\t\tdataItem.date = date;\r\n\t\t\t\tdataItem.endDate = endDate;\r\n\r\n\t\t\t\tdataItem.text = text;\r\n\r\n\t\t\t\tthis.validateDataElement(dataItem);\r\n\r\n\t\t\t\tprevGridDate = date;\r\n\t\t\t}\r\n\r\n\t\t\t// breaks later\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tif (this._axisBreaks) {\r\n\t\t\t\t$iter.each(this._axisBreaks.iterator(), (axisBreak) => {\r\n\t\t\t\t\tif (axisBreak.breakSize > 0) {\r\n\t\t\t\t\t\tlet timeUnit: TimeUnit = axisBreak.gridInterval.timeUnit;\r\n\t\t\t\t\t\tlet intervalCount: number = axisBreak.gridInterval.count;\r\n\r\n\t\t\t\t\t\t// only add grid if gap is bigger then minGridDistance\r\n\t\t\t\t\t\tif ($math.getDistance(axisBreak.startPoint, axisBreak.endPoint) > renderer.minGridDistance * 4) {\r\n\t\t\t\t\t\t\tlet timestamp: number = axisBreak.gridDate.getTime();\r\n\r\n\t\t\t\t\t\t\tlet prevGridDate;\r\n\t\t\t\t\t\t\tlet count: number = 0;\r\n\t\t\t\t\t\t\twhile (timestamp <= axisBreak.adjustedMax) {\r\n\t\t\t\t\t\t\t\tlet date: Date = $time.copy(axisBreak.gridDate);\r\n\t\t\t\t\t\t\t\ttimestamp = $time.add(date, timeUnit, intervalCount * count, this._df.utc).getTime();\r\n\t\t\t\t\t\t\t\tcount++;\r\n\t\t\t\t\t\t\t\tif (timestamp > axisBreak.adjustedStartValue && timestamp < axisBreak.adjustedEndValue) {\r\n\t\t\t\t\t\t\t\t\tlet endDate = $time.copy(date); // you might think it's easier to add intervalduration to timestamp, however it won't work for months or years which are not of the same length\r\n\t\t\t\t\t\t\t\t\tendDate = $time.add(endDate, timeUnit, intervalCount, this._df.utc);\r\n\r\n\t\t\t\t\t\t\t\t\tlet format = this.dateFormats.getKey(timeUnit);\r\n\r\n\t\t\t\t\t\t\t\t\tif (this.markUnitChange && prevGridDate) {\r\n\t\t\t\t\t\t\t\t\t\tif ($time.checkChange(date, prevGridDate, this._nextGridUnit, this._df.utc)) {\r\n\t\t\t\t\t\t\t\t\t\t\tif (timeUnit !== \"year\") {\r\n\t\t\t\t\t\t\t\t\t\t\t\tformat = this.periodChangeDateFormats.getKey(timeUnit);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\tlet text: string = this._df.format(date, format);\r\n\r\n\t\t\t\t\t\t\t\t\tlet dataItem: this[\"_dataItem\"] = dataItemsIterator.find((x) => x.text === text);\r\n\t\t\t\t\t\t\t\t\tif (dataItem.__disabled) {\r\n\t\t\t\t\t\t\t\t\t\tdataItem.__disabled = false;\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t//this.processDataItem(dataItem);\r\n\t\t\t\t\t\t\t\t\tthis.appendDataItem(dataItem);\r\n\t\t\t\t\t\t\t\t\tdataItem.axisBreak = axisBreak;\r\n\t\t\t\t\t\t\t\t\taxisBreak.dataItems.moveValue(dataItem);\r\n\r\n\t\t\t\t\t\t\t\t\tdataItem.date = date;\r\n\t\t\t\t\t\t\t\t\tdataItem.endDate = endDate;\r\n\t\t\t\t\t\t\t\t\tdataItem.text = text;\r\n\t\t\t\t\t\t\t\t\tprevGridDate = date;\r\n\t\t\t\t\t\t\t\t\tthis.validateDataElement(dataItem);\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\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Validates Axis data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic validateDataElement(dataItem: this[\"_dataItem\"]): void {\r\n\r\n\t\tdataItem.itemIndex = this._axisItemCount;\r\n\t\tthis._axisItemCount++;\r\n\r\n\t\tif ($type.isNumber(this.max) && $type.isNumber(this.min)) {\r\n\t\t\tlet renderer: AxisRenderer = this.renderer;\r\n\r\n\t\t\tlet timestamp = dataItem.value;\r\n\t\t\tlet endTimestamp = dataItem.endValue;\r\n\r\n\t\t\tif (!$type.isNumber(endTimestamp)) {\r\n\t\t\t\tendTimestamp = timestamp;\r\n\t\t\t}\r\n\r\n\t\t\tlet position: number = this.valueToPosition(timestamp);\r\n\t\t\tlet endPosition: number = this.valueToPosition(endTimestamp);\r\n\t\t\tlet fillEndPosition = endPosition;\r\n\r\n\t\t\tif (!dataItem.isRange && this._gridInterval.count > this.baseInterval.count) {\r\n\t\t\t\tendPosition = position + (endPosition - position) / (this._gridInterval.count / this.baseInterval.count);\r\n\t\t\t}\r\n\r\n\t\t\tdataItem.position = position;\r\n\r\n\t\t\tlet tick: AxisTick = dataItem.tick;\r\n\t\t\tif (tick && !tick.disabled) {\r\n\t\t\t\trenderer.updateTickElement(tick, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet grid: Grid = dataItem.grid;\r\n\t\t\tif (grid && !grid.disabled) {\r\n\t\t\t\trenderer.updateGridElement(grid, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet fill: AxisFill = dataItem.axisFill;\r\n\t\t\tif (fill && !fill.disabled) {\r\n\t\t\t\trenderer.updateFillElement(fill, position, fillEndPosition);\r\n\t\t\t\tif (!dataItem.isRange) {\r\n\t\t\t\t\tthis.fillRule(dataItem);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet mask: AxisFill = dataItem.mask;\r\n\t\t\tif (mask) {\r\n\t\t\t\trenderer.updateFillElement(mask, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tif (dataItem.bullet) {\r\n\t\t\t\trenderer.updateBullet(dataItem.bullet, position, endPosition);\r\n\t\t\t}\r\n\r\n\t\t\tlet label: AxisLabel = dataItem.label;\r\n\t\t\tif (label && !label.disabled) {\r\n\t\t\t\tlet location = label.location;\r\n\r\n\r\n\r\n\t\t\t\tif (location == 0) {\r\n\t\t\t\t\tif (this._gridInterval.count == 1 && this._gridInterval.timeUnit != \"week\" && !dataItem.isRange) {\r\n\t\t\t\t\t\tlocation = 0.5;\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tlocation = 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\trenderer.updateLabelElement(label, position, endPosition, location);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * A duration in milliseconds of the `baseInterval`.\r\n\t *\r\n\t * @return Duration (ms)\r\n\t */\r\n\tpublic get baseDuration(): number {\r\n\t\treturn $time.getDuration(this.baseInterval.timeUnit, this.baseInterval.count);\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts min/max values.\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description (review)\r\n\t * @param min Min timestamp\r\n\t * @param max Max timestamp\r\n\t * @return Adjusted min/max step\r\n\t */\r\n\tpublic adjustMinMax(min: number, max: number): IMinMaxStep {\r\n\t\treturn { min: min, max: max, step: this.baseDuration };\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the minimum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMin(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet interval = this.baseInterval;\r\n\r\n\t\tlet startTime = $time.round(\r\n\t\t\tnew Date(value),\r\n\t\t\tinterval.timeUnit,\r\n\t\t\tinterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), interval.timeUnit, interval.count, this._df.utc).getTime();\r\n\r\n\t\treturn startTime + (endTime - startTime) * this.startLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * Adjusts the maximum timestamp as per cell start location.\r\n\t *\r\n\t * @param value Value\r\n\t * @return Adjusted value\r\n\t */\r\n\tprotected fixMax(value: number) {\r\n\t\t// like this because months are not equal\r\n\t\tlet interval = this.baseInterval;\r\n\r\n\t\tlet startTime = $time.round(\r\n\t\t\tnew Date(value),\r\n\t\t\tinterval.timeUnit,\r\n\t\t\tinterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t).getTime();\r\n\t\tlet endTime = $time.add(new Date(startTime), interval.timeUnit, interval.count, this._df.utc).getTime();\r\n\r\n\t\treturn startTime + (endTime - startTime) * this.endLocation;\r\n\t}\r\n\r\n\t/**\r\n\t * [chooseInterval description]\r\n\t *\r\n\t * @ignore Exclude from docs.\r\n\t * @todo Description\r\n\t * @param index [description]\r\n\t * @param duration [description]\r\n\t * @param gridCount [description]\r\n\t * @return [description]\r\n\t */\r\n\tpublic chooseInterval(index: number, duration: number, gridCount: number, intervals?: List<ITimeInterval>): ITimeInterval {\r\n\t\tif (!intervals) {\r\n\t\t\tintervals = this.gridIntervals;\r\n\t\t}\r\n\r\n\t\tlet gridInterval: ITimeInterval = intervals.getIndex(index);\r\n\r\n\t\tlet intervalDuration: number = $time.getDuration(gridInterval.timeUnit, gridInterval.count);\r\n\r\n\t\tlet lastIndex: number = intervals.length - 1;\r\n\t\tif (index >= lastIndex) {\r\n\t\t\treturn { ...intervals.getIndex(lastIndex) };\r\n\t\t}\r\n\r\n\t\tlet count: number = Math.ceil(duration / intervalDuration);\r\n\r\n\t\tif (duration < intervalDuration && index > 0) {\r\n\t\t\treturn { ...intervals.getIndex(index - 1) };\r\n\t\t}\r\n\t\tif (count <= gridCount) {\r\n\t\t\treturn { ...intervals.getIndex(index) };\r\n\t\t} else {\r\n\t\t\tif (index + 1 < intervals.length) {\r\n\t\t\t\treturn this.chooseInterval(index + 1, duration, gridCount, intervals);\r\n\t\t\t} else {\r\n\t\t\t\treturn { ...intervals.getIndex(index) };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Formats the value according to axis' own [[DateFormatter]].\r\n\t *\r\n\t * @param value Source value\r\n\t * @return Formatted value\r\n\t */\r\n\tpublic formatLabel(value: number): string {\r\n\t\treturn this._df.format(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a Date to an asbolute pixel position within Axis.\r\n\t *\r\n\t * @param date Date\r\n\t * @return Position (px)\r\n\t */\r\n\tpublic dateToPosition(date: Date): number {\r\n\t\treturn this.valueToPosition(date.getTime());\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a numeric timestamp or a `Date` to a relative position on axis.\r\n\t *\r\n\t * @param date Date or a timestamp\r\n\t * @return Relative position\r\n\t */\r\n\tpublic anyToPosition(date: Date | number): number {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPosition(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPosition(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts date to orientation point (x, y, angle) on axis\r\n\t *\r\n\t * @param date Date\r\n\t * @return IOrientationPoint\r\n\t */\r\n\tpublic dateToPoint(date: Date): IOrientationPoint {\r\n\t\tlet position = this.dateToPosition(date);\r\n\t\tlet point = this.renderer.positionToPoint(position);\r\n\t\tlet angle = this.renderer.positionToAngle(position);\r\n\t\treturn { x: point.x, y: point.y, angle: angle };\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Converts a numeric value to orientation (x, y, angle) point on axis\r\n\t *\r\n\t * @param value Value\r\n\t * @return Orientation point\r\n\t */\r\n\tpublic anyToPoint(date: Date | number): IOrientationPoint {\r\n\t\tif (date instanceof Date) {\r\n\t\t\treturn this.dateToPoint(date);\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this.valueToPoint(date);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts pixel position within Axis to a corresponding Date.\r\n\t *\r\n\t * @param position Position (px)\r\n\t * @return Date\r\n\t */\r\n\tpublic positionToDate(position: number): Date {\r\n\t\treturn new Date(this.positionToValue(position));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the relative position on axis for series' data item's value.\r\n\t *\r\n\t * @since 4.5.14\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic getPositionX(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\t//let stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\tlet position = this.valueToPosition(value);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Returns relative position on axis for series' data item's value.\r\n\t *\r\n\t * @since 4.5.14\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @return Relative position\r\n\t */\r\n\tpublic getPositionY(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(\"valueX\", \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\tlet position = this.valueToPosition(value + stack);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn position;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an angle for series data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param dataItem Data item\r\n\t * @param key Data field to get value from\r\n\t * @param location Location (0-1)\r\n\t * @param stackKey Stack ID\r\n\t * @param range Range to fit in\r\n\t * @return Angle\r\n\t */\r\n\tpublic getAngle(dataItem: XYSeriesDataItem, key: string, location?: number, stackKey?: string, range?: IRange): number {\r\n\t\tlet value: number = this.getTimeByLocation(dataItem, key, location);\r\n\t\tlet stack: number = dataItem.getValue(stackKey, \"stack\");\r\n\r\n\t\tif (!$type.isNumber(value)) {\r\n\t\t\tvalue = this.baseValue;\r\n\t\t}\r\n\r\n\t\tlet position = this.valueToPosition(value + stack);\r\n\t\tif (range) {\r\n\t\t\tposition = $math.fitToRange(position, range.start, range.end);\r\n\t\t}\r\n\r\n\t\treturn this.positionToAngle(position);\r\n\t}\r\n\r\n\t/**\r\n\t * [getTimeByLocation description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem [description]\r\n\t * @param key [description]\r\n\t * @param location [description]\r\n\t * @return [description]\r\n\t */\r\n\tprotected getTimeByLocation(dataItem: XYSeriesDataItem, key: string, location: number): number {\r\n\r\n\t\tif (!$type.hasValue(key)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!$type.isNumber(location)) {\r\n\t\t\tlocation = dataItem.workingLocations[key];\r\n\r\n\t\t\tif (!$type.isNumber(location)) {\r\n\t\t\t\tlocation = 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet startTime: number = dataItem.values[key][\"open\"];\r\n\t\tlet endTime: number = dataItem.values[key][\"close\"];\r\n\r\n\t\tlet workingValue = dataItem.values[key].workingValue;\r\n\t\tlet value = dataItem.values[key].value;\r\n\r\n\t\tlet difference = value - workingValue;\r\n\t\tstartTime -= difference;\r\n\t\tendTime -= difference;\r\n\r\n\t\tif ($type.isNumber(startTime) && $type.isNumber(endTime)) {\r\n\t\t\treturn startTime + (endTime - startTime) * location;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Processes a related series' data item.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t * @param dataItem Data item\r\n\t */\r\n\tpublic processSeriesDataItem(dataItem: XYSeriesDataItem, axisLetter?: string): void {\r\n\t\tlet series = dataItem.component;\r\n\t\tlet time: number;\r\n\r\n\t\tlet date: Date = (<any>dataItem)[\"date\" + axisLetter];\r\n\r\n\t\tif ($type.isNumber(this.timezoneOffset)) {\r\n\t\t\tdate.setTime(date.getTime() + (date.getTimezoneOffset() - this.timezoneOffset) * 60000)\r\n\t\t\tdataItem.setValue(\"date\" + axisLetter, date.getTime(), 0);\r\n\t\t}\r\n\t\telse if ($type.hasValue(this.timezone)) {\r\n\t\t\tdate = $time.setTimezone(date, this.timezone);\r\n\t\t\tdataItem.setValue(\"date\" + axisLetter, date.getTime(), 0);\r\n\t\t\t(<any>dataItem)[\"date\" + axisLetter] = date;\r\n\t\t}\r\n\r\n\t\tif (date) {\r\n\t\t\ttime = date.getTime();\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tlet openDate: Date = (<any>dataItem)[\"openDate\" + axisLetter];\r\n\t\tlet prevSeriesTime: number = this._prevSeriesTime[series.uid];\r\n\r\n\r\n\t\tlet openTime: number;\r\n\t\tif (openDate) {\r\n\t\t\topenTime = openDate.getTime();\r\n\t\t}\r\n\r\n\t\tif ($type.isNumber(openTime)) {\r\n\t\t\tlet difference = Math.abs(time - openTime);\r\n\r\n\t\t\tif (this._minDifference[series.uid] > difference) {\r\n\t\t\t\tthis._minDifference[series.uid] = difference;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet differece: number = time - prevSeriesTime;\r\n\r\n\t\tif (differece > 0) {\r\n\t\t\tif (this._minDifference[series.uid] > differece) {\r\n\t\t\t\tthis._minDifference[series.uid] = differece;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis._prevSeriesTime[series.uid] = time;\r\n\r\n\t\tif (series._baseInterval[this.uid]) {\r\n\t\t\tthis.postProcessSeriesDataItem(dataItem);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * [updateAxisBySeries description]\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description\r\n\t */\r\n\tpublic updateAxisBySeries() {\r\n\t\tsuper.updateAxisBySeries();\r\n\r\n\t\tlet baseInterval: ITimeInterval = this.chooseInterval(0, this.minDifference, 1);\r\n\r\n\t\t// handle short months\r\n\r\n\t\tif (this.minDifference >= $time.getDuration(\"day\", 27) && baseInterval.timeUnit == \"week\") {\r\n\t\t\tbaseInterval.timeUnit = \"month\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\t\tif (baseInterval.timeUnit == \"month\") {\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 2) && baseInterval.count == 1) {\r\n\t\t\t\tbaseInterval.count = 2;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 3) && baseInterval.count == 2) {\r\n\t\t\t\tbaseInterval.count = 3;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.minDifference >= $time.getDuration(\"day\", 29 * 6) && baseInterval.count == 5) {\r\n\t\t\t\tbaseInterval.count = 6;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// handle daylight saving\r\n\t\tif (this.minDifference >= $time.getDuration(\"hour\", 23) && baseInterval.timeUnit == \"hour\") {\r\n\t\t\tbaseInterval.timeUnit = \"day\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tif (this.minDifference >= $time.getDuration(\"week\", 1) - $time.getDuration(\"hour\", 1) && baseInterval.timeUnit == \"day\") {\r\n\t\t\tbaseInterval.timeUnit = \"week\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tif (this.minDifference >= $time.getDuration(\"year\", 1) - $time.getDuration(\"day\", 1.01) && baseInterval.timeUnit == \"month\") {\r\n\t\t\tbaseInterval.timeUnit = \"year\";\r\n\t\t\tbaseInterval.count = 1;\r\n\t\t}\r\n\r\n\t\tthis._baseIntervalReal = baseInterval;\r\n\t\tthis._mainBaseInterval = baseInterval;\r\n\r\n\t\t// no need to invalidate\r\n\t}\r\n\r\n\t/**\r\n\t * A base interval (granularity) of data.\r\n\t *\r\n\t * Used to indicate what are the base units of your data.\r\n\t *\r\n\t * For example, if you have a data set that has a data point every 5 minutes,\r\n\t * you may want to set this to `{ timeUnit: \"minute\", count: 5 }`.\r\n\t *\r\n\t * If not set, the Axis will try to determine the setting by its own, looking\r\n\t * at actual data.\r\n\t *\r\n\t * For best results, try to follow these values for `count`:\r\n\t *\r\n\t * When unit is \"month\", use 12 / count = round number\r\n\t * When unit is \"hour\", use 24 / count = round number\r\n\t * When unit is \"second\" and \"minute\", use 60 / count = round number\r\n\t *\r\n\t * @param timeInterval base interval\r\n\t */\r\n\tpublic set baseInterval(timeInterval: ITimeInterval) {\r\n\t\tif (JSON.stringify(this._baseInterval) != JSON.stringify(timeInterval)) {\r\n\t\t\tthis._baseInterval = timeInterval;\r\n\t\t\tthis._mainBaseInterval = timeInterval;\r\n\t\t\tif (!$type.isNumber(timeInterval.count)) {\r\n\t\t\t\ttimeInterval.count = 1;\r\n\t\t\t}\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Base interval\r\n\t */\r\n\tpublic get baseInterval(): ITimeInterval {\r\n\t\tif (this._groupInterval) {\r\n\t\t\treturn this._groupInterval;\r\n\t\t}\r\n\t\telse if (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates granularity of the data of source (unaggregated) data.\r\n\t *\r\n\t * @since 4.7.0\r\n\t * @return Granularity of the main data set\r\n\t */\r\n\tpublic get mainBaseInterval(): ITimeInterval {\r\n\t\tif (this._baseInterval) {\r\n\t\t\treturn this._baseInterval;\r\n\t\t}\r\n\t\telse if (this._mainBaseInterval) {\r\n\t\t\treturn this._mainBaseInterval;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._baseIntervalReal;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * If enabled, axis will automatically collapse empty (without data points)\r\n\t * periods of time, i.e. weekends.\r\n\t *\r\n\t * An \"empty\" period is considered a stretch of time in the length of current\r\n\t * `baseInterval` without a single data point in it.\r\n\t *\r\n\t * For each such empty period, axis will automatically create an\r\n\t * [[AxisBreak]]. By default they will be invisible. You can still configure\r\n\t * them by accessing `axis.breaks.template`.\r\n\t *\r\n\t * [More info about breaks](https://www.amcharts.com/docs/v4/concepts/axes/#Breaks).\r\n\t *\r\n\t * Important notes:\r\n\t * * If you set this property to `true`, you can not add your custom axis breaks to this axis anymore.\r\n\t * * Using this feature affects performance. Use only if you need it.\r\n\t * * Setting this to `true` will reset appearance of breaks. If you want to modify appearance, do it *after* you set `skipEmptyPeriods`.\r\n\t * * Some axis label overlapping might happen.\r\n\t * * This setting is not compatible with `groupData = true`.\r\n\t *\r\n\t * @default false\r\n\t * @param value Remove empty stretches of time?\r\n\t */\r\n\tpublic set skipEmptyPeriods(value: boolean) {\r\n\r\n\t\tif (value) {\r\n\t\t\tlet breakTemplate = this.axisBreaks.template;\r\n\t\t\tbreakTemplate.startLine.disabled = true;\r\n\t\t\tbreakTemplate.endLine.disabled = true;\r\n\t\t\tbreakTemplate.fillShape.disabled = true;\r\n\t\t\tbreakTemplate.breakSize = 0;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (this._gapBreaks) {\r\n\t\t\t\tthis.axisBreaks.clear();\r\n\t\t\t\tthis._gapBreaks = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.setPropertyValue(\"skipEmptyPeriods\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.postProcessSeriesDataItems();\r\n\t\t\tthis.invalidateSeries();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Remove empty stretches of time?\r\n\t */\r\n\tpublic get skipEmptyPeriods(): boolean {\r\n\t\treturn this.getPropertyValue(\"skipEmptyPeriods\");\r\n\t}\r\n\r\n\t/**\r\n\t * A special date format to apply axis tooltips.\r\n\t *\r\n\t * Will use same format as for labels, if not set.\r\n\t *\r\n\t * @param value Date format\r\n\t */\r\n\tpublic set tooltipDateFormat(value: string | Intl.DateTimeFormatOptions) {\r\n\t\tthis.setPropertyValue(\"tooltipDateFormat\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Date format\r\n\t */\r\n\tpublic get tooltipDateFormat(): string | Intl.DateTimeFormatOptions {\r\n\t\treturn this.getPropertyValue(\"tooltipDateFormat\");\r\n\t}\r\n\r\n\t/**\r\n\t * Use `periodChangeDateFormats` to apply different formats to the first\r\n\t * label in bigger time unit.\r\n\t *\r\n\t * @default true\r\n\t * @param value Use different format for period beginning?\r\n\t */\r\n\tpublic set markUnitChange(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"markUnitChange\", value)) {\r\n\t\t\tthis.invalidateData();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Use different format for period beginning?\r\n\t */\r\n\tpublic get markUnitChange(): boolean {\r\n\t\treturn this.getPropertyValue(\"markUnitChange\");\r\n\t}\r\n\r\n\t/**\r\n\t * Returns text to show in a tooltip, based on specific relative position\r\n\t * within axis.\r\n\t *\r\n\t * The label will be formatted as per [[DateFormatter]] set for the whole\r\n\t * chart, or explicitly for this Axis.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Position\r\n\t * @return Label (formatted date)\r\n\t */\r\n\tpublic getTooltipText(position: number): string {\r\n\t\tlet text: string;\r\n\t\tlet date = this.positionToDate(position);\r\n\t\tdate = $time.round(\r\n\t\t\tdate,\r\n\t\t\tthis.baseInterval.timeUnit,\r\n\t\t\tthis.baseInterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tnew Date(this.min),\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\r\n\t\tthis.tooltipDate = date;\r\n\r\n\t\tif ($type.hasValue(this.tooltipDateFormat)) {\r\n\t\t\ttext = this._df.format(date, this.tooltipDateFormat, [\"day\", \"month\", \"week\", \"year\"].indexOf(this.baseInterval.timeUnit) == -1);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet dateFormat = this.dateFormats.getKey(this.baseInterval.timeUnit);\r\n\t\t\tif (dateFormat) {\r\n\t\t\t\ttext = this._df.format(date, dateFormat);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\ttext = this.getPositionLabel(position);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!this._adapterO) {\r\n\t\t\treturn text;\r\n\t\t}\r\n\t\telse {\r\n\t\t\treturn this._adapterO.apply(\"getTooltipText\", text);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Takes an absolute position within axis and adjust it to a specific position within base interval. (cell)\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @param position Source position\r\n\t * @param location Location in the cell\r\n\t * @return Adjusted position\r\n\t */\r\n\tpublic roundPosition(position: number, location?: AxisItemLocation, axisLocation?: number): number {\r\n\t\tlet baseInterval = this.baseInterval;\r\n\t\tlet timeUnit = baseInterval.timeUnit;\r\n\t\tlet count = baseInterval.count;\r\n\r\n\t\tlet date: Date = this.positionToDate(position);\r\n\r\n\t\t$time.round(\r\n\t\t\tdate,\r\n\t\t\ttimeUnit,\r\n\t\t\tcount,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\r\n\t\tif (location > 0) {\r\n\t\t\t$time.add(date, timeUnit, location * count, this._df.utc);\r\n\t\t}\r\n\r\n\t\tif (axisLocation > 0 && axisLocation < 1) {\r\n\t\t\tdate.setTime(date.getTime() + this.baseDuration * axisLocation);\r\n\t\t}\r\n\r\n\t\tif (this.isInBreak(date.getTime())) {\r\n\t\t\twhile (date.getTime() < this.max) {\r\n\t\t\t\t$time.add(date, timeUnit, count, this._df.utc);\r\n\t\t\t\tif (!this.isInBreak(date.getTime())) {\r\n\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\treturn this.dateToPosition(date);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the start of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell start relative position\r\n\t */\r\n\tpublic getCellStartPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 0);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns an relative position of the end of the cell (period), that specific position value falls into.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @todo Description (review)\r\n\t * @param position Relative position\r\n\t * @return Cell end relative position\r\n\t */\r\n\tpublic getCellEndPosition(position: number): number {\r\n\t\treturn this.roundPosition(position, 1);\r\n\t\t//return this.dateToPosition($time.add(this.positionToDate(this.roundPosition(position, 1)), this.baseInterval.timeUnit, this.baseInterval.count));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Series data item that corresponds to the specific pixel position\r\n\t * of the Axis.\r\n\t *\r\n\t * If `findNearest` (third parameter) is set to `true`, the method will try\r\n\t * to locate nearest available data item if none is found directly under\r\n\t * `position`.\r\n\t *\r\n\t * @param series Series\r\n\t * @param position Position (px)\r\n\t * @param findNearest Should axis try to find nearest tooltip if there is no data item at exact position\r\n\t * @return Data item\r\n\t */\r\n\tpublic getSeriesDataItem(series: XYSeries, position: number, findNearest?: boolean): XYSeriesDataItem {\r\n\r\n\t\tlet value: number = this.positionToValue(position);\r\n\r\n\t\tlet location = 0.5;\r\n\t\tif (this.axisLetter == \"Y\") {\r\n\t\t\tlocation = series.dataItems.template.locations.dateY;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlocation = series.dataItems.template.locations.dateX;\r\n\t\t}\r\n\r\n\t\tlet deltaValue = value - location * this.baseDuration;\r\n\r\n\t\tlet date: Date = $time.round(\r\n\t\t\tnew Date(value),\r\n\t\t\tthis.baseInterval.timeUnit,\r\n\t\t\tthis.baseInterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\t\tlet nextDate: Date = $time.round(\r\n\t\t\tnew Date(value + this.baseDuration),\r\n\t\t\tthis.baseInterval.timeUnit,\r\n\t\t\tthis.baseInterval.count,\r\n\t\t\tthis._firstWeekDay,\r\n\t\t\tthis._df.utc,\r\n\t\t\tundefined,\r\n\t\t\tthis._df.timezoneMinutes,\r\n\t\t\tthis._df.timezone\r\n\t\t);\r\n\r\n\t\tif (nextDate.getTime() > date.getTime()) {\r\n\t\t\tif (Math.abs(nextDate.getTime() - deltaValue) < Math.abs(deltaValue - date.getTime())) {\r\n\t\t\t\tdate = nextDate;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet dataItemsByAxis = series.dataItemsByAxis.getKey(this.uid);\r\n\r\n\t\tlet dataItem = dataItemsByAxis.getKey(date.getTime() + series.currentDataSetId);\r\n\r\n\t\t// todo: alternatively we can find closiest here\r\n\t\tif (!dataItem && findNearest) {\r\n\r\n\t\t\tlet key: \"dateX\" | \"dateY\";\r\n\r\n\t\t\tif (this.axisLetter == \"Y\") {\r\n\t\t\t\tkey = \"dateY\";\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tkey = \"dateX\";\r\n\t\t\t}\r\n\r\n\t\t\tdataItem = series.dataItems.getIndex(series.dataItems.findClosestIndex(date.getTime(), (x) => {\r\n\t\t\t\tif (x[key]) {\r\n\t\t\t\t\treturn <number>x[key].getTime();\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\treturn -Infinity;\r\n\t\t\t\t}\r\n\t\t\t}, \"any\"));\r\n\t\t}\r\n\r\n\t\treturn dataItem;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a formatted date based on position in axis scale.\r\n\t *\r\n\t * Please note that `position` represents position within axis which may be\r\n\t * zoomed and not correspond to Cursor's `position`.\r\n\t *\r\n\t * To convert Cursor's `position` to Axis' `position` use `toAxisPosition()` method.\r\n\t *\r\n\t * @see {@link https://www.amcharts.com/docs/v4/tutorials/tracking-cursors-position-via-api/#Tracking_Cursor_s_position} For more information about cursor tracking.\r\n\t * @param position Relative position on axis (0-1)\r\n\t * @return Position label\r\n\t */\r\n\tpublic getPositionLabel(position: number): string {\r\n\t\t// @todo Better format recognition\r\n\t\tlet date = this.positionToDate(position);\r\n\t\treturn this._df.format(date, this.getCurrentLabelFormat());\r\n\t}\r\n\r\n\t/**\r\n\t * Returns label date format based on currently used time units\r\n\t *\r\n\t * @return Format\r\n\t */\r\n\tprotected getCurrentLabelFormat(): string | Intl.DateTimeFormatOptions {\r\n\t\treturn this.dateFormats.getKey(this._gridInterval ? this._gridInterval.timeUnit : \"day\");\r\n\t}\r\n\r\n\t/**\r\n\t * Initializes an Axis renderer.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t */\r\n\tpublic initRenderer(): void {\r\n\t\tsuper.initRenderer();\r\n\t\tlet renderer = this.renderer;\r\n\t\tif (renderer) {\r\n\t\t\t// Set defaults\r\n\t\t\trenderer.ticks.template.location = 0;\r\n\t\t\trenderer.grid.template.location = 0;\r\n\t\t\trenderer.labels.template.location = 0;\r\n\t\t\trenderer.baseGrid.disabled = true;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Coordinates of the actual axis start.\r\n\t *\r\n\t * @ignore Exclude from docs\r\n\t * @return Base point\r\n\t */\r\n\tpublic get basePoint(): IPoint {\r\n\t\treturn { x: 0, y: 0 };\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tprotected animateMinMax(min: number, max: number): Animation {\r\n\t\tlet animation = this.animate([{ property: \"_minAdjusted\", from: this._minAdjusted, to: min }, { property: \"_maxAdjusted\", from: this._maxAdjusted, to: max }], this.rangeChangeDuration, this.rangeChangeEasing);\r\n\t\tanimation.events.on(\"animationprogress\", () => {\r\n\t\t\tthis.dispatch(\"extremeschanged\");\r\n\t\t})\r\n\t\treturn animation;\r\n\t}\r\n\r\n\t/**\r\n\t * Invalidates axis data items when series extremes change\r\n\t */\r\n\tprotected handleExtremesChange() {\r\n\t\tsuper.handleExtremesChange();\r\n\r\n\t\tif (this.groupData) {\r\n\t\t\tlet id = this.baseInterval.timeUnit + this.baseInterval.count;\r\n\t\t\tthis.groupMin[id] = this._finalMin;\r\n\t\t\tthis.groupMax[id] = this._finalMax;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Zooms axis to specific Dates.\r\n\t *\r\n\t * @param startDate Start date\r\n\t * @param endValue End date\r\n\t * @param skipRangeEvent Do not invoke events\r\n\t * @param instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToDates(startDate: Date, endDate: Date, skipRangeEvent?: boolean, instantly?: boolean, adjust?: boolean): void {\r\n\t\tstartDate = this._df.parse(startDate);\r\n\t\tendDate = this._df.parse(endDate);\r\n\t\tthis.zoomToValues(startDate.getTime(), endDate.getTime(), skipRangeEvent, instantly, adjust);\r\n\t}\r\n\r\n\t/**\r\n\t * Zooms axis to specific values.\r\n\t *\r\n\t * @param startValue Start value\r\n\t * @param endValue End value\r\n\t * @param skipRangeEvent Do not invoke events\r\n\t * @param instantly Do not play zoom animations\r\n\t */\r\n\tpublic zoomToValues(startValue: number, endValue: number, skipRangeEvent?: boolean, instantly?: boolean, adjust?: boolean): void {\r\n\t\tif (!this.groupData) {\r\n\t\t\t//let start: number = (startValue - this.min) / (this.max - this.min);\r\n\t\t\t//let end: number = (endValue - this.min) / (this.max - this.min);\r\n\r\n\t\t\tlet start = this.valueToPosition(startValue);\r\n\t\t\tlet end = this.valueToPosition(endValue);\r\n\r\n\t\t\tthis.zoom({ start: start, end: end }, skipRangeEvent, instantly);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tlet difference = this.adjustDifference(startValue, endValue);\r\n\t\t\tlet isEnd = false;\r\n\t\t\tif (endValue == this.max) {\r\n\t\t\t\tisEnd = true;\r\n\t\t\t}\r\n\t\t\tlet isStart = false;\r\n\t\t\tif (startValue == this.min) {\r\n\t\t\t\tisStart = true;\r\n\t\t\t}\r\n\r\n\t\t\tif ($type.hasValue(difference)) {\r\n\t\t\t\tlet mainBaseInterval = this.mainBaseInterval;\r\n\t\t\t\tlet groupInterval = this.chooseInterval(0, difference, this.groupCount, this.groupIntervals);\r\n\r\n\t\t\t\tif ((groupInterval.timeUnit == mainBaseInterval.timeUnit && groupInterval.count < mainBaseInterval.count) || $time.getDuration(groupInterval.timeUnit, 1) < $time.getDuration(mainBaseInterval.timeUnit, 1)) {\r\n\t\t\t\t\tgroupInterval = { ...mainBaseInterval };\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet id = groupInterval.timeUnit + groupInterval.count;\r\n\t\t\t\tlet min = this.groupMin[id];\r\n\t\t\t\tlet max = this.groupMax[id];\r\n\r\n\t\t\t\tif (!$type.isNumber(min) || !$type.isNumber(max)) {\r\n\t\t\t\t\tmin = Number.POSITIVE_INFINITY;\r\n\t\t\t\t\tmax = Number.NEGATIVE_INFINITY;\r\n\t\t\t\t\tthis.series.each((series) => {\r\n\t\t\t\t\t\tlet seriesMin = series.min(this);\r\n\t\t\t\t\t\tlet seriesMax = series.max(this);\r\n\r\n\t\t\t\t\t\tif (series._dataSets) {\r\n\t\t\t\t\t\t\tlet ds = series._dataSets.getKey(groupInterval.timeUnit + groupInterval.count);\r\n\r\n\t\t\t\t\t\t\tif (ds) {\r\n\t\t\t\t\t\t\t\tlet mindi = ds.getIndex(0);\r\n\t\t\t\t\t\t\t\tlet maxdi = ds.getIndex(ds.length - 1);\r\n\r\n\t\t\t\t\t\t\t\tif (mindi) {\r\n\t\t\t\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\t\t\t\tseriesMin = mindi.dateX.getTime();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse if (series.yAxis == this) {\r\n\t\t\t\t\t\t\t\t\t\tseriesMin = mindi.dateY.getTime();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tif (maxdi) {\r\n\t\t\t\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\t\t\t\tseriesMax = maxdi.dateX.getTime();\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\telse if (series.yAxis == this) {\r\n\t\t\t\t\t\t\t\t\t\tseriesMax = maxdi.dateY.getTime();\r\n\t\t\t\t\t\t\t\t\t}\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\r\n\t\t\t\t\t\tseriesMax = $time.round(\r\n\t\t\t\t\t\t\t$time.add(new Date(seriesMax), groupInterval.timeUnit, 1, this._df.utc),\r\n\t\t\t\t\t\t\tgroupInterval.timeUnit,\r\n\t\t\t\t\t\t\t1,\r\n\t\t\t\t\t\t\tthis._df.firstDayOfWeek,\r\n\t\t\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\t\t\tundefined,\r\n\t\t\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t\t\t).getTime();\r\n\r\n\t\t\t\t\t\tif (seriesMin < min) {\r\n\t\t\t\t\t\t\tmin = seriesMin;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (seriesMax > max) {\r\n\t\t\t\t\t\t\tmax = seriesMax;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t})\r\n\t\t\t\t\tthis.groupMin[id] = min;\r\n\t\t\t\t\tthis.groupMax[id] = max;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartValue = $math.fitToRange(startValue, min, max);\r\n\t\t\t\tendValue = $math.fitToRange(endValue, min, max);\r\n\r\n\t\t\t\tif (adjust) {\r\n\t\t\t\t\tif (isEnd) {\r\n\t\t\t\t\t\tstartValue = endValue - difference;\r\n\t\t\t\t\t\tstartValue = $math.fitToRange(startValue, min, max);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (isStart) {\r\n\t\t\t\t\t\tendValue = startValue + difference;\r\n\t\t\t\t\t\tendValue = $math.fitToRange(endValue, min, max);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet start: number = (startValue - min) / (max - min);\r\n\t\t\t\tlet end: number = (endValue - min) / (max - min);\r\n\r\n\t\t\t\tthis.zoom({ start: start, end: end }, skipRangeEvent, instantly);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Adds `baseInterval` to \"as is\" fields.\r\n\t *\r\n\t * @param field Field name\r\n\t * @return Assign as is?\r\n\t */\r\n\tprotected asIs(field: string): boolean {\r\n\t\treturn field == \"baseInterval\" || super.asIs(field);\r\n\t}\r\n\r\n\t/**\r\n\t * Copies all properties and related data from a different instance of Axis.\r\n\t *\r\n\t * @param source Source Axis\r\n\t */\r\n\tpublic copyFrom(source: this): void {\r\n\t\tsuper.copyFrom(source);\r\n\t\tthis.dateFormats = source.dateFormats;\r\n\t\tthis.periodChangeDateFormats = source.periodChangeDateFormats;\r\n\t\tthis.groupIntervals.clear();\r\n\t\tsource.groupIntervals.each((interval) => {\r\n\t\t\tthis.groupIntervals.push({ ...interval });\r\n\t\t})\r\n\r\n\t\tthis.gridIntervals.clear();\r\n\t\tsource.gridIntervals.each((interval) => {\r\n\t\t\tthis.gridIntervals.push({ ...interval });\r\n\t\t})\r\n\r\n\t\tif (source._baseInterval) {\r\n\t\t\tthis.baseInterval = source._baseInterval;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/**\r\n\t * Shows Axis tooltip at specific relative position within Axis. (0-1)\r\n\t *\r\n\t * @param position Position (0-1)\r\n\t * @param local or global position\r\n\t */\r\n\tpublic showTooltipAtPosition(position: number, local?: boolean) {\r\n\r\n\t\tif (!local) {\r\n\t\t\tposition = this.toAxisPosition(position);\r\n\t\t}\r\n\r\n\t\tif (this.snapTooltip) {\r\n\t\t\t// rounding is not good, pen/aac4e7f66f019d36b2447f050c600c13 (no last tootltip shown)\r\n\t\t\tlet actualDate = this.positionToDate(position) //$time.round(this.positionToDate(position), this.baseInterval.timeUnit, 1, this.getFirstWeekDay(), this.dateFormatter.utc, undefined, this._df.timezoneMinutes, this._df.timezone);\r\n\r\n\t\t\tlet actualTime = actualDate.getTime();\r\n\t\t\tlet closestDate: Date;\r\n\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\t\tlet dataItem = this.getSeriesDataItem(series, position, true);\r\n\r\n\t\t\t\t\tif (dataItem) {\r\n\t\t\t\t\t\tlet date: Date;\r\n\t\t\t\t\t\tif (series.xAxis == this) {\r\n\t\t\t\t\t\t\tdate = dataItem.dateX;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (series.yAxis == this) {\r\n\t\t\t\t\t\t\tdate = dataItem.dateY;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!closestDate) {\r\n\t\t\t\t\t\t\tclosestDate = date;\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 (Math.abs(closestDate.getTime() - actualTime) > Math.abs(date.getTime() - actualTime)) {\r\n\t\t\t\t\t\t\t\tclosestDate = date;\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\tif (closestDate) {\r\n\t\t\t\tlet closestTime = closestDate.getTime();\r\n\t\t\t\tclosestDate = $time.round(\r\n\t\t\t\t\tnew Date(closestTime),\r\n\t\t\t\t\tthis.baseInterval.timeUnit,\r\n\t\t\t\t\tthis.baseInterval.count,\r\n\t\t\t\t\tthis._firstWeekDay,\r\n\t\t\t\t\tthis._df.utc,\r\n\t\t\t\t\tundefined,\r\n\t\t\t\t\tthis._df.timezoneMinutes,\r\n\t\t\t\t\tthis._df.timezone\r\n\t\t\t\t);\r\n\t\t\t\tclosestTime = closestDate.getTime();\r\n\r\n\t\t\t\tlet tooltipLocation = this.renderer.tooltipLocation;\r\n\t\t\t\tif (tooltipLocation == 0) {\r\n\t\t\t\t\ttooltipLocation = 0.0001;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclosestDate = new Date(closestDate.getTime() + this.baseDuration * tooltipLocation);\r\n\t\t\t\tposition = this.dateToPosition(closestDate);\r\n\r\n\t\t\t\tif (this.chart.cursor && this.chart.cursor.snapToSeries) {\r\n\t\t\t\t\t//void\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tthis.series.each((series) => {\r\n\r\n\t\t\t\t\t\tlet dataItem = series.dataItemsByAxis.getKey(this.uid).getKey(closestTime + series.currentDataSetId);\r\n\t\t\t\t\t\tlet point = series.showTooltipAtDataItem(dataItem);\r\n\t\t\t\t\t\tif (point) {\r\n\t\t\t\t\t\t\tthis.chart._seriesPoints.push({ series: series, point: point });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\telse {\r\n\t\t\t\t\t\t\t// check, otherwise column tooltip will be hidden\r\n\t\t\t\t\t\t\tif (series.tooltipText || series.tooltipHTML) {\r\n\t\t\t\t\t\t\t\tseries.hideTooltip();\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\r\n\t\t\t\t//this.chart.sortSeriesTooltips(seriesPoints);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tsuper.showTooltipAtPosition(position, true);\r\n\t}\r\n\r\n\t/**\r\n\t * Should the nearest tooltip be shown if no data item is found on the\r\n\t * current cursor position.\r\n\t *\r\n\t * @default true\r\n\t * @param value Should snap?\r\n\t */\r\n\tpublic set snapTooltip(value: boolean) {\r\n\t\tthis.setPropertyValue(\"snapTooltip\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Should snap?\r\n\t */\r\n\tpublic get snapTooltip(): boolean {\r\n\t\treturn this.getPropertyValue(\"snapTooltip\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates if data should be aggregated to composide data items if there\r\n\t * are more data items in selected range than `groupCount`.\r\n\t *\r\n\t * Grouping will occur automatically, based on current selection range, and\r\n\t * will change dynamically when user zooms in/out the chart.\r\n\t *\r\n\t * NOTE: This works only if [[DateAxis]] is base axis of an [[XYSeries]].\r\n\t *\r\n\t * The related [[XYSeries]] also needs to be set up to take advantage of, by\r\n\t * setting its [`groupFields`](https://www.amcharts.com/docs/v4/reference/xyseries/#groupFields_property).\r\n\t *\r\n\t * The group intervals to aggregate data to is defined by `groupIntervals`\r\n\t * property.\r\n\t *\r\n\t * ```TypeScript\r\n\t * let dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n\t * dateAxis.groupData = true;\r\n\t * \r\n\t * let valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n\t * \r\n\t * let series = chart.series.push(new am4charts.LineSeries());\r\n\t * series.dataFields.dateX = \"date\";\r\n\t * series.dataFields.valueY = \"value\";\r\n\t * series.groupFields.valueY = \"average\";\r\n\t * ```\r\n\t * ```JavaScript\r\n\t * var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n\t * dateAxis.groupData = true;\r\n\t * \r\n\t * var valueAxis = chart.xAxes.push(new am4charts.valueAxis());\r\n\t * \r\n\t * var series = chart.series.push(new am4charts.LineSeries());\r\n\t * series.dataFields.dateX = \"date\";\r\n\t * series.dataFields.valueY = \"value\";\r\n\t * series.groupFields.valueY = \"average\";\r\n\t * ```\r\n\t * ```JSON\r\n\t * {\r\n\t * // ...\r\n\t * \"xAxes\": [{\r\n\t * \"type\": \"DateAxis\",\r\n\t * \"groupData\": true\r\n\t * }],\r\n\t * \"yAxes\": [{\r\n\t * \"type\": \"ValueAxis\"\r\n\t * }],\r\n\t * \"series\": [{\r\n\t * \"type\": \"LineSeries\",\r\n\t * \"dataFields\": {\r\n\t * \"dateX\": \"date\",\r\n\t * \"valueY\": \"value\"\r\n\t * },\r\n\t * \"groupFields\": {\r\n\t * \"valueY\": \"average\"\r\n\t * }\r\n\t * }]\r\n\t * }\r\n\t * ```\r\n\t *\r\n\t * @default false\r\n\t * @see {@link https://www.amcharts.com/docs/v4/concepts/axes/date-axis/#Dynamic_data_item_grouping} for more information about dynamic data item grouping.\r\n\t * @since 4.7.0\r\n\t * @param value Group data points?\r\n\t */\r\n\tpublic set groupData(value: boolean) {\r\n\t\tif (this.setPropertyValue(\"groupData\", value)) {\r\n\t\t\tthis.series.each((series) => {\r\n\t\t\t\tseries.setDataSet(\"\");\r\n\r\n\t\t\t\tif (value && !series.dataGrouped && series.inited) {\r\n\t\t\t\t\tseries._baseInterval[this.uid] = this.mainBaseInterval;\r\n\t\t\t\t\tthis.groupSeriesData(series);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\tthis._currentDataSetId = \"\"\r\n\t\t\tthis._groupInterval = undefined;\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.invalidateSeries();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Group data points?\r\n\t */\r\n\tpublic get groupData(): boolean {\r\n\t\treturn this.getPropertyValue(\"groupData\");\r\n\t}\r\n\r\n\t/**\r\n\t * Disables automatic selection of data grouping intervals and always uses\r\n\t * `groupInterval` if set. Works only if `groupData = true`.\r\n\t * \r\n\t * @since 4.9.24\r\n\t * @param value Interval\r\n\t */\r\n\tpublic set groupInterval(value: ITimeInterval) {\r\n\t\tif (this.setPropertyValue(\"groupInterval\", value)) {\r\n\t\t\tthis.invalidate();\r\n\t\t\tthis.invalidateSeries();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * @return Interval\r\n\t */\r\n\tpublic get groupInterval(): ITimeInterval {\r\n\t\treturn this.getPropertyValue(\"groupInterval\");\r\n\t}\r\n\r\n\t/**\r\n\t * Indicates threshold of data items in selected range at which to start\r\n\t * aggregating data items if `groupData = true`.\r\n\t * \r\n\t * @default 200\r\n\t * @since 4.7.0\r\n\t * @param value Number of data items\r\n\t */\r\n\tpublic set groupCount(value: number) {\r\n\t\tthis.setPropertyValue(\"groupCount\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Number of data items\r\n\t */\r\n\tpublic get groupCount(): number {\r\n\t\treturn this.getPropertyValue(\"groupCount\");\r\n\t}\r\n\r\n\t/**\r\n\t * If set will recalculate all timestamps in data by applying specific offset\r\n\t * in minutes.\r\n\t *\r\n\t * IMPORTANT: do not set `timezoneOffset` on both `DateAxis` and `dateFormatter`. It\r\n\t * will skew your results by applying offset twice.\r\n\t * \r\n\t * @since 4.8.5\r\n\t * @param value Time zone offset in minutes\r\n\t */\r\n\tpublic set timezoneOffset(value: number) {\r\n\t\tthis.setPropertyValue(\"timezoneOffset\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @todo Timezone offset in minutes\r\n\t */\r\n\tpublic get timezoneOffset(): number {\r\n\t\treturn this.getPropertyValue(\"timezoneOffset\");\r\n\t}\r\n\r\n\t/**\r\n\t * If set will recalculate all timestamps in data to specific named timezone,\r\n\t * e.g. `\"America/Vancouver\"`, `\"Australia/Sydney\"`, `\"UTC\"`, etc.\r\n\t *\r\n\t * IMPORTANT: it is no longer recommended to use this setting. Please \r\n\t * set`timezone` on `dateFormatter`.\r\n\t *\r\n\t * @deprecated\r\n\t * @since 4.10.1\r\n\t * @param value Time zone\r\n\t */\r\n\tpublic set timezone(value: string) {\r\n\t\tthis.setPropertyValue(\"timezone\", value);\r\n\t}\r\n\r\n\t/**\r\n\t * @return Timezone\r\n\t */\r\n\tpublic get timezone(): string {\r\n\t\treturn this.getPropertyValue(\"timezone\");\r\n\t}\r\n\r\n\t/**\r\n\t * Current grid interval.\r\n\t *\r\n\t * @return Grid interval\r\n\t */\r\n\tpublic get gridInterval(): ITimeInterval {\r\n\t\treturn this._gridInterval;\r\n\t}\r\n\r\n\t/**\r\n\t * @ignore\r\n\t */\r\n\tpublic makeGap(dataItem: LineSeriesDataItem, previous: LineSeriesDataItem): boolean {\r\n\t\tlet series = dataItem.component;\r\n\t\tif (dataItem && previous) {\r\n\t\t\tif (!series.connect && $type.isNumber(series.autoGapCount)) {\r\n\t\t\t\tif (series.baseAxis == this) {\r\n\t\t\t\t\tlet date = dataItem.dates[\"date\" + this.axisLetter];\r\n\t\t\t\t\tlet prevDate = previous.dates[\"date\" + this.axisLetter];\r\n\r\n\t\t\t\t\tif (date && prevDate) {\r\n\t\t\t\t\t\tlet time = date.getTime();\r\n\t\t\t\t\t\tlet prevTime = prevDate.getTime();\r\n\r\n\t\t\t\t\t\tif (time - prevTime > series.autoGapCount * this.baseDuration) {\r\n\t\t\t\t\t\t\treturn true;\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\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @return base value\r\n\t */\r\n\tpublic get baseValue(): number {\r\n\t\treturn this.min;\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[\"DateAxis\"] = DateAxis;\r\nregistry.registeredClasses[\"DateAxisDataItem\"] = DateAxisDataItem;\r\n"]}
\No newline at end of file