@cardenelabs/cdl 0.57.1 → 0.59.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,334 @@ 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
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
430
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
431
+ /** 配列を描く読み出しで、値が空の時の字 */
432
+ "readout.empty": "empty",
433
+ /** `sparkline` で点がまだ無い時の字 */
434
+ "readout.sparkline.waiting": "waiting",
435
+ /** 時の流れの入力欄の速さ */
436
+ "input.timeline.speed": "{speed}x",
437
+ /** 時の流れの入力欄の経過と長さ (秒) */
438
+ "input.timeline.time": "{t}s / {d}s",
439
+ /** `sequence-timeline` の点の見出し */
440
+ "readout.sequenceTimeline.title": "{name}: t={t}",
441
+ /** `bubble-chart` の泡の見出し */
442
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
443
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
444
+ "readout.calendarHeatmap.title": "day {i}: {v}",
445
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
446
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
447
+ /** `slope` の左の目盛 */
448
+ "readout.slope.before": "before",
449
+ /** `slope` の右の目盛 */
450
+ "readout.slope.after": "after",
451
+ /** `bullet-chart` の実績の見出し */
452
+ "readout.bulletChart.actual": "actual: {v}",
453
+ /** `bullet-chart` の目標の見出し */
454
+ "readout.bulletChart.target": "target: {v}",
455
+ /** `rating` の塗った星の見出し */
456
+ "readout.rating.full": "full",
457
+ /** `rating` の半分塗った星の見出し */
458
+ "readout.rating.half": "half",
459
+ /** `rating` の塗っていない星の見出し */
460
+ "readout.rating.empty": "empty",
461
+ /** `price-tag` の割引額 */
462
+ "readout.priceTag.save": "You save {amount}",
463
+ /** `confidence-meter` の低い帯の名前 */
464
+ "readout.confidence.low": "low",
465
+ /** `confidence-meter` の中ほどの帯の名前 */
466
+ "readout.confidence.mid": "mid",
467
+ /** `confidence-meter` の高い帯の名前 */
468
+ "readout.confidence.high": "high",
469
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
470
+ "readout.more": "+{n} more",
471
+ /** `video-card` の再生数 */
472
+ "readout.videoCard.views": "{v} views",
473
+ /** `attendance-grid` の角の見出し */
474
+ "readout.attendance.corner": "day",
475
+ /** `calendar-month` の曜日 (日曜) */
476
+ "readout.weekday.0": "Sun",
477
+ /** `calendar-month` の曜日 (月曜) */
478
+ "readout.weekday.1": "Mon",
479
+ /** `calendar-month` の曜日 (火曜) */
480
+ "readout.weekday.2": "Tue",
481
+ /** `calendar-month` の曜日 (水曜) */
482
+ "readout.weekday.3": "Wed",
483
+ /** `calendar-month` の曜日 (木曜) */
484
+ "readout.weekday.4": "Thu",
485
+ /** `calendar-month` の曜日 (金曜) */
486
+ "readout.weekday.5": "Fri",
487
+ /** `calendar-month` の曜日 (土曜) */
488
+ "readout.weekday.6": "Sat",
489
+ /** `rating-thumb` の賛成の割合と票数 */
490
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
491
+ /** `kpi-trend-tile` の前の期間の値 */
492
+ "readout.kpiTrend.prev": "prev {v}",
493
+ /** `quick-poll-emoji` の票の合計 */
494
+ "readout.poll.total": "total {n}",
495
+ /** `thread-summary` の参加者の数 */
496
+ "readout.thread.participants": "{n} participants",
497
+ /** `thread-summary` の最後に書いた人 */
498
+ "readout.thread.last": "last: {name}",
499
+ /** `read-receipt` の送信した段 */
500
+ "readout.readReceipt.sent": "sent",
501
+ /** `read-receipt` の相手に届いた段 */
502
+ "readout.readReceipt.delivered": "delivered",
503
+ /** `read-receipt` の読まれた段 */
504
+ "readout.readReceipt.read": "read",
505
+ /** `password-strength` の段階 0 */
506
+ "readout.password.0": "too weak",
507
+ /** `password-strength` の段階 1 */
508
+ "readout.password.1": "weak",
509
+ /** `password-strength` の段階 2 */
510
+ "readout.password.2": "fair",
511
+ /** `password-strength` の段階 3 */
512
+ "readout.password.3": "good",
513
+ /** `password-strength` の段階 4 */
514
+ "readout.password.4": "strong",
515
+ /** `file-dropzone` で取り込んだ後の字 */
516
+ "readout.dropzone.uploaded": "uploaded",
517
+ /** `file-dropzone` の空の時の 1 行目 */
518
+ "readout.dropzone.drop": "\u2B06 Drop file here",
519
+ /** `file-dropzone` の空の時の 2 行目 */
520
+ "readout.dropzone.browse": "or click to browse",
521
+ /** `log-stream` の重さ 0 (調べるための詳細) */
522
+ "readout.log.0": "DBG",
523
+ /** `log-stream` の重さ 1 (知らせ) */
524
+ "readout.log.1": "INF",
525
+ /** `log-stream` の重さ 2 (警告) */
526
+ "readout.log.2": "WRN",
527
+ /** `log-stream` の重さ 3 (異常) */
528
+ "readout.log.3": "ERR",
529
+ /** `cart-summary` の点数 */
530
+ "readout.cart.items": "Items",
531
+ /** `cart-summary` の小計 */
532
+ "readout.cart.subtotal": "Subtotal",
533
+ /** `cart-summary` の送料 */
534
+ "readout.cart.shipping": "Shipping",
535
+ /** `cart-summary` の合計 */
536
+ "readout.cart.total": "Total",
537
+ /** `pricing-tier` で名前が空の時の名前 */
538
+ "readout.pricing.plan": "Plan",
539
+ /** `pricing-tier` の価格の後ろ */
540
+ "readout.pricing.perMonth": "per month",
541
+ /** `pricing-tier` の押す札 */
542
+ "readout.pricing.get": "Get {name}",
543
+ /** `coupon-code` で番号が空の時の字 */
544
+ "readout.coupon.placeholder": "ENTER CODE",
545
+ /** `coupon-code` の割引の割合 */
546
+ "readout.coupon.off": "-{pct}% off",
547
+ /** `coupon-code` の押す札 */
548
+ "readout.coupon.apply": "Apply",
549
+ /** `article-preview` の書いた人 */
550
+ "readout.article.by": "by {author}",
551
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
552
+ "readout.priority.high": "HIGH",
553
+ /** `priority-badge` の中ほどの優先度の表示 */
554
+ "readout.priority.med": "MED",
555
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
556
+ "readout.priority.low": "LOW",
557
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
558
+ "readout.kanban.todo": "Todo",
559
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
560
+ "readout.kanban.inprogress": "In Progress",
561
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
562
+ "readout.kanban.done": "Done",
563
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
564
+ "readout.trafficLight.red": "red",
565
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
566
+ "readout.trafficLight.yellow": "yellow",
567
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
568
+ "readout.trafficLight.green": "green"
569
+ };
570
+ var ja = {
571
+ "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
572
+ "codeBlock.fileName": "\u5171\u901A.ts",
573
+ "kanbanCard.id": "#1111",
574
+ "kanbanCard.status": "\u9032\u884C\u4E2D",
575
+ "kanbanCard.task": "\u5F62\u3092\u5B9F\u88C5",
576
+ "kanbanCard.due": "7/10",
577
+ "smartContract.call": "\u81EA\u52D5\u3067\u5B9F\u884C\u3059\u308B",
578
+ "blockchainBlock.title": "\u30D6\u30ED\u30C3\u30AF #421,873",
579
+ "blockchainBlock.hash": "\u30CF\u30C3\u30B7\u30E5",
580
+ "blockchainBlock.prev": "\u76F4\u524D",
581
+ "blockchainBlock.merkle": "\u6728\u306E\u6839",
582
+ "blockchainBlock.nonce": "\u30CE\u30F3\u30B9",
583
+ "blockchainBlock.tx": "\u53D6\u5F15",
584
+ "blockchainBlock.txCount": "142 \u4EF6",
585
+ "rpcNode.status": "RPC \u7A3C\u50CD\u4E2D",
586
+ "trustBank.sign": "\u4FE1\u8A17",
587
+ "paymentProvider.sign": "\u6C7A\u6E08",
588
+ "paymentProvider.status": "\u51E6\u7406\u4E2D",
589
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
590
+ "brokerage.sign": "\xA5 \u8A3C\u5238",
591
+ "exchange.sign": "\u53D6\u5F15\u6240",
592
+ "exchange.sub": "\u6E05\u7B97",
593
+ "atm.sign": "ATM \u30B3\u30FC\u30CA\u30FC",
594
+ "atm.screen": "\u91D1\u984D\u3092\u9078\u629E",
595
+ "atm.ok": "\u78BA\u5B9A",
596
+ "atm.cardSlot": "\u30AB\u30FC\u30C9\u633F\u5165\u53E3",
597
+ "storefront.sign": "\u5546\u5E97",
598
+ "storefront.open": "\u55B6\u696D",
599
+ "warehouse.sign": "\u5009\u5EAB",
600
+ "apiGateway.sign": "API \u5165\u53E3",
601
+ "apiGateway.delete": "DELETE",
602
+ "apiGateway.users": "/\u5229\u7528\u8005",
603
+ "apiGateway.orders": "/\u6CE8\u6587",
604
+ "apiGateway.session": "/\u63A5\u7D9A",
605
+ "readout.empty": "\u306A\u3057",
606
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
607
+ "input.timeline.speed": "{speed}\u500D",
608
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
609
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
610
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
611
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
612
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
613
+ "readout.slope.before": "\u524D",
614
+ "readout.slope.after": "\u5F8C",
615
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
616
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
617
+ "readout.rating.full": "\u6E80",
618
+ "readout.rating.half": "\u534A\u5206",
619
+ "readout.rating.empty": "\u7A7A",
620
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
621
+ "readout.confidence.low": "\u4F4E",
622
+ "readout.confidence.mid": "\u4E2D",
623
+ "readout.confidence.high": "\u9AD8",
624
+ "readout.more": "\u307B\u304B {n}",
625
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
626
+ "readout.attendance.corner": "\u65E5",
627
+ "readout.weekday.0": "\u65E5",
628
+ "readout.weekday.1": "\u6708",
629
+ "readout.weekday.2": "\u706B",
630
+ "readout.weekday.3": "\u6C34",
631
+ "readout.weekday.4": "\u6728",
632
+ "readout.weekday.5": "\u91D1",
633
+ "readout.weekday.6": "\u571F",
634
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
635
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
636
+ "readout.poll.total": "\u5408\u8A08 {n}",
637
+ "readout.thread.participants": "{n} \u4EBA",
638
+ "readout.thread.last": "\u6700\u5F8C: {name}",
639
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
640
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
641
+ "readout.readReceipt.read": "\u65E2\u8AAD",
642
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
643
+ "readout.password.1": "\u5F31\u3044",
644
+ "readout.password.2": "\u666E\u901A",
645
+ "readout.password.3": "\u826F\u3044",
646
+ "readout.password.4": "\u5F37\u3044",
647
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
648
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
649
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
650
+ "readout.log.0": "\u8A73\u7D30",
651
+ "readout.log.1": "\u60C5\u5831",
652
+ "readout.log.2": "\u8B66\u544A",
653
+ "readout.log.3": "\u7570\u5E38",
654
+ "readout.cart.items": "\u70B9\u6570",
655
+ "readout.cart.subtotal": "\u5C0F\u8A08",
656
+ "readout.cart.shipping": "\u9001\u6599",
657
+ "readout.cart.total": "\u5408\u8A08",
658
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
659
+ "readout.pricing.perMonth": "\u6708\u984D",
660
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
661
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
662
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
663
+ "readout.coupon.apply": "\u9069\u7528",
664
+ "readout.article.by": "\u6587: {author}",
665
+ "readout.priority.high": "\u9AD8",
666
+ "readout.priority.med": "\u4E2D",
667
+ "readout.priority.low": "\u4F4E",
668
+ "readout.kanban.todo": "\u672A\u7740\u624B",
669
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
670
+ "readout.kanban.done": "\u5B8C\u4E86",
671
+ "readout.trafficLight.red": "\u8D64",
672
+ "readout.trafficLight.yellow": "\u9EC4",
673
+ "readout.trafficLight.green": "\u7DD1"
674
+ };
675
+ var CDL_TEXT = { en, ja };
676
+ function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
677
+ const \u8A00\u8A9E = lang ?? "en";
678
+ return (key) => CDL_TEXT[\u8A00\u8A9E][key];
679
+ }
680
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
681
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
682
+ }
683
+
356
684
  // src/formula/ast.ts
357
685
  var ALLOWED_MATH_FNS = /* @__PURE__ */ new Set([
358
686
  "min",
@@ -1263,6 +1591,23 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1263
1591
  }
1264
1592
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1265
1593
  }
1594
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = react.createContext("en");
1595
+ function use\u5B57\u5F15() {
1596
+ const lang = react.useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
1597
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
1598
+ }
1599
+ function \u5B57({ k, v }) {
1600
+ const \u5F15\u304F = use\u5B57\u5F15();
1601
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: \u5F15\u304F(k, v) });
1602
+ }
1603
+ function \u5B57\u306E\u898B\u51FA\u3057({
1604
+ k,
1605
+ v,
1606
+ \u524D = ""
1607
+ }) {
1608
+ const \u5F15\u304F = use\u5B57\u5F15();
1609
+ return /* @__PURE__ */ jsxRuntime.jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
1610
+ }
1266
1611
  function createInteractiveSignalsAccessor(diagram2, signals, formula, scroll) {
1267
1612
  const kindByInputId = /* @__PURE__ */ new Map();
1268
1613
  for (const inp of diagram2.inputs ?? []) {
@@ -1577,20 +1922,23 @@ function useInteractiveIntegration(diagram2, options = {}) {
1577
1922
  const readouts = diagram2.readouts ?? [];
1578
1923
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
1579
1924
  return null;
1580
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1581
- inputs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsxRuntime.jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1582
- formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
1583
- FormulaReadout,
1584
- {
1585
- id: f.id,
1586
- expression: f.expression,
1587
- value: stateOverrides[f.id]
1588
- },
1589
- f.id
1590
- )) }),
1591
- scrolls.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsxRuntime.jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1592
- readouts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1593
- ] });
1925
+ return (
1926
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
1927
+ /* @__PURE__ */ jsxRuntime.jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram2.lang), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1928
+ inputs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsxRuntime.jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1929
+ formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
1930
+ FormulaReadout,
1931
+ {
1932
+ id: f.id,
1933
+ expression: f.expression,
1934
+ value: stateOverrides[f.id]
1935
+ },
1936
+ f.id
1937
+ )) }),
1938
+ scrolls.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsxRuntime.jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1939
+ readouts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1940
+ ] }) })
1941
+ );
1594
1942
  }, [diagram2, signals, stateOverrides, mergedStateValues]);
1595
1943
  return { stateOverrides, panel, svgRef, containerRef };
1596
1944
  }
@@ -3451,7 +3799,7 @@ function SparklineReadout({
3451
3799
  if (points.length < 2) {
3452
3800
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
3453
3801
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
3454
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
3802
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.sparkline.waiting" }) : "\u2014" }),
3455
3803
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
3456
3804
  ] });
3457
3805
  }
@@ -3714,27 +4062,24 @@ function TimelineWidget({
3714
4062
  className: "cdl-ip-timeline-scrubber"
3715
4063
  }
3716
4064
  ),
3717
- /* @__PURE__ */ jsxRuntime.jsxs(
4065
+ /* @__PURE__ */ jsxRuntime.jsx(
3718
4066
  "button",
3719
4067
  {
3720
4068
  type: "button",
3721
4069
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
3722
4070
  onClick: cycleSpeed,
3723
4071
  "aria-label": "speed",
3724
- children: [
3725
- speed,
3726
- "x"
3727
- ]
4072
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
3728
4073
  }
3729
4074
  )
3730
4075
  ] }),
3731
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-timeline-time", children: [
3732
- (progress * (input.duration / 1e3)).toFixed(1),
3733
- "s /",
3734
- " ",
3735
- (input.duration / 1e3).toFixed(1),
3736
- "s"
3737
- ] })
4076
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsxRuntime.jsx(
4077
+ \u5B57,
4078
+ {
4079
+ k: "input.timeline.time",
4080
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
4081
+ }
4082
+ ) })
3738
4083
  ] });
3739
4084
  }
3740
4085
  function RangeWidget({
@@ -3972,7 +4317,7 @@ function ArrayBarReadout({
3972
4317
  const range = max - min || 1;
3973
4318
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
3974
4319
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
3975
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : arr.map((v, i) => {
4320
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : arr.map((v, i) => {
3976
4321
  const h = Math.max(0, Math.min(1, (v - min) / range));
3977
4322
  return /* @__PURE__ */ jsxRuntime.jsx(
3978
4323
  "span",
@@ -4049,7 +4394,7 @@ function StackedBarReadout({
4049
4394
  const range = max - min || 1;
4050
4395
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
4051
4396
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4052
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : Array.from({ length: n }).map((_, i) => {
4397
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : Array.from({ length: n }).map((_, i) => {
4053
4398
  const va = arrA[i] ?? 0;
4054
4399
  const vb = arrB[i] ?? 0;
4055
4400
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -4144,7 +4489,7 @@ function MatrixReadout({
4144
4489
  };
4145
4490
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
4146
4491
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4147
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx(
4492
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx(
4148
4493
  "svg",
4149
4494
  {
4150
4495
  className: "cdl-ip-readout-matrix-svg",
@@ -4202,7 +4547,7 @@ function ProgressGroupReadout({
4202
4547
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
4203
4548
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
4204
4549
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4205
- arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4550
+ arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4206
4551
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
4207
4552
  const rowLabel = labelArr[i] ?? String(i + 1);
4208
4553
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -4264,7 +4609,7 @@ function SequenceTimelineReadout({
4264
4609
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
4265
4610
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
4266
4611
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4267
- events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(
4612
+ events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs(
4268
4613
  "svg",
4269
4614
  {
4270
4615
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -4278,7 +4623,7 @@ function SequenceTimelineReadout({
4278
4623
  events.map((e, i) => {
4279
4624
  const x = xFor(e.t);
4280
4625
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-event-marker": e.name, children: [
4281
- /* @__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}` }) }),
4626
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.sequenceTimeline.title", v: { name: e.name, t: e.t } }) }),
4282
4627
  /* @__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 }),
4283
4628
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
4284
4629
  ] }, i);
@@ -4321,7 +4666,7 @@ function RadarReadout({
4321
4666
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
4322
4667
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
4323
4668
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4324
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4669
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4325
4670
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx(
4326
4671
  "polygon",
4327
4672
  {
@@ -4383,14 +4728,14 @@ function BubbleChartReadout({
4383
4728
  const maxCircleR = 18;
4384
4729
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
4385
4730
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4386
- bubbles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4731
+ bubbles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4387
4732
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4388
4733
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4389
4734
  bubbles.map((b, i) => {
4390
4735
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
4391
4736
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
4392
4737
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
4393
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `(${b.x}, ${b.y}) r=${b.r}` }) }, i);
4738
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bubbleChart.title", v: { x: b.x, y: b.y, r: b.r } }) }, i);
4394
4739
  })
4395
4740
  ] })
4396
4741
  ] });
@@ -4413,7 +4758,7 @@ function DonutReadout({
4413
4758
  let acc = 0;
4414
4759
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
4415
4760
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4416
- arr.length === 0 || total === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4761
+ arr.length === 0 || total === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4417
4762
  const from = acc;
4418
4763
  const to = acc + v / total;
4419
4764
  acc = to;
@@ -4474,7 +4819,7 @@ function CalendarHeatmapReadout({
4474
4819
  height: cellSize,
4475
4820
  rx: 2,
4476
4821
  fill,
4477
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `day ${i}: ${v}` })
4822
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
4478
4823
  },
4479
4824
  i
4480
4825
  );
@@ -4594,7 +4939,7 @@ function CandlestickReadout({
4594
4939
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
4595
4940
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
4596
4941
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4597
- candles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
4942
+ candles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
4598
4943
  const cx = pad + i * (candleW + 3) + candleW / 2;
4599
4944
  const yHigh = yFor(cd.h);
4600
4945
  const yLow = yFor(cd.l);
@@ -4615,7 +4960,7 @@ function CandlestickReadout({
4615
4960
  height: bodyH,
4616
4961
  fill: isUp ? color : color,
4617
4962
  fillOpacity: isUp ? 1 : 0.85,
4618
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
4963
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.candlestick.title", v: { o: cd.o, h: cd.h, l: cd.l, c: cd.c } })
4619
4964
  }
4620
4965
  )
4621
4966
  ] }, i);
@@ -4649,7 +4994,7 @@ function VennReadout({
4649
4994
  const cxB = viewW / 2 + gap / 2;
4650
4995
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
4651
4996
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4652
- sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4997
+ sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4653
4998
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
4654
4999
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
4655
5000
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -4700,11 +5045,11 @@ function SlopeReadout({
4700
5045
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
4701
5046
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
4702
5047
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4703
- slopes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5048
+ slopes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4704
5049
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4705
5050
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4706
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
4707
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
5051
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.slope.before" }) }),
5052
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.slope.after" }) }),
4708
5053
  slopes.map((s, i) => {
4709
5054
  const yB = yFor(s.before);
4710
5055
  const yA = yFor(s.after);
@@ -4751,7 +5096,7 @@ function FunnelReadout({
4751
5096
  const [bR, bG, bB] = hexToRgb(colorBottom);
4752
5097
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
4753
5098
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4754
- stages.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
5099
+ stages.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
4755
5100
  const ratio = i / Math.max(1, stages.length - 1);
4756
5101
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
4757
5102
  const yTop = i * stageH + 2;
@@ -4813,7 +5158,7 @@ function GanttReadout({
4813
5158
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
4814
5159
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
4815
5160
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4816
- tasks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
5161
+ tasks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
4817
5162
  const y = pad + i * rowH;
4818
5163
  const x1 = xFor(t.start);
4819
5164
  const x2 = xFor(t.start + t.duration);
@@ -4904,7 +5249,7 @@ function TreemapReadout({
4904
5249
  }
4905
5250
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
4906
5251
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4907
- rects.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
5252
+ rects.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
4908
5253
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: r.x + 1, y: r.y + 1, width: Math.max(0, r.w - 2), height: Math.max(0, r.h - 2), fill: colors[i % colors.length] ?? "#94a3b8", rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${r.name}: ${r.size}` }) }),
4909
5254
  r.w > 40 && r.h > 20 ? /* @__PURE__ */ jsxRuntime.jsx("text", { x: r.x + 6, y: r.y + 14, fontSize: 10, fill: "#fff", fontWeight: 600, children: r.name }) : null
4910
5255
  ] }, i)) })
@@ -4970,7 +5315,7 @@ function SankeyReadout({
4970
5315
  const rightUsed = {};
4971
5316
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
4972
5317
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4973
- flows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5318
+ flows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4974
5319
  leftNodes.map((n, i) => {
4975
5320
  const p = leftPos[n.name];
4976
5321
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -5032,7 +5377,7 @@ function PolarAreaReadout({
5032
5377
  const maxR = Math.min(cx, cy) - 20;
5033
5378
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
5034
5379
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5035
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5380
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5036
5381
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r: maxR * t, fill: "none", stroke: "rgba(148,163,184,0.2)", strokeWidth: 1 }, t)),
5037
5382
  arr.map((v, i) => {
5038
5383
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -5078,7 +5423,7 @@ function StepIndicatorReadout({
5078
5423
  const cy = viewH / 2 - 2;
5079
5424
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
5080
5425
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5081
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5426
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5082
5427
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
5083
5428
  const x1 = pad + i * step;
5084
5429
  const x2 = pad + (i + 1) * step;
@@ -5168,8 +5513,8 @@ function BulletChartReadout({
5168
5513
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
5169
5514
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
5170
5515
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
5171
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `actual: ${safeActual}` }) }),
5172
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `target: ${safeTarget}` }) })
5516
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.actual", v: { v: safeActual } }) }),
5517
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.target", v: { v: safeTarget } }) })
5173
5518
  ] })
5174
5519
  ] });
5175
5520
  }
@@ -5224,7 +5569,7 @@ function LeaderboardReadout({
5224
5569
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
5225
5570
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
5226
5571
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5227
- sorted.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5572
+ sorted.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5228
5573
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
5229
5574
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
5230
5575
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -5275,7 +5620,7 @@ function TrafficLightReadout({
5275
5620
  style: {
5276
5621
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
5277
5622
  },
5278
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
5623
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
5279
5624
  },
5280
5625
  i
5281
5626
  );
@@ -5314,7 +5659,7 @@ function TagCloudReadout({
5314
5659
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
5315
5660
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
5316
5661
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5317
- tags.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
5662
+ tags.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
5318
5663
  "span",
5319
5664
  {
5320
5665
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -5351,7 +5696,7 @@ function ActivityFeedReadout({
5351
5696
  const shown = events.slice(0, max);
5352
5697
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
5353
5698
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5354
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5699
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5355
5700
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
5356
5701
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
5357
5702
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -5402,7 +5747,7 @@ function RatingReadout({
5402
5747
  strokeWidth: 1
5403
5748
  }
5404
5749
  ),
5405
- isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
5750
+ isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: "readout.rating.empty" }) : /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: isFull ? "readout.rating.full" : "readout.rating.half" })
5406
5751
  ]
5407
5752
  },
5408
5753
  i
@@ -5498,7 +5843,7 @@ function ChatBubbleReadout({
5498
5843
  const shown = messages.slice(0, max);
5499
5844
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
5500
5845
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5501
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
5846
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
5502
5847
  "li",
5503
5848
  {
5504
5849
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -5590,7 +5935,7 @@ function ChecklistReadout({
5590
5935
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
5591
5936
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
5592
5937
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5593
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5938
+ items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5594
5939
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
5595
5940
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
5596
5941
  done,
@@ -5701,11 +6046,7 @@ function PriceTagReadout({
5701
6046
  "%"
5702
6047
  ] }) : null
5703
6048
  ] }),
5704
- savings > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
5705
- "You save ",
5706
- currency,
5707
- savings
5708
- ] }) : null
6049
+ savings > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-price-tag-savings", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.priceTag.save", v: { amount: `${currency}${savings}` } }) }) : null
5709
6050
  ] });
5710
6051
  }
5711
6052
  function SpinnerReadout({
@@ -5842,6 +6183,11 @@ function StopwatchReadout({
5842
6183
  }
5843
6184
  );
5844
6185
  }
6186
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
6187
+ low: "readout.confidence.low",
6188
+ mid: "readout.confidence.mid",
6189
+ high: "readout.confidence.high"
6190
+ };
5845
6191
  function ConfidenceMeterReadout({
5846
6192
  id,
5847
6193
  label,
@@ -5874,7 +6220,7 @@ function ConfidenceMeterReadout({
5874
6220
  Math.round(safeValue),
5875
6221
  "%"
5876
6222
  ] }),
5877
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
6223
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57[bandLabel] }) })
5878
6224
  ] }),
5879
6225
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5880
6226
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -5909,7 +6255,7 @@ function ReactionBarReadout({
5909
6255
  }
5910
6256
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
5911
6257
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5912
- reactions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
6258
+ reactions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
5913
6259
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
5914
6260
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
5915
6261
  ] }, i)) })
@@ -5942,7 +6288,7 @@ function PillGroupReadout({
5942
6288
  }
5943
6289
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
5944
6290
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5945
- pills.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(
6291
+ pills.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(
5946
6292
  "span",
5947
6293
  {
5948
6294
  className: "cdl-ip-readout-pill-group-pill",
@@ -6030,7 +6376,7 @@ function MetricsGridReadout({
6030
6376
  }
6031
6377
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
6032
6378
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6033
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6379
+ items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6034
6380
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
6035
6381
  m.value,
6036
6382
  m.unit ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -6117,7 +6463,7 @@ function IconTileReadout({
6117
6463
  }
6118
6464
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
6119
6465
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6120
- tiles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6466
+ tiles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6121
6467
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
6122
6468
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
6123
6469
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -6158,7 +6504,7 @@ function TokenListReadout({
6158
6504
  }
6159
6505
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
6160
6506
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6161
- tokens.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6507
+ tokens.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6162
6508
  const isUp = t.delta >= 0;
6163
6509
  const deltaColor = isUp ? colorUp : colorDown;
6164
6510
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -6212,7 +6558,7 @@ function MapPinReadout({
6212
6558
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
6213
6559
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
6214
6560
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6215
- pins.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6561
+ pins.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6216
6562
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: viewW, height: viewH, fill: "rgba(148,163,184,0.08)", stroke: "rgba(148,163,184,0.3)", strokeWidth: 1, rx: 4 }),
6217
6563
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
6218
6564
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad + (viewW - pad * 2) * t, x2: pad + (viewW - pad * 2) * t, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.15)" }),
@@ -6240,9 +6586,9 @@ function PriorityBadgeReadout({
6240
6586
  if (p === "high" || p === "2") level = "high";
6241
6587
  else if (p === "low" || p === "0") level = "low";
6242
6588
  const spec = {
6243
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
6244
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
6245
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
6589
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
6590
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
6591
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
6246
6592
  };
6247
6593
  const cur = spec[level];
6248
6594
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -6255,7 +6601,7 @@ function PriorityBadgeReadout({
6255
6601
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
6256
6602
  children: [
6257
6603
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
6258
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: cur.text })
6604
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: cur.text }) })
6259
6605
  ]
6260
6606
  }
6261
6607
  ),
@@ -6294,7 +6640,7 @@ function PodiumReadout({
6294
6640
  const order = [1, 0, 2];
6295
6641
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
6296
6642
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6297
- podium.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6643
+ podium.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6298
6644
  const w = podium[rankIdx];
6299
6645
  if (!w) return null;
6300
6646
  const x = pad + colIdx * (colW + pad);
@@ -6337,7 +6683,7 @@ function PollBarReadout({
6337
6683
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
6338
6684
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
6339
6685
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6340
- options.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6686
+ options.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6341
6687
  const pct = Math.round(o.count / total * 100);
6342
6688
  const isWinner = o.count === maxCount && maxCount > 0;
6343
6689
  const fillColor = isWinner ? colorWinner : color;
@@ -6372,6 +6718,7 @@ function UserStackReadout({
6372
6718
  max,
6373
6719
  size
6374
6720
  }) {
6721
+ const \u5F15\u304F = use\u5B57\u5F15();
6375
6722
  const names = safeParseArray(value).map(String);
6376
6723
  const shown = names.slice(0, max);
6377
6724
  const overflow = names.length > max;
@@ -6380,7 +6727,7 @@ function UserStackReadout({
6380
6727
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
6381
6728
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
6382
6729
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6383
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6730
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6384
6731
  shown.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx(
6385
6732
  "span",
6386
6733
  {
@@ -6408,7 +6755,7 @@ function UserStackReadout({
6408
6755
  fontSize: `${Math.round(size * 0.35)}px`,
6409
6756
  marginLeft: `-${size * 0.3}px`
6410
6757
  },
6411
- title: `+${overflowCount} more`,
6758
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
6412
6759
  children: [
6413
6760
  "+",
6414
6761
  overflowCount
@@ -6443,7 +6790,7 @@ function CommitListReadout({
6443
6790
  const shown = commits.slice(0, max);
6444
6791
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
6445
6792
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6446
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6793
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6447
6794
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
6448
6795
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
6449
6796
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -6523,7 +6870,7 @@ function EventLogReadout({
6523
6870
  };
6524
6871
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
6525
6872
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6526
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6873
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6527
6874
  const spec = severitySpec[e.severity] ?? severitySpec.info;
6528
6875
  return /* @__PURE__ */ jsxRuntime.jsxs(
6529
6876
  "li",
@@ -6566,7 +6913,7 @@ function SearchResultReadout({
6566
6913
  const shown = hits.slice(0, max);
6567
6914
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
6568
6915
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6569
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6916
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6570
6917
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
6571
6918
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
6572
6919
  h.url ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -6599,7 +6946,7 @@ function RoadmapReadout({
6599
6946
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
6600
6947
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
6601
6948
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6602
- quarters.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
6949
+ quarters.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
6603
6950
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
6604
6951
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-roadmap-items", children: q.items.map((it, j) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "cdl-ip-readout-roadmap-item", children: it }, j)) })
6605
6952
  ] }, i)) })
@@ -6631,7 +6978,7 @@ function WeatherForecastReadout({
6631
6978
  }
6632
6979
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
6633
6980
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6634
- days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
6981
+ days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
6635
6982
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
6636
6983
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
6637
6984
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -6675,17 +7022,14 @@ function VideoCardReadout({
6675
7022
  const shown = videos.slice(0, max);
6676
7023
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
6677
7024
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6678
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
7025
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
6679
7026
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
6680
7027
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
6681
7028
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
6682
7029
  ] }),
6683
7030
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
6684
7031
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
6685
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
6686
- v.views,
6687
- " views"
6688
- ] })
7032
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
6689
7033
  ] })
6690
7034
  ] }, i)) })
6691
7035
  ] });
@@ -6702,7 +7046,7 @@ function OrderStatusReadout({
6702
7046
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
6703
7047
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
6704
7048
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6705
- stepArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
7049
+ stepArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
6706
7050
  const isDone = i < safeCurrent;
6707
7051
  const isCurrent = i === safeCurrent;
6708
7052
  const isPending = i > safeCurrent;
@@ -6752,9 +7096,9 @@ function AttendanceGridReadout({
6752
7096
  const memberArr = safeParseArray(members).map(String);
6753
7097
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
6754
7098
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6755
- rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
7099
+ rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
6756
7100
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
6757
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
7101
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.attendance.corner" }) }),
6758
7102
  memberArr.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
6759
7103
  ] }) }),
6760
7104
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
@@ -6808,7 +7152,7 @@ function TimezoneClockReadout({
6808
7152
  }
6809
7153
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
6810
7154
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6811
- clocks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
7155
+ clocks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
6812
7156
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
6813
7157
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
6814
7158
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -6842,7 +7186,7 @@ function FormSummaryReadout({
6842
7186
  }
6843
7187
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
6844
7188
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6845
- fields.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
7189
+ fields.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
6846
7190
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
6847
7191
  /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
6848
7192
  ] }, i)) })
@@ -6875,7 +7219,7 @@ function SongQueueReadout({
6875
7219
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
6876
7220
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
6877
7221
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6878
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
7222
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
6879
7223
  const isCurrent = i === safeCurrent;
6880
7224
  return /* @__PURE__ */ jsxRuntime.jsxs(
6881
7225
  "li",
@@ -6920,12 +7264,20 @@ function CalendarMonthReadout({
6920
7264
  } catch {
6921
7265
  }
6922
7266
  }
6923
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
7267
+ const weekDays = [
7268
+ "readout.weekday.0",
7269
+ "readout.weekday.1",
7270
+ "readout.weekday.2",
7271
+ "readout.weekday.3",
7272
+ "readout.weekday.4",
7273
+ "readout.weekday.5",
7274
+ "readout.weekday.6"
7275
+ ];
6924
7276
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
6925
7277
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6926
- days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
7278
+ days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
6927
7279
  monthName ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
6928
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: w }, w)) }),
7280
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: w }) }, w)) }),
6929
7281
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs(
6930
7282
  "div",
6931
7283
  {
@@ -6968,7 +7320,7 @@ function TerminalReadout({
6968
7320
  const shown = lines.slice(0, max);
6969
7321
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
6970
7322
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6971
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
7323
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
6972
7324
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
6973
7325
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
6974
7326
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -7067,10 +7419,11 @@ function KanbanBoardReadout({
7067
7419
  columnWidth,
7068
7420
  max
7069
7421
  }) {
7422
+ const \u5F15\u304F = use\u5B57\u5F15();
7070
7423
  const buckets = {
7071
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
7072
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
7073
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
7424
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
7425
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
7426
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
7074
7427
  };
7075
7428
  const trimmed = value.trim();
7076
7429
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -7187,7 +7540,7 @@ function KanbanBoardReadout({
7187
7540
  )
7188
7541
  ] }, ti);
7189
7542
  }),
7190
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
7543
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
7191
7544
  "text",
7192
7545
  {
7193
7546
  x: x + columnWidth / 2,
@@ -7196,11 +7549,7 @@ function KanbanBoardReadout({
7196
7549
  textAnchor: "middle",
7197
7550
  fill: "#64748b",
7198
7551
  style: { userSelect: "none" },
7199
- children: [
7200
- "+",
7201
- overflow,
7202
- " more"
7203
- ]
7552
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7204
7553
  }
7205
7554
  ) : null
7206
7555
  ] }, k);
@@ -7757,7 +8106,7 @@ function UserPresenceReadout({
7757
8106
  )
7758
8107
  ] }, i);
7759
8108
  }),
7760
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
8109
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
7761
8110
  "text",
7762
8111
  {
7763
8112
  x: width / 2,
@@ -7766,11 +8115,7 @@ function UserPresenceReadout({
7766
8115
  textAnchor: "middle",
7767
8116
  fill: "#64748b",
7768
8117
  style: { userSelect: "none" },
7769
- children: [
7770
- "+",
7771
- overflow,
7772
- " more"
7773
- ]
8118
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7774
8119
  }
7775
8120
  ) : null
7776
8121
  ]
@@ -7821,12 +8166,7 @@ function RatingThumbReadout({
7821
8166
  "\u25B2 ",
7822
8167
  upCount
7823
8168
  ] }),
7824
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
7825
- upPct,
7826
- "% up \xB7 ",
7827
- total,
7828
- " votes"
7829
- ] }),
8169
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.ratingThumb.summary", v: { pct: upPct, total } }) }),
7830
8170
  /* @__PURE__ */ jsxRuntime.jsxs(
7831
8171
  "text",
7832
8172
  {
@@ -8001,11 +8341,7 @@ function KpiTrendTileReadout({
8001
8341
  deltaPct.toFixed(1),
8002
8342
  "%)"
8003
8343
  ] }),
8004
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
8005
- "prev ",
8006
- prev,
8007
- unit
8008
- ] }),
8344
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.kpiTrend.prev", v: { v: `${prev}${unit}` } }) }),
8009
8345
  history.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
8010
8346
  ]
8011
8347
  }
@@ -8093,7 +8429,7 @@ function QuickPollEmojiReadout({
8093
8429
  )
8094
8430
  ] }, i);
8095
8431
  }),
8096
- /* @__PURE__ */ jsxRuntime.jsxs(
8432
+ /* @__PURE__ */ jsxRuntime.jsx(
8097
8433
  "text",
8098
8434
  {
8099
8435
  x: width - 8,
@@ -8102,10 +8438,7 @@ function QuickPollEmojiReadout({
8102
8438
  textAnchor: "end",
8103
8439
  fill: "#64748b",
8104
8440
  style: { userSelect: "none" },
8105
- children: [
8106
- "total ",
8107
- total
8108
- ]
8441
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
8109
8442
  }
8110
8443
  )
8111
8444
  ]
@@ -8240,14 +8573,8 @@ function ThreadSummaryReadout({
8240
8573
  height,
8241
8574
  children: [
8242
8575
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
8243
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
8244
- participants,
8245
- " participants"
8246
- ] }),
8247
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
8248
- "last: ",
8249
- lastAuthor
8250
- ] }),
8576
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.thread.participants", v: { n: participants } }) }),
8577
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.thread.last", v: { name: lastAuthor } }) }),
8251
8578
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
8252
8579
  unread > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-thread-unread": "1", children: [
8253
8580
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -8278,7 +8605,7 @@ function ReadReceiptReadout({
8278
8605
  colorPending
8279
8606
  }) {
8280
8607
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
8281
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
8608
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
8282
8609
  const iconColor = status === 2 ? colorRead : colorPending;
8283
8610
  const width = 180;
8284
8611
  const height = 32;
@@ -8313,7 +8640,7 @@ function ReadReceiptReadout({
8313
8640
  }
8314
8641
  ) : null
8315
8642
  ] }),
8316
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
8643
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labelKey }) })
8317
8644
  ]
8318
8645
  }
8319
8646
  )
@@ -8327,7 +8654,7 @@ function PasswordStrengthReadout({
8327
8654
  colorWeak
8328
8655
  }) {
8329
8656
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
8330
- const labels = ["too weak", "weak", "fair", "good", "strong"];
8657
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
8331
8658
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
8332
8659
  const barW = 46;
8333
8660
  const gap = 6;
@@ -8371,7 +8698,7 @@ function PasswordStrengthReadout({
8371
8698
  textAnchor: "end",
8372
8699
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
8373
8700
  style: { userSelect: "none" },
8374
- children: labels[level]
8701
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labels[level] })
8375
8702
  }
8376
8703
  )
8377
8704
  ]
@@ -8506,7 +8833,7 @@ function FileDropzoneReadout({
8506
8833
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: filename }),
8507
8834
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
8508
8835
  ] }),
8509
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
8836
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
8510
8837
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
8511
8838
  /* @__PURE__ */ jsxRuntime.jsx(
8512
8839
  "text",
@@ -8518,7 +8845,7 @@ function FileDropzoneReadout({
8518
8845
  textAnchor: "middle",
8519
8846
  fill: "#64748b",
8520
8847
  style: { userSelect: "none" },
8521
- children: "\u2B06 Drop file here"
8848
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.drop" })
8522
8849
  }
8523
8850
  ),
8524
8851
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8530,7 +8857,7 @@ function FileDropzoneReadout({
8530
8857
  textAnchor: "middle",
8531
8858
  fill: "#94a3b8",
8532
8859
  style: { userSelect: "none" },
8533
- children: "or click to browse"
8860
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.browse" })
8534
8861
  }
8535
8862
  )
8536
8863
  ] })
@@ -8565,7 +8892,7 @@ function LogStreamReadout({
8565
8892
  }
8566
8893
  }
8567
8894
  const shown = rows.slice(-5);
8568
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
8895
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
8569
8896
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
8570
8897
  const width = 300;
8571
8898
  const rowH = 18;
@@ -8598,7 +8925,7 @@ function LogStreamReadout({
8598
8925
  fill: "#ffffff",
8599
8926
  fontFamily: "monospace",
8600
8927
  style: { userSelect: "none" },
8601
- children: levelLabels[r.level] ?? "INF"
8928
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
8602
8929
  }
8603
8930
  ),
8604
8931
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -8792,10 +9119,10 @@ function CartSummaryReadout({
8792
9119
  if (!Number.isFinite(shipping)) shipping = 0;
8793
9120
  if (!Number.isFinite(total)) total = 0;
8794
9121
  const rows = [
8795
- { l: "Items", v: `${items}`, bold: false },
8796
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
8797
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
8798
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
9122
+ { l: "readout.cart.items", v: `${items}`, bold: false },
9123
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
9124
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
9125
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
8799
9126
  ];
8800
9127
  const width = 260;
8801
9128
  const rowH = 20;
@@ -8825,7 +9152,7 @@ function CartSummaryReadout({
8825
9152
  fontWeight: isTotal ? 700 : 500,
8826
9153
  fill: isTotal ? colorTotal : "#334155",
8827
9154
  style: { userSelect: "none" },
8828
- children: r.l
9155
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: r.l })
8829
9156
  }
8830
9157
  ),
8831
9158
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8873,6 +9200,8 @@ function PricingTierReadout({
8873
9200
  }
8874
9201
  }
8875
9202
  if (!Number.isFinite(price)) price = 0;
9203
+ const \u5F15\u304F = use\u5B57\u5F15();
9204
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
8876
9205
  const width = 240;
8877
9206
  const height = 176;
8878
9207
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -8897,7 +9226,7 @@ function PricingTierReadout({
8897
9226
  textAnchor: "middle",
8898
9227
  fill: "#ffffff",
8899
9228
  style: { userSelect: "none" },
8900
- children: planName || "Plan"
9229
+ children: \u898B\u305B\u308B\u540D\u524D
8901
9230
  }
8902
9231
  ),
8903
9232
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -8925,7 +9254,7 @@ function PricingTierReadout({
8925
9254
  textAnchor: "middle",
8926
9255
  fill: "#64748b",
8927
9256
  style: { userSelect: "none" },
8928
- children: "per month"
9257
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.pricing.perMonth" })
8929
9258
  }
8930
9259
  ),
8931
9260
  features.slice(0, 3).map((f, i) => {
@@ -8940,7 +9269,7 @@ function PricingTierReadout({
8940
9269
  ] }, i);
8941
9270
  }),
8942
9271
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
8943
- /* @__PURE__ */ jsxRuntime.jsxs(
9272
+ /* @__PURE__ */ jsxRuntime.jsx(
8944
9273
  "text",
8945
9274
  {
8946
9275
  x: width / 2,
@@ -8950,10 +9279,7 @@ function PricingTierReadout({
8950
9279
  textAnchor: "middle",
8951
9280
  fill: "#ffffff",
8952
9281
  style: { userSelect: "none" },
8953
- children: [
8954
- "Get ",
8955
- planName || "Plan"
8956
- ]
9282
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
8957
9283
  }
8958
9284
  )
8959
9285
  ]
@@ -9019,12 +9345,12 @@ function CouponCodeReadout({
9019
9345
  fill: applied ? colorApplied : "#94a3b8",
9020
9346
  fontFamily: "monospace",
9021
9347
  style: { userSelect: "none" },
9022
- children: code || "ENTER CODE"
9348
+ children: code || /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.placeholder" })
9023
9349
  }
9024
9350
  ),
9025
9351
  applied ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-applied": "1", children: [
9026
9352
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
9027
- /* @__PURE__ */ jsxRuntime.jsxs(
9353
+ /* @__PURE__ */ jsxRuntime.jsx(
9028
9354
  "text",
9029
9355
  {
9030
9356
  x: boxW + 57,
@@ -9034,11 +9360,7 @@ function CouponCodeReadout({
9034
9360
  textAnchor: "middle",
9035
9361
  fill: "#ffffff",
9036
9362
  style: { userSelect: "none" },
9037
- children: [
9038
- "-",
9039
- discountPct,
9040
- "% off"
9041
- ]
9363
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
9042
9364
  }
9043
9365
  )
9044
9366
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -9053,7 +9375,7 @@ function CouponCodeReadout({
9053
9375
  textAnchor: "middle",
9054
9376
  fill: "#ffffff",
9055
9377
  style: { userSelect: "none" },
9056
- children: "Apply"
9378
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.apply" })
9057
9379
  }
9058
9380
  )
9059
9381
  ] })
@@ -9133,10 +9455,7 @@ function ArticlePreviewReadout({
9133
9455
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
9134
9456
  ] }),
9135
9457
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: thumbW + 20, y: 60, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: excerpt.length > 56 ? `${excerpt.slice(28, 55)}\u2026` : excerpt.slice(28, 56) }),
9136
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
9137
- "by ",
9138
- author
9139
- ] }),
9458
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.article.by", v: { author } }) }),
9140
9459
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
9141
9460
  ]
9142
9461
  }
@@ -11515,6 +11834,8 @@ function diagram(id, options) {
11515
11834
  ...options.structuredData === "exclude" ? { structuredData: "exclude" } : {},
11516
11835
  // 配色の名前は素通しする。 空文字の遮断は `layout` が持つ (後段が必ず通るため)
11517
11836
  ...options.palette !== void 0 ? { palette: options.palette } : {},
11837
+ // 言語も素通しする。 型の外の値を既定に落とすのは `layout` の 1 箇所に置く
11838
+ ...options.lang !== void 0 ? { lang: options.lang } : {},
11518
11839
  // 種類の名前も同じ経路で渡し、空文字の扱いを `layout` の 1 箇所に揃える
11519
11840
  ...options.type !== void 0 ? { type: options.type } : {},
11520
11841
  // inputs / formulas / scrollTriggers / eventBindings は空なら省略 (static diagram の JSON 形状維持)
@@ -20948,6 +21269,9 @@ function layout(diag) {
20948
21269
  // **遮断はここだけに置く**。 描画は必ず組み立てを通り、組み立て API も `er` も
20949
21270
  // 素通しにしてある。 上流にも置くと、どの入力でも通らない分岐が残る
20950
21271
  ...diag.palette ? { palette: diag.palette } : {},
21272
+ // 描画側の固定の字の言語 (#847)。 既定 (`en`) と型の外の値は持たせない = 配置の結果の形を
21273
+ // 変更前と揃え、記法の書き損じで一部の字だけ日本語になる形を作らない
21274
+ ...resolveLang(diag.lang) === "ja" ? { lang: "ja" } : {},
20951
21275
  // 種類も配色と同じく空の目印を出さない。 遮断をここに揃えると手書きの図にも効く
20952
21276
  ...diag.type ? { type: diag.type } : {},
20953
21277
  bboxes,
@@ -23432,12 +23756,12 @@ function \u5272\u308B\u5019\u88DC(text) {
23432
23756
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
23433
23757
  }
23434
23758
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
23435
- const \u5B57 = [];
23759
+ const \u5B572 = [];
23436
23760
  const \u4E26\u3073 = [...text];
23437
23761
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
23438
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23762
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23439
23763
  }
23440
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
23764
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
23441
23765
  }
23442
23766
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
23443
23767
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -25796,9 +26120,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
25796
26120
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
25797
26121
  };
25798
26122
  }
25799
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
26123
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
25800
26124
  let \u7D1A = \u521D\u671F;
25801
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
26125
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
25802
26126
  return \u7D1A;
25803
26127
  }
25804
26128
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -27777,6 +28101,11 @@ var commonFrame2 = (active) => ({
27777
28101
  var ASCENT3 = 0.72;
27778
28102
  var DESCENT3 = 0.25;
27779
28103
  var MONO_ADVANCE = 0.62;
28104
+ function \u7B49\u5E45\u306E\u6841(s) {
28105
+ let \u6841 = 0;
28106
+ for (const c of s) \u6841 += (c.codePointAt(0) ?? 0) >= 11904 ? 2 : 1;
28107
+ return \u6841;
28108
+ }
27780
28109
  var LABEL_SUB_RATIO = 11 / 16;
27781
28110
  var LABEL_EYE_RATIO = 12 / 16;
27782
28111
  var LABEL_EYE_GAP = 8;
@@ -27874,7 +28203,8 @@ function ShapeWindowNode({ node, active }) {
27874
28203
  commonLabel2(node, node.cx, \u540D\u524D.y, \u540D\u524D.size)
27875
28204
  ] });
27876
28205
  }
27877
- function ShapeTerminalNode({ node, active }) {
28206
+ function ShapeTerminalNode({ node, active, lang }) {
28207
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
27878
28208
  const frame = commonFrame2(active);
27879
28209
  const \u7DDA = frame.strokeWidth / 2;
27880
28210
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -27895,10 +28225,10 @@ function ShapeTerminalNode({ node, active }) {
27895
28225
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
27896
28226
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
27897
28227
  ],
27898
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: "\u2192 12 chunks in 1.8s" }],
28228
+ [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
27899
28229
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
27900
28230
  ];
27901
- const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((t) => t.\u5DE6 + t.\u6587.length * MONO_ADVANCE * t.\u5B57)) + \u4F59\u767D;
28231
+ const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
27902
28232
  const \u81EA\u7136\u9AD8 = \u5E2F + \u5148\u982D + \u884C\u9593 * (\u884C.length - 1) + Math.max(\u30AB\u30FC\u30BD\u30EB.\u4E0B, 12.5 * DESCENT3);
27903
28233
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
27904
28234
  const barH = \u5E2F * \u500D;
@@ -28008,7 +28338,8 @@ function ShapeTerminalNode({ node, active }) {
28008
28338
  )
28009
28339
  ] });
28010
28340
  }
28011
- function ShapeCodeBlockNode({ node, active }) {
28341
+ function ShapeCodeBlockNode({ node, active, lang }) {
28342
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28012
28343
  const frame = commonFrame2(active);
28013
28344
  const \u7DDA = frame.strokeWidth / 2;
28014
28345
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -28098,7 +28429,7 @@ function ShapeCodeBlockNode({ node, active }) {
28098
28429
  fontFamily: lineFont,
28099
28430
  textAnchor: "middle",
28100
28431
  fill: "#e6edf3",
28101
- children: "utils.ts"
28432
+ children: \u5B57\u5F15("codeBlock.fileName")
28102
28433
  }
28103
28434
  ),
28104
28435
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + tabW - \u4E38, cy: y + tabH / 2, r: 3 * \u500D, fill: "#7cd88f", stroke: "none" }),
@@ -28174,7 +28505,8 @@ function ShapeCodeBlockNode({ node, active }) {
28174
28505
  )
28175
28506
  ] });
28176
28507
  }
28177
- function ShapeKanbanCardNode({ node, active }) {
28508
+ function ShapeKanbanCardNode({ node, active, lang }) {
28509
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28178
28510
  const frame = commonFrame2(active);
28179
28511
  const \u7DDA = frame.strokeWidth / 2;
28180
28512
  const \u5F71 = 3;
@@ -28186,7 +28518,7 @@ function ShapeKanbanCardNode({ node, active }) {
28186
28518
  const \u5DE6\u53F3\u4F59\u767D = 14;
28187
28519
  const \u4E0A\u6BB5\u9699\u9593 = 8;
28188
28520
  const \u512A\u5148\u5E2F\u9AD8 = 10;
28189
- const ID\u6587 = "CAR-1111";
28521
+ const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
28190
28522
  const ID\u57FA\u6E96 = 30;
28191
28523
  const ID\u5B57 = 11;
28192
28524
  const ID\u5B57\u9593 = 1;
@@ -28205,7 +28537,7 @@ function ShapeKanbanCardNode({ node, active }) {
28205
28537
  const \u4E0B\u5E2F = FOOTER\u4E0B - AVATAR\u4E2D\u5FC3Y + AVATAR\u534A\u5F84 + AVATAR\u67A0 / 2 + \u5E2F\u9593\u4F59\u767D;
28206
28538
  const \u4E2D\u5E2F = \u540D\u524D\u5B57 * ASCENT3 + \u540D\u524D\u5B57 * \u8AAC\u660E\u57FA\u6E96\u6BD4 + \u540D\u524D\u5B57 * \u8AAC\u660E\u5B57\u6BD4 * DESCENT3;
28207
28539
  const \u81EA\u7136\u9AD8 = \u4E0A\u5E2F + \u4E2D\u5E2F + \u4E0B\u5E2F;
28208
- const ID\u5E45 = ID\u6587.length * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * ID\u6587.length;
28540
+ const ID\u5E45 = \u7B49\u5E45\u306E\u6841(ID\u6587) * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * [...ID\u6587].length;
28209
28541
  const \u81EA\u7136\u5E45 = \u5DE6\u53F3\u4F59\u767D + ID\u5E45 + \u4E0A\u6BB5\u9699\u9593 + PILL\u5E45 + \u5DE6\u53F3\u4F59\u767D;
28210
28542
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, h / \u81EA\u7136\u9AD8);
28211
28543
  const priorityBarH = \u512A\u5148\u5E2F\u9AD8 * \u500D;
@@ -28284,7 +28616,7 @@ function ShapeKanbanCardNode({ node, active }) {
28284
28616
  textAnchor: "middle",
28285
28617
  fill: "#5a4a1a",
28286
28618
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
28287
- children: "IN PROG"
28619
+ children: \u5B57\u5F15("kanbanCard.status")
28288
28620
  }
28289
28621
  ),
28290
28622
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -28308,7 +28640,7 @@ function ShapeKanbanCardNode({ node, active }) {
28308
28640
  fontSize: \u540D\u524D.size * \u8AAC\u660E\u5B57\u6BD4,
28309
28641
  textAnchor: "middle",
28310
28642
  fill: "var(--cdl-text-dim, #5a6270)",
28311
- children: "shape-driven kind \u5B9F\u88C5"
28643
+ children: \u5B57\u5F15("kanbanCard.task")
28312
28644
  }
28313
28645
  ),
28314
28646
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + \u5DE6\u53F3\u4F59\u767D * \u500D}, ${footY})`, children: [
@@ -28371,7 +28703,7 @@ function ShapeKanbanCardNode({ node, active }) {
28371
28703
  fontWeight: 600,
28372
28704
  textAnchor: "end",
28373
28705
  fill: "var(--cdl-text-dim, #5a6270)",
28374
- children: "Jul 10"
28706
+ children: \u5B57\u5F15("kanbanCard.due")
28375
28707
  }
28376
28708
  )
28377
28709
  ] })
@@ -29415,7 +29747,8 @@ function EthereumDiamond({ cx, cy, h, colors }) {
29415
29747
  /* @__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" })
29416
29748
  ] });
29417
29749
  }
29418
- function ShapeSmartContractNode({ node, active }) {
29750
+ function ShapeSmartContractNode({ node, active, lang }) {
29751
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29419
29752
  const frame = commonFrame4(active);
29420
29753
  const r = shapeRegion(node);
29421
29754
  const docW = SMART_CONTRACT_W;
@@ -29451,7 +29784,7 @@ function ShapeSmartContractNode({ node, active }) {
29451
29784
  /* @__PURE__ */ jsxRuntime.jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
29452
29785
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
29453
29786
  [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)),
29454
- /* @__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()" }),
29787
+ /* @__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") }),
29455
29788
  /* @__PURE__ */ jsxRuntime.jsx(
29456
29789
  "polygon",
29457
29790
  {
@@ -29472,14 +29805,14 @@ function ShapeSmartContractNode({ node, active }) {
29472
29805
  }
29473
29806
  var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
29474
29807
  var BLOCK_DEFAULT_FIELDS = [
29475
- { label: "hash", value: "0xaf31c9d2..." },
29476
- { label: "prev", value: "0x7b3f92c1..." },
29477
- { label: "merkle", value: "0xc1892f4a..." },
29478
- { label: "nonce", value: "82,914" },
29479
- { label: "tx", value: "142 tx" }
29808
+ { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
29809
+ { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
29810
+ { key: "merkle", label: "blockchainBlock.merkle", value: { text: "0xc1892f4a..." } },
29811
+ { key: "nonce", label: "blockchainBlock.nonce", value: { text: "82,914" } },
29812
+ { key: "tx", label: "blockchainBlock.tx", value: { \u8F9E\u66F8: "blockchainBlock.txCount" } }
29480
29813
  ];
29481
- var BLOCK_DEFAULT_TITLE = "Block #421,873";
29482
- function ShapeBlockchainBlockNode({ node, active }) {
29814
+ function ShapeBlockchainBlockNode({ node, active, lang }) {
29815
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29483
29816
  const frame = commonFrame4(active);
29484
29817
  const r = shapeRegion(node);
29485
29818
  const bw = BLOCK_W;
@@ -29489,11 +29822,15 @@ function ShapeBlockchainBlockNode({ node, active }) {
29489
29822
  const x = cx - bw / 2;
29490
29823
  const y = cy - bh / 2;
29491
29824
  const \u6E21\u3055\u308C\u305F = (v) => (v ?? "").trim();
29492
- const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || BLOCK_DEFAULT_TITLE;
29493
- const fields = BLOCK_DEFAULT_FIELDS.map((f) => ({
29494
- label: f.label,
29495
- value: f.label === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || f.value : f.value
29496
- }));
29825
+ const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || \u5B57\u5F15("blockchainBlock.title");
29826
+ const fields = BLOCK_DEFAULT_FIELDS.map((f) => {
29827
+ const \u65E2\u5B9A\u5024 = "text" in f.value ? f.value.text : \u5B57\u5F15(f.value.\u8F9E\u66F8);
29828
+ return {
29829
+ key: f.key,
29830
+ label: \u5B57\u5F15(f.label),
29831
+ value: f.key === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || \u65E2\u5B9A\u5024 : \u65E2\u5B9A\u5024
29832
+ };
29833
+ });
29497
29834
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
29498
29835
  const art = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
29499
29836
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
@@ -29503,7 +29840,7 @@ function ShapeBlockchainBlockNode({ node, active }) {
29503
29840
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
29504
29841
  fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
29505
29842
  /* @__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 }),
29506
- /* @__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) }),
29843
+ /* @__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) }),
29507
29844
  /* @__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 })
29508
29845
  ] }, i)),
29509
29846
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -29708,7 +30045,8 @@ function ShapeBlockchainNodeNode({ node, active }) {
29708
30045
  bottomLabel2(node, r.cx, r.label)
29709
30046
  ] });
29710
30047
  }
29711
- function ShapeRpcNodeNode({ node, active }) {
30048
+ function ShapeRpcNodeNode({ node, active, lang }) {
30049
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29712
30050
  const frame = commonFrame4(active);
29713
30051
  const r = shapeRegion(node);
29714
30052
  const cx = r.cx;
@@ -29721,7 +30059,7 @@ function ShapeRpcNodeNode({ node, active }) {
29721
30059
  /* @__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 }),
29722
30060
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 30, rx: 10, fill: "#2d3a4f", stroke: "none" }),
29723
30061
  /* @__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" }) }),
29724
- /* @__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" }),
30062
+ /* @__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") }),
29725
30063
  /* @__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: "{...}" }),
29726
30064
  /* @__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" }),
29727
30065
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 16, y: y + bh - 24, width: bw - 32, height: 8, rx: 4, fill: "#0f1419", stroke: "none" }),
@@ -30007,7 +30345,8 @@ var TRUST_BASE_H = 14;
30007
30345
  var TRUST_BODY_OUT = 8;
30008
30346
  var TRUST_BLD_W_MIN = 140;
30009
30347
  var TRUST_BLD_W_MAX = 280;
30010
- function ShapeTrustBankNode({ node, active }) {
30348
+ function ShapeTrustBankNode({ node, active, lang }) {
30349
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30011
30350
  const frame = commonFrame5(active);
30012
30351
  const r = shapeRegion(node);
30013
30352
  const \u7DDA = frame.strokeWidth / 2;
@@ -30044,7 +30383,7 @@ function ShapeTrustBankNode({ node, active }) {
30044
30383
  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);
30045
30384
  }),
30046
30385
  /* @__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" }),
30047
- /* @__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" }),
30386
+ /* @__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") }),
30048
30387
  /* @__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 }),
30049
30388
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
30050
30389
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -30063,7 +30402,8 @@ function ShapeTrustBankNode({ node, active }) {
30063
30402
  bottomLabel3(node, r.cx, r.label)
30064
30403
  ] });
30065
30404
  }
30066
- function ShapePaymentProviderNode({ node, active }) {
30405
+ function ShapePaymentProviderNode({ node, active, lang }) {
30406
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30067
30407
  const frame = commonFrame5(active);
30068
30408
  const r = shapeRegion(node);
30069
30409
  const cx = r.cx;
@@ -30080,13 +30420,13 @@ function ShapePaymentProviderNode({ node, active }) {
30080
30420
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: boxW, height: boxH, rx: 10, fill: "#255a7a", stroke: accentDark, strokeWidth: frame.strokeWidth }),
30081
30421
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: boxW, height: headerH, rx: 10, fill: accentDarker }),
30082
30422
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + headerH - 8, width: boxW, height: 8, fill: accentDarker }),
30083
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: "PAY" }),
30423
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("paymentProvider.sign") }),
30084
30424
  /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30085
30425
  /* @__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" }) }),
30086
30426
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
30087
30427
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
30088
30428
  ] }),
30089
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: "PROCESSING" }),
30429
+ /* @__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") }),
30090
30430
  bottomLabel3(node, r.cx, r.label)
30091
30431
  ] });
30092
30432
  }
@@ -30134,7 +30474,8 @@ var BROKERAGE_SHADE_OUT = 2;
30134
30474
  var BROKERAGE_W_MIN = BROKERAGE_COLS * BROKERAGE_CELL_W + (BROKERAGE_COLS - 1) * BROKERAGE_GAP_X + 6;
30135
30475
  var BROKERAGE_W_MAX = 140;
30136
30476
  var BROKERAGE_H_MIN = BROKERAGE_TICK_H + BROKERAGE_LOGO_H + BROKERAGE_BASE_H;
30137
- function ShapeBrokerageNode({ node, active }) {
30477
+ function ShapeBrokerageNode({ node, active, lang }) {
30478
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30138
30479
  const frame = commonFrame5(active);
30139
30480
  const r = shapeRegion(node);
30140
30481
  const cx = r.cx;
@@ -30170,9 +30511,9 @@ function ShapeBrokerageNode({ node, active }) {
30170
30511
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
30171
30512
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
30172
30513
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
30173
- /* @__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" }),
30514
+ /* @__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") }),
30174
30515
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
30175
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: "$ SECURITIES" }),
30516
+ /* @__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") }),
30176
30517
  Array.from({ length: rows }).map(
30177
30518
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
30178
30519
  const wx = gridStartX + ci * (cellW + gapX);
@@ -30193,7 +30534,8 @@ function ShapeBrokerageNode({ node, active }) {
30193
30534
  bottomLabel3(node, r.cx, r.label)
30194
30535
  ] });
30195
30536
  }
30196
- function ShapeExchangeNode({ node, active }) {
30537
+ function ShapeExchangeNode({ node, active, lang }) {
30538
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30197
30539
  const frame = commonFrame5(active);
30198
30540
  const r = shapeRegion(node);
30199
30541
  const cx = r.cx;
@@ -30238,9 +30580,9 @@ function ShapeExchangeNode({ node, active }) {
30238
30580
  ] }, `d${i}`);
30239
30581
  }),
30240
30582
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30241
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "EXCHANGE" }),
30583
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30242
30584
  /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
30243
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "clearing" }),
30585
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30244
30586
  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}`))
30245
30587
  ] });
30246
30588
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -30262,7 +30604,8 @@ var ATM_PANEL_H = 146;
30262
30604
  var ATM_W_MIN = 100;
30263
30605
  var ATM_W_MAX = 140;
30264
30606
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
30265
- function ShapeAtmNode({ node, active }) {
30607
+ function ShapeAtmNode({ node, active, lang }) {
30608
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30266
30609
  const frame = commonFrame5(active);
30267
30610
  const r = shapeRegion(node);
30268
30611
  const cx = r.cx;
@@ -30296,12 +30639,12 @@ function ShapeAtmNode({ node, active }) {
30296
30639
  const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30297
30640
  /* @__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" }),
30298
30641
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
30299
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "ATM CORNER" }),
30642
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
30300
30643
  /* @__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 }),
30301
30644
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
30302
30645
  /* @__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 }),
30303
30646
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30304
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "SELECT AMOUNT" }),
30647
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30305
30648
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30306
30649
  /* @__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 }),
30307
30650
  (() => {
@@ -30315,7 +30658,7 @@ function ShapeAtmNode({ node, active }) {
30315
30658
  ["5", "#5a6270"],
30316
30659
  ["6", "#5a6270"],
30317
30660
  ["0", "#5a6270"],
30318
- ["OK", "#4ea36a"]
30661
+ [\u5B57\u5F15("atm.ok"), "#4ea36a"]
30319
30662
  ];
30320
30663
  const keyW = 18;
30321
30664
  const keyH = 10;
@@ -30328,13 +30671,16 @@ function ShapeAtmNode({ node, active }) {
30328
30671
  const ky = 74 + row * (keyH + 2);
30329
30672
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30330
30673
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
30331
- /* @__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] })
30674
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
30675
+ /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
30676
+ i === keys.length - 1 ? 6 : 7
30677
+ ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
30332
30678
  ] }, `k${i}`);
30333
30679
  });
30334
30680
  })(),
30335
30681
  /* @__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 }),
30336
30682
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
30337
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "CARD SLOT" }),
30683
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30338
30684
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
30339
30685
  ] }),
30340
30686
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -30419,7 +30765,8 @@ function ShapeWebsiteNode({ node, active }) {
30419
30765
  bottomLabel4(node, r.cx, r.label)
30420
30766
  ] });
30421
30767
  }
30422
- function ShapeStorefrontNode({ node, active }) {
30768
+ function ShapeStorefrontNode({ node, active, lang }) {
30769
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30423
30770
  const frame = commonFrame6(active);
30424
30771
  const r = shapeRegion(node);
30425
30772
  const cx = r.cx;
@@ -30445,7 +30792,7 @@ function ShapeStorefrontNode({ node, active }) {
30445
30792
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
30446
30793
  /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
30447
30794
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
30448
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: "SHOP" }),
30795
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("storefront.sign") }),
30449
30796
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y: facadeY, width: bw, height: facadeH, fill: "#e0e4e8", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
30450
30797
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: winX, y: winY, width: winW, height: winH, fill: "#a4c5d9", stroke: accentDarker, strokeWidth: 2 }),
30451
30798
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: winX + winW / 2, y1: winY, x2: winX + winW / 2, y2: winY + winH, stroke: accentDarker, strokeWidth: 1 }),
@@ -30459,7 +30806,7 @@ function ShapeStorefrontNode({ node, active }) {
30459
30806
  /* @__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 }),
30460
30807
  /* @__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 }),
30461
30808
  /* @__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 }),
30462
- /* @__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" }),
30809
+ /* @__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") }),
30463
30810
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
30464
30811
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
30465
30812
  bottomLabel4(node, r.cx, r.label)
@@ -30476,7 +30823,8 @@ var WAREHOUSE_SHADOW_RX_RATIO = 0.5;
30476
30823
  var WAREHOUSE_H_MIN = WAREHOUSE_ROOF_H + WAREHOUSE_SIGN_H + 68;
30477
30824
  var WAREHOUSE_W_MIN = 160;
30478
30825
  var WAREHOUSE_W_MAX = 240;
30479
- function ShapeWarehouseNode({ node, active }) {
30826
+ function ShapeWarehouseNode({ node, active, lang }) {
30827
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30480
30828
  const frame = commonFrame6(active);
30481
30829
  const r = shapeRegion(node);
30482
30830
  const cx = r.cx;
@@ -30505,7 +30853,7 @@ function ShapeWarehouseNode({ node, active }) {
30505
30853
  /* @__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" }),
30506
30854
  /* @__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 }),
30507
30855
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
30508
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: "WAREHOUSE" }),
30856
+ /* @__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") }),
30509
30857
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
30510
30858
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
30511
30859
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -30662,7 +31010,8 @@ var API_ROWS = 3;
30662
31010
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
30663
31011
  var API_W_MIN = 200;
30664
31012
  var API_W_MAX = 300;
30665
- function ShapeApiGatewayNode({ node, active }) {
31013
+ function ShapeApiGatewayNode({ node, active, lang }) {
31014
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30666
31015
  const frame = commonFrame6(active);
30667
31016
  const r = shapeRegion(node);
30668
31017
  const cx = r.cx;
@@ -30673,6 +31022,7 @@ function ShapeApiGatewayNode({ node, active }) {
30673
31022
  const x = cx - bw / 2;
30674
31023
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
30675
31024
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
31025
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
30676
31026
  const rowPitch = Math.max(
30677
31027
  API_ROW_PITCH_MIN,
30678
31028
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
@@ -30681,15 +31031,15 @@ function ShapeApiGatewayNode({ node, active }) {
30681
31031
  /* @__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" }),
30682
31032
  /* @__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 }),
30683
31033
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
30684
- /* @__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" }),
31034
+ /* @__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") }),
30685
31035
  [
30686
- { method: "GET", path: "/users", color: "#27c93f" },
30687
- { method: "POST", path: "/orders", color: "#e5c07b" },
30688
- { method: "DEL", path: "/session", color: "#c9302c" }
31036
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
31037
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
31038
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
30689
31039
  ].map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
30690
31040
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
30691
31041
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
30692
- /* @__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 }),
31042
+ /* @__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 }),
30693
31043
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
30694
31044
  /* @__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" }) })
30695
31045
  ] }, i))
@@ -30994,7 +31344,8 @@ function CdlNodeView({
30994
31344
  stateValues,
30995
31345
  currentPhaseId,
30996
31346
  chartLineScale,
30997
- \u95A2\u4FC2\u306E\u53D7\u3051\u53E3
31347
+ \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
31348
+ lang
30998
31349
  }) {
30999
31350
  const value = node.value ? interpolate(node.value, stateValues) : void 0;
31000
31351
  const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
@@ -31210,11 +31561,11 @@ function CdlNodeView({
31210
31561
  case "shape-window":
31211
31562
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWindowNode, { node: resolvedNode, active });
31212
31563
  case "shape-terminal":
31213
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active });
31564
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active, lang });
31214
31565
  case "shape-code-block":
31215
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active });
31566
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active, lang });
31216
31567
  case "shape-kanban-card":
31217
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active });
31568
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active, lang });
31218
31569
  case "shape-message-bubble":
31219
31570
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeMessageBubbleNode, { node: resolvedNode, active });
31220
31571
  case "shape-gear":
@@ -31232,11 +31583,11 @@ function CdlNodeView({
31232
31583
  case "shape-satellite":
31233
31584
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeSatelliteNode, { node: resolvedNode, active });
31234
31585
  case "shape-smart-contract":
31235
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active });
31586
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active, lang });
31236
31587
  case "shape-blockchain-block":
31237
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active });
31588
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active, lang });
31238
31589
  case "shape-rpc-node":
31239
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active });
31590
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active, lang });
31240
31591
  case "shape-wallet":
31241
31592
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWalletNode, { node: resolvedNode, active });
31242
31593
  case "shape-nft":
@@ -31254,29 +31605,29 @@ function CdlNodeView({
31254
31605
  case "shape-bank":
31255
31606
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeBankNode, { node: resolvedNode, active });
31256
31607
  case "shape-trust-bank":
31257
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active });
31608
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active, lang });
31258
31609
  case "shape-payment-provider":
31259
- return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active });
31610
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active, lang });
31260
31611
  case "shape-credit-card":
31261
31612
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCreditCardNode, { node: resolvedNode, active });
31262
31613
  case "shape-brokerage":
31263
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active });
31614
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active, lang });
31264
31615
  case "shape-exchange":
31265
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active });
31616
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active, lang });
31266
31617
  case "shape-atm":
31267
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active });
31618
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active, lang });
31268
31619
  case "shape-website":
31269
31620
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWebsiteNode, { node: resolvedNode, active });
31270
31621
  case "shape-storefront":
31271
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active });
31622
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active, lang });
31272
31623
  case "shape-warehouse":
31273
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active });
31624
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active, lang });
31274
31625
  case "shape-online-shop":
31275
31626
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeOnlineShopNode, { node: resolvedNode, active });
31276
31627
  case "shape-cdn-edge":
31277
31628
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCdnEdgeNode, { node: resolvedNode, active });
31278
31629
  case "shape-api-gateway":
31279
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active });
31630
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active, lang });
31280
31631
  case "shape-auditor":
31281
31632
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeAuditorNode, { node: resolvedNode, active });
31282
31633
  case "shape-regulator":
@@ -31651,6 +32002,7 @@ function CdlStage({
31651
32002
  {
31652
32003
  node,
31653
32004
  active: activeSet.has(node.id),
32005
+ lang: laid.lang,
31654
32006
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3: \u7BB1\u306E\u53D7\u3051\u53E3,
31655
32007
  drawing: \u63CF\u304F,
31656
32008
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
@@ -33393,6 +33745,7 @@ exports.requiredSpecClearance = requiredSpecClearance;
33393
33745
  exports.resolveEdgeLabelOverlapsWithChain = resolveEdgeLabelOverlapsWithChain;
33394
33746
  exports.resolveEdgeLabelOverlapsWithChainAndPropagate = resolveEdgeLabelOverlapsWithChainAndPropagate;
33395
33747
  exports.resolveLabelClearanceAfterPathPasses = resolveLabelClearanceAfterPathPasses;
33748
+ exports.resolveLang = resolveLang;
33396
33749
  exports.resolveOverlapsWithChain = resolveOverlapsWithChain;
33397
33750
  exports.resolveTarget = resolveTarget;
33398
33751
  exports.resolveTargetAll = resolveTargetAll;