@cardenelabs/cdl 0.10.0 → 0.12.0
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/CHANGELOG.md +65 -1
- package/SPEC.md +25 -3
- package/dist/index.cjs +387 -169
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +388 -170
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +387 -169
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +388 -170
- package/dist/react.js.map +1 -1
- package/dist/{render-CH1Qn3Jv.d.cts → render-C7FKvMqq.d.cts} +14 -2
- package/dist/{render-CH1Qn3Jv.d.ts → render-C7FKvMqq.d.ts} +14 -2
- package/package.json +1 -1
- package/src/kinds/chart-bar.tsx +45 -12
- package/src/kinds/chart-line.tsx +4 -10
- package/src/kinds/chart-pie.tsx +76 -15
- package/src/kinds/draw-progress.ts +100 -0
- package/src/kinds/funnel.tsx +101 -58
- package/src/kinds/gantt.tsx +25 -1
- package/src/kinds/mind-map.tsx +65 -14
- package/src/kinds/tree.tsx +52 -4
- package/src/kinds/user-journey.tsx +29 -1
- package/src/render/nodes.tsx +63 -7
- package/src/types.ts +14 -2
- package/src/validate.ts +32 -2
package/dist/index.cjs
CHANGED
|
@@ -15864,6 +15864,16 @@ function nodeTemplateTexts(node) {
|
|
|
15864
15864
|
|
|
15865
15865
|
// src/validate.ts
|
|
15866
15866
|
var TONES2 = new Set(TONES);
|
|
15867
|
+
var DRAW_KINDS = /* @__PURE__ */ new Set([
|
|
15868
|
+
"chart-line",
|
|
15869
|
+
"chart-bar",
|
|
15870
|
+
"chart-pie",
|
|
15871
|
+
"journey-map",
|
|
15872
|
+
"mind-map",
|
|
15873
|
+
"tree-hierarchy",
|
|
15874
|
+
"gantt-timeline",
|
|
15875
|
+
"funnel-stages"
|
|
15876
|
+
]);
|
|
15867
15877
|
var KINDS = new Set(NODE_KINDS);
|
|
15868
15878
|
var ENG_BANNED = /\b(FUNCTION|STORAGE|EVENT LOG|BALANCES MAPPING|READ|WRITE|EMIT|CALL)\b/;
|
|
15869
15879
|
function validate(diag) {
|
|
@@ -15981,8 +15991,10 @@ function validate(diag) {
|
|
|
15981
15991
|
continue;
|
|
15982
15992
|
}
|
|
15983
15993
|
const kind = diag.nodes.find((n) => n.id === id)?.kind;
|
|
15984
|
-
if (kind
|
|
15985
|
-
warnings.push(
|
|
15994
|
+
if (!DRAW_KINDS.has(String(kind))) {
|
|
15995
|
+
warnings.push(
|
|
15996
|
+
`phase "${p.id}" \u306E draw "${id}" \u306F kind "${kind}" \u3067\u3001 \u8D77\u70B9\u304B\u3089\u63CF\u304F\u52D5\u304D\u3092\u6301\u305F\u306A\u3044 (\u5BFE\u8C61\u306F ${[...DRAW_KINDS].join(" / ")})`
|
|
15997
|
+
);
|
|
15986
15998
|
}
|
|
15987
15999
|
}
|
|
15988
16000
|
for (const t of p.tweens) {
|
|
@@ -21279,6 +21291,44 @@ function resolveMindData(data, values) {
|
|
|
21279
21291
|
const \u89E3\u6C7A\u5F8C = { ...data, rootTitle: root.value, branches };
|
|
21280
21292
|
return root.ok ? \u89E3\u6C7A\u5F8C : { ...\u89E3\u6C7A\u5F8C, unresolved: true };
|
|
21281
21293
|
}
|
|
21294
|
+
|
|
21295
|
+
// src/kinds/draw-progress.ts
|
|
21296
|
+
function \u9032\u307F\u3092\u7573\u3080(drawing, progress) {
|
|
21297
|
+
if (!drawing) return 1;
|
|
21298
|
+
return Math.min(1, Math.max(0, Number.isFinite(progress) ? progress : 1));
|
|
21299
|
+
}
|
|
21300
|
+
function \u4F38\u3070\u3059dash(drawing, \u4F38\u3073) {
|
|
21301
|
+
if (!drawing) return {};
|
|
21302
|
+
return { pathLength: 1, strokeDasharray: 1, strokeDashoffset: 1 - \u4F38\u3073 };
|
|
21303
|
+
}
|
|
21304
|
+
function \u6BB5\u306E\u4F38\u3073(\u4F38\u3073, \u6DF1\u3055, \u6700\u5927\u6DF1\u3055) {
|
|
21305
|
+
if (\u6700\u5927\u6DF1\u3055 <= 0 || \u6DF1\u3055 <= 0) return 1;
|
|
21306
|
+
const \u5E45 = 1 / \u6700\u5927\u6DF1\u3055;
|
|
21307
|
+
const \u59CB\u307E\u308A = (\u6DF1\u3055 - 1) * \u5E45;
|
|
21308
|
+
return Math.min(1, Math.max(0, (\u4F38\u3073 - \u59CB\u307E\u308A) / \u5E45));
|
|
21309
|
+
}
|
|
21310
|
+
function \u30D9\u30B8\u30A8\u306E\u7D2F\u7A4D\u5272\u5408(\u70B9, \u5236\u5FA1\u70B9, \u5206\u5272\u6570 = 16) {
|
|
21311
|
+
if (\u70B9.length <= 1) return \u70B9.map(() => 0);
|
|
21312
|
+
const \u9577\u3055 = [0];
|
|
21313
|
+
let \u5408\u8A08 = 0;
|
|
21314
|
+
for (let i = 1; i < \u70B9.length; i++) {
|
|
21315
|
+
const p0 = \u70B9[i - 1];
|
|
21316
|
+
const p3 = \u70B9[i];
|
|
21317
|
+
const [p1, p2] = \u5236\u5FA1\u70B9(p0, p3);
|
|
21318
|
+
let \u524D = p0;
|
|
21319
|
+
for (let s = 1; s <= \u5206\u5272\u6570; s++) {
|
|
21320
|
+
const t = s / \u5206\u5272\u6570;
|
|
21321
|
+
const u = 1 - t;
|
|
21322
|
+
const x = u * u * u * p0.x + 3 * u * u * t * p1.x + 3 * u * t * t * p2.x + t * t * t * p3.x;
|
|
21323
|
+
const y = u * u * u * p0.y + 3 * u * u * t * p1.y + 3 * u * t * t * p2.y + t * t * t * p3.y;
|
|
21324
|
+
\u5408\u8A08 += Math.hypot(x - \u524D.x, y - \u524D.y);
|
|
21325
|
+
\u524D = { x, y };
|
|
21326
|
+
}
|
|
21327
|
+
\u9577\u3055.push(\u5408\u8A08);
|
|
21328
|
+
}
|
|
21329
|
+
if (\u5408\u8A08 === 0) return \u70B9.map(() => 0);
|
|
21330
|
+
return \u9577\u3055.map((l) => l / \u5408\u8A08);
|
|
21331
|
+
}
|
|
21282
21332
|
function ChartLineNode({
|
|
21283
21333
|
node,
|
|
21284
21334
|
active,
|
|
@@ -21316,7 +21366,7 @@ function ChartLineNode({
|
|
|
21316
21366
|
\u70B9\u307E\u3067\u306E\u9577\u3055.push(\u7DDA\u306E\u5168\u9577);
|
|
21317
21367
|
\u524D\u306E\u70B9 = \u4ECA\u306E\u70B9;
|
|
21318
21368
|
}
|
|
21319
|
-
const \u4F38\u3073 = drawing
|
|
21369
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
21320
21370
|
const \u7DDA\u306E\u5148\u304C\u5C4A\u3044\u305F = (idx) => {
|
|
21321
21371
|
if (!drawing) return true;
|
|
21322
21372
|
if (data.length <= 1) return true;
|
|
@@ -21401,7 +21451,7 @@ function ChartLineNode({
|
|
|
21401
21451
|
strokeWidth: 2.5,
|
|
21402
21452
|
strokeLinejoin: "round",
|
|
21403
21453
|
strokeLinecap: "round",
|
|
21404
|
-
|
|
21454
|
+
...\u4F38\u3070\u3059dash(drawing, \u4F38\u3073)
|
|
21405
21455
|
}
|
|
21406
21456
|
),
|
|
21407
21457
|
data.map((d, idx) => {
|
|
@@ -21467,8 +21517,11 @@ function ChartLineNode({
|
|
|
21467
21517
|
function ChartPieNode({
|
|
21468
21518
|
node,
|
|
21469
21519
|
active,
|
|
21470
|
-
stateValues = {}
|
|
21520
|
+
stateValues = {},
|
|
21521
|
+
drawing = false,
|
|
21522
|
+
progress = 1
|
|
21471
21523
|
}) {
|
|
21524
|
+
const instanceId = react.useId().replace(/[^A-Za-z0-9_-]/g, "");
|
|
21472
21525
|
const x0 = node.cx - node.w / 2;
|
|
21473
21526
|
const y0 = node.cy - node.h / 2;
|
|
21474
21527
|
const data = resolveChartData(node.chartData ?? [], stateValues);
|
|
@@ -21481,20 +21534,26 @@ function ChartPieNode({
|
|
|
21481
21534
|
const cx = pieAreaW / 2;
|
|
21482
21535
|
const cy = PAD_TOP + chartAreaH / 2;
|
|
21483
21536
|
let cumAngle = -Math.PI / 2;
|
|
21537
|
+
let cumFrac = 0;
|
|
21484
21538
|
const slices = data.map((d) => {
|
|
21485
21539
|
const frac = d.value / total;
|
|
21486
21540
|
const angle = frac * Math.PI * 2;
|
|
21487
21541
|
const a0 = cumAngle;
|
|
21488
21542
|
const a1 = cumAngle + angle;
|
|
21489
21543
|
cumAngle = a1;
|
|
21544
|
+
const startFrac = cumFrac;
|
|
21545
|
+
cumFrac += frac;
|
|
21490
21546
|
const x1 = cx + radius * Math.cos(a0);
|
|
21491
21547
|
const y1 = cy + radius * Math.sin(a0);
|
|
21492
21548
|
const x2 = cx + radius * Math.cos(a1);
|
|
21493
21549
|
const y2 = cy + radius * Math.sin(a1);
|
|
21494
21550
|
const large = angle > Math.PI ? 1 : 0;
|
|
21495
21551
|
const path = `M ${cx} ${cy} L ${x1} ${y1} A ${radius} ${radius} 0 ${large} 1 ${x2} ${y2} Z`;
|
|
21496
|
-
return { d, frac, path };
|
|
21552
|
+
return { d, frac, path, startFrac };
|
|
21497
21553
|
});
|
|
21554
|
+
const \u958B\u304D = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
21555
|
+
const \u5207\u308A\u629C\u304Did = `cdl-pie-draw-${instanceId}`;
|
|
21556
|
+
const \u958B\u304D\u59CB\u3081\u305F = (startFrac) => !drawing || \u958B\u304D > startFrac;
|
|
21498
21557
|
const legendX = pieAreaW + 8;
|
|
21499
21558
|
const legendGap = Math.min(28, chartAreaH / Math.max(data.length, 1));
|
|
21500
21559
|
const legendStartY = PAD_TOP + (chartAreaH - legendGap * data.length) / 2 + legendGap / 2;
|
|
@@ -21513,7 +21572,8 @@ function ChartPieNode({
|
|
|
21513
21572
|
strokeWidth: active ? 3 : 1.25
|
|
21514
21573
|
}
|
|
21515
21574
|
),
|
|
21516
|
-
|
|
21575
|
+
drawing && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: \u5207\u308A\u629C\u304Did, children: \u6247\u5F62\u306E\u5207\u308A\u629C\u304D(cx, cy, radius + 2, \u958B\u304D) }) }),
|
|
21576
|
+
/* @__PURE__ */ jsxRuntime.jsx("g", { ...drawing ? { clipPath: `url(#${\u5207\u308A\u629C\u304Did})` } : {}, children: slices.map((s, idx) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
21517
21577
|
"path",
|
|
21518
21578
|
{
|
|
21519
21579
|
"data-cdl-role": "chart-pie-slice",
|
|
@@ -21525,8 +21585,8 @@ function ChartPieNode({
|
|
|
21525
21585
|
strokeWidth: 1.5
|
|
21526
21586
|
},
|
|
21527
21587
|
`slice-${idx}`
|
|
21528
|
-
)),
|
|
21529
|
-
slices.map((s, idx) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${legendX} ${legendStartY + idx * legendGap})`, children: [
|
|
21588
|
+
)) }),
|
|
21589
|
+
slices.map((s, idx) => !\u958B\u304D\u59CB\u3081\u305F(s.startFrac) ? null : /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${legendX} ${legendStartY + idx * legendGap})`, children: [
|
|
21530
21590
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21531
21591
|
"rect",
|
|
21532
21592
|
{
|
|
@@ -21564,6 +21624,15 @@ function ChartPieNode({
|
|
|
21564
21624
|
] }, `legend-${idx}`))
|
|
21565
21625
|
] });
|
|
21566
21626
|
}
|
|
21627
|
+
function \u6247\u5F62\u306E\u5207\u308A\u629C\u304D(cx, cy, r, \u958B\u304D) {
|
|
21628
|
+
if (\u958B\u304D <= 0) return null;
|
|
21629
|
+
if (\u958B\u304D >= 1) return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r });
|
|
21630
|
+
const a0 = -Math.PI / 2;
|
|
21631
|
+
const a1 = a0 + \u958B\u304D * Math.PI * 2;
|
|
21632
|
+
const large = \u958B\u304D > 0.5 ? 1 : 0;
|
|
21633
|
+
const d = `M ${cx} ${cy} L ${cx + r * Math.cos(a0)} ${cy + r * Math.sin(a0)} A ${r} ${r} 0 ${large} 1 ${cx + r * Math.cos(a1)} ${cy + r * Math.sin(a1)} Z`;
|
|
21634
|
+
return /* @__PURE__ */ jsxRuntime.jsx("path", { d });
|
|
21635
|
+
}
|
|
21567
21636
|
var FALLBACK_ORDER = ["accent", "teal", "warning", "success", "info", "error"];
|
|
21568
21637
|
function sliceColor(tone, idx) {
|
|
21569
21638
|
if (tone) return TONE[tone];
|
|
@@ -21572,7 +21641,9 @@ function sliceColor(tone, idx) {
|
|
|
21572
21641
|
function ChartBarNode({
|
|
21573
21642
|
node,
|
|
21574
21643
|
active,
|
|
21575
|
-
stateValues = {}
|
|
21644
|
+
stateValues = {},
|
|
21645
|
+
drawing = false,
|
|
21646
|
+
progress = 1
|
|
21576
21647
|
}) {
|
|
21577
21648
|
const x0 = node.cx - node.w / 2;
|
|
21578
21649
|
const y0 = node.cy - node.h / 2;
|
|
@@ -21595,6 +21666,8 @@ function ChartBarNode({
|
|
|
21595
21666
|
const v = vMax * i / gridCount;
|
|
21596
21667
|
return { y: yAt(v), value: v };
|
|
21597
21668
|
});
|
|
21669
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
21670
|
+
const \u6A2A\u8EF8\u306Ey = PAD_TOP + canvasH;
|
|
21598
21671
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
21599
21672
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21600
21673
|
"rect",
|
|
@@ -21651,26 +21724,28 @@ function ChartBarNode({
|
|
|
21651
21724
|
const bx = xAt(idx);
|
|
21652
21725
|
const by = yAt(d.value);
|
|
21653
21726
|
const bh = PAD_TOP + canvasH - by;
|
|
21727
|
+
const \u898B\u3048\u3066\u3044\u308B\u982D = \u6A2A\u8EF8\u306Ey - (\u6A2A\u8EF8\u306Ey - by) * \u4F38\u3073;
|
|
21728
|
+
const \u68D2 = /* @__PURE__ */ jsxRuntime.jsx(
|
|
21729
|
+
"rect",
|
|
21730
|
+
{
|
|
21731
|
+
"data-cdl-role": "chart-bar",
|
|
21732
|
+
"data-cdl-unresolved": d.unresolved ? "true" : void 0,
|
|
21733
|
+
x: bx,
|
|
21734
|
+
y: by,
|
|
21735
|
+
width: barW,
|
|
21736
|
+
height: bh,
|
|
21737
|
+
rx: 2,
|
|
21738
|
+
fill: "var(--cdl-tone-accent, #2d6a8f)",
|
|
21739
|
+
fillOpacity: 0.9
|
|
21740
|
+
}
|
|
21741
|
+
);
|
|
21654
21742
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
21655
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21656
|
-
"rect",
|
|
21657
|
-
{
|
|
21658
|
-
"data-cdl-role": "chart-bar",
|
|
21659
|
-
"data-cdl-unresolved": d.unresolved ? "true" : void 0,
|
|
21660
|
-
x: bx,
|
|
21661
|
-
y: by,
|
|
21662
|
-
width: barW,
|
|
21663
|
-
height: bh,
|
|
21664
|
-
rx: 2,
|
|
21665
|
-
fill: "var(--cdl-tone-accent, #2d6a8f)",
|
|
21666
|
-
fillOpacity: 0.9
|
|
21667
|
-
}
|
|
21668
|
-
),
|
|
21743
|
+
drawing ? /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `translate(0 ${\u6A2A\u8EF8\u306Ey}) scale(1 ${\u4F38\u3073}) translate(0 ${-\u6A2A\u8EF8\u306Ey})`, children: \u68D2 }) : \u68D2,
|
|
21669
21744
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21670
21745
|
"text",
|
|
21671
21746
|
{
|
|
21672
21747
|
x: bx + barW / 2,
|
|
21673
|
-
y:
|
|
21748
|
+
y: \u898B\u3048\u3066\u3044\u308B\u982D - 6,
|
|
21674
21749
|
fontSize: 11,
|
|
21675
21750
|
textAnchor: "middle",
|
|
21676
21751
|
fill: "var(--cdl-text, #1a1f2a)",
|
|
@@ -21695,7 +21770,9 @@ function ChartBarNode({
|
|
|
21695
21770
|
function GanttNode({
|
|
21696
21771
|
node,
|
|
21697
21772
|
active,
|
|
21698
|
-
stateValues = {}
|
|
21773
|
+
stateValues = {},
|
|
21774
|
+
drawing = false,
|
|
21775
|
+
progress = 1
|
|
21699
21776
|
}) {
|
|
21700
21777
|
const x0 = node.cx - node.w / 2;
|
|
21701
21778
|
const y0 = node.cy - node.h / 2;
|
|
@@ -21754,6 +21831,7 @@ function GanttNode({
|
|
|
21754
21831
|
const \u5E2F\u306E\u4F59\u767D = Math.min(6, cellW / 2);
|
|
21755
21832
|
const \u5E2F\u306E\u5DE6 = (idx) => xAt(idx) + \u5E2F\u306E\u4F59\u767D / 2;
|
|
21756
21833
|
const \u5E2F\u306E\u53F3 = (idx) => xAt(idx) + cellW - \u5E2F\u306E\u4F59\u767D / 2;
|
|
21834
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
21757
21835
|
const taskById = new Map(\u6574\u3048\u305F.map((t) => [t.id, t]));
|
|
21758
21836
|
const rowOf = new Map(\u6574\u3048\u305F.map((t, i) => [t.id, i]));
|
|
21759
21837
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
@@ -21828,34 +21906,41 @@ function GanttNode({
|
|
|
21828
21906
|
const bx = \u5E2F\u306E\u5DE6(t.startIdx);
|
|
21829
21907
|
const by = yAt(row);
|
|
21830
21908
|
const bw = Math.max(0, \u5E2F\u306E\u53F3(t.endIdx) - bx);
|
|
21831
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
21832
|
-
|
|
21833
|
-
|
|
21834
|
-
{
|
|
21835
|
-
|
|
21836
|
-
|
|
21837
|
-
|
|
21838
|
-
|
|
21839
|
-
|
|
21840
|
-
|
|
21841
|
-
|
|
21842
|
-
|
|
21843
|
-
|
|
21844
|
-
|
|
21845
|
-
|
|
21846
|
-
|
|
21847
|
-
|
|
21848
|
-
|
|
21849
|
-
|
|
21850
|
-
|
|
21851
|
-
|
|
21852
|
-
|
|
21853
|
-
|
|
21854
|
-
|
|
21855
|
-
|
|
21856
|
-
|
|
21857
|
-
|
|
21858
|
-
|
|
21909
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
21910
|
+
"g",
|
|
21911
|
+
{
|
|
21912
|
+
...drawing ? { transform: `translate(${bx} 0) scale(${\u4F38\u3073} 1) translate(${-bx} 0)` } : {},
|
|
21913
|
+
children: [
|
|
21914
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21915
|
+
"rect",
|
|
21916
|
+
{
|
|
21917
|
+
"data-cdl-role": "gantt-bar",
|
|
21918
|
+
"data-cdl-unresolved": t.unresolved ? "true" : void 0,
|
|
21919
|
+
"data-cdl-clipped": "clipped" in t && t.clipped ? "true" : void 0,
|
|
21920
|
+
x: bx,
|
|
21921
|
+
y: by,
|
|
21922
|
+
width: bw,
|
|
21923
|
+
height: rowH,
|
|
21924
|
+
rx: 4,
|
|
21925
|
+
fill: toneColor3(t.tone),
|
|
21926
|
+
fillOpacity: 0.9
|
|
21927
|
+
}
|
|
21928
|
+
),
|
|
21929
|
+
t.owner && rowH >= 22 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
21930
|
+
"text",
|
|
21931
|
+
{
|
|
21932
|
+
x: bx + 8,
|
|
21933
|
+
y: by + rowH / 2 + 4,
|
|
21934
|
+
fontSize: 11,
|
|
21935
|
+
fill: "var(--cdl-node-fill, #ffffff)",
|
|
21936
|
+
fontWeight: 600,
|
|
21937
|
+
children: t.owner
|
|
21938
|
+
}
|
|
21939
|
+
)
|
|
21940
|
+
]
|
|
21941
|
+
},
|
|
21942
|
+
`bar-${t.id}`
|
|
21943
|
+
);
|
|
21859
21944
|
}),
|
|
21860
21945
|
\u6574\u3048\u305F.filter((t) => t.dependsOn && taskById.has(t.dependsOn)).map((t) => {
|
|
21861
21946
|
const parent = taskById.get(t.dependsOn);
|
|
@@ -21875,29 +21960,33 @@ function GanttNode({
|
|
|
21875
21960
|
const hasRoom = enterX - startX >= elbowGap;
|
|
21876
21961
|
const path = hasRoom ? `M ${startX} ${parentMidY} L ${enterX} ${parentMidY} L ${enterX} ${tipY} L ${tipX} ${tipY}` : `M ${startX} ${parentMidY} L ${startX + elbowGap} ${parentMidY} L ${startX + elbowGap} ${(parentMidY + tipY) / 2} L ${enterX} ${(parentMidY + tipY) / 2} L ${enterX} ${tipY} L ${tipX} ${tipY}`;
|
|
21877
21962
|
const arrowHeadPath = `M ${tipX + arrowHeadSize} ${tipY} L ${tipX} ${tipY - arrowHeadSize / 2} L ${tipX} ${tipY + arrowHeadSize / 2} Z`;
|
|
21878
|
-
return
|
|
21879
|
-
|
|
21880
|
-
|
|
21881
|
-
|
|
21882
|
-
|
|
21883
|
-
|
|
21884
|
-
|
|
21885
|
-
|
|
21886
|
-
|
|
21887
|
-
|
|
21888
|
-
|
|
21889
|
-
|
|
21890
|
-
|
|
21891
|
-
|
|
21892
|
-
|
|
21893
|
-
|
|
21894
|
-
|
|
21895
|
-
|
|
21896
|
-
|
|
21897
|
-
|
|
21898
|
-
|
|
21899
|
-
|
|
21900
|
-
|
|
21963
|
+
return (
|
|
21964
|
+
// 矢印は両端の帯が出てから描く。 帯が無い場所へ矢印だけが伸びると、
|
|
21965
|
+
// 指す先の無い線になる (cdl#521)
|
|
21966
|
+
drawing && \u4F38\u3073 < 1 ? null : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-role": "gantt-arrow", children: [
|
|
21967
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21968
|
+
"path",
|
|
21969
|
+
{
|
|
21970
|
+
d: path,
|
|
21971
|
+
fill: "none",
|
|
21972
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
21973
|
+
strokeWidth: 1.75,
|
|
21974
|
+
strokeLinejoin: "round",
|
|
21975
|
+
strokeLinecap: "round"
|
|
21976
|
+
}
|
|
21977
|
+
),
|
|
21978
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21979
|
+
"path",
|
|
21980
|
+
{
|
|
21981
|
+
d: arrowHeadPath,
|
|
21982
|
+
fill: "var(--cdl-text-mute, #8a8678)",
|
|
21983
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
21984
|
+
strokeWidth: 0.5,
|
|
21985
|
+
strokeLinejoin: "round"
|
|
21986
|
+
}
|
|
21987
|
+
)
|
|
21988
|
+
] }, `dep-${parent.id}-${t.id}`)
|
|
21989
|
+
);
|
|
21901
21990
|
})
|
|
21902
21991
|
] });
|
|
21903
21992
|
}
|
|
@@ -21953,7 +22042,9 @@ var MIND_BOX_GAP = 24;
|
|
|
21953
22042
|
function MindMapNode({
|
|
21954
22043
|
node,
|
|
21955
22044
|
active,
|
|
21956
|
-
stateValues = {}
|
|
22045
|
+
stateValues = {},
|
|
22046
|
+
drawing = false,
|
|
22047
|
+
progress = 1
|
|
21957
22048
|
}) {
|
|
21958
22049
|
const x0 = node.cx - node.w / 2;
|
|
21959
22050
|
const y0 = node.cy - node.h / 2;
|
|
@@ -21965,6 +22056,9 @@ function MindMapNode({
|
|
|
21965
22056
|
const canvasW = node.w - PAD * 2;
|
|
21966
22057
|
const canvasH = node.h - PAD * 2;
|
|
21967
22058
|
const layout2 = computeMindMapLayout(mindData, canvasCx, canvasCy, canvasW, canvasH);
|
|
22059
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
22060
|
+
const \u6700\u5927\u6DF1\u3055 = layout2.nodes.reduce((m, n) => Math.max(m, n.depth), 0);
|
|
22061
|
+
const \u7BB1\u304C\u51FA\u308B = (\u6DF1\u3055) => !drawing || \u6BB5\u306E\u4F38\u3073(\u4F38\u3073, \u6DF1\u3055, \u6700\u5927\u6DF1\u3055) >= 1;
|
|
21968
22062
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
21969
22063
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
21970
22064
|
"rect",
|
|
@@ -21980,20 +22074,25 @@ function MindMapNode({
|
|
|
21980
22074
|
strokeWidth: active ? 3 : 1.25
|
|
21981
22075
|
}
|
|
21982
22076
|
),
|
|
21983
|
-
layout2.edges.map((e, i) =>
|
|
21984
|
-
|
|
21985
|
-
|
|
21986
|
-
"
|
|
21987
|
-
|
|
21988
|
-
|
|
21989
|
-
|
|
21990
|
-
|
|
21991
|
-
|
|
21992
|
-
|
|
21993
|
-
|
|
21994
|
-
|
|
21995
|
-
|
|
22077
|
+
layout2.edges.map((e, i) => {
|
|
22078
|
+
const \u679D\u306E\u4F38\u3073 = e.deferUntilComplete ? \u4F38\u3073 >= 1 ? 1 : 0 : \u6BB5\u306E\u4F38\u3073(\u4F38\u3073, e.depth, \u6700\u5927\u6DF1\u3055);
|
|
22079
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
22080
|
+
"path",
|
|
22081
|
+
{
|
|
22082
|
+
"data-cdl-role": "mind-edge",
|
|
22083
|
+
d: e.d,
|
|
22084
|
+
fill: "none",
|
|
22085
|
+
stroke: toneColor4(e.tone),
|
|
22086
|
+
strokeWidth: 2.5,
|
|
22087
|
+
strokeOpacity: 0.55,
|
|
22088
|
+
strokeLinecap: "round",
|
|
22089
|
+
...\u4F38\u3070\u3059dash(drawing, \u679D\u306E\u4F38\u3073)
|
|
22090
|
+
},
|
|
22091
|
+
`edge-${i}`
|
|
22092
|
+
);
|
|
22093
|
+
}),
|
|
21996
22094
|
layout2.nodes.map((n) => {
|
|
22095
|
+
if (!\u7BB1\u304C\u51FA\u308B(n.depth)) return null;
|
|
21997
22096
|
const \u884C = \u7BB1\u306B\u7A4D\u3080(
|
|
21998
22097
|
[
|
|
21999
22098
|
{ \u5F79\u5272: "title", text: n.title, fontSize: n.isRoot ? 15 : 13 },
|
|
@@ -22061,6 +22160,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
22061
22160
|
w: rootW,
|
|
22062
22161
|
h: rootH,
|
|
22063
22162
|
isRoot: true,
|
|
22163
|
+
// 中心は起点なので段数 0 (cdl#520)
|
|
22164
|
+
depth: 0,
|
|
22064
22165
|
...mindData.unresolved ? { unresolved: true } : {}
|
|
22065
22166
|
});
|
|
22066
22167
|
const childrenOf = /* @__PURE__ */ new Map();
|
|
@@ -22172,6 +22273,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
22172
22273
|
y,
|
|
22173
22274
|
w,
|
|
22174
22275
|
h,
|
|
22276
|
+
// 第 1 階層が段数 1 (`subDepth` は 0 始まり、 cdl#520)
|
|
22277
|
+
depth: subDepth + 1,
|
|
22175
22278
|
tone: myTone,
|
|
22176
22279
|
isRoot: false,
|
|
22177
22280
|
...node.unresolved ? { unresolved: true } : {}
|
|
@@ -22213,23 +22316,36 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
22213
22316
|
}
|
|
22214
22317
|
}
|
|
22215
22318
|
}
|
|
22319
|
+
const \u6BB5\u6570 = new Map(nodes.map((n) => [n.id, n.depth]));
|
|
22216
22320
|
for (const br of mindData.branches) {
|
|
22217
22321
|
const childPos = nodePos.get(br.id);
|
|
22218
22322
|
if (!childPos) continue;
|
|
22219
22323
|
const isLeft = nodeSide.get(br.id) === "left";
|
|
22220
22324
|
const childHalfW = nodeHalfW.get(br.id) ?? subBranchW / 2;
|
|
22221
22325
|
const tone = nodeTone.get(br.id);
|
|
22326
|
+
const childDepth = \u6BB5\u6570.get(br.id) ?? 1;
|
|
22327
|
+
const parentDepth = \u6BB5\u6570.get(br.parent) ?? 0;
|
|
22222
22328
|
if (br.parent === mindData.rootId) {
|
|
22223
22329
|
const startX = rootEdgeXFor(isLeft);
|
|
22224
22330
|
const endX = childPos.x + (isLeft ? childHalfW : -childHalfW);
|
|
22225
|
-
edges.push({
|
|
22331
|
+
edges.push({
|
|
22332
|
+
d: makeCurve(startX, cy, endX, childPos.y),
|
|
22333
|
+
tone,
|
|
22334
|
+
depth: childDepth,
|
|
22335
|
+
deferUntilComplete: false
|
|
22336
|
+
});
|
|
22226
22337
|
} else {
|
|
22227
22338
|
const parentPos = nodePos.get(br.parent);
|
|
22228
22339
|
if (!parentPos) continue;
|
|
22229
22340
|
const parentHalfW = nodeHalfW.get(br.parent) ?? branchW / 2;
|
|
22230
22341
|
const startX = parentPos.x + (isLeft ? -parentHalfW : parentHalfW);
|
|
22231
22342
|
const endX = childPos.x + (isLeft ? childHalfW : -childHalfW);
|
|
22232
|
-
edges.push({
|
|
22343
|
+
edges.push({
|
|
22344
|
+
d: makeCurve(startX, parentPos.y, endX, childPos.y),
|
|
22345
|
+
tone,
|
|
22346
|
+
depth: Math.max(parentDepth, childDepth),
|
|
22347
|
+
deferUntilComplete: parentDepth >= childDepth
|
|
22348
|
+
});
|
|
22233
22349
|
}
|
|
22234
22350
|
}
|
|
22235
22351
|
return { nodes, edges };
|
|
@@ -22249,7 +22365,9 @@ function toneColor4(tone, alpha = 1) {
|
|
|
22249
22365
|
function FunnelNode({
|
|
22250
22366
|
node,
|
|
22251
22367
|
active,
|
|
22252
|
-
stateValues = {}
|
|
22368
|
+
stateValues = {},
|
|
22369
|
+
drawing = false,
|
|
22370
|
+
progress = 1
|
|
22253
22371
|
}) {
|
|
22254
22372
|
const x0 = node.cx - node.w / 2;
|
|
22255
22373
|
const y0 = node.cy - node.h / 2;
|
|
@@ -22264,12 +22382,79 @@ function FunnelNode({
|
|
|
22264
22382
|
const stageCount = stages.length || 1;
|
|
22265
22383
|
const gap = 4;
|
|
22266
22384
|
const stageH = (canvasH - gap * (stageCount - 1)) / stageCount;
|
|
22385
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
22386
|
+
const \u5207\u308A\u629C\u304Did = `cdl-funnel-draw-${react.useId().replace(/[^A-Za-z0-9_-]/g, "")}`;
|
|
22387
|
+
const \u6BB5\u306E\u4E0B\u7AEF\u306E\u5272\u5408 = (idx) => {
|
|
22388
|
+
if (canvasH <= 0) return 0;
|
|
22389
|
+
return ((idx + 1) * stageH + idx * gap) / canvasH;
|
|
22390
|
+
};
|
|
22391
|
+
const \u6BB5\u304C\u51FA\u5207\u3063\u305F = (idx) => !drawing || \u4F38\u3073 >= \u6BB5\u306E\u4E0B\u7AEF\u306E\u5272\u5408(idx);
|
|
22267
22392
|
const widthAtStep = (step) => {
|
|
22268
22393
|
const topRatio = 1;
|
|
22269
22394
|
const bottomRatio = 0.35;
|
|
22270
22395
|
const t = step / stageCount;
|
|
22271
22396
|
return canvasW * (topRatio + (bottomRatio - topRatio) * t);
|
|
22272
22397
|
};
|
|
22398
|
+
const \u6BB5 = stages.map((s, idx) => {
|
|
22399
|
+
const prev = idx > 0 ? stages[idx - 1] : null;
|
|
22400
|
+
const dropRate = prev && prev.count > 0 ? (prev.count - s.count) / prev.count * 100 : 0;
|
|
22401
|
+
const y = PAD_TOP + idx * (stageH + gap);
|
|
22402
|
+
const topW = widthAtStep(idx);
|
|
22403
|
+
const bottomW = widthAtStep(idx + 1);
|
|
22404
|
+
const cx = PAD_LEFT + canvasW / 2;
|
|
22405
|
+
const topX = cx - topW / 2;
|
|
22406
|
+
const bottomX = cx - bottomW / 2;
|
|
22407
|
+
const points = `${topX},${y} ${topX + topW},${y} ${bottomX + bottomW},${y + stageH} ${bottomX},${y + stageH}`;
|
|
22408
|
+
const tone = toneByIndex(idx);
|
|
22409
|
+
const legendX = PAD_LEFT + canvasW + 24;
|
|
22410
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
22411
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22412
|
+
"polygon",
|
|
22413
|
+
{
|
|
22414
|
+
"data-cdl-role": "funnel-stage",
|
|
22415
|
+
"data-cdl-unresolved": s.unresolved ? "true" : void 0,
|
|
22416
|
+
points,
|
|
22417
|
+
fill: tone,
|
|
22418
|
+
fillOpacity: 0.9,
|
|
22419
|
+
stroke: tone,
|
|
22420
|
+
strokeWidth: 0
|
|
22421
|
+
}
|
|
22422
|
+
),
|
|
22423
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22424
|
+
"text",
|
|
22425
|
+
{
|
|
22426
|
+
x: cx,
|
|
22427
|
+
y: y + stageH / 2 + 5,
|
|
22428
|
+
fontSize: 14,
|
|
22429
|
+
fontWeight: 700,
|
|
22430
|
+
textAnchor: "middle",
|
|
22431
|
+
fill: "var(--cdl-node-fill, #ffffff)",
|
|
22432
|
+
children: s.title
|
|
22433
|
+
}
|
|
22434
|
+
),
|
|
22435
|
+
\u6BB5\u304C\u51FA\u5207\u3063\u305F(idx) && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22436
|
+
"text",
|
|
22437
|
+
{
|
|
22438
|
+
x: legendX,
|
|
22439
|
+
y: y + stageH / 2 - 2,
|
|
22440
|
+
fontSize: 13,
|
|
22441
|
+
fontWeight: 700,
|
|
22442
|
+
fill: "var(--cdl-text, #1a1f2a)",
|
|
22443
|
+
children: s.count.toLocaleString()
|
|
22444
|
+
}
|
|
22445
|
+
),
|
|
22446
|
+
\u6BB5\u304C\u51FA\u5207\u3063\u305F(idx) && prev && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22447
|
+
"text",
|
|
22448
|
+
{
|
|
22449
|
+
x: legendX,
|
|
22450
|
+
y: y + stageH / 2 + 14,
|
|
22451
|
+
fontSize: 11,
|
|
22452
|
+
fill: dropRate > 0 ? "var(--cdl-text-dim, #5a6270)" : "var(--cdl-text-mute, #8a8678)",
|
|
22453
|
+
children: dropRate > 0 ? `\u2193 ${dropRate.toFixed(1)}%` : "\xB10%"
|
|
22454
|
+
}
|
|
22455
|
+
)
|
|
22456
|
+
] }, `stage-${s.id}`);
|
|
22457
|
+
});
|
|
22273
22458
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
22274
22459
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22275
22460
|
"rect",
|
|
@@ -22285,66 +22470,8 @@ function FunnelNode({
|
|
|
22285
22470
|
strokeWidth: active ? 3 : 1.25
|
|
22286
22471
|
}
|
|
22287
22472
|
),
|
|
22288
|
-
|
|
22289
|
-
|
|
22290
|
-
const dropRate = prev && prev.count > 0 ? (prev.count - s.count) / prev.count * 100 : 0;
|
|
22291
|
-
const y = PAD_TOP + idx * (stageH + gap);
|
|
22292
|
-
const topW = widthAtStep(idx);
|
|
22293
|
-
const bottomW = widthAtStep(idx + 1);
|
|
22294
|
-
const cx = PAD_LEFT + canvasW / 2;
|
|
22295
|
-
const topX = cx - topW / 2;
|
|
22296
|
-
const bottomX = cx - bottomW / 2;
|
|
22297
|
-
const points = `${topX},${y} ${topX + topW},${y} ${bottomX + bottomW},${y + stageH} ${bottomX},${y + stageH}`;
|
|
22298
|
-
const tone = toneByIndex(idx);
|
|
22299
|
-
const legendX = PAD_LEFT + canvasW + 24;
|
|
22300
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
22301
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22302
|
-
"polygon",
|
|
22303
|
-
{
|
|
22304
|
-
"data-cdl-role": "funnel-stage",
|
|
22305
|
-
"data-cdl-unresolved": s.unresolved ? "true" : void 0,
|
|
22306
|
-
points,
|
|
22307
|
-
fill: tone,
|
|
22308
|
-
fillOpacity: 0.9,
|
|
22309
|
-
stroke: tone,
|
|
22310
|
-
strokeWidth: 0
|
|
22311
|
-
}
|
|
22312
|
-
),
|
|
22313
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22314
|
-
"text",
|
|
22315
|
-
{
|
|
22316
|
-
x: cx,
|
|
22317
|
-
y: y + stageH / 2 + 5,
|
|
22318
|
-
fontSize: 14,
|
|
22319
|
-
fontWeight: 700,
|
|
22320
|
-
textAnchor: "middle",
|
|
22321
|
-
fill: "var(--cdl-node-fill, #ffffff)",
|
|
22322
|
-
children: s.title
|
|
22323
|
-
}
|
|
22324
|
-
),
|
|
22325
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22326
|
-
"text",
|
|
22327
|
-
{
|
|
22328
|
-
x: legendX,
|
|
22329
|
-
y: y + stageH / 2 - 2,
|
|
22330
|
-
fontSize: 13,
|
|
22331
|
-
fontWeight: 700,
|
|
22332
|
-
fill: "var(--cdl-text, #1a1f2a)",
|
|
22333
|
-
children: s.count.toLocaleString()
|
|
22334
|
-
}
|
|
22335
|
-
),
|
|
22336
|
-
prev && /* @__PURE__ */ jsxRuntime.jsx(
|
|
22337
|
-
"text",
|
|
22338
|
-
{
|
|
22339
|
-
x: legendX,
|
|
22340
|
-
y: y + stageH / 2 + 14,
|
|
22341
|
-
fontSize: 11,
|
|
22342
|
-
fill: dropRate > 0 ? "var(--cdl-text-dim, #5a6270)" : "var(--cdl-text-mute, #8a8678)",
|
|
22343
|
-
children: dropRate > 0 ? `\u2193 ${dropRate.toFixed(1)}%` : "\xB10%"
|
|
22344
|
-
}
|
|
22345
|
-
)
|
|
22346
|
-
] }, `stage-${s.id}`);
|
|
22347
|
-
})
|
|
22473
|
+
drawing && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: \u5207\u308A\u629C\u304Did, children: /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: node.w, height: PAD_TOP + canvasH * \u4F38\u3073 }) }) }),
|
|
22474
|
+
drawing ? /* @__PURE__ */ jsxRuntime.jsx("g", { clipPath: `url(#${\u5207\u308A\u629C\u304Did})`, children: \u6BB5 }) : \u6BB5
|
|
22348
22475
|
] });
|
|
22349
22476
|
}
|
|
22350
22477
|
var TONE_ORDER = [
|
|
@@ -22530,7 +22657,9 @@ function \u7BB1\u306E\u6587\u5B57({
|
|
|
22530
22657
|
function TreeNode({
|
|
22531
22658
|
node,
|
|
22532
22659
|
active,
|
|
22533
|
-
stateValues = {}
|
|
22660
|
+
stateValues = {},
|
|
22661
|
+
drawing = false,
|
|
22662
|
+
progress = 1
|
|
22534
22663
|
}) {
|
|
22535
22664
|
const x0 = node.cx - node.w / 2;
|
|
22536
22665
|
const y0 = node.cy - node.h / 2;
|
|
@@ -22543,6 +22672,9 @@ function TreeNode({
|
|
|
22543
22672
|
const canvasW = node.w - PAD_LEFT - PAD_RIGHT;
|
|
22544
22673
|
const canvasH = node.h - PAD_TOP - PAD_BOTTOM;
|
|
22545
22674
|
const layout2 = computeTreeLayout(treeNodes, canvasW, canvasH);
|
|
22675
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
22676
|
+
const \u6700\u5927\u6DF1\u3055 = layout2.nodes.reduce((m, n) => Math.max(m, n.depth), 0);
|
|
22677
|
+
const \u7BB1\u304C\u51FA\u308B = (\u6DF1\u3055) => !drawing || \u6BB5\u306E\u4F38\u3073(\u4F38\u3073, \u6DF1\u3055, \u6700\u5927\u6DF1\u3055) >= 1;
|
|
22546
22678
|
const depthColors = [TONE.accent, TONE.teal, TONE.success, TONE.warning, TONE.info];
|
|
22547
22679
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
22548
22680
|
/* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "0%", y2: "100%", children: [
|
|
@@ -22570,6 +22702,7 @@ function TreeNode({
|
|
|
22570
22702
|
const y2 = PAD_TOP + e.y2;
|
|
22571
22703
|
const midY = (y1 + y2) / 2;
|
|
22572
22704
|
const path = `M ${x1} ${y1} L ${x1} ${midY} L ${x2} ${midY} L ${x2} ${y2}`;
|
|
22705
|
+
const \u679D\u306E\u4F38\u3073 = e.deferUntilComplete ? \u4F38\u3073 >= 1 ? 1 : 0 : \u6BB5\u306E\u4F38\u3073(\u4F38\u3073, e.depth, \u6700\u5927\u6DF1\u3055);
|
|
22573
22706
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
22574
22707
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22575
22708
|
"path",
|
|
@@ -22580,13 +22713,15 @@ function TreeNode({
|
|
|
22580
22713
|
stroke: TONE.accent,
|
|
22581
22714
|
strokeOpacity: 0.55,
|
|
22582
22715
|
strokeWidth: 1.5,
|
|
22583
|
-
strokeLinejoin: "round"
|
|
22716
|
+
strokeLinejoin: "round",
|
|
22717
|
+
...\u4F38\u3070\u3059dash(drawing, \u679D\u306E\u4F38\u3073)
|
|
22584
22718
|
}
|
|
22585
22719
|
),
|
|
22586
|
-
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x1, cy: midY, r: 2.5, fill: TONE.accent, fillOpacity: 0.75 })
|
|
22720
|
+
(!drawing || \u679D\u306E\u4F38\u3073 >= 1) && /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x1, cy: midY, r: 2.5, fill: TONE.accent, fillOpacity: 0.75 })
|
|
22587
22721
|
] }, `edge-${i}`);
|
|
22588
22722
|
}),
|
|
22589
22723
|
layout2.nodes.map((n) => {
|
|
22724
|
+
if (!\u7BB1\u304C\u51FA\u308B(n.depth)) return null;
|
|
22590
22725
|
const accent = depthColors[Math.min(n.depth, depthColors.length - 1)] ?? depthColors[0];
|
|
22591
22726
|
const isRoot = n.depth === 0;
|
|
22592
22727
|
const \u884C = \u7BB1\u306B\u7A4D\u3080(
|
|
@@ -22767,6 +22902,7 @@ function computeTreeLayout(treeNodes, canvasW, canvasH) {
|
|
|
22767
22902
|
}
|
|
22768
22903
|
}
|
|
22769
22904
|
const hById = new Map(nodes.map((n) => [n.id, n.h]));
|
|
22905
|
+
const \u6BB5\u6570 = new Map(nodes.map((n) => [n.id, n.depth]));
|
|
22770
22906
|
const edges = [];
|
|
22771
22907
|
for (const n of treeNodes) {
|
|
22772
22908
|
if (!n.parent) continue;
|
|
@@ -22775,14 +22911,25 @@ function computeTreeLayout(treeNodes, canvasW, canvasH) {
|
|
|
22775
22911
|
if (!parent || !child) continue;
|
|
22776
22912
|
const parentH = hById.get(n.parent) ?? nodeH;
|
|
22777
22913
|
const childH = hById.get(n.id) ?? nodeH;
|
|
22778
|
-
|
|
22914
|
+
const parentDepth = \u6BB5\u6570.get(n.parent) ?? 0;
|
|
22915
|
+
const childDepth = \u6BB5\u6570.get(n.id) ?? 1;
|
|
22916
|
+
edges.push({
|
|
22917
|
+
x1: parent.x,
|
|
22918
|
+
y1: parent.y + parentH / 2,
|
|
22919
|
+
x2: child.x,
|
|
22920
|
+
y2: child.y - childH / 2,
|
|
22921
|
+
depth: Math.max(parentDepth, childDepth),
|
|
22922
|
+
deferUntilComplete: parentDepth >= childDepth
|
|
22923
|
+
});
|
|
22779
22924
|
}
|
|
22780
22925
|
return { nodes, edges };
|
|
22781
22926
|
}
|
|
22782
22927
|
function UserJourneyNode({
|
|
22783
22928
|
node,
|
|
22784
22929
|
active,
|
|
22785
|
-
stateValues = {}
|
|
22930
|
+
stateValues = {},
|
|
22931
|
+
drawing = false,
|
|
22932
|
+
progress = 1
|
|
22786
22933
|
}) {
|
|
22787
22934
|
const x0 = node.cx - node.w / 2;
|
|
22788
22935
|
const y0 = node.cy - node.h / 2;
|
|
@@ -22820,6 +22967,12 @@ function UserJourneyNode({
|
|
|
22820
22967
|
const xAt = (idx) => PAD_LEFT + (steps.length <= 1 ? canvasW / 2 : colW / 2 + colW * idx);
|
|
22821
22968
|
const yAt = (emotion) => PAD_TOP + rowH / 2 + (4 - emotionScore[emotion]) * rowH;
|
|
22822
22969
|
const pts = steps.map((s, i) => ({ x: xAt(i), y: yAt(s.emotion) }));
|
|
22970
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
22971
|
+
const \u6BB5\u307E\u3067\u306E\u5272\u5408 = \u30D9\u30B8\u30A8\u306E\u7D2F\u7A4D\u5272\u5408(pts, (\u524D, \u5F8C) => {
|
|
22972
|
+
const midX = (\u524D.x + \u5F8C.x) / 2;
|
|
22973
|
+
return [{ x: midX, y: \u524D.y }, { x: midX, y: \u5F8C.y }];
|
|
22974
|
+
});
|
|
22975
|
+
const \u7DDA\u306E\u5148\u304C\u5C4A\u3044\u305F = (idx) => !drawing || \u4F38\u3073 >= (\u6BB5\u307E\u3067\u306E\u5272\u5408[idx] ?? 0);
|
|
22823
22976
|
const smoothPath = pts.length > 1 ? pts.reduce((acc, p, i) => {
|
|
22824
22977
|
if (i === 0) return `M ${p.x} ${p.y}`;
|
|
22825
22978
|
const prev = pts[i - 1];
|
|
@@ -22900,7 +23053,8 @@ function UserJourneyNode({
|
|
|
22900
23053
|
stroke: "var(--cdl-tone-accent, #2d6a8f)",
|
|
22901
23054
|
strokeOpacity: 0.18,
|
|
22902
23055
|
strokeWidth: 10,
|
|
22903
|
-
strokeLinecap: "round"
|
|
23056
|
+
strokeLinecap: "round",
|
|
23057
|
+
...\u4F38\u3070\u3059dash(drawing, \u4F38\u3073)
|
|
22904
23058
|
}
|
|
22905
23059
|
),
|
|
22906
23060
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -22912,11 +23066,12 @@ function UserJourneyNode({
|
|
|
22912
23066
|
stroke: "var(--cdl-tone-accent, #2d6a8f)",
|
|
22913
23067
|
strokeWidth: 2.75,
|
|
22914
23068
|
strokeLinejoin: "round",
|
|
22915
|
-
strokeLinecap: "round"
|
|
23069
|
+
strokeLinecap: "round",
|
|
23070
|
+
...\u4F38\u3070\u3059dash(drawing, \u4F38\u3073)
|
|
22916
23071
|
}
|
|
22917
23072
|
)
|
|
22918
23073
|
] }),
|
|
22919
|
-
steps.map((s, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
23074
|
+
steps.map((s, idx) => !\u7DDA\u306E\u5148\u304C\u5C4A\u3044\u305F(idx) ? null : /* @__PURE__ */ jsxRuntime.jsxs(
|
|
22920
23075
|
"g",
|
|
22921
23076
|
{
|
|
22922
23077
|
"data-cdl-role": "journey-step",
|
|
@@ -26804,21 +26959,84 @@ function CdlNodeView({
|
|
|
26804
26959
|
}
|
|
26805
26960
|
);
|
|
26806
26961
|
case "chart-pie":
|
|
26807
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26962
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26963
|
+
ChartPieNode,
|
|
26964
|
+
{
|
|
26965
|
+
node: resolvedNode,
|
|
26966
|
+
active,
|
|
26967
|
+
stateValues,
|
|
26968
|
+
drawing,
|
|
26969
|
+
progress
|
|
26970
|
+
}
|
|
26971
|
+
);
|
|
26808
26972
|
case "chart-bar":
|
|
26809
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26973
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26974
|
+
ChartBarNode,
|
|
26975
|
+
{
|
|
26976
|
+
node: resolvedNode,
|
|
26977
|
+
active,
|
|
26978
|
+
stateValues,
|
|
26979
|
+
drawing,
|
|
26980
|
+
progress
|
|
26981
|
+
}
|
|
26982
|
+
);
|
|
26810
26983
|
case "gantt-timeline":
|
|
26811
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26984
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26985
|
+
GanttNode,
|
|
26986
|
+
{
|
|
26987
|
+
node: resolvedNode,
|
|
26988
|
+
active,
|
|
26989
|
+
stateValues,
|
|
26990
|
+
drawing,
|
|
26991
|
+
progress
|
|
26992
|
+
}
|
|
26993
|
+
);
|
|
26812
26994
|
case "mind-map":
|
|
26813
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26995
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
26996
|
+
MindMapNode,
|
|
26997
|
+
{
|
|
26998
|
+
node: resolvedNode,
|
|
26999
|
+
active,
|
|
27000
|
+
stateValues,
|
|
27001
|
+
drawing,
|
|
27002
|
+
progress
|
|
27003
|
+
}
|
|
27004
|
+
);
|
|
26814
27005
|
case "funnel-stages":
|
|
26815
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27006
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27007
|
+
FunnelNode,
|
|
27008
|
+
{
|
|
27009
|
+
node: resolvedNode,
|
|
27010
|
+
active,
|
|
27011
|
+
stateValues,
|
|
27012
|
+
drawing,
|
|
27013
|
+
progress
|
|
27014
|
+
}
|
|
27015
|
+
);
|
|
26816
27016
|
case "quadrant-matrix":
|
|
26817
27017
|
return /* @__PURE__ */ jsxRuntime.jsx(QuadrantNode, { node: resolvedNode, active, stateValues });
|
|
26818
27018
|
case "tree-hierarchy":
|
|
26819
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27019
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27020
|
+
TreeNode,
|
|
27021
|
+
{
|
|
27022
|
+
node: resolvedNode,
|
|
27023
|
+
active,
|
|
27024
|
+
stateValues,
|
|
27025
|
+
drawing,
|
|
27026
|
+
progress
|
|
27027
|
+
}
|
|
27028
|
+
);
|
|
26820
27029
|
case "journey-map":
|
|
26821
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27030
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
27031
|
+
UserJourneyNode,
|
|
27032
|
+
{
|
|
27033
|
+
node: resolvedNode,
|
|
27034
|
+
active,
|
|
27035
|
+
stateValues,
|
|
27036
|
+
drawing,
|
|
27037
|
+
progress
|
|
27038
|
+
}
|
|
27039
|
+
);
|
|
26822
27040
|
case "shape-file":
|
|
26823
27041
|
return /* @__PURE__ */ jsxRuntime.jsx(ShapeFileNode, { node: resolvedNode, active });
|
|
26824
27042
|
case "shape-folder":
|