1 line
301 KiB
Plaintext
1 line
301 KiB
Plaintext
{"version":3,"file":"chart-BIax9IsQ.js","sources":["../src/lib/tchart/animator.ts","../src/lib/tchart/format.ts","../src/lib/tchart/utils.ts","../src/lib/tchart/areas.ts","../src/lib/tchart/axisX.ts","../src/lib/tchart/axisY.ts","../src/lib/tchart/bars.ts","../src/lib/tchart/composer.ts","../src/lib/tchart/fade.ts","../src/lib/tchart/drag.ts","../src/lib/tchart/handle.ts","../src/lib/tchart/lines.ts","../src/lib/tchart/switchers.ts","../src/lib/tchart/tip.ts","../src/lib/tchart/chart.ts"],"sourcesContent":["import TComposer from './composer';\nimport {TChartAnimationItem, TChartAnimationProperty, TChartState} from './types';\n\nconst easing = (st: number, ed: number, per: number, tween: string) => {\n const functions: Record<string, (t: number, b: number, c: number, d: number) => number> = {\n linear: (t, b, c, d) => {\n return c * t / d + b;\n },\n\n easeInOutQuad: (t, b, c, d) => {\n t /= d * 0.5;\n if(t < 1) return c * 0.5 * t * t + b;\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n }\n };\n\n return functions[tween](per, st, ed - st, 1);\n};\n\nexport default class TAnimator {\n private composer: TComposer;\n private state: TChartState;\n private queue: Record<keyof TChartState, TChartAnimationItem> = {} as any;\n private queueSize: number = 0;\n private animFrame?: number;\n\n constructor(opts: {state: TChartState, composer: TComposer}) {\n this.composer = opts.composer;\n this.state = opts.state;\n }\n\n public add<T extends TChartAnimationProperty<any>>(params: T[]) {\n let i = 0;\n const j = 0;\n const cur = +new Date();\n let item: TChartAnimationItem, param: TChartAnimationProperty, delta: number;\n const queue = this.queue;\n\n while(i < params.length) {\n param = params[i];\n item = queue[param.prop];\n\n if(!item) {\n if(param.end === param.state[param.prop]) {\n param.cbEnd && param.cbEnd(param.state);\n i++;\n continue;\n }\n\n item = {\n lastStart: 1\n } as TChartAnimationItem;\n queue[param.prop] = item;\n this.queueSize++;\n }\n\n delta = cur - item.lastStart;\n\n param.duration *= this.state.speed;\n param.delay *= this.state.speed;\n\n item.cbEnd = param.cbEnd;\n item.state = param.state;\n item.lastStart = cur;\n item.start = param.state[param.prop] as number;\n item.end = param.end;\n item.startDt = cur + (param.delay || 0);\n item.endDt =\n item.startDt +\n (param.duration || 0) -\n (param.fixed ? 0 : Math.max(param.duration - delta, 0));\n item.tween = param.tween || 'easeInOutQuad';\n item.speed = param.speed;\n item.group = param.group;\n\n i++;\n }\n\n if(!this.animFrame) {\n this.animFrame = requestAnimationFrame(this.step);\n }\n }\n\n public get(prop: keyof TChartState) {\n return this.queue[prop];\n }\n\n private step = () => {\n const done: (keyof TChartState)[] = [];\n const cur = +new Date();\n let item: TChartAnimationItem,\n time: number,\n duration: number,\n per: number,\n curVal: number,\n newVal: number;\n const group: TChartAnimationProperty['group'] = {top: false, bottom: false};\n\n for(const itemKey in this.queue) {\n item = this.queue[itemKey as keyof TChartState];\n time = cur;\n duration = item.endDt - item.startDt;\n curVal = item.state[itemKey as keyof TChartState] as number;\n const delayed = time < item.startDt;\n\n if(time < item.startDt) {\n time = item.startDt;\n } else if(time > item.endDt) {\n time = item.endDt;\n }\n\n per = duration ? (time - item.startDt) / duration : (delayed ? 0 : 1);\n\n let newVal: number;\n if(per < 1) {\n if(item.tween === 'exp') {\n newVal = curVal + (item.end - curVal) * item.speed;\n } else {\n newVal = easing(item.start, item.end, per, item.tween);\n }\n } else {\n newVal = item.end;\n }\n\n if(newVal !== curVal) {\n // @ts-ignore\n item.state[itemKey as keyof TChartState] = newVal;\n group.top = group.top || item.group.top;\n group.bottom = group.bottom || item.group.bottom;\n } else if(newVal === item.end) {\n done.push(itemKey as keyof TChartState);\n }\n }\n\n // Remove animations that are done\n let j = 0;\n while(j < done.length) {\n this.queue[done[j]].cbEnd && this.queue[done[j]].cbEnd(this.queue[done[j]].state);\n delete this.queue[done[j]];\n j++;\n }\n\n this.queueSize -= done.length;\n\n this.composer.render(group);\n\n if(!this.queueSize) {\n delete this.animFrame;\n } else {\n this.animFrame = requestAnimationFrame(this.step);\n }\n };\n}\n","import {TChartData} from './types';\n\nconst MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nconst MONTHS_SHORT = MONTHS.map((month) => month.slice(0, 3));\nconst WEEK_DAYS = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nconst WEEK_DAYS_SHORT = WEEK_DAYS.map((month) => month.slice(0, 3));\n\nexport function statsFormatDayHour(value: number, data: TChartData) {\n return statsFormatDayHourFull(value, data);\n}\n\nlet utcDiff: number;\nexport function statsFormatDayHourFull(value: number, data: TChartData) {\n if(utcDiff === undefined) {\n utcDiff = new Date().getTimezoneOffset() * 60e3;\n }\n\n return data.getLabelTime(86400e3 + +value * 3600e3 + utcDiff);\n}\n\nexport function statsFormatDay(value: number, data: TChartData) {\n return data.getLabelDate(value, {isShort: true, displayYear: false});\n}\n\nexport function statsFormatMin(value: number, data: TChartData) {\n return data.getLabelTime(value);\n}\n\nexport function statsFormatText(value: number | string) {\n return '' + value;\n}\n\nexport function getLabelDate(\n value: number,\n {\n isShort,\n isMonthShort = true,\n displayWeekDay,\n displayYear = true,\n displayHours\n }: {\n isShort?: boolean,\n isMonthShort?: boolean,\n displayWeekDay?: boolean,\n displayYear?: boolean,\n displayHours?: boolean\n } = {}\n) {\n const date = new Date(value);\n const weekDaysArray = isShort ? WEEK_DAYS_SHORT : WEEK_DAYS;\n\n let string = `${date.getUTCDate()} ${(isMonthShort ? MONTHS_SHORT : MONTHS)[date.getUTCMonth()]}`;\n if(displayWeekDay) {\n string = `${weekDaysArray[date.getUTCDay()]}, ` + string;\n }\n if(displayYear) {\n string += ` ${date.getUTCFullYear()}`;\n }\n if(displayHours) {\n string += `, ${('0' + date.getUTCHours()).slice(-2)}:${('0' + date.getUTCMinutes()).slice(-2)}`\n }\n\n return string;\n}\n\nexport function getLabelTime(value: number) {\n return new Date(value).toString().match(/(\\d+:\\d+):/)[1];\n}\n","import {statsFormatDay, statsFormatDayHour, statsFormatDayHourFull, statsFormatMin} from './format';\nimport {TChartData} from './types';\n\nMath.log2 ||= function(x) {\n return Math.log(x) * Math.LOG2E;\n};\n\nMath.log10 ||= function(x) {\n return Math.log(x) * Math.LOG10E;\n};\n\nexport function simplifyData(tp: any, x: number[], ys: TChartData['ys'], xScale: number, xShift: number, visibleCols: number[], xInd1: number, xInd2: number, dw: number) {\n const pointsPerPixel = (xInd2 - xInd1) / dw;\n const optX: number[] = [];\n const optYs: {y: number[]}[] = [];\n\n if(pointsPerPixel <= 1) {\n return {\n xInd1: xInd1,\n xInd2: xInd2,\n x: x,\n ys: ys\n };\n } else {\n let xInd = 0;\n let xPrev = -999999999;\n const colsLen = visibleCols.length;\n let cnt: number;\n\n for(let i = xInd1; i <= xInd2; i++) {\n const tmpX = x[i] * xScale + xShift << 0;\n const notTheSame = tmpX > xPrev;\n\n if(notTheSame) {\n optX[xInd] = x[i];\n xInd++;\n } else {\n cnt++;\n }\n\n // calc avg y per column that fits inside same x in pixels\n for(let j = 0; j < colsLen; j++) {\n const visColInd = visibleCols[j];\n optYs[visColInd] = optYs[visColInd] || {y: []};\n const prevOptY = optYs[visColInd].y[xInd - 1];\n const curY = ys[visColInd].y[i];\n if(prevOptY === undefined) {\n optYs[visColInd].y[xInd - 1] = curY;\n } else {\n optYs[visColInd].y[xInd - 1] += curY;\n }\n if(xInd > 1) {\n if(notTheSame) {\n optYs[visColInd].y[xInd - 2] /= cnt;\n }\n if(i === xInd2) {\n optYs[visColInd].y[xInd - 1] /= cnt;\n }\n }\n }\n\n if(notTheSame) {\n cnt = 1;\n }\n\n xPrev = tmpX;\n }\n\n xInd1 = 0;\n xInd2 = xInd - 1;\n\n return {\n isOptimized: pointsPerPixel > 1,\n xInd1: 0,\n xInd2: xInd - 1,\n x: optX,\n ys: optYs\n };\n }\n}\n\nexport function getElemPagePos($el: HTMLElement) {\n const rect = $el.getBoundingClientRect();\n\n return {\n x: rect.left + (window.pageXOffset || document.documentElement.scrollLeft),\n y: rect.top + (window.pageYOffset || document.documentElement.scrollTop)\n };\n}\n\nexport function getXIndex(x: number[], xc: number, doNotClip?: boolean) {\n let i1 = 0;\n let i2 = x.length - 1;\n\n if(!doNotClip) {\n if(xc < x[i1]) {\n xc = x[i1];\n } else if(xc > x[i2]) {\n xc = x[i2];\n }\n }\n\n while(Math.abs(i1 - i2) > 1) {\n const i = Math.round((i1 + i2) / 2);\n\n if(xc >= x[i1] && xc <= x[i]) {\n i2 = i;\n } else {\n i1 = i;\n }\n }\n\n return i1 + (xc - x[i1]) / (x[i2] - x[i1]);\n}\n\nexport function triggerEvent(eventName: string, details: any) {\n if(typeof(window.CustomEvent) !== 'function') return;\n document.dispatchEvent(new CustomEvent(eventName, {detail: details || null}));\n}\n\nexport function isTouchDevice() {\n const prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');\n const mq = (query: string) => {\n return window.matchMedia(query).matches;\n };\n\n // @ts-ignore\n if(('ontouchstart' in window) || (window as any).DocumentTouch && document instanceof DocumentTouch) {\n return true;\n }\n\n const query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');\n return mq(query);\n}\n\nexport function drawRoundedRect(ctx: CanvasRenderingContext2D, dpi: number, w: number, h: number, x: number, y: number, r: [number, number, number, number] | number) {\n w *= dpi;\n h *= dpi;\n x *= dpi;\n y *= dpi;\n\n if(typeof(r) === 'number') {\n r = [r, r, r, r];\n }\n\n r[0] *= dpi; // tl\n r[1] *= dpi; // tr\n r[2] *= dpi; // br\n r[3] *= dpi; // bl\n\n ctx.beginPath();\n ctx.moveTo(x + r[0], y);\n ctx.lineTo(x + w - r[1], y);\n ctx.quadraticCurveTo(x + w, y, x + w, y + r[1]);\n ctx.lineTo(x + w, y + h - r[2]);\n ctx.quadraticCurveTo(x + w, y + h, x + w - r[2], y + h);\n ctx.lineTo(x + r[3], y + h);\n ctx.quadraticCurveTo(x, y + h, x, y + h - r[3]);\n ctx.lineTo(x, y + r[0]);\n ctx.quadraticCurveTo(x, y, x + r[0], y);\n ctx.closePath();\n}\n\nexport function drawRoundedRect2(ctx: CanvasRenderingContext2D, dpi: number, w: number, h: number, x: number, y: number, r: number) {\n w *= dpi;\n h *= dpi;\n x *= dpi;\n y *= dpi;\n r *= dpi;\n\n if(w < 2 * r) r = w / 2;\n if(h < 2 * r) r = h / 2;\n ctx.beginPath();\n ctx.moveTo(x + r, y);\n ctx.arcTo(x + w, y, x + w, y + h, r);\n ctx.arcTo(x + w, y + h, x, y + h, r);\n ctx.arcTo(x, y + h, x, y, r);\n ctx.arcTo(x, y, x + w, y, r);\n ctx.closePath();\n}\n\ntype Formatter = (x: number, isZoom?: boolean, unknown?: boolean) => string;\n\nexport function getFormatter(formatterName: 'xRangeFormatter' | 'xTickFormatter' | 'xTooltipFormatter' | 'yTickFormatter' | 'yTooltipFormatter', data: TChartData, zoomMorph: number): Formatter {\n const lookupIn = zoomMorph && zoomMorph > 0.5 && data.details ? data.details : data;\n const f: string = lookupIn[formatterName as keyof typeof lookupIn];\n const map: Record<string, Formatter> = {\n 'statsFormatDayHourFull': (value) => statsFormatDayHourFull(value, data),\n 'statsFormatDayHour': (value) => statsFormatDayHour(value, data),\n 'statsFormat(\\'week\\')': (value) => statsFormatDay(value, data),\n 'statsFormat(\\'day\\')': (value) => statsFormatDay(value, data),\n 'statsFormat(\\'hour\\')': (value) => statsFormatMin(value, data),\n 'statsFormat(\\'5min\\')': (value) => statsFormatMin(value, data),\n 'statsFormatTooltipValue': yTooltipFormatter,\n 'statsTooltipFormat(\\'week\\')': (value) => data.getLabelDate(value),\n 'statsTooltipFormat(\\'day\\')': (value) => data.getLabelDate(value),\n 'statsTooltipFormat(\\'hour\\')': (value) => data.getLabelTime(value),\n 'statsTooltipFormat(\\'5min\\')': (value) => data.getLabelTime(value),\n 'null': (value) => '' + value\n };\n\n let formatter = map[f] || map['null'];\n if(f === 'null') {\n const m: Record<string, Formatter> = {\n xRangeFormatter: (value) => data.getLabelDate(value, {isShort: false, isMonthShort: false}),\n yTickFormatter: yTickFormatter as any\n };\n\n formatter = m[formatterName] || formatter;\n }\n\n return formatter;\n}\n\nexport function yTickFormatter(val: number, step: number, isFractional?: boolean) {\n if(val === 0) return '' + 0;\n\n if(step < 1000) {\n return '' + Math.floor(val);\n } else {\n if(step >= 1000 && step < 1000000) {\n if(isFractional) {\n return Math.floor(10 * val / 1000) / 10 + 'K';\n } else {\n return Math.round(val / 1000) + 'K';\n }\n } else {\n if(isFractional) {\n return Math.floor(10 * val / 1000000) / 10 + 'M';\n } else {\n return Math.round(val / 1000000) + 'M';\n }\n }\n }\n}\n\nexport function yTooltipFormatter(val: number | string) {\n if(typeof(val) !== 'number') {\n return typeof(val) === 'string' ? val : '?';\n }\n // var endingZeroesReg = new RegExp('\\\\.0+$', 'g');\n // var numValue = item.y[xInd];\n // if (typeof numValue === 'number') {\n // numValue = numValue.toFixed(2).toString(10);\n // } else {\n // numValue = numValue + '';\n // }\n // this.labels[ind].$valueText.nodeValue = numValue.replace(endingZeroesReg, '').replace(thSepReg, ' ');\n return statsFormatKMBT(val);\n}\n\nexport function statsFormatKMBT(val: number, kmbt?: string, precision?: number) {\n if(val === 0) {\n return '0';\n }\n if(kmbt === undefined) {\n kmbt = statsChooseNumKMBT(val);\n }\n const sval = statsFormatFixedKMBT(val, kmbt);\n if(precision === undefined) {\n precision = statsChoosePrecision(sval);\n }\n return sval.toFixed(precision) + kmbt;\n}\n\nexport function statsFormatFixedKMBT(val: number, kmbt: string) {\n switch(kmbt) {\n case 'K':\n return val / 1000;\n case 'M':\n return val / 1000000;\n case 'B':\n return val / 1000000000;\n case 'T':\n return val / 1000000000000;\n }\n return val\n}\n\nexport function statsChoosePrecision(val: number) {\n var absVal = Math.abs(val);\n if(absVal > 10) {\n return 0;\n }\n if(absVal >= 1.0) {\n return (Math.abs(absVal - Math.floor(absVal)) < 0.001) ? 0 : 1;\n }\n return 2;\n}\n\nexport function statsChooseNumKMBT(val: number) {\n var absVal = Math.abs(val);\n if(absVal >= 1000000000000) {\n return 'T';\n } else if(absVal >= 1000000000) {\n return 'B';\n } else if(absVal >= 1000000) {\n return 'M';\n } else if(absVal >= 2000) {\n return 'K';\n }\n return '';\n}\n\ntype RoundedRange = {\n good?: boolean,\n yMin: number,\n yMax: number,\n yMinOrig: number,\n yMaxOrig: number\n};\nexport function roundRange(y1: number, y2: number, cnt?: number, refRange?: RoundedRange): RoundedRange {\n // for paired graphs, second one should fit range of the first one (wich is rounded)\n if(Math.abs(y2 - y1) < 1) {\n y1 -= y1 / 10;\n y2 += y2 / 10;\n }\n if(refRange) {\n const yd1 = (refRange.yMinOrig - refRange.yMin) / (refRange.yMaxOrig - refRange.yMinOrig);\n const yd2 = (refRange.yMax - refRange.yMaxOrig) / (refRange.yMaxOrig - refRange.yMinOrig);\n return {\n yMin: y1 - (y2 - y1) * yd1,\n yMax: y2 + (y2 - y1) * yd2,\n yMinOrig: y1,\n yMaxOrig: y2\n };\n }\n\n const calc = (d: number) => {\n const power = curPower * d;\n const min = Math.floor(y1 / power) * power;\n const max = min + cnt * Math.ceil((y2 - min) * scale / power) * power;\n\n return {\n good: max <= maxLevel && min >= minLevel,\n yMin: Math.round(min),\n yMax: Math.round(max),\n yMinOrig: y1,\n yMaxOrig: y2\n };\n };\n\n const scale = 1 / cnt;\n const step = (y2 - y1) * scale;\n let curPower = Math.max(Math.pow(10, Math.floor(Math.log10(step))), 1);\n const minLevel = y1 - step * 0.5;\n const maxLevel = y2 + step * 0.5;\n let range;\n\n let c = 1;\n\n while(true) {\n range = calc(5);\n if(range.good) break;\n range = calc(2);\n if(range.good) break;\n range = calc(1);\n if(range.good) break;\n curPower *= 0.1;\n c++;\n if(c > 10) { // seems impossible? but have no time to prove it, so this is save exit from cycle\n return {\n yMinOrig: y1,\n yMaxOrig: y2,\n yMin: y1,\n yMax: y2\n };\n }\n }\n\n return range;\n}\n","import {getXIndex, simplifyData} from './utils';\nimport {TChartAngle, TChartUnitOptions} from './types';\n\nexport default class TAreas {\n private opts: TChartUnitOptions;\n private $canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private cached: string;\n private isDarkMode: boolean;\n private savedX1: number;\n private savedX2: number;\n private prevElastic: number;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n\n if(opts.additional.mini) {\n this.$canvas = document.createElement('canvas');\n this.ctx = this.$canvas.getContext('2d', {alpha: true});\n }\n }\n\n onResize() {\n if(this.opts.additional.mini) {\n var dpi = this.opts.settings.dpi;\n var dims = this.opts.additional.mini ? this.opts.state.dims.mini : this.opts.state.dims.graph;\n this.$canvas.width = dims.w * dpi;\n this.$canvas.height = dims.h * dpi;\n this.cached = '';\n }\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n render() {\n let i, j, y, o, xScale;\n const opts = this.opts;\n const ys = opts.data.ys;\n const state = opts.state;\n const mini = opts.additional.mini;\n const x1 = mini ? state.xg1 : state.x1;\n const x2 = mini ? state.xg2 : state.x2;\n const settings = opts.settings;\n const pTop = settings[`PADD${mini ? '_MINI_AREA' : ''}`][0];\n const pRight = settings[`PADD${mini ? '_MINI_AREA' : ''}`][1];\n const pBottom = settings[`PADD${mini ? '_MINI_AREA' : ''}`][2];\n const pLeft = settings[`PADD${mini ? '_MINI_AREA' : ''}`][3];\n const x = opts.data.x;\n const dpi = opts.settings.dpi;\n const ctx = mini ? this.ctx : this.opts.ctx;\n const prevY = [];\n const totalPerX = [];\n const totalPerY = [];\n const overlap = mini ? 0 : 0;\n const dims = mini ? state.dims.mini : state.dims.graph;\n const zoomMorph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n let morph = zoomMorph;\n const zoom = state.zoomMode;\n const ysLen = ys.length;\n\n // cache rendered version\n if(mini) {\n const hash = [dims.w, dims.h, state.xg1, state.xg2, this.isDarkMode, state.zoomMode, zoomMorph];\n for(i = 0; i < ysLen; i++) {\n hash.push(state[`om_${i}`]);\n hash.push(state[`f_${i}`]);\n }\n const joinedHash = hash.join(',');\n\n if(joinedHash === this.cached) {\n this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n return;\n }\n\n this.cached = joinedHash;\n }\n\n xScale = (dims.w - pRight - pLeft) / (x2 - x1);\n let xInd1 = Math.floor(getXIndex(x, x1 - pLeft / xScale));\n let xInd2 = Math.ceil(getXIndex(x, x2 + pRight / xScale));\n\n xScale *= dpi;\n const xShift = (pLeft + (mini ? 0 : dims.l)) * dpi - x1 * xScale;\n const hBottom = (dims.h - pBottom + (mini ? 0 : dims.t)) * dpi;\n\n const visibleCols = [];\n const opacityCols = [];\n let textToCenter = 0; // animation for text moving to center for only 1 selected column\n let fullyVisibleCount = 0;\n let fullyVisibleInd = 0;\n let hasUnfocusedColumns = false;\n for(i = 0; i < ysLen; i++) {\n o = mini ? state[`om_${i}`] : state[`o_${i}`];\n\n hasUnfocusedColumns = hasUnfocusedColumns || state[`f_${i}`] < 1;\n\n if(o < 1 && o > 0) {\n textToCenter = o;\n }\n\n if(o > 0) {\n visibleCols.push(i);\n opacityCols.push(o);\n\n if(o === 1 && state[`e_${i}`]) {\n fullyVisibleCount++;\n fullyVisibleInd = visibleCols.length - 1;\n }\n }\n }\n\n const colsLen = visibleCols.length;\n textToCenter = fullyVisibleCount === 1 ? textToCenter : 1;\n\n const y1 = mini ? state['y1m'] : state['y1'];\n const y2 = mini ? state['y2m'] : state['y2'];\n const optData = simplifyData('line', x, ys, xScale, xShift, visibleCols, xInd1, xInd2, dims.w - pRight - pLeft);\n\n xInd1 = optData.xInd1;\n xInd2 = optData.xInd2;\n const optX = optData.x;\n const optYs = optData.ys;\n let hasGapsInData = false;\n\n for(j = xInd1; j <= xInd2; j++) {\n prevY[j] = 0;\n totalPerX[j] = 0;\n for(i = 0; i < colsLen; i++) {\n totalPerX[j] += (optYs[visibleCols[i]].y[j] || 0) * opacityCols[i];\n }\n if(totalPerX[j] === 0) {\n hasGapsInData = true;\n }\n }\n\n if(hasGapsInData || hasUnfocusedColumns) {\n ctx.fillStyle = this.opts.settings.COLORS.background;\n ctx.fillRect(0, 0, dims.w * dpi, dims.h * dpi);\n }\n\n let angles: TChartAngle[], radius: number, cx: number, cy: number;\n\n // calc totals for fractional period so all animations will be transformed for pie representation\n if(zoomMorph > 0 && !mini) {\n if(morph === 1) {\n this.savedX1 = x1;\n this.savedX2 = x2;\n }\n\n let xInd1Real: number, xInd2Real: number;\n if(morph < 1) {\n const x1AnimItem = this.opts.animator.get('x1');\n const x2AnimItem = this.opts.animator.get('x2');\n const x1End = x1AnimItem ? x1AnimItem.end : this.opts.state['x1'];\n const x2End = x2AnimItem ? x2AnimItem.end : this.opts.state['x2'];\n xInd1Real = getXIndex(x, this.opts.state.zoomDir === -1 ? this.savedX1 : x1End, true);\n xInd2Real = getXIndex(x, this.opts.state.zoomDir === -1 ? this.savedX2 : x2End, true);\n } else {\n xInd1Real = getXIndex(x, x1, true);\n xInd2Real = getXIndex(x, x2, true);\n }\n xInd2Real--;\n\n var xInd1RealFloor = Math.floor(xInd1Real);\n var xInd1RealCeil = Math.ceil(xInd1Real);\n var xInd2RealFloor = Math.floor(xInd2Real);\n var xInd2RealCeil = Math.ceil(xInd2Real);\n var totalForAll = 0;\n var totalPerItem = [];\n\n for(i = 0; i < colsLen; i++) {\n totalPerItem[i] = 0;\n const tmpY = ys[visibleCols[i]].y;\n\n let tmp: number;\n for(j = xInd1RealCeil; j <= xInd2RealFloor; j++) {\n tmp = (tmpY[j] || 0) * opacityCols[i];\n totalPerItem[i] += tmp;\n totalForAll += tmp;\n }\n\n // partly visible data from left side\n tmp = ((xInd1RealCeil - xInd1Real) * (tmpY[xInd1RealFloor] || 0)) * opacityCols[i];\n totalPerItem[i] += tmp;\n totalForAll += tmp;\n\n // partly visible data from right side\n tmp = ((xInd2Real - xInd2RealFloor) * (tmpY[xInd2RealCeil] || 0)) * opacityCols[i];\n totalPerItem[i] += tmp;\n totalForAll += tmp;\n }\n\n // calc angles for pie representation\n const elastic = this.opts.state.zoomDir === 1 ? Math.pow(Math.min(Math.max(morph < 0.85 ? (morph-0.65)/0.2 : 1 - (morph-0.9)/0.15, 0), 1), 0.8) : this.prevElastic;\n let prevAngle = 2 * Math.PI - Math.PI / (7 - morph) - Math.PI / 8 * elastic;\n const initAngle = prevAngle;\n\n\n if(this.opts.state.zoomDir === 1) {\n morph = Math.min(Math.max((morph - 0.25) / 0.4, 0), 1);\n this.prevElastic = elastic;\n } else {\n morph = Math.min(Math.max((morph * 2.4) - 1.4, 0), 1);\n }\n\n\n angles = [];\n radius = settings.PIE_RADIUS * (zoomMorph < 1 ? 2.31 : 1) * dpi; // during zoom animation use clipping, then use plain geometry to create sectors\n cx = dpi * (dims.w / 2 + dims.l);\n cy = dpi * (dims.h / 2 + dims.t + 2);\n const rLen = 2 * Math.PI * radius / dpi;\n const pointsPerArcLen = 1 / 13; // 1 point per each 10 pixels of arc\n for(i = 0; i < colsLen; i++) {\n let percentage = totalPerItem[i] / totalForAll;\n percentage = percentage || 0; // absent data\n const len = 2 * Math.PI * percentage;\n let newAngle = prevAngle - len;\n const additionalPoints = Math.round(percentage * rLen * pointsPerArcLen);\n if(i === colsLen - 1) newAngle = initAngle - 2 * Math.PI;\n const overlapAng = Math.PI * 2 * 0.1 / (rLen);\n const yItem = ys[visibleCols[i]];\n angles.push({\n st: prevAngle + overlapAng,\n ed: newAngle - overlapAng,\n mid: prevAngle - len / 2 - overlapAng / 2,\n additionalPoints: Math.max(additionalPoints, 4),\n percentage: percentage === 0 ? 0 : Math.max(Math.round(percentage * 100), 1),\n percentageText: percentage === 0 ? '' : (percentage < 0.01 ? '<1%' : Math.round(percentage * 100) + '%'),\n ind: visibleCols[i],\n value: totalPerItem[i],\n label: yItem.label,\n color: this.isDarkMode ? yItem.colors_n[2] : yItem.colors_d[2]\n });\n\n\n prevAngle = newAngle;\n }\n\n state.pieAngles = angles;\n }\n\n const yScale = dpi * (dims.h - pTop - pBottom + (mini ? 0 : -4));\n const yShift = (dims.h - pBottom + (mini ? 0 : dims.t)) * dpi;\n\n let colInd = 0;\n\n for(i = 0; i < ysLen; i++) {\n o = mini ? state[`om_${i}`] : state[`o_${i}`];\n\n if(o <= 0) {\n continue;\n }\n\n y = optYs[i].y;\n\n const k = o * yScale;\n\n ctx.fillStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n ctx.globalAlpha = state[`f_${i}`] * 0.9 + 0.1;\n ctx.beginPath();\n\n if(zoomMorph === 0 || !mini) {\n // use regular version to skip complex math evaluations\n // despite of fact that they produce same result for morph === 0\n if(zoomMorph === 0) {\n if(i > 0) {\n ctx.moveTo(optX[xInd2] * xScale + xShift << 0, hBottom - prevY[xInd2] + overlap << 0);\n for(j = xInd2 - 1; j >= xInd1; j--) {\n ctx.lineTo(optX[j] * xScale + xShift << 0, hBottom - prevY[j] + overlap << 0);\n }\n } else {\n ctx.moveTo(optX[xInd2] * xScale + xShift << 0, hBottom << 0);\n ctx.lineTo(optX[xInd1] * xScale + xShift << 0, hBottom << 0);\n }\n\n if(colInd < colsLen - 1 || hasGapsInData) {\n for(j = xInd1; j <= xInd2; j++) {\n const curY = (yShift - ((y[j] * k / totalPerX[j]) || 0));\n const curH = hBottom - curY;\n let sy = prevY[j] + curH;\n if(sy > yScale) sy = yScale;\n ctx.lineTo(optX[j] * xScale + xShift << 0, hBottom - sy << 0);\n prevY[j] += curH;\n }\n } else {\n ctx.lineTo(optX[xInd1] * xScale + xShift << 0, hBottom - yScale << 0);\n ctx.lineTo(optX[xInd2] * xScale + xShift << 0, hBottom - yScale << 0);\n }\n } else {\n // magic starts here\n const calcTrans = (fromX: number, fromY: number, toAngle: number, toR: number) => {\n let sx = 0;\n let sy = 0;\n if(selectionOffset && fullyVisibleCount > 1) {\n sx = Math.cos(angles[colInd].mid) * selectionOffset * 8 * dpi;\n sy = -Math.sin(angles[colInd].mid) * selectionOffset * 8 * dpi;\n }\n\n if(toR > radius) toR = radius;\n let fromAngle = Math.atan2(cy - fromY, fromX - cx);\n fromAngle = fromAngle < 0 ? Math.PI * 2 + fromAngle : fromAngle;\n const fromR = Math.pow((cy - fromY) * (cy - fromY) + (fromX - cx) * (fromX - cx), 0.5);\n\n if(Math.abs(toAngle - fromAngle) > Math.PI * (colsLen === 1 ? 1.5 : 1)) {\n toAngle -= Math.PI * 2;\n }\n if(toAngle < -Math.PI * 2) {\n toAngle -= -Math.PI * 2;\n }\n\n const ang = fromAngle + morph * (toAngle - fromAngle);\n const r = fromR + morph * (toR - fromR);\n const res = [\n cx + Math.cos(ang) * r + sx,\n cy - Math.sin(ang) * r + sy\n ] as const;\n\n return res;\n };\n\n const additionalSteps = (zoomMorph < 1 ? 4 : angles[colInd].additionalPoints);\n let dist: number;\n let cBot = false, cTop = false, xj: number;\n var selectionOffset = state[`pieInd_${visibleCols[colInd]}`] || 0;\n\n if(angles[colInd].percentage === 0) {\n ctx.globalAlpha = 0;\n }\n\n let res = calcTrans(optX[xInd2] * xScale + xShift, hBottom - prevY[xInd2], angles[0].st, radius);\n ctx.moveTo(res[0], res[1]);\n\n if(colInd > 0) {\n for(j = xInd2 - 1; j >= xInd1; j--) {\n xj = optX[j] * xScale + xShift;\n if(xj === cx) cBot = true;\n if(xj >= cx) {\n dist = (xj - cx) / (dims.w * dpi / 2);\n if(morph === 0) dist = 0;\n res = calcTrans(xj, hBottom - prevY[j] + overlap, angles[0].st, radius * dist);\n } else {\n if(!cBot) {\n cBot = true;\n const sc = (cx - xj) / (optX[j + 1] * xScale + xShift - xj);\n const sy1 = hBottom - prevY[j] + overlap;\n const sy2 = hBottom - prevY[j + 1] + overlap;\n res = calcTrans(cx, sy1 + sc * (sy2 - sy1), angles[colInd].st, 0);\n ctx.lineTo(res[0], res[1]);\n }\n dist = (cx - xj) / (dims.w * dpi / 2);\n res = calcTrans(xj, hBottom - prevY[j] + overlap, angles[colInd].st, radius * dist);\n }\n ctx.lineTo(res[0], res[1]);\n }\n } else {\n res = calcTrans(\n optX[xInd1] * xScale + xShift,\n hBottom,\n angles[0].st,\n radius\n );\n ctx.lineTo(res[0], res[1]);\n }\n\n if(colInd < colsLen - 1) {\n let sy1: number;\n for(j = 0; j <= additionalSteps; j++) {\n const curY = (yShift - ((y[xInd1] * k / totalPerX[xInd1]) || 0));\n const curH = hBottom - curY;\n sy1 = hBottom - prevY[xInd1] + overlap;\n const sy2 = hBottom - prevY[xInd1] - curH;\n\n res = calcTrans(\n optX[xInd1] * xScale + xShift,\n sy1 + (j / additionalSteps) * (sy2 - sy1),\n angles[colInd].st + (j / additionalSteps) * (angles[colInd].ed - angles[colInd].st),\n radius\n );\n\n ctx.lineTo(res[0], res[1]);\n }\n\n for(j = xInd1; j <= xInd2; j++) {\n const curY = (yShift - ((y[j] * k / totalPerX[j]) || 0));\n const curH = hBottom - curY;\n xj = optX[j] * xScale + xShift;\n\n if(xj === cx) cTop = true;\n if(xj <= cx) {\n dist = (cx - xj) / (dims.w * dpi / 2);\n var xjprev = xj;\n var syprev = hBottom - prevY[j] - curH;\n res = calcTrans(xj, syprev, angles[colInd].ed, radius * dist);\n } else {\n if(!cTop) {\n cTop = true;\n const sc = (cx - xjprev) / (xj - xjprev);\n sy1 = syprev;\n const sy2 = hBottom - prevY[j] - curH;\n res = calcTrans(cx, sy1 + sc * (sy2 - sy1), angles[colInd].ed, 0);\n ctx.lineTo(res[0], res[1]);\n }\n dist = (xj - cx) / (dims.w * dpi / 2);\n if(morph === 0) dist = 0;\n res = calcTrans(xj, hBottom - prevY[j] - curH, angles[0].st, radius * dist);\n }\n\n ctx.lineTo(res[0], res[1]);\n prevY[j] += curH;\n }\n\n if(xj < cx) { // last day, haack\n if(!cTop) {\n res = calcTrans(cx, sy1, angles[colInd].ed, 0);\n ctx.lineTo(res[0], res[1]);\n }\n }\n } else {\n for(j = 0; j <= additionalSteps; j++) {\n res = calcTrans(\n (optX[xInd1] + (j / additionalSteps) * (optX[xInd2] - optX[xInd1])) * xScale + xShift,\n 0,\n angles[colInd].st + (j / additionalSteps) * (angles[0].st - 2 * Math.PI - angles[colInd].st),\n radius\n );\n\n ctx.lineTo(res[0], res[1]);\n }\n }\n }\n } else {\n const xw = this.opts.data.mainPeriodLen * xScale;\n\n ctx.moveTo(optX[xInd2] * xScale + xw + xShift, hBottom - prevY[xInd2]);\n\n if(i > 0) {\n ctx.lineTo(optX[xInd2] * xScale + xShift, hBottom - prevY[xInd2]);\n\n for(j = xInd2; j >= xInd1 + 1; j--) {\n ctx.lineTo(optX[j] * xScale + xShift, hBottom - (prevY[j] + morph * (prevY[j - 1] - prevY[j])) + overlap);\n ctx.lineTo(optX[j - 1] * xScale + xShift, hBottom - prevY[j - 1] + overlap);\n }\n } else {\n ctx.lineTo(optX[xInd1] * xScale + xShift, hBottom);\n }\n\n let curHNext: number;\n if(colInd < colsLen - 1) {\n for(j = xInd1; j <= xInd2 - 1; j++) {\n let curY = (yShift - ((y[j] * k / totalPerX[j]) || 0));\n const curH = hBottom - curY;\n\n if(j === xInd1) {\n ctx.lineTo(optX[xInd1] * xScale + xShift, hBottom - prevY[xInd1] - curH);\n }\n\n curY = (yShift - ((y[j + 1] * k / totalPerX[j + 1]) || 0));\n curHNext = hBottom - curY;\n\n const yTo = prevY[j] + curH;\n const yFrom = prevY[j + 1] + curHNext;\n\n ctx.lineTo(optX[j+1] * xScale + xShift, hBottom - (yFrom + morph * (yTo - yFrom)));\n ctx.lineTo(optX[j+1] * xScale + xShift, hBottom - yFrom);\n\n if(j === xInd2 - 1) {\n ctx.lineTo(optX[xInd2] * xScale + xw + xShift, hBottom - prevY[xInd2] - curHNext);\n }\n\n prevY[j] += curH;\n }\n } else {\n ctx.lineTo(optX[xInd1] * xScale + xShift << 0, hBottom - yScale << 0);\n ctx.lineTo(optX[xInd2] * xScale + xShift << 0, hBottom - yScale << 0);\n }\n\n prevY[xInd2] += curHNext;\n }\n\n ctx.closePath();\n ctx.fill();\n\n // texts\n if(!mini && zoomMorph > 0 && angles[colInd].percentageText) {\n const opacity = Math.pow(morph, this.opts.state.zoomDir === 1 ? 4 : 20) * o * (state[`f_${i}`] * 0.9 + 0.1);\n let fontSize = Math.max(Math.min(angles[colInd].percentage * 2, 26), 10);\n const rad = settings.PIE_RADIUS;\n let offset = rad * 2 / 3;\n const cosVal = Math.cos(angles[colInd].mid);\n const sinVal = Math.sin(angles[colInd].mid);\n const isOutboard = angles[colInd].percentage < opts.data.pieLabelsPercentages.outboard;\n\n let sx = 0;\n let sy = 0;\n if(selectionOffset && fullyVisibleCount > 1) {\n sx = cosVal * selectionOffset * 8 * dpi;\n sy = -sinVal * selectionOffset * 8 * dpi;\n }\n\n ctx.fillStyle = 'white';\n ctx.textAlign = 'center';\n ctx.globalAlpha = opacity;\n\n if(angles[colInd].percentage < opts.data.pieLabelsPercentages.hoverOnly) {\n ctx.globalAlpha = selectionOffset * opacity;\n }\n\n if(isOutboard) {\n fontSize = Math.max(fontSize, 14);\n offset = rad + fontSize / 3 + 13;\n ctx.fillStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n ctx.lineWidth = 1;\n ctx.strokeStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n\n const lx1 = cx + sx + (cosVal * (rad - 1)) * dpi;\n const ly1 = cy + sy - (sinVal * (rad - 1)) * dpi;\n const lx2 = cx + sx + (cosVal * (rad + 6 * (1 - selectionOffset) - 1)) * dpi;\n const ly2 = cy + sy - (sinVal * (rad + 6 * (1 - selectionOffset) - 1)) * dpi;\n\n ctx.beginPath();\n ctx.moveTo(lx1, ly1);\n ctx.lineTo(lx2, ly2);\n ctx.stroke();\n }\n\n const dx = (cosVal * offset) * (fullyVisibleInd === colInd ? textToCenter : 1);\n const tx = cx + sx + dx * dpi + (isOutboard ? (fontSize / 4 * angles[colInd].percentageText.length * dx / offset) * dpi : 0);\n const ty = cy + sy - (sinVal * offset) * (fullyVisibleInd === colInd ? textToCenter : 1) * dpi;\n\n ctx.font = `${opts.settings.FONT.bold} ${fontSize * dpi}px ${opts.settings.FONT.family}`;\n ctx.fillText(angles[colInd].percentageText, tx, ty + fontSize * dpi / 2.9);// fontSize * dpi / 2.9 cause text render point is baseline\n\n ctx.globalAlpha = 1;\n }\n\n colInd++;\n }\n\n ctx.globalAlpha = 1;\n\n mini && this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n }\n}\n","import {getXIndex} from './utils';\nimport {TChartUnitOptions} from './types';\n\ntype C = {[key in `ox_${string}`]: number};\nexport type TChartAxisXItem = {\n tp: number,\n xi: number,\n i: number,\n state: {\n ind: string\n } & C,\n};\n\nexport default class TAxisX {\n private opts: TChartUnitOptions;\n private ctx: CanvasRenderingContext2D;\n private items: Record<string, TChartAxisXItem>;\n private isDarkMode: boolean;\n private noAnimation: boolean;\n private prevXStep: number;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.ctx = opts.ctx;\n this.items = {};\n\n this.setAnimation(false);\n }\n\n onResize() {\n this.setAnimation(false);\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n setAnimation(enabled: boolean) {\n this.noAnimation = !enabled;\n }\n\n hideItem(ind: string, k: number) {\n this.items[ind].tp = 2;\n\n this.opts.animator.add([{\n prop: `ox_${ind}`,\n state: this.items[ind].state,\n end: 0,\n duration: this.noAnimation ? 0 : 200 * k,\n tween: 'linear',\n group: {top: true},\n cbEnd: this.deleteItem\n }]);\n }\n\n deleteItem = (state: TChartAxisXItem['state']) => {\n delete this.items[state.ind];\n };\n\n render(opacity: number) {\n const opts = this.opts;\n const dpi = opts.settings.dpi;\n const x = opts.data.x;\n const state = opts.state;\n const pRight = opts.settings.PADD[1];\n const pLeft = opts.settings.PADD[3];\n const animator = opts.animator;\n const xLen = x.length;\n const dims = this.opts.state.dims.axisX;\n const dimsDates = this.opts.state.dims.dates;\n const zoomMode = state.zoomMode;\n const zoomMorph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n\n const x1 = Math.floor(getXIndex(x, state.x1));\n const x2 = Math.ceil(getXIndex(x, state.x2));\n let x1End = x1;\n let x2End = x2;\n\n const isPointHasWidth = opts.graphStyle === 'bar' || opts.graphStyle === 'step';\n\n // fast calculation of average space occupied by label\n const space = (state.zoomMode && opts.data.details ?\n opts.data.details.maxXTickLength :\n opts.data.maxXTickLength) * 9;\n\n const offsetForBarGraphMain = isPointHasWidth ? this.opts.data.mainPeriodLen : 0;\n const offsetForBarGraphDetail = isPointHasWidth ? this.opts.data.detailPeriodLen : 0;\n const offsetForBarGraph = offsetForBarGraphMain + (offsetForBarGraphDetail - offsetForBarGraphMain) * zoomMorph;\n const offsetForBarGraphScale = offsetForBarGraphMain * (1 - zoomMorph);\n\n const xStepMain = (dims.w - pRight - pLeft) / Math.round((state.x2 - state.x1 + offsetForBarGraphMain) / this.opts.data.mainPeriodLen);\n const xStepDetail = (dims.w - pRight - pLeft) / Math.round((state.x2 - state.x1 + offsetForBarGraphDetail) / this.opts.data.detailPeriodLen);\n const xStep = xStepMain + (xStepDetail - xStepMain) * zoomMorph;\n\n let skipEachMain = Math.pow(2, Math.ceil(Math.log2(space / xStepMain)));\n let skipEachDetail = Math.pow(2, Math.ceil(Math.log2(space / xStepDetail)));\n const lxScale = (dims.w - pLeft - pRight) / (state.x2 - state.x1 + offsetForBarGraphScale);\n\n if(skipEachMain < 1) {\n skipEachMain = 1;\n }\n if(skipEachDetail < 1) {\n skipEachDetail = 1;\n }\n\n this.ctx.font = `${this.opts.settings.FONT.normal} ${11 * dpi}px ${this.opts.settings.FONT.family}`;\n this.ctx.textAlign = 'center';\n this.ctx.fillStyle = this.opts.settings.COLORS.axis.x;\n\n const changeSpeed = this.prevXStep ? (this.prevXStep > xStepMain ? this.prevXStep / xStepMain : xStepMain / this.prevXStep) : 1;\n let k = 1 / Math.pow(changeSpeed, 5);\n\n if(zoomMode && zoomMorph === 1) {\n k /= 2;\n }\n\n this.prevXStep = xStepMain;\n const x1Start = Math.max(x1 - Math.ceil((pLeft + space * 0.5) / xStep), 0);\n const x2Start = Math.min(x2 + Math.ceil((pRight + space * 0.5) / xStep), x.length - 1);\n\n if(zoomMode) {\n const x1AnimItem = this.opts.animator.get('x1');\n const x2AnimItem = this.opts.animator.get('x2');\n x1End = x1AnimItem ? x1AnimItem.end : this.opts.state['x1'];\n x2End = x2AnimItem ? x2AnimItem.end : this.opts.state['x2'];\n x1End = Math.floor(getXIndex(x, x1End));\n x2End = Math.floor(getXIndex(x, x2End));\n }\n\n let dtOffset: number;\n if(zoomMode) {\n const tmp1 = Math.max(x[this.opts.state.detailInd1], this.opts.state.xMainMin);\n const tmp2 = Math.min(x[this.opts.state.detailInd2], this.opts.state.xMainMax);\n dtOffset = Math.round((tmp2 - tmp1) / this.opts.data.mainPeriodLen) + (isPointHasWidth ? 0 : 1);\n }\n\n for(let i = x1Start; i <= x2Start; i++) {\n let shown = (i % skipEachMain) === 0;\n let prefix = 'm';\n\n if(zoomMode) {\n if(i < this.opts.state.detailInd1) {\n shown = (i % skipEachMain) === 0 && zoomMorph < 1;\n } else if(i <= this.opts.state.detailInd2) {\n shown = (Math.max(i - this.opts.state.detailInd1, 0) % skipEachDetail) === 0;\n prefix = 'd';\n } else {\n shown = (Math.max(i - (this.opts.state.detailInd2 - this.opts.state.detailInd1 + 1 - dtOffset), 0) % skipEachMain) === 0 && zoomMorph < 1;\n }\n }\n\n const id = x[i] + prefix;\n let item = this.items[id];\n\n if(shown) {\n if(!item) { // not exist or removed\n item = {\n tp: 1,\n xi: x[i],\n i: i,\n state: {\n ind: id\n }\n };\n item.state[`ox_${id}`] = 0;\n this.items[id] = item;\n\n animator.add([{\n prop: `ox_${id}`,\n state: item.state,\n end: 1,\n duration: this.noAnimation ? 0 : 200 * k,\n tween: 'linear',\n group: {top: true}\n }]);\n } else if(item.tp === 2) { // is hiding\n item.tp = 1;\n\n animator.add([{\n prop: `ox_${id}`,\n state: item.state,\n end: 1,\n duration: this.noAnimation ? 0 : 200 * k,\n tween: 'linear',\n group: {top: true}\n }]);\n }\n } else {\n if(item && item.tp === 1) { // is showing or shown\n this.hideItem(id, k);\n }\n }\n\n if(item && item.state[`ox_${id}`] > 0) {\n const xc = (item.xi - state.x1 + offsetForBarGraph / 2) * lxScale + pLeft;\n\n this.ctx.globalAlpha = item.state[`ox_${id}`] * opacity;\n\n if(xc + space / 2 >= dims.l && xc - space / 2 <= dims.l + dims.w) {\n // first and last labels manual align\n const xAligned = (xc + dims.l) * dpi;\n\n this.ctx.fillText(opts.data.datesShort[i], xAligned, (dims.t + 9) * dpi);\n }\n }\n }\n\n // remove the old ones, which is outside the current range\n for(const i in this.items) {\n const item = this.items[i];\n if(item.tp === 1 && ((item.xi < state.x1 - pLeft / lxScale) || (item.xi > state.x2 + pRight / lxScale))) {\n this.hideItem(i, k);\n }\n }\n\n this.ctx.globalAlpha = 1;\n\n if(!opts.data.subchart.show) {\n return;\n }\n\n let datesStr: string;\n if(zoomMode && zoomMorph === 1) {\n x2End--;\n }\n\n if(x2End < x1End) x2End = x1End;\n\n if(opts.data.datesRange[x1End] === opts.data.datesRange[x2End]) {\n datesStr = opts.data.datesRange[x1End];\n } else {\n datesStr = opts.data.datesRange[x1End] + ' — ' + opts.data.datesRange[x2End];\n }\n\n let fontSize = opts.settings.DATES_FONT_SIZE;\n if(!fontSize) {\n fontSize = 13;\n if(dims.w < 375) {\n fontSize = 11;\n }\n }\n\n this.ctx.font = `${opts.settings.FONT[opts.settings.DATES_WEIGHT]} ${fontSize * dpi}px ${opts.settings.FONT.family}`;\n this.ctx.textAlign = opts.settings.DATES_SIDE;\n this.ctx.fillStyle = opts.settings.COLORS.dates;\n this.ctx.fillText(\n datesStr,\n (dimsDates.l + (opts.settings.DATES_SIDE === 'right' ? dimsDates.w : 0)) * dpi,\n (dimsDates.t + dimsDates.h - 7) * dpi\n );\n }\n}\n","import {getFormatter, yTickFormatter} from './utils';\nimport {TChartAnimationProperty, TChartState, TChartUnitOptions} from './types';\n\nexport type TChartAxisYItem = {\n animated?: boolean,\n numLeft?: number,\n strLeft: string,\n numRight?: number,\n strRight: string,\n newTo?: number,\n oProp?: `${'oyt' | 'oy'}_${number}`,\n yProp?: `${'yyt' | 'yy'}_${number}`,\n y?: number,\n state?: {\n id: string | number,\n numLeft?: number,\n strLeft?: string,\n numRight?: number,\n strRight?: string\n } & {[key in TChartAxisYItem['oProp'] | TChartAxisYItem['yProp']]: number}\n};\n\nexport default class TAxisY {\n private opts: TChartUnitOptions;\n private ctx: CanvasRenderingContext2D;\n private uuid: number;\n private items: {[id: string]: TChartAxisYItem};\n private isDarkMode: boolean;\n private noAnimation: boolean;\n private forceUpdate: boolean;\n private animationInProgress: boolean;\n private animationEndTimeout: number;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.ctx = opts.ctx;\n this.uuid = 1;\n this.items = {};\n\n this.setAnimation(false);\n this.setForceUpdate(false);\n }\n\n onResize() {\n this.setAnimation(false);\n this.setForceUpdate(false);\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n setAnimation(enabled: boolean) {\n this.noAnimation = !enabled;\n }\n\n setForceUpdate(enabled: boolean) {\n this.forceUpdate = enabled;\n }\n\n deleteItem = (state: TChartState) => {\n delete this.items[state.id];\n };\n\n render(opacity: number) {\n let calcDataLeft: ReturnType<TAxisY['calcAxisData']>, calcDataRight: ReturnType<TAxisY['calcAxisData']>;\n if(this.opts.pairY) {\n calcDataLeft = this.calcAxisData('y1_0', 'y2_0');\n calcDataRight = this.calcAxisData('y1_1', 'y2_1');\n\n // left axis is main, if both need animation priority goes to left\n if((calcDataRight.needAnimation && !calcDataLeft.needAnimation) || this.opts.state['o_0'] < 1) {\n this.updateAxisState('y1_1', 'y2_1', 'numRight', calcDataRight, calcDataLeft, calcDataRight);\n } else {\n this.updateAxisState('y1_0', 'y2_0', 'numLeft', calcDataLeft, calcDataLeft, calcDataRight);\n }\n } else {\n calcDataLeft = this.calcAxisData('y1', 'y2');\n this.updateAxisState('y1', 'y2', 'numLeft', calcDataLeft, calcDataLeft, calcDataLeft);\n }\n\n this.renderState(opacity);\n }\n\n calcAxisData(y1Name: 'y1' | `y1_${number}`, y2Name: 'y2' | `y2_${number}`) {\n const state = this.opts.state;\n const pTop = this.opts.settings.PADD[0];\n const pBottom = this.opts.settings.PADD[2];\n const linesCount = Math.floor(this.opts.settings.Y_AXIS_RANGE);\n let withAnimation = false;\n\n const y1AnimItem = this.opts.animator.get(y1Name);\n const y2AnimItem = this.opts.animator.get(y2Name);\n const y1 = y1AnimItem ? y1AnimItem.end : state[y1Name];\n const y2 = y2AnimItem ? y2AnimItem.end : state[y2Name];\n\n const yRealStep = Math.round((y2 - y1) / this.opts.settings.Y_AXIS_RANGE);\n const yRealStart = y1;\n\n const yCurRange = state[y2Name] - state[y1Name];\n const changeSpeedFirst = state[y1Name] > y1 ? state[y1Name] / y1 : y1 / state[y1Name];\n const changeSpeedLast = state[y2Name] > y2 ? state[y2Name] / y2 : y2 / state[y2Name];\n\n const yEndRange = y2 - y1;\n const yScaleCur = (this.opts.state.dims.axisYLines.h - pTop - pBottom) / yCurRange;\n const yScaleEnd = (this.opts.state.dims.axisYLines.h - pTop - pBottom) / yEndRange;\n\n if(changeSpeedFirst > 1.05 || changeSpeedLast > 1.05 || this.forceUpdate) {\n withAnimation = true;\n }\n\n // this.items[0] check that items have been created\n withAnimation = this.items[0] && withAnimation && !this.noAnimation && !this.animationInProgress;\n\n return {\n needAnimation: withAnimation,\n y1: y1,\n y2: y2,\n yRealStep: yRealStep,\n yRealStart: yRealStart,\n yScaleCur: yScaleCur,\n yScaleEnd: yScaleEnd\n };\n }\n\n updateAxisState(\n y1Name: 'y1' | `y1_${number}`,\n y2Name: 'y2' | `y2_${number}`,\n numName: 'numLeft' | 'numRight',\n baseData: ReturnType<TAxisY['calcAxisData']>,\n leftData: ReturnType<TAxisY['calcAxisData']>,\n rightData: ReturnType<TAxisY['calcAxisData']>\n ) {\n const opts = this.opts;\n const settings = opts.settings;\n const dpi = opts.settings.dpi;\n const state = opts.state;\n const pTop = opts.settings.PADD[0];\n const pBottom = opts.settings.PADD[2];\n const pLeft = opts.settings.PADD[3];\n const pRight = opts.settings.PADD[1];\n const animator = opts.animator;\n let item: TChartAxisYItem;\n const linesCount = Math.floor(opts.settings.Y_AXIS_RANGE);\n let startedAtLeastOne = false;\n const dims = this.opts.state.dims.axisYLines;\n\n if(baseData.needAnimation) {\n this.animationInProgress = true;\n }\n\n for(let i = 0; i <= linesCount; ++i) {\n const numReal = baseData.yRealStart + Math.round(baseData.yRealStep * i);\n const numRealLeft = leftData.yRealStart + Math.round(leftData.yRealStep * i);\n const numRealRight = rightData.yRealStart + Math.round(rightData.yRealStep * i);\n const formatter = getFormatter('yTickFormatter', opts.data, state.zoomMorph) as any as typeof yTickFormatter;\n\n const numDisplayLeftStr = formatter(numRealLeft, leftData.yRealStep);\n\n // then first graph is hidden we will show rounded range and numbers for second one\n // else we will fit second graphic exactly to same bound as first one,\n // thus loosing the ability to use rounded numvers and range for second graph (but showing it exactly as needed)\n // upd disabled let it always be fractional even then first graph is not seen\n // to avoid small 2nd graph scale on first graph is off (cause no fit to first graph is needed)\n const numDisplayRightStr = formatter(Math.max(numRealRight, 0), rightData.yRealStep, true /* , this.opts.state['e_0']*/ );\n\n if(baseData.needAnimation) {\n const oldFrom = dims.t + dims.h - pBottom - (numReal - baseData.y1) * baseData.yScaleEnd;\n const oldTo = dims.t + dims.h - pBottom - (this.items[i][numName] - baseData.y1) * baseData.yScaleEnd;\n const newFrom = dims.t + dims.h - pBottom - (numReal - state[y1Name]) * baseData.yScaleCur;\n const newTo = dims.t + dims.h - pBottom - (numReal - baseData.y1) * baseData.yScaleEnd;\n\n // if stays on the same pos - no animation\n if(Math.abs(oldTo - newTo) < 1) {\n this.items[i] = {\n numLeft: numRealLeft,\n strLeft: numDisplayLeftStr,\n numRight: numRealRight,\n strRight: numDisplayRightStr,\n y: newTo\n };\n } else {\n startedAtLeastOne = true;\n\n // hide previous one static\n this.uuid++;\n item = {\n animated: true,\n strLeft: this.items[i].strLeft,\n strRight: this.items[i].strRight,\n oProp: `oyt_${this.uuid}`,\n yProp: `yyt_${this.uuid}`,\n state: {\n id: `t_${this.uuid}`\n }\n };\n item.state[item.oProp] = 1;\n item.state[item.yProp] = oldFrom;\n this.items[item.state.id] = item;\n\n animator.add([{\n prop: item.oProp,\n state: item.state,\n end: 0,\n duration: this.noAnimation ? 0 : 200,\n tween: 'linear',\n group: {top: true}\n }, {\n prop: item.yProp,\n state: item.state,\n end: oldTo,\n duration: this.noAnimation ? 0 : (!this.forceUpdate ? 500 : 333),\n fixed: !this.forceUpdate,\n tween: !this.forceUpdate ? 'exp' : null,\n speed: 0.18,\n group: {top: true},\n cbEnd: this.deleteItem\n }]);\n\n delete this.items[i];\n\n // show new which one will became static after animation end\n this.uuid++;\n item = {\n animated: true,\n strLeft: numDisplayLeftStr,\n strRight: numDisplayRightStr,\n oProp: `oy_${i}`,\n yProp: `yy_${i}`,\n state: {\n id: i,\n numLeft: numRealLeft,\n strLeft: numDisplayLeftStr,\n numRight: numRealRight,\n strRight: numDisplayRightStr\n }\n }\n item.state[item.oProp] = 0;\n item.state[item.yProp] = newFrom;\n this.items[item.state.id] = item;\n\n const props: TChartAnimationProperty<typeof item['state']>[] = [{\n prop: item.oProp,\n state: item.state,\n end: 1,\n duration: this.noAnimation ? 0 : 200,\n tween: 'linear',\n group: {top: true}\n }, {\n prop: item.yProp,\n state: item.state,\n end: newTo,\n duration: this.noAnimation ? 0 : (!this.forceUpdate ? 500 : 333),\n fixed: !this.forceUpdate,\n tween: !this.forceUpdate ? 'exp' : null,\n speed: 0.18,\n group: {top: true},\n cbEnd: (state) => {\n this.items[state.id] = {\n numLeft: state.numLeft,\n strLeft: state.strLeft,\n numRight: state.numRight,\n strRight: state.strRight,\n y: state[`yy_${state.id as number}`]\n }\n\n clearTimeout(this.animationEndTimeout);\n this.animationEndTimeout = window.setTimeout(() => {\n this.animationInProgress = false;\n }, 30);\n }\n }];\n\n animator.add(props);\n }\n } else {\n if(this.items[i] && this.items[i].animated) {\n this.items[i].numLeft = numRealLeft;\n this.items[i].strLeft = numDisplayLeftStr;\n this.items[i].numRight = numRealRight;\n this.items[i].strRight = numDisplayRightStr;\n this.items[i].state.numLeft = numRealLeft;\n this.items[i].state.strLeft = numDisplayLeftStr;\n this.items[i].state.numRight = numRealRight;\n this.items[i].state.strRight = numDisplayRightStr;\n } else {\n this.items[i] = {\n numLeft: numRealLeft,\n strLeft: numDisplayLeftStr,\n numRight: numRealRight,\n strRight: numDisplayRightStr,\n y: dims.t + dims.h - pBottom - (numReal - baseData.y1) * baseData.yScaleEnd\n };\n }\n }\n }\n\n if(baseData.needAnimation && !startedAtLeastOne) {\n this.animationInProgress = false;\n }\n\n this.forceUpdate = false;\n }\n\n renderState(opacity: number) {\n const dpi = this.opts.settings.dpi;\n const dimsLeft = this.opts.state.dims.axisYLeft;\n const dimsRight = this.opts.state.dims.axisYRight;\n const dimsLines = this.opts.state.dims.axisYLines;\n const ys = this.opts.data.ys;\n\n this.ctx.font = `${this.opts.settings.FONT.normal} ${11 * dpi}px ${this.opts.settings.FONT.family}`;\n this.ctx.strokeStyle = this.opts.settings.COLORS.grid;\n this.ctx.lineWidth = 1 * dpi;\n this.ctx.lineCap = 'square';\n // @ts-ignore\n this.ctx.lineJoin = 'square';\n\n for(const i in this.items) {\n const item = this.items[i];\n\n let o: number, y: number;\n if(item.animated) {\n y = item.state[item.yProp];\n o = item.state[item.oProp];\n } else {\n y = item.y;\n o = 1;\n }\n\n if((y - 6) >= 0 && (y - 16) <= dimsLeft.h) {\n this.ctx.globalAlpha = o * (this.opts.pairY ? this.opts.state['o_0'] : 1) * opacity;\n this.ctx.textAlign = 'left';\n\n if(this.opts.pairY) {\n this.ctx.fillStyle = this.isDarkMode ? ys[0].colors_n[1] : ys[0].colors_d[1];\n } else {\n this.ctx.fillStyle = this.opts.settings.COLORS.axis.y;\n }\n\n this.ctx.fillText(item.strLeft, dimsLeft.l * dpi, (y - 7) * dpi);\n\n if(this.opts.pairY) {\n this.ctx.globalAlpha = o * this.opts.state['o_1'] * opacity;\n this.ctx.textAlign = 'right';\n this.ctx.fillStyle = this.isDarkMode ? ys[1].colors_n[1] : ys[1].colors_d[1];\n\n this.ctx.fillText(item.strRight, (dimsRight.l + dimsRight.w) * dpi, (y - 7) * dpi);\n }\n }\n\n y = (y << 0) - 0.5;\n if(y >= 0 && y <= dimsLeft.h) {\n this.ctx.beginPath();\n this.ctx.globalAlpha = o * opacity;\n this.ctx.moveTo(dimsLines.l * dpi, (y) * dpi);\n this.ctx.lineTo((dimsLines.l + dimsLines.w) * dpi, (y) * dpi);\n this.ctx.stroke();\n }\n }\n\n this.ctx.globalAlpha = 1;\n }\n}\n","import {getXIndex} from './utils';\nimport {TChartUnitOptions} from './types';\n\nexport default class TBars {\n private opts: TChartUnitOptions;\n private filteredX1: number[];\n private filteredX2: number[];\n private filteredJ: number[];\n private prevY: number[];\n private $canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private isDarkMode: boolean;\n private w: number;\n private h: number;\n private cached: string;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.filteredX1 = [];\n this.filteredX2 = [];\n this.filteredJ = [];\n this.prevY = [];\n\n // fillrect dramatically drops fps on iPhones after 5th (4s and 5 are ok, but 5s, SE, 7+ etc are freezing)\n // on direct onscreen canvas draw, so for this case we should use offscreen canvas\n this.$canvas = document.createElement('canvas');\n this.ctx = this.$canvas.getContext('2d', {alpha: false})!;\n }\n\n onResize() {\n const dpi = this.opts.settings.dpi;\n const dims = this.opts.additional.mini ? this.opts.state.dims.mini : this.opts.state.dims.graph;\n this.$canvas.width = dims.w * dpi;\n this.$canvas.height = dims.h * dpi;\n this.cached = '';\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n render() {\n let i: number, j: number, y: number[], o: number, y1: number, y2: number, xScale: number, yScale: number, yShift: number, yFrom: number[];\n const opts = this.opts;\n const ys = opts.data.ys;\n const state = opts.state;\n const mini = opts.additional.mini;\n const x1 = mini ? state.xg1 : state.x1;\n const x2 = mini ? state.xg2 : state.x2;\n const settings = opts.settings;\n const w = this.w;\n const h = this.h;\n const pTop = settings[`PADD${mini ? '_MINI_BAR' : ''}`][0];\n const pRight = settings[`PADD${mini ? '_MINI_BAR' : ''}`][1];\n const pBottom = settings[`PADD${mini ? '_MINI_BAR' : ''}`][2];\n const pLeft = settings[`PADD${mini ? '_MINI_BAR' : ''}`][3];\n const x = opts.data.x;\n const dpi = opts.settings.dpi;\n let xInd1: number, xInd2: number;\n const ctx = this.ctx;\n const dims = mini ? state.dims.mini : state.dims.graph;\n const zoom = state.zoomMode;\n const d1 = state.detailInd1;\n const d2 = state.detailInd2;\n const zoomMorph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n\n const filteredX1 = this.filteredX1;\n const filteredX2 = this.filteredX2;\n const filteredJ = this.filteredJ;\n const prevY = this.prevY;\n\n const ysLength = ys.length;\n\n // cache both versions (big one is useful for selection)\n const hash = [dims.w, dims.h, mini ? state.xg1 : state.x1, mini ? state.xg2 : state.x2, this.isDarkMode, zoom];\n if(!mini) {\n hash.push(state.y1);\n hash.push(state.y2);\n }\n for(i = 0; i < ysLength; i++) {\n hash.push(mini ? state[`om_${i}`] : state[`o_${i}`]);\n hash.push(state[`f_${i}`]);\n }\n const joinedHash = hash.join(',');\n\n if(joinedHash === this.cached) {\n this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n if(mini) return;\n }\n\n xScale = (dims.w - pRight - pLeft) / (x2 - x1 + this.opts.data.mainPeriodLen * (1 - zoomMorph));\n xInd1 = Math.floor(getXIndex(x, x1 - pLeft / xScale));\n xInd2 = Math.ceil(getXIndex(x, x2 + pRight / xScale));\n\n if(zoom && zoomMorph === 1) {\n if(xInd1 < this.opts.state.xg1Ind) xInd1 = this.opts.state.xg1Ind;\n if(xInd2 > this.opts.state.xg2Ind) xInd2 = this.opts.state.xg2Ind - 1;\n }\n xScale *= dpi;\n const xShift = (pLeft) * dpi - x1 * xScale;\n const hBottom = (dims.h - pBottom) * dpi;\n\n const xwMain = this.opts.data.mainPeriodLen * xScale;\n const xwDetail = this.opts.data.detailPeriodLen * xScale;\n\n if(joinedHash !== this.cached) {\n ctx.fillStyle = this.opts.settings.COLORS.background;\n ctx.fillRect(0, 0, dims.w * dpi, dims.h * dpi);\n\n let filteredInd = 0;\n\n for(j = xInd1; j <= xInd2; j++) {\n let xw: number;\n if(zoom) {\n if(j >= d1 && j <= d2) {\n xw = xwDetail;\n } else {\n xw = xwMain;\n }\n } else {\n xw = xwMain;\n }\n\n const tmpX1 = Math.round(x[j] * xScale + xShift);\n const tmpX2 = Math.round(x[j] * xScale + xShift + xw);\n\n if(tmpX2 - tmpX1 > 0) {\n filteredX1[filteredInd] = tmpX1;\n filteredX2[filteredInd] = tmpX2;\n filteredJ[filteredInd] = j;\n prevY[filteredInd] = 0;\n filteredInd++;\n }\n }\n\n for(i = 0; i < ysLength; i++) {\n o = mini ? state[`om_${i}`] : state[`o_${i}`];\n\n if(o > 0) {\n y = ys[i].y;\n yFrom = ys[i].yFrom;\n\n y1 = mini ? state['y1m'] : state['y1'];\n y2 = mini ? state['y2m'] : state['y2'];\n\n yScale = dpi * (dims.h - pTop - pBottom) / (y2 - y1);\n yShift = (dims.h - pBottom) * dpi + y1 * yScale;\n\n const k = o * yScale;\n\n ctx.fillStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n ctx.globalAlpha = state[`f_${i}`] * 0.9 + 0.1;\n\n let yVal;\n\n ctx.beginPath();\n ctx.moveTo(Math.round(x[xInd2] * xScale + xShift + (zoomMorph === 1 ? xwDetail : xwMain)), Math.round(hBottom));\n\n if(i > 0) {\n for(j = filteredInd - 1; j >= 0; j--) {\n const curY = hBottom - prevY[j];\n ctx.lineTo(filteredX2[j], Math.round(curY));\n ctx.lineTo(filteredX1[j], Math.round(curY));\n }\n } else {\n ctx.lineTo(Math.round(x[xInd1] * xScale + xShift), Math.round(hBottom));\n }\n\n for(j = 0; j < filteredInd; j++) {\n const jInd = filteredJ[j];\n if(zoom) {\n if(jInd >= d1 && jInd <= d2) {\n yVal = yFrom[jInd] + zoomMorph * (y[jInd] - yFrom[jInd]);\n } else {\n yVal = y[jInd] + zoomMorph * (y[d1] - y[jInd]); // approximation\n }\n } else {\n yVal = y[jInd];\n }\n\n yVal = yVal || 0; // absent values\n\n const curY = ((yShift - yVal * k));\n const curH = hBottom - curY;\n\n prevY[j] += curH;\n\n ctx.lineTo(filteredX1[j], Math.round(hBottom - prevY[j]));\n ctx.lineTo(filteredX2[j], Math.round(hBottom - prevY[j]));\n }\n\n ctx.closePath();\n ctx.fill();\n }\n }\n\n ctx.globalAlpha = 1;\n\n this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n }\n\n // tooltip selection\n if(state.barInd > -1 && !mini) {\n this.opts.ctx.fillStyle = this.opts.settings.COLORS.barsSelectionBackground;\n this.opts.ctx.globalAlpha = state.barO;\n this.opts.ctx.fillRect(0, 0, dims.w * dpi, dims.h * dpi);\n let yStart = 0;\n\n for(i = 0; i < ysLength; i++) {\n o = state[`o_${i}`];\n if(o > 0) {\n y = ys[i].y;\n yFrom = ys[i].yFrom;\n y1 = state['y1'] as number;\n y2 = state['y2'] as number;\n yScale = dpi * (dims.h - pTop - pBottom) / (y2 - y1);\n yShift = (dims.h - pBottom) * dpi + y1 * yScale;\n const k = o * yScale;\n\n this.opts.ctx.fillStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n this.opts.ctx.globalAlpha = state[`f_${i}`] * 0.9 + 0.1;\n\n let yVal: number, xw: number;\n if(zoom) {\n if(state.barInd >= d1 && state.barInd <= d2) {\n yVal = yFrom[state.barInd] + zoomMorph * (y[state.barInd] - yFrom[state.barInd]);\n xw = xwDetail;\n } else {\n xw = xwMain;\n yVal = y[state.barInd] + zoomMorph * (y[d1] - y[state.barInd]); // approx\n }\n } else {\n yVal = y[state.barInd];\n xw = xwMain;\n }\n\n yVal = yVal || 0; // absent values\n\n const yEnd = hBottom - ((yShift - yVal * k)) + yStart;\n\n this.opts.ctx.fillRect(\n Math.round(x[state.barInd] * xScale + xShift),\n Math.round(hBottom - yStart + dims.t * dpi),\n Math.max(Math.round(xw), 1),\n Math.round(yStart) - Math.round(yEnd)\n );\n\n yStart = yEnd;\n }\n }\n\n ctx.globalAlpha = 1;\n }\n\n this.cached = joinedHash;\n }\n}\n","import {drawRoundedRect, drawRoundedRect2} from './utils';\nimport {TChartAnimationProperty, TChartUnitOptions} from './types';\n\nexport default class TComposer {\n private opts: TChartUnitOptions;\n public $canvas: HTMLCanvasElement;\n public ctx: CanvasRenderingContext2D;\n private deviceSpeed: number;\n private isDarkMode: boolean;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.$canvas = document.createElement('canvas');\n this.$canvas.className = 'tchart--graph-canvas';\n this.ctx = this.$canvas.getContext('2d')!;\n opts.$parent.appendChild(this.$canvas);\n this.deviceSpeed = undefined;\n }\n\n onResize() {\n const dpi = this.opts.settings.dpi;\n const dims = this.opts.state.dims.composer;\n this.$canvas.width = dims.w * dpi;\n this.$canvas.height = dims.h * dpi;\n this.render({top: true, bottom: true});\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n // full reset canvas due to clearing areas optimizations\n this.onResize();\n }\n\n render(groups: TChartAnimationProperty['group']) {\n if(this.deviceSpeed === undefined) {\n const t1 = performance.now();\n const prevX = this.opts.state.x1;\n this.opts.state.x1 = this.opts.state.xMainMin;\n this.renderInner(groups);\n const t2 = performance.now();\n this.opts.state.x1 = prevX;\n this.deviceSpeed = (t2 - t1) / (this.opts.graphStyle === 'line' || this.opts.graphStyle === 'step' ? 1.5 : 2) / (this.opts.data.x.length * this.opts.data.ys.length);\n this.opts.state.deviceSpeed = this.deviceSpeed;\n }\n this.renderInner(groups);\n }\n\n renderInner(groups: TChartAnimationProperty['group']) {\n const dims = this.opts.state.dims;\n const state = this.opts.state;\n const ctx = this.ctx;\n const dpi = this.opts.settings.dpi;\n const settings = this.opts.settings;\n const padd = settings.PADD;\n const zoomMorph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n const pieChartAnimating = this.opts.graphStyle === 'area' && state.zoomMode && zoomMorph < 1;\n const pieChartAnimated = this.opts.graphStyle === 'area' && state.zoomMode && zoomMorph === 1;\n\n if(this.opts.data.master) {\n this.$canvas.style.opacity = '' + state.masterVisibility;\n }\n\n if(this.opts.data.slave) {\n this.$canvas.style.opacity = '' + state.slaveVisibility;\n this.opts.chart.$el.style.visibility = state.slaveVisibility > 0 ? 'visible' : 'hidden';\n }\n\n if(groups.top) {\n ctx.clearRect(dims.dates.l * dpi, dims.dates.t * dpi, dims.dates.w * dpi, dims.dates.h * dpi);\n\n if(this.opts.graphStyle === 'line' || this.opts.graphStyle === 'step' || (this.opts.graphStyle === 'area' && zoomMorph > 0) || (this.opts.data.slave && state.slaveVisibility < 1) || (this.opts.data.master && state.masterVisibility < 1)) {\n if(pieChartAnimated) {\n // for pie chart, need a little bit more region to clear, cause of outboard labels\n ctx.clearRect(dims.graph.l * dpi, (dims.graph.t - 18) * dpi, dims.graph.w * dpi, (dims.graph.h + 30) * dpi);\n } else {\n ctx.clearRect(dims.graph.l * dpi, dims.graph.t * dpi, dims.graph.w * dpi, dims.graph.h * dpi);\n }\n }\n\n // hack, clear only edges\n if((this.opts.graphStyle === 'area' && zoomMorph === 0) || (this.opts.graphStyle === 'bar')) {\n ctx.clearRect(dims.graph.l * dpi, dims.graph.t * dpi, dims.graph.w * dpi, (settings.PADD[0] + 4) * dpi);\n ctx.clearRect(dims.graph.l * dpi, (dims.graph.t + padd[0]) * dpi, padd[3] * dpi, (dims.graph.h - padd[0] - padd[2]) * dpi);\n ctx.clearRect(dims.graph.l * dpi, (dims.graph.t + dims.graph.h - padd[2]) * dpi, dims.graph.w * dpi, (padd[2]) * dpi);\n ctx.clearRect((dims.graph.l + dims.graph.w - padd[1] - 1) * dpi, (dims.graph.t + padd[0]) * dpi, (padd[1] + 1) * dpi, (dims.graph.h - padd[0] - padd[2]) * dpi);\n }\n\n if(!pieChartAnimating && !pieChartAnimated) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(dims.graph.l * dpi, dims.graph.t * dpi, dims.graph.w * dpi, dims.graph.h * dpi);\n ctx.clip();\n }\n\n if(this.opts.data.master && state.masterVisibility < 1) {\n ctx.save();\n const scale = (1 - state.masterVisibility) * 5 + 1;\n ctx.translate(dims.graph.w * state.zoomSpecialOrigin * (1 - scale), 0);\n ctx.scale(scale, 1);\n }\n\n if(this.opts.data.slave && state.slaveVisibility < 1) {\n ctx.save();\n const scale = state.slaveVisibility;\n ctx.translate(dims.graph.w * state.zoomSpecialOrigin * (1 - scale), 0);\n ctx.scale(scale, 1);\n }\n\n let opacity = 1;\n if(this.opts.graphStyle === 'area' && state.zoomMode) {\n opacity = 1 - zoomMorph;\n }\n\n if(pieChartAnimating) {\n ctx.save();\n const r = settings.PIE_RADIUS;\n const cw = dims.graph.w + zoomMorph * (r * 2 - dims.graph.w);\n const ch = dims.graph.h - 42 + zoomMorph * (r * 2 - dims.graph.h + 42);\n\n drawRoundedRect2(\n ctx,\n dpi,\n cw,\n ch,\n (dims.graph.w - cw) / 2 + dims.graph.l,\n (dims.graph.h - 42 - ch) / 2 + dims.graph.t + 23,\n zoomMorph * r\n );\n\n ctx.clip();\n }\n\n this.opts.chart.graph.render();\n\n if(pieChartAnimating) {\n ctx.restore();\n }\n\n if(this.opts.data.master && state.masterVisibility < 1) {\n ctx.restore();\n }\n\n if(this.opts.data.slave && state.slaveVisibility < 1) {\n ctx.restore();\n }\n\n this.opts.chart.axisY.render(opacity);\n this.opts.chart.fade.render();\n\n if(!pieChartAnimating && !pieChartAnimated) {\n ctx.restore();\n }\n\n this.opts.chart.axisX.render(opacity);\n }\n\n if(groups.bottom) {\n ctx.clearRect((dims.graph.l) * dpi, (dims.handle.t - 1) * dpi, (dims.graph.w) * dpi, (dims.handle.h + 2) * dpi);\n\n let subchartShown = this.opts.data.subchart.show;\n const isNotSpecialAndChangedSubchart = !this.opts.data.master && !this.opts.data.slave && this.opts.data.details && this.opts.data.subchart.show !== this.opts.data.details.subchart.show;\n\n if(isNotSpecialAndChangedSubchart) {\n if(subchartShown) {\n subchartShown = zoomMorph < 1;\n } else {\n subchartShown = zoomMorph > 0;\n }\n }\n\n if(subchartShown) {\n ctx.save();\n drawRoundedRect(ctx, dpi, dims.mini.w, dims.mini.h, dims.mini.l, dims.mini.t, 7);\n ctx.clip();\n this.opts.chart.mini.render();\n ctx.restore();\n this.opts.chart.handle.render();\n }\n\n if(isNotSpecialAndChangedSubchart) {\n if(zoomMorph > 0 && zoomMorph < 1) {\n ctx.fillStyle = this.opts.settings.COLORS.background;\n ctx.globalAlpha = this.opts.data.subchart.show ? zoomMorph : 1 - zoomMorph;\n ctx.fillRect((dims.graph.l) * dpi, (dims.handle.t - 1) * dpi, (dims.graph.w) * dpi, (dims.handle.h + 2) * dpi);\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n}\n","import {TChartUnitOptions} from './types';\n\nexport default class TFade {\n private opts: TChartUnitOptions;\n private ctx: CanvasRenderingContext2D;\n private $fadeTop: HTMLCanvasElement;\n private ctxFadeTop: CanvasRenderingContext2D;\n private $fadeBottom: HTMLCanvasElement;\n private ctxFadeBottom: CanvasRenderingContext2D;\n private isDarkMode: boolean;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.ctx = opts.ctx;\n\n if(this.opts.graphStyle !== 'area') {\n this.$fadeTop = document.createElement('canvas');\n this.ctxFadeTop = this.$fadeTop.getContext('2d');\n\n if(this.opts.graphStyle !== 'bar') {\n this.$fadeBottom = document.createElement('canvas');\n this.ctxFadeBottom = this.$fadeBottom.getContext('2d');\n }\n }\n }\n\n onResize() {\n const dpi = this.opts.settings.dpi;\n const dimsTop = this.opts.state.dims.fadeTop;\n const dimsBottom = this.opts.state.dims.fadeBottom;\n const backgroundRgbJoined = this.opts.settings.COLORS.backgroundRgb.join(', ');\n\n if(this.opts.graphStyle !== 'area') {\n const gradientTop = this.ctxFadeTop.createLinearGradient(0, 0, 0, dimsTop.h * dpi);\n gradientTop.addColorStop(0, `rgba(${backgroundRgbJoined}, 1)`);\n gradientTop.addColorStop(1, `rgba(${backgroundRgbJoined}, 0)`);\n this.$fadeTop.width = dimsTop.w * dpi;\n this.$fadeTop.height = dimsTop.h * dpi;\n this.ctxFadeTop.fillStyle = gradientTop;\n this.ctxFadeTop.fillRect(0, 0, dimsTop.w * dpi, dimsTop.h * dpi);\n\n if(this.opts.graphStyle !== 'bar') {\n const gradientBottom = this.ctxFadeBottom!.createLinearGradient(0, 0, 0, dimsBottom.h * dpi);\n gradientBottom.addColorStop(0, `rgba(${backgroundRgbJoined}, 0)`);\n gradientBottom.addColorStop(1, `rgba(${backgroundRgbJoined}, 1)`);\n this.$fadeBottom.width = dimsBottom.w * dpi;\n this.$fadeBottom.height = dimsBottom.h * dpi;\n this.ctxFadeBottom.fillStyle = gradientBottom;\n this.ctxFadeBottom.fillRect(0, 0, dimsBottom.w * dpi, dimsBottom.h * dpi);\n }\n }\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n this.onResize();\n }\n\n render() {\n const dpi = this.opts.settings.dpi;\n const dimsTop = this.opts.state.dims.fadeTop;\n const dimsBottom = this.opts.state.dims.fadeBottom;\n\n this.$fadeTop && this.ctx.drawImage(this.$fadeTop, dimsTop.l * dpi, dimsTop.t * dpi);\n this.$fadeBottom && this.ctx.drawImage(this.$fadeBottom, dimsBottom.l * dpi, dimsBottom.t * dpi);\n }\n}\n","import {isTouchDevice} from './utils';\nimport {TChartUnitOptions} from './types';\n\nexport default class TDrag {\n private opts: TChartUnitOptions & {\n $el: HTMLElement,\n useElForMove?: boolean,\n onDragStart?: (params: {\n pageX: number,\n pageY: number,\n isTouch: boolean\n }) => any,\n onDragMove?: (params: {\n canceled: boolean,\n d: number,\n pageX: number,\n pageY: number,\n isTouch: boolean\n }) => any,\n onDragEnd?: (params: {\n isTouch: boolean,\n e: Event\n }) => any,\n noPrevent?: boolean\n };\n private isTouch: boolean;\n private skipMoveEnd: boolean;\n private scroll: string | undefined;\n private x: number;\n private y: number;\n private dX: number;\n private dY: number;\n private pageX: number;\n private pageY: number;\n private prevDx: number | undefined;\n private prevDy: number | undefined;\n private pointerTimeout: number;\n\n constructor(opts: TDrag['opts']) {\n this.opts = opts;\n this.isTouch = isTouchDevice();\n this.skipMoveEnd = true;\n\n const $global = opts.useElForMove ? opts.$el : window;\n\n opts.$el.addEventListener(this.isTouch ? 'touchstart' : 'mousedown', this.onDragStart, {\n passive: false\n });\n\n $global.addEventListener(this.isTouch ? 'touchmove' : 'mousemove', this.onDragMove, {\n passive: false\n });\n\n $global.addEventListener(this.isTouch ? 'touchend' : 'mouseup', this.onDragEnd, {\n passive: false\n });\n }\n\n onDragStart = (e: any) => {\n this.skipMoveEnd = true;\n clearTimeout(this.pointerTimeout);\n\n if(this.isTouch) {\n if(e.touches.length > 1) return;\n }\n\n this.scroll = undefined;\n this.x = this.isTouch ? e.touches[0].pageX : e.pageX;\n this.y = this.isTouch ? e.touches[0].pageY : e.pageY;\n this.dX = 0;\n this.dY = 0;\n this.pageX = this.x;\n this.pageY = this.y;\n delete this.prevDx;\n delete this.prevDy;\n\n const cancelDrag = this.opts.onDragStart({\n pageX: this.x,\n pageY: this.y,\n isTouch: this.isTouch\n });\n\n if(cancelDrag) return;\n\n this.skipMoveEnd = false;\n };\n\n onDragMove = (e: any) => {\n if(this.skipMoveEnd) return;\n\n if(this.scroll === 'v') {\n return;\n }\n\n const x = this.isTouch ? e.touches[0].pageX : e.pageX;\n const y = this.isTouch ? e.touches[0].pageY : e.pageY;\n\n this.dX = x - this.x;\n this.dY = y - this.y;\n\n this.pageX = x;\n this.pageY = y;\n\n if(this.isTouch) {\n if(this.scroll === 'h') {\n !this.opts.noPrevent && e.preventDefault();\n } else if(Math.abs(this.dX) > 5 || Math.abs(this.dY) > 5) {\n this.scroll = Math.abs(this.dX) > Math.abs(this.dY) ? 'h' : 'v';\n }\n }\n\n if(this.prevDx !== this.dX || this.prevDy !== this.dY) {\n this.opts.onDragMove && this.opts.onDragMove({\n canceled: this.scroll === 'v',\n d: this.dX,\n pageX: this.pageX,\n pageY: this.pageY,\n isTouch: this.isTouch\n });\n\n this.prevDx = this.dX;\n this.prevDy = this.dY;\n }\n };\n\n onDragEnd = (e: any) => {\n if(this.skipMoveEnd) return;\n\n this.skipMoveEnd = true;\n\n this.opts.onDragEnd && this.opts.onDragEnd({\n isTouch: this.isTouch,\n e: e\n });\n };\n}\n","import TDrag from './drag';\nimport {isTouchDevice, getElemPagePos, drawRoundedRect} from './utils';\nimport {TChartUnitOptions} from './types';\n\nexport default class THandle {\n private opts: TChartUnitOptions;\n private ctx: CanvasRenderingContext2D;\n private isTouch: boolean | undefined;\n private $canvas: HTMLCanvasElement | undefined;\n private drag: TDrag;\n private canvasPos: ReturnType<typeof getElemPagePos>;\n private tp: string | undefined;\n private firstMove: boolean | undefined;\n private prevX1: number | undefined;\n private prevX2: number | undefined;\n private isDarkMode: boolean | undefined;\n private minRange: number | undefined;\n private _x1: number;\n private _x2: number;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.ctx = opts.ctx;\n\n this.isTouch = isTouchDevice();\n this.$canvas = opts.$canvas;\n\n this.drag = new TDrag({\n $el: this.$canvas,\n onDragStart: (params) => {\n this.canvasPos = getElemPagePos(this.$canvas);\n const dx = params.pageX - this.canvasPos.x;\n const dy = params.pageY - this.canvasPos.y;\n this._x1 = opts.state.x1;\n this._x2 = opts.state.x2;\n this.constrainHandleSize(false);\n this.tp = this.getTp(\n dx - opts.settings.PADD[3],\n dy - (this.opts.state.dims.composer.h - opts.settings.MINI_GRAPH_HEIGHT - opts.settings.MINI_GRAPH_BOTTOM),\n params.isTouch\n );\n this.firstMove = true;\n return !this.tp;\n },\n onDragMove: (params) => {\n this.onDragMove(params.d);\n this.firstMove = false;\n },\n onDragEnd: (params) => {\n }\n });\n\n this.trackMouse(true);\n }\n\n getTp(x: number, y: number, isTouch: boolean) {\n const dims = this.opts.state.dims.handle;\n const state = this.opts.state;\n const zoomMode = this.opts.state.zoomMode;\n\n if(y < 0 || y > dims.h) return '';\n\n let xw = isTouch ? dims.w * 0.3 : 10;\n if(isTouch && xw < 14) xw = 14;\n if(isTouch && xw > 30) xw = 30;\n\n const xl1 = this.prevX1 + (isTouch ? (state.x1 === state.xg1 ? -5 : -15) : 0);\n let xl2 = xl1 + xw;\n\n const xr2 = this.prevX2 + (isTouch ? (state.x2 === state.xg2 ? 5 : 15) : 0);\n let xr1 = xr2 - xw;\n\n if(Math.abs(state.x2 - state.x1 - (zoomMode ? this.opts.data.mainPeriodLen : this.minRange)) < 0.01) {\n if(state.x2 === state.xg2) {\n xr1 = xr2 + 1;\n }\n if(state.x1 === state.xg1) {\n xl2 = xl1 - 1;\n }\n }\n\n if(x > xl2 && x < xr1) {\n return 'both';\n }\n\n if(x >= xl1 && x <= xl2) {\n return 'start';\n }\n\n if(x >= xr1 && x <= xr2) {\n return 'end';\n }\n\n return '';\n }\n\n trackMouse(enabled: boolean) {\n if(this.isTouch) return;\n\n this.$canvas.addEventListener('mousemove', this.onMouseMove);\n this.$canvas.addEventListener('mouseleave', this.onMouseLeave);\n }\n\n onMouseLeave = () => {\n this.$canvas.classList.remove('tchart--graph-canvas__handle-pointer');\n this.$canvas.classList.remove('tchart--graph-canvas__handle-grab');\n this.$canvas.classList.remove('tchart--graph-canvas__handle-col-resize');\n delete this.canvasPos;\n };\n\n onMouseMove = (e: MouseEvent) => {\n this.canvasPos = this.canvasPos || getElemPagePos(this.$canvas);\n const dx = e.pageX - this.canvasPos.x;\n const dy = e.pageY - this.canvasPos.y;\n const tp = this.getTp(\n dx - this.opts.settings.PADD[3],\n dy - (this.opts.state.dims.composer.h - this.opts.settings.MINI_GRAPH_HEIGHT - this.opts.settings.MINI_GRAPH_BOTTOM),\n false\n );\n\n const cursors: Record<string, string> = {\n '': '',\n 'both': this.opts.settings.isIE ? 'pointer' : 'grab',\n 'start': 'col-resize',\n 'end': 'col-resize'\n };\n\n this.onMouseLeave();\n cursors[tp] && this.$canvas.classList.add('tchart--graph-canvas__handle-' + cursors[tp]);\n };\n\n onResize(rect?: any) {\n this.constrainHandleSize(true);\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n constrainHandleSize(updateHandle: boolean) {\n const dims = this.opts.state.dims.handle;\n const xScale = dims.w / (this.opts.state.xg2 - this.opts.state.xg1);\n const minRange = 32 / xScale; // 45 min handle width\n let x1 = this.opts.state.x1;\n let x2 = this.opts.state.x2;\n const xg1 = this.opts.state.xg1;\n const xg2 = this.opts.state.xg2;\n\n this.minRange = minRange;\n\n if(x2 - x1 < minRange) {\n x2 = x1 + minRange;\n\n if(x2 > xg2) {\n x2 = xg2;\n x1 = x2 - minRange;\n }\n\n updateHandle && this.opts.additional.cb(x1, x2, 'constraint');\n }\n }\n\n onDragMove(d: number) {\n const dims = this.opts.state.dims.handle;\n const tp = this.tp;\n const state = this.opts.state;\n const per = (d / dims.w) * (state.xg2 - state.xg1);\n let x1, x2;\n const _x1 = this._x1;\n const _x2 = this._x2;\n\n if(tp === 'both') {\n x1 = _x1 + per;\n x2 = _x2 + per;\n if(x1 < state.xg1) {\n x1 = state.xg1;\n x2 = state.xg1 + _x2 - _x1;\n }\n if(x2 > state.xg2) {\n x1 = state.xg2 - (_x2 - _x1);\n x2 = state.xg2;\n }\n }\n\n if(tp === 'start') {\n x2 = state.x2;\n x1 = Math.min(Math.max(_x1 + per, state.xg1), x2 - this.minRange);\n }\n\n if(tp === 'end') {\n x1 = state.x1;\n x2 = Math.max(Math.min(_x2 + per, state.xg2), x1 + this.minRange);\n }\n\n if(state.x1 === x1 && state.x2 === x2) return;\n\n this.opts.additional.cb(x1, x2, tp, this.firstMove);\n }\n\n render() {\n const dims = this.opts.state.dims.handle;\n const dpi = this.opts.settings.dpi;\n const state = this.opts.state;\n const xScale = 1 / (state.xg2 - state.xg1);\n const x1 = Math.round((state.x1 - state.xg1) * xScale * dims.w);\n const x2 = Math.round((state.x2 - state.xg1) * xScale * dims.w);\n const ctx = this.ctx;\n\n ctx.fillStyle = this.opts.settings.COLORS.miniMask;\n drawRoundedRect(ctx, dpi, x1 + 4, dims.h - 2, dims.l, dims.t + 1, [7, 0, 0, 7]);\n ctx.fill();\n drawRoundedRect(ctx, dpi, dims.w - x2 + 4, dims.h - 2, dims.l + x2 - 4, dims.t + 1, [0, 7, 7, 0]);\n ctx.fill();\n\n // * Extra border around handle frame\n // if(!this.isDarkMode && this.opts.graphStyle !== 'line' && this.opts.graphStyle !== 'step') {\n // ctx.fillStyle = '#fff';\n // drawRoundedRect(ctx, dpi, 12, dims.h + 2, dims.l + x1 - 1, dims.t - 1, [8, 0, 0, 8]);\n // ctx.fill();\n // drawRoundedRect(ctx, dpi, 12, dims.h + 2, dims.l + x2 - 11, dims.t - 1, [0, 8, 8, 0]);\n // ctx.fill();\n // }\n\n ctx.fillStyle = this.opts.settings.COLORS.miniFrame;\n drawRoundedRect(ctx, dpi, 10, dims.h, dims.l + x1, dims.t, [7, 0, 0, 7]);\n ctx.fill();\n drawRoundedRect(ctx, dpi, 10, dims.h, dims.l + x2 - 10, dims.t, [0, 7, 7, 0]);\n ctx.fill();\n\n ctx.fillRect((dims.l + x1 + 10) * dpi, (dims.t) * dpi, (x2 - x1 - 20) * dpi, dpi);\n ctx.fillRect((dims.l + x1 + 10) * dpi, (dims.t + dims.h - 1) * dpi, (x2 - x1 - 20) * dpi, dpi);\n\n ctx.strokeStyle = '#fff';\n this.ctx.lineCap = 'round';\n this.ctx.lineJoin = 'round';\n this.ctx.lineWidth = 2 * dpi;\n ctx.beginPath();\n ctx.moveTo((dims.l + x1 + 5) * dpi, (dims.t + 17) * dpi);\n ctx.lineTo((dims.l + x1 + 5) * dpi, (dims.t + 25) * dpi);\n ctx.moveTo((dims.l + x2 - 5) * dpi, (dims.t + 17) * dpi);\n ctx.lineTo((dims.l + x2 - 5) * dpi, (dims.t + 25) * dpi);\n ctx.stroke();\n\n this.prevX1 = x1;\n this.prevX2 = x2;\n }\n}\n","import {getXIndex} from './utils';\nimport {TChartUnitOptions} from './types';\n\nexport default class TLines {\n private opts: TChartUnitOptions;\n private $canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private cached: string;\n private isDarkMode: boolean;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n\n this.$canvas = document.createElement('canvas');\n this.ctx = this.$canvas.getContext('2d', {alpha: true});\n }\n\n onResize() {\n const dpi = this.opts.settings.dpi;\n const dims = this.opts.additional.mini ? this.opts.state.dims.mini : this.opts.state.dims.graph;\n this.$canvas.width = dims.w * dpi;\n this.$canvas.height = dims.h * dpi;\n this.cached = '';\n this.ctx.fillStyle = this.opts.settings.COLORS.background;\n this.ctx.fillRect(0, 0, dims.w * dpi, dims.h * dpi);\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n }\n\n render() {\n let i: number, j: number, y: number[], o: number, y1: number, y2: number, xScale: number, yScale: number, yShift: number, e: boolean, yFrom: number[];\n const opts = this.opts;\n const ys = opts.data.ys;\n const state = opts.state;\n const mini = opts.additional.mini;\n const toCache = mini || ((opts.data.master && state.masterVisibility < 1 && state.masterVisibility > 0) || (opts.data.slave && state.slaveVisibility < 1 && state.slaveVisibility > 0));\n const x1 = mini ? state.xg1 : state.x1;\n const x2 = mini ? state.xg2 : state.x2;\n const settings = opts.settings;\n const pTop = settings[`PADD${mini ? '_MINI' : ''}`][0];\n const pRight = settings[`PADD${mini ? '_MINI' : ''}`][1];\n const pBottom = settings[`PADD${mini ? '_MINI' : ''}`][2];\n const pLeft = settings[`PADD${mini ? '_MINI' : ''}`][3];\n const x = opts.data.x;\n const dpi = opts.settings.dpi;\n let xInd1, xInd2;\n const ctx = toCache ? this.ctx : this.opts.ctx;\n const dims = mini ? state.dims.mini : state.dims.graph;\n const zoom = state.zoomMode;\n const d1 = state.detailInd1;\n const d2 = state.detailInd2;\n const morph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n const ysLen = ys.length;\n const isStepMode = opts.graphStyle === 'step';\n\n xScale = (dims.w - pRight - pLeft) / (x2 - x1 + (isStepMode ? this.opts.data.mainPeriodLen * (1 - morph) : 0));\n xInd1 = Math.floor(getXIndex(x, x1 - pLeft / xScale));\n xInd2 = Math.ceil(getXIndex(x, x2 + pRight / xScale));\n xScale *= dpi;\n const xShift = (pLeft + (toCache ? 0 : dims.l)) * dpi - x1 * xScale;\n\n if(isStepMode && zoom && morph === 1) {\n if(xInd1 < this.opts.state.xg1Ind) xInd1 = this.opts.state.xg1Ind;\n if(xInd2 > this.opts.state.xg2Ind) xInd2 = this.opts.state.xg2Ind - 1;\n }\n\n let xw: number;\n const xwMain = this.opts.data.mainPeriodLen * xScale;\n const xwDetail = this.opts.data.detailPeriodLen * xScale;\n\n // Cache rendered version\n if(toCache) {\n const hash = [dims.w, dims.h, mini ? state.xg1 : state.x1, mini ? state.xg2 : state.x2, this.isDarkMode, zoom];\n if(!mini) {\n hash.push(state.y1 as number);\n hash.push(state.y2 as number);\n }\n for(i = 0; i < ysLen; i++) {\n hash.push(mini ? state[`om_${i}`] : state[`o_${i}`]);\n hash.push(state[`f_${i}`]);\n }\n const joinedHash = hash.join(',');\n\n if(joinedHash === this.cached) {\n this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n return;\n }\n\n this.cached = joinedHash;\n\n ctx.clearRect(0, 0, dims.w * dpi, dims.w * dpi);\n }\n\n // console.log(mini, this.opts.data.master ? 'master' : '', this.opts.data.slave ? 'slave' : '', 'render');\n\n const lineWidth = (opts.additional.mini ? 1 : (opts.data.strokeWidth === 'auto' ? (ysLen > 5 ? 1 : 2) : opts.data.strokeWidth)) * dpi;\n const lineWidthShift = lineWidth % 2 === 0 ? 0 : 0.5;\n ctx.lineWidth = lineWidth;\n ctx.lineCap = opts.additional.mini ? 'square' : 'round';\n // @ts-ignore\n ctx.lineJoin = opts.additional.mini ? 'square' : 'round';\n\n for(i = 0; i < ysLen; i++) {\n o = mini ? state[`om_${i}`] : state[`o_${i}`];\n e = state[`e_${i}`];\n\n if(o <= 0) {\n continue;\n }\n\n y = ys[i].y;\n yFrom = ys[i].yFrom;\n\n if(opts.pairY) {\n y1 = mini ? state[`y1m_${i}`] : state[`y1_${i}`];\n y2 = mini ? state[`y2m_${i}`] : state[`y2_${i}`];\n } else {\n if(mini) {\n if(e && o < 1) {\n y1 = state['y1m_show'];\n y2 = state['y2m_show'];\n } else if(!e && o < 1) {\n y1 = state['y1m_hidd'];\n y2 = state['y2m_hidd'];\n } else {\n y1 = state['y1m'];\n y2 = state['y2m'];\n }\n } else {\n y1 = state['y1'];\n y2 = state['y2'];\n }\n }\n\n yScale = dpi * (dims.h - pTop - pBottom) / (y2 - y1);\n yShift = (dims.h - pBottom + (toCache ? 0 : dims.t)) * dpi + y1 * yScale;\n\n ctx.beginPath();\n ctx.strokeStyle = this.isDarkMode ? ys[i].colors_n[0] : ys[i].colors_d[0];\n ctx.globalAlpha = o * (state[`f_${i}`] * 0.9 + 0.1);\n\n let yVal: number;\n let xc: number;\n let minY = Number.MAX_VALUE;\n let maxY = -Number.MAX_VALUE;\n let prevXc = -Number.MAX_VALUE;\n let prevYc: number;\n let hasPrev = false;\n let needMove = true;\n\n for(j = xInd1; j <= xInd2; j++) {\n if(zoom) {\n if(j >= d1 && j <= d2) {\n yVal = yFrom[j] + morph * (y[j] - yFrom[j]);\n xw = xwDetail;\n } else {\n yVal = y[j] + morph * (y[d1] - y[j]); // approx\n xw = xwMain;\n }\n } else {\n yVal = y[j];\n xw = xwMain;\n }\n\n // Skip absent values\n if(isNaN(yVal)) {\n needMove = true;\n continue;\n }\n\n xc = x[j] * xScale + xShift << 0;\n const yc = yShift - yVal * yScale << 0;\n\n if(xc > prevXc || (isStepMode && j === d2 + 1)) {\n // Merge vertical lines into one\n if(hasPrev) {\n if(prevYc === minY) {\n ctx.moveTo(prevXc + lineWidthShift, maxY - lineWidthShift);\n ctx.lineTo(prevXc + lineWidthShift, minY - lineWidthShift);\n } else {\n ctx.moveTo(prevXc + lineWidthShift, minY - lineWidthShift);\n ctx.lineTo(prevXc + lineWidthShift, maxY - lineWidthShift);\n if(prevYc !== maxY) {\n ctx.moveTo(prevXc + lineWidthShift, prevYc - lineWidthShift);\n }\n }\n\n hasPrev = false;\n }\n\n if(needMove) {\n ctx.moveTo(xc + lineWidthShift, yc - lineWidthShift);\n needMove = false;\n }\n\n minY = yc;\n maxY = yc;\n ctx.lineTo(xc + lineWidthShift, yc - lineWidthShift);\n isStepMode && ctx.lineTo((x[j] * xScale + xw + xShift << 0) + lineWidthShift, yc - lineWidthShift);\n } else {\n minY = Math.min(minY, yc);\n maxY = Math.max(maxY, yc);\n hasPrev = true;\n }\n prevXc = xc;\n prevYc = yc;\n }\n\n if(hasPrev) {\n ctx.moveTo(prevXc + lineWidthShift, minY - lineWidthShift);\n ctx.lineTo(prevXc + lineWidthShift, maxY - lineWidthShift);\n }\n\n ctx.stroke();\n }\n\n ctx.globalAlpha = 1;\n\n toCache && this.opts.ctx.drawImage(this.$canvas, dims.l * dpi, dims.t * dpi);\n }\n}\n","import TDrag from './drag';\nimport {isTouchDevice} from './utils';\nimport {TChartUnitOptions} from './types';\n\nexport default class TSwitchers {\n private opts: TChartUnitOptions;\n private timeout: NodeJS.Timeout | undefined;\n private preventClick = false;\n private isTouch: boolean;\n private enabled: number;\n public switchers: HTMLDivElement[];\n private isDarkMode: boolean;\n private drag: TDrag;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n this.isTouch = isTouchDevice();\n this.enabled = opts.data.ys.length;\n\n if(this.enabled === 1 && !opts.data.forceLegend) {\n opts.$parent.style.display = 'none';\n }\n\n this.switchers = opts.data.ys.map((item, ind, arr) => {\n const $div = document.createElement('div');\n $div.className = 'tchart--switcher';\n\n if(ind === 0) {\n $div.classList.add('tchart--switcher__first');\n } else if(ind === (arr.length - 1)) {\n $div.classList.add('tchart--switcher__last');\n }\n\n if(opts.state[`e_${ind}`]) {\n $div.classList.toggle('tchart--switcher__active');\n } else {\n this.enabled--;\n }\n\n $div.setAttribute('data-label', item.label);\n opts.$parent.appendChild($div);\n\n const $span = document.createElement('span');\n $span.className = 'tchart--switcher-text';\n $span.textContent = item.label;\n $div.appendChild($span);\n\n if(!this.isTouch) {\n $div.addEventListener('mouseenter', () => {\n if(opts.state[`e_${ind}`]) {\n opts.additional.onEnter(ind);\n }\n });\n\n $div.addEventListener('mouseleave', () => {\n if(opts.state[`e_${ind}`]) {\n opts.additional.onLeave(ind);\n }\n });\n }\n\n $div.addEventListener('click', (e) => {\n if(this.preventClick) {\n this.preventClick = false;\n return;\n }\n\n const isActive = $div.classList.contains('tchart--switcher__active');\n\n if(isActive && this.enabled === 1) {\n $div.classList.add('tchart--switcher__denied');\n\n clearTimeout(this.timeout!);\n this.timeout = setTimeout(() => {\n $div.classList.remove('tchart--switcher__denied');\n }, 500);\n return;\n }\n\n if(!this.isTouch) {\n isActive ? opts.additional.onLeave(ind) : opts.additional.onEnter(ind);\n }\n\n opts.additional.onClick(!isActive, ind);\n });\n\n let dx: number, dy: number;\n let longTapTimer: NodeJS.Timeout;\n\n this.drag = new TDrag({\n $el: $div,\n noPrevent: true,\n useElForMove: true,\n onDragStart: (params) => {\n dx = params.pageX;\n dy = params.pageY;\n\n longTapTimer = setTimeout(() => {\n this.preventClick = true;\n if(!this.isTouch) {\n opts.additional.onEnter(ind);\n }\n opts.additional.onLongTap(ind);\n }, 500);\n },\n onDragMove: (params) => {\n if(Math.abs(dx - params.pageX) > 5 || Math.abs(dy - params.pageY) > 5) {\n clearTimeout(longTapTimer);\n }\n },\n onDragEnd: (params) => {\n clearTimeout(longTapTimer);\n }\n });\n\n return $div;\n });\n\n this.updateColors();\n }\n\n onResize() {}\n\n updateColors() {\n const ys = this.opts.data.ys;\n for(let i = 0; i < this.switchers.length; i++) {\n this.switchers[i].style.color = this.isDarkMode ? ys[i].colors_n[1] : ys[i].colors_d[1];\n }\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n this.updateColors();\n }\n\n render(o: boolean[]) {\n this.enabled = 0;\n\n for(let i = 0; i < this.switchers.length; i++) {\n if(o[i]) {\n this.enabled++;\n this.switchers[i].classList.add('tchart--switcher__active');\n } else {\n this.switchers[i].classList.remove('tchart--switcher__active');\n }\n }\n }\n}\n","import TDrag from './drag';\nimport {isTouchDevice, getElemPagePos, triggerEvent, getFormatter, getXIndex} from './utils';\nimport {TChartAngle, TChartAnimationProperty, TChartData, TChartUnitOptions} from './types';\n\ntype TipLabel = ReturnType<TTip['addLabel']>;\n\nexport default class TTip {\n private opts: TChartUnitOptions;\n private shown: boolean;\n private isTouch: boolean;\n private cache: any;\n public labels: TipLabel[];\n private allLabel: TipLabel;\n private pieLabel: TipLabel;\n private tooltipOnHover: boolean;\n private points: HTMLElement[];\n private drag: TDrag;\n private canvasPos: {x: number; y: number;};\n private dx: number;\n private dy: number;\n private tp: string;\n private showTimeout: number;\n\n private $canvas: HTMLElement;\n private $line: HTMLElement;\n private $lineFill: HTMLElement;\n private $tip: HTMLElement;\n private $tipDt: HTMLElement;\n private $tipDtText: Text;\n private $tipArrow: HTMLElement;\n private $tipLoader: HTMLElement;\n private $tipScrollerWrapper: HTMLElement;\n private $tipScroller: HTMLElement;\n private bodyTimeout: number;\n private detailCallbacks: any[];\n private prevXInd: number;\n private isDarkMode: boolean;\n private lastCurPieItemInd: number;\n private lastTipTop: number;\n private lastTipLeft: number;\n private tipH: number;\n private tipW: number;\n private itemsVisible: number;\n private maxLabelWidth: number;\n private maxValueWidth: number;\n private maxPercentageWidth: number;\n private maxDateWidth: number;\n private rowPaddings: number;\n\n constructor(opts: TChartUnitOptions) {\n this.opts = opts;\n\n this.shown = false;\n\n this.isTouch = isTouchDevice();\n this.$canvas = opts.$canvas;\n this.cache = {};\n\n this.$tip = document.createElement('div');\n this.$tip.className = 'tchart--tip';\n opts.$parent.appendChild(this.$tip);\n\n this.$tipDt = document.createElement('h6');\n this.$tipDt.className = 'tchart--tip-header';\n this.$tip.appendChild(this.$tipDt);\n\n this.$tipDtText = document.createTextNode('');\n this.$tipDt.appendChild(this.$tipDtText);\n this.$tipDtText.nodeValue = '.';\n\n this.$tipArrow = document.createElement('div');\n this.$tipArrow.className = 'tchart--tip-arrow';\n this.$tip.appendChild(this.$tipArrow);\n\n this.$tipLoader = document.createElement('div');\n this.$tipLoader.className = 'tchart--tip-loader';\n this.$tip.appendChild(this.$tipLoader);\n\n this.$tipScrollerWrapper = document.createElement('div');\n this.$tipScrollerWrapper.className = 'tchart--tip-scroller-wrapper';\n this.$tip.appendChild(this.$tipScrollerWrapper);\n\n this.$tipScroller = document.createElement('div');\n this.$tipScroller.className = 'tchart--tip-scroller';\n this.$tipScrollerWrapper.appendChild(this.$tipScroller);\n\n this.$tipScroller.addEventListener('scroll', this.updateTipScrollClasses);\n\n this.labels = [];\n opts.data.ys.forEach((item) => {\n this.labels.push(this.addLabel(item));\n });\n\n if(opts.graphStyle === 'bar' && opts.data.ys.length > 1) {\n this.allLabel = this.addLabel({\n label: opts.settings.ALL_LABEL,\n outside: true\n });\n }\n\n if(opts.graphStyle === 'area') {\n this.pieLabel = this.addLabel({\n label: 'pie',\n outside: true\n });\n }\n\n this.tooltipOnHover = this.isTouch ? false : opts.data.tooltipOnHover;\n\n if(opts.graphStyle !== 'bar') {\n this.$line = document.createElement('div');\n this.$line.className = 'tchart--line';\n opts.$parent.appendChild(this.$line);\n\n this.$lineFill = document.createElement('div');\n this.$lineFill.className = 'tchart--line-fill';\n this.$line.appendChild(this.$lineFill);\n\n if(opts.graphStyle !== 'area') {\n this.points = opts.data.ys.map(() => {\n const $el = document.createElement('span');\n $el.className = 'tchart--line-point';\n this.$line.appendChild($el);\n return $el;\n });\n }\n } else {\n opts.state.barInd = -1;\n opts.state.barO = 0;\n }\n\n if(!this.tooltipOnHover) {\n this.drag = new TDrag({\n $el: this.$canvas,\n onDragStart: (params) => {\n this.canvasPos = getElemPagePos(this.$canvas);\n this.dx = params.pageX - this.canvasPos.x;\n this.dy = params.pageY - this.canvasPos.y;\n\n const dims = this.opts.state.dims.tip;\n this.tp = this.getTp(this.dx, this.dy - dims.t, params.isTouch);\n\n delete this.prevXInd;\n\n clearTimeout(this.showTimeout);\n this.showTimeout = window.setTimeout(() => {\n this.toggle(!!this.tp);\n this.tp && this.render();\n }, this.isTouch ? 100 : 30);\n\n document.body.removeEventListener('click', this.onBodyClick);\n\n return !this.tp;\n },\n onDragMove: (params) => {\n if(params.canceled) {\n clearTimeout(this.showTimeout);\n this.toggle(false);\n return;\n }\n this.canvasPos = this.canvasPos || getElemPagePos(this.$canvas);\n this.dx = params.pageX - this.canvasPos.x;\n this.dy = params.pageY - this.canvasPos.y;\n this.render({isMove: true});\n },\n onDragEnd: () => {\n delete this.canvasPos;\n this.bodyTimeout = window.setTimeout(() => {\n document.body.addEventListener('click', this.onBodyClick);\n }, 140);\n }\n });\n\n\n this.$tip.addEventListener('click', this.onTipClick);\n } else {\n this.$canvas.addEventListener('mousemove', (e) => {\n this.canvasPos = this.canvasPos || getElemPagePos(this.$canvas);\n this.dx = e.pageX - this.canvasPos.x;\n this.dy = e.pageY - this.canvasPos.y;\n\n const dims = this.opts.state.dims.tip;\n this.tp = this.getTp(this.dx, this.dy - dims.t, this.isTouch);\n\n if(this.tp) {\n if(!this.shown) {\n delete this.prevXInd;\n this.toggle(true);\n this.render({});\n } else {\n this.render({isMove: true});\n }\n } else {\n this.toggle(false);\n }\n });\n\n this.$canvas.addEventListener('mouseleave', () => {\n delete this.canvasPos;\n this.toggle(false);\n });\n\n this.$canvas.addEventListener('click', (e) => {\n if(this.shown) {\n this.onTipClick(e);\n }\n });\n\n this.$tip.style.pointerEvents = 'none';\n }\n\n this.trackMouse(true);\n\n this.updateColors();\n }\n\n onResize(rect?: any) {\n const dims = this.opts.state.dims.tip;\n\n if(this.$line) {\n const dh = this.opts.graphStyle === 'area' ? 25 : 16;\n\n this.$line.style.top = dims.t + 'px';\n this.$line.style.height = dims.h + 'px';\n\n this.$lineFill.style.top = dh + 'px';\n this.$lineFill.style.bottom = (this.opts.settings.PADD[2] + 1) + 'px';\n }\n\n this.render();\n }\n\n abortDetailCallbacks() {\n if(!this.detailCallbacks) return;\n\n this.detailCallbacks.forEach((item) => {\n item.cancelled = true;\n });\n\n delete this.detailCallbacks;\n }\n\n onTipClick = (e: Event) => {\n if(this.prevXInd === undefined) return;\n if(!this.opts.additional.onClick) return;\n if(!this.opts.data.hasDetail) return;\n if(this.opts.state.zoomMode || this.opts.state.zoomModeSpecial) return;\n\n e.stopPropagation();\n\n if(this.$tip.classList.contains('tchart--tip__loading')) return;\n\n const x = this.opts.data.x[this.prevXInd];\n\n // area case\n if(!this.opts.data.detailsFunc) {\n this.toggle(false, true);\n this.opts.additional.onClick(true, x);\n return;\n }\n\n this.$tip.classList.remove('tchart--tip__error');\n this.$tip.classList.add('tchart--tip__loading');\n\n if(this.cache[x]) {\n this.toggle(false, true);\n this.opts.additional.onClick(true, x, this.cache[x]);\n this.$tip.classList.remove('tchart--tip__loading');\n return;\n }\n\n this.abortDetailCallbacks();\n\n const dataPromise = this.opts.data.detailsFunc(x);\n\n this.detailCallbacks = this.detailCallbacks || [];\n\n const successDetailCallback = (val: any) => {\n if((successDetailCallback as any).cancelled) return;\n this.$tip.classList.remove('tchart--tip__loading');\n\n if(!val || !val.columns) {\n this.$tip.classList.add('tchart--tip__error');\n return;\n }\n\n this.toggle(false, true);\n this.opts.additional.onClick(true, x, val);\n this.cache[x] = val;\n };\n\n const errorDetailCallback = (val: any) => {\n if((errorDetailCallback as any).cancelled) return;\n console.log('error:', val);\n this.$tip.classList.remove('tchart--tip__loading');\n this.$tip.classList.add('tchart--tip__error');\n };\n\n this.detailCallbacks.push(successDetailCallback);\n this.detailCallbacks.push(errorDetailCallback);\n\n dataPromise\n .then(successDetailCallback)\n .catch(errorDetailCallback);\n };\n\n updateColors() {\n const ys = this.opts.data.ys;\n\n this.labels.forEach((item, ind) => {\n this.points && (this.points[ind].style.borderColor = this.isDarkMode ? ys[ind].colors_n[0] : ys[ind].colors_d[0]);\n item.$value.style.color = this.isDarkMode ? ys[ind].colors_n[2] : ys[ind].colors_d[2];\n });\n\n if(this.allLabel) {\n this.allLabel.$value.style.color = 'var(--tchart-text-color)';\n }\n\n if(this.$lineFill) {\n // this.$lineFill.style.backgroundColor = 'rgba(var(--tchart-background-color-rgb), 0.1)';\n this.$lineFill.style.backgroundColor = this.opts.settings.COLORS.grid;\n }\n }\n\n setDarkMode(enabled: boolean) {\n this.isDarkMode = enabled;\n this.updateColors();\n }\n\n addLabel(item: Partial<Pick<TChartData['ys'][0], 'label' | 'outside'>>) {\n const $row = document.createElement('div');\n $row.className = 'tchart--tip-row';\n if(item.outside) {\n this.$tip.appendChild($row);\n $row.classList.add('tchart--tip-row__outside');\n } else {\n this.$tipScroller.appendChild($row);\n }\n\n const $label = document.createElement('span');\n $label.className = 'tchart--tip-row-label';\n $row.appendChild($label);\n\n const $labelText = document.createTextNode('');\n $labelText.nodeValue = item.label;\n $label.appendChild($labelText);\n\n let $perText: Text;\n\n let $per: HTMLParagraphElement;\n if(this.opts.graphStyle === 'area') {\n $per = document.createElement('p');\n $per.className = 'tchart--tip-row-per';\n $row.appendChild($per);\n\n $perText = document.createTextNode('');\n $per.appendChild($perText);\n }\n\n const $value = document.createElement('div');\n $value.className = 'tchart--tip-row-value';\n $row.appendChild($value);\n\n const $valueText = document.createTextNode('');\n $value.appendChild($valueText);\n\n return {\n $row: $row,\n $value: $value,\n $valueText: $valueText,\n $label: $label,\n $labelText: $labelText,\n $per: $per,\n $perText: $perText\n };\n }\n\n getTp(x: number, y: number, isTouch?: boolean) {\n if(this.opts.graphStyle === 'area' && this.opts.state.zoomMode) {\n const dims = this.opts.state.dims.graph;\n const cx = dims.w / 2;\n const cy = dims.h / 2;\n const dist = Math.pow((cy - y) * (cy - y) + (x - cx) * (x - cx), 0.5);\n return dist <= this.opts.settings.PIE_RADIUS ? 'graph' : '';\n } else {\n const dims = this.opts.state.dims.tip;\n if(y < 0 || y > dims.h) return '';\n return 'graph';\n }\n }\n\n trackMouse(enabled?: boolean, noPropagation?: boolean) {\n if(this.isTouch) return;\n\n this.$canvas.addEventListener('mousemove', this.onMouseMove);\n this.$canvas.addEventListener('mouseleave', this.onMouseLeave);\n }\n\n onMouseLeave = () => {\n this.$canvas.classList.remove('tchart--graph-canvas__tip-pointer');\n delete this.canvasPos;\n };\n\n onMouseMove = (e: MouseEvent) => {\n this.canvasPos = this.canvasPos || getElemPagePos(this.$canvas);\n const dx = e.pageX - this.canvasPos.x;\n const dy = e.pageY - this.canvasPos.y;\n\n const dims = this.opts.state.dims.tip;\n const tp = this.getTp(dx, dy - dims.t, false);\n\n this.onMouseLeave();\n tp && this.$canvas.classList.add('tchart--graph-canvas__tip-pointer');\n };\n\n toggle(enabled: boolean, shiftHide?: boolean) {\n const opts = this.opts;\n const state = opts.state;\n\n if(enabled && !this.shown) {\n this.$tip.classList.add('tchart--tip__visible');\n if(this.opts.data.hasDetail && !(this.opts.state.zoomMode || this.opts.state.zoomModeSpecial)) {\n this.$tip.classList.add('tchart--tip__has-zoom');\n } else {\n this.$tip.classList.remove('tchart--tip__has-zoom');\n }\n this.$tip.classList.remove('tchart--tip__shiftHide');\n this.$line && this.$line.classList.add('tchart--line__visible');\n triggerEvent('chart-hide-tips', {except: this.opts.chart});\n }\n\n if(!enabled && this.shown) {\n delete this.lastCurPieItemInd;\n\n if(opts.graphStyle === 'area' && state.zoomMode) {\n const animProps: TChartAnimationProperty[] = [];\n for(let i = 0; i < state.pieAngles.length; i++) {\n const pieItem = state.pieAngles[i];\n animProps.push({\n prop: `pieInd_${pieItem.ind}`,\n state: opts.state,\n end: 0,\n duration: 350,\n tween: 'exp',\n speed: 0.2,\n group: {top: true}\n });\n }\n opts.animator.add(animProps);\n }\n\n if(shiftHide) {\n this.$tip.classList.add('tchart--tip__shiftHide');\n this.lastTipTop -= 12;\n this.lastTipLeft = this.lastTipLeft < this.opts.state.dims.tip.w / 2 ? this.lastTipLeft - 12 : this.lastTipLeft + 12;\n this.$tip.style.transform = 'translate(' + this.lastTipLeft + 'px,' + this.lastTipTop + 'px)';\n this.$tip.style.webkitTransform = 'translate(' + this.lastTipLeft + 'px,' + this.lastTipTop + 'px)';\n }\n this.$tip.classList.remove('tchart--tip__visible');\n this.$line && this.$line.classList.remove('tchart--line__visible');\n\n this.abortDetailCallbacks();\n\n this.$tip.classList.remove('tchart--tip__error');\n this.$tip.classList.remove('tchart--tip__loading');\n\n // add to animaion query request to disable tooltip selection overlay\n if(this.opts.graphStyle === 'bar') {\n this.opts.animator.add([{\n prop: 'barInd',\n state: this.opts.state,\n end: -1,\n duration: 0,\n delay: 150,\n tween: 'linear',\n group: {top: true}\n }, {\n prop: 'barO',\n state: this.opts.state,\n end: 0,\n duration: 150,\n tween: 'exp',\n speed: 0.3,\n group: {top: true}\n }]);\n }\n document.body.removeEventListener('click', this.onBodyClick);\n }\n\n this.shown = enabled;\n }\n\n onBodyClick = (e: Event) => {\n if(e.target === this.$canvas) return;\n\n this.toggle(false);\n };\n\n renderPieTooltip(params?: any) {\n const opts = this.opts;\n const state = opts.state;\n const settings = this.opts.settings;\n const pTop = settings.PADD[0];\n const pRight = settings.PADD[1];\n const pBottom = settings.PADD[2];\n const pLeft = settings.PADD[3];\n const dims = state.dims.graph;\n const dimsTip = state.dims.tip;\n const cx = dims.w / 2;\n const cy = dims.h / 2;\n const formatter = getFormatter('yTooltipFormatter', opts.data, state.zoomMorph);\n let ang = Math.atan2(cy - this.dy + dims.t, this.dx - cx);\n ang = ang < 0 ? Math.PI * 2 + ang : ang;\n\n let curPieItem: TChartAngle;\n for(let i = 0; i < state.pieAngles.length; i++) {\n const pieItem = state.pieAngles[i];\n if(ang <= pieItem.st && ang >= pieItem.ed) {\n curPieItem = pieItem;\n }\n\n if(ang - 2 * Math.PI <= pieItem.st && ang - 2 * Math.PI >= pieItem.ed) {\n curPieItem = pieItem;\n }\n }\n\n if(this.lastCurPieItemInd !== curPieItem.ind) {\n const animProps: TChartAnimationProperty[] = [];\n for(let i = 0; i < state.pieAngles.length; i++) {\n const pieItem = state.pieAngles[i];\n animProps.push({\n prop: `pieInd_${pieItem.ind}`,\n state: opts.state,\n end: pieItem === curPieItem ? 1 : 0,\n duration: 350,\n tween: 'exp',\n speed: 0.2,\n group: {top: true}\n });\n }\n opts.animator.add(animProps);\n }\n\n\n this.pieLabel.$row.style.display = 'block';\n this.labels.forEach((item) => {\n item.$row.style.display = 'none';\n });\n\n this.pieLabel.$labelText.nodeValue = curPieItem.label;\n this.pieLabel.$valueText.nodeValue = !isNaN(curPieItem.value) ? formatter(curPieItem.value) : 'n/a';\n\n this.pieLabel.$value.style.color = curPieItem.color;\n this.$tip.classList.add('tchart--tip__piemode');\n this.$line && this.$line.classList.add('tchart--line__piemode');\n\n this.tipH = this.$tip.offsetHeight;\n this.tipW = this.$tip.offsetWidth;\n\n const tipMarginFromPointer = 20;\n let left = (this.dx - this.tipW / 2);\n let top = Math.min(this.dy - tipMarginFromPointer - this.tipH, dimsTip.t + dimsTip.h - this.tipH - pBottom);\n if(top < dimsTip.t + pTop) {\n top = dimsTip.t + pTop;\n }\n\n left = Math.min(Math.max(left, pLeft / 2), dimsTip.w - this.tipW - pRight / 2);\n\n this.$tip.style.transform = 'translate(' + (left << 0) + 'px,' + (top << 0) + 'px)';\n this.$tip.style.webkitTransform = 'translate(' + (left << 0) + 'px,' + (top << 0) + 'px)';\n\n this.lastCurPieItemInd = curPieItem.ind;\n\n this.updateTipScrollClasses();\n }\n\n render(params: any = {}) {\n if(!this.shown) return;\n\n const opts = this.opts;\n const state = opts.state;\n const settings = this.opts.settings;\n const pTop = settings.PADD[0];\n const pRight = settings.PADD[1];\n const pBottom = settings.PADD[2];\n const pLeft = settings.PADD[3];\n let $el: HTMLElement;\n let y1: number, y2: number;\n let itemsVisible = 0;\n const dims = this.opts.state.dims.tip;\n const formatter = getFormatter('yTooltipFormatter', opts.data, state.zoomMorph);\n\n const zoomMorph = state.zoomMorph === undefined ? 0 : state.zoomMorph;\n const offsetForBarGraphMain = opts.graphStyle === 'bar' || opts.graphStyle === 'step' ? this.opts.data.mainPeriodLen : 0;\n const offsetForBarGraphScale = offsetForBarGraphMain * (1 - zoomMorph);\n\n this.abortDetailCallbacks();\n\n this.$tip.classList.remove('tchart--tip__error');\n this.$tip.classList.remove('tchart--tip__loading');\n\n if(opts.graphStyle === 'area' && state.zoomMode) {\n this.renderPieTooltip(params);\n return;\n } else {\n if(this.pieLabel) {\n this.pieLabel.$row.style.display = 'none';\n }\n }\n\n const constrainedDx = Math.max(Math.min(this.dx, dims.w - 1), 0);\n const x = state.x1 + (state.x2 - state.x1 + offsetForBarGraphScale) * ((constrainedDx - pLeft) / (dims.w - pRight - pLeft));\n const xPos = getXIndex(opts.data.x, x);\n let xInd = (opts.graphStyle === 'bar' || opts.graphStyle === 'step' ? Math.floor(xPos) : Math.round(xPos));\n\n // prevent out of canvas points\n if(opts.graphStyle !== 'bar' && opts.graphStyle !== 'step') {\n const lx = (opts.data.x[xInd] - state.x1) / (state.x2 - state.x1 + offsetForBarGraphScale);\n const cx = ((lx * (dims.w - pLeft - pRight) + pLeft) << 0);\n if(cx < 0) {\n xInd++\n }\n if(cx > dims.w - 1) {\n xInd--;\n }\n } else {\n if(this.opts.state.zoomMode || this.opts.state.zoomModeSpecial) {\n if(xInd < opts.state.detailInd1) {\n xInd++;\n }\n if(xInd > opts.state.detailInd2) {\n xInd--;\n }\n }\n }\n\n\n // add to anitaion query request to redraw graph\n // it will notice barInd: xInd and draw needed selection\n if(opts.graphStyle === 'bar') {\n opts.animator.add([{\n prop: 'barInd',\n state: opts.state,\n end: xInd,\n duration: 0,\n tween: 'linear',\n group: {top: true}\n }, {\n prop: 'barO',\n state: this.opts.state,\n end: 1,\n duration: 150,\n tween: 'exp',\n speed: 0.3,\n group: {top: true}\n }]);\n }\n\n if(this.prevXInd !== xInd || !params.isMove) {\n this.$tip.classList.remove('tchart--tip__piemode');\n this.$line && this.$line.classList.remove('tchart--line__piemode');\n\n\n this.labels.forEach((item, ind) => {\n const display = opts.state[`e_${ind}`] && !isNaN(opts.data.ys[ind].y[xInd]) ? 'block' : 'none';\n item.$row.style.display = display;\n this.points && (this.points[ind].style.display = display);\n itemsVisible += display === 'block' ? 1 : 0;\n });\n\n this.itemsVisible = itemsVisible;\n if(this.allLabel) {\n this.allLabel.$row.style.display = itemsVisible > 1 ? 'block' : 'none';\n }\n\n if(this.itemsVisible) {\n this.$tip.classList.remove('tchart--tip__has_no_items');\n this.$line && this.$line.classList.remove('tchart--line__has_no_items');\n } else {\n this.$tip.classList.add('tchart--tip__has_no_items');\n this.$line && this.$line.classList.add('tchart--line__has_no_items');\n }\n\n let xw = 0;\n if(opts.graphStyle === 'step') {\n if(this.opts.state.zoomMode) {\n xw = opts.data.detailPeriodLen;\n } else {\n xw = opts.data.mainPeriodLen;\n }\n }\n\n const lx = (opts.data.x[xInd] - state.x1 + xw / 2) / (state.x2 - state.x1 + offsetForBarGraphScale);\n const cx = ((lx * (dims.w - pLeft - pRight) + pLeft) << 0);\n\n this.$line && (this.$line.style.transform = 'translateX(' + cx + 'px)');\n this.$line && (this.$line.style.webkitTransform = 'translateX(' + cx + 'px)');\n\n this.$tipDtText.nodeValue = opts.data.dates[xInd];\n\n let sumAll = 0;\n opts.data.ys.forEach((item, ind) => {\n if(opts.state[`e_${ind}`] && !isNaN(item.y[xInd])) {\n this.labels[ind].$valueText.nodeValue = formatter(item.y[xInd]);\n sumAll += item.y[xInd] || 0\n\n if(this.points) {\n $el = this.points[ind];\n\n if(opts.pairY) {\n y1 = state[`y1_${ind}`] as number;\n y2 = state[`y2_${ind}`] as number;\n } else {\n y1 = state['y1'] as number;\n y2 = state['y2'] as number;\n }\n\n const y = (item.y[xInd] - y1) / (y2 - y1);\n $el.style.transform = 'translateY(' + ((dims.h - y * (dims.h - pTop - pBottom) - pBottom) << 0) + 'px)';\n $el.style.webkitTransform = 'translateY(' + ((dims.h - y * (dims.h - pTop - pBottom) - pBottom) << 0) + 'px)';\n }\n }\n });\n\n\n if(this.allLabel) {\n this.allLabel.$valueText.nodeValue = formatter(sumAll);\n }\n\n if(!params.isMove) {\n // reset max width for current tooltip shown session\n this.maxLabelWidth = 0;\n this.maxValueWidth = 0;\n this.maxPercentageWidth = 0;\n this.maxDateWidth = 0;\n\n // calc content paddings\n const compStyles = window.getComputedStyle(this.$tip);\n this.rowPaddings = parseInt(compStyles.getPropertyValue('padding-left'), 10) + parseInt(compStyles.getPropertyValue('padding-right'), 10);\n }\n\n\n if(opts.graphStyle === 'area') {\n this.fillPercentages(xInd, sumAll);\n }\n\n // calc max labels and values width\n this.labels.forEach((item, ind) => {\n const isVisible = opts.state[`e_${ind}`] && !isNaN(opts.data.ys[ind].y[xInd]);\n if(isVisible) {\n const labelWidth = item.$label.offsetWidth;\n if(labelWidth > this.maxLabelWidth) {\n this.maxLabelWidth = labelWidth;\n }\n const valueWidth = item.$value.offsetWidth;\n if(valueWidth > this.maxValueWidth) {\n this.maxValueWidth = valueWidth;\n }\n }\n });\n\n\n // calc tooltip width to fit all labels and values witout overlaping each another\n let minWidth = this.rowPaddings + this.maxLabelWidth + 20 +this.maxValueWidth;// 20 - min margin between label and value\n minWidth += opts.graphStyle === 'area' ? this.maxPercentageWidth : 0; // percentages block for area\n\n // and don't forget about date caption, 20 - space for detail arrow\n const dateWidth = this.rowPaddings + this.$tipDt.offsetWidth + 20;\n if(dateWidth > this.maxDateWidth) {\n this.maxDateWidth = dateWidth;\n }\n minWidth = Math.max(minWidth, this.maxDateWidth);\n\n this.$tip.style.width = minWidth + 'px';\n\n this.tipH = this.$tip.offsetHeight;\n this.tipW = this.$tip.offsetWidth;\n }\n\n let pos = this.itemsVisible <= 2 ? 'center' : 'side';\n const tipMarginFromPointer = 20;\n\n let left: number, top: number;\n if(pos === 'center') {\n left = (this.dx - this.tipW / 2);\n top = Math.min(this.dy - tipMarginFromPointer - this.tipH, dims.t + dims.h - this.tipH - pBottom);\n if(top < dims.t + pTop) {\n pos = 'side';\n }\n }\n\n if(pos === 'side') {\n if(this.dx > dims.w / 2) {\n left = this.dx - this.tipW - tipMarginFromPointer;\n } else {\n left = this.dx + tipMarginFromPointer;\n }\n top = Math.min(Math.max(this.dy - this.tipH / 2, dims.t + pTop), dims.t + dims.h - this.tipH - pBottom);\n }\n\n left = Math.min(Math.max(left, pLeft / 2), dims.w - this.tipW - pRight / 2);\n\n this.$tip.style.transform = 'translate(' + (left << 0) + 'px,' + (top << 0) + 'px)';\n this.$tip.style.webkitTransform = 'translate(' + (left << 0) + 'px,' + (top << 0) + 'px)';\n\n this.lastTipLeft = left << 0;\n this.lastTipTop = top << 0;\n\n this.prevXInd = xInd;\n\n this.updateTipScrollClasses();\n }\n\n updateTipScrollClasses = () => {\n if(this.$tipScroller.scrollHeight > this.$tipScroller.offsetHeight) {\n this.$tip.classList.add('tchart--tip__scroll');\n } else {\n this.$tip.classList.remove('tchart--tip__scroll');\n }\n\n if(this.$tipScroller.scrollTop <= 0) {\n this.$tip.classList.remove('tchart--tip__has_less');\n } else {\n this.$tip.classList.add('tchart--tip__has_less');\n }\n\n if(this.$tipScroller.scrollTop >= this.$tipScroller.scrollHeight - this.$tipScroller.offsetHeight) {\n this.$tip.classList.remove('tchart--tip__has_more');\n } else {\n this.$tip.classList.add('tchart--tip__has_more');\n }\n };\n\n fillPercentages(xInd: number, sumAll: number) {\n const opts = this.opts;\n const perInt: number[] = [];\n let maxLen = 2;\n\n opts.data.ys.forEach((item, ind) => {\n if(opts.state[`e_${ind}`]) {\n perInt[ind] = Math.max(Math.round(100 * item.y[xInd] / sumAll), 0);\n\n if(isNaN(item.y[xInd]) || sumAll === 0) {\n perInt[ind] = 0;\n }\n\n if(perInt[ind] === 100) {\n maxLen = 3;\n }\n }\n });\n\n opts.data.ys.forEach((item, ind) => {\n if(opts.state[`e_${ind}`]) {\n const percentageWidth = (maxLen * 8 + 17); // with right padding\n this.labels[ind].$label.style.transform = 'translateX(' + percentageWidth + 'px)';\n this.labels[ind].$label.style.webkitTransform = 'translateX(' + percentageWidth + 'px)';\n this.labels[ind].$perText.nodeValue = (perInt[ind]) + '%';\n this.labels[ind].$per.style.width = (percentageWidth - 7) + 'px';\n if(percentageWidth > this.maxPercentageWidth) {\n this.maxPercentageWidth = percentageWidth;\n }\n }\n });\n }\n}\n","import TAnimator from './animator';\nimport TAreas from './areas';\nimport TAxisX from './axisX';\nimport TAxisY from './axisY';\nimport TBars from './bars';\nimport TComposer from './composer';\nimport TFade from './fade';\nimport THandle from './handle';\nimport TLines from './lines';\nimport TSwitchers from './switchers';\nimport TTip from './tip';\nimport {getFormatter, getXIndex, roundRange, triggerEvent} from './utils';\nimport {TChartAnimationProperty, TChartConstructorOptions, TChartData, TChartDataDetails, TChartRange, TChartRangePaired, TChartRangeSingle, TChartSettings, TChartState, TChartStateZoom, TChartType, TChartTypeRenderer, TChartUnitOptions} from './types';\nimport {getLabelDate, getLabelTime} from './format';\nimport './chart.scss';\n\nexport default class TChart {\n private opts: TChartConstructorOptions;\n private state: TChartState;\n private specialZoomTransition: boolean;\n private settings: TChartSettings;\n private data: TChartData;\n private pairY: boolean;\n private graphStyle: TChartType;\n private ww: number;\n private switcherLeaveTimeout: number;\n private zoomEnterSpeed: number;\n private hasSavedData: boolean;\n\n public axisY: TAxisY;\n public fade: TFade;\n public axisX: TAxisX;\n private composer: TComposer;\n private switchers: TSwitchers;\n public handle: THandle;\n private animator: TAnimator;\n private tip: TTip;\n private slaveChart: TChart;\n public graph: TChartTypeRenderer;\n public mini: TChartTypeRenderer;\n\n public $el: HTMLElement;\n public $wrapper: HTMLElement;\n private $switchers: HTMLElement;\n private $graph: HTMLElement;\n private $h1: HTMLElement;\n private $zoom: HTMLElement;\n\n public static render(opts: TChartConstructorOptions) {\n const wrapper = document.createElement('div');\n wrapper.className = 'tchart--wrapper';\n opts.container.appendChild(wrapper);\n opts.container = wrapper;\n\n const tChart = new TChart(opts);\n tChart.$wrapper = wrapper;\n return tChart;\n }\n\n constructor(opts: TChartConstructorOptions) {\n this.state = {} as any;\n\n this.state.masterVisibility = 1;\n this.state.slaveVisibility = 0;\n this.specialZoomTransition = undefined;\n\n const isIEOld = ((!!(window as any).ActiveXObject && +(/msie\\s(\\d+)/i.exec(navigator.userAgent)[1])) || NaN - 0) < 11\n const isIE11 = navigator.userAgent.indexOf('Trident/') !== -1 && (navigator.userAgent.indexOf('rv:') !== -1 || navigator.appName.indexOf('Netscape') !== -1)\n\n const DAY_COLORS: TChartSettings['COLORS'] = {\n background: '#FFFFFF',\n backgroundRgb: [255, 255, 255],\n text: '#000000',\n dates: '#000',\n grid: 'rgba(24, 45, 59, 0.1)',\n axis: {\n x: 'rgba(37,37,41,0.5)',\n y: 'rgba(37,37,41,0.5)'\n },\n barsSelectionBackground: 'rgba(255, 255, 255, 0.5)',\n miniMask: 'rgba(226, 238, 249, 0.6)',\n miniFrame: '#C0D1E1'\n };\n\n const NIGHT_COLORS: TChartSettings['COLORS'] = {\n background: '#242F3E',\n backgroundRgb: [36, 47, 62],\n text: '#FFFFFF',\n dates: '#fff',\n grid: 'rgba(255, 255, 255, 0.1)',\n axis: {\n x: 'rgba(163,177,194,0.6)',\n y: 'rgba(236,242,248,0.5)'\n },\n barsSelectionBackground: 'rgba(36, 47, 62, 0.5)',\n miniMask: 'rgba(48, 66, 89, 0.6)',\n miniFrame: '#56626D'\n };\n\n const darkMode = !!document.documentElement.classList.contains('dark');\n this.settings = {\n isIE: isIEOld || isIE11,\n isEdge: /Edge\\/\\d./i.test(navigator.userAgent),\n dpi: Math.min(window.devicePixelRatio || 1, 2),\n darkMode: darkMode,\n ALL_LABEL: 'All',\n Y_AXIS_RANGE: 5.3, // 0.3 this is part of one step, graph is overflowed above last y axis for this value, so take care of it\n PADD: [20, 16, 20, 16],\n PADD_MINI: [2, 0, 2, 0],\n PADD_MINI_BAR: [0, 0, 0, 0],\n PADD_MINI_AREA: [0, 0, 0, 0],\n Y_LABELS_WIDTH: 50,\n X_LABELS_HEIGHT: 12,\n DATES_HEIGHT: 18,\n DATES_WIDTH: 300,\n DATES_SIDE: 'right',\n DATES_WEIGHT: 'bold',\n ZOOM_TEXT: 'Zoom Out',\n MINI_GRAPH_HEIGHT: 40,\n MINI_GRAPH_TOP: 14,\n MINI_GRAPH_BOTTOM: 2,\n FADE_HEIGHT: 16,\n PIE_RADIUS: 130,\n FONT: {\n family: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif',\n bold: 'bold',\n normal: 'normal'\n },\n COLORS: darkMode ? NIGHT_COLORS : DAY_COLORS,\n ...(opts.settings || {})\n };\n\n this.data = {\n caption: opts.data.title,\n detailsFunc: opts.data.x_on_zoom,\n hasDetail: !!opts.data.x_on_zoom,\n slave: opts.slave,\n yTickFormatter: opts.data.yTickFormatter,\n yTooltipFormatter: opts.data.yTooltipFormatter,\n yMinStep: opts.data.yMinStep,\n xTickFormatter: opts.data.xTickFormatter,\n xTooltipFormatter: opts.data.xTooltipFormatter,\n xRangeFormatter: opts.data.xRangeFormatter,\n strokeWidth: opts.data.strokeWidth || 'auto',\n hidden: opts.data.hidden || [],\n tooltipOnHover: !!opts.data.tooltipOnHover,\n forceLegend: opts.data.forceLegend,\n sideLegend: opts.data.sideLegend || false,\n pieZoomRange: opts.data.pieZoomRange || 7 * 86400 * 1000,\n pieLabelsPercentages: {\n outboard: opts.data.pieLabelsPercentages && opts.data.pieLabelsPercentages.outboard !== undefined ? opts.data.pieLabelsPercentages.outboard : 5,\n hoverOnly: opts.data.pieLabelsPercentages && opts.data.pieLabelsPercentages.hoverOnly !== undefined ? opts.data.pieLabelsPercentages.hoverOnly : 2\n },\n subchart: {\n show: opts.data.subchart && opts.data.subchart.show !== undefined ? opts.data.subchart.show : true,\n defaultZoom: opts.data.subchart && opts.data.subchart.defaultZoom\n },\n getLabelDate: opts.data.getLabelDate || getLabelDate,\n getLabelTime: opts.data.getLabelTime || getLabelTime\n };\n\n if(opts.data.y_scaled) {\n this.pairY = true;\n }\n\n this.graphStyle = 'line';\n const settings = this.settings;\n\n // transform data to more convinient format\n opts.data.columns.forEach((item) => {\n const id = item.shift() as any as string;\n const tp = opts.data.types[id];\n\n if(tp === 'x') {\n this.data.x = item;\n\n this.state.xCount = item.length;\n this.state.x1 = item[(item.length * 0.75) << 0]; // initial zoom if no defaultZoom set\n this.state.x2 = item[item.length - 1];\n this.state.xg1 = item[0];\n this.state.xg2 = item[item.length - 1];\n this.state.xg1Ind = 0;\n this.state.xg2Ind = item.length - 1;\n this.state.xMainMin = item[0];\n this.state.xMainMax = item[this.state.xg2Ind];\n this.state.xgMin = item[0];\n this.state.xgMax = item[this.state.xg2Ind];\n\n const defaultZoom = this.getDefaultZoom({\n x1: this.state.x1,\n x2: this.state.x2,\n xg1: this.state.xg1,\n xg2: this.state.xg2,\n default: this.data.subchart.defaultZoom\n });\n\n this.state.x1 = defaultZoom.x1;\n this.state.x2 = defaultZoom.x2;\n\n this.data.mainPeriodLen = this.data.x[1] - this.data.x[0];\n this.data.detailPeriodLen = this.data.mainPeriodLen; // first detail upload would set correct value\n\n this.data.dates = [];\n this.data.datesShort = [];\n this.data.datesRange = [];\n\n const xTooltipFormatter = getFormatter('xTooltipFormatter', this.data, 0);\n const xTickFormatter = getFormatter('xTickFormatter', this.data, 0);\n const xRangeFormatter = this.data.subchart.show ? getFormatter('xRangeFormatter', this.data, 0) : undefined;\n let maxXTickLength = 0;\n\n item.forEach((item, ind) => {\n this.data.dates[ind] = xTooltipFormatter(item, false);\n this.data.datesShort[ind] = xTickFormatter(item, false);\n\n if(xRangeFormatter) {\n this.data.datesRange[ind] = xRangeFormatter(item, false);\n }\n\n if(this.data.datesShort[ind].length > maxXTickLength) {\n maxXTickLength = this.data.datesShort[ind].length;\n }\n });\n\n this.data.maxXTickLength = maxXTickLength;\n } else {\n this.data.ys = this.data.ys || [];\n this.data.yIds = this.data.yIds || {};\n\n const color = opts.data.colors[id];\n this.data.ys.push({\n colors_d: [color, color, color], // light mode colors: [line/area/bar/step, switcher/y_labels(for y_scaled type), tooltip entry]\n colors_n: [color, color, color], // dark ones\n label: opts.data.names[id],\n y: item,\n tp: tp,\n id: id\n });\n\n // if(tp === 'line' || tp === 'step') {\n // DAY_COLORS.axis = {\n // x: '#8E8E93',\n // y: '#8E8E93'\n // };\n // NIGHT_COLORS.axis = {\n // x: 'rgba(163,177,194,0.6)',\n // y: 'rgba(163,177,194,0.6)'\n // };\n // }\n\n const yind = this.data.ys.length - 1;\n\n const isVisible = this.data.hidden.indexOf(id) === -1;\n\n this.data.yIds[id] = yind;\n this.state[`e_${yind}`] = isVisible;\n this.state[`o_${yind}`] = isVisible ? 1 : 0;\n this.state[`om_${yind}`] = isVisible ? 1 : 0;\n this.state[`pieInd_${yind}`] = 0;\n this.state[`f_${yind}`] = 1;\n\n this.graphStyle = tp as TChartType;\n }\n });\n\n this.state.activeColumnsCount = this.data.ys.length;\n this.updateSpeed();\n\n // @ts-ignore\n if(this.graphStyle === 'area') {\n settings.Y_AXIS_RANGE = 4.06;\n this.data.hasDetail = true;\n }\n\n // reduce global range to exclude data gaps\n const reducedRange = this.reduceGlobalRange({});\n\n if(reducedRange.isReduced) {\n this.state.x1 = reducedRange.x1;\n this.state.x2 = reducedRange.x2;\n this.state.xg1 = reducedRange.xg1;\n this.state.xg2 = reducedRange.xg2;\n this.state.xg1Ind = reducedRange.xg1Ind;\n this.state.xg2Ind = reducedRange.xg2Ind;\n }\n\n this.createDOM(opts.container);\n\n window.addEventListener('resize', this.onResize);\n\n document.addEventListener('darkmode', () => {\n this.setDarkMode(!this.darkMode);\n }, false);\n\n document.addEventListener('chart-hide-tips', (e: any) => {\n e.detail.except !== this && this.tip.toggle(false);\n }, false);\n\n this.opts = opts;\n\n this.onResize();\n\n this.darkMode && this.setDarkMode(this.darkMode);\n\n // detect dpi changes\n window.matchMedia('(-webkit-min-device-pixel-ratio: 1), (min-resolution: 96dpi)').addListener(this.onResize);\n window.matchMedia('(-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi)').addListener(this.onResize);\n window.matchMedia('(-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)').addListener(this.onResize);\n window.matchMedia('(-webkit-min-device-pixel-ratio: 3), (min-resolution: 288dpi)').addListener(this.onResize);\n }\n\n private get darkMode() {\n return this.settings.darkMode;\n }\n\n reduceGlobalRange(params: TChartStateZoom) {\n let x1 = params.x1 === undefined ? this.state.x1 : params.x1;\n let x2 = params.x2 === undefined ? this.state.x2 : params.x2;\n const xg1Orig = params.xg1 === undefined ? this.state.xg1 : params.xg1;\n const xg2Orig = params.xg2 === undefined ? this.state.xg2 : params.xg2;\n const x = params.useSaved ? this.data.saved.x : this.data.x;\n\n\n const xg1Ind = Math.floor(getXIndex(x, this.state.xgMin));\n const xg2Ind = Math.ceil(getXIndex(x, this.state.xgMax));\n\n let minXInd = xg2Ind;\n let maxXInd = xg1Ind;\n let shift = this.state.zoomMode ? (this.graphStyle === 'bar' || this.graphStyle === 'step' ? 1 : 2) : 0;\n\n if(this.graphStyle === 'area') shift = 0; // has no details insertion\n\n this.data.ys.forEach((item, ind) => {\n var y = params.useSaved ? this.data.saved.y[ind] : item.y;\n if(this.state[`e_${ind}`]) {\n for(let i = xg1Ind; i <= xg2Ind - shift; ++i) {\n const v = y[i];\n if(v !== undefined) {\n minXInd = Math.min(minXInd, i);\n maxXInd = Math.max(maxXInd, i);\n }\n }\n }\n });\n\n if((maxXInd + shift) === xg2Ind) {\n maxXInd = xg2Ind - Math.max(shift - 1, 0);\n }\n\n if(minXInd >= maxXInd) {\n return {\n isReduced: false\n };\n }\n\n const xg1 = x[minXInd];\n const xg2 = x[maxXInd];\n\n if(xg1Orig === xg1 && xg2Orig === xg2) {\n return {\n isReduced: false\n };\n }\n\n if(x2 > xg2) {\n x1 = xg2 - (x2 - x1);\n x2 = xg2;\n if(x1 < xg1) {\n x1 = xg1;\n }\n } else if(x1 < xg1) {\n x2 = xg1 + (x2 - x1);\n x1 = xg1;\n if(x2 > xg2) {\n x2 = xg2;\n }\n }\n\n return {\n isReduced: true,\n x1: x1,\n x2: x2,\n xg1: xg1,\n xg2: xg2,\n xg1Ind: minXInd,\n xg2Ind: maxXInd\n };\n }\n\n getDefaultZoom(params: TChartStateZoom) {\n if(!params.default) {\n return {\n x1: params.x1,\n x2: params.x2\n };\n }\n\n const res: TChartStateZoom = {};\n res.x1 = params.default[0];\n res.x2 = params.default[1];\n res.x1 = Math.max(res.x1, params.xg1);\n res.x2 = Math.min(res.x2, params.xg2);\n\n if(res.x1 >= res.x2) {\n res.x1 = params.xg1;\n res.x2 = params.xg2;\n }\n\n return res;\n }\n\n updateSpeed(speed?: number) {\n const points = this.state.activeColumnsCount * this.state.xCount * Math.pow((this.state.x2 - this.state.x1) / (this.state.xMainMax - this.state.xMainMin), 0.5);\n const periods = (this.state.deviceSpeed * points / 16.66 << 0);\n let k = Math.max(1 - 0.25 * periods, 0);\n k = Math.pow(k, 0.85);\n if(this.state.deviceSpeed === undefined) {\n speed = 1;\n }\n speed = 1;\n this.state.speed = speed === undefined ? k : speed;\n return this.state.speed;\n }\n\n getYMinMax(x1: number, x2: number, isMini: boolean, fitTo?: boolean, useSaved?: boolean): TChartRange {\n if(this.graphStyle === 'area') {\n return {\n min: 0,\n max: 102\n };\n }\n\n const graphAreaWidth = this.state.dims ? this.state.dims.graph.w : this.getGraphWidth(this.data.sideLegend).width;\n\n let yMin = Number.MAX_VALUE;\n let yMax = -Number.MAX_VALUE;\n const datePerPixel = (x2 - x1) / graphAreaWidth;\n\n let start = getXIndex(useSaved ? this.data.saved.x : this.data.x, x1 - datePerPixel * this.settings.PADD[3]);\n let end = getXIndex(useSaved ? this.data.saved.x : this.data.x, x2 + datePerPixel * this.settings.PADD[1]);\n const yMinStep = this.data.yMinStep || 1;\n const resMin: number[] = [];\n const resMax: number[] = [];\n const settings = this.settings;\n const state = this.state;\n let prevRange: ReturnType<typeof roundRange>;\n let yFirst: number;\n let yLast: number;\n\n if(!useSaved && this.state.zoomMode) { // not backing up from zoom mode\n start = Math.max(start, this.state.detailInd1);\n end = Math.min(end, this.state.detailInd2);\n } else {\n start = Math.max(start, 0);\n end = Math.min(end, this.data.x.length - 1);\n }\n\n const floorStart = Math.floor(start);\n const ceilStart = Math.ceil(start);\n const floorEnd = Math.floor(end);\n const ceilEnd = Math.ceil(end);\n\n const proceedMinMax = (yMin: number, yMax: number, ind?: number, refRange?: ReturnType<typeof roundRange>) => {\n let range: ReturnType<typeof roundRange>;\n if(yMin === Number.MAX_VALUE) {\n if(isMini) {\n if(ind === undefined) {\n yMin = state.y1m as number;\n yMax = state.y2m as number;\n } else {\n yMin = state[`y1m_${ind}`] as number;\n yMax = state[`y2m_${ind}`] as number;\n }\n } else {\n if(ind === undefined) {\n yMin = state.y1 as number;\n yMax = state.y2 as number;\n } else {\n yMin = state[`y1_${ind}`] as number;\n yMax = state[`y2_${ind}`] as number;\n }\n }\n } else {\n if(this.graphStyle === 'bar') {\n yMin = 0;\n }\n\n yMin = Math.floor(yMin);\n yMax = Math.ceil(yMax);\n\n if(fitTo) {\n // second pair should fit it scale to first one exactly\n // but only then first one is enabled\n // refRange holds data to fit within\n range = roundRange(yMin, yMax, settings.Y_AXIS_RANGE, refRange);\n yMin = range.yMin;\n yMax = range.yMax;\n if(Math.abs(yMin - yMax) < settings.Y_AXIS_RANGE * yMinStep) {\n yMax = yMin + Math.floor(settings.Y_AXIS_RANGE * yMinStep);\n }\n }\n }\n\n if(Math.abs(yMin - yMax) < 0.1) {\n yMax++;\n }\n\n return {\n min: yMin,\n max: yMax,\n range: range\n };\n };\n\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n this.data.ys.forEach((item, ind) => {\n const y = useSaved ? this.data.saved.y[ind] : item.y;\n const startIndex = this.graphStyle === 'step' ? floorStart : ceilStart;\n const endIndex = this.graphStyle === 'step' ? ceilEnd : floorEnd;\n\n if(state[`e_${ind}`] || (ind === 0 && this.pairY)) {\n let v: number;\n for(let i = startIndex; i <= endIndex; i++) {\n v = y[i];\n if(v === undefined) continue;\n if(v < yMin) yMin = v;\n if(v > yMax) yMax = v;\n }\n\n if(this.graphStyle === 'line') {\n if(y[floorStart] !== undefined && y[ceilStart] !== undefined) {\n yFirst = y[floorStart] + (start - floorStart) * (y[ceilStart] - y[floorStart]); // clipped part of line from the beginning\n if(yFirst < yMin) yMin = yFirst;\n if(yFirst > yMax) yMax = yFirst;\n }\n\n if(y[floorEnd] !== undefined && y[ceilEnd] !== undefined) {\n yLast = y[floorEnd] + (end - floorEnd) * (y[ceilEnd] - y[floorEnd]); // clipped part of line from the end\n if(yLast < yMin) yMin = yLast;\n if(yLast > yMax) yMax = yLast;\n }\n }\n }\n\n if(this.pairY) {\n // this.prevRange will be available for pair graphs for second one to fit first one\n // if first graph is disabled this.prevRange wiil be null and range will be rounded as always\n const tunedY = proceedMinMax(yMin, yMax, ind, prevRange);\n resMin[ind] = tunedY.min;\n resMax[ind] = tunedY.max;\n yMin = Number.MAX_VALUE;\n yMax = -Number.MAX_VALUE;\n // upd. disabled prevRange, caused problems\n // prevRange = tunedY.range;\n }\n });\n }\n\n if(this.graphStyle === 'bar') {\n const visibleCols: number[] = [];\n\n for(let j = 0; j < this.data.ys.length; j++) {\n if(state[`e_${j}`]) {\n visibleCols.push(j);\n }\n }\n\n const colsLen = visibleCols.length;\n\n for(let i = floorStart; i <= ceilEnd; i++) {\n let yCur = 0;\n for(let j = 0; j < colsLen; j++) {\n yCur += (useSaved ? this.data.saved.y[visibleCols[j]][i] : this.data.ys[visibleCols[j]].y[i]) || 0;\n }\n if(yCur > yMax) yMax = yCur;\n }\n\n yMin = 0;\n }\n\n if(this.pairY) {\n // for absent values\n if(isNaN(resMin[0])) resMin[0] = resMin[1];\n if(isNaN(resMin[1])) resMin[1] = resMin[0];\n if(isNaN(resMax[0])) resMax[0] = resMax[1];\n if(isNaN(resMax[1])) resMax[1] = resMax[0];\n return {\n min: resMin,\n max: resMax\n };\n } else {\n const tunedY = proceedMinMax(yMin, yMax);\n return {\n min: tunedY.min,\n max: tunedY.max\n };\n }\n }\n\n setDarkMode(enabled: boolean, colors?: TChartSettings['COLORS']) {\n this.settings.darkMode = enabled;\n if(colors) {\n this.settings.COLORS = colors;\n }\n\n this.graph.setDarkMode(enabled);\n this.axisY.setDarkMode(enabled);\n this.fade.setDarkMode(enabled);\n this.axisX.setDarkMode(enabled);\n this.mini.setDarkMode(enabled);\n this.handle.setDarkMode(enabled);\n this.tip.setDarkMode(enabled);\n this.switchers.setDarkMode(enabled);\n this.composer.setDarkMode(enabled);\n }\n\n getGraphWidth(hasLegend: boolean) {\n const rectEl = this.$el.getBoundingClientRect();\n\n if(hasLegend) {\n const rectLegend = this.$switchers.getBoundingClientRect();\n\n if((rectEl.width - rectLegend.width) >= 500) {\n return {\n hasSpaceForLegend: true,\n width: Math.max(rectEl.width - rectLegend.width, 1)\n };\n } else {\n return {\n hasSpaceForLegend: false,\n width: rectEl.width\n };\n }\n } else {\n return {\n width: rectEl.width\n };\n }\n }\n\n onResize = () => {\n const dpi = Math.min(window.devicePixelRatio || 1, 2);\n if(this.ww === window.innerWidth && dpi === this.settings.dpi) return;\n this.settings.dpi = dpi;\n\n this.ww = window.innerWidth;\n\n if(this.data.sideLegend) {\n this.$switchers.classList.remove('tchart--switchers__no-space');\n\n const graphWidthData = this.getGraphWidth(true);\n\n // if no space for legend - skip sideLegend option\n if(graphWidthData.hasSpaceForLegend) {\n this.$graph.style.width = graphWidthData.width + 'px';\n } else {\n this.$switchers.classList.add('tchart--switchers__no-space');\n this.$graph.style.width = graphWidthData.width + 'px';\n }\n }\n\n\n const rectGraph = this.$graph.getBoundingClientRect();\n const s = this.settings;\n const graphHeight = rectGraph.height - s.DATES_HEIGHT - s.MINI_GRAPH_HEIGHT - s.MINI_GRAPH_TOP - s.MINI_GRAPH_BOTTOM;\n\n this.state.dims = {\n composer: {\n w: rectGraph.width,\n h: rectGraph.height,\n l: 0,\n t: 0\n },\n graph: {\n w: rectGraph.width,\n h: graphHeight,\n l: 0,\n t: s.DATES_HEIGHT\n },\n axisYLeft: {\n w: s.Y_LABELS_WIDTH,\n h: graphHeight,\n l: s.PADD[3],\n t: s.DATES_HEIGHT\n },\n axisYRight: {\n w: s.Y_LABELS_WIDTH,\n h: graphHeight,\n l: rectGraph.width - s.PADD[1] - s.Y_LABELS_WIDTH,\n t: s.DATES_HEIGHT\n },\n axisYLines: {\n w: rectGraph.width - s.PADD[1] - s.PADD[3],\n h: graphHeight,\n l: s.PADD[3],\n t: s.DATES_HEIGHT\n },\n fadeTop: {\n w: rectGraph.width,\n h: s.FADE_HEIGHT,\n l: 0,\n t: s.DATES_HEIGHT\n },\n fadeBottom: {\n w: rectGraph.width,\n h: s.FADE_HEIGHT,\n l: 0,\n t: s.DATES_HEIGHT + graphHeight - s.FADE_HEIGHT\n },\n axisX: {\n w: rectGraph.width,\n h: s.X_LABELS_HEIGHT,\n l: 0,\n t: s.DATES_HEIGHT + graphHeight - s.X_LABELS_HEIGHT\n },\n dates: {\n w: s.DATES_WIDTH,\n h: s.DATES_HEIGHT,\n l: this.opts.settings.DATES_SIDE === 'right' ? rectGraph.width - s.DATES_WIDTH - s.PADD[1] : s.PADD[1],\n t: 0\n },\n mini: {\n w: rectGraph.width - s.PADD[1] - s.PADD[3],\n h: s.MINI_GRAPH_HEIGHT,\n l: s.PADD[3],\n t: s.DATES_HEIGHT + graphHeight + s.MINI_GRAPH_TOP\n },\n handle: {\n w: rectGraph.width - s.PADD[1] - s.PADD[3],\n h: s.MINI_GRAPH_HEIGHT + 2,\n l: s.PADD[3],\n t: s.DATES_HEIGHT + graphHeight + s.MINI_GRAPH_TOP - 1\n },\n tip: {\n w: rectGraph.width,\n h: graphHeight,\n l: 0,\n t: s.DATES_HEIGHT\n }\n };\n\n this.graph.onResize();\n this.axisY.onResize();\n this.fade.onResize();\n this.axisX.onResize();\n this.mini.onResize();\n this.handle.onResize();\n this.tip.onResize();\n this.composer.onResize();\n };\n\n createDOM(container: HTMLElement) {\n const settings = this.settings;\n\n this.$el = document.createElement('div');\n this.$el.className = 'tchart';\n\n if(!this.data.subchart.show) {\n this.$el.classList.add('tchart__no-subchart');\n }\n\n if(this.data.slave) {\n this.$el.classList.add('tchart__slave');\n }\n\n this.$h1 = document.createElement('h1');\n this.$h1.className = 'tchart--header';\n this.$h1.textContent = this.data.caption;\n this.$el.appendChild(this.$h1);\n\n this.$zoom = document.createElement('div');\n this.$zoom.className = 'tchart--zoom';\n this.$el.appendChild(this.$zoom);\n\n const $zoomIcon = document.createElement('div');\n $zoomIcon.className = 'tchart--zoom-icon';\n this.$zoom.appendChild($zoomIcon);\n const $zoomText = document.createElement('span');\n $zoomText.textContent = this.settings.ZOOM_TEXT;\n this.$zoom.appendChild($zoomText);\n\n this.$zoom.addEventListener('click', () => {\n this.toggleZoom(false);\n });\n\n this.$graph = document.createElement('div');\n this.$graph.className = 'tchart--graph';\n this.$el.appendChild(this.$graph);\n\n this.$switchers = document.createElement('div');\n this.$switchers.className = 'tchart--switchers';\n this.data.sideLegend && this.$switchers.classList.add('tchart--switchers__side-legend');\n this.$el.appendChild(this.$switchers);\n\n container.appendChild(this.$el);\n\n const rangeGraph = this.getYMinMax(this.state.x1, this.state.x2, false, true);\n const rangeMini = this.getYMinMax(this.state.xg1, this.state.xg2, true);\n\n if(this.pairY) {\n for(let i = 0; i < this.data.ys.length; i++) {\n this.state[`y1_${i}`] = (rangeGraph as TChartRangePaired).min[i];\n this.state[`y2_${i}`] = (rangeGraph as TChartRangePaired).max[i];\n this.state[`y1m_${i}`] = (rangeMini as TChartRangePaired).min[i];\n this.state[`y2m_${i}`] = (rangeMini as TChartRangePaired).max[i];\n }\n } else {\n this.state['y1'] = (rangeGraph as TChartRangeSingle).min;\n this.state['y2'] = (rangeGraph as TChartRangeSingle).max;\n this.state['y1m'] = (rangeMini as TChartRangeSingle).min;\n this.state['y2m'] = (rangeMini as TChartRangeSingle).max;\n }\n\n this.composer = new TComposer({\n $parent: this.$graph,\n settings: settings,\n chart: this,\n state: this.state,\n data: this.data,\n graphStyle: this.graphStyle\n });\n\n this.animator = new TAnimator({\n state: this.state,\n composer: this.composer\n });\n\n const graphStyle: {[type in TChartType]: any} = {\n line: TLines,\n step: TLines,\n bar: TBars,\n area: TAreas\n };\n\n const objs: [property: string, constructor: any, $parent: HTMLElement, additional?: any][] = [\n ['graph', graphStyle[this.graphStyle], this.$graph],\n ['axisX', TAxisX, this.$graph],\n ['fade', TFade, this.$graph],\n ['axisY', TAxisY, this.$graph],\n ['tip', TTip, this.$graph, {\n onClick: this.toggleZoom\n }],\n ['mini', graphStyle[this.graphStyle], this.$graph, {\n mini: true\n }],\n ['handle', THandle, this.$graph, {\n cb: this.onHandleMove\n }],\n ['switchers', TSwitchers, this.$switchers, {\n onClick: this.onSwitcherChange,\n onLongTap: this.onSwitcherChange,\n onEnter: this.onSwitcherEnter,\n onLeave: this.onSwitcherLeave\n }]\n ];\n\n objs.forEach((obj) => {\n const options: TChartUnitOptions = {\n animator: this.animator,\n $canvas: this.composer.$canvas,\n ctx: this.composer.ctx,\n graphStyle: this.graphStyle,\n chart: this,\n pairY: this.pairY,\n state: this.state,\n data: this.data,\n $parent: obj[2],\n settings: settings,\n additional: obj[3] || {}\n };\n // @ts-ignore\n this[obj[0]] = new obj[1](options);\n // @ts-ignore\n this[obj[0]].id = obj[0];\n });\n }\n\n onHandleMove = (x1: number, x2: number, tp: 'both', firstMove: boolean) => {\n // snap to days behaviour\n let isMagnet = this.state.zoomMode;\n\n this.updateSpeed();\n\n isMagnet = false; // due to range reducers on detail data gaps\n\n if(isMagnet) {\n const periodLen = this.data.mainPeriodLen;\n x1 = Math.round(x1 / periodLen) * periodLen;\n x2 = Math.round(x2 / periodLen) * periodLen;\n\n x1 = Math.min(Math.max(x1, this.state.xg1), this.state.xg2 - periodLen);\n x2 = Math.min(Math.max(x2, this.state.xg1 + periodLen), this.state.xg2);\n\n if(x2 <= x1) {\n x2 = x1 + periodLen;\n }\n\n const x1AnimItem = this.animator.get('x1');\n const x2AnimItem = this.animator.get('x2');\n const x1End = x1AnimItem ? x1AnimItem.end : this.state['x1'];\n const x2End = x2AnimItem ? x2AnimItem.end : this.state['x2'];\n\n if(x1 === x1End && x2 === x2End) {\n return;\n }\n }\n\n\n const props: TChartAnimationProperty[] = [];\n const range = this.getYMinMax(x1, x2, false, true);\n\n this.axisX.setAnimation(isMagnet || tp !== 'both');\n this.axisY.setAnimation(true);\n this.axisY.setForceUpdate(false);\n firstMove && triggerEvent('chart-hide-tips', {\n except: null\n });\n\n props.push({\n prop: 'x1',\n state: this.state,\n end: x1,\n fixed: true,\n duration: isMagnet ? 250 : 0,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'x2',\n state: this.state,\n end: x2,\n fixed: true,\n duration: isMagnet ? 250 : 0,\n group: {\n top: true,\n bottom: true\n }\n });\n\n for(let i = 0; i < this.data.ys.length; i++) {\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n props.push({\n prop: this.pairY ? `y1_${i}` : 'y1',\n state: this.state,\n end: this.pairY ? (range as TChartRangePaired).min[i] : (range as TChartRangeSingle).min,\n duration: 500,\n fixed: true,\n tween: 'exp',\n speed: 0.25,\n group: {\n top: true\n }\n });\n }\n\n if(this.graphStyle !== 'area') {\n props.push({\n prop: this.pairY ? `y2_${i}` : 'y2',\n state: this.state,\n end: this.pairY ? (range as TChartRangePaired).max[i] : (range as TChartRangeSingle).max,\n duration: 500,\n fixed: true,\n tween: 'exp',\n speed: 0.25,\n group: {\n top: true\n }\n });\n }\n }\n\n this.animator.add(props);\n };\n\n onSwitcherEnter = (ind: number) => {\n clearTimeout(this.switcherLeaveTimeout);\n\n const props: TChartAnimationProperty[] = [];\n\n for(let i = 0; i < this.data.ys.length; i++) {\n props.push({\n prop: `f_${i}`,\n state: this.state,\n end: ind === i ? 1 : 0,\n duration: 300,\n tween: 'exp',\n speed: 0.15,\n group: {top: true, bottom: true}\n });\n\n props.push({\n prop: `pieInd_${i}`,\n state: this.state,\n end: ind === i ? 1 : 0,\n duration: 300,\n tween: 'exp',\n speed: 0.15,\n group: {top: true, bottom: true}\n });\n }\n\n this.animator.add(props);\n };\n\n onSwitcherLeave = (propsind?: number) => {\n clearTimeout(this.switcherLeaveTimeout);\n\n this.switcherLeaveTimeout = window.setTimeout(() => {\n const props: TChartAnimationProperty[] = [];\n\n for(let i = 0; i < this.data.ys.length; i++) {\n props.push({\n prop: `f_${i}`,\n state: this.state,\n end: 1,\n duration: 300,\n tween: 'exp',\n speed: 0.15,\n group: {top: true, bottom: true}\n });\n\n props.push({\n prop: `pieInd_${i}`,\n state: this.state,\n end: 0,\n duration: 300,\n tween: 'exp',\n speed: 0.15,\n group: {top: true, bottom: true}\n });\n }\n\n this.animator.add(props);\n }, 300);\n };\n\n onSwitcherChange = (enabled: boolean, ind: number) => {\n var rangeGraph: TChartRange, rangeMini: TChartRange, i: number, props: TChartAnimationProperty[] = [],\n isCurrent: boolean, e: boolean[] = [],\n prevE: boolean[] = [];\n var longTap: boolean, isAllOffExceptCurrent: boolean;\n\n this.updateSpeed();\n\n if(typeof(enabled) !== 'boolean') {\n longTap = true;\n ind = enabled;\n\n isAllOffExceptCurrent = true;\n for(i = 0; i < this.data.ys.length; i++) {\n isAllOffExceptCurrent = isAllOffExceptCurrent && (i === ind ? this.state[`e_${i}`] : !this.state[`e_${i}`]);\n }\n }\n\n var maxYSize = 0;\n\n for(i = 0; i < this.data.ys.length; i++) {\n isCurrent = i === ind;\n\n prevE[i] = this.state[`e_${i}`];\n\n if(longTap) {\n this.state[`e_${i}`] = isCurrent;\n } else if(isCurrent) {\n this.state[`e_${i}`] = !!enabled;\n }\n\n if(isAllOffExceptCurrent && longTap) {\n this.state[`e_${i}`] = true;\n }\n\n e[i] = this.state[`e_${i}`];\n\n if(e[i]) {\n maxYSize = Math.max(maxYSize, this.data.ys[i].y.length);\n }\n }\n\n // reduce global range to exclude data gaps\n var reducedRange = this.reduceGlobalRange({});\n\n if(reducedRange.isReduced) {\n props.push({\n prop: 'x1',\n state: this.state,\n end: reducedRange.x1,\n duration: 333,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'x2',\n state: this.state,\n end: reducedRange.x2,\n duration: 333,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'xg1',\n state: this.state,\n end: reducedRange.xg1,\n duration: 333,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'xg2',\n state: this.state,\n end: reducedRange.xg2,\n duration: 333,\n group: {\n top: true,\n bottom: true\n }\n });\n this.state.xg1Ind = reducedRange.xg1Ind;\n this.state.xg2Ind = reducedRange.xg2Ind;\n\n rangeGraph = this.getYMinMax(reducedRange.x1, reducedRange.x2, false, true);\n rangeMini = this.getYMinMax(reducedRange.xg1, reducedRange.xg2, true);\n } else {\n rangeGraph = this.getYMinMax(this.state.x1, this.state.x2, false, true);\n rangeMini = this.getYMinMax(this.state.xg1, this.state.xg2, true);\n }\n\n\n triggerEvent('chart-hide-tips', {\n except: null\n });\n this.axisY.setForceUpdate(true);\n this.axisY.setAnimation(true);\n\n this.state.activeColumnsCount = 0;\n\n for(i = 0; i < e.length; i++) {\n e[i] && this.state.activeColumnsCount++;\n\n if(prevE[i] !== e[i]) {\n props.push({\n prop: `o_${i}`,\n state: this.state,\n end: e[i] ? 1 : 0,\n duration: 300,\n group: {\n top: true\n }\n });\n\n props.push({\n prop: `om_${i}`,\n state: this.state,\n end: e[i] ? 1 : 0,\n duration: this.graphStyle === 'line' || this.graphStyle === 'step' ? 166 : 300,\n delay: e[i] && this.graphStyle === 'line' || this.graphStyle === 'step' ? 200 : 0,\n tween: 'linear',\n group: {\n bottom: true\n }\n });\n }\n }\n\n for(i = 0; i < (this.pairY ? e.length : 1); i++) {\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n props.push({\n prop: this.pairY ? `y1_${i}` : 'y1',\n state: this.state,\n end: this.pairY ? (rangeGraph as TChartRangePaired).min[i] : (rangeGraph as TChartRangeSingle).min,\n duration: this.pairY ? 0 : 333,\n group: {\n top: true\n }\n });\n }\n\n if(this.graphStyle !== 'area') {\n props.push({\n prop: this.pairY ? `y2_${i}` : 'y2',\n state: this.state,\n end: this.pairY ? (rangeGraph as TChartRangePaired).max[i] : (rangeGraph as TChartRangeSingle).max,\n duration: this.pairY ? 0 : 333,\n group: {\n top: true\n }\n });\n }\n\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n props.push({\n prop: this.pairY ? `y1m_${i}` : 'y1m',\n state: this.state,\n end: this.pairY ? (rangeMini as TChartRangePaired).min[i] : (rangeMini as TChartRangeSingle).min,\n duration: this.pairY ? 0 : 316,\n group: {\n bottom: true\n }\n });\n }\n\n if(this.graphStyle !== 'area') {\n props.push({\n prop: this.pairY ? `y2m_${i}` : 'y2m',\n state: this.state,\n end: this.pairY ? (rangeMini as TChartRangePaired).max[i] : (rangeMini as TChartRangeSingle).max,\n duration: this.pairY ? 0 : 316,\n group: {\n bottom: true\n }\n });\n }\n }\n\n this.state['y1m_hidd'] = this.state.y1m;\n this.state['y2m_hidd'] = this.state.y2m;\n this.state['y1m_show'] = rangeMini.min as number;\n this.state['y2m_show'] = rangeMini.max as number;\n\n\n this.switchers.render(e);\n\n this.animator.add(props);\n };\n\n toggleSlave(enabled: boolean, zoomSpecialOrigin: number, details: TChartDataDetails, speed: number) {\n const props: TChartAnimationProperty[] = [];\n\n this.updateSpeed(speed);\n\n if(this.state.zoomModeSlave === enabled) return;\n\n this.state.zoomSpecialOrigin = zoomSpecialOrigin;\n\n if(enabled) {\n this.state.zoomModeSlave = true;\n\n this.switchers.switchers.forEach((div, ind) => {\n div.classList.add('tchart--switcher__visible');\n div.getElementsByTagName('span')[0].textContent = details.names[ind];\n });\n\n this.tip.labels.forEach((item, ind) => {\n item.$label.textContent = details.names[ind];\n });\n\n\n this.data.x = details.x;\n const e: boolean[] = [];\n for(let i = 0; i < details.y.length; i++) {\n this.data.ys[i].y = details.y[i];\n\n const isVisible = details.hidden.indexOf(this.data.ys[i].id) === -1;\n\n this.state[`e_${i}`] = isVisible;\n this.state[`o_${i}`] = isVisible ? 1 : 0;\n this.state[`om_${i}`] = isVisible ? 1 : 0;\n e[i] = isVisible;\n }\n\n this.switchers.render(e);\n\n const x1 = this.data.x[0];\n const x2 = this.data.x[this.data.x.length - 1];\n\n this.data.dates = [];\n this.data.datesShort = [];\n this.data.datesRange = [];\n\n const xTooltipFormatter = getFormatter('xTooltipFormatter', this.data, 1);\n const xTickFormatter = getFormatter('xTickFormatter', this.data, 1);\n const xRangeFormatter = getFormatter('xRangeFormatter', this.data, 1);\n let maxXTickLength = 0;\n\n for(let i = 0; i < this.data.x.length; i++) {\n this.data.dates[i] = xTooltipFormatter(this.data.x[i], true);\n this.data.datesShort[i] = xTickFormatter(this.data.x[i], true);\n this.data.datesRange[i] = xRangeFormatter(this.data.x[i], true);\n\n if(this.data.datesShort[i].length > maxXTickLength) {\n maxXTickLength = this.data.datesShort[i].length;\n }\n }\n\n this.data.maxXTickLength = maxXTickLength;\n\n this.data.subchart = details.subchart;\n this.data.hidden = details.hidden;\n\n const defaultZoom = this.getDefaultZoom({\n x1: x1,\n x2: x2,\n xg1: x1,\n xg2: x2,\n default: this.data.subchart.defaultZoom\n });\n\n this.state.x1 = defaultZoom.x1;\n this.state.x2 = defaultZoom.x2;\n\n this.state['xCount'] = this.data.x.length;\n this.state['xg1'] = x1;\n this.state['xg2'] = x2;\n this.state['xg1Ind'] = 0;\n this.state['xg2Ind'] = this.data.x.length - 1;\n this.state['xMainMin'] = x1;\n this.state['xMainMax'] = x2;\n this.state['xgMin'] = x1;\n this.state['xgMax'] = x2;\n\n\n // reduce global range to exclude data gaps\n const reducedRange = this.reduceGlobalRange({});\n\n if(reducedRange.isReduced) {\n this.state.x1 = reducedRange.x1;\n this.state.x2 = reducedRange.x2;\n this.state.xg1 = reducedRange.xg1;\n this.state.xg2 = reducedRange.xg2;\n this.state.xg1Ind = reducedRange.xg1Ind;\n this.state.xg2Ind = reducedRange.xg2Ind;\n }\n\n\n const rangeGraph = this.getYMinMax(this.state.x1, this.state.x2, false, true);\n const rangeMini = this.getYMinMax(x1, x2, true);\n\n this.state['y1'] = rangeGraph.min as number;\n this.state['y2'] = rangeGraph.max as number;\n this.state['y1m'] = rangeMini.min as number;\n this.state['y2m'] = rangeMini.max as number;\n } else {\n this.switchers.switchers.forEach((div) => {\n div.classList.remove('tchart--switcher__visible');\n });\n }\n const durationY = 450;\n\n setTimeout(() => {\n if(!enabled) {\n this.state.zoomModeSlave = false;\n }\n }, durationY + 20);\n\n this.state.slaveVisibility = enabled ? 0 : 1;\n\n props.push({\n prop: 'slaveVisibility',\n state: this.state,\n end: enabled ? 1 : 0,\n duration: durationY,\n group: {\n top: true,\n bottom: true\n }\n });\n\n this.animator.add(props);\n }\n\n toggleZoomSpecial(enabled: boolean, dt: number, details: TChartDataDetails) {\n var props: TChartAnimationProperty[] = [];\n\n if(this.state.zoomModeSpecial === enabled) return;\n\n var speed = this.updateSpeed();\n\n if(enabled) {\n var scale = (this.state.x2 - this.state.x1) / (this.state.dims.graph.w - this.settings.PADD[3] - this.settings.PADD[1]);\n var lPaddInDt = this.settings.PADD[3] * scale;\n var rPaddInDt = this.settings.PADD[1] * scale;\n this.state.zoomSpecialOrigin = (dt - this.state.x1 + lPaddInDt) / (this.state.x2 - this.state.x1 + lPaddInDt + rPaddInDt);\n\n this.state.zoomModeSpecial = true;\n this.$h1.classList.add('tchart--header__hidden');\n this.$zoom.classList.add('tchart--zoom__visible');\n\n this.switchers.switchers.forEach((div) => {\n div.classList.remove('tchart--switcher__visible');\n });\n\n this.slaveChart.toggleSlave(true, this.state.zoomSpecialOrigin, details, speed);\n } else {\n this.$h1.classList.remove('tchart--header__hidden');\n this.$zoom.classList.remove('tchart--zoom__visible');\n\n this.switchers.switchers.forEach((div) => {\n div.classList.add('tchart--switcher__visible');\n });\n\n this.slaveChart.toggleSlave(false, this.state.zoomSpecialOrigin, null, speed);\n }\n var durationY = 450;\n\n document.body.style.pointerEvents = 'none';\n setTimeout(() => {\n if(!enabled) {\n this.state.zoomModeSpecial = false;\n }\n document.body.style.pointerEvents = '';\n }, durationY + 20);\n\n this.state.masterVisibility = enabled ? 1 : 0;\n\n props.push({\n prop: 'masterVisibility',\n state: this.state,\n end: enabled ? 0 : 1,\n duration: durationY,\n group: {\n top: true,\n bottom: true\n }\n });\n\n this.animator.add(props);\n }\n\n toggleZoom = (enabled: boolean, dt?: number, data?: TChartData) => {\n // this.specialZoomTransition = true;\n if(enabled) {\n // this.specialZoomTransition = this.state.isSlowNow ? true : undefined;\n // this.specialZoomTransition = true;\n }\n\n if(data && this.specialZoomTransition === undefined) {\n if(data.columns.length !== this.data.ys.length + 1) this.specialZoomTransition = true;\n if(!this.specialZoomTransition) {\n data.columns.forEach((item) => {\n const id = item[0];\n const tp = data.types[id];\n const label = data.names[id];\n const ind = this.data.yIds[id];\n if(ind !== undefined) {\n const tpOrig = this.data.ys[ind].tp;\n const labelOrig = this.data.ys[ind].label;\n if(tpOrig !== tp || labelOrig !== label) {\n this.specialZoomTransition = true;\n }\n } else {\n if((id as any as string) !== 'x') {\n this.specialZoomTransition = true;\n }\n }\n });\n }\n if(this.specialZoomTransition === undefined) {\n this.specialZoomTransition = false;\n }\n }\n\n if(this.specialZoomTransition) {\n this.data.master = true;\n this.$el.classList.add('tchart__master');\n\n if(!this.slaveChart) {\n const clonedData: TChartConstructorOptions['data'] = JSON.parse(JSON.stringify(data));\n clonedData.yTickFormatter = data.yTickFormatter;\n clonedData.yTooltipFormatter = data.yTooltipFormatter;\n clonedData.xTickFormatter = data.xTickFormatter;\n clonedData.xTooltipFormatter = data.xTooltipFormatter;\n clonedData.xRangeFormatter = data.xRangeFormatter;\n clonedData.sideLegend = this.data.sideLegend;\n clonedData.getLabelDate = this.data.getLabelDate;\n clonedData.getLabelTime = this.data.getLabelTime;\n this.slaveChart = new TChart({\n container: this.opts.container,\n slave: true,\n data: clonedData\n });\n\n this.slaveChart.setDarkMode(this.darkMode);\n }\n }\n\n if(data && !data.details) {\n data.details = {\n y: [],\n names: []\n } as TChartDataDetails;\n\n data.columns.forEach((item) => {\n const id = item.shift();\n const tp = data.types[id];\n const label = data.names[id];\n\n if(tp === 'x') {\n data.details.x = item;\n } else {\n if(this.specialZoomTransition) {\n data.details.y.push(item);\n data.details.names.push(label);\n } else {\n data.details.y[this.data.yIds[id]] = item;\n }\n }\n });\n }\n\n if(data) {\n data.subchart = {\n show: data.subchart && data.subchart.show !== undefined ? data.subchart.show : true,\n defaultZoom: data.subchart && data.subchart.defaultZoom\n }\n data.details.subchart = data.subchart;\n data.details.hidden = data.hidden || [];\n }\n\n\n if(this.specialZoomTransition) {\n this.toggleZoomSpecial(enabled, dt, data && data.details);\n return;\n }\n\n\n const details = data && data.details;\n\n var rangeGraph: TChartRange,\n rangeMini: TChartRange,\n props: TChartAnimationProperty[] = [];\n\n if(this.state.zoomMode === enabled) return;\n\n if(enabled) {\n this.state.zoomMode = true;\n this.state.zoomDir = 1;\n this.$h1.classList.add('tchart--header__hidden');\n this.$zoom.classList.add('tchart--zoom__visible');\n\n this.zoomEnterSpeed = this.updateSpeed();\n\n // area has no data\n if(data) {\n this.data.details = {\n yTickFormatter: data.yTickFormatter,\n yTooltipFormatter: data.yTooltipFormatter,\n xTickFormatter: data.xTickFormatter,\n xTooltipFormatter: data.xTooltipFormatter,\n xRangeFormatter: data.xRangeFormatter,\n subchart: data.subchart,\n hidden: data.hidden || []\n };\n }\n\n // save\n if(!this.hasSavedData) {\n this.data.saved = {};\n this.data.saved.x = this.data.x.slice();\n this.data.saved.dates = this.data.dates.slice();\n this.data.saved.datesShort = this.data.datesShort.slice();\n this.data.saved.datesRange = this.data.datesRange.slice();\n this.data.saved.y = [];\n\n for(let j = 0; j < this.data.ys.length; j++) {\n this.data.saved.y[j] = this.data.ys[j].y.slice();\n }\n this.hasSavedData = true;\n }\n\n if(this.data.details && this.data.details.subchart) {\n if(!this.data.details.subchart.show) {\n this.$el.classList.add('tchart__no-subchart');\n } else {\n this.$el.classList.remove('tchart__no-subchart');\n }\n }\n\n\n this.state.zoomSaved = {\n x1: this.state.x1,\n x2: this.state.x2,\n xg1: this.state.xg1,\n xg2: this.state.xg2,\n xgMin: this.state.xgMin,\n xgMax: this.state.xgMax\n }\n\n var periodLen = this.data.mainPeriodLen;\n var x1 = dt;\n var x2 = dt + periodLen;\n\n if(this.data.details) {\n var defaultZoom = this.getDefaultZoom({\n x1: x1,\n x2: x2,\n xg1: details.x[0],\n xg2: details.x[details.x.length - 1],\n default: this.data.details.subchart.defaultZoom\n });\n\n var x1 = defaultZoom.x1;\n var x2 = defaultZoom.x2;\n }\n var xg1, xg2;\n\n\n if(this.graphStyle !== 'area') {\n this.data.detailPeriodLen = details.x[1] - details.x[0];\n\n xg1 = details.x[0];\n xg2 = details.x[details.x.length - 1];\n } else {\n this.data.detailPeriodLen = periodLen;\n var totalRange = this.data.pieZoomRange;\n xg1 = x1 - (totalRange - periodLen) / 2;\n xg2 = xg1 + totalRange;\n\n x2 = x1 + Math.round((totalRange / 7) / periodLen) * periodLen;\n\n if(xg1 < this.data.x[0]) {\n xg1 = this.data.x[0];\n xg2 = xg1 + totalRange;\n\n if(xg2 > this.data.x[this.data.x.length - 1]) {\n xg2 = this.data.x[this.data.x.length - 1] + periodLen;\n }\n } else if(xg2 > this.data.x[this.data.x.length - 1]) {\n xg2 = this.data.x[this.data.x.length - 1] + periodLen;\n xg1 = xg2 - totalRange;\n\n if(xg1 < this.data.x[0]) {\n xg1 = this.data.x[0];\n }\n }\n }\n\n xg1 = Math.round(xg1 / periodLen) * periodLen;\n xg2 = Math.round(xg2 / periodLen) * periodLen;\n\n\n if(this.graphStyle !== 'area') {\n this.insertDetails(xg1, xg2, details);\n }\n\n this.state.xgMin = xg1;\n this.state.xgMax = xg2;\n } else {\n this.updateSpeed(this.zoomEnterSpeed / (this.graphStyle === 'area' ? 2 : 1));\n\n this.$h1.classList.remove('tchart--header__hidden');\n this.$zoom.classList.remove('tchart--zoom__visible');\n\n if(this.data.details) {\n if(!this.data.subchart.show) {\n this.$el.classList.add('tchart__no-subchart');\n } else {\n this.$el.classList.remove('tchart__no-subchart');\n }\n }\n\n this.state.zoomDir = -1;\n\n x1 = this.state.zoomSaved.x1;\n x2 = this.state.zoomSaved.x2;\n xg1 = this.state.zoomSaved.xg1;\n xg2 = this.state.zoomSaved.xg2;\n this.state.xgMin = this.state.zoomSaved.xgMin;\n this.state.xgMax = this.state.zoomSaved.xgMax;\n }\n\n this.axisY.setForceUpdate(true);\n this.axisY.setAnimation(true);\n this.axisX.setAnimation(true);\n\n let duration = 450;\n let delayMain = 0;\n let delayZoom = 0;\n\n if(this.graphStyle === 'area') {\n duration = 350;\n if(enabled) {\n delayZoom = duration * 0.95;\n } else {\n delayMain = duration * 0.95;\n }\n }\n\n\n // reduce global range to exclude data gaps\n const reducedRange = this.reduceGlobalRange({\n x1: x1,\n x2: x2,\n xg1: xg1,\n xg2: xg2,\n useSaved: !enabled\n });\n\n if(reducedRange.isReduced) {\n x1 = reducedRange.x1;\n x2 = reducedRange.x2;\n xg1 = reducedRange.xg1;\n xg2 = reducedRange.xg2;\n }\n\n this.state.xg1Ind = Math.floor(getXIndex(enabled ? this.data.x : this.data.saved.x, xg1));\n this.state.xg2Ind = Math.ceil(getXIndex(enabled ? this.data.x : this.data.saved.x, xg2));\n\n rangeGraph = this.getYMinMax(x1, x2, false, true, !enabled);\n rangeMini = this.getYMinMax(xg1, xg2, true, false, !enabled);\n\n\n document.body.style.pointerEvents = 'none';\n setTimeout(() => {\n if(!enabled) {\n this.state.zoomMode = false;\n\n if(this.graphStyle !== 'area') {\n this.revertDetails();\n }\n }\n document.body.style.pointerEvents = '';\n\n this.composer.render({\n top: true,\n bottom: true\n });\n }, duration + 20 + (this.graphStyle === 'area' ? duration * 0.9 : 0));\n\n this.state.zoomMorph = enabled ? 0 : 1;\n\n\n props.push({\n prop: 'zoomMorph',\n state: this.state,\n end: enabled ? 1 : 0,\n duration: duration,\n delay: delayZoom,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'x1',\n state: this.state,\n end: x1,\n delay: delayMain,\n duration: duration,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'x2',\n state: this.state,\n end: x2,\n delay: delayMain,\n duration: duration,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'xg1',\n state: this.state,\n end: xg1,\n delay: delayMain,\n duration: duration,\n group: {\n top: true,\n bottom: true\n }\n });\n\n props.push({\n prop: 'xg2',\n state: this.state,\n end: xg2,\n delay: delayMain,\n duration: duration,\n group: {\n top: true,\n bottom: true\n }\n });\n\n for(let i = 0; i < (this.pairY ? this.data.ys.length : 1); i++) {\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n props.push({\n prop: this.pairY ? `y1_${i}` : 'y1',\n state: this.state,\n end: this.pairY ? (rangeGraph as TChartRangePaired).min[i] : (rangeGraph as TChartRangeSingle).min,\n delay: delayMain,\n duration: duration,\n group: {\n top: true\n }\n });\n }\n\n if(this.graphStyle !== 'area') {\n props.push({\n prop: this.pairY ? `y2_${i}` : 'y2',\n state: this.state,\n end: this.pairY ? (rangeGraph as TChartRangePaired).max[i] : (rangeGraph as TChartRangeSingle).max,\n delay: delayMain,\n duration: duration,\n group: {\n top: true\n }\n });\n }\n\n if(this.graphStyle === 'line' || this.graphStyle === 'step') {\n props.push({\n prop: this.pairY ? `y1m_${i}` : 'y1m',\n state: this.state,\n end: this.pairY ? (rangeMini as TChartRangePaired).min[i] : (rangeMini as TChartRangeSingle).min,\n delay: delayMain,\n duration: duration,\n group: {\n bottom: true\n }\n });\n }\n\n if(this.graphStyle !== 'area') {\n props.push({\n prop: this.pairY ? `y2m_${i}` : 'y2m',\n state: this.state,\n end: this.pairY ? (rangeMini as TChartRangePaired).max[i] : (rangeMini as TChartRangeSingle).max,\n delay: delayMain,\n duration: duration,\n group: {\n bottom: true\n }\n });\n }\n }\n\n this.animator.add(props);\n };\n\n insertDetails(xg1: number, xg2: number, details: TChartDataDetails) {\n const startMain = Math.ceil(getXIndex(this.data.x, xg1));\n let endMain = Math.ceil(getXIndex(this.data.x, xg2));\n const startDetail = 0;\n const endDetail = details.x.length - 1;\n\n if(xg2 > this.data.x[endMain]) {\n endMain++;\n }\n\n\n const xl1 = 0;\n const xl2 = startMain; // not including it\n\n const xr1 = endMain - (this.graphStyle === 'bar' || this.graphStyle === 'step' ? 1 : 0); // not including it (for bars shoudl include)\n const xr2 = this.data.x.length - 1;\n\n\n const newX: number[] = [];\n const newDates: string[] = [];\n const newDatesShort: string[] = [];\n const newDatesRange: string[] = [];\n let newInd: number, y: number[], yFrom: number[], origY: number[], origYDet: number[];\n const newY: number[][] = [];\n const newYFrom: number[][] = [];\n\n for(let i = xl1; i < xl2; i++) {\n newInd = i - xl1;\n newX[newInd] = this.data.x[i];\n newDates[newInd] = this.data.dates[i];\n newDatesShort[newInd] = this.data.datesShort[i];\n newDatesRange[newInd] = this.data.datesRange[i];\n }\n for(let j = 0; j < this.data.ys.length; j++) {\n newY[j] = newY[j] || [];\n y = newY[j];\n origY = this.data.ys[j].y;\n for(let i = xl1; i < xl2; i++) {\n y[i - xl1] = origY[i];\n }\n }\n\n\n // insert details\n const ndx: number[] = [];\n const fdx: number[] = [];\n const cdx: number[] = [];\n\n const xTooltipFormatter = getFormatter('xTooltipFormatter', this.data, 1);\n const xTickFormatter = getFormatter('xTickFormatter', this.data, 1);\n const xRangeFormatter = getFormatter('xRangeFormatter', this.data, 1);\n let maxXTickLength = 0;\n\n for(let i = startDetail; i <= endDetail; i++) {\n newInd = i - startDetail + xl2;\n newX[newInd] = details.x[i];\n\n newDates[newInd] = xTooltipFormatter(newX[newInd], true);\n newDatesShort[newInd] = xTickFormatter(newX[newInd], true);\n newDatesRange[newInd] = xRangeFormatter(newX[newInd], true);\n\n if(newDatesShort[newInd].length > maxXTickLength) {\n maxXTickLength = newDatesShort[newInd].length;\n }\n\n const dx = getXIndex(this.data.x, newX[newInd]);\n ndx[i] = dx;\n fdx[i] = Math.floor(dx);\n cdx[i] = Math.ceil(dx);\n }\n\n this.data.details.maxXTickLength = maxXTickLength;\n\n for(let j = 0; j < this.data.ys.length; j++) {\n newY[j] = newY[j] || [];\n y = newY[j];\n origY = this.data.ys[j].y;\n origYDet = details.y[j];\n newYFrom[j] = newYFrom[j] || [];\n yFrom = newYFrom[j];\n for(let i = startDetail; i <= endDetail; i++) {\n let yInter: number;\n if(this.graphStyle === 'bar') {\n yInter = origY[fdx[i]] || 0;\n } else if(this.graphStyle === 'step') {\n yInter = origY[fdx[i]];\n } else {\n yInter = origY[fdx[i]] + (ndx[i] - fdx[i]) * (origY[cdx[i]] - origY[fdx[i]]);\n }\n const yDet = origYDet[i];\n // for bars it is simple, we may use 0 as value, cause they are cumulative and always starts from 0\n if(this.graphStyle !== 'bar') {\n // has no initial value, but has detail value\n if(isNaN(yInter) && !isNaN(yDet)) {\n yInter = 0; // ugly, but seem like this situation is impossible in real cases\n }\n }\n\n y[i - startDetail + xl2] = yDet;\n yFrom[i - startDetail + xl2] = yInter;\n }\n }\n\n\n for(let i = xr1 + 1; i <= xr2; i++) {\n newInd = i - xr1 + endDetail + xl2;\n newX[newInd] = this.data.x[i];\n newDates[newInd] = this.data.dates[i];\n newDatesShort[newInd] = this.data.datesShort[i];\n newDatesRange[newInd] = this.data.datesRange[i];\n }\n for(let j = 0; j < this.data.ys.length; j++) {\n newY[j] = newY[j] || [];\n y = newY[j];\n origY = this.data.ys[j].y;\n for(let i = xr1 + 1; i <= xr2; i++) {\n y[i - xr1 + endDetail + xl2] = origY[i];\n }\n }\n\n this.state.detailInd1 = xl2;\n this.state.detailInd2 = xl2 + endDetail - startDetail;\n\n\n this.data.x = newX;\n this.data.dates = newDates;\n this.data.datesShort = newDatesShort;\n this.data.datesRange = newDatesRange;\n\n for(let j = 0; j < this.data.ys.length; j++) {\n this.data.ys[j].y = newY[j];\n this.data.ys[j].yFrom = newYFrom[j];\n }\n }\n\n revertDetails() {\n this.data.x = this.data.saved.x;\n this.data.dates = this.data.saved.dates;\n this.data.datesShort = this.data.saved.datesShort;\n this.data.datesRange = this.data.saved.datesRange;\n\n for(let i = 0; i < this.data.ys.length; ++i) {\n this.data.ys[i].y = this.data.saved.y[i];\n }\n }\n}\n"],"names":["easing","st","ed","per","tween","t","b","c","d","TAnimator","opts","done","cur","item","time","duration","curVal","group","itemKey","delayed","newVal","j","params","i","param","delta","queue","prop","MONTHS","MONTHS_SHORT","month","WEEK_DAYS","WEEK_DAYS_SHORT","statsFormatDayHour","value","data","statsFormatDayHourFull","utcDiff","statsFormatDay","statsFormatMin","getLabelDate","isShort","isMonthShort","displayWeekDay","displayYear","displayHours","date","weekDaysArray","string","getLabelTime","x","simplifyData","tp","ys","xScale","xShift","visibleCols","xInd1","xInd2","dw","pointsPerPixel","optX","optYs","xInd","xPrev","colsLen","cnt","tmpX","notTheSame","visColInd","prevOptY","curY","getElemPagePos","$el","rect","getXIndex","xc","doNotClip","i1","i2","triggerEvent","eventName","details","isTouchDevice","prefixes","mq","query","drawRoundedRect","ctx","dpi","w","h","y","r","drawRoundedRect2","getFormatter","formatterName","zoomMorph","f","map","yTooltipFormatter","formatter","yTickFormatter","val","step","isFractional","statsFormatKMBT","kmbt","precision","statsChooseNumKMBT","sval","statsFormatFixedKMBT","statsChoosePrecision","absVal","roundRange","y1","y2","refRange","calc","power","curPower","min","max","scale","maxLevel","minLevel","range","TAreas","dims","enabled","o","state","mini","x1","x2","settings","pTop","pRight","pBottom","pLeft","prevY","totalPerX","overlap","morph","ysLen","hash","joinedHash","hBottom","opacityCols","textToCenter","fullyVisibleCount","fullyVisibleInd","hasUnfocusedColumns","optData","hasGapsInData","angles","radius","cx","cy","xInd1Real","xInd2Real","x1AnimItem","x2AnimItem","x1End","x2End","xInd1RealFloor","xInd1RealCeil","xInd2RealFloor","xInd2RealCeil","totalForAll","totalPerItem","tmpY","tmp","elastic","prevAngle","initAngle","rLen","pointsPerArcLen","percentage","len","newAngle","additionalPoints","overlapAng","yItem","yScale","yShift","colInd","k","curH","sy","calcTrans","fromX","fromY","toAngle","toR","sx","selectionOffset","fromAngle","fromR","ang","res","additionalSteps","dist","cBot","cTop","xj","sc","sy1","sy2","xjprev","syprev","xw","curHNext","yTo","yFrom","opacity","fontSize","rad","offset","cosVal","sinVal","isOutboard","lx1","ly1","lx2","ly2","dx","tx","ty","TAxisX","ind","animator","dimsDates","zoomMode","isPointHasWidth","space","offsetForBarGraphMain","offsetForBarGraphDetail","offsetForBarGraph","offsetForBarGraphScale","xStepMain","xStepDetail","xStep","skipEachMain","skipEachDetail","lxScale","changeSpeed","x1Start","x2Start","dtOffset","tmp1","tmp2","shown","prefix","id","xAligned","datesStr","TAxisY","calcDataLeft","calcDataRight","y1Name","y2Name","withAnimation","y1AnimItem","y2AnimItem","yRealStep","yRealStart","yCurRange","changeSpeedFirst","changeSpeedLast","yEndRange","yScaleCur","yScaleEnd","numName","baseData","leftData","rightData","linesCount","startedAtLeastOne","numReal","numRealLeft","numRealRight","numDisplayLeftStr","numDisplayRightStr","oldFrom","oldTo","newFrom","newTo","props","dimsLeft","dimsRight","dimsLines","TBars","zoom","d1","d2","filteredX1","filteredX2","filteredJ","ysLength","xwMain","xwDetail","filteredInd","tmpX1","tmpX2","yVal","jInd","yStart","yEnd","TComposer","groups","t1","prevX","t2","padd","pieChartAnimating","pieChartAnimated","cw","ch","subchartShown","isNotSpecialAndChangedSubchart","TFade","dimsTop","dimsBottom","backgroundRgbJoined","gradientTop","gradientBottom","TDrag","e","$global","THandle","dy","cursors","isTouch","xl1","xl2","xr2","xr1","updateHandle","minRange","xg2","_x1","_x2","TLines","toCache","isStepMode","lineWidth","lineWidthShift","minY","maxY","prevXc","prevYc","hasPrev","needMove","yc","TSwitchers","arr","$div","$span","isActive","longTapTimer","TTip","dataPromise","successDetailCallback","errorDetailCallback","dh","$row","$label","$labelText","$perText","$per","$value","$valueText","noPropagation","shiftHide","animProps","pieItem","dimsTip","curPieItem","tipMarginFromPointer","left","top","itemsVisible","constrainedDx","xPos","display","sumAll","compStyles","labelWidth","valueWidth","minWidth","dateWidth","pos","perInt","maxLen","percentageWidth","TChart","graphWidthData","rectGraph","s","graphHeight","firstMove","isMagnet","periodLen","propsind","rangeGraph","rangeMini","isCurrent","prevE","longTap","isAllOffExceptCurrent","maxYSize","reducedRange","dt","label","tpOrig","labelOrig","clonedData","defaultZoom","xg1","totalRange","delayMain","delayZoom","isIEOld","isIE11","DAY_COLORS","NIGHT_COLORS","darkMode","xTooltipFormatter","xTickFormatter","xRangeFormatter","maxXTickLength","color","yind","isVisible","wrapper","tChart","xg1Orig","xg2Orig","xg1Ind","xg2Ind","minXInd","maxXInd","shift","speed","points","periods","isMini","fitTo","useSaved","graphAreaWidth","yMin","yMax","datePerPixel","start","end","yMinStep","resMin","resMax","yFirst","yLast","floorStart","ceilStart","floorEnd","ceilEnd","proceedMinMax","startIndex","endIndex","v","tunedY","yCur","colors","hasLegend","rectEl","rectLegend","container","$zoomIcon","$zoomText","graphStyle","obj","options","zoomSpecialOrigin","div","durationY","lPaddInDt","rPaddInDt","startMain","endMain","startDetail","endDetail","newX","newDates","newDatesShort","newDatesRange","newInd","origY","origYDet","newY","newYFrom","ndx","fdx","cdx","yInter","yDet"],"mappings":"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"} |