@cardenelabs/cdl 0.107.0 → 0.109.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
@@ -14699,6 +14699,14 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
14699
14699
  const \u5B9F\u5E45 = textWidth(text, size, letterSpacing);
14700
14700
  return \u5B9F\u5E45 > \u5E45 ? \u5E45 / \u5B9F\u5E45 : 1;
14701
14701
  }
14702
+ function \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055) {
14703
+ return \u5927\u304D\u3055 > MIN_TITLE_FONT_SIZE ? MIN_TITLE_FONT_SIZE / \u5927\u304D\u3055 : 0;
14704
+ }
14705
+ function \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u984C, \u5927\u304D\u3055, \u5B57\u9593, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
14706
+ const \u4E0B\u9650 = \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055);
14707
+ if (!(\u4E0B\u9650 > 0) || !(\u5E45\u4E0A\u9650 > 0)) return 0;
14708
+ return \u5E45\u3067\u5207\u308B(\u984C, \u5927\u304D\u3055 * \u4E0B\u9650, \u5E45\u4E0A\u9650, (u, f) => \u6E2C\u308B(u, f, \u5B57\u9593 * \u4E0B\u9650)) === "" ? 0 : \u4E0B\u9650;
14709
+ }
14702
14710
  var TITLE_MAX = 18;
14703
14711
  var TITLE_MIN = 9;
14704
14712
  var TITLE_RATIO = 0.17;
@@ -14858,16 +14866,19 @@ function bodyBand(node, opt) {
14858
14866
  const h = Math.max(0, \u7BB1h - \u7E26\u4F59\u767D * ky);
14859
14867
  return { x, y, w, h, cx: x + w / 2, cy: y + h / 2, \u53F3: x + w, \u5E95: y + h };
14860
14868
  }
14861
- function fitLabel(band, block, pos) {
14869
+ function fitLabel(band, block, pos, \u6A2A\u306E\u4E0B\u9650 = 0) {
14862
14870
  const \u7E26 = block.\u4E0A + block.\u4E0B;
14863
14871
  const \u6A2A = Math.max(0, block.\u5E45);
14864
14872
  if (!(\u7E26 > 0)) return { k: 1, x: pos.x, y: pos.y };
14865
14873
  if (!(band.h > 0) || !(band.w > 0)) return { k: 0, x: band.x + band.w / 2, y: band.y };
14866
- const k = Math.min(1, band.h / \u7E26, \u6A2A > 0 ? band.w / \u6A2A : 1);
14874
+ const \u6A2A\u3067 = \u6A2A > 0 ? Math.max(band.w / \u6A2A, \u6A2A\u306E\u4E0B\u9650) : 1;
14875
+ const k = Math.min(1, band.h / \u7E26, \u6A2A\u3067);
14867
14876
  const \u534A = \u6A2A * k / 2;
14868
14877
  return {
14869
14878
  k,
14870
- x: Math.max(band.x + \u534A, Math.min(pos.x, band.x + band.w - \u534A)),
14879
+ // 下限で止めた塊は帯より広い。 その時は帯の中央に置いて左右へ均等に出す =
14880
+ // 寄せの式をそのまま当てると片側だけに出る (`compact-title.ts` と同じ判断)
14881
+ x: \u534A * 2 > band.w ? band.x + band.w / 2 : Math.max(band.x + \u534A, Math.min(pos.x, band.x + band.w - \u534A)),
14871
14882
  y: Math.max(band.y + block.\u4E0A * k, Math.min(pos.y, band.y + band.h - block.\u4E0B * k))
14872
14883
  };
14873
14884
  }
@@ -23463,12 +23474,13 @@ function CdlHeader({
23463
23474
  stateValues,
23464
23475
  states,
23465
23476
  onJumpPhase,
23466
- headingLevel = 3
23477
+ headingLevel = 3,
23478
+ showTopic = true
23467
23479
  }) {
23468
23480
  const HeadingTag = `h${headingLevel}`;
23469
23481
  return /* @__PURE__ */ jsxs("div", { className: "border-b border-[var(--cdl-divider,#d4d4d8)]/35 px-7 py-6", children: [
23470
23482
  /* @__PURE__ */ jsxs("div", { className: "mb-5 flex items-center gap-3", children: [
23471
- /* @__PURE__ */ jsx("div", { className: "text-[10px] font-bold uppercase tracking-[0.2em]", style: { color: "var(--cdl-text-accent, #2d6a8f)" }, children: topic }),
23483
+ showTopic && /* @__PURE__ */ jsx("div", { className: "text-[10px] font-bold uppercase tracking-[0.2em]", style: { color: "var(--cdl-text-accent, #2d6a8f)" }, children: topic }),
23472
23484
  /* @__PURE__ */ jsxs("div", { className: "ml-auto flex items-center gap-1.5", children: [
23473
23485
  phases.map((p, idx) => {
23474
23486
  const active = idx === phaseIdx;
@@ -28707,13 +28719,15 @@ function labelBlock(node, pos, size, band) {
28707
28719
  node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
28708
28720
  node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
28709
28721
  );
28710
- const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos);
28722
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth);
28723
+ const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos, \u4E0B\u9650);
28711
28724
  return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
28712
28725
  }
28713
28726
  function commonLabel(node, pos, size, band) {
28714
28727
  const \u584A = labelBlock(node, pos, size, band);
28715
28728
  const k = \u584A.k;
28716
28729
  const x = \u584A.x;
28730
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E45\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, band.w, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
28717
28731
  return /* @__PURE__ */ jsxs(Fragment, { children: [
28718
28732
  node.eyebrow && /* @__PURE__ */ jsx(
28719
28733
  "text",
@@ -28725,7 +28739,7 @@ function commonLabel(node, pos, size, band) {
28725
28739
  letterSpacing: EYEBROW_TRACKING * k,
28726
28740
  textAnchor: "middle",
28727
28741
  fill: "var(--cdl-tone-accent, #2d6a8f)",
28728
- children: node.eyebrow
28742
+ children: \u5207\u308B(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING)
28729
28743
  }
28730
28744
  ),
28731
28745
  /* @__PURE__ */ jsx(
@@ -28738,7 +28752,7 @@ function commonLabel(node, pos, size, band) {
28738
28752
  fontWeight: 700,
28739
28753
  textAnchor: "middle",
28740
28754
  fill: "var(--cdl-text, #1a1f2a)",
28741
- children: node.title
28755
+ children: \u5207\u308B(node.title ?? "", size)
28742
28756
  }
28743
28757
  ),
28744
28758
  node.subtitle && /* @__PURE__ */ jsx(
@@ -28749,7 +28763,7 @@ function commonLabel(node, pos, size, band) {
28749
28763
  fontSize: SUB_SIZE * k,
28750
28764
  textAnchor: "middle",
28751
28765
  fill: "var(--cdl-text-dim, #5a6270)",
28752
- children: node.subtitle
28766
+ children: \u5207\u308B(node.subtitle, SUB_SIZE)
28753
28767
  }
28754
28768
  )
28755
28769
  ] });
@@ -29084,7 +29098,9 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29084
29098
  node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
29085
29099
  node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
29086
29100
  );
29087
- const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, \u5E45\u4E0A\u9650 / \u5E45) : 1;
29101
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth);
29102
+ const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, Math.max(\u5E45\u4E0A\u9650 / \u5E45, \u4E0B\u9650)) : 1;
29103
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E45\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, \u5E45\u4E0A\u9650, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
29088
29104
  return /* @__PURE__ */ jsxs(Fragment, { children: [
29089
29105
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx(
29090
29106
  "text",
@@ -29096,7 +29112,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29096
29112
  letterSpacing: EYEBROW_TRACKING * k,
29097
29113
  textAnchor: "middle",
29098
29114
  fill: "var(--cdl-tone-accent, #2d6a8f)",
29099
- children: node.eyebrow
29115
+ children: \u5207\u308B(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING)
29100
29116
  }
29101
29117
  ),
29102
29118
  /* @__PURE__ */ jsx(
@@ -29109,7 +29125,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29109
29125
  fontWeight: 700,
29110
29126
  textAnchor: "middle",
29111
29127
  fill: "var(--cdl-text, #1a1f2a)",
29112
- children: node.title
29128
+ children: \u5207\u308B(node.title ?? "", plan.\u540D\u524D.size)
29113
29129
  }
29114
29130
  ),
29115
29131
  node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx(
@@ -29120,7 +29136,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29120
29136
  fontSize: plan.\u8AAC\u660E.size * k,
29121
29137
  textAnchor: "middle",
29122
29138
  fill: "var(--cdl-text-dim, #5a6270)",
29123
- children: node.subtitle
29139
+ children: \u5207\u308B(node.subtitle, plan.\u8AAC\u660E.size)
29124
29140
  }
29125
29141
  )
29126
29142
  ] });
@@ -30043,17 +30059,19 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxs(Fragment, { chil
30043
30059
  var LABEL_EYEBROW_SPACING = 2;
30044
30060
  function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
30045
30061
  const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
30046
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
30047
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
30062
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, textWidth))) : 1;
30063
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
30064
+ const spacing = \u5B57\u9593 * \u500D\u7387;
30065
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
30048
30066
  }
30049
30067
  function bottomLabel(node, cx, plan) {
30050
30068
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
30051
30069
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
30052
30070
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
30053
30071
  return /* @__PURE__ */ jsxs(Fragment, { children: [
30054
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
30055
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
30056
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
30072
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
30073
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
30074
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
30057
30075
  ] });
30058
30076
  }
30059
30077
  var RACK_SLOT_TOP = 20;
@@ -30848,13 +30866,22 @@ function blockchainNodeExtent(strokeWidth) {
30848
30866
  return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
30849
30867
  }
30850
30868
  function bottomLabel2(node, cx, plan) {
30851
- const \u80A9\u66F8\u500D\u7387 = node.eyebrow && plan.\u80A9\u66F8 ? \u5E45\u306E\u500D\u7387(node.eyebrow, plan.\u80A9\u66F8.size, 2, node.w) : 1;
30852
- const \u540D\u524D\u500D\u7387 = \u5E45\u306E\u500D\u7387(node.title, plan.\u540D\u524D.size, 0, node.w);
30853
- const \u8AAC\u660E\u500D\u7387 = node.subtitle && plan.\u8AAC\u660E ? \u5E45\u306E\u500D\u7387(node.subtitle, plan.\u8AAC\u660E.size, 0, node.w) : 1;
30869
+ const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593) => {
30870
+ const \u6E2C\u308B = (u, f, ls) => \u5B57\u306E\u5E45(u, f) + ls * [...u].length;
30871
+ const \u500D\u7387 = Math.max(\u5E45\u306E\u500D\u7387(t, \u5927\u304D\u3055, \u5B57\u9593, node.w), \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(t, \u5927\u304D\u3055, \u5B57\u9593, node.w, \u6E2C\u308B));
30872
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
30873
+ return { \u500D\u7387, text: \u5E45\u3067\u5207\u308B(t, size, node.w, (u, f) => \u5B57\u306E\u5E45(u, f) + \u5B57\u9593 * \u500D\u7387 * [...u].length) };
30874
+ };
30875
+ const \u80A9 = node.eyebrow && plan.\u80A9\u66F8 ? \u53CE\u3081\u308B(node.eyebrow, plan.\u80A9\u66F8.size, 2) : { \u500D\u7387: 1, text: node.eyebrow ?? "" };
30876
+ const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0);
30877
+ const \u8AAC = node.subtitle && plan.\u8AAC\u660E ? \u53CE\u3081\u308B(node.subtitle, plan.\u8AAC\u660E.size, 0) : { \u500D\u7387: 1, text: node.subtitle ?? "" };
30878
+ const \u80A9\u66F8\u500D\u7387 = \u80A9.\u500D\u7387;
30879
+ const \u540D\u524D\u500D\u7387 = \u540D.\u500D\u7387;
30880
+ const \u8AAC\u660E\u500D\u7387 = \u8AAC.\u500D\u7387;
30854
30881
  return /* @__PURE__ */ jsxs(Fragment, { children: [
30855
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: plan.\u80A9\u66F8.size * \u80A9\u66F8\u500D\u7387, fontWeight: 700, letterSpacing: 2 * \u80A9\u66F8\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
30856
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: plan.\u540D\u524D.size * \u540D\u524D\u500D\u7387, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
30857
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: plan.\u8AAC\u660E.size * \u8AAC\u660E\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
30882
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: plan.\u80A9\u66F8.size * \u80A9\u66F8\u500D\u7387, fontWeight: 700, letterSpacing: 2 * \u80A9\u66F8\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
30883
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: plan.\u540D\u524D.size * \u540D\u524D\u500D\u7387, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
30884
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: plan.\u8AAC\u660E.size * \u8AAC\u660E\u500D\u7387, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
30858
30885
  ] });
30859
30886
  }
30860
30887
  function EthereumDiamond({ cx, cy, h, colors }) {
@@ -31463,17 +31490,19 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31463
31490
  }
31464
31491
  function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31465
31492
  const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31466
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
31467
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
31493
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E45))) : 1;
31494
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
31495
+ const spacing = \u5B57\u9593 * \u500D\u7387;
31496
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
31468
31497
  }
31469
31498
  function bottomLabel3(node, cx, plan) {
31470
31499
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
31471
31500
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31472
31501
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31473
31502
  return /* @__PURE__ */ jsxs(Fragment, { children: [
31474
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
31475
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
31476
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
31503
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
31504
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
31505
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
31477
31506
  ] });
31478
31507
  }
31479
31508
  var BANK_PEDIMENT_H = 44;
@@ -31946,17 +31975,19 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31946
31975
  }
31947
31976
  function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31948
31977
  const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31949
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
31950
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
31978
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E452))) : 1;
31979
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
31980
+ const spacing = \u5B57\u9593 * \u500D\u7387;
31981
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
31951
31982
  }
31952
31983
  function bottomLabel4(node, cx, plan) {
31953
31984
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
31954
31985
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31955
31986
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31956
31987
  return /* @__PURE__ */ jsxs(Fragment, { children: [
31957
- node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: node.eyebrow }),
31958
- /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: node.title }),
31959
- node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: node.subtitle })
31988
+ node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u80A9\u66F8.y, fontSize: \u80A9.size, fontWeight: 700, letterSpacing: \u80A9.spacing, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u80A9.text }),
31989
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-label", x: cx, y: plan.\u540D\u524D.y, fontSize: \u540D.size, fontWeight: 700, textAnchor: "middle", fill: "var(--cdl-text, #1a1f2a)", children: \u540D.text }),
31990
+ node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx("text", { x: cx, y: plan.\u8AAC\u660E.y, fontSize: \u8AAC.size, textAnchor: "middle", fill: "var(--cdl-text-dim, #5a6270)", children: \u8AAC.text })
31960
31991
  ] });
31961
31992
  }
31962
31993
  var DROP_SHADOW_D = 4;
@@ -33555,6 +33586,11 @@ function CdlDiagramView({ diagram: diagram2, laid: laidProp, hideHeader = false,
33555
33586
  return mergeStateValues(baseStateValues, interactive.stateOverrides);
33556
33587
  }, [isInteractive, baseStateValues, interactive.stateOverrides]);
33557
33588
  const \u5024\u306E\u540D\u524D = useMemo(() => \u5024\u306E\u540D\u524D\u306E\u8868\u3092\u4F5C\u308B(diagram2.inputs), [diagram2.inputs]);
33589
+ const \u56F3\u304C\u8A71\u984C\u3092\u63CF\u304F = useMemo(() => {
33590
+ const \u8A71\u984C = laid.topic.trim();
33591
+ if (\u8A71\u984C === "") return false;
33592
+ return laid.nodes.some((n) => drawsFigureTitle(n.kind) && (n.title ?? "").trim() === \u8A71\u984C);
33593
+ }, [laid.nodes, laid.topic]);
33558
33594
  return /* @__PURE__ */ jsxs(
33559
33595
  "div",
33560
33596
  {
@@ -33579,7 +33615,8 @@ function CdlDiagramView({ diagram: diagram2, laid: laidProp, hideHeader = false,
33579
33615
  timeline.goto(idx);
33580
33616
  timeline.play();
33581
33617
  },
33582
- headingLevel
33618
+ headingLevel,
33619
+ showTopic: !\u56F3\u304C\u8A71\u984C\u3092\u63CF\u304F
33583
33620
  }
33584
33621
  ),
33585
33622
  isInteractive && interactive.panel,