@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/react.cjs CHANGED
@@ -358,6 +358,334 @@ function useReducedMotion() {
358
358
  return react.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
359
359
  }
360
360
 
361
+ // src/lang.ts
362
+ function resolveLang(value) {
363
+ return value === "ja" ? "ja" : "en";
364
+ }
365
+ var en = {
366
+ /** `shape-terminal` の 2 行目 (命令の出力) */
367
+ "terminal.output": "\u2192 12 chunks in 1.8s",
368
+ /** `shape-code-block` の札の file 名 */
369
+ "codeBlock.fileName": "utils.ts",
370
+ /** `shape-kanban-card` の課題の番号 */
371
+ "kanbanCard.id": "CAR-1111",
372
+ /** `shape-kanban-card` の状態の札 */
373
+ "kanbanCard.status": "IN PROG",
374
+ /** `shape-kanban-card` の題の下の説明 */
375
+ "kanbanCard.task": "shape-driven kind \u5B9F\u88C5",
376
+ /** `shape-kanban-card` の期日 */
377
+ "kanbanCard.due": "Jul 10",
378
+ /** `shape-smart-contract` の契約の本文の 1 行 */
379
+ "smartContract.call": "function execute()",
380
+ /** `shape-blockchain-block` の題を渡さない時の見出し */
381
+ "blockchainBlock.title": "Block #421,873",
382
+ /** `shape-blockchain-block` の 1 行目の名前 (塊を識別する値) */
383
+ "blockchainBlock.hash": "hash",
384
+ /** `shape-blockchain-block` の 2 行目の名前 (1 つ前の塊の識別値) */
385
+ "blockchainBlock.prev": "prev",
386
+ /** `shape-blockchain-block` の 3 行目の名前 (取引をまとめた木の根) */
387
+ "blockchainBlock.merkle": "merkle",
388
+ /** `shape-blockchain-block` の 4 行目の名前 (採掘で試した値) */
389
+ "blockchainBlock.nonce": "nonce",
390
+ /** `shape-blockchain-block` の 5 行目の名前 (取引の件数) */
391
+ "blockchainBlock.tx": "tx",
392
+ /** `shape-blockchain-block` の 5 行目の値 */
393
+ "blockchainBlock.txCount": "142 tx",
394
+ /** `shape-rpc-node` の稼働の札 */
395
+ "rpcNode.status": "RPC ONLINE",
396
+ /** `shape-trust-bank` の看板 */
397
+ "trustBank.sign": "TRUST",
398
+ /** `shape-payment-provider` の看板 */
399
+ "paymentProvider.sign": "PAY",
400
+ /** `shape-payment-provider` の状態の札 */
401
+ "paymentProvider.status": "PROCESSING",
402
+ /** `shape-brokerage` の株価の帯 */
403
+ "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
404
+ /** `shape-brokerage` の看板 */
405
+ "brokerage.sign": "$ SECURITIES",
406
+ /** `shape-exchange` の看板 */
407
+ "exchange.sign": "EXCHANGE",
408
+ /** `shape-exchange` の看板の下の札 */
409
+ "exchange.sub": "clearing",
410
+ /** `shape-atm` の天井の看板 */
411
+ "atm.sign": "ATM CORNER",
412
+ /** `shape-atm` の画面の案内 */
413
+ "atm.screen": "SELECT AMOUNT",
414
+ /** `shape-atm` の決める鍵 */
415
+ "atm.ok": "OK",
416
+ /** `shape-atm` のカードを入れる口の札 */
417
+ "atm.cardSlot": "CARD SLOT",
418
+ /** `shape-storefront` の看板 */
419
+ "storefront.sign": "SHOP",
420
+ /** `shape-storefront` の扉の札 */
421
+ "storefront.open": "OPEN",
422
+ /** `shape-warehouse` の看板 */
423
+ "warehouse.sign": "WAREHOUSE",
424
+ /** `shape-api-gateway` の看板 */
425
+ "apiGateway.sign": "API GATEWAY",
426
+ /** `shape-api-gateway` の 3 行目の要求の種類 */
427
+ "apiGateway.delete": "DEL",
428
+ /** `shape-api-gateway` の 1 行目の宛先 */
429
+ "apiGateway.users": "/users",
430
+ /** `shape-api-gateway` の 2 行目の宛先 */
431
+ "apiGateway.orders": "/orders",
432
+ /** `shape-api-gateway` の 3 行目の宛先 */
433
+ "apiGateway.session": "/session",
434
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
435
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
436
+ /** 配列を描く読み出しで、値が空の時の字 */
437
+ "readout.empty": "empty",
438
+ /** `sparkline` で点がまだ無い時の字 */
439
+ "readout.sparkline.waiting": "waiting",
440
+ /** 時の流れの入力欄の速さ */
441
+ "input.timeline.speed": "{speed}x",
442
+ /** 時の流れの入力欄の経過と長さ (秒) */
443
+ "input.timeline.time": "{t}s / {d}s",
444
+ /** `sequence-timeline` の点の見出し */
445
+ "readout.sequenceTimeline.title": "{name}: t={t}",
446
+ /** `bubble-chart` の泡の見出し */
447
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
448
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
449
+ "readout.calendarHeatmap.title": "day {i}: {v}",
450
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
451
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
452
+ /** `slope` の左の目盛 */
453
+ "readout.slope.before": "before",
454
+ /** `slope` の右の目盛 */
455
+ "readout.slope.after": "after",
456
+ /** `bullet-chart` の実績の見出し */
457
+ "readout.bulletChart.actual": "actual: {v}",
458
+ /** `bullet-chart` の目標の見出し */
459
+ "readout.bulletChart.target": "target: {v}",
460
+ /** `rating` の塗った星の見出し */
461
+ "readout.rating.full": "full",
462
+ /** `rating` の半分塗った星の見出し */
463
+ "readout.rating.half": "half",
464
+ /** `rating` の塗っていない星の見出し */
465
+ "readout.rating.empty": "empty",
466
+ /** `price-tag` の割引額 */
467
+ "readout.priceTag.save": "You save {amount}",
468
+ /** `confidence-meter` の低い帯の名前 */
469
+ "readout.confidence.low": "low",
470
+ /** `confidence-meter` の中ほどの帯の名前 */
471
+ "readout.confidence.mid": "mid",
472
+ /** `confidence-meter` の高い帯の名前 */
473
+ "readout.confidence.high": "high",
474
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
475
+ "readout.more": "+{n} more",
476
+ /** `video-card` の再生数 */
477
+ "readout.videoCard.views": "{v} views",
478
+ /** `attendance-grid` の角の見出し */
479
+ "readout.attendance.corner": "day",
480
+ /** `calendar-month` の曜日 (日曜) */
481
+ "readout.weekday.0": "Sun",
482
+ /** `calendar-month` の曜日 (月曜) */
483
+ "readout.weekday.1": "Mon",
484
+ /** `calendar-month` の曜日 (火曜) */
485
+ "readout.weekday.2": "Tue",
486
+ /** `calendar-month` の曜日 (水曜) */
487
+ "readout.weekday.3": "Wed",
488
+ /** `calendar-month` の曜日 (木曜) */
489
+ "readout.weekday.4": "Thu",
490
+ /** `calendar-month` の曜日 (金曜) */
491
+ "readout.weekday.5": "Fri",
492
+ /** `calendar-month` の曜日 (土曜) */
493
+ "readout.weekday.6": "Sat",
494
+ /** `rating-thumb` の賛成の割合と票数 */
495
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
496
+ /** `kpi-trend-tile` の前の期間の値 */
497
+ "readout.kpiTrend.prev": "prev {v}",
498
+ /** `quick-poll-emoji` の票の合計 */
499
+ "readout.poll.total": "total {n}",
500
+ /** `thread-summary` の参加者の数 */
501
+ "readout.thread.participants": "{n} participants",
502
+ /** `thread-summary` の最後に書いた人 */
503
+ "readout.thread.last": "last: {name}",
504
+ /** `read-receipt` の送信した段 */
505
+ "readout.readReceipt.sent": "sent",
506
+ /** `read-receipt` の相手に届いた段 */
507
+ "readout.readReceipt.delivered": "delivered",
508
+ /** `read-receipt` の読まれた段 */
509
+ "readout.readReceipt.read": "read",
510
+ /** `password-strength` の段階 0 */
511
+ "readout.password.0": "too weak",
512
+ /** `password-strength` の段階 1 */
513
+ "readout.password.1": "weak",
514
+ /** `password-strength` の段階 2 */
515
+ "readout.password.2": "fair",
516
+ /** `password-strength` の段階 3 */
517
+ "readout.password.3": "good",
518
+ /** `password-strength` の段階 4 */
519
+ "readout.password.4": "strong",
520
+ /** `file-dropzone` で取り込んだ後の字 */
521
+ "readout.dropzone.uploaded": "uploaded",
522
+ /** `file-dropzone` の空の時の 1 行目 */
523
+ "readout.dropzone.drop": "\u2B06 Drop file here",
524
+ /** `file-dropzone` の空の時の 2 行目 */
525
+ "readout.dropzone.browse": "or click to browse",
526
+ /** `log-stream` の重さ 0 (調べるための詳細) */
527
+ "readout.log.0": "DBG",
528
+ /** `log-stream` の重さ 1 (知らせ) */
529
+ "readout.log.1": "INF",
530
+ /** `log-stream` の重さ 2 (警告) */
531
+ "readout.log.2": "WRN",
532
+ /** `log-stream` の重さ 3 (異常) */
533
+ "readout.log.3": "ERR",
534
+ /** `cart-summary` の点数 */
535
+ "readout.cart.items": "Items",
536
+ /** `cart-summary` の小計 */
537
+ "readout.cart.subtotal": "Subtotal",
538
+ /** `cart-summary` の送料 */
539
+ "readout.cart.shipping": "Shipping",
540
+ /** `cart-summary` の合計 */
541
+ "readout.cart.total": "Total",
542
+ /** `pricing-tier` で名前が空の時の名前 */
543
+ "readout.pricing.plan": "Plan",
544
+ /** `pricing-tier` の価格の後ろ */
545
+ "readout.pricing.perMonth": "per month",
546
+ /** `pricing-tier` の押す札 */
547
+ "readout.pricing.get": "Get {name}",
548
+ /** `coupon-code` で番号が空の時の字 */
549
+ "readout.coupon.placeholder": "ENTER CODE",
550
+ /** `coupon-code` の割引の割合 */
551
+ "readout.coupon.off": "-{pct}% off",
552
+ /** `coupon-code` の押す札 */
553
+ "readout.coupon.apply": "Apply",
554
+ /** `article-preview` の書いた人 */
555
+ "readout.article.by": "by {author}",
556
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
557
+ "readout.priority.high": "HIGH",
558
+ /** `priority-badge` の中ほどの優先度の表示 */
559
+ "readout.priority.med": "MED",
560
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
561
+ "readout.priority.low": "LOW",
562
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
563
+ "readout.kanban.todo": "Todo",
564
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
565
+ "readout.kanban.inprogress": "In Progress",
566
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
567
+ "readout.kanban.done": "Done",
568
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
569
+ "readout.trafficLight.red": "red",
570
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
571
+ "readout.trafficLight.yellow": "yellow",
572
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
573
+ "readout.trafficLight.green": "green"
574
+ };
575
+ var ja = {
576
+ "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
577
+ "codeBlock.fileName": "\u5171\u901A.ts",
578
+ "kanbanCard.id": "#1111",
579
+ "kanbanCard.status": "\u9032\u884C\u4E2D",
580
+ "kanbanCard.task": "\u5F62\u3092\u5B9F\u88C5",
581
+ "kanbanCard.due": "7/10",
582
+ "smartContract.call": "\u81EA\u52D5\u3067\u5B9F\u884C\u3059\u308B",
583
+ "blockchainBlock.title": "\u30D6\u30ED\u30C3\u30AF #421,873",
584
+ "blockchainBlock.hash": "\u30CF\u30C3\u30B7\u30E5",
585
+ "blockchainBlock.prev": "\u76F4\u524D",
586
+ "blockchainBlock.merkle": "\u6728\u306E\u6839",
587
+ "blockchainBlock.nonce": "\u30CE\u30F3\u30B9",
588
+ "blockchainBlock.tx": "\u53D6\u5F15",
589
+ "blockchainBlock.txCount": "142 \u4EF6",
590
+ "rpcNode.status": "RPC \u7A3C\u50CD\u4E2D",
591
+ "trustBank.sign": "\u4FE1\u8A17",
592
+ "paymentProvider.sign": "\u6C7A\u6E08",
593
+ "paymentProvider.status": "\u51E6\u7406\u4E2D",
594
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
595
+ "brokerage.sign": "\xA5 \u8A3C\u5238",
596
+ "exchange.sign": "\u53D6\u5F15\u6240",
597
+ "exchange.sub": "\u6E05\u7B97",
598
+ "atm.sign": "ATM \u30B3\u30FC\u30CA\u30FC",
599
+ "atm.screen": "\u91D1\u984D\u3092\u9078\u629E",
600
+ "atm.ok": "\u78BA\u5B9A",
601
+ "atm.cardSlot": "\u30AB\u30FC\u30C9\u633F\u5165\u53E3",
602
+ "storefront.sign": "\u5546\u5E97",
603
+ "storefront.open": "\u55B6\u696D",
604
+ "warehouse.sign": "\u5009\u5EAB",
605
+ "apiGateway.sign": "API \u5165\u53E3",
606
+ "apiGateway.delete": "DELETE",
607
+ "apiGateway.users": "/\u5229\u7528\u8005",
608
+ "apiGateway.orders": "/\u6CE8\u6587",
609
+ "apiGateway.session": "/\u63A5\u7D9A",
610
+ "readout.empty": "\u306A\u3057",
611
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
612
+ "input.timeline.speed": "{speed}\u500D",
613
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
614
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
615
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
616
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
617
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
618
+ "readout.slope.before": "\u524D",
619
+ "readout.slope.after": "\u5F8C",
620
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
621
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
622
+ "readout.rating.full": "\u6E80",
623
+ "readout.rating.half": "\u534A\u5206",
624
+ "readout.rating.empty": "\u7A7A",
625
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
626
+ "readout.confidence.low": "\u4F4E",
627
+ "readout.confidence.mid": "\u4E2D",
628
+ "readout.confidence.high": "\u9AD8",
629
+ "readout.more": "\u307B\u304B {n}",
630
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
631
+ "readout.attendance.corner": "\u65E5",
632
+ "readout.weekday.0": "\u65E5",
633
+ "readout.weekday.1": "\u6708",
634
+ "readout.weekday.2": "\u706B",
635
+ "readout.weekday.3": "\u6C34",
636
+ "readout.weekday.4": "\u6728",
637
+ "readout.weekday.5": "\u91D1",
638
+ "readout.weekday.6": "\u571F",
639
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
640
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
641
+ "readout.poll.total": "\u5408\u8A08 {n}",
642
+ "readout.thread.participants": "{n} \u4EBA",
643
+ "readout.thread.last": "\u6700\u5F8C: {name}",
644
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
645
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
646
+ "readout.readReceipt.read": "\u65E2\u8AAD",
647
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
648
+ "readout.password.1": "\u5F31\u3044",
649
+ "readout.password.2": "\u666E\u901A",
650
+ "readout.password.3": "\u826F\u3044",
651
+ "readout.password.4": "\u5F37\u3044",
652
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
653
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
654
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
655
+ "readout.log.0": "\u8A73\u7D30",
656
+ "readout.log.1": "\u60C5\u5831",
657
+ "readout.log.2": "\u8B66\u544A",
658
+ "readout.log.3": "\u7570\u5E38",
659
+ "readout.cart.items": "\u70B9\u6570",
660
+ "readout.cart.subtotal": "\u5C0F\u8A08",
661
+ "readout.cart.shipping": "\u9001\u6599",
662
+ "readout.cart.total": "\u5408\u8A08",
663
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
664
+ "readout.pricing.perMonth": "\u6708\u984D",
665
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
666
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
667
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
668
+ "readout.coupon.apply": "\u9069\u7528",
669
+ "readout.article.by": "\u6587: {author}",
670
+ "readout.priority.high": "\u9AD8",
671
+ "readout.priority.med": "\u4E2D",
672
+ "readout.priority.low": "\u4F4E",
673
+ "readout.kanban.todo": "\u672A\u7740\u624B",
674
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
675
+ "readout.kanban.done": "\u5B8C\u4E86",
676
+ "readout.trafficLight.red": "\u8D64",
677
+ "readout.trafficLight.yellow": "\u9EC4",
678
+ "readout.trafficLight.green": "\u7DD1"
679
+ };
680
+ var CDL_TEXT = { en, ja };
681
+ function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
682
+ const \u8A00\u8A9E = lang ?? "en";
683
+ return (key) => CDL_TEXT[\u8A00\u8A9E][key];
684
+ }
685
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
686
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
687
+ }
688
+
361
689
  // src/layout/clearance-constants.ts
362
690
  var CLEARANCE_NODE_LABEL = 32;
363
691
  var CLEARANCE_LANE_LABEL = 24;
@@ -9636,6 +9964,9 @@ function layout(diag) {
9636
9964
  // **遮断はここだけに置く**。 描画は必ず組み立てを通り、組み立て API も `er` も
9637
9965
  // 素通しにしてある。 上流にも置くと、どの入力でも通らない分岐が残る
9638
9966
  ...diag.palette ? { palette: diag.palette } : {},
9967
+ // 描画側の固定の字の言語 (#847)。 既定 (`en`) と型の外の値は持たせない = 配置の結果の形を
9968
+ // 変更前と揃え、記法の書き損じで一部の字だけ日本語になる形を作らない
9969
+ ...resolveLang(diag.lang) === "ja" ? { lang: "ja" } : {},
9639
9970
  // 種類も配色と同じく空の目印を出さない。 遮断をここに揃えると手書きの図にも効く
9640
9971
  ...diag.type ? { type: diag.type } : {},
9641
9972
  bboxes,
@@ -10905,12 +11236,12 @@ function \u5272\u308B\u5019\u88DC(text) {
10905
11236
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
10906
11237
  }
10907
11238
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
10908
- const \u5B57 = [];
11239
+ const \u5B572 = [];
10909
11240
  const \u4E26\u3073 = [...text];
10910
11241
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
10911
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11242
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
10912
11243
  }
10913
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
11244
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
10914
11245
  }
10915
11246
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
10916
11247
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -13266,9 +13597,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
13266
13597
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
13267
13598
  };
13268
13599
  }
13269
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13600
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13270
13601
  let \u7D1A = \u521D\u671F;
13271
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13602
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13272
13603
  return \u7D1A;
13273
13604
  }
13274
13605
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -15247,6 +15578,11 @@ var commonFrame2 = (active) => ({
15247
15578
  var ASCENT3 = 0.72;
15248
15579
  var DESCENT3 = 0.25;
15249
15580
  var MONO_ADVANCE = 0.62;
15581
+ function \u7B49\u5E45\u306E\u6841(s) {
15582
+ let \u6841 = 0;
15583
+ for (const c of s) \u6841 += (c.codePointAt(0) ?? 0) >= 11904 ? 2 : 1;
15584
+ return \u6841;
15585
+ }
15250
15586
  var LABEL_SUB_RATIO = 11 / 16;
15251
15587
  var LABEL_EYE_RATIO = 12 / 16;
15252
15588
  var LABEL_EYE_GAP = 8;
@@ -15344,7 +15680,8 @@ function ShapeWindowNode({ node, active }) {
15344
15680
  commonLabel2(node, node.cx, \u540D\u524D.y, \u540D\u524D.size)
15345
15681
  ] });
15346
15682
  }
15347
- function ShapeTerminalNode({ node, active }) {
15683
+ function ShapeTerminalNode({ node, active, lang }) {
15684
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15348
15685
  const frame = commonFrame2(active);
15349
15686
  const \u7DDA = frame.strokeWidth / 2;
15350
15687
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -15365,10 +15702,10 @@ function ShapeTerminalNode({ node, active }) {
15365
15702
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
15366
15703
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
15367
15704
  ],
15368
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: "\u2192 12 chunks in 1.8s" }],
15705
+ [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
15369
15706
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
15370
15707
  ];
15371
- const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((t) => t.\u5DE6 + t.\u6587.length * MONO_ADVANCE * t.\u5B57)) + \u4F59\u767D;
15708
+ const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
15372
15709
  const \u81EA\u7136\u9AD8 = \u5E2F + \u5148\u982D + \u884C\u9593 * (\u884C.length - 1) + Math.max(\u30AB\u30FC\u30BD\u30EB.\u4E0B, 12.5 * DESCENT3);
15373
15710
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
15374
15711
  const barH = \u5E2F * \u500D;
@@ -15478,7 +15815,8 @@ function ShapeTerminalNode({ node, active }) {
15478
15815
  )
15479
15816
  ] });
15480
15817
  }
15481
- function ShapeCodeBlockNode({ node, active }) {
15818
+ function ShapeCodeBlockNode({ node, active, lang }) {
15819
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15482
15820
  const frame = commonFrame2(active);
15483
15821
  const \u7DDA = frame.strokeWidth / 2;
15484
15822
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -15568,7 +15906,7 @@ function ShapeCodeBlockNode({ node, active }) {
15568
15906
  fontFamily: lineFont,
15569
15907
  textAnchor: "middle",
15570
15908
  fill: "#e6edf3",
15571
- children: "utils.ts"
15909
+ children: \u5B57\u5F15("codeBlock.fileName")
15572
15910
  }
15573
15911
  ),
15574
15912
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + tabW - \u4E38, cy: y + tabH / 2, r: 3 * \u500D, fill: "#7cd88f", stroke: "none" }),
@@ -15644,7 +15982,8 @@ function ShapeCodeBlockNode({ node, active }) {
15644
15982
  )
15645
15983
  ] });
15646
15984
  }
15647
- function ShapeKanbanCardNode({ node, active }) {
15985
+ function ShapeKanbanCardNode({ node, active, lang }) {
15986
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15648
15987
  const frame = commonFrame2(active);
15649
15988
  const \u7DDA = frame.strokeWidth / 2;
15650
15989
  const \u5F71 = 3;
@@ -15656,7 +15995,7 @@ function ShapeKanbanCardNode({ node, active }) {
15656
15995
  const \u5DE6\u53F3\u4F59\u767D = 14;
15657
15996
  const \u4E0A\u6BB5\u9699\u9593 = 8;
15658
15997
  const \u512A\u5148\u5E2F\u9AD8 = 10;
15659
- const ID\u6587 = "CAR-1111";
15998
+ const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
15660
15999
  const ID\u57FA\u6E96 = 30;
15661
16000
  const ID\u5B57 = 11;
15662
16001
  const ID\u5B57\u9593 = 1;
@@ -15675,7 +16014,7 @@ function ShapeKanbanCardNode({ node, active }) {
15675
16014
  const \u4E0B\u5E2F = FOOTER\u4E0B - AVATAR\u4E2D\u5FC3Y + AVATAR\u534A\u5F84 + AVATAR\u67A0 / 2 + \u5E2F\u9593\u4F59\u767D;
15676
16015
  const \u4E2D\u5E2F = \u540D\u524D\u5B57 * ASCENT3 + \u540D\u524D\u5B57 * \u8AAC\u660E\u57FA\u6E96\u6BD4 + \u540D\u524D\u5B57 * \u8AAC\u660E\u5B57\u6BD4 * DESCENT3;
15677
16016
  const \u81EA\u7136\u9AD8 = \u4E0A\u5E2F + \u4E2D\u5E2F + \u4E0B\u5E2F;
15678
- const ID\u5E45 = ID\u6587.length * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * ID\u6587.length;
16017
+ const ID\u5E45 = \u7B49\u5E45\u306E\u6841(ID\u6587) * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * [...ID\u6587].length;
15679
16018
  const \u81EA\u7136\u5E45 = \u5DE6\u53F3\u4F59\u767D + ID\u5E45 + \u4E0A\u6BB5\u9699\u9593 + PILL\u5E45 + \u5DE6\u53F3\u4F59\u767D;
15680
16019
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, h / \u81EA\u7136\u9AD8);
15681
16020
  const priorityBarH = \u512A\u5148\u5E2F\u9AD8 * \u500D;
@@ -15754,7 +16093,7 @@ function ShapeKanbanCardNode({ node, active }) {
15754
16093
  textAnchor: "middle",
15755
16094
  fill: "#5a4a1a",
15756
16095
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
15757
- children: "IN PROG"
16096
+ children: \u5B57\u5F15("kanbanCard.status")
15758
16097
  }
15759
16098
  ),
15760
16099
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -15778,7 +16117,7 @@ function ShapeKanbanCardNode({ node, active }) {
15778
16117
  fontSize: \u540D\u524D.size * \u8AAC\u660E\u5B57\u6BD4,
15779
16118
  textAnchor: "middle",
15780
16119
  fill: "var(--cdl-text-dim, #5a6270)",
15781
- children: "shape-driven kind \u5B9F\u88C5"
16120
+ children: \u5B57\u5F15("kanbanCard.task")
15782
16121
  }
15783
16122
  ),
15784
16123
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + \u5DE6\u53F3\u4F59\u767D * \u500D}, ${footY})`, children: [
@@ -15841,7 +16180,7 @@ function ShapeKanbanCardNode({ node, active }) {
15841
16180
  fontWeight: 600,
15842
16181
  textAnchor: "end",
15843
16182
  fill: "var(--cdl-text-dim, #5a6270)",
15844
- children: "Jul 10"
16183
+ children: \u5B57\u5F15("kanbanCard.due")
15845
16184
  }
15846
16185
  )
15847
16186
  ] })
@@ -16885,7 +17224,8 @@ function EthereumDiamond({ cx, cy, h, colors }) {
16885
17224
  /* @__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" })
16886
17225
  ] });
16887
17226
  }
16888
- function ShapeSmartContractNode({ node, active }) {
17227
+ function ShapeSmartContractNode({ node, active, lang }) {
17228
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
16889
17229
  const frame = commonFrame4(active);
16890
17230
  const r = shapeRegion(node);
16891
17231
  const docW = SMART_CONTRACT_W;
@@ -16921,7 +17261,7 @@ function ShapeSmartContractNode({ node, active }) {
16921
17261
  /* @__PURE__ */ jsxRuntime.jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
16922
17262
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
16923
17263
  [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)),
16924
- /* @__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()" }),
17264
+ /* @__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") }),
16925
17265
  /* @__PURE__ */ jsxRuntime.jsx(
16926
17266
  "polygon",
16927
17267
  {
@@ -16942,14 +17282,14 @@ function ShapeSmartContractNode({ node, active }) {
16942
17282
  }
16943
17283
  var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
16944
17284
  var BLOCK_DEFAULT_FIELDS = [
16945
- { label: "hash", value: "0xaf31c9d2..." },
16946
- { label: "prev", value: "0x7b3f92c1..." },
16947
- { label: "merkle", value: "0xc1892f4a..." },
16948
- { label: "nonce", value: "82,914" },
16949
- { label: "tx", value: "142 tx" }
17285
+ { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
17286
+ { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
17287
+ { key: "merkle", label: "blockchainBlock.merkle", value: { text: "0xc1892f4a..." } },
17288
+ { key: "nonce", label: "blockchainBlock.nonce", value: { text: "82,914" } },
17289
+ { key: "tx", label: "blockchainBlock.tx", value: { \u8F9E\u66F8: "blockchainBlock.txCount" } }
16950
17290
  ];
16951
- var BLOCK_DEFAULT_TITLE = "Block #421,873";
16952
- function ShapeBlockchainBlockNode({ node, active }) {
17291
+ function ShapeBlockchainBlockNode({ node, active, lang }) {
17292
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
16953
17293
  const frame = commonFrame4(active);
16954
17294
  const r = shapeRegion(node);
16955
17295
  const bw = BLOCK_W;
@@ -16959,11 +17299,15 @@ function ShapeBlockchainBlockNode({ node, active }) {
16959
17299
  const x = cx - bw / 2;
16960
17300
  const y = cy - bh / 2;
16961
17301
  const \u6E21\u3055\u308C\u305F = (v) => (v ?? "").trim();
16962
- const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || BLOCK_DEFAULT_TITLE;
16963
- const fields = BLOCK_DEFAULT_FIELDS.map((f) => ({
16964
- label: f.label,
16965
- value: f.label === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || f.value : f.value
16966
- }));
17302
+ const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || \u5B57\u5F15("blockchainBlock.title");
17303
+ const fields = BLOCK_DEFAULT_FIELDS.map((f) => {
17304
+ const \u65E2\u5B9A\u5024 = "text" in f.value ? f.value.text : \u5B57\u5F15(f.value.\u8F9E\u66F8);
17305
+ return {
17306
+ key: f.key,
17307
+ label: \u5B57\u5F15(f.label),
17308
+ value: f.key === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || \u65E2\u5B9A\u5024 : \u65E2\u5B9A\u5024
17309
+ };
17310
+ });
16967
17311
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
16968
17312
  const art = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
16969
17313
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
@@ -16973,7 +17317,7 @@ function ShapeBlockchainBlockNode({ node, active }) {
16973
17317
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
16974
17318
  fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
16975
17319
  /* @__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 }),
16976
- /* @__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) }),
17320
+ /* @__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) }),
16977
17321
  /* @__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 })
16978
17322
  ] }, i)),
16979
17323
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -17178,7 +17522,8 @@ function ShapeBlockchainNodeNode({ node, active }) {
17178
17522
  bottomLabel2(node, r.cx, r.label)
17179
17523
  ] });
17180
17524
  }
17181
- function ShapeRpcNodeNode({ node, active }) {
17525
+ function ShapeRpcNodeNode({ node, active, lang }) {
17526
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17182
17527
  const frame = commonFrame4(active);
17183
17528
  const r = shapeRegion(node);
17184
17529
  const cx = r.cx;
@@ -17191,7 +17536,7 @@ function ShapeRpcNodeNode({ node, active }) {
17191
17536
  /* @__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 }),
17192
17537
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 30, rx: 10, fill: "#2d3a4f", stroke: "none" }),
17193
17538
  /* @__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" }) }),
17194
- /* @__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" }),
17539
+ /* @__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") }),
17195
17540
  /* @__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: "{...}" }),
17196
17541
  /* @__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" }),
17197
17542
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 16, y: y + bh - 24, width: bw - 32, height: 8, rx: 4, fill: "#0f1419", stroke: "none" }),
@@ -17477,7 +17822,8 @@ var TRUST_BASE_H = 14;
17477
17822
  var TRUST_BODY_OUT = 8;
17478
17823
  var TRUST_BLD_W_MIN = 140;
17479
17824
  var TRUST_BLD_W_MAX = 280;
17480
- function ShapeTrustBankNode({ node, active }) {
17825
+ function ShapeTrustBankNode({ node, active, lang }) {
17826
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17481
17827
  const frame = commonFrame5(active);
17482
17828
  const r = shapeRegion(node);
17483
17829
  const \u7DDA = frame.strokeWidth / 2;
@@ -17514,7 +17860,7 @@ function ShapeTrustBankNode({ node, active }) {
17514
17860
  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);
17515
17861
  }),
17516
17862
  /* @__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" }),
17517
- /* @__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" }),
17863
+ /* @__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") }),
17518
17864
  /* @__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 }),
17519
17865
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
17520
17866
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -17533,7 +17879,8 @@ function ShapeTrustBankNode({ node, active }) {
17533
17879
  bottomLabel3(node, r.cx, r.label)
17534
17880
  ] });
17535
17881
  }
17536
- function ShapePaymentProviderNode({ node, active }) {
17882
+ function ShapePaymentProviderNode({ node, active, lang }) {
17883
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17537
17884
  const frame = commonFrame5(active);
17538
17885
  const r = shapeRegion(node);
17539
17886
  const cx = r.cx;
@@ -17550,13 +17897,13 @@ function ShapePaymentProviderNode({ node, active }) {
17550
17897
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y, width: boxW, height: boxH, rx: 10, fill: "#255a7a", stroke: accentDark, strokeWidth: frame.strokeWidth }),
17551
17898
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: boxW, height: headerH, rx: 10, fill: accentDarker }),
17552
17899
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + headerH - 8, width: boxW, height: 8, fill: accentDarker }),
17553
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: "PAY" }),
17900
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("paymentProvider.sign") }),
17554
17901
  /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17555
17902
  /* @__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" }) }),
17556
17903
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
17557
17904
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
17558
17905
  ] }),
17559
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: "PROCESSING" }),
17906
+ /* @__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") }),
17560
17907
  bottomLabel3(node, r.cx, r.label)
17561
17908
  ] });
17562
17909
  }
@@ -17604,7 +17951,8 @@ var BROKERAGE_SHADE_OUT = 2;
17604
17951
  var BROKERAGE_W_MIN = BROKERAGE_COLS * BROKERAGE_CELL_W + (BROKERAGE_COLS - 1) * BROKERAGE_GAP_X + 6;
17605
17952
  var BROKERAGE_W_MAX = 140;
17606
17953
  var BROKERAGE_H_MIN = BROKERAGE_TICK_H + BROKERAGE_LOGO_H + BROKERAGE_BASE_H;
17607
- function ShapeBrokerageNode({ node, active }) {
17954
+ function ShapeBrokerageNode({ node, active, lang }) {
17955
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17608
17956
  const frame = commonFrame5(active);
17609
17957
  const r = shapeRegion(node);
17610
17958
  const cx = r.cx;
@@ -17640,9 +17988,9 @@ function ShapeBrokerageNode({ node, active }) {
17640
17988
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
17641
17989
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
17642
17990
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
17643
- /* @__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" }),
17991
+ /* @__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") }),
17644
17992
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
17645
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: "$ SECURITIES" }),
17993
+ /* @__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") }),
17646
17994
  Array.from({ length: rows }).map(
17647
17995
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
17648
17996
  const wx = gridStartX + ci * (cellW + gapX);
@@ -17663,7 +18011,8 @@ function ShapeBrokerageNode({ node, active }) {
17663
18011
  bottomLabel3(node, r.cx, r.label)
17664
18012
  ] });
17665
18013
  }
17666
- function ShapeExchangeNode({ node, active }) {
18014
+ function ShapeExchangeNode({ node, active, lang }) {
18015
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17667
18016
  const frame = commonFrame5(active);
17668
18017
  const r = shapeRegion(node);
17669
18018
  const cx = r.cx;
@@ -17708,9 +18057,9 @@ function ShapeExchangeNode({ node, active }) {
17708
18057
  ] }, `d${i}`);
17709
18058
  }),
17710
18059
  /* @__PURE__ */ jsxRuntime.jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
17711
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "EXCHANGE" }),
18060
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
17712
18061
  /* @__PURE__ */ jsxRuntime.jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
17713
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "clearing" }),
18062
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
17714
18063
  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}`))
17715
18064
  ] });
17716
18065
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -17732,7 +18081,8 @@ var ATM_PANEL_H = 146;
17732
18081
  var ATM_W_MIN = 100;
17733
18082
  var ATM_W_MAX = 140;
17734
18083
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
17735
- function ShapeAtmNode({ node, active }) {
18084
+ function ShapeAtmNode({ node, active, lang }) {
18085
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17736
18086
  const frame = commonFrame5(active);
17737
18087
  const r = shapeRegion(node);
17738
18088
  const cx = r.cx;
@@ -17766,12 +18116,12 @@ function ShapeAtmNode({ node, active }) {
17766
18116
  const \u7D75 = /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17767
18117
  /* @__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" }),
17768
18118
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
17769
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "ATM CORNER" }),
18119
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
17770
18120
  /* @__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 }),
17771
18121
  /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
17772
18122
  /* @__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 }),
17773
18123
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
17774
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "SELECT AMOUNT" }),
18124
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
17775
18125
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
17776
18126
  /* @__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 }),
17777
18127
  (() => {
@@ -17785,7 +18135,7 @@ function ShapeAtmNode({ node, active }) {
17785
18135
  ["5", "#5a6270"],
17786
18136
  ["6", "#5a6270"],
17787
18137
  ["0", "#5a6270"],
17788
- ["OK", "#4ea36a"]
18138
+ [\u5B57\u5F15("atm.ok"), "#4ea36a"]
17789
18139
  ];
17790
18140
  const keyW = 18;
17791
18141
  const keyH = 10;
@@ -17798,13 +18148,16 @@ function ShapeAtmNode({ node, active }) {
17798
18148
  const ky = 74 + row * (keyH + 2);
17799
18149
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17800
18150
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
17801
- /* @__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] })
18151
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
18152
+ /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
18153
+ i === keys.length - 1 ? 6 : 7
18154
+ ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
17802
18155
  ] }, `k${i}`);
17803
18156
  });
17804
18157
  })(),
17805
18158
  /* @__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 }),
17806
18159
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
17807
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "CARD SLOT" }),
18160
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
17808
18161
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
17809
18162
  ] }),
17810
18163
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -17889,7 +18242,8 @@ function ShapeWebsiteNode({ node, active }) {
17889
18242
  bottomLabel4(node, r.cx, r.label)
17890
18243
  ] });
17891
18244
  }
17892
- function ShapeStorefrontNode({ node, active }) {
18245
+ function ShapeStorefrontNode({ node, active, lang }) {
18246
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17893
18247
  const frame = commonFrame6(active);
17894
18248
  const r = shapeRegion(node);
17895
18249
  const cx = r.cx;
@@ -17915,7 +18269,7 @@ function ShapeStorefrontNode({ node, active }) {
17915
18269
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
17916
18270
  /* @__PURE__ */ jsxRuntime.jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
17917
18271
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
17918
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: "SHOP" }),
18272
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("storefront.sign") }),
17919
18273
  /* @__PURE__ */ jsxRuntime.jsx("rect", { "data-cdl-role": "node-body", x, y: facadeY, width: bw, height: facadeH, fill: "#e0e4e8", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
17920
18274
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: winX, y: winY, width: winW, height: winH, fill: "#a4c5d9", stroke: accentDarker, strokeWidth: 2 }),
17921
18275
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: winX + winW / 2, y1: winY, x2: winX + winW / 2, y2: winY + winH, stroke: accentDarker, strokeWidth: 1 }),
@@ -17929,7 +18283,7 @@ function ShapeStorefrontNode({ node, active }) {
17929
18283
  /* @__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 }),
17930
18284
  /* @__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 }),
17931
18285
  /* @__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 }),
17932
- /* @__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" }),
18286
+ /* @__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") }),
17933
18287
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
17934
18288
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
17935
18289
  bottomLabel4(node, r.cx, r.label)
@@ -17946,7 +18300,8 @@ var WAREHOUSE_SHADOW_RX_RATIO = 0.5;
17946
18300
  var WAREHOUSE_H_MIN = WAREHOUSE_ROOF_H + WAREHOUSE_SIGN_H + 68;
17947
18301
  var WAREHOUSE_W_MIN = 160;
17948
18302
  var WAREHOUSE_W_MAX = 240;
17949
- function ShapeWarehouseNode({ node, active }) {
18303
+ function ShapeWarehouseNode({ node, active, lang }) {
18304
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17950
18305
  const frame = commonFrame6(active);
17951
18306
  const r = shapeRegion(node);
17952
18307
  const cx = r.cx;
@@ -17975,7 +18330,7 @@ function ShapeWarehouseNode({ node, active }) {
17975
18330
  /* @__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" }),
17976
18331
  /* @__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 }),
17977
18332
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
17978
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: "WAREHOUSE" }),
18333
+ /* @__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") }),
17979
18334
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
17980
18335
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
17981
18336
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -18132,7 +18487,8 @@ var API_ROWS = 3;
18132
18487
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
18133
18488
  var API_W_MIN = 200;
18134
18489
  var API_W_MAX = 300;
18135
- function ShapeApiGatewayNode({ node, active }) {
18490
+ function ShapeApiGatewayNode({ node, active, lang }) {
18491
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
18136
18492
  const frame = commonFrame6(active);
18137
18493
  const r = shapeRegion(node);
18138
18494
  const cx = r.cx;
@@ -18143,6 +18499,7 @@ function ShapeApiGatewayNode({ node, active }) {
18143
18499
  const x = cx - bw / 2;
18144
18500
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
18145
18501
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
18502
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
18146
18503
  const rowPitch = Math.max(
18147
18504
  API_ROW_PITCH_MIN,
18148
18505
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
@@ -18151,15 +18508,15 @@ function ShapeApiGatewayNode({ node, active }) {
18151
18508
  /* @__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" }),
18152
18509
  /* @__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 }),
18153
18510
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
18154
- /* @__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" }),
18511
+ /* @__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") }),
18155
18512
  [
18156
- { method: "GET", path: "/users", color: "#27c93f" },
18157
- { method: "POST", path: "/orders", color: "#e5c07b" },
18158
- { method: "DEL", path: "/session", color: "#c9302c" }
18513
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
18514
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
18515
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
18159
18516
  ].map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
18160
18517
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
18161
18518
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
18162
- /* @__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 }),
18519
+ /* @__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 }),
18163
18520
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
18164
18521
  /* @__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" }) })
18165
18522
  ] }, i))
@@ -18464,7 +18821,8 @@ function CdlNodeView({
18464
18821
  stateValues,
18465
18822
  currentPhaseId,
18466
18823
  chartLineScale,
18467
- \u95A2\u4FC2\u306E\u53D7\u3051\u53E3
18824
+ \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
18825
+ lang
18468
18826
  }) {
18469
18827
  const value = node.value ? interpolate(node.value, stateValues) : void 0;
18470
18828
  const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
@@ -18680,11 +19038,11 @@ function CdlNodeView({
18680
19038
  case "shape-window":
18681
19039
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWindowNode, { node: resolvedNode, active });
18682
19040
  case "shape-terminal":
18683
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active });
19041
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTerminalNode, { node: resolvedNode, active, lang });
18684
19042
  case "shape-code-block":
18685
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active });
19043
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeCodeBlockNode, { node: resolvedNode, active, lang });
18686
19044
  case "shape-kanban-card":
18687
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active });
19045
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeKanbanCardNode, { node: resolvedNode, active, lang });
18688
19046
  case "shape-message-bubble":
18689
19047
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeMessageBubbleNode, { node: resolvedNode, active });
18690
19048
  case "shape-gear":
@@ -18702,11 +19060,11 @@ function CdlNodeView({
18702
19060
  case "shape-satellite":
18703
19061
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeSatelliteNode, { node: resolvedNode, active });
18704
19062
  case "shape-smart-contract":
18705
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active });
19063
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeSmartContractNode, { node: resolvedNode, active, lang });
18706
19064
  case "shape-blockchain-block":
18707
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active });
19065
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active, lang });
18708
19066
  case "shape-rpc-node":
18709
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active });
19067
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeRpcNodeNode, { node: resolvedNode, active, lang });
18710
19068
  case "shape-wallet":
18711
19069
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWalletNode, { node: resolvedNode, active });
18712
19070
  case "shape-nft":
@@ -18724,29 +19082,29 @@ function CdlNodeView({
18724
19082
  case "shape-bank":
18725
19083
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeBankNode, { node: resolvedNode, active });
18726
19084
  case "shape-trust-bank":
18727
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active });
19085
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeTrustBankNode, { node: resolvedNode, active, lang });
18728
19086
  case "shape-payment-provider":
18729
- return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active });
19087
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapePaymentProviderNode, { node: resolvedNode, active, lang });
18730
19088
  case "shape-credit-card":
18731
19089
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCreditCardNode, { node: resolvedNode, active });
18732
19090
  case "shape-brokerage":
18733
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active });
19091
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeBrokerageNode, { node: resolvedNode, active, lang });
18734
19092
  case "shape-exchange":
18735
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active });
19093
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeExchangeNode, { node: resolvedNode, active, lang });
18736
19094
  case "shape-atm":
18737
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active });
19095
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeAtmNode, { node: resolvedNode, active, lang });
18738
19096
  case "shape-website":
18739
19097
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeWebsiteNode, { node: resolvedNode, active });
18740
19098
  case "shape-storefront":
18741
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active });
19099
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeStorefrontNode, { node: resolvedNode, active, lang });
18742
19100
  case "shape-warehouse":
18743
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active });
19101
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeWarehouseNode, { node: resolvedNode, active, lang });
18744
19102
  case "shape-online-shop":
18745
19103
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeOnlineShopNode, { node: resolvedNode, active });
18746
19104
  case "shape-cdn-edge":
18747
19105
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeCdnEdgeNode, { node: resolvedNode, active });
18748
19106
  case "shape-api-gateway":
18749
- return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active });
19107
+ return /* @__PURE__ */ jsxRuntime.jsx(ShapeApiGatewayNode, { node: resolvedNode, active, lang });
18750
19108
  case "shape-auditor":
18751
19109
  return /* @__PURE__ */ jsxRuntime.jsx(ShapeAuditorNode, { node: resolvedNode, active });
18752
19110
  case "shape-regulator":
@@ -19121,6 +19479,7 @@ function CdlStage({
19121
19479
  {
19122
19480
  node,
19123
19481
  active: activeSet.has(node.id),
19482
+ lang: laid.lang,
19124
19483
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3: \u7BB1\u306E\u53D7\u3051\u53E3,
19125
19484
  drawing: \u63CF\u304F,
19126
19485
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
@@ -19863,6 +20222,23 @@ function warn(message) {
19863
20222
  console.warn(`[cdl event-handler] ${message}`);
19864
20223
  }
19865
20224
  }
20225
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = react.createContext("en");
20226
+ function use\u5B57\u5F15() {
20227
+ const lang = react.useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
20228
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
20229
+ }
20230
+ function \u5B57({ k, v }) {
20231
+ const \u5F15\u304F = use\u5B57\u5F15();
20232
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: \u5F15\u304F(k, v) });
20233
+ }
20234
+ function \u5B57\u306E\u898B\u51FA\u3057({
20235
+ k,
20236
+ v,
20237
+ \u524D = ""
20238
+ }) {
20239
+ const \u5F15\u304F = use\u5B57\u5F15();
20240
+ return /* @__PURE__ */ jsxRuntime.jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
20241
+ }
19866
20242
  function createInteractiveSignalsAccessor(diagram, signals, formula, scroll) {
19867
20243
  const kindByInputId = /* @__PURE__ */ new Map();
19868
20244
  for (const inp of diagram.inputs ?? []) {
@@ -20177,20 +20553,23 @@ function useInteractiveIntegration(diagram, options = {}) {
20177
20553
  const readouts = diagram.readouts ?? [];
20178
20554
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
20179
20555
  return null;
20180
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20181
- 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)) }),
20182
- formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
20183
- FormulaReadout,
20184
- {
20185
- id: f.id,
20186
- expression: f.expression,
20187
- value: stateOverrides[f.id]
20188
- },
20189
- f.id
20190
- )) }),
20191
- 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)) }),
20192
- 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)) })
20193
- ] });
20556
+ return (
20557
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
20558
+ /* @__PURE__ */ jsxRuntime.jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram.lang), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20559
+ 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)) }),
20560
+ formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
20561
+ FormulaReadout,
20562
+ {
20563
+ id: f.id,
20564
+ expression: f.expression,
20565
+ value: stateOverrides[f.id]
20566
+ },
20567
+ f.id
20568
+ )) }),
20569
+ 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)) }),
20570
+ 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)) })
20571
+ ] }) })
20572
+ );
20194
20573
  }, [diagram, signals, stateOverrides, mergedStateValues]);
20195
20574
  return { stateOverrides, panel, svgRef, containerRef };
20196
20575
  }
@@ -22051,7 +22430,7 @@ function SparklineReadout({
22051
22430
  if (points.length < 2) {
22052
22431
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
22053
22432
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22054
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
22433
+ /* @__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" }),
22055
22434
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
22056
22435
  ] });
22057
22436
  }
@@ -22314,27 +22693,24 @@ function TimelineWidget({
22314
22693
  className: "cdl-ip-timeline-scrubber"
22315
22694
  }
22316
22695
  ),
22317
- /* @__PURE__ */ jsxRuntime.jsxs(
22696
+ /* @__PURE__ */ jsxRuntime.jsx(
22318
22697
  "button",
22319
22698
  {
22320
22699
  type: "button",
22321
22700
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
22322
22701
  onClick: cycleSpeed,
22323
22702
  "aria-label": "speed",
22324
- children: [
22325
- speed,
22326
- "x"
22327
- ]
22703
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
22328
22704
  }
22329
22705
  )
22330
22706
  ] }),
22331
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-timeline-time", children: [
22332
- (progress * (input.duration / 1e3)).toFixed(1),
22333
- "s /",
22334
- " ",
22335
- (input.duration / 1e3).toFixed(1),
22336
- "s"
22337
- ] })
22707
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsxRuntime.jsx(
22708
+ \u5B57,
22709
+ {
22710
+ k: "input.timeline.time",
22711
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
22712
+ }
22713
+ ) })
22338
22714
  ] });
22339
22715
  }
22340
22716
  function RangeWidget({
@@ -22572,7 +22948,7 @@ function ArrayBarReadout({
22572
22948
  const range = max - min || 1;
22573
22949
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
22574
22950
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22575
- /* @__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) => {
22951
+ /* @__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) => {
22576
22952
  const h = Math.max(0, Math.min(1, (v - min) / range));
22577
22953
  return /* @__PURE__ */ jsxRuntime.jsx(
22578
22954
  "span",
@@ -22649,7 +23025,7 @@ function StackedBarReadout({
22649
23025
  const range = max - min || 1;
22650
23026
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
22651
23027
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22652
- /* @__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) => {
23028
+ /* @__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) => {
22653
23029
  const va = arrA[i] ?? 0;
22654
23030
  const vb = arrB[i] ?? 0;
22655
23031
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -22744,7 +23120,7 @@ function MatrixReadout({
22744
23120
  };
22745
23121
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
22746
23122
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22747
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx(
23123
+ 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(
22748
23124
  "svg",
22749
23125
  {
22750
23126
  className: "cdl-ip-readout-matrix-svg",
@@ -22802,7 +23178,7 @@ function ProgressGroupReadout({
22802
23178
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
22803
23179
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
22804
23180
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22805
- 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) => {
23181
+ 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) => {
22806
23182
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
22807
23183
  const rowLabel = labelArr[i] ?? String(i + 1);
22808
23184
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -22864,7 +23240,7 @@ function SequenceTimelineReadout({
22864
23240
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
22865
23241
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
22866
23242
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22867
- events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(
23243
+ 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(
22868
23244
  "svg",
22869
23245
  {
22870
23246
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -22878,7 +23254,7 @@ function SequenceTimelineReadout({
22878
23254
  events.map((e, i) => {
22879
23255
  const x = xFor(e.t);
22880
23256
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-event-marker": e.name, children: [
22881
- /* @__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}` }) }),
23257
+ /* @__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 } }) }),
22882
23258
  /* @__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 }),
22883
23259
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
22884
23260
  ] }, i);
@@ -22921,7 +23297,7 @@ function RadarReadout({
22921
23297
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
22922
23298
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
22923
23299
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22924
- 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: [
23300
+ 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: [
22925
23301
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx(
22926
23302
  "polygon",
22927
23303
  {
@@ -22983,14 +23359,14 @@ function BubbleChartReadout({
22983
23359
  const maxCircleR = 18;
22984
23360
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
22985
23361
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22986
- 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: [
23362
+ 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: [
22987
23363
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
22988
23364
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
22989
23365
  bubbles.map((b, i) => {
22990
23366
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
22991
23367
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
22992
23368
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
22993
- 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);
23369
+ 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);
22994
23370
  })
22995
23371
  ] })
22996
23372
  ] });
@@ -23013,7 +23389,7 @@ function DonutReadout({
23013
23389
  let acc = 0;
23014
23390
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
23015
23391
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23016
- 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) => {
23392
+ 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) => {
23017
23393
  const from = acc;
23018
23394
  const to = acc + v / total;
23019
23395
  acc = to;
@@ -23074,7 +23450,7 @@ function CalendarHeatmapReadout({
23074
23450
  height: cellSize,
23075
23451
  rx: 2,
23076
23452
  fill,
23077
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `day ${i}: ${v}` })
23453
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
23078
23454
  },
23079
23455
  i
23080
23456
  );
@@ -23194,7 +23570,7 @@ function CandlestickReadout({
23194
23570
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
23195
23571
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
23196
23572
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23197
- 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) => {
23573
+ 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) => {
23198
23574
  const cx = pad + i * (candleW + 3) + candleW / 2;
23199
23575
  const yHigh = yFor(cd.h);
23200
23576
  const yLow = yFor(cd.l);
@@ -23215,7 +23591,7 @@ function CandlestickReadout({
23215
23591
  height: bodyH,
23216
23592
  fill: isUp ? color : color,
23217
23593
  fillOpacity: isUp ? 1 : 0.85,
23218
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
23594
+ 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 } })
23219
23595
  }
23220
23596
  )
23221
23597
  ] }, i);
@@ -23249,7 +23625,7 @@ function VennReadout({
23249
23625
  const cxB = viewW / 2 + gap / 2;
23250
23626
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
23251
23627
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23252
- 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: [
23628
+ 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: [
23253
23629
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
23254
23630
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
23255
23631
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -23300,11 +23676,11 @@ function SlopeReadout({
23300
23676
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
23301
23677
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
23302
23678
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23303
- 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: [
23679
+ 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: [
23304
23680
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23305
23681
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23306
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
23307
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
23682
+ /* @__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" }) }),
23683
+ /* @__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" }) }),
23308
23684
  slopes.map((s, i) => {
23309
23685
  const yB = yFor(s.before);
23310
23686
  const yA = yFor(s.after);
@@ -23351,7 +23727,7 @@ function FunnelReadout({
23351
23727
  const [bR, bG, bB] = hexToRgb2(colorBottom);
23352
23728
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
23353
23729
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23354
- 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) => {
23730
+ 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) => {
23355
23731
  const ratio = i / Math.max(1, stages.length - 1);
23356
23732
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
23357
23733
  const yTop = i * stageH + 2;
@@ -23413,7 +23789,7 @@ function GanttReadout({
23413
23789
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
23414
23790
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
23415
23791
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23416
- 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) => {
23792
+ 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) => {
23417
23793
  const y = pad + i * rowH;
23418
23794
  const x1 = xFor(t.start);
23419
23795
  const x2 = xFor(t.start + t.duration);
@@ -23504,7 +23880,7 @@ function TreemapReadout({
23504
23880
  }
23505
23881
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
23506
23882
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23507
- 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: [
23883
+ 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: [
23508
23884
  /* @__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}` }) }),
23509
23885
  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
23510
23886
  ] }, i)) })
@@ -23570,7 +23946,7 @@ function SankeyReadout({
23570
23946
  const rightUsed = {};
23571
23947
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
23572
23948
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23573
- 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: [
23949
+ 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: [
23574
23950
  leftNodes.map((n, i) => {
23575
23951
  const p = leftPos[n.name];
23576
23952
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -23632,7 +24008,7 @@ function PolarAreaReadout({
23632
24008
  const maxR = Math.min(cx, cy) - 20;
23633
24009
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
23634
24010
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23635
- 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: [
24011
+ 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: [
23636
24012
  [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)),
23637
24013
  arr.map((v, i) => {
23638
24014
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -23678,7 +24054,7 @@ function StepIndicatorReadout({
23678
24054
  const cy = viewH / 2 - 2;
23679
24055
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
23680
24056
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23681
- 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: [
24057
+ 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: [
23682
24058
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
23683
24059
  const x1 = pad + i * step;
23684
24060
  const x2 = pad + (i + 1) * step;
@@ -23768,8 +24144,8 @@ function BulletChartReadout({
23768
24144
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
23769
24145
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
23770
24146
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
23771
- /* @__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}` }) }),
23772
- /* @__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}` }) })
24147
+ /* @__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 } }) }),
24148
+ /* @__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 } }) })
23773
24149
  ] })
23774
24150
  ] });
23775
24151
  }
@@ -23824,7 +24200,7 @@ function LeaderboardReadout({
23824
24200
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
23825
24201
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
23826
24202
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23827
- 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) => {
24203
+ 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) => {
23828
24204
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
23829
24205
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
23830
24206
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -23875,7 +24251,7 @@ function TrafficLightReadout({
23875
24251
  style: {
23876
24252
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
23877
24253
  },
23878
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
24254
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
23879
24255
  },
23880
24256
  i
23881
24257
  );
@@ -23914,7 +24290,7 @@ function TagCloudReadout({
23914
24290
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
23915
24291
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
23916
24292
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23917
- 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(
24293
+ 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(
23918
24294
  "span",
23919
24295
  {
23920
24296
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -23951,7 +24327,7 @@ function ActivityFeedReadout({
23951
24327
  const shown = events.slice(0, max);
23952
24328
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
23953
24329
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23954
- 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: [
24330
+ 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: [
23955
24331
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
23956
24332
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
23957
24333
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -24002,7 +24378,7 @@ function RatingReadout({
24002
24378
  strokeWidth: 1
24003
24379
  }
24004
24380
  ),
24005
- isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
24381
+ 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" })
24006
24382
  ]
24007
24383
  },
24008
24384
  i
@@ -24098,7 +24474,7 @@ function ChatBubbleReadout({
24098
24474
  const shown = messages.slice(0, max);
24099
24475
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
24100
24476
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24101
- 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(
24477
+ 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(
24102
24478
  "li",
24103
24479
  {
24104
24480
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -24190,7 +24566,7 @@ function ChecklistReadout({
24190
24566
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
24191
24567
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
24192
24568
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24193
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24569
+ 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: [
24194
24570
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
24195
24571
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
24196
24572
  done,
@@ -24301,11 +24677,7 @@ function PriceTagReadout({
24301
24677
  "%"
24302
24678
  ] }) : null
24303
24679
  ] }),
24304
- savings > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
24305
- "You save ",
24306
- currency,
24307
- savings
24308
- ] }) : null
24680
+ 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
24309
24681
  ] });
24310
24682
  }
24311
24683
  function SpinnerReadout({
@@ -24442,6 +24814,11 @@ function StopwatchReadout({
24442
24814
  }
24443
24815
  );
24444
24816
  }
24817
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
24818
+ low: "readout.confidence.low",
24819
+ mid: "readout.confidence.mid",
24820
+ high: "readout.confidence.high"
24821
+ };
24445
24822
  function ConfidenceMeterReadout({
24446
24823
  id,
24447
24824
  label,
@@ -24474,7 +24851,7 @@ function ConfidenceMeterReadout({
24474
24851
  Math.round(safeValue),
24475
24852
  "%"
24476
24853
  ] }),
24477
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
24854
+ /* @__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] }) })
24478
24855
  ] }),
24479
24856
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24480
24857
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -24509,7 +24886,7 @@ function ReactionBarReadout({
24509
24886
  }
24510
24887
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
24511
24888
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24512
- 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: [
24889
+ 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: [
24513
24890
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
24514
24891
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
24515
24892
  ] }, i)) })
@@ -24542,7 +24919,7 @@ function PillGroupReadout({
24542
24919
  }
24543
24920
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
24544
24921
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24545
- 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(
24922
+ 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(
24546
24923
  "span",
24547
24924
  {
24548
24925
  className: "cdl-ip-readout-pill-group-pill",
@@ -24630,7 +25007,7 @@ function MetricsGridReadout({
24630
25007
  }
24631
25008
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
24632
25009
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24633
- 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: [
25010
+ 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: [
24634
25011
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
24635
25012
  m.value,
24636
25013
  m.unit ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -24717,7 +25094,7 @@ function IconTileReadout({
24717
25094
  }
24718
25095
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
24719
25096
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24720
- 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: [
25097
+ 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: [
24721
25098
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
24722
25099
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
24723
25100
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -24758,7 +25135,7 @@ function TokenListReadout({
24758
25135
  }
24759
25136
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
24760
25137
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24761
- 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) => {
25138
+ 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) => {
24762
25139
  const isUp = t.delta >= 0;
24763
25140
  const deltaColor = isUp ? colorUp : colorDown;
24764
25141
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -24812,7 +25189,7 @@ function MapPinReadout({
24812
25189
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
24813
25190
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
24814
25191
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24815
- 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: [
25192
+ 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: [
24816
25193
  /* @__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 }),
24817
25194
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
24818
25195
  /* @__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)" }),
@@ -24840,9 +25217,9 @@ function PriorityBadgeReadout({
24840
25217
  if (p === "high" || p === "2") level = "high";
24841
25218
  else if (p === "low" || p === "0") level = "low";
24842
25219
  const spec = {
24843
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
24844
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
24845
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
25220
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
25221
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
25222
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
24846
25223
  };
24847
25224
  const cur = spec[level];
24848
25225
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -24855,7 +25232,7 @@ function PriorityBadgeReadout({
24855
25232
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
24856
25233
  children: [
24857
25234
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
24858
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: cur.text })
25235
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: cur.text }) })
24859
25236
  ]
24860
25237
  }
24861
25238
  ),
@@ -24894,7 +25271,7 @@ function PodiumReadout({
24894
25271
  const order = [1, 0, 2];
24895
25272
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
24896
25273
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24897
- 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) => {
25274
+ 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) => {
24898
25275
  const w = podium[rankIdx];
24899
25276
  if (!w) return null;
24900
25277
  const x = pad + colIdx * (colW + pad);
@@ -24937,7 +25314,7 @@ function PollBarReadout({
24937
25314
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
24938
25315
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
24939
25316
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24940
- 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) => {
25317
+ 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) => {
24941
25318
  const pct = Math.round(o.count / total * 100);
24942
25319
  const isWinner = o.count === maxCount && maxCount > 0;
24943
25320
  const fillColor = isWinner ? colorWinner : color;
@@ -24972,6 +25349,7 @@ function UserStackReadout({
24972
25349
  max,
24973
25350
  size
24974
25351
  }) {
25352
+ const \u5F15\u304F = use\u5B57\u5F15();
24975
25353
  const names = safeParseArray(value).map(String);
24976
25354
  const shown = names.slice(0, max);
24977
25355
  const overflow = names.length > max;
@@ -24980,7 +25358,7 @@ function UserStackReadout({
24980
25358
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
24981
25359
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
24982
25360
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24983
- 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: [
25361
+ 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: [
24984
25362
  shown.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx(
24985
25363
  "span",
24986
25364
  {
@@ -25008,7 +25386,7 @@ function UserStackReadout({
25008
25386
  fontSize: `${Math.round(size * 0.35)}px`,
25009
25387
  marginLeft: `-${size * 0.3}px`
25010
25388
  },
25011
- title: `+${overflowCount} more`,
25389
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
25012
25390
  children: [
25013
25391
  "+",
25014
25392
  overflowCount
@@ -25043,7 +25421,7 @@ function CommitListReadout({
25043
25421
  const shown = commits.slice(0, max);
25044
25422
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
25045
25423
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25046
- 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: [
25424
+ 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: [
25047
25425
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
25048
25426
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
25049
25427
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -25123,7 +25501,7 @@ function EventLogReadout({
25123
25501
  };
25124
25502
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
25125
25503
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25126
- 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) => {
25504
+ 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) => {
25127
25505
  const spec = severitySpec[e.severity] ?? severitySpec.info;
25128
25506
  return /* @__PURE__ */ jsxRuntime.jsxs(
25129
25507
  "li",
@@ -25166,7 +25544,7 @@ function SearchResultReadout({
25166
25544
  const shown = hits.slice(0, max);
25167
25545
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
25168
25546
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25169
- 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: [
25547
+ 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: [
25170
25548
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
25171
25549
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
25172
25550
  h.url ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -25199,7 +25577,7 @@ function RoadmapReadout({
25199
25577
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
25200
25578
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
25201
25579
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25202
- 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: [
25580
+ 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: [
25203
25581
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
25204
25582
  /* @__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)) })
25205
25583
  ] }, i)) })
@@ -25231,7 +25609,7 @@ function WeatherForecastReadout({
25231
25609
  }
25232
25610
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
25233
25611
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25234
- 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: [
25612
+ 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: [
25235
25613
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
25236
25614
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
25237
25615
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -25275,17 +25653,14 @@ function VideoCardReadout({
25275
25653
  const shown = videos.slice(0, max);
25276
25654
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
25277
25655
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25278
- 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: [
25656
+ 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: [
25279
25657
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
25280
25658
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
25281
25659
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
25282
25660
  ] }),
25283
25661
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
25284
25662
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
25285
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
25286
- v.views,
25287
- " views"
25288
- ] })
25663
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
25289
25664
  ] })
25290
25665
  ] }, i)) })
25291
25666
  ] });
@@ -25302,7 +25677,7 @@ function OrderStatusReadout({
25302
25677
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
25303
25678
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
25304
25679
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25305
- 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) => {
25680
+ 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) => {
25306
25681
  const isDone = i < safeCurrent;
25307
25682
  const isCurrent = i === safeCurrent;
25308
25683
  const isPending = i > safeCurrent;
@@ -25352,9 +25727,9 @@ function AttendanceGridReadout({
25352
25727
  const memberArr = safeParseArray(members).map(String);
25353
25728
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
25354
25729
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25355
- 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: [
25730
+ 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: [
25356
25731
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
25357
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
25732
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.attendance.corner" }) }),
25358
25733
  memberArr.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
25359
25734
  ] }) }),
25360
25735
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
@@ -25408,7 +25783,7 @@ function TimezoneClockReadout({
25408
25783
  }
25409
25784
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
25410
25785
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25411
- 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: [
25786
+ 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: [
25412
25787
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
25413
25788
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
25414
25789
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -25442,7 +25817,7 @@ function FormSummaryReadout({
25442
25817
  }
25443
25818
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
25444
25819
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25445
- 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: [
25820
+ 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: [
25446
25821
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
25447
25822
  /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
25448
25823
  ] }, i)) })
@@ -25475,7 +25850,7 @@ function SongQueueReadout({
25475
25850
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
25476
25851
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
25477
25852
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25478
- 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) => {
25853
+ 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) => {
25479
25854
  const isCurrent = i === safeCurrent;
25480
25855
  return /* @__PURE__ */ jsxRuntime.jsxs(
25481
25856
  "li",
@@ -25520,12 +25895,20 @@ function CalendarMonthReadout({
25520
25895
  } catch {
25521
25896
  }
25522
25897
  }
25523
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
25898
+ const weekDays = [
25899
+ "readout.weekday.0",
25900
+ "readout.weekday.1",
25901
+ "readout.weekday.2",
25902
+ "readout.weekday.3",
25903
+ "readout.weekday.4",
25904
+ "readout.weekday.5",
25905
+ "readout.weekday.6"
25906
+ ];
25524
25907
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
25525
25908
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25526
- 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: [
25909
+ 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: [
25527
25910
  monthName ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
25528
- /* @__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)) }),
25911
+ /* @__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)) }),
25529
25912
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs(
25530
25913
  "div",
25531
25914
  {
@@ -25568,7 +25951,7 @@ function TerminalReadout({
25568
25951
  const shown = lines.slice(0, max);
25569
25952
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
25570
25953
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25571
- 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: [
25954
+ 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: [
25572
25955
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
25573
25956
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
25574
25957
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -25667,10 +26050,11 @@ function KanbanBoardReadout({
25667
26050
  columnWidth,
25668
26051
  max
25669
26052
  }) {
26053
+ const \u5F15\u304F = use\u5B57\u5F15();
25670
26054
  const buckets = {
25671
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
25672
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
25673
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
26055
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
26056
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
26057
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
25674
26058
  };
25675
26059
  const trimmed = value.trim();
25676
26060
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -25787,7 +26171,7 @@ function KanbanBoardReadout({
25787
26171
  )
25788
26172
  ] }, ti);
25789
26173
  }),
25790
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
26174
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
25791
26175
  "text",
25792
26176
  {
25793
26177
  x: x + columnWidth / 2,
@@ -25796,11 +26180,7 @@ function KanbanBoardReadout({
25796
26180
  textAnchor: "middle",
25797
26181
  fill: "#64748b",
25798
26182
  style: { userSelect: "none" },
25799
- children: [
25800
- "+",
25801
- overflow,
25802
- " more"
25803
- ]
26183
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
25804
26184
  }
25805
26185
  ) : null
25806
26186
  ] }, k);
@@ -26357,7 +26737,7 @@ function UserPresenceReadout({
26357
26737
  )
26358
26738
  ] }, i);
26359
26739
  }),
26360
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
26740
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
26361
26741
  "text",
26362
26742
  {
26363
26743
  x: width / 2,
@@ -26366,11 +26746,7 @@ function UserPresenceReadout({
26366
26746
  textAnchor: "middle",
26367
26747
  fill: "#64748b",
26368
26748
  style: { userSelect: "none" },
26369
- children: [
26370
- "+",
26371
- overflow,
26372
- " more"
26373
- ]
26749
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
26374
26750
  }
26375
26751
  ) : null
26376
26752
  ]
@@ -26421,12 +26797,7 @@ function RatingThumbReadout({
26421
26797
  "\u25B2 ",
26422
26798
  upCount
26423
26799
  ] }),
26424
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
26425
- upPct,
26426
- "% up \xB7 ",
26427
- total,
26428
- " votes"
26429
- ] }),
26800
+ /* @__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 } }) }),
26430
26801
  /* @__PURE__ */ jsxRuntime.jsxs(
26431
26802
  "text",
26432
26803
  {
@@ -26601,11 +26972,7 @@ function KpiTrendTileReadout({
26601
26972
  deltaPct.toFixed(1),
26602
26973
  "%)"
26603
26974
  ] }),
26604
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
26605
- "prev ",
26606
- prev,
26607
- unit
26608
- ] }),
26975
+ /* @__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}` } }) }),
26609
26976
  history.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
26610
26977
  ]
26611
26978
  }
@@ -26693,7 +27060,7 @@ function QuickPollEmojiReadout({
26693
27060
  )
26694
27061
  ] }, i);
26695
27062
  }),
26696
- /* @__PURE__ */ jsxRuntime.jsxs(
27063
+ /* @__PURE__ */ jsxRuntime.jsx(
26697
27064
  "text",
26698
27065
  {
26699
27066
  x: width - 8,
@@ -26702,10 +27069,7 @@ function QuickPollEmojiReadout({
26702
27069
  textAnchor: "end",
26703
27070
  fill: "#64748b",
26704
27071
  style: { userSelect: "none" },
26705
- children: [
26706
- "total ",
26707
- total
26708
- ]
27072
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
26709
27073
  }
26710
27074
  )
26711
27075
  ]
@@ -26840,14 +27204,8 @@ function ThreadSummaryReadout({
26840
27204
  height,
26841
27205
  children: [
26842
27206
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
26843
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
26844
- participants,
26845
- " participants"
26846
- ] }),
26847
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
26848
- "last: ",
26849
- lastAuthor
26850
- ] }),
27207
+ /* @__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 } }) }),
27208
+ /* @__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 } }) }),
26851
27209
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
26852
27210
  unread > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-thread-unread": "1", children: [
26853
27211
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -26878,7 +27236,7 @@ function ReadReceiptReadout({
26878
27236
  colorPending
26879
27237
  }) {
26880
27238
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
26881
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
27239
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
26882
27240
  const iconColor = status === 2 ? colorRead : colorPending;
26883
27241
  const width = 180;
26884
27242
  const height = 32;
@@ -26913,7 +27271,7 @@ function ReadReceiptReadout({
26913
27271
  }
26914
27272
  ) : null
26915
27273
  ] }),
26916
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
27274
+ /* @__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 }) })
26917
27275
  ]
26918
27276
  }
26919
27277
  )
@@ -26927,7 +27285,7 @@ function PasswordStrengthReadout({
26927
27285
  colorWeak
26928
27286
  }) {
26929
27287
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
26930
- const labels = ["too weak", "weak", "fair", "good", "strong"];
27288
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
26931
27289
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
26932
27290
  const barW = 46;
26933
27291
  const gap = 6;
@@ -26971,7 +27329,7 @@ function PasswordStrengthReadout({
26971
27329
  textAnchor: "end",
26972
27330
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
26973
27331
  style: { userSelect: "none" },
26974
- children: labels[level]
27332
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labels[level] })
26975
27333
  }
26976
27334
  )
26977
27335
  ]
@@ -27106,7 +27464,7 @@ function FileDropzoneReadout({
27106
27464
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: filename }),
27107
27465
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
27108
27466
  ] }),
27109
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
27467
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
27110
27468
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
27111
27469
  /* @__PURE__ */ jsxRuntime.jsx(
27112
27470
  "text",
@@ -27118,7 +27476,7 @@ function FileDropzoneReadout({
27118
27476
  textAnchor: "middle",
27119
27477
  fill: "#64748b",
27120
27478
  style: { userSelect: "none" },
27121
- children: "\u2B06 Drop file here"
27479
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.drop" })
27122
27480
  }
27123
27481
  ),
27124
27482
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -27130,7 +27488,7 @@ function FileDropzoneReadout({
27130
27488
  textAnchor: "middle",
27131
27489
  fill: "#94a3b8",
27132
27490
  style: { userSelect: "none" },
27133
- children: "or click to browse"
27491
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.browse" })
27134
27492
  }
27135
27493
  )
27136
27494
  ] })
@@ -27165,7 +27523,7 @@ function LogStreamReadout({
27165
27523
  }
27166
27524
  }
27167
27525
  const shown = rows.slice(-5);
27168
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
27526
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
27169
27527
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
27170
27528
  const width = 300;
27171
27529
  const rowH = 18;
@@ -27198,7 +27556,7 @@ function LogStreamReadout({
27198
27556
  fill: "#ffffff",
27199
27557
  fontFamily: "monospace",
27200
27558
  style: { userSelect: "none" },
27201
- children: levelLabels[r.level] ?? "INF"
27559
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
27202
27560
  }
27203
27561
  ),
27204
27562
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -27392,10 +27750,10 @@ function CartSummaryReadout({
27392
27750
  if (!Number.isFinite(shipping)) shipping = 0;
27393
27751
  if (!Number.isFinite(total)) total = 0;
27394
27752
  const rows = [
27395
- { l: "Items", v: `${items}`, bold: false },
27396
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27397
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27398
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
27753
+ { l: "readout.cart.items", v: `${items}`, bold: false },
27754
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27755
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27756
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
27399
27757
  ];
27400
27758
  const width = 260;
27401
27759
  const rowH = 20;
@@ -27425,7 +27783,7 @@ function CartSummaryReadout({
27425
27783
  fontWeight: isTotal ? 700 : 500,
27426
27784
  fill: isTotal ? colorTotal : "#334155",
27427
27785
  style: { userSelect: "none" },
27428
- children: r.l
27786
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: r.l })
27429
27787
  }
27430
27788
  ),
27431
27789
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -27473,6 +27831,8 @@ function PricingTierReadout({
27473
27831
  }
27474
27832
  }
27475
27833
  if (!Number.isFinite(price)) price = 0;
27834
+ const \u5F15\u304F = use\u5B57\u5F15();
27835
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
27476
27836
  const width = 240;
27477
27837
  const height = 176;
27478
27838
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -27497,7 +27857,7 @@ function PricingTierReadout({
27497
27857
  textAnchor: "middle",
27498
27858
  fill: "#ffffff",
27499
27859
  style: { userSelect: "none" },
27500
- children: planName || "Plan"
27860
+ children: \u898B\u305B\u308B\u540D\u524D
27501
27861
  }
27502
27862
  ),
27503
27863
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -27525,7 +27885,7 @@ function PricingTierReadout({
27525
27885
  textAnchor: "middle",
27526
27886
  fill: "#64748b",
27527
27887
  style: { userSelect: "none" },
27528
- children: "per month"
27888
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.pricing.perMonth" })
27529
27889
  }
27530
27890
  ),
27531
27891
  features.slice(0, 3).map((f, i) => {
@@ -27540,7 +27900,7 @@ function PricingTierReadout({
27540
27900
  ] }, i);
27541
27901
  }),
27542
27902
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
27543
- /* @__PURE__ */ jsxRuntime.jsxs(
27903
+ /* @__PURE__ */ jsxRuntime.jsx(
27544
27904
  "text",
27545
27905
  {
27546
27906
  x: width / 2,
@@ -27550,10 +27910,7 @@ function PricingTierReadout({
27550
27910
  textAnchor: "middle",
27551
27911
  fill: "#ffffff",
27552
27912
  style: { userSelect: "none" },
27553
- children: [
27554
- "Get ",
27555
- planName || "Plan"
27556
- ]
27913
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
27557
27914
  }
27558
27915
  )
27559
27916
  ]
@@ -27619,12 +27976,12 @@ function CouponCodeReadout({
27619
27976
  fill: applied ? colorApplied : "#94a3b8",
27620
27977
  fontFamily: "monospace",
27621
27978
  style: { userSelect: "none" },
27622
- children: code || "ENTER CODE"
27979
+ children: code || /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.placeholder" })
27623
27980
  }
27624
27981
  ),
27625
27982
  applied ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-applied": "1", children: [
27626
27983
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
27627
- /* @__PURE__ */ jsxRuntime.jsxs(
27984
+ /* @__PURE__ */ jsxRuntime.jsx(
27628
27985
  "text",
27629
27986
  {
27630
27987
  x: boxW + 57,
@@ -27634,11 +27991,7 @@ function CouponCodeReadout({
27634
27991
  textAnchor: "middle",
27635
27992
  fill: "#ffffff",
27636
27993
  style: { userSelect: "none" },
27637
- children: [
27638
- "-",
27639
- discountPct,
27640
- "% off"
27641
- ]
27994
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
27642
27995
  }
27643
27996
  )
27644
27997
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -27653,7 +28006,7 @@ function CouponCodeReadout({
27653
28006
  textAnchor: "middle",
27654
28007
  fill: "#ffffff",
27655
28008
  style: { userSelect: "none" },
27656
- children: "Apply"
28009
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.apply" })
27657
28010
  }
27658
28011
  )
27659
28012
  ] })
@@ -27733,10 +28086,7 @@ function ArticlePreviewReadout({
27733
28086
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
27734
28087
  ] }),
27735
28088
  /* @__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) }),
27736
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
27737
- "by ",
27738
- author
27739
- ] }),
28089
+ /* @__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 } }) }),
27740
28090
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
27741
28091
  ]
27742
28092
  }