@cardenelabs/cdl 0.109.0 → 0.111.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 CHANGED
@@ -5,6 +5,77 @@ CDL (Chainome Diagram Language) の主要変更履歴。
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.111.0] - 2026-09-30
9
+
10
+ ### Fixed
11
+
12
+ - **収まっている行を、測り方の食い違いで切っていた** (#959)
13
+
14
+ `shape-blockchain.tsx` の名前の塊は、縮める倍率を `幅の倍率` (中で `textWidth` を使う) で
15
+ 出し、切る時は `絵の中の字の幅` で測っていた。 後者は等幅の字送りと字形の大きい方を採るので
16
+ 前者以上の値になる。 倍率が「収まる」 と言った行を、切る側が「はみ出す」 と判定していた。
17
+
18
+ 幅 140 の箱に 3 行 (肩書 / 題 / 説明) を渡すと、9 種で説明の行が切れる。
19
+ `shape-smart-contract` / `shape-rpc-node` / `shape-wallet` / `shape-nft` / `shape-token` /
20
+ `shape-blockchain-node` / `shape-bitcoin-chain` / `shape-ethereum-chain` / `shape-blockchain`。
21
+
22
+ 1 つの行の幅を、縮める時と切る時で同じ測り方で見るようにした。
23
+
24
+ ### Added
25
+
26
+ - **全種別に 3 行の名前を渡す検査を足した** (#959)
27
+
28
+ engine の検査は種別を全件描く形をいくつも持つが、**渡す題が 1 行だけ** だった。
29
+ 実際の図は肩書と題と説明の 3 行を持ち、一番広い行が題でない箱が普通にある。
30
+
31
+ その形が 1 度も描かれていなかったため、0.108.0 (#953) で入れた下限が題以外の行まで切る
32
+ 欠陥を engine 単体では見つけられず、引く側 (`cardene777/dragon`) の見本 606 枚を回して
33
+ 初めて出た (#957)。 本検査を足した時点でも、同じ穴が別の理由で 9 種に残っていた。
34
+
35
+ 98 種を 5 つの箱で描き、**渡した 3 つの文字列を切った形だけ** を数える。
36
+ 絵が自分で書く literal (`shape-blockchain` の `0x…` 等) は書き手の字ではないので数えない。
37
+
38
+ 箱を 5 つ使うのは、1 つだと帯の広い種別で空振りするため (260x260 だけを見ていた時に
39
+ 見つかったのは 1 種で、幅 140 を足すと 9 種に増えた)。
40
+
41
+ 切ってよい種別は理由を添えて宣言に書き、**両方向で見る** = 宣言に在って実物が切らなければ
42
+ 落ちる。 現在の宣言は `shape-blockchain-block` 1 件で、箱の中に決まった大きさで字を置く
43
+ 振る舞い (#526) による。
44
+
45
+ ## [0.110.0] - 2026-09-30
46
+
47
+ ### Fixed
48
+
49
+ - **題の下限が、題以外の行まで切っていた** (#957)
50
+
51
+ 0.108.0 (#953) で入れた読める下限 (11px) の効き方が、題以外の行に及んでいた。
52
+ 引く側 (見本帳) を 0.109.0 に上げると、記法に書いた補いの行が切られる図が出た。
53
+
54
+ `shape-diamond` の 260x260 の箱で実測した内訳。
55
+
56
+ | 版 | 肩書 | 題 | 説明 |
57
+ |---|---|---|---|
58
+ | 0.107.0 相当 | 8.32 `方針` | 10.40 `再送の判定` | 7.63 `間隔を倍に広げる · 最大 3 …` |
59
+ | 0.109.0 | 8.80 `方針` | 11.00 `再送の判定` | 8.07 `間隔を倍に広げる · 最大 …` |
60
+ | 0.110.0 (本版) | 8.32 `方針` | 10.40 `再送の判定` | 7.63 `間隔を倍に広げる · 最大 3 回` |
61
+
62
+ 2 つ直した。
63
+
64
+ **1 つ目 = 塊の倍率は一番広い行で決まるのに、下限を題の大きさから出していた**。
65
+ この箱で一番広いのは説明の行 (14 字) で、題は 5 字しかない。 題を 0.6px 上げるために
66
+ 説明から `3 回` を落としていた = 払うのと得るのが別の行になる。
67
+
68
+ 下限を当てるのは **題が一番広い行のときだけ** にした。 行ごとに倍率を出す 4 種
69
+ (`shape-commerce` / `shape-finance` / `shape-hardware` / `shape-blockchain`) では、
70
+ 下限を当てるのは題の行だけにした (#953 の対象外 scope と同じ)。
71
+
72
+ **2 つ目 = ちょうど収まる行を丸め誤差で切っていた**。
73
+ 塊の倍率は一番広い行が帯にちょうど収まる値なので、切る側の測り直しが浮動小数で
74
+ 髪の毛 1 本ぶん上回ると、収まっている行を切る。 切る判定に相対の余裕 (1e-9) を入れた。
75
+
76
+ これで **切られるのは、自分が入らない行だけ** になる。
77
+ 題が一番広い行のときに下限で止めて切る振る舞い (#953) は変えていない。
78
+
8
79
  ## [0.109.0] - 2026-09-30
9
80
 
10
81
  ### Fixed
@@ -4383,7 +4454,9 @@ Initial OSS release.
4383
4454
  使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
4384
4455
  行き止まりになる。
4385
4456
 
4386
- [Unreleased]: https://github.com/cardene777/cdl/compare/v0.109.0...HEAD
4457
+ [Unreleased]: https://github.com/cardene777/cdl/compare/v0.111.0...HEAD
4458
+ [0.111.0]: https://github.com/cardene777/cdl/compare/v0.110.0...v0.111.0
4459
+ [0.110.0]: https://github.com/cardene777/cdl/compare/v0.109.0...v0.110.0
4387
4460
  [0.109.0]: https://github.com/cardene777/cdl/compare/v0.108.0...v0.109.0
4388
4461
  [0.108.0]: https://github.com/cardene777/cdl/compare/v0.107.0...v0.108.0
4389
4462
  [0.107.0]: https://github.com/cardene777/cdl/compare/v0.106.0...v0.107.0
package/dist/index.cjs CHANGED
@@ -14704,10 +14704,14 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
14704
14704
  function \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055) {
14705
14705
  return \u5927\u304D\u3055 > MIN_TITLE_FONT_SIZE ? MIN_TITLE_FONT_SIZE / \u5927\u304D\u3055 : 0;
14706
14706
  }
14707
+ var \u5207\u308B\u4F59\u88D5 = 1e-9;
14708
+ function \u5E2F\u3067\u5207\u308B(text, \u5927\u304D\u3055, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
14709
+ return \u5E45\u3067\u5207\u308B(text, \u5927\u304D\u3055, \u5E45\u4E0A\u9650 * (1 + \u5207\u308B\u4F59\u88D5), \u6E2C\u308B);
14710
+ }
14707
14711
  function \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u984C, \u5927\u304D\u3055, \u5B57\u9593, \u5E45\u4E0A\u9650, \u6E2C\u308B) {
14708
14712
  const \u4E0B\u9650 = \u8AAD\u3081\u308B\u4E0B\u9650\u306E\u500D\u7387(\u5927\u304D\u3055);
14709
14713
  if (!(\u4E0B\u9650 > 0) || !(\u5E45\u4E0A\u9650 > 0)) return 0;
14710
- 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;
14714
+ return \u5E2F\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;
14711
14715
  }
14712
14716
  var TITLE_MAX = 18;
14713
14717
  var TITLE_MIN = 9;
@@ -28721,7 +28725,8 @@ function labelBlock(node, pos, size, band) {
28721
28725
  node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
28722
28726
  node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
28723
28727
  );
28724
- const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth);
28728
+ const \u984C\u5E45 = textWidth(node.title ?? "", size);
28729
+ const \u4E0B\u9650 = \u984C\u5E45 >= \u5E45 ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth) : 0;
28725
28730
  const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos, \u4E0B\u9650);
28726
28731
  return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
28727
28732
  }
@@ -28729,7 +28734,7 @@ function commonLabel(node, pos, size, band) {
28729
28734
  const \u584A = labelBlock(node, pos, size, band);
28730
28735
  const k = \u584A.k;
28731
28736
  const x = \u584A.x;
28732
- 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));
28737
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E2F\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, band.w, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
28733
28738
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
28734
28739
  node.eyebrow && /* @__PURE__ */ jsxRuntime.jsx(
28735
28740
  "text",
@@ -29100,9 +29105,10 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29100
29105
  node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
29101
29106
  node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
29102
29107
  );
29103
- const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth);
29108
+ const \u984C\u5E45 = textWidth(node.title ?? "", plan.\u540D\u524D.size);
29109
+ const \u4E0B\u9650 = \u984C\u5E45 >= \u5E45 ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth) : 0;
29104
29110
  const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, Math.max(\u5E45\u4E0A\u9650 / \u5E45, \u4E0B\u9650)) : 1;
29105
- 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));
29111
+ const \u5207\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593 = 0) => \u5E2F\u3067\u5207\u308B(t, \u5927\u304D\u3055 * k, \u5E45\u4E0A\u9650, (u, f) => textWidth(u, f, \u5B57\u9593 * k));
29106
29112
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
29107
29113
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsxRuntime.jsx(
29108
29114
  "text",
@@ -30059,16 +30065,17 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxRuntime.jsxs(jsxRu
30059
30065
  )
30060
30066
  ] });
30061
30067
  var LABEL_EYEBROW_SPACING = 2;
30062
- function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
30068
+ function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
30063
30069
  const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
30064
- 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;
30070
+ const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, textWidth) : 0;
30071
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
30065
30072
  const size = \u5927\u304D\u3055 * \u500D\u7387;
30066
30073
  const spacing = \u5B57\u9593 * \u500D\u7387;
30067
- return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
30074
+ return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
30068
30075
  }
30069
30076
  function bottomLabel(node, cx, plan) {
30070
30077
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
30071
- const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
30078
+ const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
30072
30079
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
30073
30080
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
30074
30081
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsxRuntime.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 }),
@@ -30868,14 +30875,17 @@ function blockchainNodeExtent(strokeWidth) {
30868
30875
  return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
30869
30876
  }
30870
30877
  function bottomLabel2(node, cx, plan) {
30871
- const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593) => {
30878
+ const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593, \u984C\u304B = false) => {
30872
30879
  const \u6E2C\u308B = (u, f, ls) => \u5B57\u306E\u5E45(u, f) + ls * [...u].length;
30873
- 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));
30880
+ const \u7D20\u306E\u5E45 = \u6E2C\u308B(t, \u5927\u304D\u3055, \u5B57\u9593);
30881
+ const \u53CE\u307E\u308B = \u7D20\u306E\u5E45 > node.w && node.w > 0 ? node.w / \u7D20\u306E\u5E45 : 1;
30882
+ const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(t, \u5927\u304D\u3055, \u5B57\u9593, node.w, \u6E2C\u308B) : 0;
30883
+ const \u500D\u7387 = Math.max(\u53CE\u307E\u308B, \u4E0B\u9650);
30874
30884
  const size = \u5927\u304D\u3055 * \u500D\u7387;
30875
- 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) };
30885
+ return { \u500D\u7387, text: \u5E2F\u3067\u5207\u308B(t, size, node.w, (u, f) => \u6E2C\u308B(u, f, \u5B57\u9593 * \u500D\u7387)) };
30876
30886
  };
30877
30887
  const \u80A9 = node.eyebrow && plan.\u80A9\u66F8 ? \u53CE\u3081\u308B(node.eyebrow, plan.\u80A9\u66F8.size, 2) : { \u500D\u7387: 1, text: node.eyebrow ?? "" };
30878
- const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0);
30888
+ const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0, true);
30879
30889
  const \u8AAC = node.subtitle && plan.\u8AAC\u660E ? \u53CE\u3081\u308B(node.subtitle, plan.\u8AAC\u660E.size, 0) : { \u500D\u7387: 1, text: node.subtitle ?? "" };
30880
30890
  const \u80A9\u66F8\u500D\u7387 = \u80A9.\u500D\u7387;
30881
30891
  const \u540D\u524D\u500D\u7387 = \u540D.\u500D\u7387;
@@ -31490,16 +31500,17 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31490
31500
  }
31491
31501
  return \u5E45 + \u5B57\u9593 * \u5B57\u6570;
31492
31502
  }
31493
- function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31503
+ function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
31494
31504
  const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31495
- 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;
31505
+ const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E45) : 0;
31506
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
31496
31507
  const size = \u5927\u304D\u3055 * \u500D\u7387;
31497
31508
  const spacing = \u5B57\u9593 * \u500D\u7387;
31498
- return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
31509
+ return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
31499
31510
  }
31500
31511
  function bottomLabel3(node, cx, plan) {
31501
31512
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
31502
- const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31513
+ const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
31503
31514
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31504
31515
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31505
31516
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsxRuntime.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 }),
@@ -31975,16 +31986,17 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31975
31986
  }
31976
31987
  return \u5E45 + \u5B57\u9593 * \u5B57\u6570;
31977
31988
  }
31978
- function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31989
+ function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u984C\u304B = false) {
31979
31990
  const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31980
- 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;
31991
+ const \u4E0B\u9650 = \u984C\u304B ? \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45, \u5B57\u5E452) : 0;
31992
+ const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, Math.max(\u7BB1\u5E45 / \u5E45, \u4E0B\u9650)) : 1;
31981
31993
  const size = \u5927\u304D\u3055 * \u500D\u7387;
31982
31994
  const spacing = \u5B57\u9593 * \u500D\u7387;
31983
- return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
31995
+ return { size, spacing, text: \u5E2F\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
31984
31996
  }
31985
31997
  function bottomLabel4(node, cx, plan) {
31986
31998
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
31987
- const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31999
+ const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w, true);
31988
32000
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31989
32001
  return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
31990
32002
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsxRuntime.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 }),