@moda-chart/core 0.1.2
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/LICENSE +21 -0
- package/README.md +25 -0
- package/dist/conformance.d.ts +40 -0
- package/dist/conformance.d.ts.map +1 -0
- package/dist/conformance.js +1608 -0
- package/dist/conformance.js.map +1 -0
- package/dist/core.d.ts +448 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +6026 -0
- package/dist/core.js.map +1 -0
- package/dist/geo.d.ts +85 -0
- package/dist/geo.d.ts.map +1 -0
- package/dist/geo.js +264 -0
- package/dist/geo.js.map +1 -0
- package/dist/geometry.d.ts +29 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +92 -0
- package/dist/geometry.js.map +1 -0
- package/dist/hierarchy.d.ts +142 -0
- package/dist/hierarchy.d.ts.map +1 -0
- package/dist/hierarchy.js +422 -0
- package/dist/hierarchy.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/maps/world.d.ts +9 -0
- package/dist/maps/world.d.ts.map +1 -0
- package/dist/maps/world.js +9 -0
- package/dist/maps/world.js.map +1 -0
- package/dist/mount.d.ts +75 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +795 -0
- package/dist/mount.js.map +1 -0
- package/dist/scales.d.ts +22 -0
- package/dist/scales.d.ts.map +1 -0
- package/dist/scales.js +118 -0
- package/dist/scales.js.map +1 -0
- package/dist/sparkline.d.ts +4 -0
- package/dist/sparkline.d.ts.map +1 -0
- package/dist/sparkline.js +62 -0
- package/dist/sparkline.js.map +1 -0
- package/dist/styles.css +989 -0
- package/dist/svg.d.ts +21 -0
- package/dist/svg.d.ts.map +1 -0
- package/dist/svg.js +1022 -0
- package/dist/svg.js.map +1 -0
- package/dist/text.d.ts +23 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +67 -0
- package/dist/text.js.map +1 -0
- package/dist/types.d.ts +1881 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/xml.d.ts +13 -0
- package/dist/xml.d.ts.map +1 -0
- package/dist/xml.js +109 -0
- package/dist/xml.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1,422 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 계층/플로우 차트 레이아웃 — 외부 의존성 없는 순수 함수.
|
|
3
|
+
*
|
|
4
|
+
* - normalizeTree: ChartTreeNode 입력을 값 해소·인덱스 부여된 TreeDatum으로
|
|
5
|
+
* - layoutTreemap: squarified treemap (리프 rect 목록)
|
|
6
|
+
* - layoutSunburst: partition (깊이별 링 + 값 비례 각도)
|
|
7
|
+
* - layoutSankey: 최장 경로 열 배정 + 균일 두께 베지어 리본
|
|
8
|
+
* - layoutChord: 그룹 아크 서브디비전 + 중심 통과 리본
|
|
9
|
+
*
|
|
10
|
+
* 모든 결과는 svg 좌표계. 각도는 라디안, 0 = 12시 방향(-π/2 기준은
|
|
11
|
+
* polar()가 처리한다).
|
|
12
|
+
*/
|
|
13
|
+
const r2 = (n) => Number(n.toFixed(2));
|
|
14
|
+
/**
|
|
15
|
+
* 입력 트리를 정규화 — value 없는 노드는 children 합계,
|
|
16
|
+
* 둘 다 없는 리프는 0. DFS 순서로 index를 부여한다.
|
|
17
|
+
*/
|
|
18
|
+
export function normalizeTree(nodes) {
|
|
19
|
+
let index = 0;
|
|
20
|
+
const walk = (n, depth, root, path) => {
|
|
21
|
+
const i = index++;
|
|
22
|
+
const p = `${path}/${i}`;
|
|
23
|
+
const children = (n.children ?? []).map((c) => walk(c, depth + 1, root, p));
|
|
24
|
+
const value = n.value ?? children.reduce((s, c) => s + c.value, 0);
|
|
25
|
+
return { name: n.name, value, children, index: i, depth, root, path: p };
|
|
26
|
+
};
|
|
27
|
+
return nodes.map((n, i) => walk(n, 0, i, ""));
|
|
28
|
+
}
|
|
29
|
+
/** 모든 노드를 DFS 순서로 평탄화한다 */
|
|
30
|
+
export function flattenTree(roots) {
|
|
31
|
+
const out = [];
|
|
32
|
+
const walk = (n) => {
|
|
33
|
+
out.push(n);
|
|
34
|
+
for (const c of n.children)
|
|
35
|
+
walk(c);
|
|
36
|
+
};
|
|
37
|
+
for (const r of roots)
|
|
38
|
+
walk(r);
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
/** 행의 최악 종횡비 — 값이 클수록 나쁨 (squarified 판단 기준) */
|
|
42
|
+
function worstRatio(row, sum, short, scale) {
|
|
43
|
+
const t = (sum * scale) / short;
|
|
44
|
+
if (t <= 0)
|
|
45
|
+
return Infinity;
|
|
46
|
+
let worst = 0;
|
|
47
|
+
for (const it of row) {
|
|
48
|
+
const side = (it.v * scale) / t;
|
|
49
|
+
if (side <= 0)
|
|
50
|
+
continue;
|
|
51
|
+
const r = Math.max(t / side, side / t);
|
|
52
|
+
if (r > worst)
|
|
53
|
+
worst = r;
|
|
54
|
+
}
|
|
55
|
+
return worst;
|
|
56
|
+
}
|
|
57
|
+
/** 한 레벨의 자식들을 rect 안에 squarified 배치하고 재귀한다 */
|
|
58
|
+
function squarifyLevel(children, rect, out) {
|
|
59
|
+
const items = children
|
|
60
|
+
.map((node) => ({ node, v: Math.max(0, node.value) }))
|
|
61
|
+
.filter((it) => it.v > 0)
|
|
62
|
+
.sort((a, b) => b.v - a.v);
|
|
63
|
+
let { x, y, w, h } = rect;
|
|
64
|
+
let i = 0;
|
|
65
|
+
while (i < items.length) {
|
|
66
|
+
const total = items.slice(i).reduce((s, t) => s + t.v, 0);
|
|
67
|
+
if (total <= 0 || w <= 0 || h <= 0)
|
|
68
|
+
break;
|
|
69
|
+
const scale = (w * h) / total;
|
|
70
|
+
const short = Math.min(w, h);
|
|
71
|
+
const row = [items[i++]];
|
|
72
|
+
let sum = row[0].v;
|
|
73
|
+
// 다음 항목을 넣어도 최악 종횡비가 나빠지지 않으면 같은 행에 추가
|
|
74
|
+
while (i < items.length &&
|
|
75
|
+
worstRatio([...row, items[i]], sum + items[i].v, short, scale) <=
|
|
76
|
+
worstRatio(row, sum, short, scale)) {
|
|
77
|
+
sum += items[i].v;
|
|
78
|
+
row.push(items[i++]);
|
|
79
|
+
}
|
|
80
|
+
const t = (sum * scale) / short;
|
|
81
|
+
if (w <= h) {
|
|
82
|
+
// 짧은 변 = 너비 → 행은 가로 밴드, 아이템은 x 방향으로 나열
|
|
83
|
+
let cx = x;
|
|
84
|
+
for (const it of row) {
|
|
85
|
+
const iw = (it.v * scale) / t;
|
|
86
|
+
out.push({ node: it.node, rect: { x: cx, y, w: iw, h: t } });
|
|
87
|
+
cx += iw;
|
|
88
|
+
}
|
|
89
|
+
y += t;
|
|
90
|
+
h -= t;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// 짧은 변 = 높이 → 행은 세로 밴드, 아이템은 y 방향으로 나열
|
|
94
|
+
let cy = y;
|
|
95
|
+
for (const it of row) {
|
|
96
|
+
const ih = (it.v * scale) / t;
|
|
97
|
+
out.push({ node: it.node, rect: { x, y: cy, w: t, h: ih } });
|
|
98
|
+
cy += ih;
|
|
99
|
+
}
|
|
100
|
+
x += t;
|
|
101
|
+
w -= t;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// 자식이 있는 노드는 자기 rect 안으로 재귀
|
|
105
|
+
for (const it of items) {
|
|
106
|
+
const cell = out.find((o) => o.node === it.node);
|
|
107
|
+
if (cell && it.node.children.length)
|
|
108
|
+
squarifyLevel(it.node.children, cell.rect, out);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* squarified treemap — 리프 노드의 rect만 반환한다.
|
|
113
|
+
* 내부 노드 rect는 자식들의 합집합이라 별도 렌더하지 않는다.
|
|
114
|
+
*/
|
|
115
|
+
export function layoutTreemap(roots, rect) {
|
|
116
|
+
const out = [];
|
|
117
|
+
squarifyLevel(roots, rect, out);
|
|
118
|
+
return out.filter((o) => !o.node.children.length);
|
|
119
|
+
}
|
|
120
|
+
/** 극좌표 → svg 좌표 — 0 rad = 12시 방향 */
|
|
121
|
+
export function polar(cx, cy, r, a) {
|
|
122
|
+
return [r2(cx + r * Math.sin(a)), r2(cy - r * Math.cos(a))];
|
|
123
|
+
}
|
|
124
|
+
/** 환형 섹터 path — r0>0이면 도넛 조각, 0이면 부채꼴 */
|
|
125
|
+
export function arcSector(cx, cy, r0, r1, a0, a1) {
|
|
126
|
+
const [x0, y0] = polar(cx, cy, r1, a0);
|
|
127
|
+
const [x1, y1] = polar(cx, cy, r1, a1);
|
|
128
|
+
const large = a1 - a0 > Math.PI ? 1 : 0;
|
|
129
|
+
if (r0 <= 0)
|
|
130
|
+
return `M${cx} ${cy} L${x0} ${y0} A${r2(r1)} ${r2(r1)} 0 ${large} 1 ${x1} ${y1} Z`;
|
|
131
|
+
const [x2, y2] = polar(cx, cy, r0, a1);
|
|
132
|
+
const [x3, y3] = polar(cx, cy, r0, a0);
|
|
133
|
+
return (`M${x0} ${y0} A${r2(r1)} ${r2(r1)} 0 ${large} 1 ${x1} ${y1} ` +
|
|
134
|
+
`L${x2} ${y2} A${r2(r0)} ${r2(r0)} 0 ${large} 0 ${x3} ${y3} Z`);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* sunburst partition — 깊이 d 노드는 링 [d*th, (d+1)*th],
|
|
138
|
+
* 각도는 부모 범위 안에서 자식 값 비례로 분할한다.
|
|
139
|
+
*/
|
|
140
|
+
export function layoutSunburst(roots, cx, cy, maxR) {
|
|
141
|
+
const flat = flattenTree(roots);
|
|
142
|
+
const maxDepth = flat.reduce((m, n) => Math.max(m, n.depth), 0);
|
|
143
|
+
const th = maxR / (maxDepth + 1);
|
|
144
|
+
const out = [];
|
|
145
|
+
const walk = (node, a0, a1) => {
|
|
146
|
+
out.push({ node, a0, a1, r0: node.depth * th, r1: (node.depth + 1) * th });
|
|
147
|
+
const total = node.children.reduce((s, c) => s + c.value, 0);
|
|
148
|
+
if (!total)
|
|
149
|
+
return;
|
|
150
|
+
let a = a0;
|
|
151
|
+
for (const c of node.children) {
|
|
152
|
+
const span = (a1 - a0) * (c.value / total);
|
|
153
|
+
walk(c, a, a + span);
|
|
154
|
+
a += span;
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
const total = roots.reduce((s, n) => s + n.value, 0);
|
|
158
|
+
if (total <= 0)
|
|
159
|
+
return [];
|
|
160
|
+
let a = 0;
|
|
161
|
+
for (const n of roots) {
|
|
162
|
+
const span = (Math.PI * 2 * n.value) / total;
|
|
163
|
+
walk(n, a, a + span);
|
|
164
|
+
a += span;
|
|
165
|
+
}
|
|
166
|
+
return out;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* sankey 레이아웃 — 노드 열은 source로부터의 최장 경로,
|
|
170
|
+
* 노드 높이는 유량 비례(전 열 균일 스케일), 리본은 3차 베지어.
|
|
171
|
+
* 순환 참조는 n회 완화 후 자연스럽게 수렴하지 않는 열에 배치된다.
|
|
172
|
+
*/
|
|
173
|
+
export function layoutSankey(links, rect, nodeWidth = 12, nodeGap = 12) {
|
|
174
|
+
// 노드 수집 — 등장 순서 유지
|
|
175
|
+
const names = [];
|
|
176
|
+
const idx = new Map();
|
|
177
|
+
const idOf = (name) => {
|
|
178
|
+
let i = idx.get(name);
|
|
179
|
+
if (i === undefined) {
|
|
180
|
+
i = names.length;
|
|
181
|
+
idx.set(name, i);
|
|
182
|
+
names.push(name);
|
|
183
|
+
}
|
|
184
|
+
return i;
|
|
185
|
+
};
|
|
186
|
+
const edges = links
|
|
187
|
+
.filter((l) => l.value > 0)
|
|
188
|
+
.map((l, i) => ({
|
|
189
|
+
s: idOf(l.source),
|
|
190
|
+
t: idOf(l.target),
|
|
191
|
+
v: l.value,
|
|
192
|
+
i,
|
|
193
|
+
}));
|
|
194
|
+
if (!names.length || !edges.length)
|
|
195
|
+
return { nodes: [], links: [] };
|
|
196
|
+
// 유량 — 노드 크기 = max(유입, 유출)
|
|
197
|
+
const inflow = names.map(() => 0);
|
|
198
|
+
const outflow = names.map(() => 0);
|
|
199
|
+
for (const e of edges) {
|
|
200
|
+
outflow[e.s] = (outflow[e.s] ?? 0) + e.v;
|
|
201
|
+
inflow[e.t] = (inflow[e.t] ?? 0) + e.v;
|
|
202
|
+
}
|
|
203
|
+
const value = names.map((_, i) => Math.max(inflow[i], outflow[i]));
|
|
204
|
+
// 열 배정 — 최장 경로 완화 (사이클은 names.length회로 상한)
|
|
205
|
+
const layer = names.map(() => 0);
|
|
206
|
+
for (let pass = 0; pass < names.length; pass++) {
|
|
207
|
+
let changed = false;
|
|
208
|
+
for (const e of edges) {
|
|
209
|
+
if (e.t === e.s)
|
|
210
|
+
continue; // 자기 루프는 열에 영향 없음
|
|
211
|
+
const nl = layer[e.s] + 1;
|
|
212
|
+
if (nl > layer[e.t]) {
|
|
213
|
+
layer[e.t] = nl;
|
|
214
|
+
changed = true;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!changed)
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
const cols = Math.max(...layer) + 1;
|
|
221
|
+
const byLayer = Array.from({ length: cols }, () => []);
|
|
222
|
+
layer.forEach((l, i) => byLayer[Math.min(l, cols - 1)].push(i));
|
|
223
|
+
// 균일 스케일 — 가장 빡빡한 열이 rect.h를 넘지 않도록
|
|
224
|
+
let scale = Infinity;
|
|
225
|
+
for (const col of byLayer) {
|
|
226
|
+
const colSum = col.reduce((s, i) => s + value[i], 0);
|
|
227
|
+
const avail = rect.h - nodeGap * Math.max(0, col.length - 1);
|
|
228
|
+
scale = Math.min(scale, colSum > 0 ? avail / colSum : 0);
|
|
229
|
+
}
|
|
230
|
+
if (!isFinite(scale) || scale <= 0)
|
|
231
|
+
scale = 1;
|
|
232
|
+
const nodes = names.map((name, i) => ({
|
|
233
|
+
name,
|
|
234
|
+
index: i,
|
|
235
|
+
value: value[i],
|
|
236
|
+
layer: layer[i],
|
|
237
|
+
x: 0,
|
|
238
|
+
y: 0,
|
|
239
|
+
w: nodeWidth,
|
|
240
|
+
h: Math.max(1, value[i] * scale),
|
|
241
|
+
}));
|
|
242
|
+
const xStep = cols > 1 ? (rect.w - nodeWidth) / (cols - 1) : 0;
|
|
243
|
+
for (const [l, col] of byLayer.entries()) {
|
|
244
|
+
const colSum = col.reduce((s, i) => s + nodes[i].h, 0);
|
|
245
|
+
const used = colSum + nodeGap * Math.max(0, col.length - 1);
|
|
246
|
+
let y = rect.y + Math.max(0, (rect.h - used) / 2);
|
|
247
|
+
const x = cols > 1 ? rect.x + l * xStep : rect.x + (rect.w - nodeWidth) / 2;
|
|
248
|
+
for (const i of col) {
|
|
249
|
+
nodes[i].x = r2(x);
|
|
250
|
+
nodes[i].y = r2(y);
|
|
251
|
+
nodes[i].h = r2(nodes[i].h);
|
|
252
|
+
y += nodes[i].h + nodeGap;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// 리본 — 노드 양쪽의 누적 오프셋으로 두께만큼 위를 나눈다
|
|
256
|
+
const srcOff = nodes.map(() => 0);
|
|
257
|
+
const tgtOff = nodes.map(() => 0);
|
|
258
|
+
const out = [];
|
|
259
|
+
for (const e of edges) {
|
|
260
|
+
if (e.s === e.t)
|
|
261
|
+
continue;
|
|
262
|
+
const s = nodes[e.s];
|
|
263
|
+
const t = nodes[e.t];
|
|
264
|
+
const th = e.v * scale;
|
|
265
|
+
const y1 = s.y + srcOff[e.s];
|
|
266
|
+
const y2 = t.y + tgtOff[e.t];
|
|
267
|
+
srcOff[e.s] = (srcOff[e.s] ?? 0) + th;
|
|
268
|
+
tgtOff[e.t] = (tgtOff[e.t] ?? 0) + th;
|
|
269
|
+
const x1 = s.x + s.w;
|
|
270
|
+
const x2 = t.x;
|
|
271
|
+
const mx = (x1 + x2) / 2;
|
|
272
|
+
out.push({
|
|
273
|
+
index: e.i,
|
|
274
|
+
sourceIndex: e.s,
|
|
275
|
+
targetIndex: e.t,
|
|
276
|
+
value: e.v,
|
|
277
|
+
path: `M${r2(x1)} ${r2(y1)} C${r2(mx)} ${r2(y1)} ${r2(mx)} ${r2(y2)} ${r2(x2)} ${r2(y2)} ` +
|
|
278
|
+
`L${r2(x2)} ${r2(y2 + th)} C${r2(mx)} ${r2(y2 + th)} ${r2(mx)} ${r2(y1 + th)} ${r2(x1)} ${r2(y1 + th)} Z`,
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
return { nodes, links: out };
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* chord 레이아웃 — 그룹 아크는 행 합 비례, 각 그룹 안에서
|
|
285
|
+
* matrix[i][j] 비례 서브아크를 만들고 (i,j) 리본은 그룹 i의 j-서브아크와
|
|
286
|
+
* 그룹 j의 i-서브아크를 중심을 지나는 2차 곡선으로 잇는다.
|
|
287
|
+
*/
|
|
288
|
+
export function layoutChord(matrix, labels, cx, cy, r, groupThickness = 14, padAngle = 0.04) {
|
|
289
|
+
const n = matrix.length;
|
|
290
|
+
if (!n || r <= groupThickness)
|
|
291
|
+
return { groups: [], ribbons: [] };
|
|
292
|
+
const rowSum = matrix.map((row) => (row ?? []).reduce((s, v) => s + Math.max(0, v ?? 0), 0));
|
|
293
|
+
const total = rowSum.reduce((a, b) => a + b, 0);
|
|
294
|
+
if (total <= 0)
|
|
295
|
+
return { groups: [], ribbons: [] };
|
|
296
|
+
const ri = r - groupThickness;
|
|
297
|
+
const angleScale = (Math.PI * 2 - n * padAngle) / total;
|
|
298
|
+
const groups = [];
|
|
299
|
+
// 서브아크 기록 — ribbons에서 (i,j) 쌍이 공유
|
|
300
|
+
const sub = matrix.map(() => []);
|
|
301
|
+
let a = 0;
|
|
302
|
+
for (let i = 0; i < n; i++) {
|
|
303
|
+
const span = rowSum[i] * angleScale;
|
|
304
|
+
const a0 = a;
|
|
305
|
+
let sa = a0;
|
|
306
|
+
for (let j = 0; j < n; j++) {
|
|
307
|
+
const v = Math.max(0, matrix[i]?.[j] ?? 0);
|
|
308
|
+
const w = v * angleScale;
|
|
309
|
+
sub[i][j] = { a0: sa, a1: sa + w };
|
|
310
|
+
sa += w;
|
|
311
|
+
}
|
|
312
|
+
a += span + padAngle;
|
|
313
|
+
if (span <= 0)
|
|
314
|
+
continue; // 유량 없는(숨겨진) 그룹은 렌더하지 않는다
|
|
315
|
+
const mid = (a0 + a0 + span) / 2;
|
|
316
|
+
const [lx, ly] = polar(cx, cy, r + 10, mid);
|
|
317
|
+
groups.push({
|
|
318
|
+
index: i,
|
|
319
|
+
name: labels[i] ?? `G${i}`,
|
|
320
|
+
value: rowSum[i],
|
|
321
|
+
a0,
|
|
322
|
+
a1: a0 + span,
|
|
323
|
+
path: arcSector(cx, cy, ri, r, a0, a0 + span),
|
|
324
|
+
lx,
|
|
325
|
+
ly,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
const ribbons = [];
|
|
329
|
+
let ri_i = 0;
|
|
330
|
+
for (let i = 0; i < n; i++) {
|
|
331
|
+
for (let j = i + 1; j < n; j++) {
|
|
332
|
+
const fwd = Math.max(0, matrix[i]?.[j] ?? 0);
|
|
333
|
+
const back = Math.max(0, matrix[j]?.[i] ?? 0);
|
|
334
|
+
if (fwd <= 0 && back <= 0)
|
|
335
|
+
continue;
|
|
336
|
+
const s = sub[i][j];
|
|
337
|
+
const t = sub[j][i];
|
|
338
|
+
const [x1, y1] = polar(cx, cy, ri, s.a0);
|
|
339
|
+
const [x2, y2] = polar(cx, cy, ri, s.a1);
|
|
340
|
+
const [x3, y3] = polar(cx, cy, ri, t.a0);
|
|
341
|
+
const [x4, y4] = polar(cx, cy, ri, t.a1);
|
|
342
|
+
ribbons.push({
|
|
343
|
+
index: ri_i++,
|
|
344
|
+
sourceIndex: i,
|
|
345
|
+
targetIndex: j,
|
|
346
|
+
value: fwd,
|
|
347
|
+
valueBack: back,
|
|
348
|
+
path: `M${x1} ${y1} A${r2(ri)} ${r2(ri)} 0 0 1 ${x2} ${y2} ` +
|
|
349
|
+
`Q${r2(cx)} ${r2(cy)} ${x3} ${y3} ` +
|
|
350
|
+
`A${r2(ri)} ${r2(ri)} 0 0 1 ${x4} ${y4} ` +
|
|
351
|
+
`Q${r2(cx)} ${r2(cy)} ${x1} ${y1} Z`,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
return { groups, ribbons };
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* 조직도 레이아웃 — 리프를 DFS 순서로 균등 배치하고 부모는 자식의
|
|
359
|
+
* 중심 위에 둔다 (tidy tree). 깊이별로 같은 y 행을 공유한다.
|
|
360
|
+
*/
|
|
361
|
+
export function layoutOrganization(roots, rect) {
|
|
362
|
+
const leaves = [];
|
|
363
|
+
let maxDepth = 0;
|
|
364
|
+
const count = (n) => {
|
|
365
|
+
maxDepth = Math.max(maxDepth, n.depth);
|
|
366
|
+
if (!n.children.length)
|
|
367
|
+
leaves.push(n);
|
|
368
|
+
for (const c of n.children)
|
|
369
|
+
count(c);
|
|
370
|
+
};
|
|
371
|
+
for (const r of roots)
|
|
372
|
+
count(r);
|
|
373
|
+
const leafN = Math.max(1, leaves.length);
|
|
374
|
+
const slotW = rect.w / leafN;
|
|
375
|
+
const rowH = rect.h / Math.max(1, maxDepth + 1);
|
|
376
|
+
const nw = Math.min(slotW * 0.82, 120);
|
|
377
|
+
const nh = Math.min(rowH * 0.5, 30);
|
|
378
|
+
// 리프 x 슬롯 — DFS 순서
|
|
379
|
+
const slotOf = new Map();
|
|
380
|
+
leaves.forEach((l, i) => slotOf.set(l.index, i));
|
|
381
|
+
const cxOf = new Map();
|
|
382
|
+
const place = (n) => {
|
|
383
|
+
// 부모 x = 자식 중심의 평균 — 리프는 자기 슬롯 중심
|
|
384
|
+
const cx = n.children.length
|
|
385
|
+
? n.children.reduce((s, c) => s + place(c), 0) / n.children.length
|
|
386
|
+
: rect.x + (slotOf.get(n.index) + 0.5) * slotW;
|
|
387
|
+
cxOf.set(n.index, cx);
|
|
388
|
+
return cx;
|
|
389
|
+
};
|
|
390
|
+
for (const r of roots)
|
|
391
|
+
place(r);
|
|
392
|
+
const nodes = [];
|
|
393
|
+
const links = [];
|
|
394
|
+
const walk = (n) => {
|
|
395
|
+
const cx = cxOf.get(n.index);
|
|
396
|
+
const cy = rect.y + n.depth * rowH + rowH / 2;
|
|
397
|
+
nodes.push({
|
|
398
|
+
node: n,
|
|
399
|
+
x: r2(cx - nw / 2),
|
|
400
|
+
y: r2(cy - nh / 2),
|
|
401
|
+
w: r2(nw),
|
|
402
|
+
h: r2(nh),
|
|
403
|
+
cx: r2(cx),
|
|
404
|
+
cy: r2(cy),
|
|
405
|
+
});
|
|
406
|
+
for (const c of n.children) {
|
|
407
|
+
const ccx = cxOf.get(c.index);
|
|
408
|
+
const ccy = rect.y + c.depth * rowH + rowH / 2;
|
|
409
|
+
const midY = cy + nh / 2 + (ccy - nh / 2 - (cy + nh / 2)) / 2;
|
|
410
|
+
links.push({
|
|
411
|
+
from: n.index,
|
|
412
|
+
to: c.index,
|
|
413
|
+
path: `M${r2(cx)} ${r2(cy + nh / 2)} V${r2(midY)} H${r2(ccx)} V${r2(ccy - nh / 2)}`,
|
|
414
|
+
});
|
|
415
|
+
walk(c);
|
|
416
|
+
}
|
|
417
|
+
};
|
|
418
|
+
for (const r of roots)
|
|
419
|
+
walk(r);
|
|
420
|
+
return { nodes, links };
|
|
421
|
+
}
|
|
422
|
+
//# sourceMappingURL=hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.js","sourceRoot":"","sources":["../src/hierarchy.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { ChartCore, DEFAULT_PALETTE } from "./core.js";
|
|
2
|
+
export type { Chart } from "./core.js";
|
|
3
|
+
export { applyMorph, attachChartView, bindChart, captureMorph, downloadPNG, downloadSVG, mountChart, mountSparkline, observeSize, renderInto, skeletonHtml, } from "./mount.js";
|
|
4
|
+
export type { MountedChart, MountChartOptions } from "./mount.js";
|
|
5
|
+
export { svgInner, svgString, seriesColor } from "./svg.js";
|
|
6
|
+
export { decodeMapFeatures, fitMapData, fitMapFeatures, pointInRing, } from "./geo.js";
|
|
7
|
+
export type { Coord, FittedMapFeature, MapFeature, MapFeatureKey, } from "./geo.js";
|
|
8
|
+
export { WORLD_TOPOLOGY } from "./maps/world.js";
|
|
9
|
+
export { flattenTree, layoutChord, layoutOrganization, layoutSankey, layoutSunburst, layoutTreemap, normalizeTree, } from "./hierarchy.js";
|
|
10
|
+
export type { OrgLinkLayout, OrgNodeLayout, SankeyLinkLayout, SankeyNodeLayout, SunburstCell, TreeDatum, } from "./hierarchy.js";
|
|
11
|
+
export { parseText } from "./text.js";
|
|
12
|
+
export { parseDataXml } from "./xml.js";
|
|
13
|
+
export type { XmlDataResult } from "./xml.js";
|
|
14
|
+
export { sparklineMarkup } from "./sparkline.js";
|
|
15
|
+
export { linearScale, logScale, logTicks, niceDomain, niceStep, niceTicks, timeTicks, formatNumber, formatTimeTick, } from "./scales.js";
|
|
16
|
+
export { linePath, stepPath, splinePath, areaPath, arcPath, bandPath, } from "./geometry.js";
|
|
17
|
+
export type { AnnotationInput, AnnotationView, AxisPosition, AxisView, BarView, CandleView, CategoryValue, ChartBoxInput, ChartAnimationOptions, ChartAxisOptions, ChartCoreOptions, ChartDirection, ChartEventHandlers, ChartEventMap, ChartEventType, ChartChordOptions, ChartFlowLink, ChartGaugeOptions, ChartHeatmapOptions, ChartLegendOptions, ChartLocale, ChartPadding, ChartPointInput, ChartSankeyOptions, ChartSeriesInput, ChartSnapshot, ChartTheme, ChartTooltipOptions, ChartTreeNode, BoxPlotView, ChordGroupView, ChordRibbonView, ChartDrawingOptions, ChartSearchOptions, ChartType, DataLabelView, DomainWindow, DrawingInput, DrawingView, DrawTool, DrilldownLevel, ErrorBarView, FocusPoint, GeometryView, GroupTickView, HeatCellView, HoverInfo, ItemStyle, ItemStyleContext, LegendItemView, LegendPosition, LinearGaugeView, MapProjection, ChartMapDatum, ChartMapLine, ChartMapOptions, ChartMapPoint, ChartMenuItem, ChartContextMenuOptions, ChartPictogramOptions, ChartPyramidPopOptions, MapClusterView, MapLineView, MapMarkerView, MapRegionView, MapScaleView, MarkBandInput, MarkBandView, MarkLineInput, MarkLineView, MenuItemView, MenuView, NavigatorView, OrgLinkView, OrgNodeView, PictoIconView, PictoRowView, PointView, PolarSectorView, GaugeView, RadarGridView, RangeBarView, Rect, SankeyLinkView, SankeyNodeView, ScaleKind, SearchLoadArgs, SelectionView, SeriesView, SliceView, SparklineOptions, SunburstNodeView, TickView, TreemapNodeView, ChartState, TooltipFormatContext, TooltipMode, TooltipRenderContext, TooltipRowView, TooltipView, TrendLineView, WordView, ChartZoomOptions, ZoomWindowInput, } from "./types.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { ChartCore, DEFAULT_PALETTE } from "./core.js";
|
|
2
|
+
export { applyMorph, attachChartView, bindChart, captureMorph, downloadPNG, downloadSVG, mountChart, mountSparkline, observeSize, renderInto, skeletonHtml, } from "./mount.js";
|
|
3
|
+
export { svgInner, svgString, seriesColor } from "./svg.js";
|
|
4
|
+
export { decodeMapFeatures, fitMapData, fitMapFeatures, pointInRing, } from "./geo.js";
|
|
5
|
+
export { WORLD_TOPOLOGY } from "./maps/world.js";
|
|
6
|
+
export { flattenTree, layoutChord, layoutOrganization, layoutSankey, layoutSunburst, layoutTreemap, normalizeTree, } from "./hierarchy.js";
|
|
7
|
+
export { parseText } from "./text.js";
|
|
8
|
+
export { parseDataXml } from "./xml.js";
|
|
9
|
+
export { sparklineMarkup } from "./sparkline.js";
|
|
10
|
+
export { linearScale, logScale, logTicks, niceDomain, niceStep, niceTicks, timeTicks, formatNumber, formatTimeTick, } from "./scales.js";
|
|
11
|
+
export { linePath, stepPath, splinePath, areaPath, arcPath, bandPath, } from "./geometry.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EACL,UAAU,EACV,eAAe,EACf,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,WAAW,GACZ,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,gBAAgB,CAAC;AASxB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACT,YAAY,EACZ,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,GACT,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 내장 세계 지도 — Natural Earth 110m 국가 경계 (world-atlas@2).
|
|
3
|
+
*
|
|
4
|
+
* TopoJSON Topology. 피처 id는 ISO 3166-1 numeric 코드 문자열
|
|
5
|
+
* (예: "410"=South Korea, "840"=USA), properties.name이 표시 이름이다.
|
|
6
|
+
* mapData.code는 이 id·name(대소문자 무시)과 조인된다.
|
|
7
|
+
*/
|
|
8
|
+
export declare const WORLD_TOPOLOGY: unknown;
|
|
9
|
+
//# sourceMappingURL=world.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world.d.ts","sourceRoot":"","sources":["../../src/maps/world.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,EAAE,OAAyvyG,CAAC"}
|