charts-core 0.0.21 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"charts-core.js","sources":["../src/components/line-chart/axes/y-axis.ts","../src/components/line-chart/axes/x-axis.ts","../src/components/line-chart/axes/grid.ts","../src/components/line-chart/axes/index.ts","../src/components/line-chart/utils/index.ts","../src/components/line-chart/elements/range-border.ts","../src/components/line-chart/elements/circle-point.ts","../src/components/line-chart/elements/hover-line.ts","../src/components/line-chart/elements/range-tooltip.ts","../src/components/line-chart/elements/hover-tooltip.ts","../src/components/line-chart/constants.ts","../src/components/line-chart/elements/main-line-area.ts","../src/components/line-chart/elements/range-line-area.ts","../src/components/line-chart/elements/data-line.ts","../src/components/line-chart/elements/index.ts","../src/components/line-chart/interactions/hover/utils.ts","../src/components/line-chart/interactions/hover/index.ts","../src/components/line-chart/interactions/selection.ts","../src/components/line-chart/interactions/index.ts","../src/components/line-chart/scales/index.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderYAxis = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, y } = context\n const { width, margin, yAxis } = config\n const { customTicks, tickFormat, tickValues, ticks, isShow } = yAxis\n\n if (!isShow) return null\n\n svg\n .append('g')\n .attr('transform', `translate(${width - margin.right},0)`)\n .call((g) => {\n let axis = d3.axisRight(y)\n if (customTicks) {\n if (tickFormat) {\n axis = axis.tickFormat(tickFormat)\n }\n if (ticks) {\n axis = Array.isArray(ticks) ? axis.ticks(...ticks) : axis.ticks(ticks)\n }\n if (tickValues) {\n axis = axis.tickValues(tickValues)\n }\n } else {\n axis = axis.tickFormat((d) => {\n const num = Number(d)\n const sign = num < 0 ? '-' : ''\n const formatted = d3.format('.0s')(Math.abs(num))\n return `${sign}${formatted}`\n })\n }\n g.call(axis)\n })\n .call((g) => {\n let ticks: ParsedDataPoint['value'][] = []\n g.selectAll('.tick').each((d) => ticks.push(d as ParsedDataPoint['value']))\n context.yTicks = ticks\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('.tick text').classed('sc-charts__y-axis-tick', true))\n .attr('font-family', 'inherit')\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderXAxis = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, x } = context\n const { height, margin, xAxis } = config\n const { isShow, tickValues, tickFormat, customTicks, ticks } = xAxis\n\n if (!isShow) return null\n\n svg\n .append('g')\n .attr('transform', `translate(0,${height - margin.bottom})`)\n .call((g) => {\n let axis = d3.axisBottom(x)\n if (customTicks) {\n if (tickFormat) {\n axis = axis.tickFormat(tickFormat)\n }\n if (ticks) {\n axis = Array.isArray(ticks) ? axis.ticks(...ticks) : axis.ticks(ticks)\n }\n if (tickValues) {\n axis = axis.tickValues(tickValues)\n }\n } else {\n axis.ticks(5)\n }\n g.call(axis)\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => {\n let ticks: ParsedDataPoint['date'][] = []\n g.selectAll('.tick').each((d) => ticks.push(d as ParsedDataPoint['date']))\n context.xTicks = ticks\n })\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('.tick text').classed('sc-charts__x-axis-tick', true))\n .attr('font-family', 'inherit')\n}\n","import { ChartContext } from '../types'\n\nconst renderHorizontalStyles = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, y } = context\n const {\n width,\n margin,\n grid: { horizontalStyle },\n } = config\n\n if (horizontalStyle === 'none') return\n\n if (horizontalStyle.startsWith('zero-line')) {\n const line = svg\n .append('line')\n .attr('x1', 0 + margin.left)\n .attr('x2', width - margin.right)\n .attr('y1', y(0))\n .attr('y2', y(0))\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (horizontalStyle === 'zero-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n }\n\n if (horizontalStyle.startsWith('every-line')) {\n const ticks = context.yTicks || y.ticks()\n\n ticks.forEach((tick) => {\n const line = svg\n .append('line')\n .attr('x1', 0 + margin.left)\n .attr('x2', width - margin.right)\n .attr('y1', y(tick))\n .attr('y2', y(tick))\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (horizontalStyle === 'every-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n })\n }\n}\n\nconst renderVerticalStyles = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, x } = context\n const {\n height,\n margin,\n grid: { verticalStyle },\n } = config\n\n if (verticalStyle === 'none') return\n\n if (verticalStyle.startsWith('every-line')) {\n const ticks = context.xTicks || x.ticks()\n\n ticks.forEach((tick) => {\n const line = svg\n .append('line')\n .attr('x1', x(tick))\n .attr('x2', x(tick))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (verticalStyle === 'every-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n })\n }\n}\n\nexport const renderGrid = (context: Omit<ChartContext, 'elements'>) => {\n renderHorizontalStyles(context)\n renderVerticalStyles(context)\n}\n","import { ChartContext } from '../types'\nimport { renderYAxis } from './y-axis'\nimport { renderXAxis } from './x-axis'\nimport { renderGrid } from './grid.ts'\n\nexport const createAxes = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config } = context\n const { width, height, margin, logo } = config\n\n // x axis\n renderXAxis(context)\n\n // y axis\n renderYAxis(context)\n\n if (logo) {\n svg\n .append('image')\n .attr('xlink:href', config.theme === 'dark' ? logo.picDarkTheme : logo.picLightTheme)\n .attr('width', logo.width)\n .attr('height', logo.height)\n .attr('x', logo.x ?? (width - margin.left - margin.right) / 2 - logo.width / 2 + margin.left)\n .attr('y', logo.y ?? (height - margin.top - margin.bottom) / 2 - logo.height / 2 + margin.top)\n }\n\n // grid\n renderGrid(context)\n}\n","import * as d3 from 'd3'\nimport { ChartConfig, ChartConfigContext, ChartContext } from '../types'\n\nexport const createGradient = (\n defs:\n | d3.Selection<d3.BaseType, unknown, null, undefined>\n | d3.Selection<SVGDefsElement, unknown, null, undefined>,\n gradientId: string,\n options: {\n x1: string\n x2: string\n y1: string\n y2: string\n stops: { offset: string; stopColor: string }[]\n }\n): d3.Selection<SVGLinearGradientElement, unknown, null, undefined> => {\n let gradient: d3.Selection<SVGLinearGradientElement, unknown, null, undefined> =\n defs.select<SVGLinearGradientElement>(`#${gradientId}`)\n\n if (gradient.empty()) {\n gradient = defs\n .append<SVGLinearGradientElement>('linearGradient')\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('id', gradientId)\n }\n\n gradient\n .attr('x1', options.x1)\n .attr('y1', options.x2)\n .attr('x2', options.y1)\n .attr('y2', options.y2)\n\n options.stops.forEach(({ offset, stopColor }) => {\n gradient.append('stop').attr('offset', offset).attr('stop-color', stopColor)\n })\n\n return gradient\n}\n\nexport const getDefs = (svg: SVGSVGElement) => {\n const defsSelection = d3.select(svg).select('defs')\n const defs = defsSelection.empty() ? d3.select(svg).append('defs') : defsSelection\n\n return defs\n}\n\nexport const getBelowZeroClip = (ctx: Omit<ChartContext, 'elements'>) => {\n const {\n y,\n config: { margin },\n } = ctx\n const clipHeight = y.range()[0] - y(0)\n\n return { x: 0, y: y.range()[0] - clipHeight, width: '100%', height: clipHeight + margin.bottom }\n}\n\nexport const mergeConfig = (base: ChartConfigContext, patch?: ChartConfig): ChartConfigContext => ({\n ...base,\n ...patch,\n margin: {\n ...base.margin,\n ...patch?.margin,\n },\n logo:\n base.logo && patch?.logo\n ? {\n width: patch.logo.width ?? base.logo.width,\n height: patch.logo.height ?? base.logo.height,\n picLightTheme: patch.logo.picLightTheme ?? base.logo.picLightTheme,\n picDarkTheme: patch.logo.picDarkTheme ?? base.logo.picDarkTheme,\n x: patch.logo.x ?? base.logo.x,\n y: patch.logo.y ?? base.logo.y,\n }\n : base.logo,\n\n xAxis: {\n ...base.xAxis,\n ...patch?.xAxis,\n },\n yAxis: {\n ...base.yAxis,\n ...patch?.yAxis,\n },\n grid: {\n ...base.grid,\n ...patch?.grid,\n },\n})\n","import { Parent, ElementOptions, ChartElements } from './types'\nimport { createGradient, getDefs } from '../utils'\n\nexport const renderBorderRangeLine = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['rangeBorderLeft'] => {\n const svg = parent.node() as SVGSVGElement\n const defs = getDefs(svg)\n\n const createBorderGradient = (gradientId: string, mainColor: string) => {\n return createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'rgba(255, 255, 255, 0)' },\n { offset: '20%', stopColor: mainColor },\n { offset: '60%', stopColor: mainColor },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n }\n\n createBorderGradient('gradient-range-borders-up', 'var(--sc-color-selection-up)')\n createBorderGradient('gradient-range-borders-down', 'var(--sc-color-selection-down)')\n\n const baseClassName = 'sc-charts__border-range-line'\n\n const item = parent\n .append('line')\n .classed(baseClassName, true)\n .style('display', options.hidden ? 'none' : 'block')\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ x1, x2, y1, y2, hidden }) {\n if (x1 !== undefined) item.attr('x1', x1)\n if (x2 !== undefined) item.attr('x2', x2)\n if (y1 !== undefined) item.attr('y1', y1)\n if (y2 !== undefined) item.attr('y2', y2)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n\n destroy() {\n item.remove()\n },\n }\n}\n","import { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderCirclePoint = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['hoverCircle'] => {\n const item = parent\n .append('circle')\n .attr('r', options.radius || 4)\n .style('display', options.hidden ? 'none' : 'block')\n\n const baseClassName = options.className || ''\n if (baseClassName) item.classed(baseClassName, true)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ cx, cy, hidden, fill }) {\n if (cx !== undefined) item.attr('cx', cx)\n if (cy !== undefined) item.attr('cy', cy)\n if (fill !== undefined) item.attr('fill', fill)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n\n destroy() {\n item.remove()\n },\n }\n}\n","import { createGradient, getDefs } from '../utils'\nimport { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderHoverLine = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['hoverLine'] => {\n const baseClassName = 'sc-charts__hover-line'\n const item = parent\n .append('line')\n .style('display', options.hidden ? 'none' : 'block')\n .classed(baseClassName, true)\n const svg = parent.node() as SVGSVGElement\n const defs = getDefs(svg)\n\n const createBorderGradient = (gradientId: string, mainColor: string) => {\n return createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'rgba(255, 255, 255, 0)' },\n { offset: '15%', stopColor: mainColor },\n { offset: '75%', stopColor: mainColor },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n }\n\n createBorderGradient('hover-line-gradient', 'var(--sc-color-hover-line)')\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ x1, x2, y1, y2, hidden }) {\n if (x1 !== undefined) item.attr('x1', x1)\n if (x2 !== undefined) item.attr('x2', x2)\n if (y1 !== undefined) item.attr('y1', y1)\n if (y2 !== undefined) item.attr('y2', y2)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartElements } from './types'\nimport { ChartContext } from '../types'\n\nexport const renderRangeTooltip = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['rangeTooltip'] => {\n const baseClassName = 'sc-charts__range-tooltip'\n\n const foreignObject = context.svg\n .append('foreignObject')\n .classed(baseClassName, true)\n .style('display', 'none')\n\n const div = foreignObject\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-container`)\n\n const divSum = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-sum`)\n const divTime = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-time`)\n\n const timeFormat = d3.timeFormat('%b %e, %I:%M %p')\n\n return {\n className(action, mod) {\n if (action === 'remove') foreignObject.classed(`${baseClassName}${mod}`, false)\n else foreignObject.classed(`${baseClassName}${mod}`, true)\n },\n update({ leftPoint, rightPoint, x, y, hidden }) {\n if (x !== undefined) foreignObject.attr('x', x)\n if (y !== undefined) foreignObject.attr('y', y)\n if (leftPoint && rightPoint) {\n const delta = rightPoint.value - leftPoint.value\n const percent = ((delta / leftPoint.value) * 100).toFixed(2)\n\n const valueText = `${delta < 0 ? '-' : ''}$${Math.abs(delta).toFixed(2)} (${percent}%)`\n const dateText = `${timeFormat(leftPoint.date)} to ${timeFormat(rightPoint.date)}`\n divSum\n .text(valueText)\n .append('xhtml:div')\n .html(icon)\n .attr('class', `${baseClassName}-sum-icon`)\n divTime.text(dateText)\n\n const lastX = context.x(context.data[context.data.length - 1].date)\n const firstX = context.x(context.data[0].date)\n\n const tooltipDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n if (tooltipDimensions.x < firstX) {\n foreignObject.attr('x', firstX + tooltipDimensions.width / 2)\n }\n if (tooltipDimensions.x > lastX - tooltipDimensions.width) {\n foreignObject.attr('x', lastX - tooltipDimensions.width / 2)\n }\n }\n\n if (hidden !== undefined) {\n foreignObject.style('display', hidden ? 'none' : 'block')\n }\n },\n\n destroy() {\n foreignObject.remove()\n },\n }\n}\n\nconst icon = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 0.5C5.71442 0.5 4.45772 0.881218 3.3888 1.59545C2.31988 2.30968 1.48676 3.32484 0.994786 4.51256C0.502816 5.70028 0.374095 7.00721 0.624899 8.26809C0.875703 9.52896 1.49477 10.6872 2.40381 11.5962C3.31285 12.5052 4.47104 13.1243 5.73192 13.3751C6.99279 13.6259 8.29973 13.4972 9.48744 13.0052C10.6752 12.5132 11.6903 11.6801 12.4046 10.6112C13.1188 9.54229 13.5 8.28558 13.5 7C13.4982 5.27665 12.8128 3.62441 11.5942 2.40582C10.3756 1.18722 8.72335 0.50182 7 0.5ZM9.35375 6.85375C9.30732 6.90024 9.25217 6.93712 9.19147 6.96228C9.13077 6.98744 9.06571 7.00039 9 7.00039C8.93429 7.00039 8.86923 6.98744 8.80853 6.96228C8.74783 6.93712 8.69269 6.90024 8.64625 6.85375L7.5 5.70687V9.5C7.5 9.63261 7.44732 9.75979 7.35356 9.85355C7.25979 9.94732 7.13261 10 7 10C6.86739 10 6.74022 9.94732 6.64645 9.85355C6.55268 9.75979 6.5 9.63261 6.5 9.5V5.70687L5.35375 6.85375C5.25993 6.94757 5.13268 7.00028 5 7.00028C4.86732 7.00028 4.74007 6.94757 4.64625 6.85375C4.55243 6.75993 4.49972 6.63268 4.49972 6.5C4.49972 6.36732 4.55243 6.24007 4.64625 6.14625L6.64625 4.14625C6.69269 4.09976 6.74783 4.06288 6.80853 4.03772C6.86923 4.01256 6.9343 3.99961 7 3.99961C7.06571 3.99961 7.13077 4.01256 7.19147 4.03772C7.25217 4.06288 7.30732 4.09976 7.35375 4.14625L9.35375 6.14625C9.40024 6.19269 9.43712 6.24783 9.46228 6.30853C9.48744 6.36923 9.5004 6.43429 9.5004 6.5C9.5004 6.56571 9.48744 6.63077 9.46228 6.69147C9.43712 6.75217 9.40024 6.80731 9.35375 6.85375Z\" \n fill=\"currentColor\"/>\n </svg>\n`\n","import * as d3 from 'd3'\nimport { ChartElements } from './types'\nimport { ChartContext } from '../types'\n\nexport const renderHoverTooltip = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['hoverTooltip'] => {\n const baseClassName = 'sc-charts__hover-tooltip'\n\n const foreignObject = context.svg\n .append('foreignObject')\n .classed(baseClassName, true)\n .style('display', 'none')\n\n const div = foreignObject\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-container`)\n\n const divSum = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-sum`)\n .html('$sum')\n\n const divTime = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-time`)\n .html('Date')\n\n const timeFormat = d3.timeFormat('%a, %b %d, %-I:%M %p')\n const sumFormat = (sum: number) => `${sum < 0 ? '-' : ''}$${Math.abs(sum).toFixed(2)}`\n\n return {\n className(action, mod) {\n if (action === 'remove') foreignObject.classed(`${baseClassName}${mod}`, false)\n else foreignObject.classed(`${baseClassName}${mod}`, true)\n },\n update({ x, y, hidden, dataItem }) {\n if (x !== undefined) foreignObject.attr('x', x)\n if (y !== undefined) foreignObject.attr('y', y)\n\n if (dataItem && x !== undefined) {\n divSum.text(sumFormat(dataItem.value))\n divTime.text(timeFormat(dataItem.date))\n\n const tooltipDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n const tooltipOffset = 16\n\n const tooltipX =\n x + tooltipOffset + tooltipDimensions.width >\n context.config.width - context.config.margin.right\n ? x - tooltipOffset - tooltipDimensions.width\n : x + tooltipOffset\n\n foreignObject.attr('x', tooltipX)\n }\n\n if (hidden !== undefined) {\n foreignObject.style('display', hidden ? 'none' : 'block')\n }\n },\n\n destroy() {\n foreignObject.remove()\n },\n }\n}\n","import { ChartConfigContext, ChartContext } from './types'\nimport * as d3 from 'd3'\n\nexport const defaultConfig: Omit<ChartConfigContext, 'width' | 'height'> = {\n margin: { top: 10, right: 30, bottom: 20, left: 10 },\n theme: 'light',\n logo: {\n width: 406,\n height: 113,\n x: null,\n y: null,\n picDarkTheme: null,\n picLightTheme: null,\n },\n hasMainLineArea: false,\n hoverRange: 'month',\n xAxis: {\n customTicks: false,\n tickFormat: null,\n ticks: null,\n tickValues: null,\n isShow: false,\n },\n yAxis: {\n customTicks: false,\n tickFormat: null,\n ticks: null,\n tickValues: null,\n isShow: true,\n },\n grid: {\n horizontalStyle: 'zero-line-dashed',\n verticalStyle: 'none',\n },\n enableSelection: true,\n enableHover: true,\n enableBelowZeroLine: false,\n curveTension: 1,\n}\n\nexport const curveFunction = (ctx: Omit<ChartContext, 'elements'>) =>\n d3.curveCardinal.tension(ctx.config.curveTension)\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements } from './types'\nimport { createGradient, getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderMainLineArea = (\n ctx: Omit<ChartContext, 'elements'>\n): ChartElements['mainLineArea'] => {\n const { svg, data, x, y, config } = ctx\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const gradientId = 'main-line-area-gradient'\n\n createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-main-line)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n\n const areaGen = d3\n .area<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y0(y.range()[0])\n .y1((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const baseClassName = 'sc-charts__main-line-area'\n\n const item = svg\n .append('path')\n .datum(data)\n .attr('d', areaGen)\n .attr('class', baseClassName)\n .classed(`${baseClassName}_hidden`, !config.hasMainLineArea)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, hidden }) {\n if (data !== undefined) item.datum(data).attr('d', areaGen)\n if (hidden !== undefined) {\n if (!config.hasMainLineArea) return null\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ClipProps } from './types'\nimport { createGradient, getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderRangeLineArea = (\n ctx: Omit<ChartContext, 'elements'>,\n options: { clip?: ClipProps } = {}\n): ChartElements['rangeLineArea'] => {\n const baseClassName = 'sc-charts__range-line-area'\n const { svg, x, y, config, data, chartId } = ctx\n const { clip: initClip } = options\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const gradientId = 'range-line-area-gradient'\n\n createGradient(defs, gradientId + '_up', {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-selection-up)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n createGradient(defs, gradientId + '_down', {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-selection-down)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n\n const areaGen = d3\n .area<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y0(y.range()[0])\n .y1((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const clipId = `${chartId}-clip-${baseClassName}`\n const clipPath = defs.append('clipPath').attr('id', clipId)\n\n const clipRect = clipPath\n .append('rect')\n .attr('x', initClip?.x || 0)\n .attr('y', initClip?.y || 0)\n .attr('width', initClip?.width || '100%')\n .attr('height', initClip?.height || '100%')\n\n const item = svg\n .append('path')\n .datum(data)\n .attr('d', areaGen)\n .attr('class', baseClassName)\n .classed(`${baseClassName}_hidden`, !config.hasMainLineArea)\n .attr('clip-path', `url(#${clipId})`)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, hidden, clip }) {\n if (data !== undefined) item.datum(data).attr('d', areaGen)\n if (hidden !== undefined) {\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n if (clip !== undefined) {\n clipRect\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartFabricElement, ClipProps, DataLineUpdateProps } from './types'\nimport { getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderDataLine = (\n ctx: Omit<ChartContext, 'elements'>,\n options: { baseClassName: string; id: string; clip?: ClipProps }\n): ChartFabricElement<Partial<DataLineUpdateProps>> => {\n const { svg, data, x, y } = ctx\n const { baseClassName, id, clip: initClip } = options\n\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const clipPath = defs.append('clipPath').attr('id', `clip-${id}`)\n\n const clipRect = clipPath\n .append('rect')\n .attr('x', initClip?.x || 0)\n .attr('y', initClip?.y || 0)\n .attr('width', initClip?.width || '100%')\n .attr('height', initClip?.height || '100%')\n\n const item = svg\n .append('path')\n .classed(baseClassName, true)\n .datum(data)\n .attr('d', lineGen)\n .attr('id', id)\n .attr('clip-path', `url(#clip-${id})`)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, clip, hidden }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (hidden !== undefined) {\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n if (clip !== undefined) {\n clipRect\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import { ChartElements } from './types'\nimport { renderBorderRangeLine } from './range-border'\nimport { renderCirclePoint } from './circle-point'\nimport { renderHoverLine } from './hover-line'\nimport { ChartContext } from '../types'\nimport { renderRangeTooltip } from './range-tooltip'\nimport { renderHoverTooltip } from './hover-tooltip'\nimport { renderMainLineArea } from './main-line-area'\nimport { renderRangeLineArea } from './range-line-area'\nimport { renderDataLine } from './data-line'\nimport { getBelowZeroClip } from '../utils'\n\n// render each elements by order\nexport const createElements = (context: Omit<ChartContext, 'elements'>): ChartElements => {\n const mainLine = renderDataLine(context, {\n baseClassName: `sc-charts__main-line`,\n id: `${context.chartId}-sc-charts__main-line`,\n })\n const mainLineArea = renderMainLineArea(context)\n\n const hoverLine = renderHoverLine(context.svg)\n const highlightLine = renderDataLine(context, {\n baseClassName: `sc-charts__highlight-line`,\n id: `${context.chartId}-sc-charts__highlight-line`,\n clip: { x: 0, y: 0, width: '0', height: '0' },\n })\n\n let belowZeroLine = null\n\n if (context.config.enableBelowZeroLine) {\n belowZeroLine = renderDataLine(context, {\n baseClassName: `sc-charts__below-zero-line`,\n id: `${context.chartId}-sc-charts__below-zero-line`,\n clip: getBelowZeroClip(context),\n })\n }\n\n const hoverCircle = renderCirclePoint(context.svg, {\n className: 'sc-charts__hover-circle',\n hidden: true,\n })\n const rangeBorderLeft = renderBorderRangeLine(context.svg)\n const rangeBorderRight = renderBorderRangeLine(context.svg)\n const rangeLine = renderDataLine(context, {\n baseClassName: `sc-charts__range-line`,\n id: `${context.chartId}-sc-charts__range-line`,\n clip: { x: 0, y: 0, width: '0', height: '0' },\n })\n const rangeCircleLeft = renderCirclePoint(context.svg, {\n className: 'sc-charts__range-circle-left',\n hidden: true,\n })\n const rangeCircleRight = renderCirclePoint(context.svg, {\n className: 'sc-charts__range-circle-right',\n hidden: true,\n })\n const rangeTooltip = renderRangeTooltip(context)\n const hoverTooltip = renderHoverTooltip(context)\n const rangeLineArea = renderRangeLineArea(context)\n\n return {\n hoverLine,\n hoverCircle,\n rangeBorderLeft,\n rangeBorderRight,\n rangeLine,\n rangeLineArea,\n rangeCircleLeft,\n rangeCircleRight,\n mainLine,\n rangeTooltip,\n highlightLine,\n hoverTooltip,\n mainLineArea,\n belowZeroLine,\n }\n}\n","export const getClipForRange = (\n hoverRange: 'day' | 'week' | 'month',\n target: Date,\n x: (d: Date) => number\n) => {\n let start: Date, end: Date\n\n switch (hoverRange) {\n case 'day':\n start = new Date(target)\n start.setHours(0, 0, 0, 0)\n end = new Date(start)\n end.setDate(start.getDate() + 1)\n break\n\n case 'week': {\n const day = target.getDay()\n const diff = target.getDate() - day + (day === 0 ? -6 : 1)\n start = new Date(target.getFullYear(), target.getMonth(), diff)\n start.setHours(0, 0, 0, 0)\n end = new Date(start)\n end.setDate(start.getDate() + 7)\n break\n }\n\n case 'month':\n start = new Date(target.getFullYear(), target.getMonth(), 1)\n end = new Date(target.getFullYear(), target.getMonth() + 1, 1)\n break\n\n default:\n return {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%',\n }\n }\n\n const xStart = x(start)\n const xEnd = x(end)\n\n return {\n x: xStart,\n y: 0,\n width: xEnd - xStart,\n height: '100%',\n }\n}\n","import { ChartContext, ParsedDataPoint } from '../../types'\nimport { getBelowZeroClip } from '../../utils'\nimport { getClipForRange } from './utils'\n\nexport const renderHoverItems = (ctx: ChartContext, closest: ParsedDataPoint) => {\n const {\n x,\n y,\n elements,\n config: { margin, height, hoverRange },\n } = ctx\n\n elements.hoverLine.update({\n x1: x(closest.date),\n x2: x(closest.date),\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.hoverCircle.update({\n cx: x(closest.date),\n cy: y(closest.value),\n hidden: false,\n })\n\n elements.hoverTooltip.update({\n dataItem: closest,\n x: x(closest.date),\n y: 0,\n hidden: false,\n })\n\n const baseClip = getClipForRange(hoverRange, closest.date, x)\n\n elements.highlightLine.update({\n clip: baseClip,\n hidden: false,\n })\n\n elements.belowZeroLine?.update({\n clip: {\n ...baseClip,\n y: y(0),\n height: y.range()[0] - y(0) + margin.bottom,\n },\n })\n\n elements.mainLine.className('add', '_muted')\n}\n\nexport const hideHoverItems = (ctx: ChartContext) => {\n const { elements } = ctx\n elements.hoverLine.update({ hidden: true })\n elements.hoverCircle.update({ hidden: true })\n elements.highlightLine.update({ hidden: true })\n elements.mainLine.className('remove', '_muted')\n elements.hoverTooltip.update({ hidden: true })\n if (ctx.action !== 'selection') {\n elements.belowZeroLine?.update({\n clip: getBelowZeroClip(ctx),\n })\n }\n}\n","import { ChartElements } from '../elements/types'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nconst controlIsGrowingClasses = (elements: ChartElements, isGrowing: boolean) => {\n const names: (keyof Required<\n Pick<\n ChartElements,\n | 'rangeBorderLeft'\n | 'rangeBorderRight'\n | 'rangeCircleLeft'\n | 'rangeCircleRight'\n | 'rangeLine'\n | 'rangeLineArea'\n | 'rangeTooltip'\n >\n >)[] = [\n 'rangeBorderLeft',\n 'rangeBorderRight',\n 'rangeCircleLeft',\n 'rangeCircleRight',\n 'rangeLine',\n 'rangeLineArea',\n 'rangeTooltip',\n ]\n\n names.forEach((name) => {\n if (isGrowing) {\n elements[name].className('remove', '_down')\n elements[name].className('add', '_up')\n } else {\n elements[name].className('remove', '_up')\n elements[name].className('add', '_down')\n }\n })\n}\n\nexport const renderSelectionItems = (\n ctx: ChartContext,\n startPoint: ParsedDataPoint,\n closest: ParsedDataPoint\n) => {\n const {\n x,\n y,\n config: { margin, height },\n elements,\n } = ctx\n\n const leftPoint = x(startPoint.date) < x(closest.date) ? startPoint : closest\n const rightPoint = x(startPoint.date) >= x(closest.date) ? startPoint : closest\n const isGrowing = rightPoint.value - leftPoint.value >= 0\n const xLeft = x(leftPoint.date)\n const xRight = x(rightPoint.date)\n const selectionWidth = xRight - xLeft\n\n elements.rangeBorderLeft.update({\n x1: xLeft,\n x2: xLeft,\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.rangeBorderRight.update({\n x1: xRight,\n x2: xRight,\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.rangeCircleLeft.update({\n cx: xLeft,\n cy: y(leftPoint.value),\n hidden: false,\n })\n\n elements.rangeCircleRight.update({\n cx: xRight,\n cy: y(rightPoint.value),\n hidden: false,\n })\n\n elements.rangeLine.update({\n clip: {\n x: xLeft,\n y: 0,\n width: selectionWidth,\n height: y.range()[0],\n },\n hidden: false,\n })\n\n elements.rangeLineArea.update({\n clip: {\n x: xLeft,\n y: 0,\n width: selectionWidth,\n height: y.range()[0],\n },\n hidden: false,\n })\n\n elements.rangeTooltip.update({\n rightPoint,\n leftPoint,\n x: xLeft + selectionWidth / 2,\n y: 0,\n hidden: false,\n })\n\n elements.belowZeroLine?.update({\n hidden: true,\n })\n\n elements.mainLineArea.update({ hidden: true })\n\n controlIsGrowingClasses(elements, isGrowing)\n elements.mainLine.className('add', '_selected-muted')\n}\n\nexport const hideSelectionItems = (ctx: ChartContext) => {\n const { elements } = ctx\n elements.rangeLine.update({ hidden: true })\n elements.rangeLineArea.update({ hidden: true })\n elements.rangeBorderLeft.update({ hidden: true })\n elements.rangeBorderRight.update({ hidden: true })\n elements.rangeCircleLeft.update({ hidden: true })\n elements.rangeCircleRight.update({ hidden: true })\n elements.rangeTooltip.update({ hidden: true })\n elements.mainLine.className('remove', '_selected-muted')\n elements.mainLineArea.update({ hidden: false })\n elements.belowZeroLine?.update({ hidden: false })\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { hideHoverItems, renderHoverItems } from './hover'\nimport { hideSelectionItems, renderSelectionItems } from './selection'\n\nexport const setupInteractions = (ctx: ChartContext) => {\n const { svg, data, x, config } = ctx\n const { height, margin, width, enableSelection, enableHover } = config\n let startPoint: ParsedDataPoint | null = null\n let isDragging = false\n\n const findClosest = (mouseX: number) => {\n return data.reduce((a, b) =>\n Math.abs(x(a.date) - mouseX) < Math.abs(x(b.date) - mouseX) ? a : b\n )\n }\n\n const overlay = svg\n .append('rect')\n .attr('width', width - margin.left - margin.right)\n .attr('height', height - margin.top - margin.bottom)\n .attr('x', margin.left)\n .attr('y', margin.top)\n .attr('fill', 'transparent')\n\n overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n if (!isDragging && enableHover) {\n ctx.action = 'hover'\n renderHoverItems(ctx, closest)\n } else {\n ctx.action = isDragging ? 'selection' : 'none'\n hideHoverItems(ctx)\n }\n\n if (startPoint && enableSelection) {\n ctx.action = 'selection'\n renderSelectionItems(ctx, startPoint, closest)\n }\n })\n .on('mouseleave', () => {\n ctx.action = 'none'\n isDragging = false\n startPoint = null\n hideHoverItems(ctx)\n hideSelectionItems(ctx)\n })\n .on('mousedown', function (event) {\n if (enableSelection) {\n isDragging = true\n ctx.action = 'selection'\n const [mouseX] = d3.pointer(event, this)\n startPoint = findClosest(mouseX)\n }\n })\n .on('mouseup', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n isDragging = false\n startPoint = null\n ctx.action = 'hover'\n\n if (enableSelection) hideSelectionItems(ctx)\n if (enableHover) renderHoverItems(ctx, closest)\n })\n}\n","import * as d3 from 'd3'\nimport { ChartConfigContext, ParsedDataPoint } from '../types'\n\nexport const createXScale = (data: ParsedDataPoint[], config: ChartConfigContext) => {\n const { width, margin } = config\n\n const scale = d3.scaleTime()\n\n const xExtent = d3.extent(data, (d) => new Date(d.date))\n\n if (xExtent[0] == null || xExtent[1] == null) return scale\n\n return scale.domain([xExtent[0], xExtent[1]]).range([margin.left, width - margin.right])\n}\n\nexport const createYScale = (data: ParsedDataPoint[], config: ChartConfigContext) => {\n const { height, margin } = config\n\n const yMax = d3.max(data, (d) => d.value) ?? 0\n const yMin = d3.min(data, (d) => d.value) ?? 0\n\n return d3\n .scaleLinear()\n .domain([yMin, yMax])\n .range([height - margin.bottom, margin.top])\n}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { ChartContext, ParsedDataPoint, LineChartOptions } from './types'\nimport { defaultConfig } from './constants'\nimport { mergeConfig } from './utils'\nimport { createYScale, createXScale } from './scales'\nimport '../../css/line-chart.css'\n\nexport const createLineChart = (selector: string, initialOptions: LineChartOptions) => {\n const container = d3.select(selector)\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return null\n }\n if (!initialOptions.chartId || !/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(initialOptions.chartId)) {\n console.error(`chartId is required and must be a valid id \n (only letters, numbers or underscores. The first character must be a letter)`)\n return null\n }\n\n const svg = container.append('svg')\n const containerNode = container.node() as HTMLElement\n const boundingRect = containerNode.getBoundingClientRect()\n const width = boundingRect.width\n const height = boundingRect.height\n let currentConfig = mergeConfig({ ...defaultConfig, width, height }, initialOptions.config)\n\n const render = (options: Omit<LineChartOptions, 'chartId'>, isUpdate = false) => {\n if (isUpdate && options.config) {\n currentConfig = mergeConfig(currentConfig, options.config)\n }\n\n const data: ParsedDataPoint[] = options.data\n .map((d) => ({ date: new Date(d.date), value: d.value }))\n .sort((a, b) => a.date.getTime() - b.date.getTime())\n\n const x = createXScale(data, currentConfig)\n const y = createYScale(data, currentConfig)\n\n svg\n .attr('class', `sc-charts sc-charts__${currentConfig.theme}`)\n .attr('preserveAspectRatio', 'xMinYMin meet')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .style('width', '100%')\n .style('height', '100%')\n .selectAll('*')\n .remove()\n\n const preContext: Omit<ChartContext, 'elements'> = {\n chartId: initialOptions.chartId,\n svg,\n data,\n x,\n y,\n config: currentConfig,\n action: 'none',\n }\n\n createAxes(preContext)\n\n const context: ChartContext = {\n ...preContext,\n elements: createElements(preContext),\n }\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: Omit<LineChartOptions, 'chartId'>) => render(options, true),\n destroy: () => svg.remove(),\n }\n}\n"],"names":["renderYAxis","context","svg","config","y","width","margin","yAxis","customTicks","tickFormat","tickValues","ticks","isShow","g","axis","d3","d","num","sign","formatted","renderXAxis","x","height","xAxis","renderHorizontalStyles","horizontalStyle","line","tick","renderVerticalStyles","verticalStyle","renderGrid","createAxes","logo","createGradient","defs","gradientId","options","gradient","offset","stopColor","getDefs","defsSelection","getBelowZeroClip","ctx","clipHeight","mergeConfig","base","patch","renderBorderRangeLine","parent","createBorderGradient","mainColor","baseClassName","item","action","mod","x1","x2","y1","y2","hidden","renderCirclePoint","cx","cy","fill","renderHoverLine","renderRangeTooltip","foreignObject","div","divSum","divTime","timeFormat","leftPoint","rightPoint","delta","percent","valueText","dateText","icon","lastX","firstX","tooltipDimensions","renderHoverTooltip","sumFormat","sum","dataItem","tooltipOffset","tooltipX","defaultConfig","curveFunction","renderMainLineArea","data","svgNode","areaGen","renderRangeLineArea","chartId","initClip","clipId","clipRect","clip","renderDataLine","id","lineGen","createElements","mainLine","mainLineArea","hoverLine","highlightLine","belowZeroLine","hoverCircle","rangeBorderLeft","rangeBorderRight","rangeLine","rangeCircleLeft","rangeCircleRight","rangeTooltip","hoverTooltip","rangeLineArea","getClipForRange","hoverRange","target","start","end","day","diff","xStart","xEnd","renderHoverItems","closest","elements","baseClip","_a","hideHoverItems","controlIsGrowingClasses","isGrowing","name","renderSelectionItems","startPoint","xLeft","xRight","selectionWidth","hideSelectionItems","setupInteractions","enableSelection","enableHover","isDragging","findClosest","mouseX","a","b","event","createXScale","scale","xExtent","createYScale","yMax","yMin","createLineChart","selector","initialOptions","container","boundingRect","currentConfig","render","isUpdate","preContext"],"mappings":"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"}
1
+ {"version":3,"file":"charts-core.js","sources":["../src/components/line-chart/axes/y-axis.ts","../src/components/line-chart/axes/x-axis.ts","../src/components/line-chart/axes/grid.ts","../src/components/line-chart/axes/index.ts","../src/components/line-chart/utils/index.ts","../src/components/line-chart/elements/range-border.ts","../src/components/line-chart/elements/circle-point.ts","../src/components/line-chart/elements/hover-line.ts","../src/components/line-chart/elements/range-tooltip.ts","../src/components/line-chart/elements/hover-tooltip.ts","../src/components/line-chart/constants.ts","../src/components/line-chart/elements/main-line-area.ts","../src/components/line-chart/elements/range-line-area.ts","../src/components/line-chart/elements/data-line.ts","../src/components/line-chart/elements/highlight-line.ts","../src/components/line-chart/elements/index.ts","../src/components/line-chart/interactions/hover/utils.ts","../src/components/line-chart/interactions/hover/index.ts","../src/components/line-chart/interactions/selection.ts","../src/components/line-chart/interactions/index.ts","../src/components/line-chart/scales/index.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderYAxis = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, y } = context\n const { width, margin, yAxis } = config\n const { customTicks, tickFormat, tickValues, ticks, isShow } = yAxis\n\n if (!isShow) return null\n\n svg\n .append('g')\n .attr('transform', `translate(${width - margin.right},0)`)\n .call((g) => {\n let axis = d3.axisRight(y)\n if (customTicks) {\n if (tickFormat) {\n axis = axis.tickFormat(tickFormat)\n }\n if (ticks) {\n axis = Array.isArray(ticks) ? axis.ticks(...ticks) : axis.ticks(ticks)\n }\n if (tickValues) {\n axis = axis.tickValues(tickValues)\n }\n } else {\n axis = axis.tickFormat((d) => {\n const num = Number(d)\n const sign = num < 0 ? '-' : ''\n const formatted = d3.format('.0s')(Math.abs(num))\n return `${sign}${formatted}`\n })\n }\n g.call(axis)\n })\n .call((g) => {\n let ticks: ParsedDataPoint['value'][] = []\n g.selectAll('.tick').each((d) => ticks.push(d as ParsedDataPoint['value']))\n context.yTicks = ticks\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('.tick text').classed('sc-charts__y-axis-tick', true))\n .attr('font-family', 'inherit')\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderXAxis = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, x } = context\n const { height, margin, xAxis } = config\n const { isShow, tickValues, tickFormat, customTicks, ticks } = xAxis\n\n if (!isShow) return null\n\n svg\n .append('g')\n .attr('transform', `translate(0,${height - margin.bottom})`)\n .call((g) => {\n let axis = d3.axisBottom(x)\n if (customTicks) {\n if (tickFormat) {\n axis = axis.tickFormat(tickFormat)\n }\n if (ticks) {\n axis = Array.isArray(ticks) ? axis.ticks(...ticks) : axis.ticks(ticks)\n }\n if (tickValues) {\n axis = axis.tickValues(tickValues)\n }\n } else {\n axis.ticks(5)\n }\n g.call(axis)\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => {\n let ticks: ParsedDataPoint['date'][] = []\n g.selectAll('.tick').each((d) => ticks.push(d as ParsedDataPoint['date']))\n context.xTicks = ticks\n })\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('.tick text').classed('sc-charts__x-axis-tick', true))\n .attr('font-family', 'inherit')\n}\n","import { ChartContext } from '../types'\n\nconst renderHorizontalStyles = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, y } = context\n const {\n width,\n margin,\n grid: { horizontalStyle },\n } = config\n\n if (horizontalStyle === 'none') return\n\n if (horizontalStyle.startsWith('zero-line')) {\n const line = svg\n .append('line')\n .attr('x1', 0 + margin.left)\n .attr('x2', width - margin.right)\n .attr('y1', y(0))\n .attr('y2', y(0))\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (horizontalStyle === 'zero-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n }\n\n if (horizontalStyle.startsWith('every-line')) {\n const ticks = context.yTicks || y.ticks()\n\n ticks.forEach((tick) => {\n const line = svg\n .append('line')\n .attr('x1', 0 + margin.left)\n .attr('x2', width - margin.right)\n .attr('y1', y(tick))\n .attr('y2', y(tick))\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (horizontalStyle === 'every-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n })\n }\n}\n\nconst renderVerticalStyles = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config, x } = context\n const {\n height,\n margin,\n grid: { verticalStyle },\n } = config\n\n if (verticalStyle === 'none') return\n\n if (verticalStyle.startsWith('every-line')) {\n const ticks = context.xTicks || x.ticks()\n\n ticks.forEach((tick) => {\n const line = svg\n .append('line')\n .attr('x1', x(tick))\n .attr('x2', x(tick))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .attr('stroke', 'var(--sc-color-axis-zero-line)')\n .attr('stroke-width', 1)\n\n if (verticalStyle === 'every-line-dashed') {\n line.attr('stroke-dasharray', '4 4')\n }\n })\n }\n}\n\nexport const renderGrid = (context: Omit<ChartContext, 'elements'>) => {\n renderHorizontalStyles(context)\n renderVerticalStyles(context)\n}\n","import { ChartContext } from '../types'\nimport { renderYAxis } from './y-axis'\nimport { renderXAxis } from './x-axis'\nimport { renderGrid } from './grid.ts'\n\nexport const createAxes = (context: Omit<ChartContext, 'elements'>) => {\n const { svg, config } = context\n const { width, height, margin, logo } = config\n\n // x axis\n renderXAxis(context)\n\n // y axis\n renderYAxis(context)\n\n if (logo) {\n svg\n .append('image')\n .attr('xlink:href', config.theme === 'dark' ? logo.picDarkTheme : logo.picLightTheme)\n .attr('width', logo.width)\n .attr('height', logo.height)\n .attr('x', logo.x ?? (width - margin.left - margin.right) / 2 - logo.width / 2 + margin.left)\n .attr('y', logo.y ?? (height - margin.top - margin.bottom) / 2 - logo.height / 2 + margin.top)\n }\n\n // grid\n renderGrid(context)\n}\n","import * as d3 from 'd3'\nimport { ChartConfig, ChartConfigContext, ChartContext } from '../types'\n\nexport const createGradient = (\n defs:\n | d3.Selection<d3.BaseType, unknown, null, undefined>\n | d3.Selection<SVGDefsElement, unknown, null, undefined>,\n gradientId: string,\n options: {\n x1: string\n x2: string\n y1: string\n y2: string\n stops: { offset: string; stopColor: string }[]\n }\n): d3.Selection<SVGLinearGradientElement, unknown, null, undefined> => {\n let gradient: d3.Selection<SVGLinearGradientElement, unknown, null, undefined> =\n defs.select<SVGLinearGradientElement>(`#${gradientId}`)\n\n if (gradient.empty()) {\n gradient = defs\n .append<SVGLinearGradientElement>('linearGradient')\n .attr('gradientUnits', 'userSpaceOnUse')\n .attr('id', gradientId)\n }\n\n gradient\n .attr('x1', options.x1)\n .attr('y1', options.x2)\n .attr('x2', options.y1)\n .attr('y2', options.y2)\n\n options.stops.forEach(({ offset, stopColor }) => {\n gradient.append('stop').attr('offset', offset).attr('stop-color', stopColor)\n })\n\n return gradient\n}\n\nexport const getDefs = (svg: SVGSVGElement) => {\n const defsSelection = d3.select(svg).select('defs')\n const defs = defsSelection.empty() ? d3.select(svg).append('defs') : defsSelection\n\n return defs\n}\n\nexport const getBelowZeroClip = (ctx: Omit<ChartContext, 'elements'>) => {\n const {\n y,\n config: { margin },\n } = ctx\n const clipHeight = y.range()[0] - y(0)\n\n return { x: 0, y: y.range()[0] - clipHeight, width: '100%', height: clipHeight + margin.bottom }\n}\n\nexport const mergeConfig = (base: ChartConfigContext, patch?: ChartConfig): ChartConfigContext => ({\n ...base,\n ...patch,\n margin: {\n ...base.margin,\n ...patch?.margin,\n },\n logo:\n base.logo && patch?.logo\n ? {\n width: patch.logo.width ?? base.logo.width,\n height: patch.logo.height ?? base.logo.height,\n picLightTheme: patch.logo.picLightTheme ?? base.logo.picLightTheme,\n picDarkTheme: patch.logo.picDarkTheme ?? base.logo.picDarkTheme,\n x: patch.logo.x ?? base.logo.x,\n y: patch.logo.y ?? base.logo.y,\n }\n : base.logo,\n\n xAxis: {\n ...base.xAxis,\n ...patch?.xAxis,\n },\n yAxis: {\n ...base.yAxis,\n ...patch?.yAxis,\n },\n grid: {\n ...base.grid,\n ...patch?.grid,\n },\n hover: {\n ...base.hover,\n ...patch?.hover,\n },\n selection: {\n ...base.selection,\n ...patch?.selection,\n },\n})\n","import { Parent, ElementOptions, ChartElements } from './types'\nimport { createGradient, getDefs } from '../utils'\n\nexport const renderBorderRangeLine = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['rangeBorderLeft'] => {\n const svg = parent.node() as SVGSVGElement\n const defs = getDefs(svg)\n\n const createBorderGradient = (gradientId: string, mainColor: string) => {\n return createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'rgba(255, 255, 255, 0)' },\n { offset: '20%', stopColor: mainColor },\n { offset: '60%', stopColor: mainColor },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n }\n\n createBorderGradient('gradient-range-borders-up', 'var(--sc-color-selection-up)')\n createBorderGradient('gradient-range-borders-down', 'var(--sc-color-selection-down)')\n\n const baseClassName = 'sc-charts__border-range-line'\n\n const item = parent\n .append('line')\n .classed(baseClassName, true)\n .style('display', options.hidden ? 'none' : 'block')\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ x1, x2, y1, y2, hidden }) {\n if (x1 !== undefined) item.attr('x1', x1)\n if (x2 !== undefined) item.attr('x2', x2)\n if (y1 !== undefined) item.attr('y1', y1)\n if (y2 !== undefined) item.attr('y2', y2)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n\n destroy() {\n item.remove()\n },\n }\n}\n","import { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderCirclePoint = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['hoverCircle'] => {\n const item = parent\n .append('circle')\n .attr('r', options.radius || 4)\n .style('display', options.hidden ? 'none' : 'block')\n\n const baseClassName = options.className || ''\n if (baseClassName) item.classed(baseClassName, true)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ cx, cy, hidden, fill }) {\n if (cx !== undefined) item.attr('cx', cx)\n if (cy !== undefined) item.attr('cy', cy)\n if (fill !== undefined) item.attr('fill', fill)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n\n destroy() {\n item.remove()\n },\n }\n}\n","import { createGradient, getDefs } from '../utils'\nimport { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderHoverLine = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['hoverLine'] => {\n const baseClassName = 'sc-charts__hover-line'\n const item = parent\n .append('line')\n .style('display', options.hidden ? 'none' : 'block')\n .classed(baseClassName, true)\n const svg = parent.node() as SVGSVGElement\n const defs = getDefs(svg)\n\n const createBorderGradient = (gradientId: string, mainColor: string) => {\n return createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'rgba(255, 255, 255, 0)' },\n { offset: '15%', stopColor: mainColor },\n { offset: '75%', stopColor: mainColor },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n }\n\n createBorderGradient('hover-line-gradient', 'var(--sc-color-hover-line)')\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ x1, x2, y1, y2, hidden }) {\n if (x1 !== undefined) item.attr('x1', x1)\n if (x2 !== undefined) item.attr('x2', x2)\n if (y1 !== undefined) item.attr('y1', y1)\n if (y2 !== undefined) item.attr('y2', y2)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartElements } from './types'\nimport { ChartContext } from '../types'\n\nexport const renderRangeTooltip = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['rangeTooltip'] => {\n const baseClassName = 'sc-charts__range-tooltip'\n\n const foreignObject = context.svg\n .append('foreignObject')\n .classed(baseClassName, true)\n .style('display', 'none')\n\n const div = foreignObject\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-container`)\n\n const divSum = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-sum`)\n const divTime = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-time`)\n\n const timeFormat = d3.timeFormat('%b %e, %I:%M %p')\n const sumFormat = (sum: number) => {\n const fmt = d3.format(',.2f')\n return `${sum < 0 ? '-' : ''}$${fmt(Math.abs(sum))}`\n }\n\n return {\n className(action, mod) {\n if (action === 'remove') foreignObject.classed(`${baseClassName}${mod}`, false)\n else foreignObject.classed(`${baseClassName}${mod}`, true)\n },\n update({ leftPoint, rightPoint, x, y, hidden, closest }) {\n if (x !== undefined) foreignObject.attr('x', x)\n if (y !== undefined) foreignObject.attr('y', y)\n if (leftPoint && rightPoint && closest && x !== undefined) {\n const { comparisonValue } = context.config.selection\n const delta = rightPoint.value - leftPoint.value\n\n const selectionCenter = (context.x(rightPoint.date) + context.x(leftPoint.date)) / 2\n const directionValue =\n context.x(closest.date) < selectionCenter ? leftPoint.value : rightPoint.value\n\n /* if the front provides comparisonValue then one formula, if not then another. \n Comparisons with zeros are not allowed, in this case we do not show the percentage */\n let percent = null\n\n if (comparisonValue && comparisonValue !== 0 && directionValue !== 0) {\n percent = ((directionValue / comparisonValue) * 100).toFixed(2)\n } else if (leftPoint.value) {\n percent = ((delta / Math.abs(leftPoint.value)) * 100).toFixed(2)\n }\n\n const percentStr = percent === null ? '' : `(${percent}%)`\n\n const valueText = `${sumFormat(delta)}${percentStr}`\n const dateText = `${timeFormat(leftPoint.date)} to ${timeFormat(rightPoint.date)}`\n divSum\n .text(valueText)\n .append('xhtml:div')\n .html(icon)\n .attr('class', `${baseClassName}-sum-icon`)\n divTime.text(dateText)\n\n const lastX = context.x(context.data[context.data.length - 1].date)\n const firstX = context.x(context.data[0].date)\n\n const tooltipDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n if (tooltipDimensions.x < firstX) {\n foreignObject.attr('x', firstX + tooltipDimensions.width / 2)\n }\n if (tooltipDimensions.x > lastX - tooltipDimensions.width) {\n foreignObject.attr('x', lastX - tooltipDimensions.width / 2)\n }\n }\n\n if (hidden !== undefined) {\n foreignObject.style('display', hidden ? 'none' : 'block')\n }\n },\n\n destroy() {\n foreignObject.remove()\n },\n }\n}\n\nconst icon = `\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7 0.5C5.71442 0.5 4.45772 0.881218 3.3888 1.59545C2.31988 2.30968 1.48676 3.32484 0.994786 4.51256C0.502816 5.70028 0.374095 7.00721 0.624899 8.26809C0.875703 9.52896 1.49477 10.6872 2.40381 11.5962C3.31285 12.5052 4.47104 13.1243 5.73192 13.3751C6.99279 13.6259 8.29973 13.4972 9.48744 13.0052C10.6752 12.5132 11.6903 11.6801 12.4046 10.6112C13.1188 9.54229 13.5 8.28558 13.5 7C13.4982 5.27665 12.8128 3.62441 11.5942 2.40582C10.3756 1.18722 8.72335 0.50182 7 0.5ZM9.35375 6.85375C9.30732 6.90024 9.25217 6.93712 9.19147 6.96228C9.13077 6.98744 9.06571 7.00039 9 7.00039C8.93429 7.00039 8.86923 6.98744 8.80853 6.96228C8.74783 6.93712 8.69269 6.90024 8.64625 6.85375L7.5 5.70687V9.5C7.5 9.63261 7.44732 9.75979 7.35356 9.85355C7.25979 9.94732 7.13261 10 7 10C6.86739 10 6.74022 9.94732 6.64645 9.85355C6.55268 9.75979 6.5 9.63261 6.5 9.5V5.70687L5.35375 6.85375C5.25993 6.94757 5.13268 7.00028 5 7.00028C4.86732 7.00028 4.74007 6.94757 4.64625 6.85375C4.55243 6.75993 4.49972 6.63268 4.49972 6.5C4.49972 6.36732 4.55243 6.24007 4.64625 6.14625L6.64625 4.14625C6.69269 4.09976 6.74783 4.06288 6.80853 4.03772C6.86923 4.01256 6.9343 3.99961 7 3.99961C7.06571 3.99961 7.13077 4.01256 7.19147 4.03772C7.25217 4.06288 7.30732 4.09976 7.35375 4.14625L9.35375 6.14625C9.40024 6.19269 9.43712 6.24783 9.46228 6.30853C9.48744 6.36923 9.5004 6.43429 9.5004 6.5C9.5004 6.56571 9.48744 6.63077 9.46228 6.69147C9.43712 6.75217 9.40024 6.80731 9.35375 6.85375Z\" \n fill=\"currentColor\"/>\n </svg>\n`\n","import * as d3 from 'd3'\nimport { ChartElements } from './types'\nimport { ChartContext } from '../types'\n\nexport const renderHoverTooltip = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['hoverTooltip'] => {\n const baseClassName = 'sc-charts__hover-tooltip'\n\n const foreignObject = context.svg\n .append('foreignObject')\n .classed(baseClassName, true)\n .style('display', 'none')\n\n const div = foreignObject\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-container`)\n\n const divSum = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-sum`)\n .html('$sum')\n\n const divTime = div\n .append('xhtml:div')\n .attr('xmlns', 'http://www.w3.org/1999/xhtml')\n .attr('class', `${baseClassName}-time`)\n .html('Date')\n\n const timeFormat = d3.timeFormat('%a, %b %d, %-I:%M %p')\n const sumFormat = (sum: number) => {\n const fmt = d3.format(',.2f')\n return `${sum < 0 ? '-' : ''}$${fmt(Math.abs(sum))}`\n }\n\n return {\n className(action, mod) {\n if (action === 'remove') foreignObject.classed(`${baseClassName}${mod}`, false)\n else foreignObject.classed(`${baseClassName}${mod}`, true)\n },\n update({ x, y, hidden, dataItem }) {\n if (x !== undefined) foreignObject.attr('x', x)\n if (y !== undefined) foreignObject.attr('y', y)\n\n if (dataItem && x !== undefined) {\n divSum.text(sumFormat(dataItem.value))\n divTime.text(timeFormat(dataItem.date))\n\n const tooltipDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n const tooltipOffset = 16\n\n const tooltipX =\n x + tooltipOffset + tooltipDimensions.width >\n context.config.width - context.config.margin.right\n ? x - tooltipOffset - tooltipDimensions.width\n : x + tooltipOffset\n\n foreignObject.attr('x', tooltipX)\n }\n\n if (hidden !== undefined) {\n foreignObject.style('display', hidden ? 'none' : 'block')\n }\n },\n\n destroy() {\n foreignObject.remove()\n },\n }\n}\n","import { ChartConfigContext, ChartContext } from './types'\nimport * as d3 from 'd3'\n\nexport const defaultConfig: Omit<ChartConfigContext, 'width' | 'height'> = {\n margin: { top: 10, right: 30, bottom: 20, left: 10 },\n theme: 'light',\n logo: {\n width: 406,\n height: 113,\n x: null,\n y: null,\n picDarkTheme: null,\n picLightTheme: null,\n },\n hasMainLineArea: false,\n hover: {\n enable: true,\n range: '1m',\n transitionDuration: 150,\n transitionName: 'default',\n },\n selection: {\n enable: true,\n comparisonValue: null,\n },\n xAxis: {\n customTicks: false,\n tickFormat: null,\n ticks: null,\n tickValues: null,\n isShow: false,\n },\n yAxis: {\n customTicks: false,\n tickFormat: null,\n ticks: null,\n tickValues: null,\n isShow: true,\n },\n grid: {\n horizontalStyle: 'zero-line-dashed',\n verticalStyle: 'none',\n },\n enableBelowZeroLine: false,\n curveTension: 1,\n}\n\nexport const curveFunction = (ctx: Omit<ChartContext, 'elements'>) =>\n d3.curveCardinal.tension(ctx.config.curveTension)\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements } from './types'\nimport { createGradient, getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderMainLineArea = (\n ctx: Omit<ChartContext, 'elements'>\n): ChartElements['mainLineArea'] => {\n const { svg, data, x, y, config } = ctx\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const gradientId = 'main-line-area-gradient'\n\n createGradient(defs, gradientId, {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-main-line)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n\n const areaGen = d3\n .area<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y0(y.range()[0])\n .y1((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const baseClassName = 'sc-charts__main-line-area'\n\n const item = svg\n .append('path')\n .datum(data)\n .attr('d', areaGen)\n .attr('class', baseClassName)\n .classed(`${baseClassName}_hidden`, !config.hasMainLineArea)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, hidden }) {\n if (data !== undefined) item.datum(data).attr('d', areaGen)\n if (hidden !== undefined) {\n if (!config.hasMainLineArea) return null\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ClipProps } from './types'\nimport { createGradient, getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderRangeLineArea = (\n ctx: Omit<ChartContext, 'elements'>,\n options: { clip?: ClipProps } = {}\n): ChartElements['rangeLineArea'] => {\n const baseClassName = 'sc-charts__range-line-area'\n const { svg, x, y, config, data, chartId } = ctx\n const { clip: initClip } = options\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const gradientId = 'range-line-area-gradient'\n\n createGradient(defs, gradientId + '_up', {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-selection-up)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n createGradient(defs, gradientId + '_down', {\n x1: '0%',\n y1: '0%',\n x2: '0%',\n y2: '100%',\n stops: [\n { offset: '0%', stopColor: 'var(--sc-color-selection-down)' },\n { offset: '100%', stopColor: 'rgba(255, 255, 255, 0)' },\n ],\n })\n\n const areaGen = d3\n .area<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y0(y.range()[0])\n .y1((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const clipId = `${chartId}-clip-${baseClassName}`\n const clipPath = defs.append('clipPath').attr('id', clipId)\n\n const clipRect = clipPath\n .append('rect')\n .attr('x', initClip?.x || 0)\n .attr('y', initClip?.y || 0)\n .attr('width', initClip?.width || '100%')\n .attr('height', initClip?.height || '100%')\n\n const item = svg\n .append('path')\n .datum(data)\n .attr('d', areaGen)\n .attr('class', baseClassName)\n .classed(`${baseClassName}_hidden`, !config.hasMainLineArea)\n .attr('clip-path', `url(#${clipId})`)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, hidden, clip }) {\n if (data !== undefined) item.datum(data).attr('d', areaGen)\n if (hidden !== undefined) {\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n if (clip !== undefined) {\n clipRect\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartFabricElement, ClipProps, DataLineUpdateProps } from './types'\nimport { getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderDataLine = (\n ctx: Omit<ChartContext, 'elements'>,\n options: { baseClassName: string; id: string; clip?: ClipProps }\n): ChartFabricElement<Partial<DataLineUpdateProps>> => {\n const { svg, data, x, y, chartId } = ctx\n const { baseClassName, id, clip: initClip } = options\n\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const clipId = `${chartId}-clip-${baseClassName}`\n const clipPath = defs.append('clipPath').attr('id', clipId)\n\n const clipRect = clipPath\n .append('rect')\n .attr('x', initClip?.x || 0)\n .attr('y', initClip?.y || 0)\n .attr('width', initClip?.width || '100%')\n .attr('height', initClip?.height || '100%')\n\n const item = svg\n .append('path')\n .classed(baseClassName, true)\n .datum(data)\n .attr('d', lineGen)\n .attr('id', id)\n .attr('clip-path', `url(#${clipId})`)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, clip, hidden }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (hidden !== undefined) {\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n if (clip !== undefined) {\n clipRect\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartFabricElement, ClipProps, DataLineUpdateProps } from './types'\nimport { getDefs } from '../utils'\nimport { curveFunction } from '../constants'\n\nexport const renderHighlightLine = (\n ctx: Omit<ChartContext, 'elements'>,\n options: { baseClassName: string; id: string; clip?: ClipProps }\n): ChartFabricElement<Partial<DataLineUpdateProps>> => {\n const { svg, data, x, y, chartId, config } = ctx\n const { baseClassName, id, clip: initClip } = options\n\n const svgNode = svg.node() as SVGSVGElement\n const defs = getDefs(svgNode)\n\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(curveFunction(ctx))\n\n const clipId = `${chartId}-clip-${baseClassName}`\n const clipPath = defs.append('clipPath').attr('id', clipId)\n\n const clipRect = clipPath\n .append('rect')\n .attr('x', initClip?.x || 0)\n .attr('y', initClip?.y || 0)\n .attr('width', initClip?.width || '100%')\n .attr('height', initClip?.height || '100%')\n\n const item = svg\n .append('path')\n .classed(baseClassName, true)\n .datum(data)\n .attr('d', lineGen)\n .attr('id', id)\n .attr('clip-path', `url(#${clipId})`)\n\n return {\n className(action, mod) {\n if (action === 'remove') item.classed(`${baseClassName}${mod}`, false)\n else item.classed(`${baseClassName}${mod}`, true)\n },\n update({ data, clip, hidden }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (hidden !== undefined) {\n item.classed(`${baseClassName}_hidden`, hidden)\n }\n if (clip !== undefined) {\n if (config.hover.transitionName === 'default') {\n clipRect\n .transition()\n .duration(config.hover.transitionDuration)\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n .ease(d3.easeLinear)\n } else {\n clipRect\n .attr('x', clip.x)\n .attr('y', clip.y)\n .attr('width', clip.width)\n .attr('height', clip.height)\n }\n }\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import { ChartElements } from './types'\nimport { renderBorderRangeLine } from './range-border'\nimport { renderCirclePoint } from './circle-point'\nimport { renderHoverLine } from './hover-line'\nimport { ChartContext } from '../types'\nimport { renderRangeTooltip } from './range-tooltip'\nimport { renderHoverTooltip } from './hover-tooltip'\nimport { renderMainLineArea } from './main-line-area'\nimport { renderRangeLineArea } from './range-line-area'\nimport { renderDataLine } from './data-line'\nimport { getBelowZeroClip } from '../utils'\nimport { renderHighlightLine } from './highlight-line'\n\n// render each elements by order\nexport const createElements = (context: Omit<ChartContext, 'elements'>): ChartElements => {\n const mainLine = renderDataLine(context, {\n baseClassName: `sc-charts__main-line`,\n id: `${context.chartId}-sc-charts__main-line`,\n })\n const mainLineArea = renderMainLineArea(context)\n\n const hoverLine = renderHoverLine(context.svg)\n const highlightLine = renderHighlightLine(context, {\n baseClassName: `sc-charts__highlight-line`,\n id: `${context.chartId}-sc-charts__highlight-line`,\n clip: { x: 0, y: 0, width: '0', height: '0' },\n })\n\n let belowZeroLine = null\n\n if (context.config.enableBelowZeroLine) {\n belowZeroLine = renderDataLine(context, {\n baseClassName: `sc-charts__below-zero-line`,\n id: `${context.chartId}-sc-charts__below-zero-line`,\n clip: getBelowZeroClip(context),\n })\n }\n\n const hoverCircle = renderCirclePoint(context.svg, {\n className: 'sc-charts__hover-circle',\n hidden: true,\n })\n const rangeBorderLeft = renderBorderRangeLine(context.svg)\n const rangeBorderRight = renderBorderRangeLine(context.svg)\n const rangeLine = renderDataLine(context, {\n baseClassName: `sc-charts__range-line`,\n id: `${context.chartId}-sc-charts__range-line`,\n clip: { x: 0, y: 0, width: '0', height: '0' },\n })\n const rangeCircleLeft = renderCirclePoint(context.svg, {\n className: 'sc-charts__range-circle-left',\n hidden: true,\n })\n const rangeCircleRight = renderCirclePoint(context.svg, {\n className: 'sc-charts__range-circle-right',\n hidden: true,\n })\n const rangeTooltip = renderRangeTooltip(context)\n const hoverTooltip = renderHoverTooltip(context)\n const rangeLineArea = renderRangeLineArea(context)\n\n return {\n hoverLine,\n hoverCircle,\n rangeBorderLeft,\n rangeBorderRight,\n rangeLine,\n rangeLineArea,\n rangeCircleLeft,\n rangeCircleRight,\n mainLine,\n rangeTooltip,\n highlightLine,\n hoverTooltip,\n mainLineArea,\n belowZeroLine,\n }\n}\n","import { ScaleTime } from 'd3'\nimport { HoverRange } from '../../types'\n\nexport const getClipForRange = (\n hoverRange: HoverRange,\n closestDate: Date,\n x: ScaleTime<number, number, never>\n) => {\n const match = hoverRange.match(/^(\\d+)([dMhmw])$/)\n\n if (!match) {\n console.warn('Invalid hoverRange:', hoverRange)\n return {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%',\n }\n }\n\n const [, amountStr, unit] = match\n const amount = parseInt(amountStr, 10)\n\n const [domainStart, domainEnd] = x.domain()\n\n let cursor = new Date(domainStart)\n let next = new Date(cursor)\n\n while (next < domainEnd) {\n switch (unit) {\n case 'M':\n next.setMinutes(cursor.getMinutes() + amount)\n break\n case 'h':\n next.setHours(cursor.getHours() + amount)\n break\n case 'd':\n next.setDate(cursor.getDate() + amount)\n break\n case 'w':\n next.setDate(cursor.getDate() + amount * 7)\n break\n case 'm':\n next = new Date(cursor.getFullYear(), cursor.getMonth() + amount, 1)\n break\n default:\n return {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%',\n }\n }\n\n if (closestDate >= cursor && closestDate < next) {\n const xStart = x(cursor)\n const xEnd = x(next)\n return {\n x: xStart,\n y: 0,\n width: xEnd - xStart,\n height: '100%',\n }\n }\n\n cursor = new Date(next)\n }\n\n return {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%',\n }\n}\n","import { ChartContext, ParsedDataPoint } from '../../types'\nimport { getBelowZeroClip } from '../../utils'\nimport { getClipForRange } from './utils'\n\nexport const renderHoverItems = (ctx: ChartContext, closest: ParsedDataPoint) => {\n const {\n x,\n y,\n elements,\n config: { margin, height, hover },\n } = ctx\n\n elements.hoverLine.update({\n x1: x(closest.date),\n x2: x(closest.date),\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.hoverCircle.update({\n cx: x(closest.date),\n cy: y(closest.value),\n hidden: false,\n })\n\n elements.hoverTooltip.update({\n dataItem: closest,\n x: x(closest.date),\n y: 0,\n hidden: false,\n })\n\n const baseClip = getClipForRange(hover.range, closest.date, x)\n\n elements.highlightLine.update({\n clip: baseClip,\n hidden: false,\n })\n\n elements.belowZeroLine?.update({\n clip: {\n ...baseClip,\n y: y(0),\n height: y.range()[0] - y(0) + margin.bottom,\n },\n })\n\n elements.mainLine.className('add', '_muted')\n}\n\nexport const hideHoverItems = (ctx: ChartContext) => {\n const { elements } = ctx\n elements.hoverLine.update({ hidden: true })\n elements.hoverCircle.update({ hidden: true })\n elements.highlightLine.update({ hidden: true })\n elements.mainLine.className('remove', '_muted')\n elements.hoverTooltip.update({ hidden: true })\n if (ctx.action !== 'selection') {\n elements.belowZeroLine?.update({\n clip: getBelowZeroClip(ctx),\n })\n }\n}\n","import { ChartElements } from '../elements/types'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nconst controlIsGrowingClasses = (elements: ChartElements, isGrowing: boolean) => {\n const names: (keyof Required<\n Pick<\n ChartElements,\n | 'rangeBorderLeft'\n | 'rangeBorderRight'\n | 'rangeCircleLeft'\n | 'rangeCircleRight'\n | 'rangeLine'\n | 'rangeLineArea'\n | 'rangeTooltip'\n >\n >)[] = [\n 'rangeBorderLeft',\n 'rangeBorderRight',\n 'rangeCircleLeft',\n 'rangeCircleRight',\n 'rangeLine',\n 'rangeLineArea',\n 'rangeTooltip',\n ]\n\n names.forEach((name) => {\n if (isGrowing) {\n elements[name].className('remove', '_down')\n elements[name].className('add', '_up')\n } else {\n elements[name].className('remove', '_up')\n elements[name].className('add', '_down')\n }\n })\n}\n\nexport const renderSelectionItems = (\n ctx: ChartContext,\n startPoint: ParsedDataPoint,\n closest: ParsedDataPoint\n) => {\n const {\n x,\n y,\n config: { margin, height },\n elements,\n } = ctx\n\n const leftPoint = x(startPoint.date) < x(closest.date) ? startPoint : closest\n const rightPoint = x(startPoint.date) >= x(closest.date) ? startPoint : closest\n const isGrowing = rightPoint.value - leftPoint.value >= 0\n const xLeft = x(leftPoint.date)\n const xRight = x(rightPoint.date)\n const selectionWidth = xRight - xLeft\n\n elements.rangeBorderLeft.update({\n x1: xLeft,\n x2: xLeft,\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.rangeBorderRight.update({\n x1: xRight,\n x2: xRight,\n y1: margin.top,\n y2: height - margin.bottom,\n hidden: false,\n })\n\n elements.rangeCircleLeft.update({\n cx: xLeft,\n cy: y(leftPoint.value),\n hidden: false,\n })\n\n elements.rangeCircleRight.update({\n cx: xRight,\n cy: y(rightPoint.value),\n hidden: false,\n })\n\n elements.rangeLine.update({\n clip: {\n x: xLeft,\n y: 0,\n width: selectionWidth,\n height: y.range()[0],\n },\n hidden: false,\n })\n\n elements.rangeLineArea.update({\n clip: {\n x: xLeft,\n y: 0,\n width: selectionWidth,\n height: y.range()[0],\n },\n hidden: false,\n })\n\n elements.rangeTooltip.update({\n rightPoint,\n leftPoint,\n closest,\n x: xLeft + selectionWidth / 2,\n y: 0,\n hidden: false,\n })\n\n elements.belowZeroLine?.update({\n hidden: true,\n })\n\n elements.mainLineArea.update({ hidden: true })\n\n controlIsGrowingClasses(elements, isGrowing)\n elements.mainLine.className('add', '_selected-muted')\n}\n\nexport const hideSelectionItems = (ctx: ChartContext) => {\n const { elements } = ctx\n elements.rangeLine.update({ hidden: true })\n elements.rangeLineArea.update({ hidden: true })\n elements.rangeBorderLeft.update({ hidden: true })\n elements.rangeBorderRight.update({ hidden: true })\n elements.rangeCircleLeft.update({ hidden: true })\n elements.rangeCircleRight.update({ hidden: true })\n elements.rangeTooltip.update({ hidden: true })\n elements.mainLine.className('remove', '_selected-muted')\n elements.mainLineArea.update({ hidden: false })\n elements.belowZeroLine?.update({ hidden: false })\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { hideHoverItems, renderHoverItems } from './hover'\nimport { hideSelectionItems, renderSelectionItems } from './selection'\n\nexport const setupInteractions = (ctx: ChartContext) => {\n const { svg, data, x, config } = ctx\n const { height, margin, width, hover, selection } = config\n let startPoint: ParsedDataPoint | null = null\n let isDragging = false\n\n const findClosest = (mouseX: number) => {\n return data.reduce((a, b) =>\n Math.abs(x(a.date) - mouseX) < Math.abs(x(b.date) - mouseX) ? a : b\n )\n }\n\n const overlay = svg\n .append('rect')\n .attr('width', width - margin.left - margin.right)\n .attr('height', height - margin.top - margin.bottom)\n .attr('x', margin.left)\n .attr('y', margin.top)\n .attr('fill', 'transparent')\n\n overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n if (!isDragging && hover.enable) {\n ctx.action = 'hover'\n renderHoverItems(ctx, closest)\n } else {\n ctx.action = isDragging ? 'selection' : 'none'\n hideHoverItems(ctx)\n }\n\n if (startPoint && selection.enable) {\n ctx.action = 'selection'\n renderSelectionItems(ctx, startPoint, closest)\n }\n })\n .on('mouseleave', () => {\n ctx.action = 'none'\n isDragging = false\n startPoint = null\n hideHoverItems(ctx)\n hideSelectionItems(ctx)\n })\n .on('mousedown', function (event) {\n if (selection.enable) {\n isDragging = true\n ctx.action = 'selection'\n const [mouseX] = d3.pointer(event, this)\n startPoint = findClosest(mouseX)\n }\n })\n .on('mouseup', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n isDragging = false\n startPoint = null\n ctx.action = 'hover'\n\n if (selection.enable) hideSelectionItems(ctx)\n if (hover.enable) renderHoverItems(ctx, closest)\n })\n}\n","import * as d3 from 'd3'\nimport { ChartConfigContext, ParsedDataPoint } from '../types'\n\nexport const createXScale = (data: ParsedDataPoint[], config: ChartConfigContext) => {\n const { width, margin } = config\n\n const scale = d3.scaleTime()\n\n const xExtent = d3.extent(data, (d) => new Date(d.date))\n\n if (xExtent[0] == null || xExtent[1] == null) return scale\n\n return scale.domain([xExtent[0], xExtent[1]]).range([margin.left, width - margin.right])\n}\n\nexport const createYScale = (data: ParsedDataPoint[], config: ChartConfigContext) => {\n const { height, margin } = config\n\n const yMax = d3.max(data, (d) => d.value) ?? 0\n const yMin = d3.min(data, (d) => d.value) ?? 0\n\n return d3\n .scaleLinear()\n .domain([yMin, yMax])\n .range([height - margin.bottom, margin.top])\n}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { ChartContext, ParsedDataPoint, LineChartOptions } from './types'\nimport { defaultConfig } from './constants'\nimport { mergeConfig } from './utils'\nimport { createYScale, createXScale } from './scales'\nimport '../../css/line-chart.css'\n\nexport const createLineChart = (selector: string, initialOptions: LineChartOptions) => {\n const container = d3.select(selector)\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return null\n }\n if (!initialOptions.chartId || !/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(initialOptions.chartId)) {\n console.error(`chartId is required and must be a valid id \n (only letters, numbers or underscores. The first character must be a letter)`)\n return null\n }\n\n const svg = container.append('svg')\n const containerNode = container.node() as HTMLElement\n const boundingRect = containerNode.getBoundingClientRect()\n const width = boundingRect.width\n const height = boundingRect.height\n let currentConfig = mergeConfig({ ...defaultConfig, width, height }, initialOptions.config)\n\n const render = (options: Omit<LineChartOptions, 'chartId'>, isUpdate = false) => {\n if (isUpdate && options.config) {\n currentConfig = mergeConfig(currentConfig, options.config)\n }\n\n const data: ParsedDataPoint[] = options.data\n .map((d) => ({ date: new Date(d.date), value: d.value }))\n .sort((a, b) => a.date.getTime() - b.date.getTime())\n\n const x = createXScale(data, currentConfig)\n const y = createYScale(data, currentConfig)\n\n svg\n .attr('class', `sc-charts sc-charts__${currentConfig.theme}`)\n .attr('preserveAspectRatio', 'xMinYMin meet')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .style('width', '100%')\n .style('height', '100%')\n .selectAll('*')\n .remove()\n\n const preContext: Omit<ChartContext, 'elements'> = {\n chartId: initialOptions.chartId,\n svg,\n data,\n x,\n y,\n config: currentConfig,\n action: 'none',\n }\n\n createAxes(preContext)\n\n const context: ChartContext = {\n ...preContext,\n elements: createElements(preContext),\n }\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: Omit<LineChartOptions, 'chartId'>) => render(options, true),\n destroy: () => svg.remove(),\n }\n}\n"],"names":["renderYAxis","context","svg","config","y","width","margin","yAxis","customTicks","tickFormat","tickValues","ticks","isShow","g","axis","d3","d","num","sign","formatted","renderXAxis","x","height","xAxis","renderHorizontalStyles","horizontalStyle","line","tick","renderVerticalStyles","verticalStyle","renderGrid","createAxes","logo","createGradient","defs","gradientId","options","gradient","offset","stopColor","getDefs","defsSelection","getBelowZeroClip","ctx","clipHeight","mergeConfig","base","patch","renderBorderRangeLine","parent","createBorderGradient","mainColor","baseClassName","item","action","mod","x1","x2","y1","y2","hidden","renderCirclePoint","cx","cy","fill","renderHoverLine","renderRangeTooltip","foreignObject","div","divSum","divTime","timeFormat","sumFormat","sum","fmt","leftPoint","rightPoint","closest","comparisonValue","delta","selectionCenter","directionValue","percent","percentStr","valueText","dateText","icon","lastX","firstX","tooltipDimensions","renderHoverTooltip","dataItem","tooltipOffset","tooltipX","defaultConfig","curveFunction","renderMainLineArea","data","svgNode","areaGen","renderRangeLineArea","chartId","initClip","clipId","clipRect","clip","renderDataLine","id","lineGen","renderHighlightLine","createElements","mainLine","mainLineArea","hoverLine","highlightLine","belowZeroLine","hoverCircle","rangeBorderLeft","rangeBorderRight","rangeLine","rangeCircleLeft","rangeCircleRight","rangeTooltip","hoverTooltip","rangeLineArea","getClipForRange","hoverRange","closestDate","match","amountStr","unit","amount","domainStart","domainEnd","cursor","next","xStart","xEnd","renderHoverItems","elements","hover","baseClip","_a","hideHoverItems","controlIsGrowingClasses","isGrowing","name","renderSelectionItems","startPoint","xLeft","xRight","selectionWidth","hideSelectionItems","setupInteractions","selection","isDragging","findClosest","mouseX","a","b","event","createXScale","scale","xExtent","createYScale","yMax","yMin","createLineChart","selector","initialOptions","container","boundingRect","currentConfig","render","isUpdate","preContext"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- (function(x,k){typeof exports=="object"&&typeof module<"u"?k(exports,require("d3")):typeof define=="function"&&define.amd?define(["exports","d3"],k):(x=typeof globalThis<"u"?globalThis:x||self,k(x.ChartsCore={},x.d3))})(this,function(x,k){"use strict";function F(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const s=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,s.get?s:{enumerable:!0,get:()=>e[a]})}}return t.default=e,Object.freeze(t)}const v=F(k),I=e=>{const{svg:t,config:a,y:s}=e,{width:l,margin:o,yAxis:n}=a,{customTicks:i,tickFormat:r,tickValues:c,ticks:u,isShow:g}=n;if(!g)return null;t.append("g").attr("transform",`translate(${l-o.right},0)`).call(d=>{let h=v.axisRight(s);i?(r&&(h=h.tickFormat(r)),u&&(h=Array.isArray(u)?h.ticks(...u):h.ticks(u)),c&&(h=h.tickValues(c))):h=h.tickFormat(f=>{const m=Number(f),p=m<0?"-":"",y=v.format(".0s")(Math.abs(m));return`${p}${y}`}),d.call(h)}).call(d=>{let h=[];d.selectAll(".tick").each(f=>h.push(f)),e.yTicks=h}).call(d=>d.select(".domain").remove()).call(d=>d.selectAll(".tick line").remove()).call(d=>d.selectAll(".tick text").classed("sc-charts__y-axis-tick",!0)).attr("font-family","inherit")},z=e=>{const{svg:t,config:a,x:s}=e,{height:l,margin:o,xAxis:n}=a,{isShow:i,tickValues:r,tickFormat:c,customTicks:u,ticks:g}=n;if(!i)return null;t.append("g").attr("transform",`translate(0,${l-o.bottom})`).call(d=>{let h=v.axisBottom(s);u?(c&&(h=h.tickFormat(c)),g&&(h=Array.isArray(g)?h.ticks(...g):h.ticks(g)),r&&(h=h.tickValues(r))):h.ticks(5),d.call(h)}).call(d=>d.select(".domain").remove()).call(d=>{let h=[];d.selectAll(".tick").each(f=>h.push(f)),e.xTicks=h}).call(d=>d.selectAll(".tick line").remove()).call(d=>d.selectAll(".tick text").classed("sc-charts__x-axis-tick",!0)).attr("font-family","inherit")},Z=e=>{const{svg:t,config:a,y:s}=e,{width:l,margin:o,grid:{horizontalStyle:n}}=a;if(n!=="none"){if(n.startsWith("zero-line")){const i=t.append("line").attr("x1",0+o.left).attr("x2",l-o.right).attr("y1",s(0)).attr("y2",s(0)).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);n==="zero-line-dashed"&&i.attr("stroke-dasharray","4 4")}n.startsWith("every-line")&&(e.yTicks||s.ticks()).forEach(r=>{const c=t.append("line").attr("x1",0+o.left).attr("x2",l-o.right).attr("y1",s(r)).attr("y2",s(r)).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);n==="every-line-dashed"&&c.attr("stroke-dasharray","4 4")})}},G=e=>{const{svg:t,config:a,x:s}=e,{height:l,margin:o,grid:{verticalStyle:n}}=a;n!=="none"&&n.startsWith("every-line")&&(e.xTicks||s.ticks()).forEach(r=>{const c=t.append("line").attr("x1",s(r)).attr("x2",s(r)).attr("y1",o.top).attr("y2",l-o.bottom).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);n==="every-line-dashed"&&c.attr("stroke-dasharray","4 4")})},j=e=>{Z(e),G(e)},H=e=>{const{svg:t,config:a}=e,{width:s,height:l,margin:o,logo:n}=a;z(e),I(e),n&&t.append("image").attr("xlink:href",a.theme==="dark"?n.picDarkTheme:n.picLightTheme).attr("width",n.width).attr("height",n.height).attr("x",n.x??(s-o.left-o.right)/2-n.width/2+o.left).attr("y",n.y??(l-o.top-o.bottom)/2-n.height/2+o.top),j(e)},$=(e,t,a)=>{let s=e.select(`#${t}`);return s.empty()&&(s=e.append("linearGradient").attr("gradientUnits","userSpaceOnUse").attr("id",t)),s.attr("x1",a.x1).attr("y1",a.x2).attr("x2",a.y1).attr("y2",a.y2),a.stops.forEach(({offset:l,stopColor:o})=>{s.append("stop").attr("offset",l).attr("stop-color",o)}),s},C=e=>{const t=v.select(e).select("defs");return t.empty()?v.select(e).append("defs"):t},N=e=>{const{y:t,config:{margin:a}}=e,s=t.range()[0]-t(0);return{x:0,y:t.range()[0]-s,width:"100%",height:s+a.bottom}},D=(e,t)=>({...e,...t,margin:{...e.margin,...t==null?void 0:t.margin},logo:e.logo&&(t!=null&&t.logo)?{width:t.logo.width??e.logo.width,height:t.logo.height??e.logo.height,picLightTheme:t.logo.picLightTheme??e.logo.picLightTheme,picDarkTheme:t.logo.picDarkTheme??e.logo.picDarkTheme,x:t.logo.x??e.logo.x,y:t.logo.y??e.logo.y}:e.logo,xAxis:{...e.xAxis,...t==null?void 0:t.xAxis},yAxis:{...e.yAxis,...t==null?void 0:t.yAxis},grid:{...e.grid,...t==null?void 0:t.grid}}),S=(e,t={})=>{const a=e.node(),s=C(a),l=(i,r)=>$(s,i,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"20%",stopColor:r},{offset:"60%",stopColor:r},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});l("gradient-range-borders-up","var(--sc-color-selection-up)"),l("gradient-range-borders-down","var(--sc-color-selection-down)");const o="sc-charts__border-range-line",n=e.append("line").classed(o,!0).style("display",t.hidden?"none":"block");return{className(i,r){i==="remove"?n.classed(`${o}${r}`,!1):n.classed(`${o}${r}`,!0)},update({x1:i,x2:r,y1:c,y2:u,hidden:g}){i!==void 0&&n.attr("x1",i),r!==void 0&&n.attr("x2",r),c!==void 0&&n.attr("y1",c),u!==void 0&&n.attr("y2",u),g!==void 0&&n.style("display",g?"none":"block")},destroy(){n.remove()}}},T=(e,t={})=>{const a=e.append("circle").attr("r",t.radius||4).style("display",t.hidden?"none":"block"),s=t.className||"";return s&&a.classed(s,!0),{className(l,o){l==="remove"?a.classed(`${s}${o}`,!1):a.classed(`${s}${o}`,!0)},update({cx:l,cy:o,hidden:n,fill:i}){l!==void 0&&a.attr("cx",l),o!==void 0&&a.attr("cy",o),i!==void 0&&a.attr("fill",i),n!==void 0&&a.style("display",n?"none":"block")},destroy(){a.remove()}}},V=(e,t={})=>{const a="sc-charts__hover-line",s=e.append("line").style("display",t.hidden?"none":"block").classed(a,!0),l=e.node(),o=C(l);return((i,r)=>$(o,i,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"15%",stopColor:r},{offset:"75%",stopColor:r},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]}))("hover-line-gradient","var(--sc-color-hover-line)"),{className(i,r){i==="remove"?s.classed(`${a}${r}`,!1):s.classed(`${a}${r}`,!0)},update({x1:i,x2:r,y1:c,y2:u,hidden:g}){i!==void 0&&s.attr("x1",i),r!==void 0&&s.attr("x2",r),c!==void 0&&s.attr("y1",c),u!==void 0&&s.attr("y2",u),g!==void 0&&s.style("display",g?"none":"block")},destroy(){s.remove()}}},E=e=>{const t="sc-charts__range-tooltip",a=e.svg.append("foreignObject").classed(t,!0).style("display","none"),s=a.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-container`),l=s.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-sum`),o=s.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-time`),n=v.timeFormat("%b %e, %I:%M %p");return{className(i,r){i==="remove"?a.classed(`${t}${r}`,!1):a.classed(`${t}${r}`,!0)},update({leftPoint:i,rightPoint:r,x:c,y:u,hidden:g}){if(c!==void 0&&a.attr("x",c),u!==void 0&&a.attr("y",u),i&&r){const d=r.value-i.value,h=(d/i.value*100).toFixed(2),f=`${d<0?"-":""}$${Math.abs(d).toFixed(2)} (${h}%)`,m=`${n(i.date)} to ${n(r.date)}`;l.text(f).append("xhtml:div").html(O).attr("class",`${t}-sum-icon`),o.text(m);const p=e.x(e.data[e.data.length-1].date),y=e.x(e.data[0].date),w=s.node().getBoundingClientRect();w.x<y&&a.attr("x",y+w.width/2),w.x>p-w.width&&a.attr("x",p-w.width/2)}g!==void 0&&a.style("display",g?"none":"block")},destroy(){a.remove()}}},O=`
1
+ (function(b,C){typeof exports=="object"&&typeof module<"u"?C(exports,require("d3")):typeof define=="function"&&define.amd?define(["exports","d3"],C):(b=typeof globalThis<"u"?globalThis:b||self,C(b.ChartsCore={},b.d3))})(this,function(b,C){"use strict";function G(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:()=>e[a]})}}return t.default=e,Object.freeze(t)}const p=G(C),V=e=>{const{svg:t,config:a,y:r}=e,{width:c,margin:i,yAxis:o}=a,{customTicks:d,tickFormat:n,tickValues:s,ticks:l,isShow:u}=o;if(!u)return null;t.append("g").attr("transform",`translate(${c-i.right},0)`).call(h=>{let g=p.axisRight(r);d?(n&&(g=g.tickFormat(n)),l&&(g=Array.isArray(l)?g.ticks(...l):g.ticks(l)),s&&(g=g.tickValues(s))):g=g.tickFormat(f=>{const x=Number(f),y=x<0?"-":"",v=p.format(".0s")(Math.abs(x));return`${y}${v}`}),h.call(g)}).call(h=>{let g=[];h.selectAll(".tick").each(f=>g.push(f)),e.yTicks=g}).call(h=>h.select(".domain").remove()).call(h=>h.selectAll(".tick line").remove()).call(h=>h.selectAll(".tick text").classed("sc-charts__y-axis-tick",!0)).attr("font-family","inherit")},Z=e=>{const{svg:t,config:a,x:r}=e,{height:c,margin:i,xAxis:o}=a,{isShow:d,tickValues:n,tickFormat:s,customTicks:l,ticks:u}=o;if(!d)return null;t.append("g").attr("transform",`translate(0,${c-i.bottom})`).call(h=>{let g=p.axisBottom(r);l?(s&&(g=g.tickFormat(s)),u&&(g=Array.isArray(u)?g.ticks(...u):g.ticks(u)),n&&(g=g.tickValues(n))):g.ticks(5),h.call(g)}).call(h=>h.select(".domain").remove()).call(h=>{let g=[];h.selectAll(".tick").each(f=>g.push(f)),e.xTicks=g}).call(h=>h.selectAll(".tick line").remove()).call(h=>h.selectAll(".tick text").classed("sc-charts__x-axis-tick",!0)).attr("font-family","inherit")},j=e=>{const{svg:t,config:a,y:r}=e,{width:c,margin:i,grid:{horizontalStyle:o}}=a;if(o!=="none"){if(o.startsWith("zero-line")){const d=t.append("line").attr("x1",0+i.left).attr("x2",c-i.right).attr("y1",r(0)).attr("y2",r(0)).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);o==="zero-line-dashed"&&d.attr("stroke-dasharray","4 4")}o.startsWith("every-line")&&(e.yTicks||r.ticks()).forEach(n=>{const s=t.append("line").attr("x1",0+i.left).attr("x2",c-i.right).attr("y1",r(n)).attr("y2",r(n)).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);o==="every-line-dashed"&&s.attr("stroke-dasharray","4 4")})}},E=e=>{const{svg:t,config:a,x:r}=e,{height:c,margin:i,grid:{verticalStyle:o}}=a;o!=="none"&&o.startsWith("every-line")&&(e.xTicks||r.ticks()).forEach(n=>{const s=t.append("line").attr("x1",r(n)).attr("x2",r(n)).attr("y1",i.top).attr("y2",c-i.bottom).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-width",1);o==="every-line-dashed"&&s.attr("stroke-dasharray","4 4")})},H=e=>{j(e),E(e)},O=e=>{const{svg:t,config:a}=e,{width:r,height:c,margin:i,logo:o}=a;Z(e),V(e),o&&t.append("image").attr("xlink:href",a.theme==="dark"?o.picDarkTheme:o.picLightTheme).attr("width",o.width).attr("height",o.height).attr("x",o.x??(r-i.left-i.right)/2-o.width/2+i.left).attr("y",o.y??(c-i.top-i.bottom)/2-o.height/2+i.top),H(e)},L=(e,t,a)=>{let r=e.select(`#${t}`);return r.empty()&&(r=e.append("linearGradient").attr("gradientUnits","userSpaceOnUse").attr("id",t)),r.attr("x1",a.x1).attr("y1",a.x2).attr("x2",a.y1).attr("y2",a.y2),a.stops.forEach(({offset:c,stopColor:i})=>{r.append("stop").attr("offset",c).attr("stop-color",i)}),r},k=e=>{const t=p.select(e).select("defs");return t.empty()?p.select(e).append("defs"):t},I=e=>{const{y:t,config:{margin:a}}=e,r=t.range()[0]-t(0);return{x:0,y:t.range()[0]-r,width:"100%",height:r+a.bottom}},M=(e,t)=>({...e,...t,margin:{...e.margin,...t==null?void 0:t.margin},logo:e.logo&&(t!=null&&t.logo)?{width:t.logo.width??e.logo.width,height:t.logo.height??e.logo.height,picLightTheme:t.logo.picLightTheme??e.logo.picLightTheme,picDarkTheme:t.logo.picDarkTheme??e.logo.picDarkTheme,x:t.logo.x??e.logo.x,y:t.logo.y??e.logo.y}:e.logo,xAxis:{...e.xAxis,...t==null?void 0:t.xAxis},yAxis:{...e.yAxis,...t==null?void 0:t.yAxis},grid:{...e.grid,...t==null?void 0:t.grid},hover:{...e.hover,...t==null?void 0:t.hover},selection:{...e.selection,...t==null?void 0:t.selection}}),S=(e,t={})=>{const a=e.node(),r=k(a),c=(d,n)=>L(r,d,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"20%",stopColor:n},{offset:"60%",stopColor:n},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});c("gradient-range-borders-up","var(--sc-color-selection-up)"),c("gradient-range-borders-down","var(--sc-color-selection-down)");const i="sc-charts__border-range-line",o=e.append("line").classed(i,!0).style("display",t.hidden?"none":"block");return{className(d,n){d==="remove"?o.classed(`${i}${n}`,!1):o.classed(`${i}${n}`,!0)},update({x1:d,x2:n,y1:s,y2:l,hidden:u}){d!==void 0&&o.attr("x1",d),n!==void 0&&o.attr("x2",n),s!==void 0&&o.attr("y1",s),l!==void 0&&o.attr("y2",l),u!==void 0&&o.style("display",u?"none":"block")},destroy(){o.remove()}}},T=(e,t={})=>{const a=e.append("circle").attr("r",t.radius||4).style("display",t.hidden?"none":"block"),r=t.className||"";return r&&a.classed(r,!0),{className(c,i){c==="remove"?a.classed(`${r}${i}`,!1):a.classed(`${r}${i}`,!0)},update({cx:c,cy:i,hidden:o,fill:d}){c!==void 0&&a.attr("cx",c),i!==void 0&&a.attr("cy",i),d!==void 0&&a.attr("fill",d),o!==void 0&&a.style("display",o?"none":"block")},destroy(){a.remove()}}},X=(e,t={})=>{const a="sc-charts__hover-line",r=e.append("line").style("display",t.hidden?"none":"block").classed(a,!0),c=e.node(),i=k(c);return((d,n)=>L(i,d,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"15%",stopColor:n},{offset:"75%",stopColor:n},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]}))("hover-line-gradient","var(--sc-color-hover-line)"),{className(d,n){d==="remove"?r.classed(`${a}${n}`,!1):r.classed(`${a}${n}`,!0)},update({x1:d,x2:n,y1:s,y2:l,hidden:u}){d!==void 0&&r.attr("x1",d),n!==void 0&&r.attr("x2",n),s!==void 0&&r.attr("y1",s),l!==void 0&&r.attr("y2",l),u!==void 0&&r.style("display",u?"none":"block")},destroy(){r.remove()}}},W=e=>{const t="sc-charts__range-tooltip",a=e.svg.append("foreignObject").classed(t,!0).style("display","none"),r=a.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-container`),c=r.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-sum`),i=r.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-time`),o=p.timeFormat("%b %e, %I:%M %p"),d=n=>{const s=p.format(",.2f");return`${n<0?"-":""}$${s(Math.abs(n))}`};return{className(n,s){n==="remove"?a.classed(`${t}${s}`,!1):a.classed(`${t}${s}`,!0)},update({leftPoint:n,rightPoint:s,x:l,y:u,hidden:h,closest:g}){if(l!==void 0&&a.attr("x",l),u!==void 0&&a.attr("y",u),n&&s&&g&&l!==void 0){const{comparisonValue:f}=e.config.selection,x=s.value-n.value,y=(e.x(s.date)+e.x(n.date))/2,v=e.x(g.date)<y?n.value:s.value;let m=null;f&&f!==0&&v!==0?m=(v/f*100).toFixed(2):n.value&&(m=(x/Math.abs(n.value)*100).toFixed(2));const w=m===null?"":`(${m}%)`,$=`${d(x)}${w}`,ie=`${o(n.date)} to ${o(s.date)}`;c.text($).append("xhtml:div").html(Y).attr("class",`${t}-sum-icon`),i.text(ie);const F=e.x(e.data[e.data.length-1].date),z=e.x(e.data[0].date),_=r.node().getBoundingClientRect();_.x<z&&a.attr("x",z+_.width/2),_.x>F-_.width&&a.attr("x",F-_.width/2)}h!==void 0&&a.style("display",h?"none":"block")},destroy(){a.remove()}}},Y=`
2
2
  <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
3
3
  <path d="M7 0.5C5.71442 0.5 4.45772 0.881218 3.3888 1.59545C2.31988 2.30968 1.48676 3.32484 0.994786 4.51256C0.502816 5.70028 0.374095 7.00721 0.624899 8.26809C0.875703 9.52896 1.49477 10.6872 2.40381 11.5962C3.31285 12.5052 4.47104 13.1243 5.73192 13.3751C6.99279 13.6259 8.29973 13.4972 9.48744 13.0052C10.6752 12.5132 11.6903 11.6801 12.4046 10.6112C13.1188 9.54229 13.5 8.28558 13.5 7C13.4982 5.27665 12.8128 3.62441 11.5942 2.40582C10.3756 1.18722 8.72335 0.50182 7 0.5ZM9.35375 6.85375C9.30732 6.90024 9.25217 6.93712 9.19147 6.96228C9.13077 6.98744 9.06571 7.00039 9 7.00039C8.93429 7.00039 8.86923 6.98744 8.80853 6.96228C8.74783 6.93712 8.69269 6.90024 8.64625 6.85375L7.5 5.70687V9.5C7.5 9.63261 7.44732 9.75979 7.35356 9.85355C7.25979 9.94732 7.13261 10 7 10C6.86739 10 6.74022 9.94732 6.64645 9.85355C6.55268 9.75979 6.5 9.63261 6.5 9.5V5.70687L5.35375 6.85375C5.25993 6.94757 5.13268 7.00028 5 7.00028C4.86732 7.00028 4.74007 6.94757 4.64625 6.85375C4.55243 6.75993 4.49972 6.63268 4.49972 6.5C4.49972 6.36732 4.55243 6.24007 4.64625 6.14625L6.64625 4.14625C6.69269 4.09976 6.74783 4.06288 6.80853 4.03772C6.86923 4.01256 6.9343 3.99961 7 3.99961C7.06571 3.99961 7.13077 4.01256 7.19147 4.03772C7.25217 4.06288 7.30732 4.09976 7.35375 4.14625L9.35375 6.14625C9.40024 6.19269 9.43712 6.24783 9.46228 6.30853C9.48744 6.36923 9.5004 6.43429 9.5004 6.5C9.5004 6.56571 9.48744 6.63077 9.46228 6.69147C9.43712 6.75217 9.40024 6.80731 9.35375 6.85375Z"
4
4
  fill="currentColor"/>
5
5
  </svg>
6
- `,X=e=>{const t="sc-charts__hover-tooltip",a=e.svg.append("foreignObject").classed(t,!0).style("display","none"),s=a.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-container`),l=s.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-sum`).html("$sum"),o=s.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-time`).html("Date"),n=v.timeFormat("%a, %b %d, %-I:%M %p"),i=r=>`${r<0?"-":""}$${Math.abs(r).toFixed(2)}`;return{className(r,c){r==="remove"?a.classed(`${t}${c}`,!1):a.classed(`${t}${c}`,!0)},update({x:r,y:c,hidden:u,dataItem:g}){if(r!==void 0&&a.attr("x",r),c!==void 0&&a.attr("y",c),g&&r!==void 0){l.text(i(g.value)),o.text(n(g.date));const d=s.node().getBoundingClientRect(),h=16,f=r+h+d.width>e.config.width-e.config.margin.right?r-h-d.width:r+h;a.attr("x",f)}u!==void 0&&a.style("display",u?"none":"block")},destroy(){a.remove()}}},Y={margin:{top:10,right:30,bottom:20,left:10},theme:"light",logo:{width:406,height:113,x:null,y:null,picDarkTheme:null,picLightTheme:null},hasMainLineArea:!1,hoverRange:"month",xAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!1},yAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!0},grid:{horizontalStyle:"zero-line-dashed",verticalStyle:"none"},enableSelection:!0,enableHover:!0,enableBelowZeroLine:!1,curveTension:1},A=e=>v.curveCardinal.tension(e.config.curveTension),P=e=>{const{svg:t,data:a,x:s,y:l,config:o}=e,n=t.node(),i=C(n);$(i,"main-line-area-gradient",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-main-line)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});const c=v.area().x(d=>s(d.date)).y0(l.range()[0]).y1(d=>l(d.value)).curve(A(e)),u="sc-charts__main-line-area",g=t.append("path").datum(a).attr("d",c).attr("class",u).classed(`${u}_hidden`,!o.hasMainLineArea);return{className(d,h){d==="remove"?g.classed(`${u}${h}`,!1):g.classed(`${u}${h}`,!0)},update({data:d,hidden:h}){if(d!==void 0&&g.datum(d).attr("d",c),h!==void 0){if(!o.hasMainLineArea)return null;g.classed(`${u}_hidden`,h)}},destroy(){g.remove()}}},W=(e,t={})=>{const a="sc-charts__range-line-area",{svg:s,x:l,y:o,config:n,data:i,chartId:r}=e,{clip:c}=t,u=s.node(),g=C(u),d="range-line-area-gradient";$(g,d+"_up",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-selection-up)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]}),$(g,d+"_down",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-selection-down)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});const h=v.area().x(w=>l(w.date)).y0(o.range()[0]).y1(w=>o(w.value)).curve(A(e)),f=`${r}-clip-${a}`,p=g.append("clipPath").attr("id",f).append("rect").attr("x",(c==null?void 0:c.x)||0).attr("y",(c==null?void 0:c.y)||0).attr("width",(c==null?void 0:c.width)||"100%").attr("height",(c==null?void 0:c.height)||"100%"),y=s.append("path").datum(i).attr("d",h).attr("class",a).classed(`${a}_hidden`,!n.hasMainLineArea).attr("clip-path",`url(#${f})`);return{className(w,b){w==="remove"?y.classed(`${a}${b}`,!1):y.classed(`${a}${b}`,!0)},update({data:w,hidden:b,clip:_}){w!==void 0&&y.datum(w).attr("d",h),b!==void 0&&y.classed(`${a}_hidden`,b),_!==void 0&&p.attr("x",_.x).attr("y",_.y).attr("width",_.width).attr("height",_.height)},destroy(){y.remove()}}},L=(e,t)=>{const{svg:a,data:s,x:l,y:o}=e,{baseClassName:n,id:i,clip:r}=t,c=a.node(),u=C(c),g=v.line().x(m=>l(m.date)).y(m=>o(m.value)).curve(A(e)),h=u.append("clipPath").attr("id",`clip-${i}`).append("rect").attr("x",(r==null?void 0:r.x)||0).attr("y",(r==null?void 0:r.y)||0).attr("width",(r==null?void 0:r.width)||"100%").attr("height",(r==null?void 0:r.height)||"100%"),f=a.append("path").classed(n,!0).datum(s).attr("d",g).attr("id",i).attr("clip-path",`url(#clip-${i})`);return{className(m,p){m==="remove"?f.classed(`${n}${p}`,!1):f.classed(`${n}${p}`,!0)},update({data:m,clip:p,hidden:y}){m!==void 0&&f.datum(m).attr("d",g),y!==void 0&&f.classed(`${n}_hidden`,y),p!==void 0&&h.attr("x",p.x).attr("y",p.y).attr("width",p.width).attr("height",p.height)},destroy(){f.remove()}}},q=e=>{const t=L(e,{baseClassName:"sc-charts__main-line",id:`${e.chartId}-sc-charts__main-line`}),a=P(e),s=V(e.svg),l=L(e,{baseClassName:"sc-charts__highlight-line",id:`${e.chartId}-sc-charts__highlight-line`,clip:{x:0,y:0,width:"0",height:"0"}});let o=null;e.config.enableBelowZeroLine&&(o=L(e,{baseClassName:"sc-charts__below-zero-line",id:`${e.chartId}-sc-charts__below-zero-line`,clip:N(e)}));const n=T(e.svg,{className:"sc-charts__hover-circle",hidden:!0}),i=S(e.svg),r=S(e.svg),c=L(e,{baseClassName:"sc-charts__range-line",id:`${e.chartId}-sc-charts__range-line`,clip:{x:0,y:0,width:"0",height:"0"}}),u=T(e.svg,{className:"sc-charts__range-circle-left",hidden:!0}),g=T(e.svg,{className:"sc-charts__range-circle-right",hidden:!0}),d=E(e),h=X(e),f=W(e);return{hoverLine:s,hoverCircle:n,rangeBorderLeft:i,rangeBorderRight:r,rangeLine:c,rangeLineArea:f,rangeCircleLeft:u,rangeCircleRight:g,mainLine:t,rangeTooltip:d,highlightLine:l,hoverTooltip:h,mainLineArea:a,belowZeroLine:o}},U=(e,t,a)=>{let s,l;switch(e){case"day":s=new Date(t),s.setHours(0,0,0,0),l=new Date(s),l.setDate(s.getDate()+1);break;case"week":{const i=t.getDay(),r=t.getDate()-i+(i===0?-6:1);s=new Date(t.getFullYear(),t.getMonth(),r),s.setHours(0,0,0,0),l=new Date(s),l.setDate(s.getDate()+7);break}case"month":s=new Date(t.getFullYear(),t.getMonth(),1),l=new Date(t.getFullYear(),t.getMonth()+1,1);break;default:return{x:0,y:0,width:"100%",height:"100%"}}const o=a(s),n=a(l);return{x:o,y:0,width:n-o,height:"100%"}},M=(e,t)=>{var c;const{x:a,y:s,elements:l,config:{margin:o,height:n,hoverRange:i}}=e;l.hoverLine.update({x1:a(t.date),x2:a(t.date),y1:o.top,y2:n-o.bottom,hidden:!1}),l.hoverCircle.update({cx:a(t.date),cy:s(t.value),hidden:!1}),l.hoverTooltip.update({dataItem:t,x:a(t.date),y:0,hidden:!1});const r=U(i,t.date,a);l.highlightLine.update({clip:r,hidden:!1}),(c=l.belowZeroLine)==null||c.update({clip:{...r,y:s(0),height:s.range()[0]-s(0)+o.bottom}}),l.mainLine.className("add","_muted")},R=e=>{var a;const{elements:t}=e;t.hoverLine.update({hidden:!0}),t.hoverCircle.update({hidden:!0}),t.highlightLine.update({hidden:!0}),t.mainLine.className("remove","_muted"),t.hoverTooltip.update({hidden:!0}),e.action!=="selection"&&((a=t.belowZeroLine)==null||a.update({clip:N(e)}))},J=(e,t)=>{["rangeBorderLeft","rangeBorderRight","rangeCircleLeft","rangeCircleRight","rangeLine","rangeLineArea","rangeTooltip"].forEach(s=>{t?(e[s].className("remove","_down"),e[s].className("add","_up")):(e[s].className("remove","_up"),e[s].className("add","_down"))})},K=(e,t,a)=>{var f;const{x:s,y:l,config:{margin:o,height:n},elements:i}=e,r=s(t.date)<s(a.date)?t:a,c=s(t.date)>=s(a.date)?t:a,u=c.value-r.value>=0,g=s(r.date),d=s(c.date),h=d-g;i.rangeBorderLeft.update({x1:g,x2:g,y1:o.top,y2:n-o.bottom,hidden:!1}),i.rangeBorderRight.update({x1:d,x2:d,y1:o.top,y2:n-o.bottom,hidden:!1}),i.rangeCircleLeft.update({cx:g,cy:l(r.value),hidden:!1}),i.rangeCircleRight.update({cx:d,cy:l(c.value),hidden:!1}),i.rangeLine.update({clip:{x:g,y:0,width:h,height:l.range()[0]},hidden:!1}),i.rangeLineArea.update({clip:{x:g,y:0,width:h,height:l.range()[0]},hidden:!1}),i.rangeTooltip.update({rightPoint:c,leftPoint:r,x:g+h/2,y:0,hidden:!1}),(f=i.belowZeroLine)==null||f.update({hidden:!0}),i.mainLineArea.update({hidden:!0}),J(i,u),i.mainLine.className("add","_selected-muted")},B=e=>{var a;const{elements:t}=e;t.rangeLine.update({hidden:!0}),t.rangeLineArea.update({hidden:!0}),t.rangeBorderLeft.update({hidden:!0}),t.rangeBorderRight.update({hidden:!0}),t.rangeCircleLeft.update({hidden:!0}),t.rangeCircleRight.update({hidden:!0}),t.rangeTooltip.update({hidden:!0}),t.mainLine.className("remove","_selected-muted"),t.mainLineArea.update({hidden:!1}),(a=t.belowZeroLine)==null||a.update({hidden:!1})},Q=e=>{const{svg:t,data:a,x:s,config:l}=e,{height:o,margin:n,width:i,enableSelection:r,enableHover:c}=l;let u=null,g=!1;const d=f=>a.reduce((m,p)=>Math.abs(s(m.date)-f)<Math.abs(s(p.date)-f)?m:p);t.append("rect").attr("width",i-n.left-n.right).attr("height",o-n.top-n.bottom).attr("x",n.left).attr("y",n.top).attr("fill","transparent").on("mousemove",function(f){const[m]=v.pointer(f,this),p=d(m);!g&&c?(e.action="hover",M(e,p)):(e.action=g?"selection":"none",R(e)),u&&r&&(e.action="selection",K(e,u,p))}).on("mouseleave",()=>{e.action="none",g=!1,u=null,R(e),B(e)}).on("mousedown",function(f){if(r){g=!0,e.action="selection";const[m]=v.pointer(f,this);u=d(m)}}).on("mouseup",function(f){const[m]=v.pointer(f,this),p=d(m);g=!1,u=null,e.action="hover",r&&B(e),c&&M(e,p)})},ee=(e,t)=>{const{width:a,margin:s}=t,l=v.scaleTime(),o=v.extent(e,n=>new Date(n.date));return o[0]==null||o[1]==null?l:l.domain([o[0],o[1]]).range([s.left,a-s.right])},te=(e,t)=>{const{height:a,margin:s}=t,l=v.max(e,n=>n.value)??0,o=v.min(e,n=>n.value)??0;return v.scaleLinear().domain([o,l]).range([a-s.bottom,s.top])},ae=(e,t)=>{const a=v.select(e);if(a.empty())return console.error(`Element with selector ${e} not found!`),null;if(!t.chartId||!/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(t.chartId))return console.error(`chartId is required and must be a valid id
7
- (only letters, numbers or underscores. The first character must be a letter)`),null;const s=a.append("svg"),o=a.node().getBoundingClientRect(),n=o.width,i=o.height;let r=D({...Y,width:n,height:i},t.config);const c=(u,g=!1)=>{g&&u.config&&(r=D(r,u.config));const d=u.data.map(y=>({date:new Date(y.date),value:y.value})).sort((y,w)=>y.date.getTime()-w.date.getTime()),h=ee(d,r),f=te(d,r);s.attr("class",`sc-charts sc-charts__${r.theme}`).attr("preserveAspectRatio","xMinYMin meet").attr("viewBox",`0 0 ${n} ${i}`).style("width","100%").style("height","100%").selectAll("*").remove();const m={chartId:t.chartId,svg:s,data:d,x:h,y:f,config:r,action:"none"};H(m);const p={...m,elements:q(m)};Q(p)};return c(t),{update:u=>c(u,!0),destroy:()=>s.remove()}};x.createLineChart=ae,Object.defineProperty(x,Symbol.toStringTag,{value:"Module"})});
6
+ `,P=e=>{const t="sc-charts__hover-tooltip",a=e.svg.append("foreignObject").classed(t,!0).style("display","none"),r=a.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-container`),c=r.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-sum`).html("$sum"),i=r.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${t}-time`).html("Date"),o=p.timeFormat("%a, %b %d, %-I:%M %p"),d=n=>{const s=p.format(",.2f");return`${n<0?"-":""}$${s(Math.abs(n))}`};return{className(n,s){n==="remove"?a.classed(`${t}${s}`,!1):a.classed(`${t}${s}`,!0)},update({x:n,y:s,hidden:l,dataItem:u}){if(n!==void 0&&a.attr("x",n),s!==void 0&&a.attr("y",s),u&&n!==void 0){c.text(d(u.value)),i.text(o(u.date));const h=r.node().getBoundingClientRect(),g=16,f=n+g+h.width>e.config.width-e.config.margin.right?n-g-h.width:n+g;a.attr("x",f)}l!==void 0&&a.style("display",l?"none":"block")},destroy(){a.remove()}}},q={margin:{top:10,right:30,bottom:20,left:10},theme:"light",logo:{width:406,height:113,x:null,y:null,picDarkTheme:null,picLightTheme:null},hasMainLineArea:!1,hover:{enable:!0,range:"1m",transitionDuration:150,transitionName:"default"},selection:{enable:!0,comparisonValue:null},xAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!1},yAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!0},grid:{horizontalStyle:"zero-line-dashed",verticalStyle:"none"},enableBelowZeroLine:!1,curveTension:1},N=e=>p.curveCardinal.tension(e.config.curveTension),U=e=>{const{svg:t,data:a,x:r,y:c,config:i}=e,o=t.node(),d=k(o);L(d,"main-line-area-gradient",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-main-line)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});const s=p.area().x(h=>r(h.date)).y0(c.range()[0]).y1(h=>c(h.value)).curve(N(e)),l="sc-charts__main-line-area",u=t.append("path").datum(a).attr("d",s).attr("class",l).classed(`${l}_hidden`,!i.hasMainLineArea);return{className(h,g){h==="remove"?u.classed(`${l}${g}`,!1):u.classed(`${l}${g}`,!0)},update({data:h,hidden:g}){if(h!==void 0&&u.datum(h).attr("d",s),g!==void 0){if(!i.hasMainLineArea)return null;u.classed(`${l}_hidden`,g)}},destroy(){u.remove()}}},J=(e,t={})=>{const a="sc-charts__range-line-area",{svg:r,x:c,y:i,config:o,data:d,chartId:n}=e,{clip:s}=t,l=r.node(),u=k(l),h="range-line-area-gradient";L(u,h+"_up",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-selection-up)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]}),L(u,h+"_down",{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"var(--sc-color-selection-down)"},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});const g=p.area().x(m=>c(m.date)).y0(i.range()[0]).y1(m=>i(m.value)).curve(N(e)),f=`${n}-clip-${a}`,y=u.append("clipPath").attr("id",f).append("rect").attr("x",(s==null?void 0:s.x)||0).attr("y",(s==null?void 0:s.y)||0).attr("width",(s==null?void 0:s.width)||"100%").attr("height",(s==null?void 0:s.height)||"100%"),v=r.append("path").datum(d).attr("d",g).attr("class",a).classed(`${a}_hidden`,!o.hasMainLineArea).attr("clip-path",`url(#${f})`);return{className(m,w){m==="remove"?v.classed(`${a}${w}`,!1):v.classed(`${a}${w}`,!0)},update({data:m,hidden:w,clip:$}){m!==void 0&&v.datum(m).attr("d",g),w!==void 0&&v.classed(`${a}_hidden`,w),$!==void 0&&y.attr("x",$.x).attr("y",$.y).attr("width",$.width).attr("height",$.height)},destroy(){v.remove()}}},A=(e,t)=>{const{svg:a,data:r,x:c,y:i,chartId:o}=e,{baseClassName:d,id:n,clip:s}=t,l=a.node(),u=k(l),h=p.line().x(v=>c(v.date)).y(v=>i(v.value)).curve(N(e)),g=`${o}-clip-${d}`,x=u.append("clipPath").attr("id",g).append("rect").attr("x",(s==null?void 0:s.x)||0).attr("y",(s==null?void 0:s.y)||0).attr("width",(s==null?void 0:s.width)||"100%").attr("height",(s==null?void 0:s.height)||"100%"),y=a.append("path").classed(d,!0).datum(r).attr("d",h).attr("id",n).attr("clip-path",`url(#${g})`);return{className(v,m){v==="remove"?y.classed(`${d}${m}`,!1):y.classed(`${d}${m}`,!0)},update({data:v,clip:m,hidden:w}){v!==void 0&&y.datum(v).attr("d",h),w!==void 0&&y.classed(`${d}_hidden`,w),m!==void 0&&x.attr("x",m.x).attr("y",m.y).attr("width",m.width).attr("height",m.height)},destroy(){y.remove()}}},K=(e,t)=>{const{svg:a,data:r,x:c,y:i,chartId:o,config:d}=e,{baseClassName:n,id:s,clip:l}=t,u=a.node(),h=k(u),g=p.line().x(m=>c(m.date)).y(m=>i(m.value)).curve(N(e)),f=`${o}-clip-${n}`,y=h.append("clipPath").attr("id",f).append("rect").attr("x",(l==null?void 0:l.x)||0).attr("y",(l==null?void 0:l.y)||0).attr("width",(l==null?void 0:l.width)||"100%").attr("height",(l==null?void 0:l.height)||"100%"),v=a.append("path").classed(n,!0).datum(r).attr("d",g).attr("id",s).attr("clip-path",`url(#${f})`);return{className(m,w){m==="remove"?v.classed(`${n}${w}`,!1):v.classed(`${n}${w}`,!0)},update({data:m,clip:w,hidden:$}){m!==void 0&&v.datum(m).attr("d",g),$!==void 0&&v.classed(`${n}_hidden`,$),w!==void 0&&(d.hover.transitionName==="default"?y.transition().duration(d.hover.transitionDuration).attr("x",w.x).attr("y",w.y).attr("width",w.width).attr("height",w.height).ease(p.easeLinear):y.attr("x",w.x).attr("y",w.y).attr("width",w.width).attr("height",w.height))},destroy(){v.remove()}}},Q=e=>{const t=A(e,{baseClassName:"sc-charts__main-line",id:`${e.chartId}-sc-charts__main-line`}),a=U(e),r=X(e.svg),c=K(e,{baseClassName:"sc-charts__highlight-line",id:`${e.chartId}-sc-charts__highlight-line`,clip:{x:0,y:0,width:"0",height:"0"}});let i=null;e.config.enableBelowZeroLine&&(i=A(e,{baseClassName:"sc-charts__below-zero-line",id:`${e.chartId}-sc-charts__below-zero-line`,clip:I(e)}));const o=T(e.svg,{className:"sc-charts__hover-circle",hidden:!0}),d=S(e.svg),n=S(e.svg),s=A(e,{baseClassName:"sc-charts__range-line",id:`${e.chartId}-sc-charts__range-line`,clip:{x:0,y:0,width:"0",height:"0"}}),l=T(e.svg,{className:"sc-charts__range-circle-left",hidden:!0}),u=T(e.svg,{className:"sc-charts__range-circle-right",hidden:!0}),h=W(e),g=P(e),f=J(e);return{hoverLine:r,hoverCircle:o,rangeBorderLeft:d,rangeBorderRight:n,rangeLine:s,rangeLineArea:f,rangeCircleLeft:l,rangeCircleRight:u,mainLine:t,rangeTooltip:h,highlightLine:c,hoverTooltip:g,mainLineArea:a,belowZeroLine:i}},ee=(e,t,a)=>{const r=e.match(/^(\d+)([dMhmw])$/);if(!r)return console.warn("Invalid hoverRange:",e),{x:0,y:0,width:"100%",height:"100%"};const[,c,i]=r,o=parseInt(c,10),[d,n]=a.domain();let s=new Date(d),l=new Date(s);for(;l<n;){switch(i){case"M":l.setMinutes(s.getMinutes()+o);break;case"h":l.setHours(s.getHours()+o);break;case"d":l.setDate(s.getDate()+o);break;case"w":l.setDate(s.getDate()+o*7);break;case"m":l=new Date(s.getFullYear(),s.getMonth()+o,1);break;default:return{x:0,y:0,width:"100%",height:"100%"}}if(t>=s&&t<l){const u=a(s),h=a(l);return{x:u,y:0,width:h-u,height:"100%"}}s=new Date(l)}return{x:0,y:0,width:"100%",height:"100%"}},D=(e,t)=>{var s;const{x:a,y:r,elements:c,config:{margin:i,height:o,hover:d}}=e;c.hoverLine.update({x1:a(t.date),x2:a(t.date),y1:i.top,y2:o-i.bottom,hidden:!1}),c.hoverCircle.update({cx:a(t.date),cy:r(t.value),hidden:!1}),c.hoverTooltip.update({dataItem:t,x:a(t.date),y:0,hidden:!1});const n=ee(d.range,t.date,a);c.highlightLine.update({clip:n,hidden:!1}),(s=c.belowZeroLine)==null||s.update({clip:{...n,y:r(0),height:r.range()[0]-r(0)+i.bottom}}),c.mainLine.className("add","_muted")},R=e=>{var a;const{elements:t}=e;t.hoverLine.update({hidden:!0}),t.hoverCircle.update({hidden:!0}),t.highlightLine.update({hidden:!0}),t.mainLine.className("remove","_muted"),t.hoverTooltip.update({hidden:!0}),e.action!=="selection"&&((a=t.belowZeroLine)==null||a.update({clip:I(e)}))},te=(e,t)=>{["rangeBorderLeft","rangeBorderRight","rangeCircleLeft","rangeCircleRight","rangeLine","rangeLineArea","rangeTooltip"].forEach(r=>{t?(e[r].className("remove","_down"),e[r].className("add","_up")):(e[r].className("remove","_up"),e[r].className("add","_down"))})},ae=(e,t,a)=>{var f;const{x:r,y:c,config:{margin:i,height:o},elements:d}=e,n=r(t.date)<r(a.date)?t:a,s=r(t.date)>=r(a.date)?t:a,l=s.value-n.value>=0,u=r(n.date),h=r(s.date),g=h-u;d.rangeBorderLeft.update({x1:u,x2:u,y1:i.top,y2:o-i.bottom,hidden:!1}),d.rangeBorderRight.update({x1:h,x2:h,y1:i.top,y2:o-i.bottom,hidden:!1}),d.rangeCircleLeft.update({cx:u,cy:c(n.value),hidden:!1}),d.rangeCircleRight.update({cx:h,cy:c(s.value),hidden:!1}),d.rangeLine.update({clip:{x:u,y:0,width:g,height:c.range()[0]},hidden:!1}),d.rangeLineArea.update({clip:{x:u,y:0,width:g,height:c.range()[0]},hidden:!1}),d.rangeTooltip.update({rightPoint:s,leftPoint:n,closest:a,x:u+g/2,y:0,hidden:!1}),(f=d.belowZeroLine)==null||f.update({hidden:!0}),d.mainLineArea.update({hidden:!0}),te(d,l),d.mainLine.className("add","_selected-muted")},B=e=>{var a;const{elements:t}=e;t.rangeLine.update({hidden:!0}),t.rangeLineArea.update({hidden:!0}),t.rangeBorderLeft.update({hidden:!0}),t.rangeBorderRight.update({hidden:!0}),t.rangeCircleLeft.update({hidden:!0}),t.rangeCircleRight.update({hidden:!0}),t.rangeTooltip.update({hidden:!0}),t.mainLine.className("remove","_selected-muted"),t.mainLineArea.update({hidden:!1}),(a=t.belowZeroLine)==null||a.update({hidden:!1})},re=e=>{const{svg:t,data:a,x:r,config:c}=e,{height:i,margin:o,width:d,hover:n,selection:s}=c;let l=null,u=!1;const h=f=>a.reduce((x,y)=>Math.abs(r(x.date)-f)<Math.abs(r(y.date)-f)?x:y);t.append("rect").attr("width",d-o.left-o.right).attr("height",i-o.top-o.bottom).attr("x",o.left).attr("y",o.top).attr("fill","transparent").on("mousemove",function(f){const[x]=p.pointer(f,this),y=h(x);!u&&n.enable?(e.action="hover",D(e,y)):(e.action=u?"selection":"none",R(e)),l&&s.enable&&(e.action="selection",ae(e,l,y))}).on("mouseleave",()=>{e.action="none",u=!1,l=null,R(e),B(e)}).on("mousedown",function(f){if(s.enable){u=!0,e.action="selection";const[x]=p.pointer(f,this);l=h(x)}}).on("mouseup",function(f){const[x]=p.pointer(f,this),y=h(x);u=!1,l=null,e.action="hover",s.enable&&B(e),n.enable&&D(e,y)})},se=(e,t)=>{const{width:a,margin:r}=t,c=p.scaleTime(),i=p.extent(e,o=>new Date(o.date));return i[0]==null||i[1]==null?c:c.domain([i[0],i[1]]).range([r.left,a-r.right])},ne=(e,t)=>{const{height:a,margin:r}=t,c=p.max(e,o=>o.value)??0,i=p.min(e,o=>o.value)??0;return p.scaleLinear().domain([i,c]).range([a-r.bottom,r.top])},oe=(e,t)=>{const a=p.select(e);if(a.empty())return console.error(`Element with selector ${e} not found!`),null;if(!t.chartId||!/^[a-zA-Z_][a-zA-Z0-9_-]*$/.test(t.chartId))return console.error(`chartId is required and must be a valid id
7
+ (only letters, numbers or underscores. The first character must be a letter)`),null;const r=a.append("svg"),i=a.node().getBoundingClientRect(),o=i.width,d=i.height;let n=M({...q,width:o,height:d},t.config);const s=(l,u=!1)=>{u&&l.config&&(n=M(n,l.config));const h=l.data.map(v=>({date:new Date(v.date),value:v.value})).sort((v,m)=>v.date.getTime()-m.date.getTime()),g=se(h,n),f=ne(h,n);r.attr("class",`sc-charts sc-charts__${n.theme}`).attr("preserveAspectRatio","xMinYMin meet").attr("viewBox",`0 0 ${o} ${d}`).style("width","100%").style("height","100%").selectAll("*").remove();const x={chartId:t.chartId,svg:r,data:h,x:g,y:f,config:n,action:"none"};O(x);const y={...x,elements:Q(x)};re(y)};return s(t),{update:l=>s(l,!0),destroy:()=>r.remove()}};b.createLineChart=oe,Object.defineProperty(b,Symbol.toStringTag,{value:"Module"})});
8
8
  //# sourceMappingURL=charts-core.umd.cjs.map