@cardenelabs/cdl 0.75.0 → 0.77.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
@@ -357,7 +357,14 @@ function resolveLang(value) {
357
357
  }
358
358
  var en = {
359
359
  /** `shape-terminal` の 2 行目 (命令の出力) */
360
- "terminal.output": "\u2192 12 chunks in 1.8s",
360
+ /*
361
+ * `shape-terminal` の出力の行。
362
+ *
363
+ * **いちばん長い行が絵の倍率を決める** (#891)。 端末の中身は自分の座標で組んでから箱へ
364
+ * 収めるので、この行が長いほど全部の字が小さくなる。 120x110 の箱では 20 字の版で
365
+ * 7.71 world まで落ちていた。
366
+ */
367
+ "terminal.output": "\u2192 12 chunks",
361
368
  /** `shape-code-block` の札の file 名 */
362
369
  "codeBlock.fileName": "utils.ts",
363
370
  /** `shape-kanban-card` の課題の番号 */
@@ -392,8 +399,14 @@ var en = {
392
399
  "paymentProvider.sign": "PAY",
393
400
  /** `shape-payment-provider` の状態の札 */
394
401
  "paymentProvider.status": "PROCESSING",
395
- /** `shape-brokerage` の株価の帯 */
396
- "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
402
+ /**
403
+ * `shape-brokerage` の株価の帯。
404
+ *
405
+ * **1 銘柄に絞る** (#888)。 電光掲示板の内側は幅 136 しか無く、2 銘柄を指定 11 で描くと
406
+ * 幅 181 になってビルの外へ出る。 板が流れている雰囲気は帯そのもの (黒地に緑の等幅) が
407
+ * 担うので、銘柄を減らしても絵は変わらない。
408
+ */
409
+ "brokerage.ticker": "\u25B2NKY 38,240",
397
410
  /** `shape-brokerage` の看板 */
398
411
  "brokerage.sign": "$ SECURITIES",
399
412
  /** `shape-exchange` の看板 */
@@ -578,7 +591,7 @@ var en = {
578
591
  "readout.trafficLight.green": "green"
579
592
  };
580
593
  var ja = {
581
- "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
594
+ "terminal.output": "\u2192 12 \u500B\u3092\u7D50\u5408",
582
595
  "codeBlock.fileName": "\u5171\u901A.ts",
583
596
  "kanbanCard.id": "#1111",
584
597
  "kanbanCard.status": "\u9032\u884C\u4E2D",
@@ -596,7 +609,7 @@ var ja = {
596
609
  "trustBank.sign": "\u4FE1\u8A17",
597
610
  "paymentProvider.sign": "\u6C7A\u6E08",
598
611
  "paymentProvider.status": "\u51E6\u7406\u4E2D",
599
- "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
612
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240",
600
613
  "brokerage.sign": "\xA5 \u8A3C\u5238",
601
614
  "exchange.sign": "\u53D6\u5F15\u6240",
602
615
  "exchange.sub": "\u6E05\u7B97",
@@ -1653,6 +1666,7 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1653
1666
  }
1654
1667
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1655
1668
  }
1669
+ var \u7E2E\u3093\u3060\u7D75\u306E\u5B57\u306E\u4E0B\u9650 = 8;
1656
1670
 
1657
1671
  // src/kinds/row-align.ts
1658
1672
  var GENERIC_ROW_LEFT_SIZE_PX = 18;
@@ -25252,6 +25266,11 @@ function \u5272\u5408\u8868\u8A18(frac) {
25252
25266
  const v = Math.round(frac * 1e3) / 10;
25253
25267
  return `${Number.isInteger(v) ? v : v.toFixed(1)}%`;
25254
25268
  }
25269
+ var \u7A74\u306B\u5BFE\u3059\u308B\u4E0A\u9650 = 0.8;
25270
+ function \u4E2D\u592E\u306E\u5B57(\u6BD4\u4F8B\u3057\u305F\u5927\u304D\u3055, \u7A74\u306E\u534A\u5F84, \u6587) {
25271
+ const \u5165\u308B\u5927\u304D\u3055 = \u7A74\u306E\u534A\u5F84 * 2 * \u7A74\u306B\u5BFE\u3059\u308B\u4E0A\u9650 / Math.max(textWidth(\u6587, 1), 1e-6);
25272
+ return Math.min(Math.max(\u6BD4\u4F8B\u3057\u305F\u5927\u304D\u3055, \u7E2E\u3093\u3060\u7D75\u306E\u5B57\u306E\u4E0B\u9650), \u5165\u308B\u5927\u304D\u3055);
25273
+ }
25255
25274
  function ChartPieNode({
25256
25275
  node,
25257
25276
  active,
@@ -25309,6 +25328,11 @@ function ChartPieNode({
25309
25328
  const cx = node.w / 2;
25310
25329
  const cy = PAD_TOP2 + chartAreaH / 2;
25311
25330
  const \u524D\u306Eslices = \u524D\u3042\u308A ? \u8F2A\u3092\u7D44\u3080(data, cx, cy, \u524D\u306E\u5916\u534A\u5F84, \u524D\u306E\u5185\u534A\u5F84, \u524D\u306E\u5272\u5408) : [];
25331
+ const \u7A74 = \u524D\u3042\u308A ? \u524D\u306E\u5185\u534A\u5F84 : \u5916\u306E\u5185\u534A\u5F84;
25332
+ const \u5408\u8A08\u306E\u6587 = \u5B9F\u5024\u8868\u8A18(Math.round(\u524D\u3042\u308A ? \u4ECA\u306E\u5408\u8A08 : total));
25333
+ const \u5408\u8A08\u306E\u5B57 = \u4E2D\u592E\u306E\u5B57(Math.round(radius * 0.26), \u7A74, \u5408\u8A08\u306E\u6587);
25334
+ const \u898B\u51FA\u3057\u306E\u5B572 = \u4E2D\u592E\u306E\u5B57(Math.round(radius * 0.12), \u7A74, "\u5408\u8A08");
25335
+ const \u5408\u8A08\u306E\u4E0B = Math.max(Math.round(radius * 0.2), \u5408\u8A08\u306E\u5B57 * 0.25 + \u898B\u51FA\u3057\u306E\u5B572 * 0.8);
25312
25336
  const slices = \u8F2A\u3092\u7D44\u3080(data, cx, cy, radius, \u5916\u306E\u5185\u534A\u5F84, \u4ECA\u306E\u5272\u5408);
25313
25337
  const \u958B\u304D = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
25314
25338
  const \u5207\u308A\u629C\u304Did = `cdl-pie-draw-${instanceId}`;
@@ -25387,19 +25411,19 @@ function ChartPieNode({
25387
25411
  x: cx,
25388
25412
  y: cy - 2,
25389
25413
  textAnchor: "middle",
25390
- fontSize: Math.round(radius * 0.26),
25414
+ fontSize: \u5408\u8A08\u306E\u5B57,
25391
25415
  fontWeight: 600,
25392
25416
  fill: "var(--cdl-text, #1a1f2a)",
25393
- children: \u5B9F\u5024\u8868\u8A18(Math.round(\u524D\u3042\u308A ? \u4ECA\u306E\u5408\u8A08 : total))
25417
+ children: \u5408\u8A08\u306E\u6587
25394
25418
  }
25395
25419
  ),
25396
25420
  /* @__PURE__ */ jsx(
25397
25421
  "text",
25398
25422
  {
25399
25423
  x: cx,
25400
- y: cy + Math.round(radius * 0.2),
25424
+ y: cy + \u5408\u8A08\u306E\u4E0B,
25401
25425
  textAnchor: "middle",
25402
- fontSize: Math.round(radius * 0.12),
25426
+ fontSize: \u898B\u51FA\u3057\u306E\u5B572,
25403
25427
  fill: "var(--cdl-text-dim, #5a6270)",
25404
25428
  children: "\u5408\u8A08"
25405
25429
  }
@@ -25602,6 +25626,10 @@ function \u8868\u306E\u5F62({ node, active, data, \u5272\u5408, x0, y0, drawing,
25602
25626
  const \u5185\u534A\u5F84 = R * 0.58;
25603
25627
  const cx = PAD + R;
25604
25628
  const cy = node.h / 2;
25629
+ const \u5408\u8A08\u306E\u6587 = \u5B9F\u5024\u8868\u8A18(Math.round(data.reduce((acc, d) => acc + d.value, 0)));
25630
+ const \u5408\u8A08\u306E\u5B57 = \u4E2D\u592E\u306E\u5B57(Math.round(R * 0.26), \u5185\u534A\u5F84, \u5408\u8A08\u306E\u6587);
25631
+ const \u898B\u51FA\u3057\u306E\u5B572 = \u4E2D\u592E\u306E\u5B57(Math.round(R * 0.12), \u5185\u534A\u5F84, "\u5408\u8A08");
25632
+ const \u5408\u8A08\u306E\u4E0B = Math.max(Math.round(R * 0.2), \u5408\u8A08\u306E\u5B57 * 0.25 + \u898B\u51FA\u3057\u306E\u5B572 * 0.8);
25605
25633
  const \u8868\u5DE6 = node.w - PAD - \u8868\u5E45;
25606
25634
  const \u53F3\u7AEF = node.w - PAD;
25607
25635
  const \u5272\u5408\u53F3 = \u53F3\u7AEF - \u5B9F\u6570\u5E45 - 24;
@@ -25643,19 +25671,19 @@ function \u8868\u306E\u5F62({ node, active, data, \u5272\u5408, x0, y0, drawing,
25643
25671
  x: cx,
25644
25672
  y: cy - 2,
25645
25673
  textAnchor: "middle",
25646
- fontSize: Math.round(R * 0.26),
25674
+ fontSize: \u5408\u8A08\u306E\u5B57,
25647
25675
  fontWeight: 600,
25648
25676
  fill: "var(--cdl-text, #1a1f2a)",
25649
- children: \u5B9F\u5024\u8868\u8A18(Math.round(data.reduce((acc, d) => acc + d.value, 0)))
25677
+ children: \u5408\u8A08\u306E\u6587
25650
25678
  }
25651
25679
  ),
25652
25680
  /* @__PURE__ */ jsx(
25653
25681
  "text",
25654
25682
  {
25655
25683
  x: cx,
25656
- y: cy + Math.round(R * 0.2),
25684
+ y: cy + \u5408\u8A08\u306E\u4E0B,
25657
25685
  textAnchor: "middle",
25658
- fontSize: Math.round(R * 0.12),
25686
+ fontSize: \u898B\u51FA\u3057\u306E\u5B572,
25659
25687
  fill: "var(--cdl-text-dim, #5a6270)",
25660
25688
  children: "\u5408\u8A08"
25661
25689
  }
@@ -28432,6 +28460,7 @@ function ShapeTerminalNode({ node, active, lang }) {
28432
28460
  const lineFont = "ui-monospace, SFMono-Regular, Menlo, monospace";
28433
28461
  const \u4F59\u767D = 16;
28434
28462
  const \u5E2F = 28;
28463
+ const \u5E2F\u306E\u5B57 = 12.5;
28435
28464
  const \u89D2 = 10;
28436
28465
  const \u5148\u982D = 26;
28437
28466
  const \u884C\u9593 = 22;
@@ -28441,7 +28470,7 @@ function ShapeTerminalNode({ node, active, lang }) {
28441
28470
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
28442
28471
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
28443
28472
  ],
28444
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
28473
+ [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
28445
28474
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
28446
28475
  ];
28447
28476
  const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
@@ -28483,7 +28512,7 @@ function ShapeTerminalNode({ node, active, lang }) {
28483
28512
  {
28484
28513
  x: x + w / 2,
28485
28514
  y: y + barH / 2 + 4 * \u500D,
28486
- fontSize: 11 * \u500D,
28515
+ fontSize: \u5E2F\u306E\u5B57 * \u500D,
28487
28516
  fontFamily: lineFont,
28488
28517
  textAnchor: "middle",
28489
28518
  fill: "#7a8290",
@@ -28574,6 +28603,7 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28574
28603
  const \u592A\u3055 = 9;
28575
28604
  const \u9699\u9593 = 6;
28576
28605
  const \u6301\u3061\u4E0A\u3052 = 8;
28606
+ const \u884C\u756A\u53F7\u306E\u5B57 = 11;
28577
28607
  const lines = [
28578
28608
  [
28579
28609
  { c: "#c678dd", w: 40 },
@@ -28596,14 +28626,13 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28596
28626
  { c: "#e6edf3", w: 40 }
28597
28627
  ]
28598
28628
  ];
28599
- const \u6700\u9577 = Math.max(
28600
- ...lines.map(
28601
- (tokens) => tokens.reduce((sum, token) => sum + token.w, 0) + \u9699\u9593 * (tokens.length - 1)
28602
- )
28603
- );
28604
- const \u81EA\u7136\u5E45 = \u6E9D + \u5B57\u4E0B\u3052 + \u6700\u9577 + \u4F59\u767D;
28605
- const \u81EA\u7136\u9AD8 = \u30BF\u30D6\u9AD8 + \u884C\u982D + \u884C\u9593 * (lines.length - 1) + Math.max(\u592A\u3055 - \u6301\u3061\u4E0A\u3052, 10.5 * DESCENT3);
28606
- const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
28629
+ const \u81EA\u7136\u9AD8 = \u30BF\u30D6\u9AD8 + \u884C\u982D + \u884C\u9593 * (lines.length - 1) + Math.max(\u592A\u3055 - \u6301\u3061\u4E0A\u3052, \u884C\u756A\u53F7\u306E\u5B57 * DESCENT3);
28630
+ const \u500D = Math.min(1, bodyH / \u81EA\u7136\u9AD8);
28631
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
28632
+ { text: \u5B57\u5F15("codeBlock.fileName"), size: 11, \u5E2F: { \u5E45: \u30BF\u30D6\u5E45, \u9AD8\u3055: \u30BF\u30D6\u9AD8 } },
28633
+ { text: "1", size: \u884C\u756A\u53F7\u306E\u5B57, \u5E2F: { \u5E45: \u6E9D - \u6301\u3061\u4E0A\u3052, \u9AD8\u3055: \u884C\u9593 } }
28634
+ ];
28635
+ const \u500D\u8FD4\u3057 = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D, \u6253\u3061\u6D88\u3059\u5B57\u3089);
28607
28636
  const tabW = \u30BF\u30D6\u5E45 * \u500D;
28608
28637
  const tabH = \u30BF\u30D6\u9AD8 * \u500D;
28609
28638
  const \u4E38 = \u89D2 * \u500D;
@@ -28639,9 +28668,10 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28639
28668
  /* @__PURE__ */ jsx(
28640
28669
  "text",
28641
28670
  {
28671
+ "data-cdl-counter-scaled": "1",
28642
28672
  x: x + tabW / 2,
28643
28673
  y: y + tabH / 2 + 4 * \u500D,
28644
- fontSize: 11 * \u500D,
28674
+ fontSize: 11 * \u500D * \u500D\u8FD4\u3057,
28645
28675
  fontFamily: lineFont,
28646
28676
  textAnchor: "middle",
28647
28677
  fill: "#e6edf3",
@@ -28663,9 +28693,10 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28663
28693
  /* @__PURE__ */ jsx(
28664
28694
  "text",
28665
28695
  {
28696
+ "data-cdl-counter-scaled": "1",
28666
28697
  x: x + gutterW - \u6301\u3061\u4E0A\u3052 * \u500D,
28667
28698
  y: codeY0 + i * lineH,
28668
- fontSize: 10.5 * \u500D,
28699
+ fontSize: \u884C\u756A\u53F7\u306E\u5B57 * \u500D * \u500D\u8FD4\u3057,
28669
28700
  fontFamily: lineFont,
28670
28701
  textAnchor: "end",
28671
28702
  fill: "#4a5266",
@@ -28673,12 +28704,13 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28673
28704
  }
28674
28705
  ),
28675
28706
  toks.map((t, j) => {
28676
- const rect = /* @__PURE__ */ jsx(
28707
+ const \u63CF\u304F\u5E45 = Math.min(t.w * \u500D, x + w - \u4F59\u767D * \u500D - cursor);
28708
+ const rect = \u63CF\u304F\u5E45 > 0 ? /* @__PURE__ */ jsx(
28677
28709
  "rect",
28678
28710
  {
28679
28711
  x: cursor,
28680
28712
  y: codeY0 + i * lineH - \u6301\u3061\u4E0A\u3052 * \u500D,
28681
- width: t.w * \u500D,
28713
+ width: \u63CF\u304F\u5E45,
28682
28714
  height: \u592A\u3055 * \u500D,
28683
28715
  rx: 2 * \u500D,
28684
28716
  fill: t.c,
@@ -28686,7 +28718,7 @@ function ShapeCodeBlockNode({ node, active, lang }) {
28686
28718
  stroke: "none"
28687
28719
  },
28688
28720
  j
28689
- );
28721
+ ) : null;
28690
28722
  cursor += (t.w + \u9699\u9593) * \u500D;
28691
28723
  return rect;
28692
28724
  })
@@ -28731,21 +28763,23 @@ function ShapeKanbanCardNode({ node, active, lang }) {
28731
28763
  const w = Math.max(0, node.w - \u7DDA * 2 - \u5F71);
28732
28764
  const h = Math.max(0, node.h - \u7DDA * 2 - \u5F71);
28733
28765
  const \u5E2F\u9593\u4F59\u767D = 4;
28734
- const \u5DE6\u53F3\u4F59\u767D = 14;
28735
- const \u4E0A\u6BB5\u9699\u9593 = 8;
28766
+ const \u5DE6\u53F3\u4F59\u767D = 12;
28767
+ const \u4E0A\u6BB5\u9699\u9593 = 6;
28736
28768
  const \u512A\u5148\u5E2F\u9AD8 = 10;
28737
28769
  const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
28738
28770
  const ID\u57FA\u6E96 = 30;
28739
28771
  const ID\u5B57 = 11;
28740
28772
  const ID\u5B57\u9593 = 1;
28741
28773
  const PILL\u4E0A = 20;
28742
- const PILL\u5E45 = 54;
28774
+ const PILL\u5E45 = 62;
28743
28775
  const PILL\u9AD8 = 16;
28744
- const PILL\u5B57 = 9;
28776
+ const PILL\u5B57 = 11;
28777
+ const PILL\u5B57\u9593 = 0;
28745
28778
  const FOOTER\u4E0B = 22;
28746
28779
  const AVATAR\u4E2D\u5FC3Y = 4;
28747
28780
  const AVATAR\u534A\u5F84 = 9;
28748
28781
  const AVATAR\u67A0 = 1.5;
28782
+ const AVATAR\u5B57 = 11;
28749
28783
  const \u540D\u524D\u5B57 = 17;
28750
28784
  const \u8AAC\u660E\u57FA\u6E96\u6BD4 = 20 / 17;
28751
28785
  const \u8AAC\u660E\u5B57\u6BD4 = 12 / 17;
@@ -28828,7 +28862,7 @@ function ShapeKanbanCardNode({ node, active, lang }) {
28828
28862
  y: pillY + 12 * \u500D,
28829
28863
  fontSize: PILL\u5B57 * \u500D,
28830
28864
  fontWeight: 700,
28831
- letterSpacing: 1 * \u500D,
28865
+ letterSpacing: PILL\u5B57\u9593 * \u500D,
28832
28866
  textAnchor: "middle",
28833
28867
  fill: "#5a4a1a",
28834
28868
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
@@ -28876,7 +28910,7 @@ function ShapeKanbanCardNode({ node, active, lang }) {
28876
28910
  {
28877
28911
  x: 9 * \u500D,
28878
28912
  y: 8 * \u500D,
28879
- fontSize: 10 * \u500D,
28913
+ fontSize: AVATAR\u5B57 * \u500D,
28880
28914
  fontWeight: 700,
28881
28915
  textAnchor: "middle",
28882
28916
  fill: "#ffffff",
@@ -28900,7 +28934,7 @@ function ShapeKanbanCardNode({ node, active, lang }) {
28900
28934
  {
28901
28935
  x: 23 * \u500D,
28902
28936
  y: 8 * \u500D,
28903
- fontSize: 10 * \u500D,
28937
+ fontSize: AVATAR\u5B57 * \u500D,
28904
28938
  fontWeight: 700,
28905
28939
  textAnchor: "middle",
28906
28940
  fill: "#ffffff",
@@ -29874,7 +29908,7 @@ var SMART_CONTRACT_H = 220;
29874
29908
  var BLOCK_W = 240;
29875
29909
  var BLOCK_H = 220;
29876
29910
  var \u898B\u51FA\u3057\u306E\u5B57 = 13;
29877
- var \u540D\u306E\u5B57 = 10.5;
29911
+ var \u540D\u306E\u5B57 = 11;
29878
29912
  var \u5024\u306E\u5B57 = 11;
29879
29913
  var \u884C\u306E\u9593\u9694 = 22;
29880
29914
  var \u898B\u51FA\u3057\u306E\u5E2F = 32;
@@ -29891,12 +29925,12 @@ var CHAIN_BLOCK_SW = 2.5;
29891
29925
  var CHAIN_HEAD_H = 16;
29892
29926
  var CHAIN_TEXT_W = CHAIN_BLOCK_W - 8;
29893
29927
  var CHAIN_ROW_GAP = 14;
29894
- var CHAIN_NO_SIZE = 10;
29928
+ var CHAIN_NO_SIZE = 11;
29895
29929
  var CONTRACT_CALL_SIZE = 11;
29896
29930
  var NFT_ID_SIZE = 15;
29897
- var CHAIN_HASH_SIZE = 7;
29898
- var BTC_NO_SIZE = 9;
29899
- var ETH_NO_SIZE = 9;
29931
+ var CHAIN_HASH_SIZE = 11;
29932
+ var BTC_NO_SIZE = 11;
29933
+ var ETH_NO_SIZE = 11;
29900
29934
  var NODE_HEX_R = 44;
29901
29935
  var NODE_PEER_R = 12;
29902
29936
  var NODE_PEER_GAP = 22;
@@ -30225,34 +30259,40 @@ function ShapeEthereumChainNode({ node, active }) {
30225
30259
  const linkW = CHAIN_LINK_W;
30226
30260
  const totalW = blockCount * blockW + (blockCount - 1) * linkW;
30227
30261
  const startX = cx - totalW / 2;
30228
- const art = /* @__PURE__ */ jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
30229
- const bx = startX + i * (blockW + linkW);
30230
- const isCurrent = i === blockCount - 1;
30231
- const iconColors = isCurrent ? { light: "#ffffff", medium: "#e5e5f5", dark: "#c9c9e0", darker: "#a4a4c9", stroke: "#ffffff" } : { light: "#8a92b2", medium: "#62688f", dark: "#454a75", darker: "#3c3c3b", stroke: ethPurple };
30232
- return /* @__PURE__ */ jsxs("g", { children: [
30233
- i > 0 && /* @__PURE__ */ jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: ethPurple, strokeWidth: 3.5, strokeLinecap: "round" }),
30234
- /* @__PURE__ */ jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
30235
- /* @__PURE__ */ jsx(
30236
- "rect",
30237
- {
30238
- "data-cdl-role": i === 0 ? "node-body" : void 0,
30239
- x: bx,
30240
- y: cy - blockH / 2,
30241
- width: blockW,
30242
- height: blockH,
30243
- rx: 4,
30244
- fill: isCurrent ? ethPurple : "var(--cdl-node-fill, #ffffff)",
30245
- stroke: ethPurple,
30246
- strokeWidth: isCurrent ? 2.5 : 1.5
30247
- }
30248
- ),
30249
- /* @__PURE__ */ jsx(EthereumDiamond, { cx: bx + blockW / 2, cy: cy - 6, h: 16, colors: iconColors }),
30250
- /* @__PURE__ */ jsxs("text", { "data-cdl-counter-scaled": "0", x: bx + blockW / 2, y: cy + 22, fontSize: ETH_NO_SIZE, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
30251
- "#",
30252
- 21400 + i
30253
- ] })
30254
- ] }, i);
30255
- }) });
30262
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
30263
+ { text: "#214", size: ETH_NO_SIZE, \u5E2F: { \u5E45: CHAIN_TEXT_W, \u9AD8\u3055: 20 } }
30264
+ ];
30265
+ const art = (\u500D\u7387) => {
30266
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
30267
+ return /* @__PURE__ */ jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
30268
+ const bx = startX + i * (blockW + linkW);
30269
+ const isCurrent = i === blockCount - 1;
30270
+ const iconColors = isCurrent ? { light: "#ffffff", medium: "#e5e5f5", dark: "#c9c9e0", darker: "#a4a4c9", stroke: "#ffffff" } : { light: "#8a92b2", medium: "#62688f", dark: "#454a75", darker: "#3c3c3b", stroke: ethPurple };
30271
+ return /* @__PURE__ */ jsxs("g", { children: [
30272
+ i > 0 && /* @__PURE__ */ jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: ethPurple, strokeWidth: 3.5, strokeLinecap: "round" }),
30273
+ /* @__PURE__ */ jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
30274
+ /* @__PURE__ */ jsx(
30275
+ "rect",
30276
+ {
30277
+ "data-cdl-role": i === 0 ? "node-body" : void 0,
30278
+ x: bx,
30279
+ y: cy - blockH / 2,
30280
+ width: blockW,
30281
+ height: blockH,
30282
+ rx: 4,
30283
+ fill: isCurrent ? ethPurple : "var(--cdl-node-fill, #ffffff)",
30284
+ stroke: ethPurple,
30285
+ strokeWidth: isCurrent ? 2.5 : 1.5
30286
+ }
30287
+ ),
30288
+ /* @__PURE__ */ jsx(EthereumDiamond, { cx: bx + blockW / 2, cy: cy - 6, h: 16, colors: iconColors }),
30289
+ /* @__PURE__ */ jsxs("text", { "data-cdl-counter-scaled": "1", x: bx + blockW / 2, y: cy + 22, fontSize: ETH_NO_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
30290
+ "#",
30291
+ 214 + i
30292
+ ] })
30293
+ ] }, i);
30294
+ }) });
30295
+ };
30256
30296
  return /* @__PURE__ */ jsxs("g", { children: [
30257
30297
  fitArt(r, chainExtent(), art),
30258
30298
  bottomLabel2(node, r.cx, r.label)
@@ -30703,7 +30743,7 @@ function ShapePaymentProviderNode({ node, active, lang }) {
30703
30743
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
30704
30744
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
30705
30745
  ] }),
30706
- /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30746
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30707
30747
  bottomLabel3(node, r.cx, r.label)
30708
30748
  ] });
30709
30749
  }
@@ -30732,12 +30772,12 @@ function ShapeCreditCardNode({ node, active }) {
30732
30772
  bottomLabel3(node, r.cx, r.label)
30733
30773
  ] });
30734
30774
  }
30735
- var BROKERAGE_TICK_H = 12;
30775
+ var BROKERAGE_TICK_H = 18;
30736
30776
  var BROKERAGE_LOGO_H = 26;
30737
- var BROKERAGE_TICK_INNER_H = 8;
30738
- var BROKERAGE_TICKER_SIZE = 5.5;
30777
+ var BROKERAGE_TICKER_SIZE = 11;
30778
+ var BROKERAGE_TICK_INNER_H = 14;
30739
30779
  var BROKERAGE_SIGN_SIZE = 12;
30740
- var BROKERAGE_GRID_TOP = 62;
30780
+ var BROKERAGE_GRID_TOP = 68;
30741
30781
  var BROKERAGE_CELL_W = 14;
30742
30782
  var BROKERAGE_CELL_H = 18;
30743
30783
  var BROKERAGE_GAP_X = 8;
@@ -30799,10 +30839,10 @@ function ShapeBrokerageNode({ node, active, lang }) {
30799
30839
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: w, height: h, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
30800
30840
  /* @__PURE__ */ jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
30801
30841
  /* @__PURE__ */ jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
30802
- /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
30803
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: y + 9, fontSize: BROKERAGE_TICKER_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
30842
+ /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: BROKERAGE_TICK_INNER_H, fill: "#1a2340", stroke: "none" }),
30843
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: y + 12, fontSize: BROKERAGE_TICKER_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
30804
30844
  /* @__PURE__ */ jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
30805
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + 30, fontSize: BROKERAGE_SIGN_SIZE, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
30845
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + BROKERAGE_TICK_H + 18, fontSize: BROKERAGE_SIGN_SIZE, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
30806
30846
  Array.from({ length: rows }).map(
30807
30847
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
30808
30848
  const wx = gridStartX + ci * (cellW + gapX);
@@ -30824,7 +30864,8 @@ function ShapeBrokerageNode({ node, active, lang }) {
30824
30864
  bottomLabel3(node, r.cx, r.label)
30825
30865
  ] });
30826
30866
  }
30827
- var EXCHANGE_SUB_SIZE = 8;
30867
+ var EXCHANGE_SUB_SIZE = 11;
30868
+ var EXCHANGE_HEX_R = 52;
30828
30869
  function ShapeExchangeNode({ node, active, lang }) {
30829
30870
  const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30830
30871
  const frame = commonFrame5(active);
@@ -30844,7 +30885,8 @@ function ShapeExchangeNode({ node, active, lang }) {
30844
30885
  idx: i
30845
30886
  };
30846
30887
  });
30847
- const hexR = 45;
30888
+ const hexR = EXCHANGE_HEX_R;
30889
+ const \u516D\u89D2\u306E\u6A2A\u5E45 = (d) => hexR * Math.sqrt(3) * Math.min(1, Math.max(0, (hexR - Math.abs(d)) / (hexR / 2)));
30848
30890
  const hexPoints = [-90, -30, 30, 90, 150, 210].map((deg) => {
30849
30891
  const rad = deg * Math.PI / 180;
30850
30892
  return { x: cx + Math.cos(rad) * hexR, y: cy + Math.sin(rad) * hexR };
@@ -30852,7 +30894,7 @@ function ShapeExchangeNode({ node, active, lang }) {
30852
30894
  const hexPath = hexPoints.map((p, i) => `${i === 0 ? "M" : "L"} ${p.x} ${p.y}`).join(" ") + " Z";
30853
30895
  const \u7BC0\u70B9 = Math.max(0, nodeR) + 8 + 1.5 / 2;
30854
30896
  const \u516D\u89D2 = hexR + frame.strokeWidth / 2;
30855
- const \u5B57\u4E0B = 26 + EXCHANGE_SUB_SIZE * 0.25;
30897
+ const \u5B57\u4E0B = 28 + EXCHANGE_SUB_SIZE * 0.25;
30856
30898
  const \u5916 = Math.max(\u7BC0\u70B9, \u516D\u89D2);
30857
30899
  const \u305A\u308C = cy - r.cy;
30858
30900
  const \u5E83\u304C\u308A = {
@@ -30862,7 +30904,11 @@ function ShapeExchangeNode({ node, active, lang }) {
30862
30904
  \u53F3: \u5916
30863
30905
  };
30864
30906
  const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
30865
- { text: \u5B57\u5F15("exchange.sub"), size: EXCHANGE_SUB_SIZE, \u5E2F: { \u5E45: \u5916 * 2, \u9AD8\u3055: 14 } }
30907
+ {
30908
+ text: \u5B57\u5F15("exchange.sub"),
30909
+ size: EXCHANGE_SUB_SIZE,
30910
+ \u5E2F: { \u5E45: \u516D\u89D2\u306E\u6A2A\u5E45(\u5B57\u4E0B), \u9AD8\u3055: 14 }
30911
+ }
30866
30912
  ];
30867
30913
  const \u7D75 = (\u500D\u7387) => {
30868
30914
  const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
@@ -30876,9 +30922,9 @@ function ShapeExchangeNode({ node, active, lang }) {
30876
30922
  ] }, `d${i}`);
30877
30923
  }),
30878
30924
  /* @__PURE__ */ jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30879
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30925
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: cy - 10, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30880
30926
  /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
30881
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: cy + 26, fontSize: EXCHANGE_SUB_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30927
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "1", x: cx, y: cy + 28, fontSize: EXCHANGE_SUB_SIZE * \u500D, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30882
30928
  nodes.map((n, i) => /* @__PURE__ */ jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
30883
30929
  ] });
30884
30930
  };
@@ -30896,10 +30942,10 @@ var ATM_SHADOW_RX_RATIO = 0.6;
30896
30942
  var ATM_FLOOR_UP = 6;
30897
30943
  var ATM_FLOOR_H = 10;
30898
30944
  var ATM_FLOOR_RESERVE = 12;
30899
- var ATM_PANEL_W = 140;
30945
+ var ATM_PANEL_W = 152;
30900
30946
  var ATM_PANEL_H = 146;
30901
30947
  var ATM_W_MIN = 100;
30902
- var ATM_W_MAX = 140;
30948
+ var ATM_W_MAX = ATM_PANEL_W;
30903
30949
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
30904
30950
  function ShapeAtmNode({ node, active, lang }) {
30905
30951
  const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
@@ -30940,9 +30986,9 @@ function ShapeAtmNode({ node, active, lang }) {
30940
30986
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x: atmX, y: atmY, width: atmW, height: atmH, rx: 6, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
30941
30987
  /* @__PURE__ */ jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
30942
30988
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 10, width: ATM_PANEL_W - 16, height: 52, rx: 3, fill: "#0f1830", stroke: "#000", strokeWidth: 1.5 }),
30943
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30944
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30945
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30989
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 28, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30990
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 42, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30991
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 56, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30946
30992
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 68, width: ATM_PANEL_W - 16, height: 42, rx: 2, fill: "#8b949e", stroke: "#5a6270", strokeWidth: 1 }),
30947
30993
  (() => {
30948
30994
  const keys = [
@@ -30960,7 +31006,7 @@ function ShapeAtmNode({ node, active, lang }) {
30960
31006
  const keyW = 18;
30961
31007
  const keyH = 10;
30962
31008
  const keyGap = 4;
30963
- const startX = \u9762\u5DE6 + 14;
31009
+ const startX = \u9762\u5DE6 + (ATM_PANEL_W - (5 * keyW + 4 * keyGap)) / 2;
30964
31010
  return keys.map((k, i) => {
30965
31011
  const row = Math.floor(i / 5);
30966
31012
  const col = i % 5;
@@ -30977,7 +31023,7 @@ function ShapeAtmNode({ node, active, lang }) {
30977
31023
  })(),
30978
31024
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 116, width: ATM_PANEL_W - 24, height: 8, rx: 1.5, fill: "#0f1830", stroke: accentDarker, strokeWidth: 1 }),
30979
31025
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
30980
- /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
31026
+ /* @__PURE__ */ jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 132, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30981
31027
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
30982
31028
  ] }),
30983
31029
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -31086,6 +31132,7 @@ function ShapeStorefrontNode({ node, active, lang }) {
31086
31132
  const doorH = facadeH - 30;
31087
31133
  const doorX = x + bw - doorW - 12;
31088
31134
  const doorY = facadeY + 20;
31135
+ const \u672D\u5E45 = Math.min(doorW - 6, 50);
31089
31136
  return /* @__PURE__ */ jsxs("g", { children: [
31090
31137
  /* @__PURE__ */ jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
31091
31138
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
@@ -31102,8 +31149,8 @@ function ShapeStorefrontNode({ node, active, lang }) {
31102
31149
  /* @__PURE__ */ jsx("rect", { x: doorX + 4, y: doorY + 4, width: doorW - 8, height: doorH - 8, fill: "#8b949e", stroke: accentDarker, strokeWidth: 1.5 }),
31103
31150
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.38, x2: doorX + doorW - 4, y2: doorY + doorH * 0.38, stroke: accentDarker, strokeWidth: 1 }),
31104
31151
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.72, x2: doorX + doorW - 4, y2: doorY + doorH * 0.72, stroke: accentDarker, strokeWidth: 1 }),
31105
- /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - 20, y: doorY + doorH * 0.85, width: 40, height: 12, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
31106
- /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
31152
+ /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - \u672D\u5E45 / 2, y: doorY + doorH * 0.85, width: \u672D\u5E45, height: 16, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
31153
+ /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 11, fontSize: 11, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
31107
31154
  /* @__PURE__ */ jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
31108
31155
  /* @__PURE__ */ jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
31109
31156
  bottomLabel4(node, r.cx, r.label)