{"version":3,"file":"static/chunks/3284-19c131fc679a96f6.js","mappings":"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","sources":["webpack://_N_E/./lib/hooks/useClientRect.tsx","webpack://_N_E/./ui/shared/chart/ChartArea.tsx","webpack://_N_E/./ui/shared/chart/utils/animations.ts","webpack://_N_E/./ui/shared/chart/utils/formatters.ts","webpack://_N_E/./ui/shared/chart/ChartLine.tsx","webpack://_N_E/./ui/shared/chart/ChartOverlay.tsx","webpack://_N_E/./ui/shared/chart/tooltip/utils.ts","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipBackdrop.tsx","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipContent.tsx","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipLine.tsx","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipPoint.tsx","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipRow.tsx","webpack://_N_E/./ui/shared/chart/tooltip/ChartTooltipTitle.tsx","webpack://_N_E/./ui/shared/chart/tooltip/pointerTracker.ts","webpack://_N_E/./ui/shared/chart/ChartTooltip.tsx","webpack://_N_E/./ui/shared/chart/utils/calculateInnerSize.ts","webpack://_N_E/./ui/shared/chart/utils/timeChartAxis.ts","webpack://_N_E/./ui/shared/chart/useTimeChartController.tsx"],"sourcesContent":["import _debounce from 'lodash/debounce';\nimport type { LegacyRef } from 'react';\nimport React from 'react';\n\nexport default function useClientRect(): [ DOMRect | null, LegacyRef | undefined ] {\n const [ rect, setRect ] = React.useState(null);\n const nodeRef = React.useRef();\n\n const ref = React.useCallback((node: E) => {\n if (node !== null) {\n setRect(node.getBoundingClientRect());\n }\n nodeRef.current = node;\n }, []);\n\n React.useEffect(() => {\n const content = window.document.querySelector('main');\n if (!content) {\n return;\n }\n\n const resizeHandler = _debounce(() => {\n setRect(nodeRef.current?.getBoundingClientRect() ?? null);\n }, 100);\n\n const resizeObserver = new ResizeObserver(resizeHandler);\n resizeObserver.observe(content);\n resizeObserver.observe(window.document.body);\n\n return function cleanup() {\n resizeObserver.unobserve(content);\n resizeObserver.unobserve(window.document.body);\n };\n }, [ ]);\n\n return [ rect, ref ];\n}\n","import { useColorModeValue, useToken, useTheme } from '@chakra-ui/react';\nimport { transparentize } from '@chakra-ui/theme-tools';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartItem } from 'ui/shared/chart/types';\n\ninterface Props extends React.SVGProps {\n id?: string;\n xScale: d3.ScaleTime | d3.ScaleLinear;\n yScale: d3.ScaleTime | d3.ScaleLinear;\n color?: string;\n data: Array;\n noAnimation?: boolean;\n}\n\nconst ChartArea = ({ id, xScale, yScale, color, data, noAnimation, ...props }: Props) => {\n const ref = React.useRef(null);\n const theme = useTheme();\n\n const gradientColorId = `${ id || 'gradient' }-${ color }-color`;\n const gradientStopColor = useToken('colors', useColorModeValue('whiteAlpha.200', 'blackAlpha.100'));\n const defaultGradient = {\n startColor: useToken('colors', useColorModeValue('blue.100', 'blue.400')),\n stopColor: useToken('colors', transparentize(useColorModeValue('blue.100', 'blue.400'), 0)(theme)),\n };\n\n React.useEffect(() => {\n if (noAnimation) {\n d3.select(ref.current).attr('opacity', 1);\n return;\n }\n d3.select(ref.current).transition()\n .duration(750)\n .ease(d3.easeBackIn)\n .attr('opacity', 1);\n }, [ noAnimation ]);\n\n const d = React.useMemo(() => {\n const area = d3.area()\n .defined(({ isApproximate }) => !isApproximate)\n .x(({ date }) => xScale(date))\n .y1(({ value }) => yScale(value))\n .y0(() => yScale(yScale.domain()[0]))\n .curve(d3.curveMonotoneX);\n return area(data) || undefined;\n }, [ xScale, yScale, data ]);\n\n return (\n <>\n \n { color ? (\n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n ) }\n \n );\n};\n\nexport default React.memo(ChartArea);\n","import * as d3 from 'd3';\n\nexport type AnimationType = 'left' | 'fadeIn' | 'none';\n\nexport const animateLeft = (path: SVGPathElement) => {\n const totalLength = path.getTotalLength() || 0;\n d3.select(path)\n .attr('opacity', 1)\n .attr('stroke-dasharray', `${ totalLength },${ totalLength }`)\n .attr('stroke-dashoffset', totalLength)\n .transition()\n .duration(750)\n .ease(d3.easeLinear)\n .attr('stroke-dashoffset', 0);\n};\n\nexport const animateFadeIn = (path: SVGPathElement) => {\n d3.select(path)\n .transition()\n .duration(750)\n .ease(d3.easeLinear)\n .attr('opacity', 1);\n};\n\nexport const noneAnimation = (path: SVGPathElement) => {\n d3.select(path).attr('opacity', 1);\n};\n\nexport const ANIMATIONS: Record void> = {\n left: animateLeft,\n fadeIn: animateFadeIn,\n none: noneAnimation,\n};\n","import type { TimeChartItem } from '../types';\n\nexport const getIncompleteDataLineSource = (data: Array): Array => {\n const result: Array = [];\n\n for (let index = 0; index < data.length; index++) {\n const current = data[index];\n if (current.isApproximate) {\n const prev = data[index - 1];\n const next = data[index + 1];\n\n prev && !prev.isApproximate && result.push(prev);\n result.push(current);\n next && !next.isApproximate && result.push(next);\n }\n }\n\n return result;\n};\n","import * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartItem } from 'ui/shared/chart/types';\n\nimport type { AnimationType } from './utils/animations';\nimport { ANIMATIONS } from './utils/animations';\nimport { getIncompleteDataLineSource } from './utils/formatters';\n\ninterface Props extends React.SVGProps {\n xScale: d3.ScaleTime | d3.ScaleLinear;\n yScale: d3.ScaleTime | d3.ScaleLinear;\n data: Array;\n animation: AnimationType;\n}\n\nconst ChartLine = ({ xScale, yScale, data, animation, ...props }: Props) => {\n const dataPathRef = React.useRef(null);\n const incompleteDataPathRef = React.useRef(null);\n\n React.useEffect(() => {\n const animationFn = ANIMATIONS[animation];\n const timeoutId = window.setTimeout(() => {\n dataPathRef.current && animationFn(dataPathRef.current);\n incompleteDataPathRef.current && animationFn(incompleteDataPathRef.current);\n }, 100);\n\n return () => {\n window.clearTimeout(timeoutId);\n };\n }, [ animation ]);\n\n // Recalculate line length if scale has changed\n React.useEffect(() => {\n if (animation === 'left') {\n const totalLength = dataPathRef.current?.getTotalLength();\n d3.select(dataPathRef.current).attr(\n 'stroke-dasharray',\n `${ totalLength },${ totalLength }`,\n );\n }\n }, [ xScale, yScale, animation ]);\n\n const line = d3.line()\n .x((d) => xScale(d.date))\n .y((d) => yScale(d.value))\n .curve(d3.curveMonotoneX);\n\n return (\n <>\n \n !isApproximate)) || undefined }\n strokeWidth={ 1 }\n strokeLinecap=\"round\"\n fill=\"none\"\n opacity={ 0 }\n { ...props }\n />\n \n );\n};\n\nexport default React.memo(ChartLine);\n","import React from 'react';\n\ninterface Props {\n width: number;\n height: number;\n children: React.ReactNode;\n}\n\nconst ChartOverlay = ({ width, height, children }: Props, ref: React.ForwardedRef) => {\n return (\n \n { children }\n \n \n );\n};\n\nexport default React.forwardRef(ChartOverlay);\n","export const TEXT_LINE_HEIGHT = 12;\nexport const PADDING = 16;\nexport const LINE_SPACE = 10;\nexport const POINT_SIZE = 16;\nexport const LABEL_WIDTH = 80;\n\nexport const calculateContainerHeight = (seriesNum: number, isIncomplete?: boolean) => {\n const linesNum = isIncomplete ? seriesNum + 2 : seriesNum + 1;\n\n return 2 * PADDING + linesNum * TEXT_LINE_HEIGHT + (linesNum - 1) * LINE_SPACE;\n};\n\nexport const calculateRowTransformValue = (rowNum: number) => {\n const top = Math.max(0, PADDING + rowNum * (LINE_SPACE + TEXT_LINE_HEIGHT));\n return `translate(${ PADDING },${ top })`;\n};\n","import { useToken } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport { calculateContainerHeight } from './utils';\n\nconst ChartTooltipBackdrop = () => {\n const bgColor = useToken('colors', 'blackAlpha.900');\n\n return (\n \n );\n};\n\nexport default React.memo(ChartTooltipBackdrop);\n\ninterface UseRenderBackdropParams {\n seriesNum: number;\n transitionDuration: number | null;\n}\n\nexport function useRenderBackdrop(ref: React.RefObject, { seriesNum, transitionDuration }: UseRenderBackdropParams) {\n return React.useCallback((width: number, isIncompleteData: boolean) => {\n const height = calculateContainerHeight(seriesNum, isIncompleteData);\n\n if (transitionDuration) {\n d3.select(ref.current)\n .select('.ChartTooltip__backdrop')\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeLinear)\n .attr('width', width)\n .attr('height', height);\n } else {\n d3.select(ref.current)\n .select('.ChartTooltip__backdrop')\n .attr('width', width)\n .attr('height', height);\n }\n }, [ ref, seriesNum, transitionDuration ]);\n}\n","import * as d3 from 'd3';\nimport _clamp from 'lodash/clamp';\nimport React from 'react';\n\nimport { POINT_SIZE } from './utils';\n\ninterface Props {\n children: React.ReactNode;\n}\n\nconst ChartTooltipContent = ({ children }: Props) => {\n return { children };\n};\n\nexport default React.memo(ChartTooltipContent);\n\ninterface UseRenderContentParams {\n chart: {\n width?: number;\n height?: number;\n };\n transitionDuration: number | null;\n}\n\nexport function useRenderContent(ref: React.RefObject, { chart, transitionDuration }: UseRenderContentParams) {\n return React.useCallback((x: number, y: number) => {\n const tooltipContent = d3.select(ref.current).select('.ChartTooltip__content');\n\n const transformAttributeFn: d3.ValueFn = (cur, i, nodes) => {\n const node = nodes[i] as SVGGElement | null;\n const { width: nodeWidth, height: nodeHeight } = node?.getBoundingClientRect() || { width: 0, height: 0 };\n const [ translateX, translateY ] = calculatePosition({\n canvasWidth: chart.width || 0,\n canvasHeight: chart.height || 0,\n nodeWidth,\n nodeHeight,\n pointX: x,\n pointY: y,\n offset: POINT_SIZE,\n });\n return `translate(${ translateX }, ${ translateY })`;\n };\n\n if (transitionDuration) {\n tooltipContent\n .transition()\n .duration(transitionDuration)\n .ease(d3.easeLinear)\n .attr('transform', transformAttributeFn);\n } else {\n tooltipContent\n .attr('transform', transformAttributeFn);\n }\n\n }, [ chart.height, chart.width, ref, transitionDuration ]);\n}\n\ninterface CalculatePositionParams {\n pointX: number;\n pointY: number;\n offset: number;\n nodeWidth: number;\n nodeHeight: number;\n canvasWidth: number;\n canvasHeight: number;\n}\n\nfunction calculatePosition({ pointX, pointY, canvasWidth, canvasHeight, nodeWidth, nodeHeight, offset }: CalculatePositionParams): [ number, number ] {\n // right\n if (pointX + offset + nodeWidth <= canvasWidth) {\n const x = pointX + offset;\n const y = _clamp(pointY - nodeHeight / 2, 0, canvasHeight - nodeHeight);\n return [ x, y ];\n }\n\n // left\n if (nodeWidth + offset <= pointX) {\n const x = pointX - offset - nodeWidth;\n const y = _clamp(pointY - nodeHeight / 2, 0, canvasHeight - nodeHeight);\n return [ x, y ];\n }\n\n // top\n if (nodeHeight + offset <= pointY) {\n const x = _clamp(pointX - nodeWidth / 2, 0, canvasWidth - nodeWidth);\n const y = pointY - offset - nodeHeight;\n return [ x, y ];\n }\n\n // bottom\n if (pointY + offset + nodeHeight <= canvasHeight) {\n const x = _clamp(pointX - nodeWidth / 2, 0, canvasWidth - nodeWidth);\n const y = pointY + offset;\n return [ x, y ];\n }\n\n const x = _clamp(pointX / 2, 0, canvasWidth - nodeWidth);\n const y = _clamp(pointY / 2, 0, canvasHeight - nodeHeight);\n\n return [ x, y ];\n}\n","import { useToken } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nconst ChartTooltipLine = () => {\n const lineColor = useToken('colors', 'gray.400');\n return ;\n};\n\nexport default React.memo(ChartTooltipLine);\n\nexport function useRenderLine(ref: React.RefObject, chartHeight: number | undefined) {\n return React.useCallback((x: number) => {\n d3.select(ref.current)\n .select('.ChartTooltip__line')\n .attr('x1', x)\n .attr('x2', x)\n .attr('y1', 0)\n .attr('y2', chartHeight || 0);\n }, [ ref, chartHeight ]);\n}\n","import { useColorModeValue, useToken } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartData, TimeChartItem } from 'ui/shared/chart/types';\n\nimport { POINT_SIZE } from './utils';\n\nconst ChartTooltipPoint = () => {\n const bgColor = useToken('colors', useColorModeValue('black', 'white'));\n const borderColor = useToken('colors', useColorModeValue('white', 'black'));\n\n return (\n \n );\n};\n\nexport default React.memo(ChartTooltipPoint);\n\ninterface UseRenderPointsParams {\n data: TimeChartData;\n xScale: d3.ScaleTime;\n yScale: d3.ScaleLinear;\n}\n\nexport interface CurrentPoint {\n datumIndex: number;\n item: TimeChartItem;\n}\n\ninterface RenderPointsReturnType{\n x: number;\n y: number;\n currentPoints: Array;\n}\n\nexport function useRenderPoints(ref: React.RefObject, params: UseRenderPointsParams) {\n return React.useCallback((x: number): RenderPointsReturnType => {\n const xDate = params.xScale.invert(x);\n const bisectDate = d3.bisector((d) => d.date).left;\n let baseXPos = 0;\n let baseYPos = 0;\n const currentPoints: Array = [];\n\n d3.select(ref.current)\n .selectAll('.ChartTooltip__point')\n .attr('transform', (cur, elementIndex) => {\n const datum = params.data[elementIndex];\n const index = bisectDate(datum.items, xDate, 1);\n const d0 = datum.items[index - 1] as TimeChartItem | undefined;\n const d1 = datum.items[index] as TimeChartItem | undefined;\n const d = (() => {\n if (!d0) {\n return d1;\n }\n if (!d1) {\n return d0;\n }\n return xDate.getTime() - d0.date.getTime() > d1.date.getTime() - xDate.getTime() ? d1 : d0;\n })();\n\n if (d?.date === undefined && d?.value === undefined) {\n // move point out of container\n return 'translate(-100,-100)';\n }\n\n const xPos = params.xScale(d.date);\n const yPos = params.yScale(d.value);\n\n if (elementIndex === 0) {\n baseXPos = xPos;\n baseYPos = yPos;\n }\n\n currentPoints.push({ item: d, datumIndex: elementIndex });\n\n return `translate(${ xPos }, ${ yPos })`;\n });\n\n return {\n x: baseXPos,\n y: baseYPos,\n currentPoints,\n };\n }, [ ref, params ]);\n}\n","import { useToken } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartData } from '../types';\n\nimport type { CurrentPoint } from './ChartTooltipPoint';\nimport { calculateRowTransformValue, LABEL_WIDTH, PADDING } from './utils';\n\ntype Props = {\n lineNum: number;\n} & ({ label: string; children?: never } | { children: React.ReactNode; label?: never })\n\nconst ChartTooltipRow = ({ label, lineNum, children }: Props) => {\n const labelColor = useToken('colors', 'blue.100');\n const textColor = useToken('colors', 'white');\n\n return (\n \n { children || (\n <>\n \n { label }\n \n \n \n ) }\n \n );\n};\n\nexport default React.memo(ChartTooltipRow);\n\ninterface UseRenderRowsParams {\n data: TimeChartData;\n xScale: d3.ScaleTime;\n minWidth: number;\n}\n\ninterface UseRenderRowsReturnType {\n width: number;\n}\n\nexport function useRenderRows(ref: React.RefObject, { data, xScale, minWidth }: UseRenderRowsParams) {\n return React.useCallback((x: number, currentPoints: Array): UseRenderRowsReturnType => {\n\n // update \"transform\" prop of all rows\n const isIncompleteData = currentPoints.some(({ item }) => item.isApproximate);\n d3.select(ref.current)\n .selectAll('.ChartTooltip__row')\n .attr('transform', (datum, index) => {\n return calculateRowTransformValue(index - (isIncompleteData ? 0 : 1));\n });\n\n // update date and indicators value\n // here we assume that the first value element contains the date\n const valueNodes = d3.select(ref.current)\n .selectAll('.ChartTooltip__value')\n .text((_, index) => {\n if (index === 0) {\n const date = xScale.invert(x);\n const dateValue = data[0].items.find((item) => item.date.getTime() === date.getTime())?.dateLabel;\n const dateValueFallback = d3.timeFormat('%e %b %Y')(xScale.invert(x));\n return dateValue || dateValueFallback;\n }\n\n const { datumIndex, item } = currentPoints.find(({ datumIndex }) => datumIndex === index - 1) || {};\n if (datumIndex === undefined || !item) {\n return null;\n }\n\n const value = data[datumIndex]?.valueFormatter?.(item.value) ?? item.value.toLocaleString(undefined, { minimumSignificantDigits: 1 });\n const units = data[datumIndex]?.units ? ` ${ data[datumIndex]?.units }` : '';\n\n return value + units;\n })\n .nodes();\n\n const valueWidths = valueNodes.map((node) => node?.getBoundingClientRect?.().width);\n const maxValueWidth = Math.max(...valueWidths);\n const maxRowWidth = Math.max(minWidth, 2 * PADDING + LABEL_WIDTH + maxValueWidth);\n\n return { width: maxRowWidth };\n\n }, [ data, minWidth, ref, xScale ]);\n}\n","import { useToken } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport ChartTooltipRow from './ChartTooltipRow';\n\nconst ChartTooltipTitle = () => {\n const titleColor = useToken('colors', 'yellow.300');\n\n return (\n \n \n Incomplete day\n \n \n );\n};\n\nexport default React.memo(ChartTooltipTitle);\n\nexport function useRenderTitle(ref: React.RefObject) {\n return React.useCallback((isVisible: boolean) => {\n d3.select(ref.current)\n .select('.ChartTooltip__title')\n .attr('opacity', isVisible ? 1 : 0);\n }, [ ref ]);\n}\n","import * as d3 from 'd3';\n\nexport interface Pointer {\n id: number;\n point: [number, number] | null;\n prev: [number, number] | null;\n sourceEvent?: PointerEvent;\n}\n\nexport interface PointerOptions {\n start?: (tracker: Pointer) => void;\n move?: (tracker: Pointer) => void;\n out?: (tracker: Pointer) => void;\n end?: (tracker: Pointer) => void;\n}\n\nexport function trackPointer(event: PointerEvent, { start, move, out, end }: PointerOptions): number {\n const tracker: Pointer = {\n id: event.pointerId,\n point: null,\n prev: null,\n };\n\n const id = event.pointerId;\n const target = event.target as Element;\n tracker.point = d3.pointer(event, target);\n target.setPointerCapture(id);\n\n const untrack = (sourceEvent: PointerEvent) => {\n tracker.sourceEvent = sourceEvent;\n d3.select(target).on(`.${ id }`, null);\n target.releasePointerCapture(id);\n end?.(tracker);\n };\n\n d3.select(target)\n .on(`touchstart.${ id }`, (sourceEvent: PointerEvent) => {\n const target = sourceEvent.target as Element;\n const touches = d3.pointers(sourceEvent, target);\n\n // disable current tracker when entering multi touch mode\n touches.length > 1 && untrack(sourceEvent);\n })\n .on(`pointerup.${ id } pointercancel.${ id } lostpointercapture.${ id }`, (sourceEvent: PointerEvent) => {\n if (sourceEvent.pointerId !== id) {\n return;\n }\n\n untrack(sourceEvent);\n })\n .on(`pointermove.${ id }`, (sourceEvent) => {\n if (sourceEvent.pointerId !== id) {\n return;\n }\n tracker.sourceEvent = sourceEvent;\n tracker.prev = tracker.point;\n tracker.point = d3.pointer(sourceEvent, target);\n move?.(tracker);\n })\n .on(`pointerout.${ id }`, (e) => {\n if (e.pointerId !== id) {\n return;\n }\n tracker.sourceEvent = e;\n tracker.point = null;\n out?.(tracker);\n });\n\n start?.(tracker);\n\n return id;\n}\n","import * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartData } from 'ui/shared/chart/types';\n\nimport ChartTooltipBackdrop, { useRenderBackdrop } from './tooltip/ChartTooltipBackdrop';\nimport ChartTooltipContent, { useRenderContent } from './tooltip/ChartTooltipContent';\nimport ChartTooltipLine, { useRenderLine } from './tooltip/ChartTooltipLine';\nimport ChartTooltipPoint, { useRenderPoints } from './tooltip/ChartTooltipPoint';\nimport ChartTooltipRow, { useRenderRows } from './tooltip/ChartTooltipRow';\nimport ChartTooltipTitle, { useRenderTitle } from './tooltip/ChartTooltipTitle';\nimport { trackPointer } from './tooltip/pointerTracker';\nimport type { Pointer } from './tooltip/pointerTracker';\n\ninterface Props {\n width?: number;\n tooltipWidth?: number;\n height?: number;\n data: TimeChartData;\n xScale: d3.ScaleTime;\n yScale: d3.ScaleLinear;\n anchorEl: SVGRectElement | null;\n noAnimation?: boolean;\n}\n\nconst ChartTooltip = ({ xScale, yScale, width, tooltipWidth = 200, height, data, anchorEl, noAnimation, ...props }: Props) => {\n const ref = React.useRef(null);\n const trackerId = React.useRef();\n const isVisible = React.useRef(false);\n\n const transitionDuration = !noAnimation ? 100 : null;\n\n const renderLine = useRenderLine(ref, height);\n const renderContent = useRenderContent(ref, { chart: { width, height }, transitionDuration });\n const renderPoints = useRenderPoints(ref, { data, xScale, yScale });\n const renderTitle = useRenderTitle(ref);\n const renderRows = useRenderRows(ref, { data, xScale, minWidth: tooltipWidth });\n const renderBackdrop = useRenderBackdrop(ref, { seriesNum: data.length, transitionDuration });\n\n const draw = React.useCallback((pointer: Pointer) => {\n if (pointer.point) {\n const { x, y, currentPoints } = renderPoints(pointer.point[0]);\n const isIncompleteData = currentPoints.some(({ item }) => item.isApproximate);\n renderLine(x);\n renderContent(x, y);\n renderTitle(isIncompleteData);\n const { width } = renderRows(x, currentPoints);\n renderBackdrop(width, isIncompleteData);\n }\n }, [ renderPoints, renderLine, renderContent, renderTitle, renderRows, renderBackdrop ]);\n\n const showContent = React.useCallback(() => {\n if (!isVisible.current) {\n if (transitionDuration) {\n d3.select(ref.current)\n .transition()\n .delay(transitionDuration)\n .attr('opacity', 1);\n } else {\n d3.select(ref.current)\n .attr('opacity', 1);\n }\n isVisible.current = true;\n }\n }, [ transitionDuration ]);\n\n const hideContent = React.useCallback(() => {\n if (transitionDuration) {\n d3.select(ref.current)\n .transition()\n .delay(transitionDuration)\n .attr('opacity', 0);\n } else {\n d3.select(ref.current)\n .attr('opacity', 0);\n }\n isVisible.current = false;\n }, [ transitionDuration ]);\n\n const createPointerTracker = React.useCallback((event: PointerEvent, isSubsequentCall?: boolean) => {\n let isPressed = event.pointerType === 'mouse' && event.type === 'pointerdown' && !isSubsequentCall;\n\n if (isPressed) {\n hideContent();\n }\n\n return trackPointer(event, {\n move: (pointer) => {\n if (!pointer.point || isPressed) {\n return;\n }\n draw(pointer);\n showContent();\n },\n out: () => {\n hideContent();\n trackerId.current = undefined;\n },\n end: () => {\n hideContent();\n trackerId.current = undefined;\n isPressed = false;\n },\n });\n }, [ draw, hideContent, showContent ]);\n\n React.useEffect(() => {\n const anchorD3 = d3.select(anchorEl);\n let isMultiTouch = false; // disabling creation of new tracker in multi touch mode\n\n anchorD3\n .on('touchmove.tooltip', (event: TouchEvent) => event.preventDefault()) // prevent scrolling\n .on(`touchstart.tooltip`, (event: TouchEvent) => {\n isMultiTouch = event.touches.length > 1;\n })\n .on(`touchend.tooltip`, (event: TouchEvent) => {\n if (isMultiTouch && event.touches.length === 0) {\n isMultiTouch = false;\n }\n })\n .on('pointerenter.tooltip pointerdown.tooltip', (event: PointerEvent) => {\n if (!isMultiTouch) {\n trackerId.current = createPointerTracker(event);\n }\n })\n .on('pointermove.tooltip', (event: PointerEvent) => {\n if (event.pointerType === 'mouse' && !isMultiTouch && trackerId.current === undefined) {\n trackerId.current = createPointerTracker(event);\n }\n });\n\n return () => {\n anchorD3.on('touchmove.tooltip pointerenter.tooltip pointerdown.tooltip', null);\n trackerId.current && anchorD3.on(\n [ 'pointerup', 'pointercancel', 'lostpointercapture', 'pointermove', 'pointerout' ].map((event) => `${ event }.${ trackerId.current }`).join(' '),\n null,\n );\n };\n }, [ anchorEl, createPointerTracker, draw, hideContent, showContent ]);\n\n return (\n \n \n { data.map(({ name }) => ) }\n \n \n \n \n { data.map(({ name }, index) => ) }\n \n \n );\n};\n\nexport default React.memo(ChartTooltip);\n","import type { ChartMargin, ChartOffset } from 'ui/shared/chart/types';\n\nexport default function calculateInnerSize(rect: DOMRect | null, margin?: ChartMargin, offsets?: ChartOffset) {\n if (!rect) {\n return { innerWidth: 0, innerHeight: 0 };\n }\n\n return {\n innerWidth: Math.max(rect.width - (offsets?.x || 0) - (margin?.left || 0) - (margin?.right || 0), 0),\n innerHeight: Math.max(rect.height - (offsets?.y || 0) - (margin?.bottom || 0) - (margin?.top || 0), 0),\n };\n}\n","import * as d3 from 'd3';\nimport _maxBy from 'lodash/maxBy';\nimport _unique from 'lodash/uniq';\n\nimport type { AxesConfig, AxisConfig, TimeChartData } from '../types';\n\nimport { WEEK, MONTH, YEAR } from 'lib/consts';\n\nexport const DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS = 2;\nexport const DEFAULT_MAXIMUM_FRACTION_DIGITS = 3;\nexport const MAXIMUM_SIGNIFICANT_DIGITS_LIMIT = 8;\nexport const DEFAULT_LABEL_LENGTH = 5;\n\nexport interface LabelFormatParams extends Intl.NumberFormatOptions {\n maxLabelLength: number;\n}\n\ntype Data = TimeChartData;\n\nexport function getAxesParams(data: Data, axesConfig?: AxesConfig) {\n const { labelFormatParams: labelFormatParamsY, scale: yScale } = getAxisParamsY(data, axesConfig?.y);\n\n return {\n x: {\n scale: getAxisParamsX(data).scale,\n tickFormatter: tickFormatterX,\n },\n y: {\n scale: yScale,\n labelFormatParams: labelFormatParamsY,\n tickFormatter: getTickFormatterY(labelFormatParamsY),\n },\n };\n}\n\nfunction getAxisParamsX(data: Data) {\n const min = d3.min(data, ({ items }) => d3.min(items, ({ date }) => date)) ?? new Date();\n const max = d3.max(data, ({ items }) => d3.max(items, ({ date }) => date)) ?? new Date();\n const scale = d3.scaleTime().domain([ min, max ]);\n\n return { min, max, scale };\n}\n\nconst tickFormatterX = (axis: d3.Axis) => (d: d3.AxisDomain) => {\n let format: (date: Date) => string;\n const scale = axis.scale();\n const extent = scale.domain();\n\n const span = Number(extent[1]) - Number(extent[0]);\n\n if (span > YEAR) {\n format = d3.timeFormat('%Y');\n } else if (span > 2 * MONTH) {\n format = d3.timeFormat('%b');\n } else if (span > WEEK) {\n format = d3.timeFormat('%b %d');\n } else {\n format = d3.timeFormat('%a %d');\n }\n\n return format(d as Date);\n};\n\nfunction getAxisParamsY(data: Data, config?: AxisConfig) {\n const DEFAULT_TICKS_NUM = 3;\n const min = d3.min(data, ({ items }) => d3.min(items, ({ value }) => value)) ?? 0;\n const max = d3.max(data, ({ items }) => d3.max(items, ({ value }) => value)) ?? 0;\n const scale = config?.nice ?\n d3.scaleLinear()\n .domain([ min, max ])\n .nice(config?.ticks ?? DEFAULT_TICKS_NUM) :\n d3.scaleLinear()\n .domain([ min, max ]);\n\n const ticks = scale.ticks(config?.ticks ?? DEFAULT_TICKS_NUM);\n const labelFormatParams = getYLabelFormatParams(ticks);\n\n return { min, max, scale, labelFormatParams };\n}\n\nconst getTickFormatterY = (params: Intl.NumberFormatOptions) => () => (d: d3.AxisDomain) => {\n const num = Number(d);\n return num.toLocaleString(undefined, params);\n};\n\nfunction getYLabelFormatParams(ticks: Array, maximumSignificantDigits = DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS): LabelFormatParams {\n const params = {\n maximumFractionDigits: DEFAULT_MAXIMUM_FRACTION_DIGITS,\n maximumSignificantDigits,\n notation: 'compact' as const,\n };\n\n const uniqTicksStr = _unique(ticks.map((tick) => tick.toLocaleString(undefined, params)));\n const maxLabelLength = _maxBy(uniqTicksStr, (items) => items.length)?.length ?? DEFAULT_LABEL_LENGTH;\n\n if (uniqTicksStr.length === ticks.length || maximumSignificantDigits === MAXIMUM_SIGNIFICANT_DIGITS_LIMIT) {\n return { ...params, maxLabelLength };\n }\n\n return getYLabelFormatParams(ticks, maximumSignificantDigits + 1);\n}\n","import React from 'react';\n\nimport type { AxesConfig, ChartMargin, TimeChartData } from 'ui/shared/chart/types';\n\nimport useClientRect from 'lib/hooks/useClientRect';\n\nimport calculateInnerSize from './utils/calculateInnerSize';\nimport { getAxesParams } from './utils/timeChartAxis';\n\ninterface Props {\n data: TimeChartData;\n margin?: ChartMargin;\n axesConfig?: AxesConfig;\n}\n\nexport default function useTimeChartController({ data, margin, axesConfig }: Props) {\n\n const [ rect, ref ] = useClientRect();\n\n // we need to recalculate the axis scale whenever the rect width changes\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const axesParams = React.useMemo(() => getAxesParams(data, axesConfig), [ data, axesConfig, rect?.width ]);\n\n const chartMargin = React.useMemo(() => {\n const PIXELS_PER_DIGIT = 8;\n const leftShift = axesConfig?.y?.noLabel ? 0 : PIXELS_PER_DIGIT * axesParams.y.labelFormatParams.maxLabelLength;\n\n return {\n ...margin,\n left: (margin?.left ?? 0) + leftShift,\n };\n }, [ axesParams.y.labelFormatParams.maxLabelLength, margin, axesConfig?.y?.noLabel ]);\n\n const { innerWidth, innerHeight } = calculateInnerSize(rect, chartMargin);\n\n const xScale = React.useMemo(() => {\n return axesParams.x.scale.range([ 0, innerWidth ]);\n }, [ axesParams.x.scale, innerWidth ]);\n\n const yScale = React.useMemo(() => {\n return axesParams.y.scale.range([ innerHeight, 0 ]);\n }, [ axesParams.y.scale, innerHeight ]);\n\n return React.useMemo(() => {\n return {\n rect,\n ref,\n chartMargin,\n innerWidth,\n innerHeight,\n axes: {\n x: {\n tickFormatter: axesParams.x.tickFormatter,\n scale: xScale,\n },\n y: {\n tickFormatter: axesParams.y.tickFormatter,\n scale: yScale,\n },\n },\n };\n }, [ axesParams.x.tickFormatter, axesParams.y.tickFormatter, chartMargin, innerHeight, innerWidth, rect, ref, xScale, yScale ]);\n}\n"],"names":["useClientRect","rect","setRect","React","nodeRef","ref","node","getBoundingClientRect","current","content","window","document","querySelector","resizeObserver","ResizeObserver","_debounce","observe","body","unobserve","__webpack_exports__","Z","id","xScale","yScale","color","data","noAnimation","props","param","theme","useTheme","gradientColorId","concat","gradientStopColor","useToken","useColorModeValue","defaultGradient","startColor","stopColor","transparentize","d3","attr","transition","duration","ease","d","area","defined","isApproximate","x","date","y1","value","y0","domain","curve","undefined","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","Fragment","jsx","path","fill","opacity","data-name","defs","linearGradient","x1","x2","y2","stop","offset","ANIMATIONS","left","totalLength","getTotalLength","fadeIn","none","getIncompleteDataLineSource","result","index","length","prev","next","push","chart_ChartLine","animation","dataPathRef","incompleteDataPathRef","animationFn","timeoutId","setTimeout","clearTimeout","line","y","jsx_runtime","strokeWidth","strokeLinecap","strokeDasharray","filter","width","height","children","g","className","calculateContainerHeight","seriesNum","isIncomplete","linesNum","calculateRowTransformValue","top","Math","max","PADDING","rowNum","tooltip_ChartTooltipBackdrop","bgColor","rx","ry","tooltip_ChartTooltipContent","tooltip_ChartTooltipLine","lineColor","stroke","tooltip_ChartTooltipPoint","borderColor","circle","r","POINT_SIZE","tooltip_ChartTooltipRow","label","lineNum","labelColor","textColor","transform","text","dominantBaseline","tooltip_ChartTooltipTitle","titleColor","ChartTooltipRow","chart_ChartTooltip","params","tooltipWidth","anchorEl","trackerId","isVisible","transitionDuration","renderLine","select","chartHeight","renderContent","useRenderContent","chart","tooltipContent","transformAttributeFn","cur","i","nodes","nodeWidth","nodeHeight","translateX","translateY","calculatePosition","pointX","pointY","canvasWidth","canvasHeight","_clamp","renderPoints","xDate","invert","bisectDate","baseXPos","baseYPos","currentPoints","selectAll","elementIndex","datum","items","d0","d1","getTime","xPos","yPos","item","datumIndex","renderTitle","renderRows","useRenderRows","minWidth","isIncompleteData","some","valueNodes","_","dateValue","find","dateLabel","dateValueFallback","valueFormatter","toLocaleString","minimumSignificantDigits","units","map","renderBackdrop","useRenderBackdrop","draw","pointer","point","showContent","delay","hideContent","createPointerTracker","event","isSubsequentCall","isPressed","pointerType","type","trackPointer","start","move","out","end","tracker","pointerId","target","setPointerCapture","untrack","sourceEvent","on","releasePointerCapture","e","anchorD3","isMultiTouch","preventDefault","touches","join","fontSize","fontWeight","ChartTooltipLine","name","ChartTooltipPoint","ChartTooltipContent","ChartTooltipBackdrop","ChartTooltipTitle","tickFormatterX","extent","scale","span","Number","format","YEAR","MONTH","WEEK","getTickFormatterY","num","useTimeChartController","axesConfig","offsets","margin","axesParams","getAxesParams","labelFormatParams","labelFormatParamsY","getAxisParamsY","config","min","nice","ticks","getYLabelFormatParams","_maxBy","maximumSignificantDigits","maximumFractionDigits","notation","uniqTicksStr","_unique","tick","maxLabelLength","getAxisParamsX","Date","tickFormatter","chartMargin","leftShift","noLabel","PIXELS_PER_DIGIT","innerWidth","innerHeight","right","bottom","range","axes"],"sourceRoot":""}