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