@cardenelabs/cdl 0.57.0 → 0.58.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.cjs CHANGED
@@ -353,6 +353,122 @@ function inputDefaultValue(input) {
353
353
  }
354
354
  }
355
355
 
356
+ // src/lang.ts
357
+ function resolveLang(value) {
358
+ return value === "ja" ? "ja" : "en";
359
+ }
360
+ var en = {
361
+ /** `shape-terminal` の 2 行目 (命令の出力) */
362
+ "terminal.output": "\u2192 12 chunks in 1.8s",
363
+ /** `shape-code-block` の札の file 名 */
364
+ "codeBlock.fileName": "utils.ts",
365
+ /** `shape-kanban-card` の課題の番号 */
366
+ "kanbanCard.id": "CAR-1111",
367
+ /** `shape-kanban-card` の状態の札 */
368
+ "kanbanCard.status": "IN PROG",
369
+ /** `shape-kanban-card` の題の下の説明 */
370
+ "kanbanCard.task": "shape-driven kind \u5B9F\u88C5",
371
+ /** `shape-kanban-card` の期日 */
372
+ "kanbanCard.due": "Jul 10",
373
+ /** `shape-smart-contract` の契約の本文の 1 行 */
374
+ "smartContract.call": "function execute()",
375
+ /** `shape-blockchain-block` の題を渡さない時の見出し */
376
+ "blockchainBlock.title": "Block #421,873",
377
+ /** `shape-blockchain-block` の 1 行目の名前 (塊を識別する値) */
378
+ "blockchainBlock.hash": "hash",
379
+ /** `shape-blockchain-block` の 2 行目の名前 (1 つ前の塊の識別値) */
380
+ "blockchainBlock.prev": "prev",
381
+ /** `shape-blockchain-block` の 3 行目の名前 (取引をまとめた木の根) */
382
+ "blockchainBlock.merkle": "merkle",
383
+ /** `shape-blockchain-block` の 4 行目の名前 (採掘で試した値) */
384
+ "blockchainBlock.nonce": "nonce",
385
+ /** `shape-blockchain-block` の 5 行目の名前 (取引の件数) */
386
+ "blockchainBlock.tx": "tx",
387
+ /** `shape-blockchain-block` の 5 行目の値 */
388
+ "blockchainBlock.txCount": "142 tx",
389
+ /** `shape-rpc-node` の稼働の札 */
390
+ "rpcNode.status": "RPC ONLINE",
391
+ /** `shape-trust-bank` の看板 */
392
+ "trustBank.sign": "TRUST",
393
+ /** `shape-payment-provider` の看板 */
394
+ "paymentProvider.sign": "PAY",
395
+ /** `shape-payment-provider` の状態の札 */
396
+ "paymentProvider.status": "PROCESSING",
397
+ /** `shape-brokerage` の株価の帯 */
398
+ "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
399
+ /** `shape-brokerage` の看板 */
400
+ "brokerage.sign": "$ SECURITIES",
401
+ /** `shape-exchange` の看板 */
402
+ "exchange.sign": "EXCHANGE",
403
+ /** `shape-exchange` の看板の下の札 */
404
+ "exchange.sub": "clearing",
405
+ /** `shape-atm` の天井の看板 */
406
+ "atm.sign": "ATM CORNER",
407
+ /** `shape-atm` の画面の案内 */
408
+ "atm.screen": "SELECT AMOUNT",
409
+ /** `shape-atm` の決める鍵 */
410
+ "atm.ok": "OK",
411
+ /** `shape-atm` のカードを入れる口の札 */
412
+ "atm.cardSlot": "CARD SLOT",
413
+ /** `shape-storefront` の看板 */
414
+ "storefront.sign": "SHOP",
415
+ /** `shape-storefront` の扉の札 */
416
+ "storefront.open": "OPEN",
417
+ /** `shape-warehouse` の看板 */
418
+ "warehouse.sign": "WAREHOUSE",
419
+ /** `shape-api-gateway` の看板 */
420
+ "apiGateway.sign": "API GATEWAY",
421
+ /** `shape-api-gateway` の 3 行目の要求の種類 */
422
+ "apiGateway.delete": "DEL",
423
+ /** `shape-api-gateway` の 1 行目の宛先 */
424
+ "apiGateway.users": "/users",
425
+ /** `shape-api-gateway` の 2 行目の宛先 */
426
+ "apiGateway.orders": "/orders",
427
+ /** `shape-api-gateway` の 3 行目の宛先 */
428
+ "apiGateway.session": "/session"
429
+ };
430
+ var ja = {
431
+ "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
432
+ "codeBlock.fileName": "\u5171\u901A.ts",
433
+ "kanbanCard.id": "#1111",
434
+ "kanbanCard.status": "\u9032\u884C\u4E2D",
435
+ "kanbanCard.task": "\u5F62\u3092\u5B9F\u88C5",
436
+ "kanbanCard.due": "7/10",
437
+ "smartContract.call": "\u81EA\u52D5\u3067\u5B9F\u884C\u3059\u308B",
438
+ "blockchainBlock.title": "\u30D6\u30ED\u30C3\u30AF #421,873",
439
+ "blockchainBlock.hash": "\u30CF\u30C3\u30B7\u30E5",
440
+ "blockchainBlock.prev": "\u76F4\u524D",
441
+ "blockchainBlock.merkle": "\u6728\u306E\u6839",
442
+ "blockchainBlock.nonce": "\u30CE\u30F3\u30B9",
443
+ "blockchainBlock.tx": "\u53D6\u5F15",
444
+ "blockchainBlock.txCount": "142 \u4EF6",
445
+ "rpcNode.status": "RPC \u7A3C\u50CD\u4E2D",
446
+ "trustBank.sign": "\u4FE1\u8A17",
447
+ "paymentProvider.sign": "\u6C7A\u6E08",
448
+ "paymentProvider.status": "\u51E6\u7406\u4E2D",
449
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
450
+ "brokerage.sign": "\xA5 \u8A3C\u5238",
451
+ "exchange.sign": "\u53D6\u5F15\u6240",
452
+ "exchange.sub": "\u6E05\u7B97",
453
+ "atm.sign": "ATM \u30B3\u30FC\u30CA\u30FC",
454
+ "atm.screen": "\u91D1\u984D\u3092\u9078\u629E",
455
+ "atm.ok": "\u78BA\u5B9A",
456
+ "atm.cardSlot": "\u30AB\u30FC\u30C9\u633F\u5165\u53E3",
457
+ "storefront.sign": "\u5546\u5E97",
458
+ "storefront.open": "\u55B6\u696D",
459
+ "warehouse.sign": "\u5009\u5EAB",
460
+ "apiGateway.sign": "API \u5165\u53E3",
461
+ "apiGateway.delete": "DELETE",
462
+ "apiGateway.users": "/\u5229\u7528\u8005",
463
+ "apiGateway.orders": "/\u6CE8\u6587",
464
+ "apiGateway.session": "/\u63A5\u7D9A"
465
+ };
466
+ var CDL_TEXT = { en, ja };
467
+ function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
468
+ const \u8A00\u8A9E = lang ?? "en";
469
+ return (key) => CDL_TEXT[\u8A00\u8A9E][key];
470
+ }
471
+
356
472
  // src/formula/ast.ts
357
473
  var ALLOWED_MATH_FNS = /* @__PURE__ */ new Set([
358
474
  "min",
@@ -1244,6 +1360,25 @@ function warn(message) {
1244
1360
  console.warn(`[cdl event-handler] ${message}`);
1245
1361
  }
1246
1362
  }
1363
+
1364
+ // src/kinds/text-width.ts
1365
+ var WIDE_RATIO = 1.04;
1366
+ var NARROW_RATIO = 0.37;
1367
+ var ASCII_RATIO = 0.86;
1368
+ var WIDE_CHARS = "W@%Mm";
1369
+ var NARROW_CHARS = "ijlI.,:;'! ";
1370
+ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1371
+ let \u5E45 = 0;
1372
+ let \u5B57\u6570 = 0;
1373
+ for (const c of s) {
1374
+ if (NARROW_CHARS.includes(c)) \u5E45 += NARROW_RATIO;
1375
+ else if (WIDE_CHARS.includes(c)) \u5E45 += WIDE_RATIO;
1376
+ else if ((c.codePointAt(0) ?? 0) < 128) \u5E45 += ASCII_RATIO;
1377
+ else \u5E45 += WIDE_RATIO;
1378
+ \u5B57\u6570 += 1;
1379
+ }
1380
+ return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1381
+ }
1247
1382
  function createInteractiveSignalsAccessor(diagram2, signals, formula, scroll) {
1248
1383
  const kindByInputId = /* @__PURE__ */ new Map();
1249
1384
  for (const inp of diagram2.inputs ?? []) {
@@ -4203,6 +4338,12 @@ function ProgressGroupReadout({
4203
4338
  }) })
4204
4339
  ] });
4205
4340
  }
4341
+ function sequenceLabelAnchor(x, name, fontSize, viewW) {
4342
+ const half = textWidth(name, fontSize) / 2;
4343
+ if (x - half < 0) return "start";
4344
+ if (x + half > viewW) return "end";
4345
+ return "middle";
4346
+ }
4206
4347
  function SequenceTimelineReadout({
4207
4348
  id,
4208
4349
  label,
@@ -4254,7 +4395,7 @@ function SequenceTimelineReadout({
4254
4395
  const x = xFor(e.t);
4255
4396
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-event-marker": e.name, children: [
4256
4397
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${e.name}: t=${e.t}` }) }),
4257
- /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY - 12, textAnchor: "middle", fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
4398
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
4258
4399
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
4259
4400
  ] }, i);
4260
4401
  })
@@ -11490,6 +11631,8 @@ function diagram(id, options) {
11490
11631
  ...options.structuredData === "exclude" ? { structuredData: "exclude" } : {},
11491
11632
  // 配色の名前は素通しする。 空文字の遮断は `layout` が持つ (後段が必ず通るため)
11492
11633
  ...options.palette !== void 0 ? { palette: options.palette } : {},
11634
+ // 言語も素通しする。 型の外の値を既定に落とすのは `layout` の 1 箇所に置く
11635
+ ...options.lang !== void 0 ? { lang: options.lang } : {},
11493
11636
  // 種類の名前も同じ経路で渡し、空文字の扱いを `layout` の 1 箇所に揃える
11494
11637
  ...options.type !== void 0 ? { type: options.type } : {},
11495
11638
  // inputs / formulas / scrollTriggers / eventBindings は空なら省略 (static diagram の JSON 形状維持)
@@ -13821,25 +13964,6 @@ var EDGE_REVEALS = ["phase", "all"];
13821
13964
  var RELATION_FOCUSES = ["off", "hover"];
13822
13965
  var RELATION_FOCUS_DEFAULT = "off";
13823
13966
  var EDGE_REVEAL_DEFAULT = "phase";
13824
-
13825
- // src/kinds/text-width.ts
13826
- var WIDE_RATIO = 1.04;
13827
- var NARROW_RATIO = 0.37;
13828
- var ASCII_RATIO = 0.86;
13829
- var WIDE_CHARS = "W@%Mm";
13830
- var NARROW_CHARS = "ijlI.,:;'! ";
13831
- function textWidth(s, size, \u5B57\u9001\u308A = 0) {
13832
- let \u5E45 = 0;
13833
- let \u5B57\u6570 = 0;
13834
- for (const c of s) {
13835
- if (NARROW_CHARS.includes(c)) \u5E45 += NARROW_RATIO;
13836
- else if (WIDE_CHARS.includes(c)) \u5E45 += WIDE_RATIO;
13837
- else if ((c.codePointAt(0) ?? 0) < 128) \u5E45 += ASCII_RATIO;
13838
- else \u5E45 += WIDE_RATIO;
13839
- \u5B57\u6570 += 1;
13840
- }
13841
- return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
13842
- }
13843
13967
  var TITLE_MAX = 18;
13844
13968
  var TITLE_MIN = 9;
13845
13969
  var TITLE_RATIO = 0.17;
@@ -20942,6 +21066,9 @@ function layout(diag) {
20942
21066
  // **遮断はここだけに置く**。 描画は必ず組み立てを通り、組み立て API も `er` も
20943
21067
  // 素通しにしてある。 上流にも置くと、どの入力でも通らない分岐が残る
20944
21068
  ...diag.palette ? { palette: diag.palette } : {},
21069
+ // 描画側の固定の字の言語 (#847)。 既定 (`en`) と型の外の値は持たせない = 配置の結果の形を
21070
+ // 変更前と揃え、記法の書き損じで一部の字だけ日本語になる形を作らない
21071
+ ...resolveLang(diag.lang) === "ja" ? { lang: "ja" } : {},
20945
21072
  // 種類も配色と同じく空の目印を出さない。 遮断をここに揃えると手書きの図にも効く
20946
21073
  ...diag.type ? { type: diag.type } : {},
20947
21074
  bboxes,
@@ -27771,6 +27898,11 @@ var commonFrame2 = (active) => ({
27771
27898
  var ASCENT3 = 0.72;
27772
27899
  var DESCENT3 = 0.25;
27773
27900
  var MONO_ADVANCE = 0.62;
27901
+ function \u7B49\u5E45\u306E\u6841(s) {
27902
+ let \u6841 = 0;
27903
+ for (const c of s) \u6841 += (c.codePointAt(0) ?? 0) >= 11904 ? 2 : 1;
27904
+ return \u6841;
27905
+ }
27774
27906
  var LABEL_SUB_RATIO = 11 / 16;
27775
27907
  var LABEL_EYE_RATIO = 12 / 16;
27776
27908
  var LABEL_EYE_GAP = 8;
@@ -27868,7 +28000,8 @@ function ShapeWindowNode({ node, active }) {
27868
28000
  commonLabel2(node, node.cx, \u540D\u524D.y, \u540D\u524D.size)
27869
28001
  ] });
27870
28002
  }
27871
- function ShapeTerminalNode({ node, active }) {
28003
+ function ShapeTerminalNode({ node, active, lang }) {
28004
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
27872
28005
  const frame = commonFrame2(active);
27873
28006
  const \u7DDA = frame.strokeWidth / 2;
27874
28007
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -27889,10 +28022,10 @@ function ShapeTerminalNode({ node, active }) {
27889
28022
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
27890
28023
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
27891
28024
  ],
27892
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: "\u2192 12 chunks in 1.8s" }],
28025
+ [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
27893
28026
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
27894
28027
  ];
27895
- const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((t) => t.\u5DE6 + t.\u6587.length * MONO_ADVANCE * t.\u5B57)) + \u4F59\u767D;
28028
+ const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
27896
28029
  const \u81EA\u7136\u9AD8 = \u5E2F + \u5148\u982D + \u884C\u9593 * (\u884C.length - 1) + Math.max(\u30AB\u30FC\u30BD\u30EB.\u4E0B, 12.5 * DESCENT3);
27897
28030
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
27898
28031
  const barH = \u5E2F * \u500D;
@@ -28002,7 +28135,8 @@ function ShapeTerminalNode({ node, active }) {
28002
28135
  )
28003
28136
  ] });
28004
28137
  }
28005
- function ShapeCodeBlockNode({ node, active }) {
28138
+ function ShapeCodeBlockNode({ node, active, lang }) {
28139
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28006
28140
  const frame = commonFrame2(active);
28007
28141
  const \u7DDA = frame.strokeWidth / 2;
28008
28142
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -28092,7 +28226,7 @@ function ShapeCodeBlockNode({ node, active }) {
28092
28226
  fontFamily: lineFont,
28093
28227
  textAnchor: "middle",
28094
28228
  fill: "#e6edf3",
28095
- children: "utils.ts"
28229
+ children: \u5B57\u5F15("codeBlock.fileName")
28096
28230
  }
28097
28231
  ),
28098
28232
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + tabW - \u4E38, cy: y + tabH / 2, r: 3 * \u500D, fill: "#7cd88f", stroke: "none" }),
@@ -28168,7 +28302,8 @@ function ShapeCodeBlockNode({ node, active }) {
28168
28302
  )
28169
28303
  ] });
28170
28304
  }
28171
- function ShapeKanbanCardNode({ node, active }) {
28305
+ function ShapeKanbanCardNode({ node, active, lang }) {
28306
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28172
28307
  const frame = commonFrame2(active);
28173
28308
  const \u7DDA = frame.strokeWidth / 2;
28174
28309
  const \u5F71 = 3;
@@ -28180,7 +28315,7 @@ function ShapeKanbanCardNode({ node, active }) {
28180
28315
  const \u5DE6\u53F3\u4F59\u767D = 14;
28181
28316
  const \u4E0A\u6BB5\u9699\u9593 = 8;
28182
28317
  const \u512A\u5148\u5E2F\u9AD8 = 10;
28183
- const ID\u6587 = "CAR-1111";
28318
+ const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
28184
28319
  const ID\u57FA\u6E96 = 30;
28185
28320
  const ID\u5B57 = 11;
28186
28321
  const ID\u5B57\u9593 = 1;
@@ -28199,7 +28334,7 @@ function ShapeKanbanCardNode({ node, active }) {
28199
28334
  const \u4E0B\u5E2F = FOOTER\u4E0B - AVATAR\u4E2D\u5FC3Y + AVATAR\u534A\u5F84 + AVATAR\u67A0 / 2 + \u5E2F\u9593\u4F59\u767D;
28200
28335
  const \u4E2D\u5E2F = \u540D\u524D\u5B57 * ASCENT3 + \u540D\u524D\u5B57 * \u8AAC\u660E\u57FA\u6E96\u6BD4 + \u540D\u524D\u5B57 * \u8AAC\u660E\u5B57\u6BD4 * DESCENT3;
28201
28336
  const \u81EA\u7136\u9AD8 = \u4E0A\u5E2F + \u4E2D\u5E2F + \u4E0B\u5E2F;
28202
- const ID\u5E45 = ID\u6587.length * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * ID\u6587.length;
28337
+ const ID\u5E45 = \u7B49\u5E45\u306E\u6841(ID\u6587) * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * [...ID\u6587].length;
28203
28338
  const \u81EA\u7136\u5E45 = \u5DE6\u53F3\u4F59\u767D + ID\u5E45 + \u4E0A\u6BB5\u9699\u9593 + PILL\u5E45 + \u5DE6\u53F3\u4F59\u767D;
28204
28339
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, h / \u81EA\u7136\u9AD8);
28205
28340
  const priorityBarH = \u512A\u5148\u5E2F\u9AD8 * \u500D;
@@ -28278,7 +28413,7 @@ function ShapeKanbanCardNode({ node, active }) {
28278
28413
  textAnchor: "middle",
28279
28414
  fill: "#5a4a1a",
28280
28415
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
28281
- children: "IN PROG"
28416
+ children: \u5B57\u5F15("kanbanCard.status")
28282
28417
  }
28283
28418
  ),
28284
28419
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -28302,7 +28437,7 @@ function ShapeKanbanCardNode({ node, active }) {
28302
28437
  fontSize: \u540D\u524D.size * \u8AAC\u660E\u5B57\u6BD4,
28303
28438
  textAnchor: "middle",
28304
28439
  fill: "var(--cdl-text-dim, #5a6270)",
28305
- children: "shape-driven kind \u5B9F\u88C5"
28440
+ children: \u5B57\u5F15("kanbanCard.task")
28306
28441
  }
28307
28442
  ),
28308
28443
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + \u5DE6\u53F3\u4F59\u767D * \u500D}, ${footY})`, children: [
@@ -28365,7 +28500,7 @@ function ShapeKanbanCardNode({ node, active }) {
28365
28500
  fontWeight: 600,
28366
28501
  textAnchor: "end",
28367
28502
  fill: "var(--cdl-text-dim, #5a6270)",
28368
- children: "Jul 10"
28503
+ children: \u5B57\u5F15("kanbanCard.due")
28369
28504
  }
28370
28505
  )
28371
28506
  ] })
@@ -29409,7 +29544,8 @@ function EthereumDiamond({ cx, cy, h, colors }) {
29409
29544
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: `M ${cx} ${midY} L ${cx + w} ${cy + h * 0.05} L ${cx} ${lowerBotY} Z`, fill: c.dark, stroke: c.stroke, strokeWidth: 0.6, strokeLinejoin: "round" })
29410
29545
  ] });
29411
29546
  }
29412
- function ShapeSmartContractNode({ node, active }) {
29547
+ function ShapeSmartContractNode({ node, active, lang }) {
29548
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29413
29549
  const frame = commonFrame4(active);
29414
29550
  const r = shapeRegion(node);
29415
29551
  const docW = SMART_CONTRACT_W;
@@ -29445,7 +29581,7 @@ function ShapeSmartContractNode({ node, active }) {
29445
29581
  /* @__PURE__ */ jsxRuntime.jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
29446
29582
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
29447
29583
  [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)),
29448
- /* @__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: "function execute()" }),
29584
+ /* @__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") }),
29449
29585
  /* @__PURE__ */ jsxRuntime.jsx(
29450
29586
  "polygon",
29451
29587
  {
@@ -29466,14 +29602,14 @@ function ShapeSmartContractNode({ node, active }) {
29466
29602
  }
29467
29603
  var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
29468
29604
  var BLOCK_DEFAULT_FIELDS = [
29469
- { label: "hash", value: "0xaf31c9d2..." },
29470
- { label: "prev", value: "0x7b3f92c1..." },
29471
- { label: "merkle", value: "0xc1892f4a..." },
29472
- { label: "nonce", value: "82,914" },
29473
- { label: "tx", value: "142 tx" }
29605
+ { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
29606
+ { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
29607
+ { key: "merkle", label: "blockchainBlock.merkle", value: { text: "0xc1892f4a..." } },
29608
+ { key: "nonce", label: "blockchainBlock.nonce", value: { text: "82,914" } },
29609
+ { key: "tx", label: "blockchainBlock.tx", value: { \u8F9E\u66F8: "blockchainBlock.txCount" } }
29474
29610
  ];
29475
- var BLOCK_DEFAULT_TITLE = "Block #421,873";
29476
- function ShapeBlockchainBlockNode({ node, active }) {
29611
+ function ShapeBlockchainBlockNode({ node, active, lang }) {
29612
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29477
29613
  const frame = commonFrame4(active);
29478
29614
  const r = shapeRegion(node);
29479
29615
  const bw = BLOCK_W;
@@ -29483,11 +29619,15 @@ function ShapeBlockchainBlockNode({ node, active }) {
29483
29619
  const x = cx - bw / 2;
29484
29620
  const y = cy - bh / 2;
29485
29621
  const \u6E21\u3055\u308C\u305F = (v) => (v ?? "").trim();
29486
- const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || BLOCK_DEFAULT_TITLE;
29487
- const fields = BLOCK_DEFAULT_FIELDS.map((f) => ({
29488
- label: f.label,
29489
- value: f.label === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || f.value : f.value
29490
- }));
29622
+ const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || \u5B57\u5F15("blockchainBlock.title");
29623
+ const fields = BLOCK_DEFAULT_FIELDS.map((f) => {
29624
+ const \u65E2\u5B9A\u5024 = "text" in f.value ? f.value.text : \u5B57\u5F15(f.value.\u8F9E\u66F8);
29625
+ return {
29626
+ key: f.key,
29627
+ label: \u5B57\u5F15(f.label),
29628
+ value: f.key === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || \u65E2\u5B9A\u5024 : \u65E2\u5B9A\u5024
29629
+ };
29630
+ });
29491
29631
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
29492
29632
  const art = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
29493
29633
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
@@ -29497,7 +29637,7 @@ function ShapeBlockchainBlockNode({ node, active }) {
29497
29637
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
29498
29638
  fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
29499
29639
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 14, y: y + 54 + i * 22, fontSize: 10.5, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-text-dim, #5a6270)", children: f.label }),
29500
- /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": `blockchain-block-${f.label}`, x: x + bw - 14, y: y + 54 + i * 22, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, 11, bw - 28 - \u5B57\u306E\u5E45(f.label, 10.5) - 8, \u5B57\u306E\u5E45) }),
29640
+ /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": `blockchain-block-${f.key}`, x: x + bw - 14, y: y + 54 + i * 22, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, 11, bw - 28 - \u5B57\u306E\u5E45(f.label, 10.5) - 8, \u5B57\u306E\u5E45) }),
29501
29641
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: x + 14, y1: y + 60 + i * 22, x2: x + bw - 14, y2: y + 60 + i * 22, stroke: "var(--cdl-divider, #d4d4d8)", strokeWidth: 0.5, opacity: 0.5 })
29502
29642
  ] }, i)),
29503
29643
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -29702,7 +29842,8 @@ function ShapeBlockchainNodeNode({ node, active }) {
29702
29842
  bottomLabel2(node, r.cx, r.label)
29703
29843
  ] });
29704
29844
  }
29705
- function ShapeRpcNodeNode({ node, active }) {
29845
+ function ShapeRpcNodeNode({ node, active, lang }) {
29846
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29706
29847
  const frame = commonFrame4(active);
29707
29848
  const r = shapeRegion(node);
29708
29849
  const cx = r.cx;
@@ -29715,7 +29856,7 @@ function ShapeRpcNodeNode({ node, active }) {
29715
29856
  /* @__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 }),
29716
29857
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 30, rx: 10, fill: "#2d3a4f", stroke: "none" }),
29717
29858
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + 14, cy: y + 15, r: 5, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsxRuntime.jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: "1.5s", repeatCount: "indefinite" }) }),
29718
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 26, y: y + 20, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, fill: "#7cd88f", children: "RPC ONLINE" }),
29859
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: x + 26, y: y + 20, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, fill: "#7cd88f", children: \u5B57\u5F15("rpcNode.status") }),
29719
29860
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 6, fontSize: 30, fontWeight: 700, textAnchor: "middle", fill: "#e6edf3", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "{...}" }),
29720
29861
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 11, textAnchor: "middle", fill: "#7a8290", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "JSON-RPC 2.0" }),
29721
29862
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 16, y: y + bh - 24, width: bw - 32, height: 8, rx: 4, fill: "#0f1419", stroke: "none" }),
@@ -30001,7 +30142,8 @@ var TRUST_BASE_H = 14;
30001
30142
  var TRUST_BODY_OUT = 8;
30002
30143
  var TRUST_BLD_W_MIN = 140;
30003
30144
  var TRUST_BLD_W_MAX = 280;
30004
- function ShapeTrustBankNode({ node, active }) {
30145
+ function ShapeTrustBankNode({ node, active, lang }) {
30146
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30005
30147
  const frame = commonFrame5(active);
30006
30148
  const r = shapeRegion(node);
30007
30149
  const \u7DDA = frame.strokeWidth / 2;
@@ -30038,7 +30180,7 @@ function ShapeTrustBankNode({ node, active }) {
30038
30180
  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);
30039
30181
  }),
30040
30182
  /* @__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" }),
30041
- /* @__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: "TRUST" }),
30183
+ /* @__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") }),
30042
30184
  /* @__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 }),
30043
30185
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
30044
30186
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -30057,7 +30199,8 @@ function ShapeTrustBankNode({ node, active }) {
30057
30199
  bottomLabel3(node, r.cx, r.label)
30058
30200
  ] });
30059
30201
  }
30060
- function ShapePaymentProviderNode({ node, active }) {
30202
+ function ShapePaymentProviderNode({ node, active, lang }) {
30203
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30061
30204
  const frame = commonFrame5(active);
30062
30205
  const r = shapeRegion(node);
30063
30206
  const cx = r.cx;
@@ -30074,13 +30217,13 @@ function ShapePaymentProviderNode({ node, active }) {
30074
30217
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: boxW, height: boxH, rx: 10, fill: "#255a7a", stroke: accentDark, strokeWidth: frame.strokeWidth }),
30075
30218
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: boxW, height: headerH, rx: 10, fill: accentDarker }),
30076
30219
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + headerH - 8, width: boxW, height: 8, fill: accentDarker }),
30077
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: "PAY" }),
30220
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("paymentProvider.sign") }),
30078
30221
  /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30079
30222
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: cy + 4, r: 22, fill: "none", stroke: "#e5c07b", strokeWidth: 3.5, strokeDasharray: "38 24", strokeLinecap: "round", children: /* @__PURE__ */ jsxRuntime.jsx("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${cx} ${cy + 4}`, to: `360 ${cx} ${cy + 4}`, dur: "2s", repeatCount: "indefinite" }) }),
30080
30223
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
30081
30224
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
30082
30225
  ] }),
30083
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: "PROCESSING" }),
30226
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30084
30227
  bottomLabel3(node, r.cx, r.label)
30085
30228
  ] });
30086
30229
  }
@@ -30128,7 +30271,8 @@ var BROKERAGE_SHADE_OUT = 2;
30128
30271
  var BROKERAGE_W_MIN = BROKERAGE_COLS * BROKERAGE_CELL_W + (BROKERAGE_COLS - 1) * BROKERAGE_GAP_X + 6;
30129
30272
  var BROKERAGE_W_MAX = 140;
30130
30273
  var BROKERAGE_H_MIN = BROKERAGE_TICK_H + BROKERAGE_LOGO_H + BROKERAGE_BASE_H;
30131
- function ShapeBrokerageNode({ node, active }) {
30274
+ function ShapeBrokerageNode({ node, active, lang }) {
30275
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30132
30276
  const frame = commonFrame5(active);
30133
30277
  const r = shapeRegion(node);
30134
30278
  const cx = r.cx;
@@ -30164,9 +30308,9 @@ function ShapeBrokerageNode({ node, active }) {
30164
30308
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
30165
30309
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
30166
30310
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
30167
- /* @__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: "\u25B2NKY 38,240 \u25B2AAPL 194" }),
30311
+ /* @__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") }),
30168
30312
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
30169
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: "$ SECURITIES" }),
30313
+ /* @__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") }),
30170
30314
  Array.from({ length: rows }).map(
30171
30315
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
30172
30316
  const wx = gridStartX + ci * (cellW + gapX);
@@ -30187,7 +30331,8 @@ function ShapeBrokerageNode({ node, active }) {
30187
30331
  bottomLabel3(node, r.cx, r.label)
30188
30332
  ] });
30189
30333
  }
30190
- function ShapeExchangeNode({ node, active }) {
30334
+ function ShapeExchangeNode({ node, active, lang }) {
30335
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30191
30336
  const frame = commonFrame5(active);
30192
30337
  const r = shapeRegion(node);
30193
30338
  const cx = r.cx;
@@ -30232,9 +30377,9 @@ function ShapeExchangeNode({ node, active }) {
30232
30377
  ] }, `d${i}`);
30233
30378
  }),
30234
30379
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30235
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "EXCHANGE" }),
30380
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30236
30381
  /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
30237
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "clearing" }),
30382
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30238
30383
  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}`))
30239
30384
  ] });
30240
30385
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -30256,7 +30401,8 @@ var ATM_PANEL_H = 146;
30256
30401
  var ATM_W_MIN = 100;
30257
30402
  var ATM_W_MAX = 140;
30258
30403
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
30259
- function ShapeAtmNode({ node, active }) {
30404
+ function ShapeAtmNode({ node, active, lang }) {
30405
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30260
30406
  const frame = commonFrame5(active);
30261
30407
  const r = shapeRegion(node);
30262
30408
  const cx = r.cx;
@@ -30290,12 +30436,12 @@ function ShapeAtmNode({ node, active }) {
30290
30436
  const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30291
30437
  /* @__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" }),
30292
30438
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
30293
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "ATM CORNER" }),
30439
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
30294
30440
  /* @__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 }),
30295
30441
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
30296
30442
  /* @__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 }),
30297
30443
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30298
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "SELECT AMOUNT" }),
30444
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30299
30445
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30300
30446
  /* @__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 }),
30301
30447
  (() => {
@@ -30309,7 +30455,7 @@ function ShapeAtmNode({ node, active }) {
30309
30455
  ["5", "#5a6270"],
30310
30456
  ["6", "#5a6270"],
30311
30457
  ["0", "#5a6270"],
30312
- ["OK", "#4ea36a"]
30458
+ [\u5B57\u5F15("atm.ok"), "#4ea36a"]
30313
30459
  ];
30314
30460
  const keyW = 18;
30315
30461
  const keyH = 10;
@@ -30322,13 +30468,16 @@ function ShapeAtmNode({ node, active }) {
30322
30468
  const ky = 74 + row * (keyH + 2);
30323
30469
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30324
30470
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
30325
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: k[0] === "OK" ? 6 : 7, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
30471
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
30472
+ /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
30473
+ i === keys.length - 1 ? 6 : 7
30474
+ ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
30326
30475
  ] }, `k${i}`);
30327
30476
  });
30328
30477
  })(),
30329
30478
  /* @__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 }),
30330
30479
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
30331
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "CARD SLOT" }),
30480
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30332
30481
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
30333
30482
  ] }),
30334
30483
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -30413,7 +30562,8 @@ function ShapeWebsiteNode({ node, active }) {
30413
30562
  bottomLabel4(node, r.cx, r.label)
30414
30563
  ] });
30415
30564
  }
30416
- function ShapeStorefrontNode({ node, active }) {
30565
+ function ShapeStorefrontNode({ node, active, lang }) {
30566
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30417
30567
  const frame = commonFrame6(active);
30418
30568
  const r = shapeRegion(node);
30419
30569
  const cx = r.cx;
@@ -30439,7 +30589,7 @@ function ShapeStorefrontNode({ node, active }) {
30439
30589
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30440
30590
  /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
30441
30591
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
30442
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: "SHOP" }),
30592
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("storefront.sign") }),
30443
30593
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y: facadeY, width: bw, height: facadeH, fill: "#e0e4e8", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
30444
30594
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: winX, y: winY, width: winW, height: winH, fill: "#a4c5d9", stroke: accentDarker, strokeWidth: 2 }),
30445
30595
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: winX + winW / 2, y1: winY, x2: winX + winW / 2, y2: winY + winH, stroke: accentDarker, strokeWidth: 1 }),
@@ -30453,7 +30603,7 @@ function ShapeStorefrontNode({ node, active }) {
30453
30603
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.38, x2: doorX + doorW - 4, y2: doorY + doorH * 0.38, stroke: accentDarker, strokeWidth: 1 }),
30454
30604
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.72, x2: doorX + doorW - 4, y2: doorY + doorH * 0.72, stroke: accentDarker, strokeWidth: 1 }),
30455
30605
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: doorX + doorW / 2 - 20, y: doorY + doorH * 0.85, width: 40, height: 12, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
30456
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: "OPEN" }),
30606
+ /* @__PURE__ */ jsxRuntime.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") }),
30457
30607
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
30458
30608
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
30459
30609
  bottomLabel4(node, r.cx, r.label)
@@ -30470,7 +30620,8 @@ var WAREHOUSE_SHADOW_RX_RATIO = 0.5;
30470
30620
  var WAREHOUSE_H_MIN = WAREHOUSE_ROOF_H + WAREHOUSE_SIGN_H + 68;
30471
30621
  var WAREHOUSE_W_MIN = 160;
30472
30622
  var WAREHOUSE_W_MAX = 240;
30473
- function ShapeWarehouseNode({ node, active }) {
30623
+ function ShapeWarehouseNode({ node, active, lang }) {
30624
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30474
30625
  const frame = commonFrame6(active);
30475
30626
  const r = shapeRegion(node);
30476
30627
  const cx = r.cx;
@@ -30499,7 +30650,7 @@ function ShapeWarehouseNode({ node, active }) {
30499
30650
  /* @__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" }),
30500
30651
  /* @__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 }),
30501
30652
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
30502
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: "WAREHOUSE" }),
30653
+ /* @__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") }),
30503
30654
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
30504
30655
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
30505
30656
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -30656,7 +30807,8 @@ var API_ROWS = 3;
30656
30807
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
30657
30808
  var API_W_MIN = 200;
30658
30809
  var API_W_MAX = 300;
30659
- function ShapeApiGatewayNode({ node, active }) {
30810
+ function ShapeApiGatewayNode({ node, active, lang }) {
30811
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30660
30812
  const frame = commonFrame6(active);
30661
30813
  const r = shapeRegion(node);
30662
30814
  const cx = r.cx;
@@ -30667,6 +30819,7 @@ function ShapeApiGatewayNode({ node, active }) {
30667
30819
  const x = cx - bw / 2;
30668
30820
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
30669
30821
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
30822
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
30670
30823
  const rowPitch = Math.max(
30671
30824
  API_ROW_PITCH_MIN,
30672
30825
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
@@ -30675,15 +30828,15 @@ function ShapeApiGatewayNode({ node, active }) {
30675
30828
  /* @__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" }),
30676
30829
  /* @__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 }),
30677
30830
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
30678
- /* @__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: "API GATEWAY" }),
30831
+ /* @__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") }),
30679
30832
  [
30680
- { method: "GET", path: "/users", color: "#27c93f" },
30681
- { method: "POST", path: "/orders", color: "#e5c07b" },
30682
- { method: "DEL", path: "/session", color: "#c9302c" }
30833
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
30834
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
30835
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
30683
30836
  ].map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
30684
30837
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
30685
30838
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
30686
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 27, y: 16, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
30839
+ /* @__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 }),
30687
30840
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
30688
30841
  /* @__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" }) })
30689
30842
  ] }, i))
@@ -30988,7 +31141,8 @@ function CdlNodeView({
30988
31141
  stateValues,
30989
31142
  currentPhaseId,
30990
31143
  chartLineScale,
30991
- \u95A2\u4FC2\u306E\u53D7\u3051\u53E3
31144
+ \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
31145
+ lang
30992
31146
  }) {
30993
31147
  const value = node.value ? interpolate(node.value, stateValues) : void 0;
30994
31148
  const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
@@ -31204,11 +31358,11 @@ function CdlNodeView({
31204
31358
  case "shape-window":
31205
31359
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWindowNode, { node: resolvedNode, active });
31206
31360
  case "shape-terminal":
31207
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active });
31361
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active, lang });
31208
31362
  case "shape-code-block":
31209
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active });
31363
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active, lang });
31210
31364
  case "shape-kanban-card":
31211
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active });
31365
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active, lang });
31212
31366
  case "shape-message-bubble":
31213
31367
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeMessageBubbleNode, { node: resolvedNode, active });
31214
31368
  case "shape-gear":
@@ -31226,11 +31380,11 @@ function CdlNodeView({
31226
31380
  case "shape-satellite":
31227
31381
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeSatelliteNode, { node: resolvedNode, active });
31228
31382
  case "shape-smart-contract":
31229
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active });
31383
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active, lang });
31230
31384
  case "shape-blockchain-block":
31231
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active });
31385
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active, lang });
31232
31386
  case "shape-rpc-node":
31233
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active });
31387
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active, lang });
31234
31388
  case "shape-wallet":
31235
31389
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWalletNode, { node: resolvedNode, active });
31236
31390
  case "shape-nft":
@@ -31248,29 +31402,29 @@ function CdlNodeView({
31248
31402
  case "shape-bank":
31249
31403
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeBankNode, { node: resolvedNode, active });
31250
31404
  case "shape-trust-bank":
31251
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active });
31405
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active, lang });
31252
31406
  case "shape-payment-provider":
31253
- return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active });
31407
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active, lang });
31254
31408
  case "shape-credit-card":
31255
31409
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCreditCardNode, { node: resolvedNode, active });
31256
31410
  case "shape-brokerage":
31257
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active });
31411
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active, lang });
31258
31412
  case "shape-exchange":
31259
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active });
31413
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active, lang });
31260
31414
  case "shape-atm":
31261
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active });
31415
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active, lang });
31262
31416
  case "shape-website":
31263
31417
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWebsiteNode, { node: resolvedNode, active });
31264
31418
  case "shape-storefront":
31265
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active });
31419
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active, lang });
31266
31420
  case "shape-warehouse":
31267
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active });
31421
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active, lang });
31268
31422
  case "shape-online-shop":
31269
31423
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeOnlineShopNode, { node: resolvedNode, active });
31270
31424
  case "shape-cdn-edge":
31271
31425
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCdnEdgeNode, { node: resolvedNode, active });
31272
31426
  case "shape-api-gateway":
31273
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active });
31427
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active, lang });
31274
31428
  case "shape-auditor":
31275
31429
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeAuditorNode, { node: resolvedNode, active });
31276
31430
  case "shape-regulator":
@@ -31645,6 +31799,7 @@ function CdlStage({
31645
31799
  {
31646
31800
  node,
31647
31801
  active: activeSet.has(node.id),
31802
+ lang: laid.lang,
31648
31803
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3: \u7BB1\u306E\u53D7\u3051\u53E3,
31649
31804
  drawing: \u63CF\u304F,
31650
31805
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
@@ -33387,6 +33542,7 @@ exports.requiredSpecClearance = requiredSpecClearance;
33387
33542
  exports.resolveEdgeLabelOverlapsWithChain = resolveEdgeLabelOverlapsWithChain;
33388
33543
  exports.resolveEdgeLabelOverlapsWithChainAndPropagate = resolveEdgeLabelOverlapsWithChainAndPropagate;
33389
33544
  exports.resolveLabelClearanceAfterPathPasses = resolveLabelClearanceAfterPathPasses;
33545
+ exports.resolveLang = resolveLang;
33390
33546
  exports.resolveOverlapsWithChain = resolveOverlapsWithChain;
33391
33547
  exports.resolveTarget = resolveTarget;
33392
33548
  exports.resolveTargetAll = resolveTargetAll;