@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/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 !== "chart-line") {
15983
- warnings.push(`phase "${p.id}" \u306E draw "${id}" \u306F kind "${kind}" \u3067\u3001 \u5DE6\u304B\u3089\u63CF\u304F\u52D5\u304D\u3092\u6301\u305F\u306A\u3044 (\u5BFE\u8C61\u306F chart-line)`);
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 ? Math.min(1, Math.max(0, Number.isFinite(progress) ? progress : 1)) : 1;
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
- ...drawing ? { pathLength: 1, strokeDasharray: 1, strokeDashoffset: 1 - \u4F38\u3073 } : {}
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
- slices.map((s, idx) => /* @__PURE__ */ jsx(
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: by - 6,
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("g", { children: [
21830
- /* @__PURE__ */ jsx(
21831
- "rect",
21832
- {
21833
- "data-cdl-role": "gantt-bar",
21834
- "data-cdl-unresolved": t.unresolved ? "true" : void 0,
21835
- "data-cdl-clipped": "clipped" in t && t.clipped ? "true" : void 0,
21836
- x: bx,
21837
- y: by,
21838
- width: bw,
21839
- height: rowH,
21840
- rx: 4,
21841
- fill: toneColor3(t.tone),
21842
- fillOpacity: 0.9
21843
- }
21844
- ),
21845
- t.owner && rowH >= 22 && /* @__PURE__ */ jsx(
21846
- "text",
21847
- {
21848
- x: bx + 8,
21849
- y: by + rowH / 2 + 4,
21850
- fontSize: 11,
21851
- fill: "var(--cdl-node-fill, #ffffff)",
21852
- fontWeight: 600,
21853
- children: t.owner
21854
- }
21855
- )
21856
- ] }, `bar-${t.id}`);
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 /* @__PURE__ */ jsxs("g", { "data-cdl-role": "gantt-arrow", children: [
21877
- /* @__PURE__ */ jsx(
21878
- "path",
21879
- {
21880
- d: path,
21881
- fill: "none",
21882
- stroke: "var(--cdl-text-mute, #8a8678)",
21883
- strokeWidth: 1.75,
21884
- strokeLinejoin: "round",
21885
- strokeLinecap: "round"
21886
- }
21887
- ),
21888
- /* @__PURE__ */ jsx(
21889
- "path",
21890
- {
21891
- d: arrowHeadPath,
21892
- fill: "var(--cdl-text-mute, #8a8678)",
21893
- stroke: "var(--cdl-text-mute, #8a8678)",
21894
- strokeWidth: 0.5,
21895
- strokeLinejoin: "round"
21896
- }
21897
- )
21898
- ] }, `dep-${parent.id}-${t.id}`);
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) => /* @__PURE__ */ jsx(
21982
- "path",
21983
- {
21984
- "data-cdl-role": "mind-edge",
21985
- d: e.d,
21986
- fill: "none",
21987
- stroke: toneColor4(e.tone),
21988
- strokeWidth: 2.5,
21989
- strokeOpacity: 0.55,
21990
- strokeLinecap: "round"
21991
- },
21992
- `edge-${i}`
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({ d: makeCurve(startX, cy, endX, childPos.y), tone });
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({ d: makeCurve(startX, parentPos.y, endX, childPos.y), tone });
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
- stages.map((s, idx) => {
22287
- const prev = idx > 0 ? stages[idx - 1] : null;
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
- edges.push({ x1: parent.x, y1: parent.y + parentH / 2, x2: child.x, y2: child.y - childH / 2 });
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(ChartPieNode, { node: resolvedNode, active, stateValues });
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(ChartBarNode, { node: resolvedNode, active, stateValues });
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(GanttNode, { node: resolvedNode, active, stateValues });
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(MindMapNode, { node: resolvedNode, active, stateValues });
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(FunnelNode, { node: resolvedNode, active, stateValues });
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(TreeNode, { node: resolvedNode, active, stateValues });
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(UserJourneyNode, { node: resolvedNode, active, stateValues });
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":