{"version":3,"file":"static/chunks/3986-e54138c768c1a188.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/ChartLine.tsx","webpack://_N_E/./ui/shared/chart/ChartOverlay.tsx","webpack://_N_E/./ui/shared/chart/utils/computeTooltipPosition.ts","webpack://_N_E/./ui/shared/chart/utils/pointerTracker.tsx","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","webpack://_N_E/"],"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 disableAnimation?: boolean;\n}\n\nconst ChartArea = ({ id, xScale, yScale, color, data, disableAnimation, ...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 (disableAnimation) {\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 }, [ disableAnimation ]);\n\n const d = React.useMemo(() => {\n const area = d3.area()\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';\nimport React from 'react';\n\nimport type { TimeChartItem } from 'ui/shared/chart/types';\n\ninterface Props extends React.SVGProps {\n xScale: d3.ScaleTime | d3.ScaleLinear;\n yScale: d3.ScaleTime | d3.ScaleLinear;\n data: Array;\n animation: 'left' | 'fadeIn' | 'none';\n}\n\nconst ChartLine = ({ xScale, yScale, data, animation, ...props }: Props) => {\n const ref = React.useRef(null);\n\n // Define different types of animation that we can use\n const animateLeft = React.useCallback(() => {\n const totalLength = ref.current?.getTotalLength() || 0;\n d3.select(ref.current)\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\n const animateFadeIn = React.useCallback(() => {\n d3.select(ref.current)\n .transition()\n .duration(750)\n .ease(d3.easeLinear)\n .attr('opacity', 1);\n }, []);\n\n const noneAnimation = React.useCallback(() => {\n d3.select(ref.current).attr('opacity', 1);\n }, []);\n\n React.useEffect(() => {\n const ANIMATIONS = {\n left: animateLeft,\n fadeIn: animateFadeIn,\n none: noneAnimation,\n };\n const animationFn = ANIMATIONS[animation];\n window.setTimeout(animationFn, 100);\n }, [ animateLeft, animateFadeIn, noneAnimation, animation ]);\n\n // Recalculate line length if scale has changed\n React.useEffect(() => {\n if (animation === 'left') {\n const totalLength = ref.current?.getTotalLength();\n d3.select(ref.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};\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","import _clamp from 'lodash/clamp';\n\ninterface Params {\n pointX: number;\n pointY: number;\n offset: number;\n nodeWidth: number;\n nodeHeight: number;\n canvasWidth: number;\n canvasHeight: number;\n}\n\nexport default function computeTooltipPosition({ pointX, pointY, canvasWidth, canvasHeight, nodeWidth, nodeHeight, offset }: Params): [ 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 * 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 { useToken, useColorModeValue } from '@chakra-ui/react';\nimport * as d3 from 'd3';\nimport React from 'react';\n\nimport type { TimeChartItem, TimeChartData } from 'ui/shared/chart/types';\n\nimport computeTooltipPosition from 'ui/shared/chart/utils/computeTooltipPosition';\nimport type { Pointer } from 'ui/shared/chart/utils/pointerTracker';\nimport { trackPointer } from 'ui/shared/chart/utils/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}\n\nconst TEXT_LINE_HEIGHT = 12;\nconst PADDING = 16;\nconst LINE_SPACE = 10;\nconst POINT_SIZE = 16;\nconst LABEL_WIDTH = 80;\n\nconst ChartTooltip = ({ xScale, yScale, width, tooltipWidth = 200, height, data, anchorEl, ...props }: Props) => {\n const lineColor = useToken('colors', 'gray.400');\n const titleColor = useToken('colors', 'blue.100');\n const textColor = useToken('colors', 'white');\n const markerBgColor = useToken('colors', useColorModeValue('black', 'white'));\n const markerBorderColor = useToken('colors', useColorModeValue('white', 'black'));\n const bgColor = useToken('colors', 'blackAlpha.900');\n\n const ref = React.useRef(null);\n const trackerId = React.useRef();\n const isVisible = React.useRef(false);\n\n const drawLine = React.useCallback(\n (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', height || 0);\n },\n [ ref, height ],\n );\n\n const drawContent = React.useCallback(\n (x: number, y: number) => {\n const tooltipContent = d3.select(ref.current).select('.ChartTooltip__content');\n\n tooltipContent.attr('transform', (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 ] = computeTooltipPosition({\n canvasWidth: width || 0,\n canvasHeight: 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 const date = xScale.invert(x);\n const dateLabel = data[0].items.find((item) => item.date.getTime() === date.getTime())?.dateLabel;\n\n tooltipContent\n .select('.ChartTooltip__contentDate')\n .text(dateLabel || d3.timeFormat('%e %b %Y')(xScale.invert(x)));\n },\n [ xScale, data, width, height ],\n );\n\n const updateDisplayedValue = React.useCallback((d: TimeChartItem, i: number) => {\n const nodes = d3.select(ref.current)\n .selectAll('.ChartTooltip__value')\n .filter((td, tIndex) => tIndex === i)\n .text(\n (data[i].valueFormatter?.(d.value) || d.value.toLocaleString()) +\n (data[i].units ? ` ${ data[i].units }` : ''),\n )\n .nodes();\n\n const widthLimit = tooltipWidth - 2 * PADDING - LABEL_WIDTH;\n const width = nodes.map((node) => node?.getBoundingClientRect?.().width);\n const maxNodeWidth = Math.max(...width);\n d3.select(ref.current)\n .select('.ChartTooltip__contentBg')\n .attr('width', tooltipWidth + Math.max(0, (maxNodeWidth - widthLimit)));\n\n }, [ data, tooltipWidth ]);\n\n const drawPoints = React.useCallback((x: number) => {\n const xDate = xScale.invert(x);\n const bisectDate = d3.bisector((d) => d.date).left;\n let baseXPos = 0;\n let baseYPos = 0;\n\n d3.select(ref.current)\n .selectAll('.ChartTooltip__point')\n .attr('transform', (cur, i) => {\n const index = bisectDate(data[i].items, xDate, 1);\n const d0 = data[i].items[index - 1] as TimeChartItem | undefined;\n const d1 = data[i].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 = xScale(d.date);\n const yPos = yScale(d.value);\n\n if (i === 0) {\n baseXPos = xPos;\n baseYPos = yPos;\n }\n\n updateDisplayedValue(d, i);\n\n return `translate(${ xPos }, ${ yPos })`;\n });\n\n return [ baseXPos, baseYPos ];\n }, [ data, updateDisplayedValue, xScale, yScale ]);\n\n const draw = React.useCallback((pointer: Pointer) => {\n if (pointer.point) {\n const [ baseXPos, baseYPos ] = drawPoints(pointer.point[0]);\n drawLine(baseXPos);\n drawContent(baseXPos, baseYPos);\n }\n }, [ drawPoints, drawLine, drawContent ]);\n\n const showContent = React.useCallback(() => {\n if (!isVisible.current) {\n d3.select(ref.current).attr('opacity', 1);\n d3.select(ref.current)\n .selectAll('.ChartTooltip__point')\n .attr('opacity', 1);\n isVisible.current = true;\n }\n }, []);\n\n const hideContent = React.useCallback(() => {\n d3.select(ref.current).attr('opacity', 0);\n isVisible.current = false;\n }, []);\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 \n \n Date\n \n \n \n { data.map(({ name }, index) => (\n \n \n { name }\n \n \n \n )) }\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 _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;\n\nexport function getAxisParams(data: TimeChartData, 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: TimeChartData) {\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: TimeChartData, 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\n if (num < 1) {\n // for small number there are no algorithm to format label right now\n // so we set it to 3 digits after dot maximum\n return num.toLocaleString(undefined, { maximumFractionDigits: 3 });\n }\n\n return num.toLocaleString(undefined, params);\n};\n\nfunction getYLabelFormatParams(ticks: Array, maximumSignificantDigits = DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS): Intl.NumberFormatOptions {\n const params = {\n maximumFractionDigits: 3,\n maximumSignificantDigits,\n notation: 'compact' as const,\n };\n\n const uniqTicksStr = _unique(ticks.map((tick) => tick.toLocaleString(undefined, params)));\n\n if (uniqTicksStr.length === ticks.length || maximumSignificantDigits === MAXIMUM_SIGNIFICANT_DIGITS_LIMIT) {\n return params;\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 { getAxisParams, DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS } 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 axisParams = React.useMemo(() => getAxisParams(data, axesConfig), [ data, axesConfig, rect?.width ]);\n\n const chartMargin = React.useMemo(() => {\n const exceedingDigits = (axisParams.y.labelFormatParams.maximumSignificantDigits ?? DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS) -\n DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS;\n const PIXELS_PER_DIGIT = 7;\n const leftShift = PIXELS_PER_DIGIT * exceedingDigits;\n\n return {\n ...margin,\n left: (margin?.left ?? 0) + leftShift,\n };\n }, [ axisParams.y.labelFormatParams.maximumSignificantDigits, margin ]);\n\n const { innerWidth, innerHeight } = calculateInnerSize(rect, chartMargin);\n\n const xScale = React.useMemo(() => {\n return axisParams.x.scale.range([ 0, innerWidth ]);\n }, [ axisParams.x.scale, innerWidth ]);\n\n const yScale = React.useMemo(() => {\n return axisParams.y.scale.range([ innerHeight, 0 ]);\n }, [ axisParams.y.scale, innerHeight ]);\n\n return React.useMemo(() => {\n return {\n rect,\n ref,\n chartMargin,\n innerWidth,\n innerHeight,\n axis: {\n x: {\n tickFormatter: axisParams.x.tickFormatter,\n scale: xScale,\n },\n y: {\n tickFormatter: axisParams.y.tickFormatter,\n scale: yScale,\n },\n },\n };\n }, [ axisParams.x.tickFormatter, axisParams.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","resizeHandler","_debounce","resizeObserver","ResizeObserver","observe","body","unobserve","__webpack_exports__","Z","id","xScale","yScale","color","data","disableAnimation","props","param","theme","useTheme","gradientColorId","concat","gradientStopColor","useToken","useColorModeValue","defaultGradient","startColor","stopColor","transparentize","d3","attr","transition","duration","ease","d","area","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","animation","animateLeft","totalLength","getTotalLength","animateFadeIn","noneAnimation","animationFn","ANIMATIONS","left","fadeIn","none","setTimeout","line","y","strokeWidth","strokeLinecap","width","height","children","g","className","chart_ChartTooltip","tooltipWidth","anchorEl","lineColor","titleColor","textColor","markerBgColor","markerBorderColor","bgColor","trackerId","isVisible","drawLine","select","drawContent","tooltipContent","cur","i","nodes","nodeWidth","nodeHeight","translateX","translateY","computeTooltipPosition","pointX","pointY","canvasWidth","canvasHeight","_clamp","invert","dateLabel","items","find","item","getTime","text","updateDisplayedValue","selectAll","filter","td","tIndex","valueFormatter","toLocaleString","units","widthLimit","map","Math","max","maxNodeWidth","drawPoints","xDate","bisectDate","baseXPos","baseYPos","index","d0","d1","xPos","yPos","draw","pointer","point","showContent","hideContent","createPointerTracker","event","isSubsequentCall","isPressed","pointerType","type","trackPointer","start","move","out","end","tracker","pointerId","prev","target","setPointerCapture","untrack","sourceEvent","on","releasePointerCapture","touches","length","e","anchorD3","isMultiTouch","preventDefault","join","jsx_runtime","stroke","strokeDasharray","name","circle","r","POINT_SIZE","rx","ry","transform","PADDING","fontSize","fontWeight","dominantBaseline","LINE_SPACE","tickFormatterX","scale","axis","extent","span","Number","format","YEAR","MONTH","WEEK","getTickFormatterY","num","maximumFractionDigits","params","useTimeChartController","offsets","margin","axesConfig","axisParams","getAxisParams","labelFormatParams","labelFormatParamsY","getAxisParamsY","config","min","nice","ticks","getYLabelFormatParams","maximumSignificantDigits","notation","uniqTicksStr","_unique","tick","getAxisParamsX","Date","tickFormatter","chartMargin","exceedingDigits","DEFAULT_MAXIMUM_SIGNIFICANT_DIGITS","PIXELS_PER_DIGIT","innerWidth","innerHeight","right","bottom","top","range"],"sourceRoot":""}