@cardenelabs/cdl 0.106.0 → 0.108.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
@@ -12239,6 +12239,11 @@ function isHalfwidthKana(code) {
12239
12239
  }
12240
12240
  var EMOJI_ADVANCE_EM = 1.05;
12241
12241
  var MONO_EMOJI_ADVANCE_EM = 1.16;
12242
+ var DRAWN_CJK_RATIO = 1.08;
12243
+ var DRAWN_ASCII_RATIO = 1.16;
12244
+ function isAscii(code) {
12245
+ return code < 128;
12246
+ }
12242
12247
  var WIDE_SYMBOL_ADVANCE_EM = 0.95;
12243
12248
  function isEmoji(code) {
12244
12249
  return code >= 126976 && code <= 129791 || // 絵文字の主要面
@@ -12277,29 +12282,31 @@ function measureTextWidth(text, opts = {}) {
12277
12282
  const fontSize = opts.fontSize ?? 22;
12278
12283
  const letterSpacing = opts.letterSpacing ?? 0;
12279
12284
  const fontFamily = opts.fontFamily ?? "sans";
12285
+ const bound = opts.bound ?? "layout";
12280
12286
  let advanceEmSum = 0;
12281
12287
  let charCount = 0;
12282
12288
  const \u6587\u5B57\u5217 = CLUSTER_JOINER_RE.test(text) ? segmentGraphemes(text) : [...text];
12283
12289
  for (const ch of \u6587\u5B57\u5217) {
12284
12290
  charCount++;
12285
12291
  const code = ch.codePointAt(0) ?? 0;
12292
+ const \u5272\u308A\u623B\u3057 = bound === "drawn" && !isEmojiGrapheme(ch, code) ? isAscii(code) ? DRAWN_ASCII_RATIO : isCJK(code) ? DRAWN_CJK_RATIO : 1 : 1;
12286
12293
  if (isEmojiGrapheme(ch, code)) {
12287
12294
  advanceEmSum += fontFamily === "mono" ? MONO_EMOJI_ADVANCE_EM : EMOJI_ADVANCE_EM;
12288
12295
  continue;
12289
12296
  }
12290
12297
  if (fontFamily === "mono") {
12291
- advanceEmSum += isCJK(code) ? 1.08 : JETBRAINS_MONO_ADVANCE_EM;
12298
+ advanceEmSum += (isCJK(code) ? 1.08 : JETBRAINS_MONO_ADVANCE_EM) / \u5272\u308A\u623B\u3057;
12292
12299
  continue;
12293
12300
  }
12294
12301
  if (isCJK(code)) {
12295
- advanceEmSum += 1.08;
12302
+ advanceEmSum += 1.08 / \u5272\u308A\u623B\u3057;
12296
12303
  continue;
12297
12304
  }
12298
12305
  const table = ch.length === 1 ? INTER_BOLD_ADVANCE_EM[ch] : void 0;
12299
- advanceEmSum += table !== void 0 ? table : defaultAdvanceEm(ch, code);
12306
+ advanceEmSum += (table !== void 0 ? table : defaultAdvanceEm(ch, code)) / \u5272\u308A\u623B\u3057;
12300
12307
  }
12301
12308
  const w = advanceEmSum * fontSize + letterSpacing * charCount;
12302
- return Math.max(w, fontSize * 1.2);
12309
+ return bound === "drawn" ? w : Math.max(w, fontSize * 1.2);
12303
12310
  }
12304
12311
  function \u53CE\u3081\u308B\u500D\u7387(text, opts, \u5E45) {
12305
12312
  if (!(\u5E45 > 0) || !(opts.fontSize > 0)) return 1;
@@ -12440,6 +12447,51 @@ function titleFontSize(kind) {
12440
12447
  return TITLE_FONT_SIZE.get(kind ?? "") ?? TITLE_FONT_SIZE_DEFAULT;
12441
12448
  }
12442
12449
  var TITLE_BOX_PADDING = 52;
12450
+ var KINDS_SCALING_TITLE_WHEN_LOW = /* @__PURE__ */ new Set(["actor", "event", "function", "storage"]);
12451
+ var KINDS_SCALING_TITLE_ALWAYS = /* @__PURE__ */ new Set([
12452
+ "card",
12453
+ "shape-file",
12454
+ "shape-folder",
12455
+ "shape-cloud",
12456
+ "shape-cylinder",
12457
+ "shape-hexagon",
12458
+ "shape-diamond",
12459
+ "shape-stack",
12460
+ "shape-person",
12461
+ "shape-server-rack",
12462
+ "shape-network-node",
12463
+ "shape-mobile-device",
12464
+ "shape-satellite",
12465
+ "shape-smart-contract",
12466
+ "shape-rpc-node",
12467
+ "shape-wallet",
12468
+ "shape-nft",
12469
+ "shape-token",
12470
+ "shape-blockchain",
12471
+ "shape-bitcoin-chain",
12472
+ "shape-ethereum-chain",
12473
+ "shape-blockchain-node",
12474
+ "shape-bank",
12475
+ "shape-trust-bank",
12476
+ "shape-payment-provider",
12477
+ "shape-credit-card",
12478
+ "shape-brokerage",
12479
+ "shape-exchange",
12480
+ "shape-atm",
12481
+ "shape-website",
12482
+ "shape-storefront",
12483
+ "shape-warehouse",
12484
+ "shape-online-shop",
12485
+ "shape-cdn-edge",
12486
+ "shape-api-gateway"
12487
+ ]);
12488
+ var COMPACT_TITLE_MAX_H = 100;
12489
+ function titleScalesToFit(kind, h) {
12490
+ const k = kind ?? "";
12491
+ if (KINDS_SCALING_TITLE_ALWAYS.has(k)) return true;
12492
+ return KINDS_SCALING_TITLE_WHEN_LOW.has(k) && h < COMPACT_TITLE_MAX_H;
12493
+ }
12494
+ var MIN_TITLE_FONT_SIZE = 11;
12443
12495
  var KINDS_DRAWN_BY_GENERIC = [
12444
12496
  "person",
12445
12497
  "user-group",
@@ -14647,6 +14699,14 @@ function \u5E45\u306E\u500D\u7387(text, size, letterSpacing, \u5E45) {
14647
14699
  const \u5B9F\u5E45 = textWidth(text, size, letterSpacing);
14648
14700
  return \u5B9F\u5E45 > \u5E45 ? \u5E45 / \u5B9F\u5E45 : 1;
14649
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
+ }
14650
14710
  var TITLE_MAX = 18;
14651
14711
  var TITLE_MIN = 9;
14652
14712
  var TITLE_RATIO = 0.17;
@@ -14806,16 +14866,19 @@ function bodyBand(node, opt) {
14806
14866
  const h = Math.max(0, \u7BB1h - \u7E26\u4F59\u767D * ky);
14807
14867
  return { x, y, w, h, cx: x + w / 2, cy: y + h / 2, \u53F3: x + w, \u5E95: y + h };
14808
14868
  }
14809
- function fitLabel(band, block, pos) {
14869
+ function fitLabel(band, block, pos, \u6A2A\u306E\u4E0B\u9650 = 0) {
14810
14870
  const \u7E26 = block.\u4E0A + block.\u4E0B;
14811
14871
  const \u6A2A = Math.max(0, block.\u5E45);
14812
14872
  if (!(\u7E26 > 0)) return { k: 1, x: pos.x, y: pos.y };
14813
14873
  if (!(band.h > 0) || !(band.w > 0)) return { k: 0, x: band.x + band.w / 2, y: band.y };
14814
- 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);
14815
14876
  const \u534A = \u6A2A * k / 2;
14816
14877
  return {
14817
14878
  k,
14818
- 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)),
14819
14882
  y: Math.max(band.y + block.\u4E0A * k, Math.min(pos.y, band.y + band.h - block.\u4E0B * k))
14820
14883
  };
14821
14884
  }
@@ -17223,12 +17286,23 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5
17223
17286
  if (!isRenderedNode(n)) continue;
17224
17287
  const titleTrimmed = n.title?.trim() ?? "";
17225
17288
  if (!titleTrimmed) continue;
17226
- const expectedW = measureTextWidth(titleTrimmed, { fontSize: titleFontSize(n.kind) }) + (drawsTitleOutsideBox(n.kind) ? 0 : TITLE_BOX_PADDING);
17227
- if (expectedW > n.w + 8) {
17289
+ const \u4F59\u767D = drawsTitleOutsideBox(n.kind) ? 0 : TITLE_BOX_PADDING;
17290
+ const \u4F7F\u3048\u308B\u5E452 = n.w - \u4F59\u767D;
17291
+ const \u5B9F\u5E45 = measureTextWidth(titleTrimmed, { fontSize: titleFontSize(n.kind), bound: "drawn" });
17292
+ if (titleScalesToFit(n.kind, n.h)) {
17293
+ const \u7E2E\u3081\u305F\u5927\u304D\u3055 = \u5B9F\u5E45 > 0 ? titleFontSize(n.kind) * Math.min(1, \u4F7F\u3048\u308B\u5E452 / \u5B9F\u5E45) : titleFontSize(n.kind);
17294
+ if (\u7E2E\u3081\u305F\u5927\u304D\u3055 < MIN_TITLE_FONT_SIZE) {
17295
+ push(
17296
+ "text-readability",
17297
+ `node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u306B\u53CE\u307E\u3089\u305A\u3001\u8AAD\u3081\u308B\u4E0B\u9650 ${MIN_TITLE_FONT_SIZE}px \u3092\u5272\u308B (\u7E2E\u3081\u3066 ${\u7E2E\u3081\u305F\u5927\u304D\u3055.toFixed(1)}px)`,
17298
+ "warn"
17299
+ );
17300
+ }
17301
+ } else if (\u5B9F\u5E45 > \u4F7F\u3048\u308B\u5E452 + 8) {
17228
17302
  push(
17229
17303
  "text-readability",
17230
17304
  // 字ごとの実幅は小数になるので、読む人に出す時だけ丸める (判定は丸めない)
17231
- `node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u3092\u8D85\u904E\u3059\u308B\u53EF\u80FD\u6027 (\u671F\u5F85 ${Math.round(expectedW)}px)`,
17305
+ `node "${n.id}" title "${n.title}" \u304C node \u5E45 ${n.w}px \u3092\u8D85\u904E\u3059\u308B\u53EF\u80FD\u6027 (\u671F\u5F85 ${Math.round(\u5B9F\u5E45 + \u4F59\u767D)}px)`,
17232
17306
  "warn"
17233
17307
  );
17234
17308
  }
@@ -28644,13 +28718,15 @@ function labelBlock(node, pos, size, band) {
28644
28718
  node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
28645
28719
  node.subtitle ? textWidth(node.subtitle, SUB_SIZE) : 0
28646
28720
  );
28647
- const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos);
28721
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", size, 0, band.w, textWidth);
28722
+ const { k, x, y: baseline } = fitLabel(band, { \u4E0A, \u4E0B, \u5E45 }, pos, \u4E0B\u9650);
28648
28723
  return { k, x, baseline, \u4E0A\u7AEF: baseline - \u4E0A * k, \u4E0B\u7AEF: baseline + \u4E0B * k };
28649
28724
  }
28650
28725
  function commonLabel(node, pos, size, band) {
28651
28726
  const \u584A = labelBlock(node, pos, size, band);
28652
28727
  const k = \u584A.k;
28653
28728
  const x = \u584A.x;
28729
+ 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));
28654
28730
  return /* @__PURE__ */ jsxs(Fragment, { children: [
28655
28731
  node.eyebrow && /* @__PURE__ */ jsx(
28656
28732
  "text",
@@ -28662,7 +28738,7 @@ function commonLabel(node, pos, size, band) {
28662
28738
  letterSpacing: EYEBROW_TRACKING * k,
28663
28739
  textAnchor: "middle",
28664
28740
  fill: "var(--cdl-tone-accent, #2d6a8f)",
28665
- children: node.eyebrow
28741
+ children: \u5207\u308B(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING)
28666
28742
  }
28667
28743
  ),
28668
28744
  /* @__PURE__ */ jsx(
@@ -28675,7 +28751,7 @@ function commonLabel(node, pos, size, band) {
28675
28751
  fontWeight: 700,
28676
28752
  textAnchor: "middle",
28677
28753
  fill: "var(--cdl-text, #1a1f2a)",
28678
- children: node.title
28754
+ children: \u5207\u308B(node.title ?? "", size)
28679
28755
  }
28680
28756
  ),
28681
28757
  node.subtitle && /* @__PURE__ */ jsx(
@@ -28686,7 +28762,7 @@ function commonLabel(node, pos, size, band) {
28686
28762
  fontSize: SUB_SIZE * k,
28687
28763
  textAnchor: "middle",
28688
28764
  fill: "var(--cdl-text-dim, #5a6270)",
28689
- children: node.subtitle
28765
+ children: \u5207\u308B(node.subtitle, SUB_SIZE)
28690
28766
  }
28691
28767
  )
28692
28768
  ] });
@@ -29021,7 +29097,9 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29021
29097
  node.eyebrow && plan.\u80A9\u66F8 ? textWidth(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING) : 0,
29022
29098
  node.subtitle && plan.\u8AAC\u660E ? textWidth(node.subtitle, plan.\u8AAC\u660E.size) : 0
29023
29099
  );
29024
- const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, \u5E45\u4E0A\u9650 / \u5E45) : 1;
29100
+ const \u4E0B\u9650 = \u5207\u3063\u3066\u53CE\u307E\u308B\u4E0B\u9650(node.title ?? "", plan.\u540D\u524D.size, 0, \u5E45\u4E0A\u9650, textWidth);
29101
+ const k = \u5E45 > 0 && \u5E45\u4E0A\u9650 > 0 ? Math.min(1, Math.max(\u5E45\u4E0A\u9650 / \u5E45, \u4E0B\u9650)) : 1;
29102
+ 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));
29025
29103
  return /* @__PURE__ */ jsxs(Fragment, { children: [
29026
29104
  node.eyebrow && plan.\u80A9\u66F8 && /* @__PURE__ */ jsx(
29027
29105
  "text",
@@ -29033,7 +29111,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29033
29111
  letterSpacing: EYEBROW_TRACKING * k,
29034
29112
  textAnchor: "middle",
29035
29113
  fill: "var(--cdl-tone-accent, #2d6a8f)",
29036
- children: node.eyebrow
29114
+ children: \u5207\u308B(node.eyebrow, plan.\u80A9\u66F8.size, EYEBROW_TRACKING)
29037
29115
  }
29038
29116
  ),
29039
29117
  /* @__PURE__ */ jsx(
@@ -29046,7 +29124,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29046
29124
  fontWeight: 700,
29047
29125
  textAnchor: "middle",
29048
29126
  fill: "var(--cdl-text, #1a1f2a)",
29049
- children: node.title
29127
+ children: \u5207\u308B(node.title ?? "", plan.\u540D\u524D.size)
29050
29128
  }
29051
29129
  ),
29052
29130
  node.subtitle && plan.\u8AAC\u660E && /* @__PURE__ */ jsx(
@@ -29057,7 +29135,7 @@ function planLabel(node, cx, \u5E45\u4E0A\u9650, plan) {
29057
29135
  fontSize: plan.\u8AAC\u660E.size * k,
29058
29136
  textAnchor: "middle",
29059
29137
  fill: "var(--cdl-text-dim, #5a6270)",
29060
- children: node.subtitle
29138
+ children: \u5207\u308B(node.subtitle, plan.\u8AAC\u660E.size)
29061
29139
  }
29062
29140
  )
29063
29141
  ] });
@@ -29980,17 +30058,19 @@ var externalLabel = (node, cx, bottomY) => /* @__PURE__ */ jsxs(Fragment, { chil
29980
30058
  var LABEL_EYEBROW_SPACING = 2;
29981
30059
  function \u5E45\u306B\u53CE\u3081\u308B2(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
29982
30060
  const \u5E45 = textWidth(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
29983
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
29984
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
30061
+ 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;
30062
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
30063
+ const spacing = \u5B57\u9593 * \u500D\u7387;
30064
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => textWidth(u, f, spacing)) };
29985
30065
  }
29986
30066
  function bottomLabel(node, cx, plan) {
29987
30067
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B2(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING, node.w);
29988
30068
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B2(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
29989
30069
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B2(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
29990
30070
  return /* @__PURE__ */ jsxs(Fragment, { children: [
29991
- 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 }),
29992
- /* @__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 }),
29993
- 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 })
30071
+ 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 }),
30072
+ /* @__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 }),
30073
+ 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 })
29994
30074
  ] });
29995
30075
  }
29996
30076
  var RACK_SLOT_TOP = 20;
@@ -30785,13 +30865,22 @@ function blockchainNodeExtent(strokeWidth) {
30785
30865
  return { \u4E0A: \u7E26, \u4E0B: \u7E26, \u5DE6: \u6A2A, \u53F3: \u6A2A };
30786
30866
  }
30787
30867
  function bottomLabel2(node, cx, plan) {
30788
- const \u80A9\u66F8\u500D\u7387 = node.eyebrow && plan.\u80A9\u66F8 ? \u5E45\u306E\u500D\u7387(node.eyebrow, plan.\u80A9\u66F8.size, 2, node.w) : 1;
30789
- const \u540D\u524D\u500D\u7387 = \u5E45\u306E\u500D\u7387(node.title, plan.\u540D\u524D.size, 0, node.w);
30790
- const \u8AAC\u660E\u500D\u7387 = node.subtitle && plan.\u8AAC\u660E ? \u5E45\u306E\u500D\u7387(node.subtitle, plan.\u8AAC\u660E.size, 0, node.w) : 1;
30868
+ const \u53CE\u3081\u308B = (t, \u5927\u304D\u3055, \u5B57\u9593) => {
30869
+ const \u6E2C\u308B = (u, f, ls) => \u5B57\u306E\u5E45(u, f) + ls * [...u].length;
30870
+ 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));
30871
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
30872
+ 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) };
30873
+ };
30874
+ const \u80A9 = node.eyebrow && plan.\u80A9\u66F8 ? \u53CE\u3081\u308B(node.eyebrow, plan.\u80A9\u66F8.size, 2) : { \u500D\u7387: 1, text: node.eyebrow ?? "" };
30875
+ const \u540D = \u53CE\u3081\u308B(node.title ?? "", plan.\u540D\u524D.size, 0);
30876
+ const \u8AAC = node.subtitle && plan.\u8AAC\u660E ? \u53CE\u3081\u308B(node.subtitle, plan.\u8AAC\u660E.size, 0) : { \u500D\u7387: 1, text: node.subtitle ?? "" };
30877
+ const \u80A9\u66F8\u500D\u7387 = \u80A9.\u500D\u7387;
30878
+ const \u540D\u524D\u500D\u7387 = \u540D.\u500D\u7387;
30879
+ const \u8AAC\u660E\u500D\u7387 = \u8AAC.\u500D\u7387;
30791
30880
  return /* @__PURE__ */ jsxs(Fragment, { children: [
30792
- 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 }),
30793
- /* @__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 }),
30794
- 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 })
30881
+ 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 }),
30882
+ /* @__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 }),
30883
+ 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 })
30795
30884
  ] });
30796
30885
  }
30797
30886
  function EthereumDiamond({ cx, cy, h, colors }) {
@@ -31400,17 +31489,19 @@ function \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31400
31489
  }
31401
31490
  function \u5E45\u306B\u53CE\u3081\u308B3(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31402
31491
  const \u5E45 = \u5B57\u5E45(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31403
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
31404
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
31492
+ 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;
31493
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
31494
+ const spacing = \u5B57\u9593 * \u500D\u7387;
31495
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E45(u, f, spacing)) };
31405
31496
  }
31406
31497
  function bottomLabel3(node, cx, plan) {
31407
31498
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B3(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING2, node.w);
31408
31499
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B3(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31409
31500
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B3(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31410
31501
  return /* @__PURE__ */ jsxs(Fragment, { children: [
31411
- 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 }),
31412
- /* @__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 }),
31413
- 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 })
31502
+ 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 }),
31503
+ /* @__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 }),
31504
+ 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 })
31414
31505
  ] });
31415
31506
  }
31416
31507
  var BANK_PEDIMENT_H = 44;
@@ -31883,17 +31974,19 @@ function \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593) {
31883
31974
  }
31884
31975
  function \u5E45\u306B\u53CE\u3081\u308B4(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593, \u7BB1\u5E45) {
31885
31976
  const \u5E45 = \u5B57\u5E452(\u6587\u5B57\u5217, \u5927\u304D\u3055, \u5B57\u9593);
31886
- const \u500D\u7387 = \u5E45 > 0 && \u7BB1\u5E45 > 0 ? Math.min(1, \u7BB1\u5E45 / \u5E45) : 1;
31887
- return { size: \u5927\u304D\u3055 * \u500D\u7387, spacing: \u5B57\u9593 * \u500D\u7387 };
31977
+ 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;
31978
+ const size = \u5927\u304D\u3055 * \u500D\u7387;
31979
+ const spacing = \u5B57\u9593 * \u500D\u7387;
31980
+ return { size, spacing, text: \u5E45\u3067\u5207\u308B(\u6587\u5B57\u5217, size, \u7BB1\u5E45, (u, f) => \u5B57\u5E452(u, f, spacing)) };
31888
31981
  }
31889
31982
  function bottomLabel4(node, cx, plan) {
31890
31983
  const \u80A9 = \u5E45\u306B\u53CE\u3081\u308B4(node.eyebrow ?? "", plan.\u80A9\u66F8?.size ?? 0, LABEL_EYEBROW_SPACING3, node.w);
31891
31984
  const \u540D = \u5E45\u306B\u53CE\u3081\u308B4(node.title ?? "", plan.\u540D\u524D.size, 0, node.w);
31892
31985
  const \u8AAC = \u5E45\u306B\u53CE\u3081\u308B4(node.subtitle ?? "", plan.\u8AAC\u660E?.size ?? 0, 0, node.w);
31893
31986
  return /* @__PURE__ */ jsxs(Fragment, { children: [
31894
- 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 }),
31895
- /* @__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 }),
31896
- 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 })
31987
+ 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 }),
31988
+ /* @__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 }),
31989
+ 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 })
31897
31990
  ] });
31898
31991
  }
31899
31992
  var DROP_SHADOW_D = 4;