charts-core 0.0.3 → 0.0.12
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/dist/charts-core.css +1 -0
- package/dist/charts-core.js +343 -53
- package/dist/charts-core.js.map +1 -1
- package/dist/charts-core.umd.cjs +1 -1
- package/dist/charts-core.umd.cjs.map +1 -1
- package/dist/scope-logo-dark.svg +33 -0
- package/dist/scope-logo-light.svg +33 -0
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.sc-charts{--sc-color-main-line: #007aff;--sc-color-hover-circle-fill: #007aff;--sc-color-hover-circle-stroke: #ffffff;--sc-color-range-circle-stroke: #ffffff;--sc-color-selection-up: #56b683;--sc-color-selection-up-label-text: #56b683;--sc-color-selection-down: #f18169;--sc-color-selection-down-label-text: #e8674b;--sc-color-text-secondary: #8e8e93;color:var(--sc-color-text-base)}.sc-charts__light{--sc-color-bg: #ffffff;--sc-color-axis-text: #ababae;--sc-color-axis-zero-line: #ededed;--sc-color-selection-down-label-bg: #fdf5f3;--sc-color-selection-down-label-border: #fde8e3;--sc-color-selection-up-label-bg: #f3f9f5;--sc-color-selection-up-label-border: #d9eee0;--sc-color-text-base: #1c2026;--sc-color-main-line-muted: #d9ebff;--sc-color-main-line-selected-muted: #ededed;--sc-color-hover-line: #c7c7c9}.sc-charts__dark{--sc-color-bg: #101213;--sc-color-axis-text: #8e8e93;--sc-color-axis-zero-line: #3d3d3d;--sc-color-selection-down-label-bg: #2d1915;--sc-color-selection-down-label-border: #6c3a2f;--sc-color-selection-up-label-bg: #192b23;--sc-color-selection-up-label-border: #254034;--sc-color-text-base: #ffffff;--sc-color-main-line-muted: #0e2236;--sc-color-main-line-selected-muted: #292929;--sc-color-hover-line: #ffffff}.sc-charts__main-line{stroke:var(--sc-color-main-line);stroke-width:2;fill:none;transition:all .3s}.sc-charts__main-line_muted{stroke:var(--sc-color-main-line-muted);transition:all .3s}.sc-charts__main-line_selected-muted{stroke:var(--sc-color-main-line-selected-muted);transition:all .3s}.sc-charts__range-label{overflow:visible;-webkit-user-select:none;user-select:none;font-family:inherit;font-weight:400;font-size:14px}.sc-charts__range-label-container{display:inline-block;white-space:nowrap;padding:8px 12px;border:1px solid;border-radius:8px;transform:translate(-50%)}.sc-charts__range-label-sum{font-weight:600;margin-bottom:2px}.sc-charts__range-label_up .sc-charts__range-label-container{background-color:var(--sc-color-selection-up-label-bg);border-color:var(--sc-color-selection-up-label-border)}.sc-charts__range-label_up .sc-charts__range-label-sum{color:var(--sc-color-selection-up-label-text)}.sc-charts__range-label_down .sc-charts__range-label-container{background-color:var(--sc-color-selection-down-label-bg);border-color:var(--sc-color-selection-down-label-border)}.sc-charts__range-label_down .sc-charts__range-label-sum{color:var(--sc-color-selection-down-label-text)}.sc-charts__hover-circle{stroke:var(--sc-color-hover-circle-stroke);fill:var(--sc-color-hover-circle-fill);stroke-width:2}.sc-charts__range-circle-left,.sc-charts__range-circle-right{stroke:var(--sc-color-range-circle-stroke);stroke-width:2}.sc-charts__range-circle-left_up,.sc-charts__range-circle-right_up{fill:var(--sc-color-selection-up)}.sc-charts__range-circle-left_down,.sc-charts__range-circle-right_down{fill:var(--sc-color-selection-down)}.sc-charts__range-line{fill:none;stroke-width:2}.sc-charts__range-line_up{stroke:var(--sc-color-selection-up)}.sc-charts__range-line_down{stroke:var(--sc-color-selection-down)}.sc-charts__border-range-line{stroke-width:1}.sc-charts__border-range-line_up{stroke:url(#gradient-range-borders-up)}.sc-charts__border-range-line_down{stroke:url(#gradient-range-borders-down)}.sc-charts__hover-line{stroke:url(#hover-line-gradient);stroke-width:1}.sc-charts__highlight-line{stroke-width:2;fill:none;stroke:var(--sc-color-main-line)}
|
package/dist/charts-core.js
CHANGED
|
@@ -1,64 +1,354 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
const
|
|
3
|
-
const {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
1
|
+
import * as u from "d3";
|
|
2
|
+
const N = (t) => {
|
|
3
|
+
const { svg: e, config: n, y: i } = t, { width: l, margin: o, yAxis: s } = n, { customTicks: r, tickFormat: a, tickValues: d, ticks: c, isShow: m } = s;
|
|
4
|
+
if (!m) return null;
|
|
5
|
+
e.append("g").attr("transform", `translate(${l - o.right},0)`).call((g) => {
|
|
6
|
+
let f = u.axisRight(i);
|
|
7
|
+
r ? (a && (f = f.tickFormat(a)), c && (f = Array.isArray(c) ? f.ticks(...c) : f.ticks(c)), d && (f = f.tickValues(d))) : f = f.tickFormat((h) => {
|
|
8
|
+
const v = Number(h), y = v < 0 ? "-" : "", x = u.format(".0s")(Math.abs(v));
|
|
9
|
+
return `${y}${x}`;
|
|
10
|
+
}), g.call(f);
|
|
11
|
+
}).call((g) => g.select(".domain").remove()).call((g) => g.selectAll("text").attr("fill", "var(--sc-color-axis-text)")).call((g) => g.selectAll(".tick line").remove());
|
|
12
|
+
}, A = (t) => {
|
|
13
|
+
const { svg: e, config: n, x: i } = t, { height: l, margin: o, xAxis: s } = n, { isShow: r } = s;
|
|
14
|
+
if (!r) return null;
|
|
15
|
+
e.append("g").attr("transform", `translate(0,${l - o.bottom})`).call(u.axisBottom(i).ticks(5)).call((a) => a.select(".domain").remove()).call((a) => a.selectAll(".tick line").remove()).call((a) => a.selectAll("text").attr("fill", "var(--sc-color-axis-text)"));
|
|
16
|
+
}, R = (t) => {
|
|
17
|
+
const { svg: e, config: n, y: i } = t, { width: l, height: o, margin: s, logo: r } = n;
|
|
18
|
+
A(t), N(t), r && e.append("image").attr("xlink:href", `scope-logo-${n.theme}.svg`).attr("width", r.width).attr("height", r.height).attr("x", (l - s.left - s.right) / 2 - r.width / 2 + s.left).attr("y", (o - s.top - s.bottom) / 2 - r.height / 2 + s.top), e.append("line").attr("x1", 0 + s.left).attr("x2", l - s.right).attr("y1", i(0)).attr("y2", i(0)).attr("stroke", "var(--sc-color-axis-zero-line)").attr("stroke-dasharray", "4 4").attr("stroke-width", 1);
|
|
19
|
+
}, B = (t, e = {}) => {
|
|
20
|
+
let n = t.append("rect").classed("sc-charts__sc-selection", !0).style("display", e.hidden ? "none" : "block");
|
|
21
|
+
const i = "sc-charts__selection";
|
|
22
|
+
return {
|
|
23
|
+
className(l, o) {
|
|
24
|
+
l === "remove" ? n.classed(`${i}${o}`, !1) : n.classed(`${i}${o}`, !0);
|
|
25
|
+
},
|
|
26
|
+
update({ width: l, x: o, y: s, height: r, fill: a, hidden: d }) {
|
|
27
|
+
l !== void 0 && n.attr("width", l), o !== void 0 && n.attr("x", o), s !== void 0 && n.attr("y", s), r !== void 0 && n.attr("height", r), a !== void 0 && n.attr("fill", a), d !== void 0 && n.style("display", d ? "none" : "block");
|
|
28
|
+
},
|
|
29
|
+
destroy() {
|
|
30
|
+
n.remove();
|
|
26
31
|
}
|
|
32
|
+
};
|
|
33
|
+
}, _ = (t, e, n) => {
|
|
34
|
+
let i = t.select(`#${e}`);
|
|
35
|
+
return i.empty() && (i = t.append("linearGradient").attr("gradientUnits", "userSpaceOnUse").attr("id", e)), i.attr("x1", n.x1).attr("y1", n.x2).attr("x2", n.y1).attr("y2", n.y2), n.stops.forEach(({ offset: l, stopColor: o }) => {
|
|
36
|
+
i.append("stop").attr("offset", l).attr("stop-color", o);
|
|
37
|
+
}), i;
|
|
38
|
+
}, C = (t) => {
|
|
39
|
+
const e = u.select(t).select("defs");
|
|
40
|
+
return e.empty() ? u.select(t).append("defs") : e;
|
|
41
|
+
}, b = (t, e) => ({
|
|
42
|
+
...t,
|
|
43
|
+
...e,
|
|
44
|
+
margin: {
|
|
45
|
+
...t.margin,
|
|
46
|
+
...e == null ? void 0 : e.margin
|
|
47
|
+
},
|
|
48
|
+
logo: t.logo && (e != null && e.logo) ? {
|
|
49
|
+
width: e.logo.width ?? t.logo.width,
|
|
50
|
+
height: e.logo.height ?? t.logo.height
|
|
51
|
+
} : t.logo,
|
|
52
|
+
xAxis: {
|
|
53
|
+
...t.xAxis,
|
|
54
|
+
...e == null ? void 0 : e.xAxis
|
|
55
|
+
},
|
|
56
|
+
yAxis: {
|
|
57
|
+
...t.yAxis,
|
|
58
|
+
...e == null ? void 0 : e.yAxis
|
|
59
|
+
}
|
|
60
|
+
}), w = (t, e = {}) => {
|
|
61
|
+
const n = t.node(), i = C(n), l = (r, a) => _(i, r, {
|
|
62
|
+
x1: "0%",
|
|
63
|
+
y1: "0%",
|
|
64
|
+
x2: "0%",
|
|
65
|
+
y2: "100%",
|
|
66
|
+
stops: [
|
|
67
|
+
{ offset: "0%", stopColor: "rgba(255, 255, 255, 0)" },
|
|
68
|
+
{ offset: "20%", stopColor: a },
|
|
69
|
+
{ offset: "60%", stopColor: a },
|
|
70
|
+
{ offset: "100%", stopColor: "rgba(255, 255, 255, 0)" }
|
|
71
|
+
]
|
|
72
|
+
});
|
|
73
|
+
l("gradient-range-borders-up", "var(--sc-color-selection-up)"), l("gradient-range-borders-down", "var(--sc-color-selection-down)");
|
|
74
|
+
const o = "sc-charts__border-range-line", s = t.append("line").classed(o, !0).style("display", e.hidden ? "none" : "block");
|
|
75
|
+
return {
|
|
76
|
+
className(r, a) {
|
|
77
|
+
r === "remove" ? s.classed(`${o}${a}`, !1) : s.classed(`${o}${a}`, !0);
|
|
78
|
+
},
|
|
79
|
+
update({ x1: r, x2: a, y1: d, y2: c, hidden: m }) {
|
|
80
|
+
r !== void 0 && s.attr("x1", r), a !== void 0 && s.attr("x2", a), d !== void 0 && s.attr("y1", d), c !== void 0 && s.attr("y2", c), m !== void 0 && s.style("display", m ? "none" : "block");
|
|
81
|
+
},
|
|
82
|
+
destroy() {
|
|
83
|
+
s.remove();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}, $ = (t, e = {}) => {
|
|
87
|
+
const n = t.append("circle").attr("r", e.radius || 4).style("display", e.hidden ? "none" : "block"), i = e.className || "";
|
|
88
|
+
return i && n.classed(i, !0), {
|
|
89
|
+
className(l, o) {
|
|
90
|
+
l === "remove" ? n.classed(`${i}${o}`, !1) : n.classed(`${i}${o}`, !0);
|
|
91
|
+
},
|
|
92
|
+
update({ cx: l, cy: o, hidden: s, fill: r }) {
|
|
93
|
+
l !== void 0 && n.attr("cx", l), o !== void 0 && n.attr("cy", o), r !== void 0 && n.attr("fill", r), s !== void 0 && n.style("display", s ? "none" : "block");
|
|
94
|
+
},
|
|
95
|
+
destroy() {
|
|
96
|
+
n.remove();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}, F = (t, e = {}) => {
|
|
100
|
+
const n = "sc-charts__hover-line", i = t.append("line").style("display", e.hidden ? "none" : "block").classed(n, !0), l = t.node(), o = C(l);
|
|
101
|
+
return ((r, a) => _(o, r, {
|
|
102
|
+
x1: "0%",
|
|
103
|
+
y1: "0%",
|
|
104
|
+
x2: "0%",
|
|
105
|
+
y2: "100%",
|
|
106
|
+
stops: [
|
|
107
|
+
{ offset: "0%", stopColor: "rgba(255, 255, 255, 0)" },
|
|
108
|
+
{ offset: "15%", stopColor: a },
|
|
109
|
+
{ offset: "75%", stopColor: a },
|
|
110
|
+
{ offset: "100%", stopColor: "rgba(255, 255, 255, 0)" }
|
|
111
|
+
]
|
|
112
|
+
}))("hover-line-gradient", "var(--sc-color-hover-line)"), {
|
|
113
|
+
className(r, a) {
|
|
114
|
+
r === "remove" ? i.classed(`${n}${a}`, !1) : i.classed(`${n}${a}`, !0);
|
|
115
|
+
},
|
|
116
|
+
update({ x1: r, x2: a, y1: d, y2: c, hidden: m }) {
|
|
117
|
+
r !== void 0 && i.attr("x1", r), a !== void 0 && i.attr("x2", a), d !== void 0 && i.attr("y1", d), c !== void 0 && i.attr("y2", c), m !== void 0 && i.style("display", m ? "none" : "block");
|
|
118
|
+
},
|
|
119
|
+
destroy() {
|
|
120
|
+
i.remove();
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}, T = ({ svg: t, x: e, y: n }, i = {}) => {
|
|
124
|
+
const l = u.line().x((r) => e(r.date)).y((r) => n(r.value)).curve(u.curveLinear), o = i.className || "sc-charts__range-line", s = t.append("path").classed(i.className || "sc-charts__range-line", !0).style("display", i.hidden ? "none" : "block");
|
|
125
|
+
return {
|
|
126
|
+
className(r, a) {
|
|
127
|
+
r === "remove" ? s.classed(`${o}${a}`, !1) : s.classed(`${o}${a}`, !0);
|
|
128
|
+
},
|
|
129
|
+
update({ data: r, hidden: a, stroke: d }) {
|
|
130
|
+
r !== void 0 && s.datum(r).attr("d", l), d !== void 0 && s.attr("stroke", d), a !== void 0 && s.style("display", a ? "none" : "block");
|
|
131
|
+
},
|
|
132
|
+
destroy() {
|
|
133
|
+
s.remove();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}, G = ({
|
|
137
|
+
svg: t,
|
|
138
|
+
data: e,
|
|
139
|
+
x: n,
|
|
140
|
+
y: i
|
|
141
|
+
}) => {
|
|
142
|
+
const l = u.line().x((r) => n(r.date)).y((r) => i(r.value)).curve(u.curveLinear), o = "sc-charts__main-line", s = t.append("path").classed(o, !0).datum(e).attr("d", l);
|
|
143
|
+
return {
|
|
144
|
+
className(r, a) {
|
|
145
|
+
r === "remove" ? s.classed(`${o}${a}`, !1) : s.classed(`${o}${a}`, !0);
|
|
146
|
+
},
|
|
147
|
+
update({ data: r, hidden: a, stroke: d }) {
|
|
148
|
+
r !== void 0 && s.datum(r).attr("d", l), d !== void 0 && s.attr("stroke", d), a !== void 0 && s.style("display", a ? "none" : "block");
|
|
149
|
+
},
|
|
150
|
+
destroy() {
|
|
151
|
+
s.remove();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}, S = (t) => {
|
|
155
|
+
const e = "sc-charts__range-label", n = t.svg.append("foreignObject").classed(e, !0).style("display", "none"), i = n.append("xhtml:div").attr("xmlns", "http://www.w3.org/1999/xhtml").attr("class", `${e}-container`), l = i.append("xhtml:div").attr("xmlns", "http://www.w3.org/1999/xhtml").attr("class", `${e}-sum`), o = i.append("xhtml:div").attr("xmlns", "http://www.w3.org/1999/xhtml").attr("class", `${e}-time`), s = u.timeFormat("%b %e, %I:%M %p");
|
|
156
|
+
return {
|
|
157
|
+
className(r, a) {
|
|
158
|
+
r === "remove" ? n.classed(`${e}${a}`, !1) : n.classed(`${e}${a}`, !0);
|
|
159
|
+
},
|
|
160
|
+
update({ leftPoint: r, rightPoint: a, x: d, y: c, hidden: m }) {
|
|
161
|
+
if (d !== void 0 && n.attr("x", d), c !== void 0 && n.attr("y", c), r && a) {
|
|
162
|
+
const g = a.value - r.value, f = (g / r.value * 100).toFixed(2), h = `${g < 0 ? "-" : ""}$${Math.abs(g).toFixed(2)} (${f}%)`, v = `${s(r.date)} to ${s(a.date)}`;
|
|
163
|
+
l.text(h), o.text(v);
|
|
164
|
+
const y = t.x(t.data[t.data.length - 1].date), x = t.x(t.data[0].date), p = i.node().getBoundingClientRect();
|
|
165
|
+
p.x < x && n.attr("x", x + p.width / 2), p.x > y - p.width && n.attr("x", y - p.width / 2);
|
|
166
|
+
}
|
|
167
|
+
m !== void 0 && n.style("display", m ? "none" : "block");
|
|
168
|
+
},
|
|
169
|
+
destroy() {
|
|
170
|
+
n.remove();
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
}, I = ({ svg: t, x: e, y: n }, i = {}) => {
|
|
174
|
+
const l = u.line().x((r) => e(r.date)).y((r) => n(r.value)).curve(u.curveLinear), o = i.className || "sc-charts__highlight-line", s = t.append("path").classed(o, !0).style("display", i.hidden ? "none" : "block");
|
|
175
|
+
return {
|
|
176
|
+
className(r, a) {
|
|
177
|
+
r === "remove" ? s.classed(`${o}${a}`, !1) : s.classed(`${o}${a}`, !0);
|
|
178
|
+
},
|
|
179
|
+
update({ data: r, hidden: a, stroke: d }) {
|
|
180
|
+
r !== void 0 && s.datum(r).attr("d", l), d !== void 0 && s.attr("stroke", d), a !== void 0 && s.style("display", a ? "none" : "block");
|
|
181
|
+
},
|
|
182
|
+
destroy() {
|
|
183
|
+
s.remove();
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}, L = (t) => {
|
|
187
|
+
const e = G(t), n = B(t.svg), i = F(t.svg), l = I(t), o = $(t.svg, {
|
|
188
|
+
className: "sc-charts__hover-circle",
|
|
189
|
+
hidden: !0
|
|
190
|
+
}), s = w(t.svg), r = w(t.svg), a = T(t), d = $(t.svg, {
|
|
191
|
+
className: "sc-charts__range-circle-left",
|
|
192
|
+
hidden: !0
|
|
193
|
+
}), c = $(t.svg, {
|
|
194
|
+
className: "sc-charts__range-circle-right",
|
|
195
|
+
hidden: !0
|
|
196
|
+
}), m = S(t);
|
|
197
|
+
return {
|
|
198
|
+
selection: n,
|
|
199
|
+
hoverLine: i,
|
|
200
|
+
hoverCircle: o,
|
|
201
|
+
rangeBorderLeft: s,
|
|
202
|
+
rangeBorderRight: r,
|
|
203
|
+
rangeLine: a,
|
|
204
|
+
rangeCircleLeft: d,
|
|
205
|
+
rangeCircleRight: c,
|
|
206
|
+
mainLine: e,
|
|
207
|
+
rangeLabel: m,
|
|
208
|
+
highlightLine: l
|
|
209
|
+
};
|
|
210
|
+
}, M = (t, e) => {
|
|
211
|
+
const {
|
|
212
|
+
x: n,
|
|
213
|
+
y: i,
|
|
214
|
+
data: l,
|
|
215
|
+
elements: o,
|
|
216
|
+
config: { margin: s, height: r }
|
|
217
|
+
} = t;
|
|
218
|
+
o.hoverLine.update({
|
|
219
|
+
x1: n(e.date),
|
|
220
|
+
x2: n(e.date),
|
|
221
|
+
y1: s.top,
|
|
222
|
+
y2: r - s.bottom,
|
|
223
|
+
hidden: !1
|
|
224
|
+
}), o.hoverCircle.update({
|
|
225
|
+
cx: n(e.date),
|
|
226
|
+
cy: i(e.value),
|
|
227
|
+
hidden: !1
|
|
228
|
+
}), o.highlightLine.update({
|
|
229
|
+
data: l.filter((a) => a.date.getFullYear() === e.date.getFullYear() && a.date.getMonth() === e.date.getMonth()),
|
|
230
|
+
hidden: !1
|
|
231
|
+
}), o.mainLine.className("add", "_muted");
|
|
232
|
+
}, k = (t) => {
|
|
233
|
+
const { elements: e } = t;
|
|
234
|
+
e.hoverLine.update({ hidden: !0 }), e.hoverCircle.update({ hidden: !0 }), e.highlightLine.update({ hidden: !0 }), e.mainLine.className("remove", "_muted");
|
|
235
|
+
}, D = (t, e) => {
|
|
236
|
+
[
|
|
237
|
+
"rangeBorderLeft",
|
|
238
|
+
"rangeBorderRight",
|
|
239
|
+
"rangeCircleLeft",
|
|
240
|
+
"rangeCircleRight",
|
|
241
|
+
"rangeLine",
|
|
242
|
+
"rangeLabel"
|
|
243
|
+
].forEach((i) => {
|
|
244
|
+
e ? (t[i].className("remove", "_down"), t[i].className("add", "_up")) : (t[i].className("remove", "_up"), t[i].className("add", "_down"));
|
|
245
|
+
});
|
|
246
|
+
}, E = (t, e, n) => {
|
|
247
|
+
const {
|
|
248
|
+
x: i,
|
|
249
|
+
y: l,
|
|
250
|
+
data: o,
|
|
251
|
+
config: { margin: s, height: r },
|
|
252
|
+
elements: a
|
|
253
|
+
} = t, d = i(e.date) < i(n.date) ? e : n, c = i(e.date) >= i(n.date) ? e : n, m = c.value - d.value >= 0, g = i(d.date), f = i(c.date), h = f - g, v = o.findIndex((p) => p.date.getTime() === d.date.getTime()), y = o.findIndex((p) => p.date.getTime() === c.date.getTime()), x = o.slice(v, y + 1);
|
|
254
|
+
a.rangeBorderLeft.update({
|
|
255
|
+
x1: g,
|
|
256
|
+
x2: g,
|
|
257
|
+
y1: s.top,
|
|
258
|
+
y2: r - s.bottom,
|
|
259
|
+
hidden: !1
|
|
260
|
+
}), a.rangeBorderRight.update({
|
|
261
|
+
x1: f,
|
|
262
|
+
x2: f,
|
|
263
|
+
y1: s.top,
|
|
264
|
+
y2: r - s.bottom,
|
|
265
|
+
hidden: !1
|
|
266
|
+
}), a.rangeCircleLeft.update({
|
|
267
|
+
cx: g,
|
|
268
|
+
cy: l(d.value),
|
|
269
|
+
hidden: !1
|
|
270
|
+
}), a.rangeCircleRight.update({
|
|
271
|
+
cx: f,
|
|
272
|
+
cy: l(c.value),
|
|
273
|
+
hidden: !1
|
|
274
|
+
}), a.rangeLine.update({
|
|
275
|
+
data: x,
|
|
276
|
+
hidden: !1
|
|
277
|
+
}), a.rangeLabel.update({
|
|
278
|
+
rightPoint: c,
|
|
279
|
+
leftPoint: d,
|
|
280
|
+
x: g + h / 2,
|
|
281
|
+
y: s.top,
|
|
282
|
+
hidden: !1
|
|
283
|
+
}), D(a, m), a.mainLine.className("add", "_selected-muted");
|
|
284
|
+
}, H = (t) => {
|
|
285
|
+
const { elements: e } = t;
|
|
286
|
+
e.selection.update({ hidden: !0 }), e.rangeLine.update({ hidden: !0 }), e.rangeBorderLeft.update({ hidden: !0 }), e.rangeBorderRight.update({ hidden: !0 }), e.rangeCircleLeft.update({ hidden: !0 }), e.rangeCircleRight.update({ hidden: !0 }), e.rangeLabel.update({ hidden: !0 }), e.mainLine.className("remove", "_selected-muted");
|
|
287
|
+
}, V = (t) => {
|
|
288
|
+
const { svg: e, data: n, x: i, config: l } = t, { height: o, margin: s, width: r } = l;
|
|
289
|
+
let a = null, d = !1;
|
|
290
|
+
const c = (g) => n.reduce((f, h) => Math.abs(i(f.date) - g) < Math.abs(i(h.date) - g) ? f : h);
|
|
291
|
+
e.append("rect").attr("width", r - s.left - s.right).attr("height", o - s.top - s.bottom).attr("x", s.left).attr("y", s.top).attr("fill", "transparent").on("mousemove", function(g) {
|
|
292
|
+
const [f] = u.pointer(g, this), h = c(f);
|
|
293
|
+
d ? k(t) : M(t, h), a && E(t, a, h);
|
|
27
294
|
}).on("mouseleave", () => {
|
|
28
|
-
|
|
29
|
-
}).on("mousedown", function(
|
|
30
|
-
|
|
31
|
-
|
|
295
|
+
k(t);
|
|
296
|
+
}).on("mousedown", function(g) {
|
|
297
|
+
d = !0;
|
|
298
|
+
const [f] = u.pointer(g, this);
|
|
299
|
+
a = c(f);
|
|
32
300
|
}).on("mouseup", () => {
|
|
33
|
-
|
|
301
|
+
d = !1, a = null, H(t);
|
|
34
302
|
});
|
|
35
|
-
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
303
|
+
}, X = {
|
|
304
|
+
width: 800,
|
|
305
|
+
height: 300,
|
|
306
|
+
margin: { top: 10, right: 30, bottom: 20, left: 0 },
|
|
307
|
+
theme: "light",
|
|
308
|
+
logo: {
|
|
309
|
+
width: 406,
|
|
310
|
+
height: 113
|
|
311
|
+
},
|
|
312
|
+
xAxis: {
|
|
313
|
+
customTicks: !1,
|
|
314
|
+
tickFormat: null,
|
|
315
|
+
ticks: null,
|
|
316
|
+
tickValues: null,
|
|
317
|
+
isShow: !1
|
|
318
|
+
},
|
|
319
|
+
yAxis: {
|
|
320
|
+
customTicks: !1,
|
|
321
|
+
tickFormat: null,
|
|
322
|
+
ticks: null,
|
|
323
|
+
tickValues: null,
|
|
324
|
+
isShow: !0
|
|
40
325
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
326
|
+
}, Y = (t, e) => {
|
|
327
|
+
const n = u.select(t);
|
|
328
|
+
if (n.empty())
|
|
329
|
+
return console.error(`Element with selector ${t} not found!`), null;
|
|
330
|
+
const i = n.append("svg");
|
|
331
|
+
let l = b(X, e.config);
|
|
332
|
+
const o = (s, r = !1) => {
|
|
333
|
+
r && s.config && (l = b(l, s.config));
|
|
334
|
+
const { width: a, height: d, margin: c } = l, m = s.data.map((v) => ({ date: new Date(v.date), value: v.value })), g = u.scaleTime().domain(u.extent(m, (v) => v.date)).range([c.left, a - c.right]), f = u.scaleLinear().domain(u.extent(m, (v) => v.value)).range([d - c.bottom, c.top]);
|
|
335
|
+
i.attr("width", a).attr("height", d).attr("class", `sc-charts sc-charts__${l.theme}`).selectAll("*").remove();
|
|
336
|
+
const h = {
|
|
337
|
+
svg: i,
|
|
338
|
+
data: m,
|
|
339
|
+
x: g,
|
|
340
|
+
y: f,
|
|
341
|
+
config: l,
|
|
342
|
+
elements: L({ svg: i, data: m, x: g, y: f, config: l })
|
|
343
|
+
};
|
|
344
|
+
R(h), h.elements = L(h), V(h);
|
|
55
345
|
};
|
|
56
|
-
return
|
|
57
|
-
update: (
|
|
58
|
-
destroy: () =>
|
|
346
|
+
return o(e), {
|
|
347
|
+
update: (s) => o(s, !0),
|
|
348
|
+
destroy: () => i.remove()
|
|
59
349
|
};
|
|
60
350
|
};
|
|
61
351
|
export {
|
|
62
|
-
|
|
352
|
+
Y as createLineChart
|
|
63
353
|
};
|
|
64
354
|
//# sourceMappingURL=charts-core.js.map
|
package/dist/charts-core.js.map
CHANGED
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"charts-core.js","sources":["../src/components/line-chart/axes/y-axis.ts","../src/components/line-chart/axes/x-axis.ts","../src/components/line-chart/axes/index.ts","../src/components/line-chart/elements/selection.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-line.ts","../src/components/line-chart/elements/main-line.ts","../src/components/line-chart/elements/range-label.ts","../src/components/line-chart/elements/highlight-line.ts","../src/components/line-chart/elements/index.ts","../src/components/line-chart/interactions/hover.ts","../src/components/line-chart/interactions/selection.ts","../src/components/line-chart/interactions/index.ts","../src/components/line-chart/constants.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext } from '../types'\n\nexport const renderYAxis = (context: ChartContext) => {\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\n g.call(axis)\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('text').attr('fill', 'var(--sc-color-axis-text)'))\n .call((g) => g.selectAll('.tick line').remove())\n}\n","import * as d3 from 'd3'\nimport { ChartContext } from '../types'\n\nexport const renderXAxis = (context: ChartContext) => {\n const { svg, config, x } = context\n const { height, margin, xAxis } = config\n const { isShow } = xAxis\n\n if (!isShow) return null\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', 'var(--sc-color-axis-text)'))\n}\n","import { ChartContext } from '../types'\nimport { renderYAxis } from './y-axis'\nimport { renderXAxis } from './x-axis'\n\nexport const createAxes = (context: ChartContext) => {\n const { svg, config, y } = context\n const { width, height, margin, logo } = config\n\n // x axis\n renderXAxis(context)\n\n // y axis\n renderYAxis(context)\n\n // background image\n if (logo) {\n svg\n .append('image')\n .attr('xlink:href', `scope-logo-${config.theme}.svg`)\n .attr('width', logo.width)\n .attr('height', logo.height)\n .attr('x', (width - margin.left - margin.right) / 2 - logo.width / 2 + margin.left)\n .attr('y', (height - margin.top - margin.bottom) / 2 - logo.height / 2 + margin.top)\n }\n\n // zero-line\n 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-dasharray', '4 4')\n .attr('stroke-width', 1)\n}\n","import { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderSelection = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['selection'] => {\n let item = parent\n .append('rect')\n .classed('sc-charts__sc-selection', true)\n .style('display', options.hidden ? 'none' : 'block')\n\n const baseClassName = 'sc-charts__selection'\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({ width, x, y, height, fill, hidden }) {\n if (width !== undefined) item.attr('width', width)\n if (x !== undefined) item.attr('x', x)\n if (y !== undefined) item.attr('y', y)\n if (height !== undefined) item.attr('height', height)\n if (fill !== undefined) item.attr('fill', fill)\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 { ChartConfig, ChartConfigContext } 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 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 }\n : base.logo,\n\n xAxis: {\n ...base.xAxis,\n ...patch?.xAxis,\n },\n yAxis: {\n ...base.yAxis,\n ...patch?.yAxis,\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 { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ElementOptions } from './types'\n\nexport const renderRangeLine = (\n { svg, x, y }: Omit<ChartContext, 'elements'>,\n options: ElementOptions = {}\n): ChartElements['rangeLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = options.className || 'sc-charts__range-line'\n\n const item = svg\n .append('path')\n .classed(options.className || 'sc-charts__range-line', 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({ data, hidden, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\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 { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements } from './types'\n\nexport const renderMainLine = ({\n svg,\n data,\n x,\n y,\n}: Omit<ChartContext, 'elements'>): ChartElements['mainLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = 'sc-charts__main-line'\n\n const item = svg.append('path').classed(baseClassName, true).datum(data).attr('d', lineGen)\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, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\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 renderRangeLabel = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['rangeLabel'] => {\n const baseClassName = 'sc-charts__range-label'\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.text(valueText)\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 labelDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n if (labelDimensions.x < firstX) {\n foreignObject.attr('x', firstX + labelDimensions.width / 2)\n }\n if (labelDimensions.x > lastX - labelDimensions.width) {\n foreignObject.attr('x', lastX - labelDimensions.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","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ElementOptions } from './types'\n\nexport const renderHighlightLine = (\n { svg, x, y }: Omit<ChartContext, 'elements'>,\n options: ElementOptions = {}\n): ChartElements['highlightLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = options.className || 'sc-charts__highlight-line'\n\n const item = svg\n .append('path')\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({ data, hidden, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import { ChartElements } from './types'\nimport { renderSelection } from './selection'\nimport { renderBorderRangeLine } from './range-border'\nimport { renderCirclePoint } from './circle-point'\nimport { renderHoverLine } from './hover-line'\nimport { renderRangeLine } from './range-line'\nimport { ChartContext } from '../types'\nimport { renderMainLine } from './main-line'\nimport { renderRangeLabel } from './range-label'\nimport { renderHighlightLine } from './highlight-line'\n\n// render each elements by order\nexport const createElements = (context: Omit<ChartContext, 'elements'>): ChartElements => {\n const mainLine = renderMainLine(context)\n const selection = renderSelection(context.svg)\n const hoverLine = renderHoverLine(context.svg)\n const highlightLine = renderHighlightLine(context)\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 = renderRangeLine(context)\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 rangeLabel = renderRangeLabel(context)\n\n return {\n selection,\n hoverLine,\n hoverCircle,\n rangeBorderLeft,\n rangeBorderRight,\n rangeLine,\n rangeCircleLeft,\n rangeCircleRight,\n mainLine,\n rangeLabel,\n highlightLine,\n }\n}\n","import { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderHoverItems = (ctx: ChartContext, closest: ParsedDataPoint) => {\n const {\n x,\n y,\n data,\n elements,\n config: { margin, height },\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.highlightLine.update({\n data: data.filter((d) => {\n return (\n d.date.getFullYear() === closest.date.getFullYear() &&\n d.date.getMonth() === closest.date.getMonth()\n )\n }),\n hidden: false,\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}\n","import { ChartElements } from '../elements/types'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nconst controlIsGrowingClasses = (elements: ChartElements, isGrowing: boolean) => {\n const names: (keyof ChartElements)[] = [\n 'rangeBorderLeft',\n 'rangeBorderRight',\n 'rangeCircleLeft',\n 'rangeCircleRight',\n 'rangeLine',\n 'rangeLabel',\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 data,\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 const iLeft = data.findIndex((d) => d.date.getTime() === leftPoint.date.getTime())\n const iRight = data.findIndex((d) => d.date.getTime() === rightPoint.date.getTime())\n const slice = data.slice(iLeft, iRight + 1)\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 data: slice,\n hidden: false,\n })\n\n elements.rangeLabel.update({\n rightPoint,\n leftPoint,\n x: xLeft + selectionWidth / 2,\n y: margin.top,\n hidden: false,\n })\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.selection.update({ hidden: true })\n elements.rangeLine.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.rangeLabel.update({ hidden: true })\n elements.mainLine.className('remove', '_selected-muted')\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 } = config\n let startPoint: ParsedDataPoint | null = null\n let isDragging = false\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 overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n if (!isDragging) renderHoverItems(ctx, closest)\n else hideHoverItems(ctx)\n\n if (startPoint) {\n renderSelectionItems(ctx, startPoint, closest)\n }\n })\n .on('mouseleave', () => {\n hideHoverItems(ctx)\n })\n .on('mousedown', function (event) {\n isDragging = true\n const [mouseX] = d3.pointer(event, this)\n startPoint = findClosest(mouseX)\n })\n .on('mouseup', () => {\n isDragging = false\n startPoint = null\n\n hideSelectionItems(ctx)\n })\n}\n","import { ChartConfigContext } from './types'\n\nexport const defaultConfig: ChartConfigContext = {\n width: 800,\n height: 300,\n margin: { top: 10, right: 30, bottom: 20, left: 0 },\n theme: 'light',\n logo: {\n width: 406,\n height: 113,\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}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { LineChartDataPoint, ChartContext, ChartConfig } from './types'\nimport { defaultConfig } from './constants'\nimport { mergeConfig } from './utils'\nimport '../../css/line-chart.css'\n\nexport const createLineChart = (\n selector: string,\n initialOptions: { data: LineChartDataPoint[]; config?: ChartConfig }\n) => {\n const container = d3.select(selector)\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return null\n }\n\n const svg = container.append('svg')\n let currentConfig = mergeConfig(defaultConfig, initialOptions.config)\n\n const render = (\n options: { data: LineChartDataPoint[]; config?: ChartConfig },\n isUpdate = false\n ) => {\n if (isUpdate && options.config) {\n currentConfig = mergeConfig(currentConfig, options.config)\n }\n\n const { width, height, margin } = currentConfig\n const data = options.data.map((d) => ({ date: new Date(d.date), value: d.value }))\n\n const x = d3\n .scaleTime()\n .domain(d3.extent(data, (d) => d.date) as [Date, Date])\n .range([margin.left, width - margin.right])\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(data, (d) => d.value) as [number, number])\n .range([height - margin.bottom, margin.top])\n\n svg\n .attr('width', width)\n .attr('height', height)\n .attr('class', `sc-charts sc-charts__${currentConfig.theme}`)\n .selectAll('*')\n .remove()\n\n const context: ChartContext = {\n svg,\n data,\n x,\n y,\n config: currentConfig,\n elements: createElements({ svg, data, x, y, config: currentConfig }),\n }\n\n createAxes(context)\n context.elements = createElements(context)\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: { data: LineChartDataPoint[]; config?: ChartConfig }) =>\n render(options, true),\n destroy: () => svg.remove(),\n }\n}\n"],"names":["renderYAxis","context","svg","config","y","width","margin","yAxis","customTicks","tickFormat","tickValues","ticks","isShow","axis","d3","d","num","sign","formatted","renderXAxis","x","height","xAxis","g","createAxes","logo","renderSelection","parent","options","item","baseClassName","action","mod","fill","hidden","createGradient","defs","gradientId","gradient","offset","stopColor","getDefs","defsSelection","mergeConfig","base","patch","renderBorderRangeLine","createBorderGradient","mainColor","x1","x2","y1","y2","renderCirclePoint","cx","cy","renderHoverLine","renderRangeLine","lineGen","data","stroke","renderMainLine","renderRangeLabel","foreignObject","div","divSum","divTime","timeFormat","leftPoint","rightPoint","delta","percent","valueText","dateText","lastX","firstX","labelDimensions","renderHighlightLine","createElements","mainLine","selection","hoverLine","highlightLine","hoverCircle","rangeBorderLeft","rangeBorderRight","rangeLine","rangeCircleLeft","rangeCircleRight","rangeLabel","renderHoverItems","ctx","closest","elements","hideHoverItems","controlIsGrowingClasses","isGrowing","name","renderSelectionItems","startPoint","xLeft","xRight","selectionWidth","iLeft","iRight","slice","hideSelectionItems","setupInteractions","isDragging","findClosest","mouseX","a","b","event","defaultConfig","createLineChart","selector","initialOptions","container","currentConfig","render","isUpdate"],"mappings":"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"}
|
package/dist/charts-core.umd.cjs
CHANGED
|
@@ -1,2 +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"})});
|
|
1
|
+
(function(y,$){typeof exports=="object"&&typeof module<"u"?$(exports,require("d3")):typeof define=="function"&&define.amd?define(["exports","d3"],$):(y=typeof globalThis<"u"?globalThis:y||self,$(y.ChartsCore={},y.d3))})(this,function(y,$){"use strict";function R(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const s in t)if(s!=="default"){const i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:()=>t[s]})}}return e.default=t,Object.freeze(e)}const m=R($),T=t=>{const{svg:e,config:s,y:i}=t,{width:l,margin:o,yAxis:a}=s,{customTicks:n,tickFormat:r,tickValues:d,ticks:c,isShow:u}=a;if(!u)return null;e.append("g").attr("transform",`translate(${l-o.right},0)`).call(f=>{let g=m.axisRight(i);n?(r&&(g=g.tickFormat(r)),c&&(g=Array.isArray(c)?g.ticks(...c):g.ticks(c)),d&&(g=g.tickValues(d))):g=g.tickFormat(h=>{const v=Number(h),x=v<0?"-":"",b=m.format(".0s")(Math.abs(v));return`${x}${b}`}),f.call(g)}).call(f=>f.select(".domain").remove()).call(f=>f.selectAll("text").attr("fill","var(--sc-color-axis-text)")).call(f=>f.selectAll(".tick line").remove())},B=t=>{const{svg:e,config:s,x:i}=t,{height:l,margin:o,xAxis:a}=s,{isShow:n}=a;if(!n)return null;e.append("g").attr("transform",`translate(0,${l-o.bottom})`).call(m.axisBottom(i).ticks(5)).call(r=>r.select(".domain").remove()).call(r=>r.selectAll(".tick line").remove()).call(r=>r.selectAll("text").attr("fill","var(--sc-color-axis-text)"))},S=t=>{const{svg:e,config:s,y:i}=t,{width:l,height:o,margin:a,logo:n}=s;B(t),T(t),n&&e.append("image").attr("xlink:href",`scope-logo-${s.theme}.svg`).attr("width",n.width).attr("height",n.height).attr("x",(l-a.left-a.right)/2-n.width/2+a.left).attr("y",(o-a.top-a.bottom)/2-n.height/2+a.top),e.append("line").attr("x1",0+a.left).attr("x2",l-a.right).attr("y1",i(0)).attr("y2",i(0)).attr("stroke","var(--sc-color-axis-zero-line)").attr("stroke-dasharray","4 4").attr("stroke-width",1)},F=(t,e={})=>{let s=t.append("rect").classed("sc-charts__sc-selection",!0).style("display",e.hidden?"none":"block");const i="sc-charts__selection";return{className(l,o){l==="remove"?s.classed(`${i}${o}`,!1):s.classed(`${i}${o}`,!0)},update({width:l,x:o,y:a,height:n,fill:r,hidden:d}){l!==void 0&&s.attr("width",l),o!==void 0&&s.attr("x",o),a!==void 0&&s.attr("y",a),n!==void 0&&s.attr("height",n),r!==void 0&&s.attr("fill",r),d!==void 0&&s.style("display",d?"none":"block")},destroy(){s.remove()}}},L=(t,e,s)=>{let i=t.select(`#${e}`);return i.empty()&&(i=t.append("linearGradient").attr("gradientUnits","userSpaceOnUse").attr("id",e)),i.attr("x1",s.x1).attr("y1",s.x2).attr("x2",s.y1).attr("y2",s.y2),s.stops.forEach(({offset:l,stopColor:o})=>{i.append("stop").attr("offset",l).attr("stop-color",o)}),i},k=t=>{const e=m.select(t).select("defs");return e.empty()?m.select(t).append("defs"):e},_=(t,e)=>({...t,...e,margin:{...t.margin,...e==null?void 0:e.margin},logo:t.logo&&(e!=null&&e.logo)?{width:e.logo.width??t.logo.width,height:e.logo.height??t.logo.height}:t.logo,xAxis:{...t.xAxis,...e==null?void 0:e.xAxis},yAxis:{...t.yAxis,...e==null?void 0:e.yAxis}}),C=(t,e={})=>{const s=t.node(),i=k(s),l=(n,r)=>L(i,n,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"20%",stopColor:r},{offset:"60%",stopColor:r},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]});l("gradient-range-borders-up","var(--sc-color-selection-up)"),l("gradient-range-borders-down","var(--sc-color-selection-down)");const o="sc-charts__border-range-line",a=t.append("line").classed(o,!0).style("display",e.hidden?"none":"block");return{className(n,r){n==="remove"?a.classed(`${o}${r}`,!1):a.classed(`${o}${r}`,!0)},update({x1:n,x2:r,y1:d,y2:c,hidden:u}){n!==void 0&&a.attr("x1",n),r!==void 0&&a.attr("x2",r),d!==void 0&&a.attr("y1",d),c!==void 0&&a.attr("y2",c),u!==void 0&&a.style("display",u?"none":"block")},destroy(){a.remove()}}},w=(t,e={})=>{const s=t.append("circle").attr("r",e.radius||4).style("display",e.hidden?"none":"block"),i=e.className||"";return i&&s.classed(i,!0),{className(l,o){l==="remove"?s.classed(`${i}${o}`,!1):s.classed(`${i}${o}`,!0)},update({cx:l,cy:o,hidden:a,fill:n}){l!==void 0&&s.attr("cx",l),o!==void 0&&s.attr("cy",o),n!==void 0&&s.attr("fill",n),a!==void 0&&s.style("display",a?"none":"block")},destroy(){s.remove()}}},G=(t,e={})=>{const s="sc-charts__hover-line",i=t.append("line").style("display",e.hidden?"none":"block").classed(s,!0),l=t.node(),o=k(l);return((n,r)=>L(o,n,{x1:"0%",y1:"0%",x2:"0%",y2:"100%",stops:[{offset:"0%",stopColor:"rgba(255, 255, 255, 0)"},{offset:"15%",stopColor:r},{offset:"75%",stopColor:r},{offset:"100%",stopColor:"rgba(255, 255, 255, 0)"}]}))("hover-line-gradient","var(--sc-color-hover-line)"),{className(n,r){n==="remove"?i.classed(`${s}${r}`,!1):i.classed(`${s}${r}`,!0)},update({x1:n,x2:r,y1:d,y2:c,hidden:u}){n!==void 0&&i.attr("x1",n),r!==void 0&&i.attr("x2",r),d!==void 0&&i.attr("y1",d),c!==void 0&&i.attr("y2",c),u!==void 0&&i.style("display",u?"none":"block")},destroy(){i.remove()}}},M=({svg:t,x:e,y:s},i={})=>{const l=m.line().x(n=>e(n.date)).y(n=>s(n.value)).curve(m.curveLinear),o=i.className||"sc-charts__range-line",a=t.append("path").classed(i.className||"sc-charts__range-line",!0).style("display",i.hidden?"none":"block");return{className(n,r){n==="remove"?a.classed(`${o}${r}`,!1):a.classed(`${o}${r}`,!0)},update({data:n,hidden:r,stroke:d}){n!==void 0&&a.datum(n).attr("d",l),d!==void 0&&a.attr("stroke",d),r!==void 0&&a.style("display",r?"none":"block")},destroy(){a.remove()}}},j=({svg:t,data:e,x:s,y:i})=>{const l=m.line().x(n=>s(n.date)).y(n=>i(n.value)).curve(m.curveLinear),o="sc-charts__main-line",a=t.append("path").classed(o,!0).datum(e).attr("d",l);return{className(n,r){n==="remove"?a.classed(`${o}${r}`,!1):a.classed(`${o}${r}`,!0)},update({data:n,hidden:r,stroke:d}){n!==void 0&&a.datum(n).attr("d",l),d!==void 0&&a.attr("stroke",d),r!==void 0&&a.style("display",r?"none":"block")},destroy(){a.remove()}}},I=t=>{const e="sc-charts__range-label",s=t.svg.append("foreignObject").classed(e,!0).style("display","none"),i=s.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${e}-container`),l=i.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${e}-sum`),o=i.append("xhtml:div").attr("xmlns","http://www.w3.org/1999/xhtml").attr("class",`${e}-time`),a=m.timeFormat("%b %e, %I:%M %p");return{className(n,r){n==="remove"?s.classed(`${e}${r}`,!1):s.classed(`${e}${r}`,!0)},update({leftPoint:n,rightPoint:r,x:d,y:c,hidden:u}){if(d!==void 0&&s.attr("x",d),c!==void 0&&s.attr("y",c),n&&r){const f=r.value-n.value,g=(f/n.value*100).toFixed(2),h=`${f<0?"-":""}$${Math.abs(f).toFixed(2)} (${g}%)`,v=`${a(n.date)} to ${a(r.date)}`;l.text(h),o.text(v);const x=t.x(t.data[t.data.length-1].date),b=t.x(t.data[0].date),p=i.node().getBoundingClientRect();p.x<b&&s.attr("x",b+p.width/2),p.x>x-p.width&&s.attr("x",x-p.width/2)}u!==void 0&&s.style("display",u?"none":"block")},destroy(){s.remove()}}},O=({svg:t,x:e,y:s},i={})=>{const l=m.line().x(n=>e(n.date)).y(n=>s(n.value)).curve(m.curveLinear),o=i.className||"sc-charts__highlight-line",a=t.append("path").classed(o,!0).style("display",i.hidden?"none":"block");return{className(n,r){n==="remove"?a.classed(`${o}${r}`,!1):a.classed(`${o}${r}`,!0)},update({data:n,hidden:r,stroke:d}){n!==void 0&&a.datum(n).attr("d",l),d!==void 0&&a.attr("stroke",d),r!==void 0&&a.style("display",r?"none":"block")},destroy(){a.remove()}}},N=t=>{const e=j(t),s=F(t.svg),i=G(t.svg),l=O(t),o=w(t.svg,{className:"sc-charts__hover-circle",hidden:!0}),a=C(t.svg),n=C(t.svg),r=M(t),d=w(t.svg,{className:"sc-charts__range-circle-left",hidden:!0}),c=w(t.svg,{className:"sc-charts__range-circle-right",hidden:!0}),u=I(t);return{selection:s,hoverLine:i,hoverCircle:o,rangeBorderLeft:a,rangeBorderRight:n,rangeLine:r,rangeCircleLeft:d,rangeCircleRight:c,mainLine:e,rangeLabel:u,highlightLine:l}},D=(t,e)=>{const{x:s,y:i,data:l,elements:o,config:{margin:a,height:n}}=t;o.hoverLine.update({x1:s(e.date),x2:s(e.date),y1:a.top,y2:n-a.bottom,hidden:!1}),o.hoverCircle.update({cx:s(e.date),cy:i(e.value),hidden:!1}),o.highlightLine.update({data:l.filter(r=>r.date.getFullYear()===e.date.getFullYear()&&r.date.getMonth()===e.date.getMonth()),hidden:!1}),o.mainLine.className("add","_muted")},A=t=>{const{elements:e}=t;e.hoverLine.update({hidden:!0}),e.hoverCircle.update({hidden:!0}),e.highlightLine.update({hidden:!0}),e.mainLine.className("remove","_muted")},E=(t,e)=>{["rangeBorderLeft","rangeBorderRight","rangeCircleLeft","rangeCircleRight","rangeLine","rangeLabel"].forEach(i=>{e?(t[i].className("remove","_down"),t[i].className("add","_up")):(t[i].className("remove","_up"),t[i].className("add","_down"))})},H=(t,e,s)=>{const{x:i,y:l,data:o,config:{margin:a,height:n},elements:r}=t,d=i(e.date)<i(s.date)?e:s,c=i(e.date)>=i(s.date)?e:s,u=c.value-d.value>=0,f=i(d.date),g=i(c.date),h=g-f,v=o.findIndex(p=>p.date.getTime()===d.date.getTime()),x=o.findIndex(p=>p.date.getTime()===c.date.getTime()),b=o.slice(v,x+1);r.rangeBorderLeft.update({x1:f,x2:f,y1:a.top,y2:n-a.bottom,hidden:!1}),r.rangeBorderRight.update({x1:g,x2:g,y1:a.top,y2:n-a.bottom,hidden:!1}),r.rangeCircleLeft.update({cx:f,cy:l(d.value),hidden:!1}),r.rangeCircleRight.update({cx:g,cy:l(c.value),hidden:!1}),r.rangeLine.update({data:b,hidden:!1}),r.rangeLabel.update({rightPoint:c,leftPoint:d,x:f+h/2,y:a.top,hidden:!1}),E(r,u),r.mainLine.className("add","_selected-muted")},V=t=>{const{elements:e}=t;e.selection.update({hidden:!0}),e.rangeLine.update({hidden:!0}),e.rangeBorderLeft.update({hidden:!0}),e.rangeBorderRight.update({hidden:!0}),e.rangeCircleLeft.update({hidden:!0}),e.rangeCircleRight.update({hidden:!0}),e.rangeLabel.update({hidden:!0}),e.mainLine.className("remove","_selected-muted")},X=t=>{const{svg:e,data:s,x:i,config:l}=t,{height:o,margin:a,width:n}=l;let r=null,d=!1;const c=f=>s.reduce((g,h)=>Math.abs(i(g.date)-f)<Math.abs(i(h.date)-f)?g:h);e.append("rect").attr("width",n-a.left-a.right).attr("height",o-a.top-a.bottom).attr("x",a.left).attr("y",a.top).attr("fill","transparent").on("mousemove",function(f){const[g]=m.pointer(f,this),h=c(g);d?A(t):D(t,h),r&&H(t,r,h)}).on("mouseleave",()=>{A(t)}).on("mousedown",function(f){d=!0;const[g]=m.pointer(f,this);r=c(g)}).on("mouseup",()=>{d=!1,r=null,V(t)})},Y={width:800,height:300,margin:{top:10,right:30,bottom:20,left:0},theme:"light",logo:{width:406,height:113},xAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!1},yAxis:{customTicks:!1,tickFormat:null,ticks:null,tickValues:null,isShow:!0}},z=(t,e)=>{const s=m.select(t);if(s.empty())return console.error(`Element with selector ${t} not found!`),null;const i=s.append("svg");let l=_(Y,e.config);const o=(a,n=!1)=>{n&&a.config&&(l=_(l,a.config));const{width:r,height:d,margin:c}=l,u=a.data.map(v=>({date:new Date(v.date),value:v.value})),f=m.scaleTime().domain(m.extent(u,v=>v.date)).range([c.left,r-c.right]),g=m.scaleLinear().domain(m.extent(u,v=>v.value)).range([d-c.bottom,c.top]);i.attr("width",r).attr("height",d).attr("class",`sc-charts sc-charts__${l.theme}`).selectAll("*").remove();const h={svg:i,data:u,x:f,y:g,config:l,elements:N({svg:i,data:u,x:f,y:g,config:l})};S(h),h.elements=N(h),X(h)};return o(e),{update:a=>o(a,!0),destroy:()=>i.remove()}};y.createLineChart=z,Object.defineProperty(y,Symbol.toStringTag,{value:"Module"})});
|
|
2
2
|
//# sourceMappingURL=charts-core.umd.cjs.map
|
|
@@ -1 +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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"}
|
|
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/index.ts","../src/components/line-chart/elements/selection.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-line.ts","../src/components/line-chart/elements/main-line.ts","../src/components/line-chart/elements/range-label.ts","../src/components/line-chart/elements/highlight-line.ts","../src/components/line-chart/elements/index.ts","../src/components/line-chart/interactions/hover.ts","../src/components/line-chart/interactions/selection.ts","../src/components/line-chart/interactions/index.ts","../src/components/line-chart/constants.ts","../src/components/line-chart/index.ts"],"sourcesContent":["import * as d3 from 'd3'\nimport { ChartContext } from '../types'\n\nexport const renderYAxis = (context: ChartContext) => {\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\n g.call(axis)\n })\n .call((g) => g.select('.domain').remove())\n .call((g) => g.selectAll('text').attr('fill', 'var(--sc-color-axis-text)'))\n .call((g) => g.selectAll('.tick line').remove())\n}\n","import * as d3 from 'd3'\nimport { ChartContext } from '../types'\n\nexport const renderXAxis = (context: ChartContext) => {\n const { svg, config, x } = context\n const { height, margin, xAxis } = config\n const { isShow } = xAxis\n\n if (!isShow) return null\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', 'var(--sc-color-axis-text)'))\n}\n","import { ChartContext } from '../types'\nimport { renderYAxis } from './y-axis'\nimport { renderXAxis } from './x-axis'\n\nexport const createAxes = (context: ChartContext) => {\n const { svg, config, y } = context\n const { width, height, margin, logo } = config\n\n // x axis\n renderXAxis(context)\n\n // y axis\n renderYAxis(context)\n\n // background image\n if (logo) {\n svg\n .append('image')\n .attr('xlink:href', `scope-logo-${config.theme}.svg`)\n .attr('width', logo.width)\n .attr('height', logo.height)\n .attr('x', (width - margin.left - margin.right) / 2 - logo.width / 2 + margin.left)\n .attr('y', (height - margin.top - margin.bottom) / 2 - logo.height / 2 + margin.top)\n }\n\n // zero-line\n 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-dasharray', '4 4')\n .attr('stroke-width', 1)\n}\n","import { Parent, ElementOptions, ChartElements } from './types'\n\nexport const renderSelection = (\n parent: Parent,\n options: ElementOptions = {}\n): ChartElements['selection'] => {\n let item = parent\n .append('rect')\n .classed('sc-charts__sc-selection', true)\n .style('display', options.hidden ? 'none' : 'block')\n\n const baseClassName = 'sc-charts__selection'\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({ width, x, y, height, fill, hidden }) {\n if (width !== undefined) item.attr('width', width)\n if (x !== undefined) item.attr('x', x)\n if (y !== undefined) item.attr('y', y)\n if (height !== undefined) item.attr('height', height)\n if (fill !== undefined) item.attr('fill', fill)\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 { ChartConfig, ChartConfigContext } 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 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 }\n : base.logo,\n\n xAxis: {\n ...base.xAxis,\n ...patch?.xAxis,\n },\n yAxis: {\n ...base.yAxis,\n ...patch?.yAxis,\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 { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ElementOptions } from './types'\n\nexport const renderRangeLine = (\n { svg, x, y }: Omit<ChartContext, 'elements'>,\n options: ElementOptions = {}\n): ChartElements['rangeLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = options.className || 'sc-charts__range-line'\n\n const item = svg\n .append('path')\n .classed(options.className || 'sc-charts__range-line', 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({ data, hidden, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\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 { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements } from './types'\n\nexport const renderMainLine = ({\n svg,\n data,\n x,\n y,\n}: Omit<ChartContext, 'elements'>): ChartElements['mainLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = 'sc-charts__main-line'\n\n const item = svg.append('path').classed(baseClassName, true).datum(data).attr('d', lineGen)\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, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\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 renderRangeLabel = (\n context: Omit<ChartContext, 'elements'>\n): ChartElements['rangeLabel'] => {\n const baseClassName = 'sc-charts__range-label'\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.text(valueText)\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 labelDimensions = (div.node() as HTMLElement).getBoundingClientRect()\n if (labelDimensions.x < firstX) {\n foreignObject.attr('x', firstX + labelDimensions.width / 2)\n }\n if (labelDimensions.x > lastX - labelDimensions.width) {\n foreignObject.attr('x', lastX - labelDimensions.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","import * as d3 from 'd3'\nimport { ChartContext, ParsedDataPoint } from '../types'\nimport { ChartElements, ElementOptions } from './types'\n\nexport const renderHighlightLine = (\n { svg, x, y }: Omit<ChartContext, 'elements'>,\n options: ElementOptions = {}\n): ChartElements['highlightLine'] => {\n const lineGen = d3\n .line<ParsedDataPoint>()\n .x((d) => x(d.date))\n .y((d) => y(d.value))\n .curve(d3.curveLinear)\n\n const baseClassName = options.className || 'sc-charts__highlight-line'\n\n const item = svg\n .append('path')\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({ data, hidden, stroke }) {\n if (data !== undefined) item.datum(data).attr('d', lineGen)\n if (stroke !== undefined) item.attr('stroke', stroke)\n if (hidden !== undefined) item.style('display', hidden ? 'none' : 'block')\n },\n destroy() {\n item.remove()\n },\n }\n}\n","import { ChartElements } from './types'\nimport { renderSelection } from './selection'\nimport { renderBorderRangeLine } from './range-border'\nimport { renderCirclePoint } from './circle-point'\nimport { renderHoverLine } from './hover-line'\nimport { renderRangeLine } from './range-line'\nimport { ChartContext } from '../types'\nimport { renderMainLine } from './main-line'\nimport { renderRangeLabel } from './range-label'\nimport { renderHighlightLine } from './highlight-line'\n\n// render each elements by order\nexport const createElements = (context: Omit<ChartContext, 'elements'>): ChartElements => {\n const mainLine = renderMainLine(context)\n const selection = renderSelection(context.svg)\n const hoverLine = renderHoverLine(context.svg)\n const highlightLine = renderHighlightLine(context)\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 = renderRangeLine(context)\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 rangeLabel = renderRangeLabel(context)\n\n return {\n selection,\n hoverLine,\n hoverCircle,\n rangeBorderLeft,\n rangeBorderRight,\n rangeLine,\n rangeCircleLeft,\n rangeCircleRight,\n mainLine,\n rangeLabel,\n highlightLine,\n }\n}\n","import { ChartContext, ParsedDataPoint } from '../types'\n\nexport const renderHoverItems = (ctx: ChartContext, closest: ParsedDataPoint) => {\n const {\n x,\n y,\n data,\n elements,\n config: { margin, height },\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.highlightLine.update({\n data: data.filter((d) => {\n return (\n d.date.getFullYear() === closest.date.getFullYear() &&\n d.date.getMonth() === closest.date.getMonth()\n )\n }),\n hidden: false,\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}\n","import { ChartElements } from '../elements/types'\nimport { ChartContext, ParsedDataPoint } from '../types'\n\nconst controlIsGrowingClasses = (elements: ChartElements, isGrowing: boolean) => {\n const names: (keyof ChartElements)[] = [\n 'rangeBorderLeft',\n 'rangeBorderRight',\n 'rangeCircleLeft',\n 'rangeCircleRight',\n 'rangeLine',\n 'rangeLabel',\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 data,\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 const iLeft = data.findIndex((d) => d.date.getTime() === leftPoint.date.getTime())\n const iRight = data.findIndex((d) => d.date.getTime() === rightPoint.date.getTime())\n const slice = data.slice(iLeft, iRight + 1)\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 data: slice,\n hidden: false,\n })\n\n elements.rangeLabel.update({\n rightPoint,\n leftPoint,\n x: xLeft + selectionWidth / 2,\n y: margin.top,\n hidden: false,\n })\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.selection.update({ hidden: true })\n elements.rangeLine.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.rangeLabel.update({ hidden: true })\n elements.mainLine.className('remove', '_selected-muted')\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 } = config\n let startPoint: ParsedDataPoint | null = null\n let isDragging = false\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 overlay\n .on('mousemove', function (event) {\n const [mouseX] = d3.pointer(event, this)\n const closest = findClosest(mouseX)\n\n if (!isDragging) renderHoverItems(ctx, closest)\n else hideHoverItems(ctx)\n\n if (startPoint) {\n renderSelectionItems(ctx, startPoint, closest)\n }\n })\n .on('mouseleave', () => {\n hideHoverItems(ctx)\n })\n .on('mousedown', function (event) {\n isDragging = true\n const [mouseX] = d3.pointer(event, this)\n startPoint = findClosest(mouseX)\n })\n .on('mouseup', () => {\n isDragging = false\n startPoint = null\n\n hideSelectionItems(ctx)\n })\n}\n","import { ChartConfigContext } from './types'\n\nexport const defaultConfig: ChartConfigContext = {\n width: 800,\n height: 300,\n margin: { top: 10, right: 30, bottom: 20, left: 0 },\n theme: 'light',\n logo: {\n width: 406,\n height: 113,\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}\n","import * as d3 from 'd3'\nimport { createAxes } from './axes'\nimport { createElements } from './elements'\nimport { setupInteractions } from './interactions'\nimport { LineChartDataPoint, ChartContext, ChartConfig } from './types'\nimport { defaultConfig } from './constants'\nimport { mergeConfig } from './utils'\nimport '../../css/line-chart.css'\n\nexport const createLineChart = (\n selector: string,\n initialOptions: { data: LineChartDataPoint[]; config?: ChartConfig }\n) => {\n const container = d3.select(selector)\n if (container.empty()) {\n console.error(`Element with selector ${selector} not found!`)\n return null\n }\n\n const svg = container.append('svg')\n let currentConfig = mergeConfig(defaultConfig, initialOptions.config)\n\n const render = (\n options: { data: LineChartDataPoint[]; config?: ChartConfig },\n isUpdate = false\n ) => {\n if (isUpdate && options.config) {\n currentConfig = mergeConfig(currentConfig, options.config)\n }\n\n const { width, height, margin } = currentConfig\n const data = options.data.map((d) => ({ date: new Date(d.date), value: d.value }))\n\n const x = d3\n .scaleTime()\n .domain(d3.extent(data, (d) => d.date) as [Date, Date])\n .range([margin.left, width - margin.right])\n\n const y = d3\n .scaleLinear()\n .domain(d3.extent(data, (d) => d.value) as [number, number])\n .range([height - margin.bottom, margin.top])\n\n svg\n .attr('width', width)\n .attr('height', height)\n .attr('class', `sc-charts sc-charts__${currentConfig.theme}`)\n .selectAll('*')\n .remove()\n\n const context: ChartContext = {\n svg,\n data,\n x,\n y,\n config: currentConfig,\n elements: createElements({ svg, data, x, y, config: currentConfig }),\n }\n\n createAxes(context)\n context.elements = createElements(context)\n setupInteractions(context)\n }\n\n render(initialOptions)\n\n return {\n update: (options: { data: LineChartDataPoint[]; config?: ChartConfig }) =>\n 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","createAxes","logo","renderSelection","parent","options","item","baseClassName","action","mod","fill","hidden","createGradient","defs","gradientId","gradient","offset","stopColor","getDefs","defsSelection","mergeConfig","base","patch","renderBorderRangeLine","createBorderGradient","mainColor","x1","x2","y1","y2","renderCirclePoint","cx","cy","renderHoverLine","renderRangeLine","lineGen","data","stroke","renderMainLine","renderRangeLabel","foreignObject","div","divSum","divTime","timeFormat","leftPoint","rightPoint","delta","percent","valueText","dateText","lastX","firstX","labelDimensions","renderHighlightLine","createElements","mainLine","selection","hoverLine","highlightLine","hoverCircle","rangeBorderLeft","rangeBorderRight","rangeLine","rangeCircleLeft","rangeCircleRight","rangeLabel","renderHoverItems","ctx","closest","elements","hideHoverItems","controlIsGrowingClasses","isGrowing","name","renderSelectionItems","startPoint","xLeft","xRight","selectionWidth","iLeft","iRight","slice","hideSelectionItems","setupInteractions","isDragging","findClosest","mouseX","a","b","event","defaultConfig","createLineChart","selector","initialOptions","container","currentConfig","render","isUpdate"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<svg width="406" height="113" viewBox="0 0 406 113" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M192.818 23.0378C168.597 23.0378 151.856 36.6984 151.856 56.6851C151.856 76.6718 168.597 90.5572 192.818 90.5572C217.038 90.5572 233.39 76.6645 233.39 56.6561C233.39 36.6476 216.906 23.0378 192.818 23.0378ZM192.818 78.2243C176.839 78.2243 165.642 69.4316 165.642 56.5618C165.642 43.6919 176.817 35.4071 192.818 35.4071C208.818 35.4071 219.612 43.9459 219.612 56.5618C219.612 69.1777 208.4 78.2025 192.818 78.2025V78.2315V78.2243Z" fill="url(#paint0_linear_825_50654)"/>
|
|
3
|
+
<path d="M47.275 50.6822H25.511C12.6272 50.6822 9.15141 35.3893 35.9457 35.3893C47.2823 35.3893 56.1697 40.2354 60.0341 42.7746L66.993 32.3278C60.4155 26.5893 48.8295 23.02 35.821 23.02C-7.20087 23.02 -7.7215 62.783 25.643 62.783H47.5389C61.706 62.783 64.0232 78.2065 35.9457 78.2065C21.9033 78.2065 10.8233 70.8139 6.95889 68.0064L0 78.4604C6.57758 84.1916 20.4807 90.5612 36.063 90.5612C81.1455 90.5322 81.6661 50.6749 47.275 50.6749V50.6822Z" fill="url(#paint1_linear_825_50654)"/>
|
|
4
|
+
<path d="M117.971 78.1952C101.487 78.1952 90.7959 69.4026 90.7959 56.7867C90.7959 44.1708 101.355 35.3998 117.839 35.3998C127.248 35.3998 136.003 40.246 141.283 45.0848L149.173 34.2536C141.701 28.3991 130.232 23.0378 117.869 23.0378C93.1351 23.0378 77.0394 36.8072 77.0394 56.8157C77.0394 76.8241 93.3771 90.5572 118.125 90.5572C130.745 90.5572 142.214 84.9494 149.679 79.0876L141.569 68.503C136.267 73.3709 127.504 78.1952 117.971 78.1952Z" fill="url(#paint2_linear_825_50654)"/>
|
|
5
|
+
<path d="M366.96 23.0273C343.774 23.0273 327.671 36.7967 327.671 56.8051C327.671 76.8136 346.091 90.5467 371.213 90.5467C384.479 90.5467 395.537 86.2156 402.51 80.3538L394.385 69.7983C389.619 74.8983 381.897 78.591 371.074 78.591C355.998 78.591 345.255 72.3519 342.146 62.7902H406.001V56.6673C405.979 36.6588 390.14 23.02 366.953 23.02L366.96 23.0273ZM366.828 35.0048C380.101 35.0048 389.179 41.193 391.569 51.0594H341.889C344.353 41.2801 353.343 35.0048 366.828 35.0048Z" fill="url(#paint3_linear_825_50654)"/>
|
|
6
|
+
<path d="M284.304 23.0273C272.777 23.0273 263.632 27.0319 257.348 33.2056C255.72 28.1128 251.225 24.9425 245.132 24.9425H236.772V37.0506H244.494V113H258.023V80.9052C264.27 86.7597 273.143 90.5684 284.318 90.5684C305.826 90.5684 320.638 76.6757 320.638 56.6673C320.638 36.6588 305.804 23.02 284.296 23.02L284.304 23.0273ZM282.625 78.1847C267.937 78.1847 258.023 69.392 258.023 56.5222C258.023 43.6524 267.937 35.3675 282.625 35.3675C297.312 35.3675 306.845 43.9063 306.845 56.5222C306.83 69.421 296.667 78.1847 282.625 78.1847Z" fill="url(#paint4_linear_825_50654)"/>
|
|
7
|
+
<path d="M362.631 5.86774H364.279C365.579 5.86774 366.453 5.10272 366.453 3.99282C366.453 2.88292 365.674 2.18688 364.26 2.18688C362.942 2.18688 362.067 2.95817 361.991 4.13704H359.374C359.475 1.64761 361.44 0.0297852 364.387 0.0297852C367.334 0.0297852 369.141 1.46576 369.141 3.61658C369.141 5.26576 368 6.45717 366.333 6.75816V6.8146C368.361 6.98391 369.667 8.19414 369.667 10.0565C369.667 12.4707 367.455 14.076 364.317 14.076C361.18 14.076 359.241 12.408 359.107 9.9311H361.827C361.909 11.0661 362.853 11.8123 364.349 11.8123C365.845 11.8123 366.77 11.0222 366.77 9.88094C366.77 8.65189 365.839 7.90569 364.305 7.90569H362.625V5.87401L362.631 5.86774Z" fill="#141718"/>
|
|
8
|
+
<path d="M372.393 11.5986C371.638 10.4636 371.252 8.93982 371.252 7.15269C371.252 2.70055 373.438 0.0167236 376.95 0.0167236C379.542 0.0167236 381.564 1.53421 381.944 3.7352H379.149C378.877 2.8385 378.002 2.24279 376.937 2.24279C375.042 2.24279 373.895 4.04246 373.958 7.07745H374.015C374.56 5.76061 375.898 4.889 377.634 4.889C380.214 4.889 382.128 6.77018 382.128 9.32233C382.128 12.0877 379.954 14.0755 376.912 14.0755C374.96 14.0755 373.35 13.1976 372.399 11.5986H372.393ZM379.352 9.41012C379.352 8.02431 378.306 7.00847 376.886 7.00847C375.467 7.00847 374.402 8.02431 374.402 9.38504C374.402 10.7458 375.486 11.8368 376.88 11.8368C378.274 11.8368 379.358 10.7646 379.358 9.41639L379.352 9.41012Z" fill="#141718"/>
|
|
9
|
+
<path d="M383.665 7.01056C383.665 2.66502 385.763 0 389.167 0C392.57 0 394.655 2.65874 394.655 6.99802C394.655 11.3373 392.583 14.0525 389.167 14.0525C385.75 14.0525 383.665 11.3624 383.665 7.00429V7.01056ZM391.765 7.01056C391.765 3.96931 390.776 2.25743 389.167 2.25743C387.557 2.25743 386.555 3.98185 386.555 7.01056C386.555 10.0393 387.544 11.8013 389.167 11.8013C390.789 11.8013 391.765 10.0769 391.765 7.01056Z" fill="#141718"/>
|
|
10
|
+
<path d="M395.968 3.15424C395.968 1.48625 397.267 0.188232 398.959 0.188232C400.652 0.188232 401.957 1.48625 401.957 3.15424C401.957 4.82222 400.645 6.12651 398.959 6.12651C397.273 6.12651 395.968 4.82849 395.968 3.15424ZM400.322 3.15424C400.322 2.40176 399.726 1.79351 398.966 1.79351C398.205 1.79351 397.609 2.40176 397.609 3.15424C397.609 3.90671 398.23 4.52123 398.966 4.52123C399.739 4.52123 400.322 3.8879 400.322 3.15424Z" fill="#141718"/>
|
|
11
|
+
<defs>
|
|
12
|
+
<linearGradient id="paint0_linear_825_50654" x1="195.535" y1="92.2815" x2="195.535" y2="24.1985" gradientUnits="userSpaceOnUse">
|
|
13
|
+
<stop stop-color="#181C1D" stop-opacity="0.2"/>
|
|
14
|
+
<stop offset="1" stop-color="#141718"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<linearGradient id="paint1_linear_825_50654" x1="38.3756" y1="92.2861" x2="38.3756" y2="24.1811" gradientUnits="userSpaceOnUse">
|
|
17
|
+
<stop stop-color="#181C1D" stop-opacity="0.2"/>
|
|
18
|
+
<stop offset="1" stop-color="#141718"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<linearGradient id="paint2_linear_825_50654" x1="115.953" y1="92.2815" x2="115.953" y2="24.1985" gradientUnits="userSpaceOnUse">
|
|
21
|
+
<stop stop-color="#181C1D" stop-opacity="0.2"/>
|
|
22
|
+
<stop offset="1" stop-color="#141718"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
<linearGradient id="paint3_linear_825_50654" x1="369.633" y1="92.2712" x2="369.633" y2="24.1808" gradientUnits="userSpaceOnUse">
|
|
25
|
+
<stop stop-color="#181C1D" stop-opacity="0.2"/>
|
|
26
|
+
<stop offset="1" stop-color="#141718"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
<linearGradient id="paint4_linear_825_50654" x1="281.7" y1="115.298" x2="281.7" y2="24.5668" gradientUnits="userSpaceOnUse">
|
|
29
|
+
<stop stop-color="#181C1D" stop-opacity="0.2"/>
|
|
30
|
+
<stop offset="1" stop-color="#141718"/>
|
|
31
|
+
</linearGradient>
|
|
32
|
+
</defs>
|
|
33
|
+
</svg>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<svg width="406" height="113" viewBox="0 0 406 113" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M192.818 23.0378C168.597 23.0378 151.856 36.6984 151.856 56.685C151.856 76.6717 168.597 90.5572 192.818 90.5572C217.038 90.5572 233.391 76.6645 233.391 56.656C233.391 36.6476 216.906 23.0378 192.818 23.0378ZM192.818 78.2242C176.839 78.2242 165.642 69.4315 165.642 56.5617C165.642 43.6919 176.817 35.407 192.818 35.407C208.818 35.407 219.612 43.9458 219.612 56.5617C219.612 69.1776 208.4 78.2025 192.818 78.2025V78.2315V78.2242Z" fill="url(#paint0_linear_825_29332)"/>
|
|
3
|
+
<path d="M47.275 50.6821H25.511C12.6272 50.6821 9.15141 35.3892 35.9457 35.3892C47.2823 35.3892 56.1697 40.2354 60.0341 42.7745L66.993 32.3278C60.4155 26.5893 48.8295 23.02 35.821 23.02C-7.20087 23.02 -7.7215 62.783 25.643 62.783H47.5389C61.706 62.783 64.0232 78.2064 35.9457 78.2064C21.9033 78.2064 10.8233 70.8139 6.95889 68.0063L0 78.4604C6.57758 84.1916 20.4807 90.5612 36.063 90.5612C81.1455 90.5322 81.6661 50.6749 47.275 50.6749V50.6821Z" fill="url(#paint1_linear_825_29332)"/>
|
|
4
|
+
<path d="M117.971 78.1952C101.487 78.1952 90.7955 69.4025 90.7955 56.7866C90.7955 44.1707 101.355 35.3998 117.839 35.3998C127.247 35.3998 136.003 40.2459 141.282 45.0848L149.172 34.2535C141.7 28.399 130.232 23.0378 117.868 23.0378C93.1347 23.0378 77.0391 36.8072 77.0391 56.8156C77.0391 76.8241 93.3767 90.5572 118.125 90.5572C130.745 90.5572 142.214 84.9493 149.678 79.0875L141.568 68.5029C136.267 73.3708 127.504 78.1952 117.971 78.1952Z" fill="url(#paint2_linear_825_29332)"/>
|
|
5
|
+
<path d="M366.96 23.0273C343.774 23.0273 327.671 36.7967 327.671 56.8051C327.671 76.8136 346.091 90.5467 371.213 90.5467C384.479 90.5467 395.537 86.2156 402.51 80.3538L394.385 69.7983C389.619 74.8983 381.897 78.591 371.074 78.591C355.998 78.591 345.255 72.3519 342.146 62.7902H406.001V56.6673C405.979 36.6588 390.14 23.02 366.953 23.02L366.96 23.0273ZM366.828 35.0048C380.101 35.0048 389.179 41.193 391.569 51.0594H341.889C344.353 41.2801 353.343 35.0048 366.828 35.0048Z" fill="url(#paint3_linear_825_29332)"/>
|
|
6
|
+
<path d="M284.304 23.0272C272.777 23.0272 263.632 27.0318 257.348 33.2056C255.72 28.1128 251.225 24.9425 245.132 24.9425H236.772V37.0506H244.494V113H258.023V80.9052C264.27 86.7597 273.143 90.5684 284.318 90.5684C305.826 90.5684 320.638 76.6757 320.638 56.6672C320.638 36.6588 305.804 23.02 284.296 23.02L284.304 23.0272ZM282.625 78.1847C267.937 78.1847 258.023 69.392 258.023 56.5222C258.023 43.6523 267.937 35.3675 282.625 35.3675C297.312 35.3675 306.845 43.9062 306.845 56.5222C306.83 69.421 296.667 78.1847 282.625 78.1847Z" fill="url(#paint4_linear_825_29332)"/>
|
|
7
|
+
<path d="M362.631 5.86768H364.279C365.579 5.86768 366.453 5.10266 366.453 3.99276C366.453 2.88286 365.674 2.18682 364.26 2.18682C362.942 2.18682 362.067 2.95811 361.991 4.13698H359.374C359.475 1.64754 361.44 0.0297241 364.387 0.0297241C367.334 0.0297241 369.141 1.4657 369.141 3.61652C369.141 5.2657 368 6.45711 366.333 6.7581V6.81454C368.361 6.98385 369.667 8.19408 369.667 10.0565C369.667 12.4706 367.455 14.0759 364.317 14.0759C361.18 14.0759 359.241 12.4079 359.107 9.93104H361.827C361.909 11.066 362.853 11.8122 364.349 11.8122C365.845 11.8122 366.77 11.0221 366.77 9.88087C366.77 8.65183 365.839 7.90563 364.305 7.90563H362.625V5.87395L362.631 5.86768Z" fill="#F8F8F8"/>
|
|
8
|
+
<path d="M372.393 11.5985C371.638 10.4635 371.252 8.93976 371.252 7.15263C371.252 2.70049 373.438 0.0166626 376.95 0.0166626C379.542 0.0166626 381.564 1.53415 381.944 3.73514H379.149C378.877 2.83844 378.002 2.24273 376.937 2.24273C375.042 2.24273 373.895 4.0424 373.958 7.07738H374.015C374.56 5.76055 375.898 4.88894 377.634 4.88894C380.214 4.88894 382.128 6.77012 382.128 9.32227C382.128 12.0876 379.954 14.0754 376.912 14.0754C374.96 14.0754 373.35 13.1975 372.399 11.5985H372.393ZM379.352 9.41006C379.352 8.02425 378.306 7.00841 376.886 7.00841C375.467 7.00841 374.402 8.02425 374.402 9.38497C374.402 10.7457 375.486 11.8368 376.88 11.8368C378.274 11.8368 379.358 10.7645 379.358 9.41633L379.352 9.41006Z" fill="#F8F8F8"/>
|
|
9
|
+
<path d="M383.665 7.0105C383.665 2.66495 385.763 -6.10352e-05 389.167 -6.10352e-05C392.57 -6.10352e-05 394.655 2.65868 394.655 6.99796C394.655 11.3372 392.583 14.0524 389.167 14.0524C385.75 14.0524 383.665 11.3623 383.665 7.00423V7.0105ZM391.765 7.0105C391.765 3.96924 390.776 2.25736 389.167 2.25736C387.557 2.25736 386.555 3.98179 386.555 7.0105C386.555 10.0392 387.544 11.8013 389.167 11.8013C390.789 11.8013 391.765 10.0768 391.765 7.0105Z" fill="#F8F8F8"/>
|
|
10
|
+
<path d="M395.968 3.15422C395.968 1.48624 397.267 0.188217 398.959 0.188217C400.652 0.188217 401.957 1.48624 401.957 3.15422C401.957 4.82221 400.645 6.1265 398.959 6.1265C397.273 6.1265 395.968 4.82848 395.968 3.15422ZM400.322 3.15422C400.322 2.40175 399.726 1.7935 398.966 1.7935C398.205 1.7935 397.609 2.40175 397.609 3.15422C397.609 3.9067 398.23 4.52122 398.966 4.52122C399.739 4.52122 400.322 3.88788 400.322 3.15422Z" fill="#F8F8F8"/>
|
|
11
|
+
<defs>
|
|
12
|
+
<linearGradient id="paint0_linear_825_29332" x1="195.535" y1="92.2815" x2="195.535" y2="24.1985" gradientUnits="userSpaceOnUse">
|
|
13
|
+
<stop stop-color="#EDEDED" stop-opacity="0.2"/>
|
|
14
|
+
<stop offset="1" stop-color="#F8F8F8"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<linearGradient id="paint1_linear_825_29332" x1="38.3756" y1="92.286" x2="38.3756" y2="24.181" gradientUnits="userSpaceOnUse">
|
|
17
|
+
<stop stop-color="#EDEDED" stop-opacity="0.2"/>
|
|
18
|
+
<stop offset="1" stop-color="#F8F8F8"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<linearGradient id="paint2_linear_825_29332" x1="115.953" y1="92.2815" x2="115.953" y2="24.1985" gradientUnits="userSpaceOnUse">
|
|
21
|
+
<stop stop-color="#EDEDED" stop-opacity="0.2"/>
|
|
22
|
+
<stop offset="1" stop-color="#F8F8F8"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
<linearGradient id="paint3_linear_825_29332" x1="369.633" y1="92.2712" x2="369.633" y2="24.1808" gradientUnits="userSpaceOnUse">
|
|
25
|
+
<stop stop-color="#EDEDED" stop-opacity="0.2"/>
|
|
26
|
+
<stop offset="1" stop-color="#F8F8F8"/>
|
|
27
|
+
</linearGradient>
|
|
28
|
+
<linearGradient id="paint4_linear_825_29332" x1="281.7" y1="115.298" x2="281.7" y2="24.5667" gradientUnits="userSpaceOnUse">
|
|
29
|
+
<stop stop-color="#EDEDED" stop-opacity="0.2"/>
|
|
30
|
+
<stop offset="1" stop-color="#F8F8F8"/>
|
|
31
|
+
</linearGradient>
|
|
32
|
+
</defs>
|
|
33
|
+
</svg>
|
package/package.json
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "charts-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.12",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"dist"
|
|
7
7
|
],
|
|
8
8
|
"main": "./dist/charts-core.umd.cjs",
|
|
9
9
|
"module": "./dist/charts-core.js",
|
|
10
|
+
"style": "./dist/charts-core.css",
|
|
10
11
|
"exports": {
|
|
11
12
|
".": {
|
|
12
13
|
"import": "./dist/charts-core.js",
|
|
13
14
|
"require": "./dist/charts-core.umd.cjs"
|
|
14
|
-
}
|
|
15
|
+
},
|
|
16
|
+
"./style.css": "./dist/charts-core.css"
|
|
15
17
|
},
|
|
16
18
|
"license": "ISC",
|
|
17
19
|
"scripts": {
|