charts-core 0.0.21 → 1.0.1

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.umd.cjs","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.umd.cjs","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, hidePercent } = 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 (!hidePercent) {\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\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 hidePercent: false,\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","hidePercent","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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "charts-core",
3
- "version": "0.0.21",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"