charts-core 0.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.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # ChartsCore
@@ -0,0 +1,64 @@
1
+ import * as s from "d3";
2
+ const C = ({ svg: r, config: d, x: a, y: l }) => {
3
+ const { width: i, height: t, margin: n } = d;
4
+ r.append("g").attr("transform", `translate(0,${t - n.bottom})`).call(s.axisBottom(a).ticks(5)).call((e) => e.select(".domain").remove()).call((e) => e.selectAll(".tick line").remove()).call((e) => e.selectAll("text").attr("fill", "gray")), r.append("g").attr("transform", `translate(${i - n.right},0)`).call(s.axisRight(l)).call((e) => e.select(".domain").remove()).call((e) => e.selectAll("text").attr("fill", "gray")).call((e) => e.selectAll(".tick line").remove());
5
+ }, F = ({ svg: r, data: d, x: a, y: l }) => {
6
+ const i = s.line().x((t) => a(t.date)).y((t) => l(t.value)).curve(s.curveCardinal.tension(0.6));
7
+ r.append("path").datum(d).attr("fill", "none").attr("stroke", "#007AFF").attr("stroke-width", 2).attr("d", i);
8
+ }, v = (r) => ({
9
+ selection: r.append("rect").attr("fill", "#F1816911").style("display", "none"),
10
+ hoverLine: r.append("line").attr("stroke", "#C7C7C9").attr("stroke-width", 1).style("display", "none"),
11
+ hoverCircle: r.append("circle").attr("r", 4).attr("fill", "#007AFF").attr("stroke", "white").attr("stroke-width", 2).style("display", "none"),
12
+ borderLeft: r.append("line").attr("stroke", "#F18169").attr("stroke-width", 1).style("display", "none"),
13
+ borderRight: r.append("line").attr("stroke", "#F18169").attr("stroke-width", 1).style("display", "none"),
14
+ rangeLine: r.append("path").attr("fill", "none").attr("stroke", "#F18169").attr("stroke-width", 2).style("display", "none"),
15
+ circle1: r.append("circle").attr("r", 4).attr("fill", "#F18169").attr("stroke", "white").attr("stroke-width", 2).style("display", "none"),
16
+ circle2: r.append("circle").attr("r", 4).attr("fill", "#F18169").attr("stroke", "white").attr("stroke-width", 2).style("display", "none")
17
+ }), P = ({ svg: r, data: d, x: a, y: l, config: i, elements: t, state: n }) => {
18
+ const { height: e, margin: o, width: h } = i, y = (p) => d.reduce((m, c) => Math.abs(a(m.date) - p) < Math.abs(a(c.date) - p) ? m : c), w = r.append("rect").attr("width", h - o.left - o.right).attr("height", e - o.top - o.bottom).attr("x", o.left).attr("y", o.top).attr("fill", "transparent"), x = s.line().x((p) => a(p.date)).y((p) => l(p.value)).curve(s.curveCardinal.tension(0.6));
19
+ w.on("mousemove", function(p) {
20
+ const [m] = s.pointer(p, this), c = y(m);
21
+ if (t.hoverLine.attr("x1", a(c.date)).attr("x2", a(c.date)).attr("y1", o.top).attr("y2", e - o.bottom).style("display", "block"), t.hoverCircle.attr("cx", a(c.date)).attr("cy", l(c.value)).style("display", "block"), n.startPoint) {
22
+ const u = a(c.date) - a(n.startPoint.date), f = Math.min(a(n.startPoint.date), a(c.date));
23
+ t.selection.attr("x", f).attr("width", Math.abs(u)).attr("y", o.top).attr("height", e - o.top - o.bottom).style("display", "block"), t.borderLeft.attr("x1", f).attr("x2", f).attr("y1", o.top).attr("y2", e - o.bottom).style("display", "block"), t.borderRight.attr("x1", f + Math.abs(u)).attr("x2", f + Math.abs(u)).attr("y1", o.top).attr("y2", e - o.bottom).style("display", "block"), t.circle1.attr("cx", a(n.startPoint.date)).attr("cy", l(n.startPoint.value)).style("display", "block"), t.circle2.attr("cx", a(c.date)).attr("cy", l(c.value)).style("display", "block");
24
+ const k = d.findIndex((g) => g.date.getTime() === n.startPoint.date.getTime()), b = d.findIndex((g) => g.date.getTime() === c.date.getTime()), L = d.slice(Math.min(k, b), Math.max(k, b) + 1);
25
+ t.rangeLine.datum(L).attr("d", x).style("display", "block");
26
+ }
27
+ }).on("mouseleave", () => {
28
+ t.hoverLine.style("display", "none"), t.hoverCircle.style("display", "none");
29
+ }).on("mousedown", function(p) {
30
+ const [m] = s.pointer(p, this);
31
+ n.startPoint = y(m);
32
+ }).on("mouseup", () => {
33
+ n.startPoint = null, t.selection.style("display", "none"), t.rangeLine.style("display", "none"), t.borderLeft.style("display", "none"), t.borderRight.style("display", "none"), t.circle1.style("display", "none"), t.circle2.style("display", "none");
34
+ });
35
+ }, A = (r, d) => {
36
+ const a = s.select(r);
37
+ if (a.empty()) {
38
+ console.error(`Element with selector ${r} not found!`);
39
+ return;
40
+ }
41
+ const l = a.append("svg"), i = {
42
+ svg: l,
43
+ data: [],
44
+ x: s.scaleTime(),
45
+ y: s.scaleLinear(),
46
+ config: d.config,
47
+ elements: v(l),
48
+ state: { startPoint: null }
49
+ }, t = (n) => {
50
+ const { width: e, height: o, margin: h } = n.config;
51
+ i.config = n.config, i.data = n.data.map((y) => ({
52
+ date: s.timeParse("%Y-%m-%d")(y.date),
53
+ value: y.value
54
+ })), i.x.domain(s.extent(i.data, (y) => y.date)).range([h.left, e - h.right]), i.y.domain([0, s.max(i.data, (y) => y.value)]).nice().range([o - h.bottom, h.top]), l.attr("width", e).attr("height", o), l.selectAll("*").remove(), i.elements = v(l), C(i), F(i), P(i);
55
+ };
56
+ return t(d), {
57
+ update: (n) => t(n),
58
+ destroy: () => l.remove()
59
+ };
60
+ };
61
+ export {
62
+ A as createLineChart
63
+ };
64
+ //# sourceMappingURL=charts-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts-core.js","sources":["../src/components/line-chart/axes.ts","../src/components/line-chart/line.ts","../src/components/line-chart/elements.ts","../src/components/line-chart/interactions.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext } from './types'\n\nexport const createAxes = ({ svg, config, x, y }: ChartContext) => {\n const { width, height, margin } = config\n\n svg\n .append('g')\n .attr('transform', `translate(0,${height - margin.bottom})`)\n .call(d3.axisBottom(x).ticks(5))\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('text').attr('fill', 'gray'))\n\n svg\n .append('g')\n .attr('transform', `translate(${width - margin.right},0)`)\n .call(d3.axisRight(y))\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('text').attr('fill', 'gray'))\n .call((g) => g.selectAll('.tick line').remove())\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from './types'\n\nexport const renderLine = ({ svg, data, x, y }: ChartContext) => {\n const line = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveCardinal.tension(0.6))\n\n svg\n .append('path')\n .datum(data)\n .attr('fill', 'none')\n .attr('stroke', '#007AFF')\n .attr('stroke-width', 2)\n .attr('d', line)\n}\n","import { Selection } from 'd3-selection'\n\nexport const createElements = (svg: Selection<SVGSVGElement, unknown, HTMLElement, any>) => ({\n selection: svg.append('rect').attr('fill', '#F1816911').style('display', 'none'),\n hoverLine: svg\n .append('line')\n .attr('stroke', '#C7C7C9')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n hoverCircle: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#007AFF')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n borderLeft: svg\n .append('line')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n borderRight: svg\n .append('line')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n rangeLine: svg\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n circle1: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#F18169')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n circle2: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#F18169')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n})\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from './types'\n\nexport const setupInteractions = ({ svg, data, x, y, config, elements, state }: ChartContext) => {\n const { height, margin, width } = config\n\n const findClosest = (mouseX: number) =>\n data.reduce((a, b) => (Math.abs(x(a.date) - mouseX) < Math.abs(x(b.date) - mouseX) ? a : b))\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 const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveCardinal.tension(0.6))\n\n overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n elements.hoverLine\n .attr('x1', x(closest.date))\n .attr('x2', x(closest.date))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.hoverCircle\n .attr('cx', x(closest.date))\n .attr('cy', y(closest.value))\n .style('display', 'block')\n\n if (state.startPoint) {\n const widthSel = x(closest.date) - x(state.startPoint.date)\n const xStart = Math.min(x(state.startPoint.date), x(closest.date))\n\n elements.selection\n .attr('x', xStart)\n .attr('width', Math.abs(widthSel))\n .attr('y', margin.top)\n .attr('height', height - margin.top - margin.bottom)\n .style('display', 'block')\n\n elements.borderLeft\n .attr('x1', xStart)\n .attr('x2', xStart)\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.borderRight\n .attr('x1', xStart + Math.abs(widthSel))\n .attr('x2', xStart + Math.abs(widthSel))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.circle1\n .attr('cx', x(state.startPoint.date))\n .attr('cy', y(state.startPoint.value))\n .style('display', 'block')\n\n elements.circle2\n .attr('cx', x(closest.date))\n .attr('cy', y(closest.value))\n .style('display', 'block')\n\n const i1 = data.findIndex((d) => d.date.getTime() === state.startPoint!.date.getTime())\n const i2 = data.findIndex((d) => d.date.getTime() === closest.date.getTime())\n\n const slice = data.slice(Math.min(i1, i2), Math.max(i1, i2) + 1)\n elements.rangeLine.datum(slice).attr('d', lineGen).style('display', 'block')\n }\n })\n .on('mouseleave', () => {\n elements.hoverLine.style('display', 'none')\n elements.hoverCircle.style('display', 'none')\n })\n .on('mousedown', function (event) {\n const [mouseX] = d3.pointer(event, this)\n state.startPoint = findClosest(mouseX)\n })\n .on('mouseup', () => {\n state.startPoint = null\n elements.selection.style('display', 'none')\n elements.rangeLine.style('display', 'none')\n elements.borderLeft.style('display', 'none')\n elements.borderRight.style('display', 'none')\n elements.circle1.style('display', 'none')\n elements.circle2.style('display', 'none')\n })\n}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { renderLine } from './line'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { LineChartOptions, ChartContext } from './types'\n\nexport const createLineChart = (selector: string, initialOptions: LineChartOptions) => {\n const container = d3.select(selector)\n\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return\n }\n const svg = container.append('svg')\n const context: ChartContext = {\n svg,\n data: [],\n x: d3.scaleTime(),\n y: d3.scaleLinear(),\n config: initialOptions.config,\n elements: createElements(svg),\n state: { startPoint: null },\n }\n\n const render = (options: LineChartOptions) => {\n const { width, height, margin } = options.config\n\n context.config = options.config\n context.data = options.data.map((d) => ({\n date: d3.timeParse('%Y-%m-%d')(d.date)!,\n value: d.value,\n }))\n\n context.x\n .domain(d3.extent(context.data, (d) => d.date) as [Date, Date])\n .range([margin.left, width - margin.right])\n\n context.y\n .domain([0, d3.max(context.data, (d) => d.value)!])\n .nice()\n .range([height - margin.bottom, margin.top])\n\n svg.attr('width', width).attr('height', height)\n svg.selectAll('*').remove()\n\n context.elements = createElements(svg)\n createAxes(context)\n renderLine(context)\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: LineChartOptions) => render(options),\n destroy: () => svg.remove(),\n }\n}\n"],"names":["createAxes","svg","config","x","y","width","height","margin","d3","g","renderLine","data","line","d","createElements","setupInteractions","elements","state","findClosest","mouseX","a","b","overlay","lineGen","event","closest","widthSel","xStart","i1","i2","slice","createLineChart","selector","initialOptions","container","context","render","options"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ (function(h,m){typeof exports=="object"&&typeof module<"u"?m(exports,require("d3")):typeof define=="function"&&define.amd?define(["exports","d3"],m):(h=typeof globalThis<"u"?globalThis:h||self,m(h.ChartsCore={},h.d3))})(this,function(h,m){"use strict";function C(e){const s=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const a in e)if(a!=="default"){const n=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(s,a,n.get?n:{enumerable:!0,get:()=>e[a]})}}return s.default=e,Object.freeze(s)}const c=C(m),L=({svg:e,config:s,x:a,y:n})=>{const{width:l,height:t,margin:i}=s;e.append("g").attr("transform",`translate(0,${t-i.bottom})`).call(c.axisBottom(a).ticks(5)).call(r=>r.select(".domain").remove()).call(r=>r.selectAll(".tick line").remove()).call(r=>r.selectAll("text").attr("fill","gray")),e.append("g").attr("transform",`translate(${l-i.right},0)`).call(c.axisRight(n)).call(r=>r.select(".domain").remove()).call(r=>r.selectAll("text").attr("fill","gray")).call(r=>r.selectAll(".tick line").remove())},P=({svg:e,data:s,x:a,y:n})=>{const l=c.line().x(t=>a(t.date)).y(t=>n(t.value)).curve(c.curveCardinal.tension(.6));e.append("path").datum(s).attr("fill","none").attr("stroke","#007AFF").attr("stroke-width",2).attr("d",l)},v=e=>({selection:e.append("rect").attr("fill","#F1816911").style("display","none"),hoverLine:e.append("line").attr("stroke","#C7C7C9").attr("stroke-width",1).style("display","none"),hoverCircle:e.append("circle").attr("r",4).attr("fill","#007AFF").attr("stroke","white").attr("stroke-width",2).style("display","none"),borderLeft:e.append("line").attr("stroke","#F18169").attr("stroke-width",1).style("display","none"),borderRight:e.append("line").attr("stroke","#F18169").attr("stroke-width",1).style("display","none"),rangeLine:e.append("path").attr("fill","none").attr("stroke","#F18169").attr("stroke-width",2).style("display","none"),circle1:e.append("circle").attr("r",4).attr("fill","#F18169").attr("stroke","white").attr("stroke-width",2).style("display","none"),circle2:e.append("circle").attr("r",4).attr("fill","#F18169").attr("stroke","white").attr("stroke-width",2).style("display","none")}),F=({svg:e,data:s,x:a,y:n,config:l,elements:t,state:i})=>{const{height:r,margin:o,width:f}=l,y=p=>s.reduce((u,d)=>Math.abs(a(u.date)-p)<Math.abs(a(d.date)-p)?u:d),T=e.append("rect").attr("width",f-o.left-o.right).attr("height",r-o.top-o.bottom).attr("x",o.left).attr("y",o.top).attr("fill","transparent"),A=c.line().x(p=>a(p.date)).y(p=>n(p.value)).curve(c.curveCardinal.tension(.6));T.on("mousemove",function(p){const[u]=c.pointer(p,this),d=y(u);if(t.hoverLine.attr("x1",a(d.date)).attr("x2",a(d.date)).attr("y1",o.top).attr("y2",r-o.bottom).style("display","block"),t.hoverCircle.attr("cx",a(d.date)).attr("cy",n(d.value)).style("display","block"),i.startPoint){const b=a(d.date)-a(i.startPoint.date),g=Math.min(a(i.startPoint.date),a(d.date));t.selection.attr("x",g).attr("width",Math.abs(b)).attr("y",o.top).attr("height",r-o.top-o.bottom).style("display","block"),t.borderLeft.attr("x1",g).attr("x2",g).attr("y1",o.top).attr("y2",r-o.bottom).style("display","block"),t.borderRight.attr("x1",g+Math.abs(b)).attr("x2",g+Math.abs(b)).attr("y1",o.top).attr("y2",r-o.bottom).style("display","block"),t.circle1.attr("cx",a(i.startPoint.date)).attr("cy",n(i.startPoint.value)).style("display","block"),t.circle2.attr("cx",a(d.date)).attr("cy",n(d.value)).style("display","block");const w=s.findIndex(k=>k.date.getTime()===i.startPoint.date.getTime()),x=s.findIndex(k=>k.date.getTime()===d.date.getTime()),j=s.slice(Math.min(w,x),Math.max(w,x)+1);t.rangeLine.datum(j).attr("d",A).style("display","block")}}).on("mouseleave",()=>{t.hoverLine.style("display","none"),t.hoverCircle.style("display","none")}).on("mousedown",function(p){const[u]=c.pointer(p,this);i.startPoint=y(u)}).on("mouseup",()=>{i.startPoint=null,t.selection.style("display","none"),t.rangeLine.style("display","none"),t.borderLeft.style("display","none"),t.borderRight.style("display","none"),t.circle1.style("display","none"),t.circle2.style("display","none")})},M=(e,s)=>{const a=c.select(e);if(a.empty()){console.error(`Element with selector ${e} not found!`);return}const n=a.append("svg"),l={svg:n,data:[],x:c.scaleTime(),y:c.scaleLinear(),config:s.config,elements:v(n),state:{startPoint:null}},t=i=>{const{width:r,height:o,margin:f}=i.config;l.config=i.config,l.data=i.data.map(y=>({date:c.timeParse("%Y-%m-%d")(y.date),value:y.value})),l.x.domain(c.extent(l.data,y=>y.date)).range([f.left,r-f.right]),l.y.domain([0,c.max(l.data,y=>y.value)]).nice().range([o-f.bottom,f.top]),n.attr("width",r).attr("height",o),n.selectAll("*").remove(),l.elements=v(n),L(l),P(l),F(l)};return t(s),{update:i=>t(i),destroy:()=>n.remove()}};h.createLineChart=M,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
2
+ //# sourceMappingURL=charts-core.umd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts-core.umd.cjs","sources":["../src/components/line-chart/axes.ts","../src/components/line-chart/line.ts","../src/components/line-chart/elements.ts","../src/components/line-chart/interactions.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext } from './types'\n\nexport const createAxes = ({ svg, config, x, y }: ChartContext) => {\n const { width, height, margin } = config\n\n svg\n .append('g')\n .attr('transform', `translate(0,${height - margin.bottom})`)\n .call(d3.axisBottom(x).ticks(5))\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('.tick line').remove())\n .call((g) => g.selectAll('text').attr('fill', 'gray'))\n\n svg\n .append('g')\n .attr('transform', `translate(${width - margin.right},0)`)\n .call(d3.axisRight(y))\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('text').attr('fill', 'gray'))\n .call((g) => g.selectAll('.tick line').remove())\n}\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from './types'\n\nexport const renderLine = ({ svg, data, x, y }: ChartContext) => {\n const line = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveCardinal.tension(0.6))\n\n svg\n .append('path')\n .datum(data)\n .attr('fill', 'none')\n .attr('stroke', '#007AFF')\n .attr('stroke-width', 2)\n .attr('d', line)\n}\n","import { Selection } from 'd3-selection'\n\nexport const createElements = (svg: Selection<SVGSVGElement, unknown, HTMLElement, any>) => ({\n selection: svg.append('rect').attr('fill', '#F1816911').style('display', 'none'),\n hoverLine: svg\n .append('line')\n .attr('stroke', '#C7C7C9')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n hoverCircle: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#007AFF')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n borderLeft: svg\n .append('line')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n borderRight: svg\n .append('line')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 1)\n .style('display', 'none'),\n rangeLine: svg\n .append('path')\n .attr('fill', 'none')\n .attr('stroke', '#F18169')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n circle1: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#F18169')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n circle2: svg\n .append('circle')\n .attr('r', 4)\n .attr('fill', '#F18169')\n .attr('stroke', 'white')\n .attr('stroke-width', 2)\n .style('display', 'none'),\n})\n","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from './types'\n\nexport const setupInteractions = ({ svg, data, x, y, config, elements, state }: ChartContext) => {\n const { height, margin, width } = config\n\n const findClosest = (mouseX: number) =>\n data.reduce((a, b) => (Math.abs(x(a.date) - mouseX) < Math.abs(x(b.date) - mouseX) ? a : b))\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 const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveCardinal.tension(0.6))\n\n overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n elements.hoverLine\n .attr('x1', x(closest.date))\n .attr('x2', x(closest.date))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.hoverCircle\n .attr('cx', x(closest.date))\n .attr('cy', y(closest.value))\n .style('display', 'block')\n\n if (state.startPoint) {\n const widthSel = x(closest.date) - x(state.startPoint.date)\n const xStart = Math.min(x(state.startPoint.date), x(closest.date))\n\n elements.selection\n .attr('x', xStart)\n .attr('width', Math.abs(widthSel))\n .attr('y', margin.top)\n .attr('height', height - margin.top - margin.bottom)\n .style('display', 'block')\n\n elements.borderLeft\n .attr('x1', xStart)\n .attr('x2', xStart)\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.borderRight\n .attr('x1', xStart + Math.abs(widthSel))\n .attr('x2', xStart + Math.abs(widthSel))\n .attr('y1', margin.top)\n .attr('y2', height - margin.bottom)\n .style('display', 'block')\n\n elements.circle1\n .attr('cx', x(state.startPoint.date))\n .attr('cy', y(state.startPoint.value))\n .style('display', 'block')\n\n elements.circle2\n .attr('cx', x(closest.date))\n .attr('cy', y(closest.value))\n .style('display', 'block')\n\n const i1 = data.findIndex((d) => d.date.getTime() === state.startPoint!.date.getTime())\n const i2 = data.findIndex((d) => d.date.getTime() === closest.date.getTime())\n\n const slice = data.slice(Math.min(i1, i2), Math.max(i1, i2) + 1)\n elements.rangeLine.datum(slice).attr('d', lineGen).style('display', 'block')\n }\n })\n .on('mouseleave', () => {\n elements.hoverLine.style('display', 'none')\n elements.hoverCircle.style('display', 'none')\n })\n .on('mousedown', function (event) {\n const [mouseX] = d3.pointer(event, this)\n state.startPoint = findClosest(mouseX)\n })\n .on('mouseup', () => {\n state.startPoint = null\n elements.selection.style('display', 'none')\n elements.rangeLine.style('display', 'none')\n elements.borderLeft.style('display', 'none')\n elements.borderRight.style('display', 'none')\n elements.circle1.style('display', 'none')\n elements.circle2.style('display', 'none')\n })\n}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { renderLine } from './line'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { LineChartOptions, ChartContext } from './types'\n\nexport const createLineChart = (selector: string, initialOptions: LineChartOptions) => {\n const container = d3.select(selector)\n\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return\n }\n const svg = container.append('svg')\n const context: ChartContext = {\n svg,\n data: [],\n x: d3.scaleTime(),\n y: d3.scaleLinear(),\n config: initialOptions.config,\n elements: createElements(svg),\n state: { startPoint: null },\n }\n\n const render = (options: LineChartOptions) => {\n const { width, height, margin } = options.config\n\n context.config = options.config\n context.data = options.data.map((d) => ({\n date: d3.timeParse('%Y-%m-%d')(d.date)!,\n value: d.value,\n }))\n\n context.x\n .domain(d3.extent(context.data, (d) => d.date) as [Date, Date])\n .range([margin.left, width - margin.right])\n\n context.y\n .domain([0, d3.max(context.data, (d) => d.value)!])\n .nice()\n .range([height - margin.bottom, margin.top])\n\n svg.attr('width', width).attr('height', height)\n svg.selectAll('*').remove()\n\n context.elements = createElements(svg)\n createAxes(context)\n renderLine(context)\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: LineChartOptions) => render(options),\n destroy: () => svg.remove(),\n }\n}\n"],"names":["createAxes","svg","config","x","y","width","height","margin","d3","g","renderLine","data","line","d","createElements","setupInteractions","elements","state","findClosest","mouseX","a","b","overlay","lineGen","event","closest","widthSel","xStart","i1","i2","slice","createLineChart","selector","initialOptions","container","context","render","options"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "charts-core",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "files": ["dist"],
6
+ "main": "./dist/charts-core.umd.cjs",
7
+ "module": "./dist/charts-core.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/charts-core.js",
11
+ "require": "./dist/charts-core.umd.cjs"
12
+ }
13
+ },
14
+ "license": "ISC",
15
+ "scripts": {
16
+ "dev": "vite",
17
+ "build:lib": "vue-tsc && vite build --mode lib",
18
+ "build:app": "vue-tsc && vite build --mode app",
19
+ "preview": "vite preview",
20
+ "prepublishOnly": "npm run build:lib"
21
+ },
22
+ "dependencies": {
23
+ "d3": "^7.9.0",
24
+ "vue": "^3.5.13"
25
+ },
26
+ "devDependencies": {
27
+ "@types/d3": "^7.4.3",
28
+ "@types/node": "^22.14.0",
29
+ "@vitejs/plugin-vue": "^5.2.3",
30
+ "typescript": "~5.7.2",
31
+ "vite": "^6.2.0",
32
+ "vue-tsc": "^2.2.8"
33
+ }
34
+ }