@dpuse/dpuse-tool-d3-visualiser 0.0.32 → 0.0.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +658 -244
- package/dist/{band-DbExrcif.js → band-C1twWuW2.js} +3 -2
- package/dist/{band-DbExrcif.js.map → band-C1twWuW2.js.map} +1 -1
- package/dist/{billboardJs-jmaH9Gag.js → billboardJs-DS82ViEw.js} +1081 -1747
- package/dist/billboardJs-DS82ViEw.js.map +1 -0
- package/dist/chordDiagram-Cz0sVVgD.js +2911 -0
- package/dist/chordDiagram-Cz0sVVgD.js.map +1 -0
- package/dist/{d3BarChart-DEzayAyh.js → d3BarChart-DIN2KQsU.js} +7 -6
- package/dist/{d3BarChart-DEzayAyh.js.map → d3BarChart-DIN2KQsU.js.map} +1 -1
- package/dist/dpuse-tool-d3-visualiser.es.js +17 -7
- package/dist/dpuse-tool-d3-visualiser.es.js.map +1 -1
- package/dist/{drag-DLokvdmv.js → drag-DfL4uwqz.js} +25 -24
- package/dist/{drag-DLokvdmv.js.map → drag-DfL4uwqz.js.map} +1 -1
- package/dist/hierarchy-CDFAetye.js +151 -0
- package/dist/hierarchy-CDFAetye.js.map +1 -0
- package/dist/{linear-D3BD7E1p.js → linear-BnhqTvdX.js} +59 -85
- package/dist/linear-BnhqTvdX.js.map +1 -0
- package/dist/{link-DKK0Q0lG.js → link-D-9z7kEr.js} +16 -39
- package/dist/link-D-9z7kEr.js.map +1 -0
- package/dist/math-C5EhTgJw.js +12 -0
- package/dist/math-C5EhTgJw.js.map +1 -0
- package/dist/max-CPVNm4tn.js +14 -0
- package/dist/max-CPVNm4tn.js.map +1 -0
- package/dist/{networkDiagram-HS-SgOZ0.js → networkDiagram-yraPhqxN.js} +28 -28
- package/dist/{networkDiagram-HS-SgOZ0.js.map → networkDiagram-yraPhqxN.js.map} +1 -1
- package/dist/nodrag-Dq2tlBbe.js +51 -0
- package/dist/nodrag-Dq2tlBbe.js.map +1 -0
- package/dist/{observablePlot-B1CSEvcU.js → observablePlot-C7764aFq.js} +2366 -2417
- package/dist/observablePlot-C7764aFq.js.map +1 -0
- package/dist/ordinal-uZdoVxAx.js +30 -0
- package/dist/ordinal-uZdoVxAx.js.map +1 -0
- package/dist/palette-BuTjISrV.js +64 -0
- package/dist/palette-BuTjISrV.js.map +1 -0
- package/dist/{path-Bt1sPr2f.js → path-6kmCrmEz.js} +7 -4
- package/dist/{path-Bt1sPr2f.js.map → path-6kmCrmEz.js.map} +1 -1
- package/dist/point-6cHftmvM.js +27 -0
- package/dist/point-6cHftmvM.js.map +1 -0
- package/dist/pow-BFDPqS3s.js +86 -0
- package/dist/pow-BFDPqS3s.js.map +1 -0
- package/dist/{sankeyDiagram-BXTYCHPV.js → sankeyDiagram-BT2RCRpi.js} +93 -152
- package/dist/sankeyDiagram-BT2RCRpi.js.map +1 -0
- package/dist/{src-Br_t1-IV.js → src-WDualLFV.js} +40 -39
- package/dist/{src-Br_t1-IV.js.map → src-WDualLFV.js.map} +1 -1
- package/dist/{math-Dc0ICuib.js → src-Xlr4CcSw.js} +70 -75
- package/dist/src-Xlr4CcSw.js.map +1 -0
- package/dist/{src-Du_hPZAX.js → src-yL3ZdoR1.js} +235 -282
- package/dist/src-yL3ZdoR1.js.map +1 -0
- package/dist/step-DgCcZZ3W.js +670 -0
- package/dist/step-DgCcZZ3W.js.map +1 -0
- package/dist/{sum-BAZU479z.js → sum-CNP0Xric.js} +4 -15
- package/dist/sum-CNP0Xric.js.map +1 -0
- package/dist/{tanStackCharts-vvQteV9z.js → tanStackCharts-BJAX22lS.js} +164 -151
- package/dist/tanStackCharts-BJAX22lS.js.map +1 -0
- package/dist/treeDiagram-DsHUD8ou.js +130 -0
- package/dist/treeDiagram-DsHUD8ou.js.map +1 -0
- package/dist/types/src/chordDiagram.d.ts +25 -0
- package/dist/types/src/index.d.ts +3 -0
- package/package.json +6 -4
- package/dist/billboardJs-jmaH9Gag.js.map +0 -1
- package/dist/linear-D3BD7E1p.js.map +0 -1
- package/dist/link-DKK0Q0lG.js.map +0 -1
- package/dist/math-Dc0ICuib.js.map +0 -1
- package/dist/observablePlot-B1CSEvcU.js.map +0 -1
- package/dist/sankeyDiagram-BXTYCHPV.js.map +0 -1
- package/dist/src-Du_hPZAX.js.map +0 -1
- package/dist/sum-BAZU479z.js.map +0 -1
- package/dist/tanStackCharts-vvQteV9z.js.map +0 -1
- package/dist/treeDiagram-DemHfVnX.js +0 -277
- package/dist/treeDiagram-DemHfVnX.js.map +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { t as e } from "./select-BIuoFcZG.js";
|
|
2
|
+
import { t } from "./link-D-9z7kEr.js";
|
|
3
|
+
import { n, t as r } from "./hierarchy-CDFAetye.js";
|
|
4
|
+
//#region node_modules/d3-hierarchy/src/tree.js
|
|
5
|
+
function i(e, t) {
|
|
6
|
+
return e.parent === t.parent ? 1 : 2;
|
|
7
|
+
}
|
|
8
|
+
function a(e) {
|
|
9
|
+
var t = e.children;
|
|
10
|
+
return t ? t[0] : e.t;
|
|
11
|
+
}
|
|
12
|
+
function o(e) {
|
|
13
|
+
var t = e.children;
|
|
14
|
+
return t ? t[t.length - 1] : e.t;
|
|
15
|
+
}
|
|
16
|
+
function s(e, t, n) {
|
|
17
|
+
var r = n / (t.i - e.i);
|
|
18
|
+
t.c -= r, t.s += n, e.c += r, t.z += n, t.m += n;
|
|
19
|
+
}
|
|
20
|
+
function c(e) {
|
|
21
|
+
for (var t = 0, n = 0, r = e.children, i = r.length, a; --i >= 0;) a = r[i], a.z += t, a.m += t, t += a.s + (n += a.c);
|
|
22
|
+
}
|
|
23
|
+
function l(e, t, n) {
|
|
24
|
+
return e.a.parent === t.parent ? e.a : n;
|
|
25
|
+
}
|
|
26
|
+
function u(e, t) {
|
|
27
|
+
this._ = e, this.parent = null, this.children = null, this.A = null, this.a = this, this.z = 0, this.m = 0, this.c = 0, this.s = 0, this.t = null, this.i = t;
|
|
28
|
+
}
|
|
29
|
+
u.prototype = Object.create(r.prototype);
|
|
30
|
+
function d(e) {
|
|
31
|
+
for (var t = new u(e, 0), n, r = [t], i, a, o, s; n = r.pop();) if (a = n._.children) for (n.children = Array(s = a.length), o = s - 1; o >= 0; --o) r.push(i = n.children[o] = new u(a[o], o)), i.parent = n;
|
|
32
|
+
return (t.parent = new u(null, 0)).children = [t], t;
|
|
33
|
+
}
|
|
34
|
+
function f() {
|
|
35
|
+
var e = i, t = 1, n = 1, r = null;
|
|
36
|
+
function u(i) {
|
|
37
|
+
var a = d(i);
|
|
38
|
+
if (a.eachAfter(f), a.parent.m = -a.z, a.eachBefore(p), r) i.eachBefore(h);
|
|
39
|
+
else {
|
|
40
|
+
var o = i, s = i, c = i;
|
|
41
|
+
i.eachBefore(function(e) {
|
|
42
|
+
e.x < o.x && (o = e), e.x > s.x && (s = e), e.depth > c.depth && (c = e);
|
|
43
|
+
});
|
|
44
|
+
var l = o === s ? 1 : e(o, s) / 2, u = l - o.x, m = t / (s.x + l + u), g = n / (c.depth || 1);
|
|
45
|
+
i.eachBefore(function(e) {
|
|
46
|
+
e.x = (e.x + u) * m, e.y = e.depth * g;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return i;
|
|
50
|
+
}
|
|
51
|
+
function f(t) {
|
|
52
|
+
var n = t.children, r = t.parent.children, i = t.i ? r[t.i - 1] : null;
|
|
53
|
+
if (n) {
|
|
54
|
+
c(t);
|
|
55
|
+
var a = (n[0].z + n[n.length - 1].z) / 2;
|
|
56
|
+
i ? (t.z = i.z + e(t._, i._), t.m = t.z - a) : t.z = a;
|
|
57
|
+
} else i && (t.z = i.z + e(t._, i._));
|
|
58
|
+
t.parent.A = m(t, i, t.parent.A || r[0]);
|
|
59
|
+
}
|
|
60
|
+
function p(e) {
|
|
61
|
+
e._.x = e.z + e.parent.m, e.m += e.parent.m;
|
|
62
|
+
}
|
|
63
|
+
function m(t, n, r) {
|
|
64
|
+
if (n) {
|
|
65
|
+
for (var i = t, c = t, u = n, d = i.parent.children[0], f = i.m, p = c.m, m = u.m, h = d.m, g; u = o(u), i = a(i), u && i;) d = a(d), c = o(c), c.a = t, g = u.z + m - i.z - f + e(u._, i._), g > 0 && (s(l(u, t, r), t, g), f += g, p += g), m += u.m, f += i.m, h += d.m, p += c.m;
|
|
66
|
+
u && !o(c) && (c.t = u, c.m += m - p), i && !a(d) && (d.t = i, d.m += f - h, r = t);
|
|
67
|
+
}
|
|
68
|
+
return r;
|
|
69
|
+
}
|
|
70
|
+
function h(e) {
|
|
71
|
+
e.x *= t, e.y = e.depth * n;
|
|
72
|
+
}
|
|
73
|
+
return u.separation = function(t) {
|
|
74
|
+
return arguments.length ? (e = t, u) : e;
|
|
75
|
+
}, u.size = function(e) {
|
|
76
|
+
return arguments.length ? (r = !1, t = +e[0], n = +e[1], u) : r ? null : [t, n];
|
|
77
|
+
}, u.nodeSize = function(e) {
|
|
78
|
+
return arguments.length ? (r = !0, t = +e[0], n = +e[1], u) : r ? [t, n] : null;
|
|
79
|
+
}, u;
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/treeDiagram.ts
|
|
83
|
+
var p = 140, m = 40, h = 24, g = 50, _ = 8, v = {
|
|
84
|
+
branch: {
|
|
85
|
+
fill: "#ffe6cc",
|
|
86
|
+
stroke: "#d79b00"
|
|
87
|
+
},
|
|
88
|
+
leaf: {
|
|
89
|
+
fill: "#dae8fc",
|
|
90
|
+
stroke: "#6c8ebf"
|
|
91
|
+
},
|
|
92
|
+
root: {
|
|
93
|
+
fill: "#d5e8d4",
|
|
94
|
+
stroke: "#82b366"
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
function y(r, i, a = {}) {
|
|
98
|
+
let o = a.nodeWidth ?? p, s = a.nodeHeight ?? m, c = a.siblingGap ?? h, l = a.levelGap ?? g, u = a.padding ?? _, d = a.nodeColors ?? v;
|
|
99
|
+
function y(e) {
|
|
100
|
+
return e.depth === 0 ? "root" : e.children ? "branch" : "leaf";
|
|
101
|
+
}
|
|
102
|
+
function b() {
|
|
103
|
+
e(i).selectAll("svg").remove();
|
|
104
|
+
let a = n(r, (e) => e.children), p = f().nodeSize([s + c, o + l]).separation(() => 1)(a);
|
|
105
|
+
p.eachAfter((e) => {
|
|
106
|
+
let [t] = e.children ?? [];
|
|
107
|
+
t && (e.x = t.x);
|
|
108
|
+
});
|
|
109
|
+
let m = p.descendants(), h = Math.min(...m.map((e) => e.y)) - o / 2, g = Math.max(...m.map((e) => e.y)) + o / 2, _ = Math.min(...m.map((e) => e.x)) - s / 2, v = Math.max(...m.map((e) => e.x)) + s / 2, b = g - h + u * 2, x = v - _ + u * 2, S = e(i).append("svg").attr("viewBox", `0 0 ${String(b)} ${String(x)}`).attr("width", b).attr("height", x), C = S.append("g").attr("transform", `translate(${String(u - h)}, ${String(u - _)})`), w = t().x((e) => e.y).y((e) => e.x);
|
|
110
|
+
C.append("g").attr("fill", "none").attr("stroke", "#999999").attr("stroke-width", 1.5).selectAll("path").data(p.links()).join("path").attr("d", w);
|
|
111
|
+
let T = C.append("g").selectAll("g").data(m).join("g").attr("transform", (e) => `translate(${String(e.y - o / 2)}, ${String(e.x - s / 2)})`);
|
|
112
|
+
T.append("rect").attr("width", o).attr("height", s).attr("rx", 6).attr("fill", (e) => d[y(e)].fill).attr("stroke", (e) => d[y(e)].stroke), T.append("text").attr("x", o / 2).attr("y", s / 2).attr("text-anchor", "middle").attr("dominant-baseline", "middle").attr("font-family", "Helvetica, Arial, sans-serif").attr("font-size", 12).attr("fill", "#000000").text((e) => e.data.label);
|
|
113
|
+
let E = S.node();
|
|
114
|
+
if (E == null) throw Error("Failed to create tree diagram SVG element.");
|
|
115
|
+
return E;
|
|
116
|
+
}
|
|
117
|
+
let x = b();
|
|
118
|
+
return {
|
|
119
|
+
resize: () => {
|
|
120
|
+
x = b();
|
|
121
|
+
},
|
|
122
|
+
get svg() {
|
|
123
|
+
return x;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
export { y as renderTreeDiagram };
|
|
129
|
+
|
|
130
|
+
//# sourceMappingURL=treeDiagram-DsHUD8ou.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"treeDiagram-DsHUD8ou.js","names":[],"sources":["../node_modules/d3-hierarchy/src/tree.js","../src/treeDiagram.ts"],"sourcesContent":["import {Node} from \"./hierarchy/index.js\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","// ── External Dependencies & Registrations\nimport { linkHorizontal } from 'd3-shape';\nimport { select } from 'd3-selection';\nimport { hierarchy, type HierarchyPointLink, type HierarchyPointNode, tree } from 'd3-hierarchy';\n\n// ── Types ────────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport type TreeDiagramNodeRoleId = 'branch' | 'leaf' | 'root';\n\nexport interface TreeDiagramNode {\n children?: TreeDiagramNode[];\n id: string;\n label: string;\n}\n\nexport interface TreeDiagramOptions {\n levelGap?: number;\n nodeColors?: Record<TreeDiagramNodeRoleId, { fill: string; stroke: string }>;\n nodeHeight?: number;\n nodeWidth?: number;\n padding?: number;\n siblingGap?: number;\n}\n\nexport interface TreeDiagramHandle {\n resize: () => void;\n svg: SVGSVGElement;\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nconst DEFAULT_NODE_WIDTH = 140;\nconst DEFAULT_NODE_HEIGHT = 40;\nconst DEFAULT_SIBLING_GAP = 24;\nconst DEFAULT_LEVEL_GAP = 50;\nconst DEFAULT_PADDING = 8;\nconst DEFAULT_NODE_COLORS: Record<TreeDiagramNodeRoleId, { fill: string; stroke: string }> = {\n branch: { fill: '#ffe6cc', stroke: '#d79b00' },\n leaf: { fill: '#dae8fc', stroke: '#6c8ebf' },\n root: { fill: '#d5e8d4', stroke: '#82b366' }\n};\n\n// ── Actions ──────────────────────────────────────────────────────────────────────────────────────────────────────────\n\nexport function renderTreeDiagram(data: TreeDiagramNode, renderTo: HTMLElement, options: TreeDiagramOptions = {}): TreeDiagramHandle {\n const nodeWidth = options.nodeWidth ?? DEFAULT_NODE_WIDTH;\n const nodeHeight = options.nodeHeight ?? DEFAULT_NODE_HEIGHT;\n const siblingGap = options.siblingGap ?? DEFAULT_SIBLING_GAP;\n const levelGap = options.levelGap ?? DEFAULT_LEVEL_GAP;\n const padding = options.padding ?? DEFAULT_PADDING;\n const nodeColors = options.nodeColors ?? DEFAULT_NODE_COLORS;\n\n function getNodeRole(node: HierarchyPointNode<TreeDiagramNode>): TreeDiagramNodeRoleId {\n if (node.depth === 0) return 'root';\n return node.children ? 'branch' : 'leaf';\n }\n\n function draw(): SVGSVGElement {\n select(renderTo).selectAll('svg').remove();\n\n const root = hierarchy(data, (node) => node.children);\n const treeLayout = tree<TreeDiagramNode>()\n .nodeSize([nodeHeight + siblingGap, nodeWidth + levelGap])\n .separation(() => 1);\n const treeRoot = treeLayout(root);\n\n // Align each parent with its first child (instead of d3's default centering over all children) so the root sits at the top and the tree cascades downward.\n treeRoot.eachAfter((node) => {\n const [firstChild] = node.children ?? [];\n if (!firstChild) return;\n node.x = firstChild.x;\n });\n\n const treeNodes = treeRoot.descendants();\n\n // Screen axes are swapped for a left-to-right tree: node.y (depth) drives horizontal position, node.x (sibling spread) drives vertical.\n const minX = Math.min(...treeNodes.map((node) => node.y)) - nodeWidth / 2;\n const maxX = Math.max(...treeNodes.map((node) => node.y)) + nodeWidth / 2;\n const minY = Math.min(...treeNodes.map((node) => node.x)) - nodeHeight / 2;\n const maxY = Math.max(...treeNodes.map((node) => node.x)) + nodeHeight / 2;\n\n const viewBoxWidth = maxX - minX + padding * 2;\n const viewBoxHeight = maxY - minY + padding * 2;\n\n const svgSelection = select(renderTo)\n .append('svg')\n .attr('viewBox', `0 0 ${String(viewBoxWidth)} ${String(viewBoxHeight)}`)\n .attr('width', viewBoxWidth)\n .attr('height', viewBoxHeight);\n\n const canvas = svgSelection.append('g').attr('transform', `translate(${String(padding - minX)}, ${String(padding - minY)})`);\n\n const linkGenerator = linkHorizontal<HierarchyPointLink<TreeDiagramNode>, HierarchyPointNode<TreeDiagramNode>>()\n .x((node) => node.y)\n .y((node) => node.x);\n\n canvas.append('g').attr('fill', 'none').attr('stroke', '#999999').attr('stroke-width', 1.5).selectAll('path').data(treeRoot.links()).join('path').attr('d', linkGenerator);\n\n const nodeGroups = canvas\n .append('g')\n .selectAll('g')\n .data(treeNodes)\n .join('g')\n .attr('transform', (node) => `translate(${String(node.y - nodeWidth / 2)}, ${String(node.x - nodeHeight / 2)})`);\n\n nodeGroups\n .append('rect')\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('fill', (node) => nodeColors[getNodeRole(node)].fill)\n .attr('stroke', (node) => nodeColors[getNodeRole(node)].stroke);\n\n nodeGroups\n .append('text')\n .attr('x', nodeWidth / 2)\n .attr('y', nodeHeight / 2)\n .attr('text-anchor', 'middle')\n .attr('dominant-baseline', 'middle')\n .attr('font-family', 'Helvetica, Arial, sans-serif')\n .attr('font-size', 12)\n .attr('fill', '#000000')\n .text((node) => node.data.label);\n\n const svgNode = svgSelection.node();\n if (svgNode == null) throw new Error('Failed to create tree diagram SVG element.');\n return svgNode;\n }\n\n let svg = draw();\n\n return {\n resize: () => {\n svg = draw();\n },\n get svg() {\n return svg;\n }\n };\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ChordInputLink, ChordInputNode } from '@unovis/ts';
|
|
2
|
+
import { ColorModeId } from './palette';
|
|
3
|
+
export interface ChordDiagramNode extends ChordInputNode {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ChordDiagramLink extends ChordInputLink {
|
|
8
|
+
source: string;
|
|
9
|
+
target: string;
|
|
10
|
+
value: number;
|
|
11
|
+
}
|
|
12
|
+
export interface ChordDiagramData {
|
|
13
|
+
links: ChordDiagramLink[];
|
|
14
|
+
nodes: ChordDiagramNode[];
|
|
15
|
+
}
|
|
16
|
+
export interface ChordDiagramOptions {
|
|
17
|
+
colorModeId?: ColorModeId;
|
|
18
|
+
nodeWidth?: number;
|
|
19
|
+
padAngle?: number;
|
|
20
|
+
}
|
|
21
|
+
export interface ChordDiagramRenderHandle {
|
|
22
|
+
resize: () => void;
|
|
23
|
+
svg: SVGSVGElement;
|
|
24
|
+
}
|
|
25
|
+
export declare function renderChordDiagram(data: ChordDiagramData, renderTo: HTMLElement, options?: ChordDiagramOptions): ChordDiagramRenderHandle;
|
|
@@ -2,11 +2,13 @@ import { Chart } from 'billboard.js';
|
|
|
2
2
|
import { PresentationView } from '@dpuse/dpuse-shared/component/presentation';
|
|
3
3
|
import { BarChartData } from './billboardJs';
|
|
4
4
|
import { ObservablePlotChartTypeId } from './observablePlot';
|
|
5
|
+
import { ChordDiagramData, ChordDiagramOptions } from './chordDiagram';
|
|
5
6
|
import { ErdDiagramData, ErdDiagramOptions } from './erdDiagram';
|
|
6
7
|
import { NetworkDiagramData, NetworkDiagramOptions } from './networkDiagram';
|
|
7
8
|
import { SankeyDiagramData, SankeyDiagramOptions } from './sankeyDiagram';
|
|
8
9
|
import { TreeDiagramNode, TreeDiagramOptions } from './treeDiagram';
|
|
9
10
|
export type { BarChartData, BarChartSeries } from './billboardJs';
|
|
11
|
+
export type { ChordDiagramData, ChordDiagramLink, ChordDiagramNode, ChordDiagramOptions } from './chordDiagram';
|
|
10
12
|
export type { ErdDiagramData, ErdDiagramEdge, ErdDiagramNode, ErdDiagramNodeTypeId, ErdDiagramOptions } from './erdDiagram';
|
|
11
13
|
export type { NetworkDiagramData, NetworkDiagramLink, NetworkDiagramNode, NetworkDiagramOptions } from './networkDiagram';
|
|
12
14
|
export type { ObservablePlotChartTypeId } from './observablePlot';
|
|
@@ -31,6 +33,7 @@ export declare class D3Tool {
|
|
|
31
33
|
renderObservablePlot(typeId: ObservablePlotChartTypeId, data: BarChartData, renderTo: HTMLElement, callback?: () => void): Promise<D3View>;
|
|
32
34
|
renderD3BarChart(data: BarChartData, renderTo: HTMLElement, callback?: () => void): Promise<D3View>;
|
|
33
35
|
renderTanStackCharts(data: BarChartData, renderTo: HTMLElement, callback?: () => void): Promise<D3TanStackChartsView>;
|
|
36
|
+
renderChordDiagram(data: ChordDiagramData, renderTo: HTMLElement, options?: ChordDiagramOptions, callback?: () => void): Promise<D3View>;
|
|
34
37
|
renderErdDiagram(data: ErdDiagramData, renderTo: HTMLElement, options?: ErdDiagramOptions, callback?: () => void): Promise<D3View>;
|
|
35
38
|
renderNetworkDiagram(data: NetworkDiagramData, renderTo: HTMLElement, options?: NetworkDiagramOptions, callback?: () => void): Promise<D3NetworkView>;
|
|
36
39
|
renderSankeyDiagram(data: SankeyDiagramData, renderTo: HTMLElement, options?: SankeyDiagramOptions, callback?: () => void): Promise<D3View>;
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dpuse/dpuse-tool-d3-visualiser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.37",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "A TypeScript wrapper for D3, Billboard.js,
|
|
5
|
+
"description": "A TypeScript wrapper for D3, Billboard.js, Observable Plot, and Unovis that implements the Data Positioning chart-rendering interface, providing ERD (dagre), Sankey (d3-sankey), chord (Unovis), network (d3-force), tree (d3-hierarchy), and bar chart (billboard.js, Observable Plot) renderers.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "Jonathan Terrell <terrell.jm@gmail.com>",
|
|
8
8
|
"type": "module",
|
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"allowScripts": {
|
|
35
35
|
"esbuild@0.28.1": true,
|
|
36
36
|
"fsevents@2.3.3": true,
|
|
37
|
+
"maplibre-gl@2.4.0": true,
|
|
37
38
|
"sharp@0.34.5": true,
|
|
38
39
|
"unrs-resolver@1.12.2": true,
|
|
39
40
|
"workerd@1.20260730.1": true
|
|
@@ -44,7 +45,7 @@
|
|
|
44
45
|
"check": "node -e \"import('@dpuse/dpuse-development').then(m => m.checkConfigFiles())\" && node -e \"import('@dpuse/dpuse-development').then(m => m.checkDependencies())\"",
|
|
45
46
|
"document": "npm run documentOpening && npm run documentUsage && npm run documentDependencies && npm run documentGovernance",
|
|
46
47
|
"documentBundleSizes": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentBundleSizes({ moduleLevel: true }))\"",
|
|
47
|
-
"documentDependencies": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentDependencies('BSD-3-Clause;ISC;MIT;Unlicense'))\"",
|
|
48
|
+
"documentDependencies": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentDependencies('0BSD;Apache-2.0;BSD-2-Clause;BSD-3-Clause;EPL-2.0;ISC;MIT;Unlicense'))\"",
|
|
48
49
|
"documentGovernance": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentGovernance())\"",
|
|
49
50
|
"documentOpening": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentOpening())\"",
|
|
50
51
|
"documentUsage": "node -e \"import('@dpuse/dpuse-development').then(m => m.documentUsage())\"",
|
|
@@ -58,7 +59,8 @@
|
|
|
58
59
|
"@dagrejs/dagre": "^3.1.0",
|
|
59
60
|
"@dpuse/dpuse-shared": "^0.3.760",
|
|
60
61
|
"@observablehq/plot": "^0.6.17",
|
|
61
|
-
"@tanstack/charts": "^0.6.
|
|
62
|
+
"@tanstack/charts": "^0.6.5",
|
|
63
|
+
"@unovis/ts": "^1.6.7",
|
|
62
64
|
"billboard.js": "^4.0.3",
|
|
63
65
|
"d3-axis": "^3.0.0",
|
|
64
66
|
"d3-drag": "^3.0.0",
|