@cardenelabs/cdl 0.73.0 → 0.75.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/react.cjs CHANGED
@@ -2872,6 +2872,66 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
2872
2872
  }
2873
2873
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
2874
2874
  }
2875
+
2876
+ // src/kinds/row-align.ts
2877
+ var GENERIC_ROW_LEFT_SIZE_PX = 18;
2878
+ var GENERIC_ROW_RIGHT_SIZE_PX = 21;
2879
+ var MONO_ADVANCE_RATIO = 0.6;
2880
+ var STORAGE_CHAR_ADVANCE_PX = 26 * MONO_ADVANCE_RATIO;
2881
+ var ROW_PAD_X_PX = 26;
2882
+ var ROW_COL_GAP_PX = 16;
2883
+ var STORAGE_COL_GAP_PX = 32;
2884
+ var ROW_RIGHT_PAD_PX = 26;
2885
+ var DELIMITERS = [" -> ", " \u2192 ", " = ", ": ", ":"];
2886
+ function splitRow(row) {
2887
+ for (const d of DELIMITERS) {
2888
+ const idx = row.indexOf(d);
2889
+ if (idx > 0) {
2890
+ return {
2891
+ left: row.slice(0, idx).trim(),
2892
+ right: row.slice(idx + d.length).trim(),
2893
+ split: true
2894
+ };
2895
+ }
2896
+ }
2897
+ return { left: row.trim(), right: "", split: false };
2898
+ }
2899
+ function rowColumnWidth(text, size, mono) {
2900
+ return mono ? displayWidth(text) * size * MONO_ADVANCE_RATIO : textWidth(text, size);
2901
+ }
2902
+ function displayWidth(text) {
2903
+ let w = 0;
2904
+ for (const ch of text) {
2905
+ const code = ch.codePointAt(0) ?? 0;
2906
+ w += code >= 32 && code <= 126 ? 1 : 2;
2907
+ }
2908
+ return w;
2909
+ }
2910
+ function \u6841\u3067\u5272\u308B(text, \u6841) {
2911
+ let w = 0;
2912
+ let \u53D6\u3063\u305F = "";
2913
+ for (const ch of text) {
2914
+ const code = ch.codePointAt(0) ?? 0;
2915
+ const \u5B57\u306E\u6841 = code >= 32 && code <= 126 ? 1 : 2;
2916
+ if (w + \u5B57\u306E\u6841 > \u6841) break;
2917
+ w += \u5B57\u306E\u6841;
2918
+ \u53D6\u3063\u305F += ch;
2919
+ }
2920
+ return [\u53D6\u3063\u305F, text.slice(\u53D6\u3063\u305F.length)];
2921
+ }
2922
+ function \u6841\u3067\u7701\u304F(text, \u4E0A\u9650) {
2923
+ if (displayWidth(text) <= \u4E0A\u9650) return text;
2924
+ return `${\u6841\u3067\u5272\u308B(text, \u4E0A\u9650 - 1)[0]}\u2026`;
2925
+ }
2926
+ function requiredRowsWidth(rows, kind) {
2927
+ if (!rows || rows.length === 0) return 0;
2928
+ const splits = rows.map(splitRow);
2929
+ const \u4E00\u756A\u5E83\u3044 = (\u53D6\u308B) => splits.reduce((m, s) => Math.max(m, \u53D6\u308B(s)), 0);
2930
+ const storage = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, 26, true)) + STORAGE_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, 26, true)) + ROW_RIGHT_PAD_PX;
2931
+ const generic = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, GENERIC_ROW_LEFT_SIZE_PX, false)) + ROW_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, GENERIC_ROW_RIGHT_SIZE_PX, true)) + ROW_RIGHT_PAD_PX;
2932
+ if (kind === void 0) return Math.ceil(Math.max(storage, generic));
2933
+ return Math.ceil(kind === "storage" ? storage : generic);
2934
+ }
2875
2935
  var TITLE_MAX = 18;
2876
2936
  var TITLE_MIN = 9;
2877
2937
  var TITLE_RATIO = 0.17;
@@ -3052,7 +3112,38 @@ function fitArt(region, extent, art) {
3052
3112
  const dx = region.cx - s * \u7D75cx;
3053
3113
  const dy = region.cy - s * \u7D75cy;
3054
3114
  if (s >= 1 && dx === 0 && dy === 0) return \u7D44\u3080(1);
3055
- return /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `translate(${dx} ${dy}) scale(${s})`, children: \u7D44\u3080(s) });
3115
+ return (
3116
+ /*
3117
+ * 包みに印を付ける (#886)。 **`scale(` を持つ変換は他にもある** = `event` は目立たせる
3118
+ * ための脈動を `scale(0.78)` から `scale(1)` で描き、絵を箱に収める縮小ではない。
3119
+ * 祖先の変換を正規表現で見る形だと、その脈動まで「絵の縮小」 として数える。
3120
+ */
3121
+ /* @__PURE__ */ jsxRuntime.jsx("g", { "data-cdl-art-fit": "1", transform: `translate(${dx} ${dy}) scale(${s})`, children: \u7D44\u3080(s) })
3122
+ );
3123
+ }
3124
+ var \u5E2F\u306E\u9AD8\u3055\u306B\u5BFE\u3059\u308B\u4E0A\u9650 = 0.8;
3125
+ function \u7D75\u306E\u4E2D\u306E\u5B57\u306E\u5E45(text, size, letterSpacing = 0) {
3126
+ return Math.max(
3127
+ displayWidth(text) * size * MONO_ADVANCE_RATIO,
3128
+ textWidth(text, size, letterSpacing)
3129
+ );
3130
+ }
3131
+ function \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u5B57\u3089) {
3132
+ const \u623B\u3057 = Number.isFinite(\u500D\u7387) && \u500D\u7387 > 0 ? 1 / \u500D\u7387 : 1;
3133
+ let \u4E0A\u9650 = Number.POSITIVE_INFINITY;
3134
+ for (const \u5B572 of \u5B57\u3089) {
3135
+ if (!(Number.isFinite(\u5B572.size) && \u5B572.size > 0)) continue;
3136
+ const { \u5E45, \u9AD8\u3055 } = \u5B572.\u5E2F;
3137
+ if (Number.isFinite(\u9AD8\u3055) && \u9AD8\u3055 > 0) {
3138
+ \u4E0A\u9650 = Math.min(\u4E0A\u9650, \u9AD8\u3055 * \u5E2F\u306E\u9AD8\u3055\u306B\u5BFE\u3059\u308B\u4E0A\u9650 / \u5B572.size);
3139
+ }
3140
+ const \u5B9F\u5E45 = \u7D75\u306E\u4E2D\u306E\u5B57\u306E\u5E45(\u5B572.text, \u5B572.size, \u5B572.letterSpacing ?? 0);
3141
+ if (Number.isFinite(\u5E45) && \u5E45 > 0 && \u5B9F\u5E45 > 0) {
3142
+ \u4E0A\u9650 = Math.min(\u4E0A\u9650, \u5E45 / \u5B9F\u5E45);
3143
+ }
3144
+ }
3145
+ if (!Number.isFinite(\u4E0A\u9650)) return 1;
3146
+ return Math.max(1, Math.min(\u623B\u3057, \u4E0A\u9650));
3056
3147
  }
3057
3148
 
3058
3149
  // src/kinds/compact-title.ts
@@ -9607,66 +9698,6 @@ function recomputeContainedLanes(lanes, nodes) {
9607
9698
  });
9608
9699
  }
9609
9700
 
9610
- // src/kinds/row-align.ts
9611
- var GENERIC_ROW_LEFT_SIZE_PX = 18;
9612
- var GENERIC_ROW_RIGHT_SIZE_PX = 21;
9613
- var MONO_ADVANCE_RATIO = 0.6;
9614
- var STORAGE_CHAR_ADVANCE_PX = 26 * MONO_ADVANCE_RATIO;
9615
- var ROW_PAD_X_PX = 26;
9616
- var ROW_COL_GAP_PX = 16;
9617
- var STORAGE_COL_GAP_PX = 32;
9618
- var ROW_RIGHT_PAD_PX = 26;
9619
- var DELIMITERS = [" -> ", " \u2192 ", " = ", ": ", ":"];
9620
- function splitRow(row) {
9621
- for (const d of DELIMITERS) {
9622
- const idx = row.indexOf(d);
9623
- if (idx > 0) {
9624
- return {
9625
- left: row.slice(0, idx).trim(),
9626
- right: row.slice(idx + d.length).trim(),
9627
- split: true
9628
- };
9629
- }
9630
- }
9631
- return { left: row.trim(), right: "", split: false };
9632
- }
9633
- function rowColumnWidth(text, size, mono) {
9634
- return mono ? displayWidth(text) * size * MONO_ADVANCE_RATIO : textWidth(text, size);
9635
- }
9636
- function displayWidth(text) {
9637
- let w = 0;
9638
- for (const ch of text) {
9639
- const code = ch.codePointAt(0) ?? 0;
9640
- w += code >= 32 && code <= 126 ? 1 : 2;
9641
- }
9642
- return w;
9643
- }
9644
- function \u6841\u3067\u5272\u308B(text, \u6841) {
9645
- let w = 0;
9646
- let \u53D6\u3063\u305F = "";
9647
- for (const ch of text) {
9648
- const code = ch.codePointAt(0) ?? 0;
9649
- const \u5B57\u306E\u6841 = code >= 32 && code <= 126 ? 1 : 2;
9650
- if (w + \u5B57\u306E\u6841 > \u6841) break;
9651
- w += \u5B57\u306E\u6841;
9652
- \u53D6\u3063\u305F += ch;
9653
- }
9654
- return [\u53D6\u3063\u305F, text.slice(\u53D6\u3063\u305F.length)];
9655
- }
9656
- function \u6841\u3067\u7701\u304F(text, \u4E0A\u9650) {
9657
- if (displayWidth(text) <= \u4E0A\u9650) return text;
9658
- return `${\u6841\u3067\u5272\u308B(text, \u4E0A\u9650 - 1)[0]}\u2026`;
9659
- }
9660
- function requiredRowsWidth(rows, kind) {
9661
- if (!rows || rows.length === 0) return 0;
9662
- const splits = rows.map(splitRow);
9663
- const \u4E00\u756A\u5E83\u3044 = (\u53D6\u308B) => splits.reduce((m, s) => Math.max(m, \u53D6\u308B(s)), 0);
9664
- const storage = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, 26, true)) + STORAGE_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, 26, true)) + ROW_RIGHT_PAD_PX;
9665
- const generic = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, GENERIC_ROW_LEFT_SIZE_PX, false)) + ROW_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, GENERIC_ROW_RIGHT_SIZE_PX, true)) + ROW_RIGHT_PAD_PX;
9666
- if (kind === void 0) return Math.ceil(Math.max(storage, generic));
9667
- return Math.ceil(kind === "storage" ? storage : generic);
9668
- }
9669
-
9670
9701
  // src/layout/head-label.ts
9671
9702
  var \u7AEF\u306E\u5B57\u3092\u623B\u3059\u8DDD\u96E2 = 22;
9672
9703
  var \u7AEF\u306E\u5B57\u3068\u7DDA\u306E\u9699\u9593 = 8;
@@ -17311,15 +17342,6 @@ var \u540D\u306E\u5B57 = 10.5;
17311
17342
  var \u5024\u306E\u5B57 = 11;
17312
17343
  var \u884C\u306E\u9593\u9694 = 22;
17313
17344
  var \u898B\u51FA\u3057\u306E\u5E2F = 32;
17314
- var \u5E2F\u306B\u5BFE\u3059\u308B\u4E0A\u9650 = 0.8;
17315
- function \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(k) {
17316
- const \u623B\u3057 = Number.isFinite(k) && k > 0 ? 1 / k : 1;
17317
- const \u4E0A\u9650 = Math.min(
17318
- \u884C\u306E\u9593\u9694 * \u5E2F\u306B\u5BFE\u3059\u308B\u4E0A\u9650 / \u5024\u306E\u5B57,
17319
- \u898B\u51FA\u3057\u306E\u5E2F * \u5E2F\u306B\u5BFE\u3059\u308B\u4E0A\u9650 / \u898B\u51FA\u3057\u306E\u5B57
17320
- );
17321
- return Math.max(1, Math.min(\u623B\u3057, \u4E0A\u9650));
17322
- }
17323
17345
  var BLOCK_SHADOW = 6;
17324
17346
  var NFT_W = 220;
17325
17347
  var NFT_H = 240;
@@ -17330,6 +17352,15 @@ var CHAIN_BLOCK_H = 66;
17330
17352
  var CHAIN_LINK_W = 12;
17331
17353
  var CHAIN_SHADOW = 3;
17332
17354
  var CHAIN_BLOCK_SW = 2.5;
17355
+ var CHAIN_HEAD_H = 16;
17356
+ var CHAIN_TEXT_W = CHAIN_BLOCK_W - 8;
17357
+ var CHAIN_ROW_GAP = 14;
17358
+ var CHAIN_NO_SIZE = 10;
17359
+ var CONTRACT_CALL_SIZE = 11;
17360
+ var NFT_ID_SIZE = 15;
17361
+ var CHAIN_HASH_SIZE = 7;
17362
+ var BTC_NO_SIZE = 9;
17363
+ var ETH_NO_SIZE = 9;
17333
17364
  var NODE_HEX_R = 44;
17334
17365
  var NODE_PEER_R = 12;
17335
17366
  var NODE_PEER_GAP = 22;
@@ -17443,30 +17474,40 @@ function ShapeSmartContractNode({ node, active, lang }) {
17443
17474
  gearPts.push(`${gearCx + Math.cos(a3) * gearTipR},${gearCy + Math.sin(a3) * gearTipR}`);
17444
17475
  gearPts.push(`${gearCx + Math.cos(a4) * gearBodyR},${gearCy + Math.sin(a4) * gearBodyR}`);
17445
17476
  }
17446
- const art = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17447
- /* @__PURE__ */ jsxRuntime.jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
17448
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
17449
- [y + 40, y + 58, y + 76, y + 94].map((ly, i) => /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 16, y: ly - 3, width: docW - 32 - i * 22, height: 5, rx: 1, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.7, stroke: "none" }, i)),
17450
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 16, y: y + docH - 46, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u5B57\u5F15("smartContract.call") }),
17451
- /* @__PURE__ */ jsxRuntime.jsx(
17452
- "polygon",
17453
- {
17454
- points: gearPts.join(" "),
17455
- fill: "var(--cdl-tone-accent, #2d6a8f)",
17456
- stroke: frame.stroke,
17457
- strokeWidth: 1.2,
17458
- strokeLinejoin: "round",
17459
- children: /* @__PURE__ */ jsxRuntime.jsx("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${gearCx} ${gearCy}`, to: `360 ${gearCx} ${gearCy}`, dur: "8s", repeatCount: "indefinite" })
17460
- }
17461
- ),
17462
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: gearCx, cy: gearCy, r: gearBodyR * 0.4, fill: "var(--cdl-node-fill, #ffffff)", stroke: "none" })
17463
- ] });
17477
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
17478
+ {
17479
+ text: \u5B57\u5F15("smartContract.call"),
17480
+ size: CONTRACT_CALL_SIZE,
17481
+ \u5E2F: { \u5E45: docW - 32, \u9AD8\u3055: 18 }
17482
+ }
17483
+ ];
17484
+ const art = (\u500D\u7387) => {
17485
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
17486
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17487
+ /* @__PURE__ */ jsxRuntime.jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
17488
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
17489
+ [y + 40, y + 58, y + 76, y + 94].map((ly, i) => /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 16, y: ly - 3, width: docW - 32 - i * 22, height: 5, rx: 1, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.7, stroke: "none" }, i)),
17490
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "1", x: x + 16, y: y + docH - 46, fontSize: CONTRACT_CALL_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u5B57\u5F15("smartContract.call") }),
17491
+ /* @__PURE__ */ jsxRuntime.jsx(
17492
+ "polygon",
17493
+ {
17494
+ points: gearPts.join(" "),
17495
+ fill: "var(--cdl-tone-accent, #2d6a8f)",
17496
+ stroke: frame.stroke,
17497
+ strokeWidth: 1.2,
17498
+ strokeLinejoin: "round",
17499
+ children: /* @__PURE__ */ jsxRuntime.jsx("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${gearCx} ${gearCy}`, to: `360 ${gearCx} ${gearCy}`, dur: "8s", repeatCount: "indefinite" })
17500
+ }
17501
+ ),
17502
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: gearCx, cy: gearCy, r: gearBodyR * 0.4, fill: "var(--cdl-node-fill, #ffffff)", stroke: "none" })
17503
+ ] });
17504
+ };
17464
17505
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17465
17506
  fitArt(r, smartContractExtent(frame.strokeWidth), art),
17466
17507
  bottomLabel2(node, r.cx, r.label)
17467
17508
  ] });
17468
17509
  }
17469
- var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
17510
+ var \u5B57\u306E\u5E45 = (text, size) => \u7D75\u306E\u4E2D\u306E\u5B57\u306E\u5E45(text, size);
17470
17511
  var BLOCK_DEFAULT_FIELDS = [
17471
17512
  { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
17472
17513
  { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
@@ -17495,8 +17536,19 @@ function ShapeBlockchainBlockNode({ node, active, lang }) {
17495
17536
  };
17496
17537
  });
17497
17538
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
17539
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
17540
+ { text: \u898B\u51FA\u3057, size: \u898B\u51FA\u3057\u306E\u5B57, \u5E2F: { \u5E45: \u898B\u51FA\u3057\u306E\u5E45, \u9AD8\u3055: \u898B\u51FA\u3057\u306E\u5E2F } },
17541
+ ...fields.flatMap((f) => [
17542
+ { text: f.label, size: \u540D\u306E\u5B57, \u5E2F: { \u5E45: bw - 28, \u9AD8\u3055: \u884C\u306E\u9593\u9694 } },
17543
+ {
17544
+ text: f.value,
17545
+ size: \u5024\u306E\u5B57,
17546
+ \u5E2F: { \u5E45: bw - 28 - \u5B57\u306E\u5E45(f.label, \u540D\u306E\u5B57) - 8, \u9AD8\u3055: \u884C\u306E\u9593\u9694 }
17547
+ }
17548
+ ])
17549
+ ];
17498
17550
  const art = (\u500D\u7387) => {
17499
- const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387);
17551
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
17500
17552
  const \u984C\u306E\u5927\u304D\u3055 = \u898B\u51FA\u3057\u306E\u5B57 * \u500D;
17501
17553
  const \u540D\u306E\u5927\u304D\u3055 = \u540D\u306E\u5B57 * \u500D;
17502
17554
  const \u5024\u306E\u5927\u304D\u3055 = \u5024\u306E\u5B57 * \u500D;
@@ -17504,11 +17556,11 @@ function ShapeBlockchainBlockNode({ node, active, lang }) {
17504
17556
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
17505
17557
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 8, ...frame }),
17506
17558
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M ${x} ${y + 32} L ${x} ${y + 8} Q ${x} ${y}, ${x + 8} ${y} L ${x + bw - 8} ${y} Q ${x + bw} ${y}, ${x + bw} ${y + 8} L ${x + bw} ${y + 32} Z`, fill: "var(--cdl-tone-accent, #2d6a8f)", fillOpacity: 0.9, stroke: "none" }),
17507
- /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "blockchain-block-title", x: x + 14, y: y + 22, fontSize: \u984C\u306E\u5927\u304D\u3055, fontWeight: 700, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#ffffff", children: \u5E45\u3067\u5207\u308B(\u898B\u51FA\u3057, \u984C\u306E\u5927\u304D\u3055, \u898B\u51FA\u3057\u306E\u5E45, \u5B57\u306E\u5E45) }),
17559
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "blockchain-block-title", "data-cdl-counter-scaled": "1", x: x + 14, y: y + 22, fontSize: \u984C\u306E\u5927\u304D\u3055, fontWeight: 700, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#ffffff", children: \u5E45\u3067\u5207\u308B(\u898B\u51FA\u3057, \u984C\u306E\u5927\u304D\u3055, \u898B\u51FA\u3057\u306E\u5E45, \u5B57\u306E\u5E45) }),
17508
17560
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
17509
17561
  fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17510
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: y + 54 + i * \u884C\u306E\u9593\u9694, fontSize: \u540D\u306E\u5927\u304D\u3055, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-text-dim, #5a6270)", children: f.label }),
17511
- /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": `blockchain-block-${f.key}`, x: x + bw - 14, y: y + 54 + i * \u884C\u306E\u9593\u9694, fontSize: \u5024\u306E\u5927\u304D\u3055, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, \u5024\u306E\u5927\u304D\u3055, bw - 28 - \u5B57\u306E\u5E45(f.label, \u540D\u306E\u5927\u304D\u3055) - 8, \u5B57\u306E\u5E45) }),
17562
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "1", x: x + 14, y: y + 54 + i * \u884C\u306E\u9593\u9694, fontSize: \u540D\u306E\u5927\u304D\u3055, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-text-dim, #5a6270)", children: f.label }),
17563
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": `blockchain-block-${f.key}`, "data-cdl-counter-scaled": "1", x: x + bw - 14, y: y + 54 + i * \u884C\u306E\u9593\u9694, fontSize: \u5024\u306E\u5927\u304D\u3055, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, \u5024\u306E\u5927\u304D\u3055, bw - 28 - \u5B57\u306E\u5E45(f.label, \u540D\u306E\u5927\u304D\u3055) - 8, \u5B57\u306E\u5E45) }),
17512
17564
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: x + 14, y1: y + 60 + i * \u884C\u306E\u9593\u9694, x2: x + bw - 14, y2: y + 60 + i * \u884C\u306E\u9593\u9694, stroke: "var(--cdl-divider, #d4d4d8)", strokeWidth: 0.5, opacity: 0.5 })
17513
17565
  ] }, i)),
17514
17566
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -17531,38 +17583,45 @@ function ShapeBlockchainNode({ node, active }) {
17531
17583
  const linkW = CHAIN_LINK_W;
17532
17584
  const totalW = blockCount * blockW + (blockCount - 1) * linkW;
17533
17585
  const startX = cx - totalW / 2;
17534
- const art = /* @__PURE__ */ jsxRuntime.jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
17535
- const bx = startX + i * (blockW + linkW);
17536
- const isCurrent = i === blockCount - 1;
17537
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17538
- i > 0 && /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17539
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: frame.stroke, strokeWidth: 3, strokeLinecap: "round" }),
17540
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: bx - linkW / 2, cy, r: 2.5, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none", children: /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "opacity", values: "0.3;1;0.3", dur: `${1 + i * 0.2}s`, repeatCount: "indefinite" }) })
17541
- ] }),
17542
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
17543
- /* @__PURE__ */ jsxRuntime.jsx(
17544
- "rect",
17545
- {
17546
- "data-cdl-role": i === 0 ? "node-body" : void 0,
17547
- x: bx,
17548
- y: cy - blockH / 2,
17549
- width: blockW,
17550
- height: blockH,
17551
- rx: 4,
17552
- fill: isCurrent ? "var(--cdl-tone-accent, #2d6a8f)" : "var(--cdl-node-fill, #ffffff)",
17553
- stroke: frame.stroke,
17554
- strokeWidth: isCurrent ? 2.5 : 1.5
17555
- }
17556
- ),
17557
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx, y: cy - blockH / 2, width: blockW, height: 16, rx: 4, fill: isCurrent ? "#1a4a68" : "var(--cdl-divider, #d4d4d8)", fillOpacity: isCurrent ? 1 : 0.4, stroke: "none" }),
17558
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: bx + blockW / 2, y: cy - blockH / 2 + 12, fontSize: 10, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
17559
- "#",
17560
- 420 + i
17561
- ] }),
17562
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: bx + blockW / 2, y: cy + 8, fontSize: 14, fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: "#" }),
17563
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: bx + blockW / 2, y: cy + 22, fontSize: 7, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", opacity: 0.9, children: "0x\u2026" })
17564
- ] }, i);
17565
- }) });
17586
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
17587
+ { text: "#420", size: CHAIN_NO_SIZE, \u5E2F: { \u5E45: CHAIN_TEXT_W, \u9AD8\u3055: CHAIN_HEAD_H } },
17588
+ { text: "0x\u2026", size: CHAIN_HASH_SIZE, \u5E2F: { \u5E45: CHAIN_TEXT_W, \u9AD8\u3055: CHAIN_ROW_GAP } }
17589
+ ];
17590
+ const art = (\u500D\u7387) => {
17591
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
17592
+ return /* @__PURE__ */ jsxRuntime.jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
17593
+ const bx = startX + i * (blockW + linkW);
17594
+ const isCurrent = i === blockCount - 1;
17595
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17596
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17597
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: frame.stroke, strokeWidth: 3, strokeLinecap: "round" }),
17598
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: bx - linkW / 2, cy, r: 2.5, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none", children: /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "opacity", values: "0.3;1;0.3", dur: `${1 + i * 0.2}s`, repeatCount: "indefinite" }) })
17599
+ ] }),
17600
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
17601
+ /* @__PURE__ */ jsxRuntime.jsx(
17602
+ "rect",
17603
+ {
17604
+ "data-cdl-role": i === 0 ? "node-body" : void 0,
17605
+ x: bx,
17606
+ y: cy - blockH / 2,
17607
+ width: blockW,
17608
+ height: blockH,
17609
+ rx: 4,
17610
+ fill: isCurrent ? "var(--cdl-tone-accent, #2d6a8f)" : "var(--cdl-node-fill, #ffffff)",
17611
+ stroke: frame.stroke,
17612
+ strokeWidth: isCurrent ? 2.5 : 1.5
17613
+ }
17614
+ ),
17615
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx, y: cy - blockH / 2, width: blockW, height: CHAIN_HEAD_H, rx: 4, fill: isCurrent ? "#1a4a68" : "var(--cdl-divider, #d4d4d8)", fillOpacity: isCurrent ? 1 : 0.4, stroke: "none" }),
17616
+ /* @__PURE__ */ jsxRuntime.jsxs("text", { "data-cdl-counter-scaled": "1", x: bx + blockW / 2, y: cy - blockH / 2 + 12, fontSize: CHAIN_NO_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
17617
+ "#",
17618
+ 420 + i
17619
+ ] }),
17620
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: bx + blockW / 2, y: cy + 8, fontSize: 14, fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: "#" }),
17621
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "1", x: bx + blockW / 2, y: cy + 22, fontSize: CHAIN_HASH_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", opacity: 0.9, children: "0x\u2026" })
17622
+ ] }, i);
17623
+ }) });
17624
+ };
17566
17625
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17567
17626
  fitArt(r, chainExtent(), art),
17568
17627
  bottomLabel2(node, r.cx, r.label)
@@ -17580,33 +17639,39 @@ function ShapeBitcoinChainNode({ node, active }) {
17580
17639
  const linkW = CHAIN_LINK_W;
17581
17640
  const totalW = blockCount * blockW + (blockCount - 1) * linkW;
17582
17641
  const startX = cx - totalW / 2;
17583
- const art = /* @__PURE__ */ jsxRuntime.jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
17584
- const bx = startX + i * (blockW + linkW);
17585
- const isCurrent = i === blockCount - 1;
17586
- return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17587
- i > 0 && /* @__PURE__ */ jsxRuntime.jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: btcOrange, strokeWidth: 3.5, strokeLinecap: "round" }),
17588
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
17589
- /* @__PURE__ */ jsxRuntime.jsx(
17590
- "rect",
17591
- {
17592
- "data-cdl-role": i === 0 ? "node-body" : void 0,
17593
- x: bx,
17594
- y: cy - blockH / 2,
17595
- width: blockW,
17596
- height: blockH,
17597
- rx: 4,
17598
- fill: isCurrent ? btcOrange : "var(--cdl-node-fill, #ffffff)",
17599
- stroke: btcOrange,
17600
- strokeWidth: isCurrent ? 2.5 : 1.5
17601
- }
17602
- ),
17603
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: bx + blockW / 2, y: cy - 4, fontSize: 30, fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : btcOrange, fontFamily: "Georgia, serif", children: "\u20BF" }),
17604
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: bx + blockW / 2, y: cy + 16, fontSize: 9, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
17605
- "#",
17606
- 820 + i
17607
- ] })
17608
- ] }, i);
17609
- }) });
17642
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
17643
+ { text: "#820", size: BTC_NO_SIZE, \u5E2F: { \u5E45: CHAIN_TEXT_W, \u9AD8\u3055: 20 } }
17644
+ ];
17645
+ const art = (\u500D\u7387) => {
17646
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
17647
+ return /* @__PURE__ */ jsxRuntime.jsx("g", { children: Array.from({ length: blockCount }, (_, i) => i).map((i) => {
17648
+ const bx = startX + i * (blockW + linkW);
17649
+ const isCurrent = i === blockCount - 1;
17650
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17651
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("line", { x1: bx - linkW, y1: cy, x2: bx, y2: cy, stroke: btcOrange, strokeWidth: 3.5, strokeLinecap: "round" }),
17652
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: bx + 3, y: cy - blockH / 2 + 3, width: blockW, height: blockH, rx: 4, fill: frame.stroke, opacity: 0.18, stroke: "none" }),
17653
+ /* @__PURE__ */ jsxRuntime.jsx(
17654
+ "rect",
17655
+ {
17656
+ "data-cdl-role": i === 0 ? "node-body" : void 0,
17657
+ x: bx,
17658
+ y: cy - blockH / 2,
17659
+ width: blockW,
17660
+ height: blockH,
17661
+ rx: 4,
17662
+ fill: isCurrent ? btcOrange : "var(--cdl-node-fill, #ffffff)",
17663
+ stroke: btcOrange,
17664
+ strokeWidth: isCurrent ? 2.5 : 1.5
17665
+ }
17666
+ ),
17667
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: bx + blockW / 2, y: cy - 4, fontSize: 30, fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : btcOrange, fontFamily: "Georgia, serif", children: "\u20BF" }),
17668
+ /* @__PURE__ */ jsxRuntime.jsxs("text", { "data-cdl-counter-scaled": "1", x: bx + blockW / 2, y: cy + 16, fontSize: BTC_NO_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
17669
+ "#",
17670
+ 820 + i
17671
+ ] })
17672
+ ] }, i);
17673
+ }) });
17674
+ };
17610
17675
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17611
17676
  fitArt(r, chainExtent(), art),
17612
17677
  bottomLabel2(node, r.cx, r.label)
@@ -17646,7 +17711,7 @@ function ShapeEthereumChainNode({ node, active }) {
17646
17711
  }
17647
17712
  ),
17648
17713
  /* @__PURE__ */ jsxRuntime.jsx(EthereumDiamond, { cx: bx + blockW / 2, cy: cy - 6, h: 16, colors: iconColors }),
17649
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: bx + blockW / 2, y: cy + 22, fontSize: 9, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, textAnchor: "middle", fill: isCurrent ? "#ffffff" : "var(--cdl-text-dim, #5a6270)", children: [
17714
+ /* @__PURE__ */ jsxRuntime.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: [
17650
17715
  "#",
17651
17716
  21400 + i
17652
17717
  ] })
@@ -17825,39 +17890,46 @@ function ShapeNftNode({ node, active }) {
17825
17890
  const artH = cardH * 0.72;
17826
17891
  const artCx = x + cardW / 2;
17827
17892
  const artCy = y + artH / 2;
17828
- const art = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17829
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 4, y: y + 4, width: cardW, height: cardH, rx: 14, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
17830
- /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: cardW, height: cardH, rx: 14, ...frame }),
17831
- /* @__PURE__ */ jsxRuntime.jsx(
17832
- "path",
17833
- {
17834
- d: `M ${x} ${y + artH} L ${x} ${y + 14} Q ${x} ${y}, ${x + 14} ${y} L ${x + cardW - 14} ${y} Q ${x + cardW} ${y}, ${x + cardW} ${y + 14} L ${x + cardW} ${y + artH} Z`,
17835
- fill: "var(--cdl-tone-accent, #2d6a8f)",
17836
- fillOpacity: 0.15,
17837
- stroke: "none"
17838
- }
17839
- ),
17840
- /* @__PURE__ */ jsxRuntime.jsx(
17841
- "text",
17842
- {
17843
- x: artCx,
17844
- y: artCy + 24,
17845
- fontSize: 68,
17846
- fontWeight: 900,
17847
- letterSpacing: 4,
17848
- textAnchor: "middle",
17849
- fill: "var(--cdl-tone-accent, #2d6a8f)",
17850
- fontFamily: "Georgia, serif",
17851
- children: "NFT"
17852
- }
17853
- ),
17854
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: x, y1: y + artH, x2: x + cardW, y2: y + artH, stroke: frame.stroke, strokeWidth: 1, opacity: 0.5 }),
17855
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 16, y: y + artH + 30, fontSize: 15, fontWeight: 700, fill: "var(--cdl-text, #1a1f2a)", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "#1024" }),
17856
- /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + cardW - 20}, ${y + artH + 22})`, children: [
17857
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 0, cy: 0, r: 10, fill: "#27c93f", stroke: "#ffffff", strokeWidth: 2 }),
17858
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M -4 0 L -1 3 L 4 -3", fill: "none", stroke: "#ffffff", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" })
17859
- ] })
17860
- ] });
17893
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
17894
+ { text: "#1024", size: NFT_ID_SIZE, \u5E2F: { \u5E45: cardW - 16 - 34, \u9AD8\u3055: cardH - artH } }
17895
+ ];
17896
+ const art = (\u500D\u7387) => {
17897
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
17898
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17899
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 4, y: y + 4, width: cardW, height: cardH, rx: 14, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
17900
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: cardW, height: cardH, rx: 14, ...frame }),
17901
+ /* @__PURE__ */ jsxRuntime.jsx(
17902
+ "path",
17903
+ {
17904
+ d: `M ${x} ${y + artH} L ${x} ${y + 14} Q ${x} ${y}, ${x + 14} ${y} L ${x + cardW - 14} ${y} Q ${x + cardW} ${y}, ${x + cardW} ${y + 14} L ${x + cardW} ${y + artH} Z`,
17905
+ fill: "var(--cdl-tone-accent, #2d6a8f)",
17906
+ fillOpacity: 0.15,
17907
+ stroke: "none"
17908
+ }
17909
+ ),
17910
+ /* @__PURE__ */ jsxRuntime.jsx(
17911
+ "text",
17912
+ {
17913
+ "data-cdl-counter-scaled": "0",
17914
+ x: artCx,
17915
+ y: artCy + 24,
17916
+ fontSize: 68,
17917
+ fontWeight: 900,
17918
+ letterSpacing: 4,
17919
+ textAnchor: "middle",
17920
+ fill: "var(--cdl-tone-accent, #2d6a8f)",
17921
+ fontFamily: "Georgia, serif",
17922
+ children: "NFT"
17923
+ }
17924
+ ),
17925
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: x, y1: y + artH, x2: x + cardW, y2: y + artH, stroke: frame.stroke, strokeWidth: 1, opacity: 0.5 }),
17926
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "1", x: x + 16, y: y + artH + 30, fontSize: NFT_ID_SIZE * \u500D, fontWeight: 700, fill: "var(--cdl-text, #1a1f2a)", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "#1024" }),
17927
+ /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + cardW - 20}, ${y + artH + 22})`, children: [
17928
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 0, cy: 0, r: 10, fill: "#27c93f", stroke: "#ffffff", strokeWidth: 2 }),
17929
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M -4 0 L -1 3 L 4 -3", fill: "none", stroke: "#ffffff", strokeWidth: 2.5, strokeLinecap: "round", strokeLinejoin: "round" })
17930
+ ] })
17931
+ ] });
17932
+ };
17861
17933
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17862
17934
  fitArt(r, nftExtent(frame.strokeWidth), art),
17863
17935
  bottomLabel2(node, r.cx, r.label)
@@ -17986,7 +18058,7 @@ function ShapeBankNode({ node, active }) {
17986
18058
  }),
17987
18059
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M ${x - BANK_BODY_OUT} ${y + pedimentH} L ${r.cx} ${y - BANK_PEDIMENT_RISE} L ${x + bldW + BANK_BODY_OUT} ${y + pedimentH} Z`, fill: "var(--cdl-node-fill, #ffffff)", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
17988
18060
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: r.cx, cy: y + pedimentH / 2 + 4, r: 14, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: frame.stroke, strokeWidth: 1.5 }),
17989
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: r.cx, y: y + pedimentH / 2 + 10, fontSize: 18, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "Georgia, serif", children: "$" }),
18061
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: r.cx, y: y + pedimentH / 2 + 10, fontSize: 18, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "Georgia, serif", children: "$" }),
17990
18062
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - 4, y: y + pedimentH, width: bldW + 8, height: architraveH, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.4, stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
17991
18063
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
17992
18064
  const colCx = x + 12 + colGap + i * (colW + colGap) + colW / 2;
@@ -18052,7 +18124,7 @@ function ShapeTrustBankNode({ node, active, lang }) {
18052
18124
  return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: r.cx - w / 2, y: y + bldH + i * BANK_STEP_DY, width: w, height: BANK_STEP_H, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.5 + i * 0.15, stroke: frame.stroke, strokeWidth: BANK_STEP_SW }, i);
18053
18125
  }),
18054
18126
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M ${x - 6} ${y + pedimentH} L ${r.cx} ${y + 2} L ${x + bldW + 6} ${y + pedimentH} Z`, fill: "var(--cdl-node-fill, #ffffff)", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
18055
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: r.cx, y: y + pedimentH - 8, fontSize: 15, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: \u5B57\u5F15("trustBank.sign") }),
18127
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: r.cx, y: y + pedimentH - 8, fontSize: 15, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: \u5B57\u5F15("trustBank.sign") }),
18056
18128
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - 4, y: y + pedimentH, width: bldW + 8, height: architraveH, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.4, stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
18057
18129
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
18058
18130
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -18126,6 +18198,9 @@ function ShapeCreditCardNode({ node, active }) {
18126
18198
  }
18127
18199
  var BROKERAGE_TICK_H = 12;
18128
18200
  var BROKERAGE_LOGO_H = 26;
18201
+ var BROKERAGE_TICK_INNER_H = 8;
18202
+ var BROKERAGE_TICKER_SIZE = 5.5;
18203
+ var BROKERAGE_SIGN_SIZE = 12;
18129
18204
  var BROKERAGE_GRID_TOP = 62;
18130
18205
  var BROKERAGE_CELL_W = 14;
18131
18206
  var BROKERAGE_CELL_H = 18;
@@ -18174,35 +18249,46 @@ function ShapeBrokerageNode({ node, active, lang }) {
18174
18249
  );
18175
18250
  const gridStartX = x + (w - (cols * cellW + (cols - 1) * gapX)) / 2;
18176
18251
  const goldCells = /* @__PURE__ */ new Set([`0,1`, `0,4`, `1,2`, `2,3`, `3,5`]);
18177
- const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18178
- /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + h + BROKERAGE_SHADOW_DY, rx: w * BROKERAGE_SHADOW_RX_RATIO, ry: BROKERAGE_SHADOW_RY, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
18179
- /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: w, height: h, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
18180
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
18181
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
18182
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
18183
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 9, fontSize: 5.5, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
18184
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
18185
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
18186
- Array.from({ length: rows }).map(
18187
- (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
18188
- const wx = gridStartX + ci * (cellW + gapX);
18189
- const wy = gridStartY + ri * (cellH + gapY);
18190
- const isGold = goldCells.has(`${ri},${ci}`);
18191
- return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: wx, y: wy, width: cellW, height: cellH, fill: isGold ? "#e5c07b" : accentDarker }, `w${ri}${ci}`);
18192
- })
18193
- ),
18194
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + h - BROKERAGE_BASE_H, width: w, height: 12, fill: accentDarker }),
18195
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y + h - 8, r: 12, fill: "#a89d8f", stroke: accentDarker, strokeWidth: 1.5 }),
18196
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y + h - 8, r: 9, fill: "#8b949e", stroke: accentDarker, strokeWidth: 1 }),
18197
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx - 9, y1: y + h - 8, x2: cx + 9, y2: y + h - 8, stroke: accentDarker, strokeWidth: 0.8 }),
18198
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx, y1: y + h - 17, x2: cx, y2: y + h - 1, stroke: accentDarker, strokeWidth: 0.8 }),
18199
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_FLOOR_OUT, y: y + h + BROKERAGE_FLOOR_DY, width: w + BROKERAGE_FLOOR_OUT * 2, height: BROKERAGE_FLOOR_H, fill: "#5a6270", stroke: "none" })
18200
- ] });
18252
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
18253
+ {
18254
+ text: \u5B57\u5F15("brokerage.ticker"),
18255
+ size: BROKERAGE_TICKER_SIZE,
18256
+ \u5E2F: { \u5E45: w - 4, \u9AD8\u3055: BROKERAGE_TICK_INNER_H }
18257
+ }
18258
+ ];
18259
+ const \u7D75 = (\u500D\u7387) => {
18260
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
18261
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18262
+ /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + h + BROKERAGE_SHADOW_DY, rx: w * BROKERAGE_SHADOW_RX_RATIO, ry: BROKERAGE_SHADOW_RY, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
18263
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: w, height: h, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
18264
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
18265
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
18266
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
18267
+ /* @__PURE__ */ jsxRuntime.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") }),
18268
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
18269
+ /* @__PURE__ */ jsxRuntime.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") }),
18270
+ Array.from({ length: rows }).map(
18271
+ (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
18272
+ const wx = gridStartX + ci * (cellW + gapX);
18273
+ const wy = gridStartY + ri * (cellH + gapY);
18274
+ const isGold = goldCells.has(`${ri},${ci}`);
18275
+ return /* @__PURE__ */ jsxRuntime.jsx("rect", { x: wx, y: wy, width: cellW, height: cellH, fill: isGold ? "#e5c07b" : accentDarker }, `w${ri}${ci}`);
18276
+ })
18277
+ ),
18278
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + h - BROKERAGE_BASE_H, width: w, height: 12, fill: accentDarker }),
18279
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y + h - 8, r: 12, fill: "#a89d8f", stroke: accentDarker, strokeWidth: 1.5 }),
18280
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: y + h - 8, r: 9, fill: "#8b949e", stroke: accentDarker, strokeWidth: 1 }),
18281
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx - 9, y1: y + h - 8, x2: cx + 9, y2: y + h - 8, stroke: accentDarker, strokeWidth: 0.8 }),
18282
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx, y1: y + h - 17, x2: cx, y2: y + h - 1, stroke: accentDarker, strokeWidth: 0.8 }),
18283
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_FLOOR_OUT, y: y + h + BROKERAGE_FLOOR_DY, width: w + BROKERAGE_FLOOR_OUT * 2, height: BROKERAGE_FLOOR_H, fill: "#5a6270", stroke: "none" })
18284
+ ] });
18285
+ };
18201
18286
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18202
18287
  fitArt(r, \u5E83\u304C\u308A, \u7D75),
18203
18288
  bottomLabel3(node, r.cx, r.label)
18204
18289
  ] });
18205
18290
  }
18291
+ var EXCHANGE_SUB_SIZE = 8;
18206
18292
  function ShapeExchangeNode({ node, active, lang }) {
18207
18293
  const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
18208
18294
  const frame = commonFrame5(active);
@@ -18230,7 +18316,7 @@ function ShapeExchangeNode({ node, active, lang }) {
18230
18316
  const hexPath = hexPoints.map((p, i) => `${i === 0 ? "M" : "L"} ${p.x} ${p.y}`).join(" ") + " Z";
18231
18317
  const \u7BC0\u70B9 = Math.max(0, nodeR) + 8 + 1.5 / 2;
18232
18318
  const \u516D\u89D2 = hexR + frame.strokeWidth / 2;
18233
- const \u5B57\u4E0B = 26 + 8 * 0.25;
18319
+ const \u5B57\u4E0B = 26 + EXCHANGE_SUB_SIZE * 0.25;
18234
18320
  const \u5916 = Math.max(\u7BC0\u70B9, \u516D\u89D2);
18235
18321
  const \u305A\u308C = cy - r.cy;
18236
18322
  const \u5E83\u304C\u308A = {
@@ -18239,21 +18325,27 @@ function ShapeExchangeNode({ node, active, lang }) {
18239
18325
  \u5DE6: \u5916,
18240
18326
  \u53F3: \u5916
18241
18327
  };
18242
- const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18243
- nodes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx, y1: cy, x2: n.cx, y2: n.cy, stroke: accentDarker, strokeWidth: 1.5, strokeDasharray: "3 2" }, `l${i}`)),
18244
- nodes.map((n, i) => {
18245
- const isGreen = i % 2 === 0;
18246
- return /* @__PURE__ */ jsxRuntime.jsxs("circle", { r: 4, fill: isGreen ? "#4ea36a" : "#c15a4a", stroke: "none", children: [
18247
- /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "cx", values: isGreen ? `${n.cx};${cx};${n.cx}` : `${cx};${n.cx};${cx}`, dur: `${1.5 + i % 3 * 0.3}s`, repeatCount: "indefinite", begin: `${i * 0.15}s` }),
18248
- /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "cy", values: isGreen ? `${n.cy};${cy};${n.cy}` : `${cy};${n.cy};${cy}`, dur: `${1.5 + i % 3 * 0.3}s`, repeatCount: "indefinite", begin: `${i * 0.15}s` })
18249
- ] }, `d${i}`);
18250
- }),
18251
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
18252
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
18253
- /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
18254
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
18255
- nodes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
18256
- ] });
18328
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = [
18329
+ { text: \u5B57\u5F15("exchange.sub"), size: EXCHANGE_SUB_SIZE, \u5E2F: { \u5E45: \u5916 * 2, \u9AD8\u3055: 14 } }
18330
+ ];
18331
+ const \u7D75 = (\u500D\u7387) => {
18332
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
18333
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18334
+ nodes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("line", { x1: cx, y1: cy, x2: n.cx, y2: n.cy, stroke: accentDarker, strokeWidth: 1.5, strokeDasharray: "3 2" }, `l${i}`)),
18335
+ nodes.map((n, i) => {
18336
+ const isGreen = i % 2 === 0;
18337
+ return /* @__PURE__ */ jsxRuntime.jsxs("circle", { r: 4, fill: isGreen ? "#4ea36a" : "#c15a4a", stroke: "none", children: [
18338
+ /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "cx", values: isGreen ? `${n.cx};${cx};${n.cx}` : `${cx};${n.cx};${cx}`, dur: `${1.5 + i % 3 * 0.3}s`, repeatCount: "indefinite", begin: `${i * 0.15}s` }),
18339
+ /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "cy", values: isGreen ? `${n.cy};${cy};${n.cy}` : `${cy};${n.cy};${cy}`, dur: `${1.5 + i % 3 * 0.3}s`, repeatCount: "indefinite", begin: `${i * 0.15}s` })
18340
+ ] }, `d${i}`);
18341
+ }),
18342
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
18343
+ /* @__PURE__ */ jsxRuntime.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") }),
18344
+ /* @__PURE__ */ jsxRuntime.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" }),
18345
+ /* @__PURE__ */ jsxRuntime.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") }),
18346
+ nodes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
18347
+ ] });
18348
+ };
18257
18349
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18258
18350
  fitArt(r, \u5E83\u304C\u308A, \u7D75),
18259
18351
  bottomLabel3(node, r.cx, r.label)
@@ -18308,13 +18400,13 @@ function ShapeAtmNode({ node, active, lang }) {
18308
18400
  const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18309
18401
  /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + totalH + ATM_SHADOW_DY, rx: totalW * ATM_SHADOW_RX_RATIO, ry: ATM_SHADOW_RY, fill: frame.stroke, opacity: 0.15, stroke: "none" }),
18310
18402
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
18311
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
18403
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
18312
18404
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x: atmX, y: atmY, width: atmW, height: atmH, rx: 6, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
18313
18405
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
18314
18406
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 8, y: 10, width: ATM_PANEL_W - 16, height: 52, rx: 3, fill: "#0f1830", stroke: "#000", strokeWidth: 1.5 }),
18315
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
18316
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
18317
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
18407
+ /* @__PURE__ */ jsxRuntime.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" }),
18408
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
18409
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
18318
18410
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 8, y: 68, width: ATM_PANEL_W - 16, height: 42, rx: 2, fill: "#8b949e", stroke: "#5a6270", strokeWidth: 1 }),
18319
18411
  (() => {
18320
18412
  const keys = [
@@ -18340,7 +18432,7 @@ function ShapeAtmNode({ node, active, lang }) {
18340
18432
  const ky = 74 + row * (keyH + 2);
18341
18433
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18342
18434
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
18343
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
18435
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: kx + keyW / 2, y: ky + 7, fontSize: (
18344
18436
  /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
18345
18437
  i === keys.length - 1 ? 6 : 7
18346
18438
  ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
@@ -18349,7 +18441,7 @@ function ShapeAtmNode({ node, active, lang }) {
18349
18441
  })(),
18350
18442
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 12, y: 116, width: ATM_PANEL_W - 24, height: 8, rx: 1.5, fill: "#0f1830", stroke: accentDarker, strokeWidth: 1 }),
18351
18443
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
18352
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
18444
+ /* @__PURE__ */ jsxRuntime.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") }),
18353
18445
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
18354
18446
  ] }),
18355
18447
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -18522,7 +18614,7 @@ function ShapeWarehouseNode({ node, active, lang }) {
18522
18614
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M ${x - WAREHOUSE_ROOF_OUT} ${y + roofH} L ${x + 12} ${y + 2} L ${x + bw - 12} ${y + 2} L ${x + bw + WAREHOUSE_ROOF_OUT} ${y + roofH} Z`, fill: "#5a6270", stroke: accentDarker, strokeWidth: WAREHOUSE_ROOF_SW, strokeLinejoin: "round" }),
18523
18615
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y: y + roofH, width: bw, height: bh - roofH - 12, fill: "#a89d8f", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
18524
18616
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
18525
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("warehouse.sign") }),
18617
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("warehouse.sign") }),
18526
18618
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
18527
18619
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
18528
18620
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -18677,6 +18769,10 @@ var API_ROW_PITCH_MIN = 30;
18677
18769
  var API_ROW_BOTTOM_PAD = 12;
18678
18770
  var API_ROWS = 3;
18679
18771
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
18772
+ var API_PATH_SIZE = 12;
18773
+ var API_SIGN_SIZE = 14;
18774
+ var API_METHOD_BOX_W = 54;
18775
+ var API_METHOD_TEXT_W = 48;
18680
18776
  var API_W_MIN = 200;
18681
18777
  var API_W_MAX = 300;
18682
18778
  function ShapeApiGatewayNode({ node, active, lang }) {
@@ -18691,28 +18787,37 @@ function ShapeApiGatewayNode({ node, active, lang }) {
18691
18787
  const x = cx - bw / 2;
18692
18788
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
18693
18789
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
18694
- const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
18790
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * API_METHOD_TEXT_W / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
18695
18791
  const rowPitch = Math.max(
18696
18792
  API_ROW_PITCH_MIN,
18697
18793
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
18698
18794
  );
18699
- const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18700
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + DROP_SHADOW_D, y: y + DROP_SHADOW_D, width: bw, height: bh, rx: 10, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
18701
- /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
18702
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
18703
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 24, fontSize: 14, fontWeight: 700, letterSpacing: 3, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("apiGateway.sign") }),
18704
- [
18705
- { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
18706
- { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
18707
- { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
18708
- ].map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
18709
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
18710
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
18711
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 27, y: 16, fontSize: \u7A2E\u985E\u306E\u5B57(e.method), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
18712
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
18713
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: bw - 44, cy: 12, r: 4, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: `${1.2 + i * 0.3}s`, repeatCount: "indefinite" }) })
18714
- ] }, i))
18715
- ] });
18795
+ const \u884C\u3089 = [
18796
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
18797
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
18798
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
18799
+ ];
18800
+ const \u6253\u3061\u6D88\u3059\u5B57\u3089 = \u884C\u3089.map((e) => ({
18801
+ text: e.path,
18802
+ size: API_PATH_SIZE,
18803
+ \u5E2F: { \u5E45: bw - 32 - 64 - 16, \u9AD8\u3055: API_ROW_H }
18804
+ }));
18805
+ const \u7D75 = (\u500D\u7387) => {
18806
+ const \u500D = \u6253\u3061\u6D88\u3057\u306E\u500D\u7387(\u500D\u7387, \u6253\u3061\u6D88\u3059\u5B57\u3089);
18807
+ return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18808
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + DROP_SHADOW_D, y: y + DROP_SHADOW_D, width: bw, height: bh, rx: 10, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
18809
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
18810
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
18811
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: cx, y: y + 24, fontSize: API_SIGN_SIZE, fontWeight: 700, letterSpacing: 3, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("apiGateway.sign") }),
18812
+ \u884C\u3089.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
18813
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
18814
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: API_METHOD_BOX_W, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
18815
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: 27, y: 16, fontSize: \u7A2E\u985E\u306E\u5B57(e.method), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
18816
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "1", x: 64, y: 16, fontSize: API_PATH_SIZE * \u500D, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
18817
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: bw - 44, cy: 12, r: 4, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: `${1.2 + i * 0.3}s`, repeatCount: "indefinite" }) })
18818
+ ] }, i))
18819
+ ] });
18820
+ };
18716
18821
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18717
18822
  fitArt(r, \u5E83\u304C\u308A, \u7D75),
18718
18823
  bottomLabel4(node, r.cx, r.label)
@@ -18932,11 +19037,11 @@ function ShapeNotaryNode({ node, active }) {
18932
19037
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: chestX - 14, y1: chestY + 14, x2: chestX + 14, y2: chestY + 14, stroke: "#8b949e", strokeWidth: 1 }),
18933
19038
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: chestX - 14, y1: chestY + 22, x2: chestX + 8, y2: chestY + 22, stroke: "#8b949e", strokeWidth: 1 }),
18934
19039
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: chestX - 14, y1: chestY + 34, x2: chestX + 2, y2: chestY + 34, stroke: "#0f3450", strokeWidth: 1.5 }),
18935
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: chestX + 6, y: chestY + 37, fontSize: 8, fill: "#0f3450", fontFamily: "cursive", fontStyle: "italic", children: "\u2713" }),
19040
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: chestX + 6, y: chestY + 37, fontSize: 8, fill: "#0f3450", fontFamily: "cursive", fontStyle: "italic", children: "\u2713" }),
18936
19041
  haloBadge(bx, by, `nt-halo-${node.id}`, "#c15a4a", /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
18937
19042
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 0, cy: 0, r: 12, fill: "#c15a4a", stroke: "none" }),
18938
19043
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 0, cy: 0, r: 8, fill: "none", stroke: "#ffffff", strokeWidth: 1.2 }),
18939
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 4, fontFamily: "Georgia, serif", fontSize: 10, fontWeight: 700, fill: "#ffffff", textAnchor: "middle", children: "\u5370" })
19044
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: 0, y: 4, fontFamily: "Georgia, serif", fontSize: 10, fontWeight: 700, fill: "#ffffff", textAnchor: "middle", children: "\u5370" })
18940
19045
  ] }))
18941
19046
  ] })),
18942
19047
  bottomLabel5(node, r.cx, r.label)
@@ -18995,7 +19100,7 @@ function ShapeCustomerServiceNode({ node, active }) {
18995
19100
  p.render,
18996
19101
  collarV(cx, cy, p.strokeColor),
18997
19102
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: chestX - 22, y: chestY + 5, width: 44, height: 22, rx: 11, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 2 }),
18998
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: chestX, y: chestY + 20, fontSize: 12, fontWeight: 900, fill: "#5a3a10", textAnchor: "middle", letterSpacing: 2, children: "24H" }),
19103
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-counter-scaled": "0", x: chestX, y: chestY + 20, fontSize: 12, fontWeight: 900, fill: "#5a3a10", textAnchor: "middle", letterSpacing: 2, children: "24H" }),
18999
19104
  haloBadge(bx, by, `cs-halo-${node.id}`, "#a67c00", /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
19000
19105
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M -11 4 C -11 -10, -6 -12, 0 -12 C 6 -12, 11 -10, 11 4", fill: "none", stroke: "#a67c00", strokeWidth: 2.5, strokeLinecap: "round" }),
19001
19106
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: -13, y: 2, width: 6, height: 11, rx: 1.5, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),