@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.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useMemo, useEffect, useSyncExternalStore, useRef, useCallback, useState, useLayoutEffect, useId, createElement } from 'react';
1
+ import { createContext, useMemo, useEffect, useSyncExternalStore, useRef, useCallback, useState, useLayoutEffect, useId, createElement, useContext } from 'react';
2
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
3
 
4
4
  // src/render.tsx
@@ -356,6 +356,334 @@ function useReducedMotion() {
356
356
  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
357
357
  }
358
358
 
359
+ // src/lang.ts
360
+ function resolveLang(value) {
361
+ return value === "ja" ? "ja" : "en";
362
+ }
363
+ var en = {
364
+ /** `shape-terminal` の 2 行目 (命令の出力) */
365
+ "terminal.output": "\u2192 12 chunks in 1.8s",
366
+ /** `shape-code-block` の札の file 名 */
367
+ "codeBlock.fileName": "utils.ts",
368
+ /** `shape-kanban-card` の課題の番号 */
369
+ "kanbanCard.id": "CAR-1111",
370
+ /** `shape-kanban-card` の状態の札 */
371
+ "kanbanCard.status": "IN PROG",
372
+ /** `shape-kanban-card` の題の下の説明 */
373
+ "kanbanCard.task": "shape-driven kind \u5B9F\u88C5",
374
+ /** `shape-kanban-card` の期日 */
375
+ "kanbanCard.due": "Jul 10",
376
+ /** `shape-smart-contract` の契約の本文の 1 行 */
377
+ "smartContract.call": "function execute()",
378
+ /** `shape-blockchain-block` の題を渡さない時の見出し */
379
+ "blockchainBlock.title": "Block #421,873",
380
+ /** `shape-blockchain-block` の 1 行目の名前 (塊を識別する値) */
381
+ "blockchainBlock.hash": "hash",
382
+ /** `shape-blockchain-block` の 2 行目の名前 (1 つ前の塊の識別値) */
383
+ "blockchainBlock.prev": "prev",
384
+ /** `shape-blockchain-block` の 3 行目の名前 (取引をまとめた木の根) */
385
+ "blockchainBlock.merkle": "merkle",
386
+ /** `shape-blockchain-block` の 4 行目の名前 (採掘で試した値) */
387
+ "blockchainBlock.nonce": "nonce",
388
+ /** `shape-blockchain-block` の 5 行目の名前 (取引の件数) */
389
+ "blockchainBlock.tx": "tx",
390
+ /** `shape-blockchain-block` の 5 行目の値 */
391
+ "blockchainBlock.txCount": "142 tx",
392
+ /** `shape-rpc-node` の稼働の札 */
393
+ "rpcNode.status": "RPC ONLINE",
394
+ /** `shape-trust-bank` の看板 */
395
+ "trustBank.sign": "TRUST",
396
+ /** `shape-payment-provider` の看板 */
397
+ "paymentProvider.sign": "PAY",
398
+ /** `shape-payment-provider` の状態の札 */
399
+ "paymentProvider.status": "PROCESSING",
400
+ /** `shape-brokerage` の株価の帯 */
401
+ "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
402
+ /** `shape-brokerage` の看板 */
403
+ "brokerage.sign": "$ SECURITIES",
404
+ /** `shape-exchange` の看板 */
405
+ "exchange.sign": "EXCHANGE",
406
+ /** `shape-exchange` の看板の下の札 */
407
+ "exchange.sub": "clearing",
408
+ /** `shape-atm` の天井の看板 */
409
+ "atm.sign": "ATM CORNER",
410
+ /** `shape-atm` の画面の案内 */
411
+ "atm.screen": "SELECT AMOUNT",
412
+ /** `shape-atm` の決める鍵 */
413
+ "atm.ok": "OK",
414
+ /** `shape-atm` のカードを入れる口の札 */
415
+ "atm.cardSlot": "CARD SLOT",
416
+ /** `shape-storefront` の看板 */
417
+ "storefront.sign": "SHOP",
418
+ /** `shape-storefront` の扉の札 */
419
+ "storefront.open": "OPEN",
420
+ /** `shape-warehouse` の看板 */
421
+ "warehouse.sign": "WAREHOUSE",
422
+ /** `shape-api-gateway` の看板 */
423
+ "apiGateway.sign": "API GATEWAY",
424
+ /** `shape-api-gateway` の 3 行目の要求の種類 */
425
+ "apiGateway.delete": "DEL",
426
+ /** `shape-api-gateway` の 1 行目の宛先 */
427
+ "apiGateway.users": "/users",
428
+ /** `shape-api-gateway` の 2 行目の宛先 */
429
+ "apiGateway.orders": "/orders",
430
+ /** `shape-api-gateway` の 3 行目の宛先 */
431
+ "apiGateway.session": "/session",
432
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
433
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
434
+ /** 配列を描く読み出しで、値が空の時の字 */
435
+ "readout.empty": "empty",
436
+ /** `sparkline` で点がまだ無い時の字 */
437
+ "readout.sparkline.waiting": "waiting",
438
+ /** 時の流れの入力欄の速さ */
439
+ "input.timeline.speed": "{speed}x",
440
+ /** 時の流れの入力欄の経過と長さ (秒) */
441
+ "input.timeline.time": "{t}s / {d}s",
442
+ /** `sequence-timeline` の点の見出し */
443
+ "readout.sequenceTimeline.title": "{name}: t={t}",
444
+ /** `bubble-chart` の泡の見出し */
445
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
446
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
447
+ "readout.calendarHeatmap.title": "day {i}: {v}",
448
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
449
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
450
+ /** `slope` の左の目盛 */
451
+ "readout.slope.before": "before",
452
+ /** `slope` の右の目盛 */
453
+ "readout.slope.after": "after",
454
+ /** `bullet-chart` の実績の見出し */
455
+ "readout.bulletChart.actual": "actual: {v}",
456
+ /** `bullet-chart` の目標の見出し */
457
+ "readout.bulletChart.target": "target: {v}",
458
+ /** `rating` の塗った星の見出し */
459
+ "readout.rating.full": "full",
460
+ /** `rating` の半分塗った星の見出し */
461
+ "readout.rating.half": "half",
462
+ /** `rating` の塗っていない星の見出し */
463
+ "readout.rating.empty": "empty",
464
+ /** `price-tag` の割引額 */
465
+ "readout.priceTag.save": "You save {amount}",
466
+ /** `confidence-meter` の低い帯の名前 */
467
+ "readout.confidence.low": "low",
468
+ /** `confidence-meter` の中ほどの帯の名前 */
469
+ "readout.confidence.mid": "mid",
470
+ /** `confidence-meter` の高い帯の名前 */
471
+ "readout.confidence.high": "high",
472
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
473
+ "readout.more": "+{n} more",
474
+ /** `video-card` の再生数 */
475
+ "readout.videoCard.views": "{v} views",
476
+ /** `attendance-grid` の角の見出し */
477
+ "readout.attendance.corner": "day",
478
+ /** `calendar-month` の曜日 (日曜) */
479
+ "readout.weekday.0": "Sun",
480
+ /** `calendar-month` の曜日 (月曜) */
481
+ "readout.weekday.1": "Mon",
482
+ /** `calendar-month` の曜日 (火曜) */
483
+ "readout.weekday.2": "Tue",
484
+ /** `calendar-month` の曜日 (水曜) */
485
+ "readout.weekday.3": "Wed",
486
+ /** `calendar-month` の曜日 (木曜) */
487
+ "readout.weekday.4": "Thu",
488
+ /** `calendar-month` の曜日 (金曜) */
489
+ "readout.weekday.5": "Fri",
490
+ /** `calendar-month` の曜日 (土曜) */
491
+ "readout.weekday.6": "Sat",
492
+ /** `rating-thumb` の賛成の割合と票数 */
493
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
494
+ /** `kpi-trend-tile` の前の期間の値 */
495
+ "readout.kpiTrend.prev": "prev {v}",
496
+ /** `quick-poll-emoji` の票の合計 */
497
+ "readout.poll.total": "total {n}",
498
+ /** `thread-summary` の参加者の数 */
499
+ "readout.thread.participants": "{n} participants",
500
+ /** `thread-summary` の最後に書いた人 */
501
+ "readout.thread.last": "last: {name}",
502
+ /** `read-receipt` の送信した段 */
503
+ "readout.readReceipt.sent": "sent",
504
+ /** `read-receipt` の相手に届いた段 */
505
+ "readout.readReceipt.delivered": "delivered",
506
+ /** `read-receipt` の読まれた段 */
507
+ "readout.readReceipt.read": "read",
508
+ /** `password-strength` の段階 0 */
509
+ "readout.password.0": "too weak",
510
+ /** `password-strength` の段階 1 */
511
+ "readout.password.1": "weak",
512
+ /** `password-strength` の段階 2 */
513
+ "readout.password.2": "fair",
514
+ /** `password-strength` の段階 3 */
515
+ "readout.password.3": "good",
516
+ /** `password-strength` の段階 4 */
517
+ "readout.password.4": "strong",
518
+ /** `file-dropzone` で取り込んだ後の字 */
519
+ "readout.dropzone.uploaded": "uploaded",
520
+ /** `file-dropzone` の空の時の 1 行目 */
521
+ "readout.dropzone.drop": "\u2B06 Drop file here",
522
+ /** `file-dropzone` の空の時の 2 行目 */
523
+ "readout.dropzone.browse": "or click to browse",
524
+ /** `log-stream` の重さ 0 (調べるための詳細) */
525
+ "readout.log.0": "DBG",
526
+ /** `log-stream` の重さ 1 (知らせ) */
527
+ "readout.log.1": "INF",
528
+ /** `log-stream` の重さ 2 (警告) */
529
+ "readout.log.2": "WRN",
530
+ /** `log-stream` の重さ 3 (異常) */
531
+ "readout.log.3": "ERR",
532
+ /** `cart-summary` の点数 */
533
+ "readout.cart.items": "Items",
534
+ /** `cart-summary` の小計 */
535
+ "readout.cart.subtotal": "Subtotal",
536
+ /** `cart-summary` の送料 */
537
+ "readout.cart.shipping": "Shipping",
538
+ /** `cart-summary` の合計 */
539
+ "readout.cart.total": "Total",
540
+ /** `pricing-tier` で名前が空の時の名前 */
541
+ "readout.pricing.plan": "Plan",
542
+ /** `pricing-tier` の価格の後ろ */
543
+ "readout.pricing.perMonth": "per month",
544
+ /** `pricing-tier` の押す札 */
545
+ "readout.pricing.get": "Get {name}",
546
+ /** `coupon-code` で番号が空の時の字 */
547
+ "readout.coupon.placeholder": "ENTER CODE",
548
+ /** `coupon-code` の割引の割合 */
549
+ "readout.coupon.off": "-{pct}% off",
550
+ /** `coupon-code` の押す札 */
551
+ "readout.coupon.apply": "Apply",
552
+ /** `article-preview` の書いた人 */
553
+ "readout.article.by": "by {author}",
554
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
555
+ "readout.priority.high": "HIGH",
556
+ /** `priority-badge` の中ほどの優先度の表示 */
557
+ "readout.priority.med": "MED",
558
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
559
+ "readout.priority.low": "LOW",
560
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
561
+ "readout.kanban.todo": "Todo",
562
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
563
+ "readout.kanban.inprogress": "In Progress",
564
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
565
+ "readout.kanban.done": "Done",
566
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
567
+ "readout.trafficLight.red": "red",
568
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
569
+ "readout.trafficLight.yellow": "yellow",
570
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
571
+ "readout.trafficLight.green": "green"
572
+ };
573
+ var ja = {
574
+ "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
575
+ "codeBlock.fileName": "\u5171\u901A.ts",
576
+ "kanbanCard.id": "#1111",
577
+ "kanbanCard.status": "\u9032\u884C\u4E2D",
578
+ "kanbanCard.task": "\u5F62\u3092\u5B9F\u88C5",
579
+ "kanbanCard.due": "7/10",
580
+ "smartContract.call": "\u81EA\u52D5\u3067\u5B9F\u884C\u3059\u308B",
581
+ "blockchainBlock.title": "\u30D6\u30ED\u30C3\u30AF #421,873",
582
+ "blockchainBlock.hash": "\u30CF\u30C3\u30B7\u30E5",
583
+ "blockchainBlock.prev": "\u76F4\u524D",
584
+ "blockchainBlock.merkle": "\u6728\u306E\u6839",
585
+ "blockchainBlock.nonce": "\u30CE\u30F3\u30B9",
586
+ "blockchainBlock.tx": "\u53D6\u5F15",
587
+ "blockchainBlock.txCount": "142 \u4EF6",
588
+ "rpcNode.status": "RPC \u7A3C\u50CD\u4E2D",
589
+ "trustBank.sign": "\u4FE1\u8A17",
590
+ "paymentProvider.sign": "\u6C7A\u6E08",
591
+ "paymentProvider.status": "\u51E6\u7406\u4E2D",
592
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
593
+ "brokerage.sign": "\xA5 \u8A3C\u5238",
594
+ "exchange.sign": "\u53D6\u5F15\u6240",
595
+ "exchange.sub": "\u6E05\u7B97",
596
+ "atm.sign": "ATM \u30B3\u30FC\u30CA\u30FC",
597
+ "atm.screen": "\u91D1\u984D\u3092\u9078\u629E",
598
+ "atm.ok": "\u78BA\u5B9A",
599
+ "atm.cardSlot": "\u30AB\u30FC\u30C9\u633F\u5165\u53E3",
600
+ "storefront.sign": "\u5546\u5E97",
601
+ "storefront.open": "\u55B6\u696D",
602
+ "warehouse.sign": "\u5009\u5EAB",
603
+ "apiGateway.sign": "API \u5165\u53E3",
604
+ "apiGateway.delete": "DELETE",
605
+ "apiGateway.users": "/\u5229\u7528\u8005",
606
+ "apiGateway.orders": "/\u6CE8\u6587",
607
+ "apiGateway.session": "/\u63A5\u7D9A",
608
+ "readout.empty": "\u306A\u3057",
609
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
610
+ "input.timeline.speed": "{speed}\u500D",
611
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
612
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
613
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
614
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
615
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
616
+ "readout.slope.before": "\u524D",
617
+ "readout.slope.after": "\u5F8C",
618
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
619
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
620
+ "readout.rating.full": "\u6E80",
621
+ "readout.rating.half": "\u534A\u5206",
622
+ "readout.rating.empty": "\u7A7A",
623
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
624
+ "readout.confidence.low": "\u4F4E",
625
+ "readout.confidence.mid": "\u4E2D",
626
+ "readout.confidence.high": "\u9AD8",
627
+ "readout.more": "\u307B\u304B {n}",
628
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
629
+ "readout.attendance.corner": "\u65E5",
630
+ "readout.weekday.0": "\u65E5",
631
+ "readout.weekday.1": "\u6708",
632
+ "readout.weekday.2": "\u706B",
633
+ "readout.weekday.3": "\u6C34",
634
+ "readout.weekday.4": "\u6728",
635
+ "readout.weekday.5": "\u91D1",
636
+ "readout.weekday.6": "\u571F",
637
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
638
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
639
+ "readout.poll.total": "\u5408\u8A08 {n}",
640
+ "readout.thread.participants": "{n} \u4EBA",
641
+ "readout.thread.last": "\u6700\u5F8C: {name}",
642
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
643
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
644
+ "readout.readReceipt.read": "\u65E2\u8AAD",
645
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
646
+ "readout.password.1": "\u5F31\u3044",
647
+ "readout.password.2": "\u666E\u901A",
648
+ "readout.password.3": "\u826F\u3044",
649
+ "readout.password.4": "\u5F37\u3044",
650
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
651
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
652
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
653
+ "readout.log.0": "\u8A73\u7D30",
654
+ "readout.log.1": "\u60C5\u5831",
655
+ "readout.log.2": "\u8B66\u544A",
656
+ "readout.log.3": "\u7570\u5E38",
657
+ "readout.cart.items": "\u70B9\u6570",
658
+ "readout.cart.subtotal": "\u5C0F\u8A08",
659
+ "readout.cart.shipping": "\u9001\u6599",
660
+ "readout.cart.total": "\u5408\u8A08",
661
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
662
+ "readout.pricing.perMonth": "\u6708\u984D",
663
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
664
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
665
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
666
+ "readout.coupon.apply": "\u9069\u7528",
667
+ "readout.article.by": "\u6587: {author}",
668
+ "readout.priority.high": "\u9AD8",
669
+ "readout.priority.med": "\u4E2D",
670
+ "readout.priority.low": "\u4F4E",
671
+ "readout.kanban.todo": "\u672A\u7740\u624B",
672
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
673
+ "readout.kanban.done": "\u5B8C\u4E86",
674
+ "readout.trafficLight.red": "\u8D64",
675
+ "readout.trafficLight.yellow": "\u9EC4",
676
+ "readout.trafficLight.green": "\u7DD1"
677
+ };
678
+ var CDL_TEXT = { en, ja };
679
+ function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
680
+ const \u8A00\u8A9E = lang ?? "en";
681
+ return (key) => CDL_TEXT[\u8A00\u8A9E][key];
682
+ }
683
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
684
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
685
+ }
686
+
359
687
  // src/layout/clearance-constants.ts
360
688
  var CLEARANCE_NODE_LABEL = 32;
361
689
  var CLEARANCE_LANE_LABEL = 24;
@@ -9634,6 +9962,9 @@ function layout(diag) {
9634
9962
  // **遮断はここだけに置く**。 描画は必ず組み立てを通り、組み立て API も `er` も
9635
9963
  // 素通しにしてある。 上流にも置くと、どの入力でも通らない分岐が残る
9636
9964
  ...diag.palette ? { palette: diag.palette } : {},
9965
+ // 描画側の固定の字の言語 (#847)。 既定 (`en`) と型の外の値は持たせない = 配置の結果の形を
9966
+ // 変更前と揃え、記法の書き損じで一部の字だけ日本語になる形を作らない
9967
+ ...resolveLang(diag.lang) === "ja" ? { lang: "ja" } : {},
9637
9968
  // 種類も配色と同じく空の目印を出さない。 遮断をここに揃えると手書きの図にも効く
9638
9969
  ...diag.type ? { type: diag.type } : {},
9639
9970
  bboxes,
@@ -10903,12 +11234,12 @@ function \u5272\u308B\u5019\u88DC(text) {
10903
11234
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
10904
11235
  }
10905
11236
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
10906
- const \u5B57 = [];
11237
+ const \u5B572 = [];
10907
11238
  const \u4E26\u3073 = [...text];
10908
11239
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
10909
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11240
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
10910
11241
  }
10911
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
11242
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
10912
11243
  }
10913
11244
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
10914
11245
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -13264,9 +13595,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
13264
13595
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
13265
13596
  };
13266
13597
  }
13267
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13598
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13268
13599
  let \u7D1A = \u521D\u671F;
13269
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13600
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13270
13601
  return \u7D1A;
13271
13602
  }
13272
13603
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -15245,6 +15576,11 @@ var commonFrame2 = (active) => ({
15245
15576
  var ASCENT3 = 0.72;
15246
15577
  var DESCENT3 = 0.25;
15247
15578
  var MONO_ADVANCE = 0.62;
15579
+ function \u7B49\u5E45\u306E\u6841(s) {
15580
+ let \u6841 = 0;
15581
+ for (const c of s) \u6841 += (c.codePointAt(0) ?? 0) >= 11904 ? 2 : 1;
15582
+ return \u6841;
15583
+ }
15248
15584
  var LABEL_SUB_RATIO = 11 / 16;
15249
15585
  var LABEL_EYE_RATIO = 12 / 16;
15250
15586
  var LABEL_EYE_GAP = 8;
@@ -15342,7 +15678,8 @@ function ShapeWindowNode({ node, active }) {
15342
15678
  commonLabel2(node, node.cx, \u540D\u524D.y, \u540D\u524D.size)
15343
15679
  ] });
15344
15680
  }
15345
- function ShapeTerminalNode({ node, active }) {
15681
+ function ShapeTerminalNode({ node, active, lang }) {
15682
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15346
15683
  const frame = commonFrame2(active);
15347
15684
  const \u7DDA = frame.strokeWidth / 2;
15348
15685
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -15363,10 +15700,10 @@ function ShapeTerminalNode({ node, active }) {
15363
15700
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
15364
15701
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
15365
15702
  ],
15366
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: "\u2192 12 chunks in 1.8s" }],
15703
+ [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
15367
15704
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
15368
15705
  ];
15369
- const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((t) => t.\u5DE6 + t.\u6587.length * MONO_ADVANCE * t.\u5B57)) + \u4F59\u767D;
15706
+ const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
15370
15707
  const \u81EA\u7136\u9AD8 = \u5E2F + \u5148\u982D + \u884C\u9593 * (\u884C.length - 1) + Math.max(\u30AB\u30FC\u30BD\u30EB.\u4E0B, 12.5 * DESCENT3);
15371
15708
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
15372
15709
  const barH = \u5E2F * \u500D;
@@ -15476,7 +15813,8 @@ function ShapeTerminalNode({ node, active }) {
15476
15813
  )
15477
15814
  ] });
15478
15815
  }
15479
- function ShapeCodeBlockNode({ node, active }) {
15816
+ function ShapeCodeBlockNode({ node, active, lang }) {
15817
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15480
15818
  const frame = commonFrame2(active);
15481
15819
  const \u7DDA = frame.strokeWidth / 2;
15482
15820
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -15566,7 +15904,7 @@ function ShapeCodeBlockNode({ node, active }) {
15566
15904
  fontFamily: lineFont,
15567
15905
  textAnchor: "middle",
15568
15906
  fill: "#e6edf3",
15569
- children: "utils.ts"
15907
+ children: \u5B57\u5F15("codeBlock.fileName")
15570
15908
  }
15571
15909
  ),
15572
15910
  /* @__PURE__ */ jsx("circle", { cx: x + tabW - \u4E38, cy: y + tabH / 2, r: 3 * \u500D, fill: "#7cd88f", stroke: "none" }),
@@ -15642,7 +15980,8 @@ function ShapeCodeBlockNode({ node, active }) {
15642
15980
  )
15643
15981
  ] });
15644
15982
  }
15645
- function ShapeKanbanCardNode({ node, active }) {
15983
+ function ShapeKanbanCardNode({ node, active, lang }) {
15984
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
15646
15985
  const frame = commonFrame2(active);
15647
15986
  const \u7DDA = frame.strokeWidth / 2;
15648
15987
  const \u5F71 = 3;
@@ -15654,7 +15993,7 @@ function ShapeKanbanCardNode({ node, active }) {
15654
15993
  const \u5DE6\u53F3\u4F59\u767D = 14;
15655
15994
  const \u4E0A\u6BB5\u9699\u9593 = 8;
15656
15995
  const \u512A\u5148\u5E2F\u9AD8 = 10;
15657
- const ID\u6587 = "CAR-1111";
15996
+ const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
15658
15997
  const ID\u57FA\u6E96 = 30;
15659
15998
  const ID\u5B57 = 11;
15660
15999
  const ID\u5B57\u9593 = 1;
@@ -15673,7 +16012,7 @@ function ShapeKanbanCardNode({ node, active }) {
15673
16012
  const \u4E0B\u5E2F = FOOTER\u4E0B - AVATAR\u4E2D\u5FC3Y + AVATAR\u534A\u5F84 + AVATAR\u67A0 / 2 + \u5E2F\u9593\u4F59\u767D;
15674
16013
  const \u4E2D\u5E2F = \u540D\u524D\u5B57 * ASCENT3 + \u540D\u524D\u5B57 * \u8AAC\u660E\u57FA\u6E96\u6BD4 + \u540D\u524D\u5B57 * \u8AAC\u660E\u5B57\u6BD4 * DESCENT3;
15675
16014
  const \u81EA\u7136\u9AD8 = \u4E0A\u5E2F + \u4E2D\u5E2F + \u4E0B\u5E2F;
15676
- const ID\u5E45 = ID\u6587.length * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * ID\u6587.length;
16015
+ const ID\u5E45 = \u7B49\u5E45\u306E\u6841(ID\u6587) * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * [...ID\u6587].length;
15677
16016
  const \u81EA\u7136\u5E45 = \u5DE6\u53F3\u4F59\u767D + ID\u5E45 + \u4E0A\u6BB5\u9699\u9593 + PILL\u5E45 + \u5DE6\u53F3\u4F59\u767D;
15678
16017
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, h / \u81EA\u7136\u9AD8);
15679
16018
  const priorityBarH = \u512A\u5148\u5E2F\u9AD8 * \u500D;
@@ -15752,7 +16091,7 @@ function ShapeKanbanCardNode({ node, active }) {
15752
16091
  textAnchor: "middle",
15753
16092
  fill: "#5a4a1a",
15754
16093
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
15755
- children: "IN PROG"
16094
+ children: \u5B57\u5F15("kanbanCard.status")
15756
16095
  }
15757
16096
  ),
15758
16097
  /* @__PURE__ */ jsx(
@@ -15776,7 +16115,7 @@ function ShapeKanbanCardNode({ node, active }) {
15776
16115
  fontSize: \u540D\u524D.size * \u8AAC\u660E\u5B57\u6BD4,
15777
16116
  textAnchor: "middle",
15778
16117
  fill: "var(--cdl-text-dim, #5a6270)",
15779
- children: "shape-driven kind \u5B9F\u88C5"
16118
+ children: \u5B57\u5F15("kanbanCard.task")
15780
16119
  }
15781
16120
  ),
15782
16121
  /* @__PURE__ */ jsxs("g", { transform: `translate(${x + \u5DE6\u53F3\u4F59\u767D * \u500D}, ${footY})`, children: [
@@ -15839,7 +16178,7 @@ function ShapeKanbanCardNode({ node, active }) {
15839
16178
  fontWeight: 600,
15840
16179
  textAnchor: "end",
15841
16180
  fill: "var(--cdl-text-dim, #5a6270)",
15842
- children: "Jul 10"
16181
+ children: \u5B57\u5F15("kanbanCard.due")
15843
16182
  }
15844
16183
  )
15845
16184
  ] })
@@ -16883,7 +17222,8 @@ function EthereumDiamond({ cx, cy, h, colors }) {
16883
17222
  /* @__PURE__ */ 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" })
16884
17223
  ] });
16885
17224
  }
16886
- function ShapeSmartContractNode({ node, active }) {
17225
+ function ShapeSmartContractNode({ node, active, lang }) {
17226
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
16887
17227
  const frame = commonFrame4(active);
16888
17228
  const r = shapeRegion(node);
16889
17229
  const docW = SMART_CONTRACT_W;
@@ -16919,7 +17259,7 @@ function ShapeSmartContractNode({ node, active }) {
16919
17259
  /* @__PURE__ */ jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
16920
17260
  /* @__PURE__ */ jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
16921
17261
  [y + 40, y + 58, y + 76, y + 94].map((ly, i) => /* @__PURE__ */ 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)),
16922
- /* @__PURE__ */ 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()" }),
17262
+ /* @__PURE__ */ 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") }),
16923
17263
  /* @__PURE__ */ jsx(
16924
17264
  "polygon",
16925
17265
  {
@@ -16940,14 +17280,14 @@ function ShapeSmartContractNode({ node, active }) {
16940
17280
  }
16941
17281
  var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
16942
17282
  var BLOCK_DEFAULT_FIELDS = [
16943
- { label: "hash", value: "0xaf31c9d2..." },
16944
- { label: "prev", value: "0x7b3f92c1..." },
16945
- { label: "merkle", value: "0xc1892f4a..." },
16946
- { label: "nonce", value: "82,914" },
16947
- { label: "tx", value: "142 tx" }
17283
+ { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
17284
+ { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
17285
+ { key: "merkle", label: "blockchainBlock.merkle", value: { text: "0xc1892f4a..." } },
17286
+ { key: "nonce", label: "blockchainBlock.nonce", value: { text: "82,914" } },
17287
+ { key: "tx", label: "blockchainBlock.tx", value: { \u8F9E\u66F8: "blockchainBlock.txCount" } }
16948
17288
  ];
16949
- var BLOCK_DEFAULT_TITLE = "Block #421,873";
16950
- function ShapeBlockchainBlockNode({ node, active }) {
17289
+ function ShapeBlockchainBlockNode({ node, active, lang }) {
17290
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
16951
17291
  const frame = commonFrame4(active);
16952
17292
  const r = shapeRegion(node);
16953
17293
  const bw = BLOCK_W;
@@ -16957,11 +17297,15 @@ function ShapeBlockchainBlockNode({ node, active }) {
16957
17297
  const x = cx - bw / 2;
16958
17298
  const y = cy - bh / 2;
16959
17299
  const \u6E21\u3055\u308C\u305F = (v) => (v ?? "").trim();
16960
- const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || BLOCK_DEFAULT_TITLE;
16961
- const fields = BLOCK_DEFAULT_FIELDS.map((f) => ({
16962
- label: f.label,
16963
- value: f.label === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || f.value : f.value
16964
- }));
17300
+ const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || \u5B57\u5F15("blockchainBlock.title");
17301
+ const fields = BLOCK_DEFAULT_FIELDS.map((f) => {
17302
+ const \u65E2\u5B9A\u5024 = "text" in f.value ? f.value.text : \u5B57\u5F15(f.value.\u8F9E\u66F8);
17303
+ return {
17304
+ key: f.key,
17305
+ label: \u5B57\u5F15(f.label),
17306
+ value: f.key === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || \u65E2\u5B9A\u5024 : \u65E2\u5B9A\u5024
17307
+ };
17308
+ });
16965
17309
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
16966
17310
  const art = /* @__PURE__ */ jsxs("g", { children: [
16967
17311
  /* @__PURE__ */ jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
@@ -16971,7 +17315,7 @@ function ShapeBlockchainBlockNode({ node, active }) {
16971
17315
  /* @__PURE__ */ jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
16972
17316
  fields.map((f, i) => /* @__PURE__ */ jsxs("g", { children: [
16973
17317
  /* @__PURE__ */ 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 }),
16974
- /* @__PURE__ */ 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) }),
17318
+ /* @__PURE__ */ 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) }),
16975
17319
  /* @__PURE__ */ 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 })
16976
17320
  ] }, i)),
16977
17321
  /* @__PURE__ */ jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -17176,7 +17520,8 @@ function ShapeBlockchainNodeNode({ node, active }) {
17176
17520
  bottomLabel2(node, r.cx, r.label)
17177
17521
  ] });
17178
17522
  }
17179
- function ShapeRpcNodeNode({ node, active }) {
17523
+ function ShapeRpcNodeNode({ node, active, lang }) {
17524
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17180
17525
  const frame = commonFrame4(active);
17181
17526
  const r = shapeRegion(node);
17182
17527
  const cx = r.cx;
@@ -17189,7 +17534,7 @@ function ShapeRpcNodeNode({ node, active }) {
17189
17534
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
17190
17535
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: 30, rx: 10, fill: "#2d3a4f", stroke: "none" }),
17191
17536
  /* @__PURE__ */ jsx("circle", { cx: x + 14, cy: y + 15, r: 5, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: "1.5s", repeatCount: "indefinite" }) }),
17192
- /* @__PURE__ */ jsx("text", { x: x + 26, y: y + 20, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, fill: "#7cd88f", children: "RPC ONLINE" }),
17537
+ /* @__PURE__ */ 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") }),
17193
17538
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 6, fontSize: 30, fontWeight: 700, textAnchor: "middle", fill: "#e6edf3", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "{...}" }),
17194
17539
  /* @__PURE__ */ 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" }),
17195
17540
  /* @__PURE__ */ jsx("rect", { x: x + 16, y: y + bh - 24, width: bw - 32, height: 8, rx: 4, fill: "#0f1419", stroke: "none" }),
@@ -17475,7 +17820,8 @@ var TRUST_BASE_H = 14;
17475
17820
  var TRUST_BODY_OUT = 8;
17476
17821
  var TRUST_BLD_W_MIN = 140;
17477
17822
  var TRUST_BLD_W_MAX = 280;
17478
- function ShapeTrustBankNode({ node, active }) {
17823
+ function ShapeTrustBankNode({ node, active, lang }) {
17824
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17479
17825
  const frame = commonFrame5(active);
17480
17826
  const r = shapeRegion(node);
17481
17827
  const \u7DDA = frame.strokeWidth / 2;
@@ -17512,7 +17858,7 @@ function ShapeTrustBankNode({ node, active }) {
17512
17858
  return /* @__PURE__ */ 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);
17513
17859
  }),
17514
17860
  /* @__PURE__ */ 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" }),
17515
- /* @__PURE__ */ 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" }),
17861
+ /* @__PURE__ */ 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") }),
17516
17862
  /* @__PURE__ */ 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 }),
17517
17863
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
17518
17864
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -17531,7 +17877,8 @@ function ShapeTrustBankNode({ node, active }) {
17531
17877
  bottomLabel3(node, r.cx, r.label)
17532
17878
  ] });
17533
17879
  }
17534
- function ShapePaymentProviderNode({ node, active }) {
17880
+ function ShapePaymentProviderNode({ node, active, lang }) {
17881
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17535
17882
  const frame = commonFrame5(active);
17536
17883
  const r = shapeRegion(node);
17537
17884
  const cx = r.cx;
@@ -17548,13 +17895,13 @@ function ShapePaymentProviderNode({ node, active }) {
17548
17895
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: boxW, height: boxH, rx: 10, fill: "#255a7a", stroke: accentDark, strokeWidth: frame.strokeWidth }),
17549
17896
  /* @__PURE__ */ jsx("rect", { x, y, width: boxW, height: headerH, rx: 10, fill: accentDarker }),
17550
17897
  /* @__PURE__ */ jsx("rect", { x, y: y + headerH - 8, width: boxW, height: 8, fill: accentDarker }),
17551
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: "PAY" }),
17898
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("paymentProvider.sign") }),
17552
17899
  /* @__PURE__ */ jsxs("g", { children: [
17553
17900
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 22, fill: "none", stroke: "#e5c07b", strokeWidth: 3.5, strokeDasharray: "38 24", strokeLinecap: "round", children: /* @__PURE__ */ jsx("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${cx} ${cy + 4}`, to: `360 ${cx} ${cy + 4}`, dur: "2s", repeatCount: "indefinite" }) }),
17554
17901
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
17555
17902
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
17556
17903
  ] }),
17557
- /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: "PROCESSING" }),
17904
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
17558
17905
  bottomLabel3(node, r.cx, r.label)
17559
17906
  ] });
17560
17907
  }
@@ -17602,7 +17949,8 @@ var BROKERAGE_SHADE_OUT = 2;
17602
17949
  var BROKERAGE_W_MIN = BROKERAGE_COLS * BROKERAGE_CELL_W + (BROKERAGE_COLS - 1) * BROKERAGE_GAP_X + 6;
17603
17950
  var BROKERAGE_W_MAX = 140;
17604
17951
  var BROKERAGE_H_MIN = BROKERAGE_TICK_H + BROKERAGE_LOGO_H + BROKERAGE_BASE_H;
17605
- function ShapeBrokerageNode({ node, active }) {
17952
+ function ShapeBrokerageNode({ node, active, lang }) {
17953
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17606
17954
  const frame = commonFrame5(active);
17607
17955
  const r = shapeRegion(node);
17608
17956
  const cx = r.cx;
@@ -17638,9 +17986,9 @@ function ShapeBrokerageNode({ node, active }) {
17638
17986
  /* @__PURE__ */ jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
17639
17987
  /* @__PURE__ */ jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
17640
17988
  /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
17641
- /* @__PURE__ */ 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" }),
17989
+ /* @__PURE__ */ 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") }),
17642
17990
  /* @__PURE__ */ jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
17643
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: "$ SECURITIES" }),
17991
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
17644
17992
  Array.from({ length: rows }).map(
17645
17993
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
17646
17994
  const wx = gridStartX + ci * (cellW + gapX);
@@ -17661,7 +18009,8 @@ function ShapeBrokerageNode({ node, active }) {
17661
18009
  bottomLabel3(node, r.cx, r.label)
17662
18010
  ] });
17663
18011
  }
17664
- function ShapeExchangeNode({ node, active }) {
18012
+ function ShapeExchangeNode({ node, active, lang }) {
18013
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17665
18014
  const frame = commonFrame5(active);
17666
18015
  const r = shapeRegion(node);
17667
18016
  const cx = r.cx;
@@ -17706,9 +18055,9 @@ function ShapeExchangeNode({ node, active }) {
17706
18055
  ] }, `d${i}`);
17707
18056
  }),
17708
18057
  /* @__PURE__ */ jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
17709
- /* @__PURE__ */ jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "EXCHANGE" }),
18058
+ /* @__PURE__ */ jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
17710
18059
  /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
17711
- /* @__PURE__ */ jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "clearing" }),
18060
+ /* @__PURE__ */ jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
17712
18061
  nodes.map((n, i) => /* @__PURE__ */ jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
17713
18062
  ] });
17714
18063
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -17730,7 +18079,8 @@ var ATM_PANEL_H = 146;
17730
18079
  var ATM_W_MIN = 100;
17731
18080
  var ATM_W_MAX = 140;
17732
18081
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
17733
- function ShapeAtmNode({ node, active }) {
18082
+ function ShapeAtmNode({ node, active, lang }) {
18083
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17734
18084
  const frame = commonFrame5(active);
17735
18085
  const r = shapeRegion(node);
17736
18086
  const cx = r.cx;
@@ -17764,12 +18114,12 @@ function ShapeAtmNode({ node, active }) {
17764
18114
  const \u7D75 = /* @__PURE__ */ jsxs("g", { children: [
17765
18115
  /* @__PURE__ */ 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" }),
17766
18116
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
17767
- /* @__PURE__ */ jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "ATM CORNER" }),
18117
+ /* @__PURE__ */ jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
17768
18118
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x: atmX, y: atmY, width: atmW, height: atmH, rx: 6, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
17769
18119
  /* @__PURE__ */ jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
17770
18120
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 10, width: ATM_PANEL_W - 16, height: 52, rx: 3, fill: "#0f1830", stroke: "#000", strokeWidth: 1.5 }),
17771
18121
  /* @__PURE__ */ jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
17772
- /* @__PURE__ */ jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "SELECT AMOUNT" }),
18122
+ /* @__PURE__ */ jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
17773
18123
  /* @__PURE__ */ jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
17774
18124
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 68, width: ATM_PANEL_W - 16, height: 42, rx: 2, fill: "#8b949e", stroke: "#5a6270", strokeWidth: 1 }),
17775
18125
  (() => {
@@ -17783,7 +18133,7 @@ function ShapeAtmNode({ node, active }) {
17783
18133
  ["5", "#5a6270"],
17784
18134
  ["6", "#5a6270"],
17785
18135
  ["0", "#5a6270"],
17786
- ["OK", "#4ea36a"]
18136
+ [\u5B57\u5F15("atm.ok"), "#4ea36a"]
17787
18137
  ];
17788
18138
  const keyW = 18;
17789
18139
  const keyH = 10;
@@ -17796,13 +18146,16 @@ function ShapeAtmNode({ node, active }) {
17796
18146
  const ky = 74 + row * (keyH + 2);
17797
18147
  return /* @__PURE__ */ jsxs("g", { children: [
17798
18148
  /* @__PURE__ */ jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
17799
- /* @__PURE__ */ jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: k[0] === "OK" ? 6 : 7, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
18149
+ /* @__PURE__ */ jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
18150
+ /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
18151
+ i === keys.length - 1 ? 6 : 7
18152
+ ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
17800
18153
  ] }, `k${i}`);
17801
18154
  });
17802
18155
  })(),
17803
18156
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 116, width: ATM_PANEL_W - 24, height: 8, rx: 1.5, fill: "#0f1830", stroke: accentDarker, strokeWidth: 1 }),
17804
18157
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
17805
- /* @__PURE__ */ jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "CARD SLOT" }),
18158
+ /* @__PURE__ */ jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
17806
18159
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
17807
18160
  ] }),
17808
18161
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -17887,7 +18240,8 @@ function ShapeWebsiteNode({ node, active }) {
17887
18240
  bottomLabel4(node, r.cx, r.label)
17888
18241
  ] });
17889
18242
  }
17890
- function ShapeStorefrontNode({ node, active }) {
18243
+ function ShapeStorefrontNode({ node, active, lang }) {
18244
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17891
18245
  const frame = commonFrame6(active);
17892
18246
  const r = shapeRegion(node);
17893
18247
  const cx = r.cx;
@@ -17913,7 +18267,7 @@ function ShapeStorefrontNode({ node, active }) {
17913
18267
  return /* @__PURE__ */ jsxs("g", { children: [
17914
18268
  /* @__PURE__ */ jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
17915
18269
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
17916
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: "SHOP" }),
18270
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("storefront.sign") }),
17917
18271
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y: facadeY, width: bw, height: facadeH, fill: "#e0e4e8", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
17918
18272
  /* @__PURE__ */ jsx("rect", { x: winX, y: winY, width: winW, height: winH, fill: "#a4c5d9", stroke: accentDarker, strokeWidth: 2 }),
17919
18273
  /* @__PURE__ */ jsx("line", { x1: winX + winW / 2, y1: winY, x2: winX + winW / 2, y2: winY + winH, stroke: accentDarker, strokeWidth: 1 }),
@@ -17927,7 +18281,7 @@ function ShapeStorefrontNode({ node, active }) {
17927
18281
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.38, x2: doorX + doorW - 4, y2: doorY + doorH * 0.38, stroke: accentDarker, strokeWidth: 1 }),
17928
18282
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.72, x2: doorX + doorW - 4, y2: doorY + doorH * 0.72, stroke: accentDarker, strokeWidth: 1 }),
17929
18283
  /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - 20, y: doorY + doorH * 0.85, width: 40, height: 12, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
17930
- /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: "OPEN" }),
18284
+ /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
17931
18285
  /* @__PURE__ */ jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
17932
18286
  /* @__PURE__ */ jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
17933
18287
  bottomLabel4(node, r.cx, r.label)
@@ -17944,7 +18298,8 @@ var WAREHOUSE_SHADOW_RX_RATIO = 0.5;
17944
18298
  var WAREHOUSE_H_MIN = WAREHOUSE_ROOF_H + WAREHOUSE_SIGN_H + 68;
17945
18299
  var WAREHOUSE_W_MIN = 160;
17946
18300
  var WAREHOUSE_W_MAX = 240;
17947
- function ShapeWarehouseNode({ node, active }) {
18301
+ function ShapeWarehouseNode({ node, active, lang }) {
18302
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
17948
18303
  const frame = commonFrame6(active);
17949
18304
  const r = shapeRegion(node);
17950
18305
  const cx = r.cx;
@@ -17973,7 +18328,7 @@ function ShapeWarehouseNode({ node, active }) {
17973
18328
  /* @__PURE__ */ 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" }),
17974
18329
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y: y + roofH, width: bw, height: bh - roofH - 12, fill: "#a89d8f", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
17975
18330
  /* @__PURE__ */ jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
17976
- /* @__PURE__ */ jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: "WAREHOUSE" }),
18331
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("warehouse.sign") }),
17977
18332
  /* @__PURE__ */ jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
17978
18333
  /* @__PURE__ */ jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
17979
18334
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsx(
@@ -18130,7 +18485,8 @@ var API_ROWS = 3;
18130
18485
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
18131
18486
  var API_W_MIN = 200;
18132
18487
  var API_W_MAX = 300;
18133
- function ShapeApiGatewayNode({ node, active }) {
18488
+ function ShapeApiGatewayNode({ node, active, lang }) {
18489
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
18134
18490
  const frame = commonFrame6(active);
18135
18491
  const r = shapeRegion(node);
18136
18492
  const cx = r.cx;
@@ -18141,6 +18497,7 @@ function ShapeApiGatewayNode({ node, active }) {
18141
18497
  const x = cx - bw / 2;
18142
18498
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
18143
18499
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
18500
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
18144
18501
  const rowPitch = Math.max(
18145
18502
  API_ROW_PITCH_MIN,
18146
18503
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
@@ -18149,15 +18506,15 @@ function ShapeApiGatewayNode({ node, active }) {
18149
18506
  /* @__PURE__ */ 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" }),
18150
18507
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
18151
18508
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
18152
- /* @__PURE__ */ 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" }),
18509
+ /* @__PURE__ */ 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") }),
18153
18510
  [
18154
- { method: "GET", path: "/users", color: "#27c93f" },
18155
- { method: "POST", path: "/orders", color: "#e5c07b" },
18156
- { method: "DEL", path: "/session", color: "#c9302c" }
18511
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
18512
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
18513
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
18157
18514
  ].map((e, i) => /* @__PURE__ */ jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
18158
18515
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
18159
18516
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
18160
- /* @__PURE__ */ jsx("text", { x: 27, y: 16, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
18517
+ /* @__PURE__ */ 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 }),
18161
18518
  /* @__PURE__ */ jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
18162
18519
  /* @__PURE__ */ jsx("circle", { cx: bw - 44, cy: 12, r: 4, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: `${1.2 + i * 0.3}s`, repeatCount: "indefinite" }) })
18163
18520
  ] }, i))
@@ -18462,7 +18819,8 @@ function CdlNodeView({
18462
18819
  stateValues,
18463
18820
  currentPhaseId,
18464
18821
  chartLineScale,
18465
- \u95A2\u4FC2\u306E\u53D7\u3051\u53E3
18822
+ \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
18823
+ lang
18466
18824
  }) {
18467
18825
  const value = node.value ? interpolate(node.value, stateValues) : void 0;
18468
18826
  const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
@@ -18678,11 +19036,11 @@ function CdlNodeView({
18678
19036
  case "shape-window":
18679
19037
  return /* @__PURE__ */ jsx(ShapeWindowNode, { node: resolvedNode, active });
18680
19038
  case "shape-terminal":
18681
- return /* @__PURE__ */ jsx(ShapeTerminalNode, { node: resolvedNode, active });
19039
+ return /* @__PURE__ */ jsx(ShapeTerminalNode, { node: resolvedNode, active, lang });
18682
19040
  case "shape-code-block":
18683
- return /* @__PURE__ */ jsx(ShapeCodeBlockNode, { node: resolvedNode, active });
19041
+ return /* @__PURE__ */ jsx(ShapeCodeBlockNode, { node: resolvedNode, active, lang });
18684
19042
  case "shape-kanban-card":
18685
- return /* @__PURE__ */ jsx(ShapeKanbanCardNode, { node: resolvedNode, active });
19043
+ return /* @__PURE__ */ jsx(ShapeKanbanCardNode, { node: resolvedNode, active, lang });
18686
19044
  case "shape-message-bubble":
18687
19045
  return /* @__PURE__ */ jsx(ShapeMessageBubbleNode, { node: resolvedNode, active });
18688
19046
  case "shape-gear":
@@ -18700,11 +19058,11 @@ function CdlNodeView({
18700
19058
  case "shape-satellite":
18701
19059
  return /* @__PURE__ */ jsx(ShapeSatelliteNode, { node: resolvedNode, active });
18702
19060
  case "shape-smart-contract":
18703
- return /* @__PURE__ */ jsx(ShapeSmartContractNode, { node: resolvedNode, active });
19061
+ return /* @__PURE__ */ jsx(ShapeSmartContractNode, { node: resolvedNode, active, lang });
18704
19062
  case "shape-blockchain-block":
18705
- return /* @__PURE__ */ jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active });
19063
+ return /* @__PURE__ */ jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active, lang });
18706
19064
  case "shape-rpc-node":
18707
- return /* @__PURE__ */ jsx(ShapeRpcNodeNode, { node: resolvedNode, active });
19065
+ return /* @__PURE__ */ jsx(ShapeRpcNodeNode, { node: resolvedNode, active, lang });
18708
19066
  case "shape-wallet":
18709
19067
  return /* @__PURE__ */ jsx(ShapeWalletNode, { node: resolvedNode, active });
18710
19068
  case "shape-nft":
@@ -18722,29 +19080,29 @@ function CdlNodeView({
18722
19080
  case "shape-bank":
18723
19081
  return /* @__PURE__ */ jsx(ShapeBankNode, { node: resolvedNode, active });
18724
19082
  case "shape-trust-bank":
18725
- return /* @__PURE__ */ jsx(ShapeTrustBankNode, { node: resolvedNode, active });
19083
+ return /* @__PURE__ */ jsx(ShapeTrustBankNode, { node: resolvedNode, active, lang });
18726
19084
  case "shape-payment-provider":
18727
- return /* @__PURE__ */ jsx(ShapePaymentProviderNode, { node: resolvedNode, active });
19085
+ return /* @__PURE__ */ jsx(ShapePaymentProviderNode, { node: resolvedNode, active, lang });
18728
19086
  case "shape-credit-card":
18729
19087
  return /* @__PURE__ */ jsx(ShapeCreditCardNode, { node: resolvedNode, active });
18730
19088
  case "shape-brokerage":
18731
- return /* @__PURE__ */ jsx(ShapeBrokerageNode, { node: resolvedNode, active });
19089
+ return /* @__PURE__ */ jsx(ShapeBrokerageNode, { node: resolvedNode, active, lang });
18732
19090
  case "shape-exchange":
18733
- return /* @__PURE__ */ jsx(ShapeExchangeNode, { node: resolvedNode, active });
19091
+ return /* @__PURE__ */ jsx(ShapeExchangeNode, { node: resolvedNode, active, lang });
18734
19092
  case "shape-atm":
18735
- return /* @__PURE__ */ jsx(ShapeAtmNode, { node: resolvedNode, active });
19093
+ return /* @__PURE__ */ jsx(ShapeAtmNode, { node: resolvedNode, active, lang });
18736
19094
  case "shape-website":
18737
19095
  return /* @__PURE__ */ jsx(ShapeWebsiteNode, { node: resolvedNode, active });
18738
19096
  case "shape-storefront":
18739
- return /* @__PURE__ */ jsx(ShapeStorefrontNode, { node: resolvedNode, active });
19097
+ return /* @__PURE__ */ jsx(ShapeStorefrontNode, { node: resolvedNode, active, lang });
18740
19098
  case "shape-warehouse":
18741
- return /* @__PURE__ */ jsx(ShapeWarehouseNode, { node: resolvedNode, active });
19099
+ return /* @__PURE__ */ jsx(ShapeWarehouseNode, { node: resolvedNode, active, lang });
18742
19100
  case "shape-online-shop":
18743
19101
  return /* @__PURE__ */ jsx(ShapeOnlineShopNode, { node: resolvedNode, active });
18744
19102
  case "shape-cdn-edge":
18745
19103
  return /* @__PURE__ */ jsx(ShapeCdnEdgeNode, { node: resolvedNode, active });
18746
19104
  case "shape-api-gateway":
18747
- return /* @__PURE__ */ jsx(ShapeApiGatewayNode, { node: resolvedNode, active });
19105
+ return /* @__PURE__ */ jsx(ShapeApiGatewayNode, { node: resolvedNode, active, lang });
18748
19106
  case "shape-auditor":
18749
19107
  return /* @__PURE__ */ jsx(ShapeAuditorNode, { node: resolvedNode, active });
18750
19108
  case "shape-regulator":
@@ -19119,6 +19477,7 @@ function CdlStage({
19119
19477
  {
19120
19478
  node,
19121
19479
  active: activeSet.has(node.id),
19480
+ lang: laid.lang,
19122
19481
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3: \u7BB1\u306E\u53D7\u3051\u53E3,
19123
19482
  drawing: \u63CF\u304F,
19124
19483
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
@@ -19861,6 +20220,23 @@ function warn(message) {
19861
20220
  console.warn(`[cdl event-handler] ${message}`);
19862
20221
  }
19863
20222
  }
20223
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = createContext("en");
20224
+ function use\u5B57\u5F15() {
20225
+ const lang = useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
20226
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
20227
+ }
20228
+ function \u5B57({ k, v }) {
20229
+ const \u5F15\u304F = use\u5B57\u5F15();
20230
+ return /* @__PURE__ */ jsx(Fragment, { children: \u5F15\u304F(k, v) });
20231
+ }
20232
+ function \u5B57\u306E\u898B\u51FA\u3057({
20233
+ k,
20234
+ v,
20235
+ \u524D = ""
20236
+ }) {
20237
+ const \u5F15\u304F = use\u5B57\u5F15();
20238
+ return /* @__PURE__ */ jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
20239
+ }
19864
20240
  function createInteractiveSignalsAccessor(diagram, signals, formula, scroll) {
19865
20241
  const kindByInputId = /* @__PURE__ */ new Map();
19866
20242
  for (const inp of diagram.inputs ?? []) {
@@ -20175,20 +20551,23 @@ function useInteractiveIntegration(diagram, options = {}) {
20175
20551
  const readouts = diagram.readouts ?? [];
20176
20552
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
20177
20553
  return null;
20178
- return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20179
- inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
20180
- formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
20181
- FormulaReadout,
20182
- {
20183
- id: f.id,
20184
- expression: f.expression,
20185
- value: stateOverrides[f.id]
20186
- },
20187
- f.id
20188
- )) }),
20189
- scrolls.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
20190
- readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
20191
- ] });
20554
+ return (
20555
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
20556
+ /* @__PURE__ */ jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram.lang), children: /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20557
+ inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
20558
+ formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
20559
+ FormulaReadout,
20560
+ {
20561
+ id: f.id,
20562
+ expression: f.expression,
20563
+ value: stateOverrides[f.id]
20564
+ },
20565
+ f.id
20566
+ )) }),
20567
+ scrolls.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
20568
+ readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
20569
+ ] }) })
20570
+ );
20192
20571
  }, [diagram, signals, stateOverrides, mergedStateValues]);
20193
20572
  return { stateOverrides, panel, svgRef, containerRef };
20194
20573
  }
@@ -22049,7 +22428,7 @@ function SparklineReadout({
22049
22428
  if (points.length < 2) {
22050
22429
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
22051
22430
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22052
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
22431
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? /* @__PURE__ */ jsx(\u5B57, { k: "readout.sparkline.waiting" }) : "\u2014" }),
22053
22432
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
22054
22433
  ] });
22055
22434
  }
@@ -22312,27 +22691,24 @@ function TimelineWidget({
22312
22691
  className: "cdl-ip-timeline-scrubber"
22313
22692
  }
22314
22693
  ),
22315
- /* @__PURE__ */ jsxs(
22694
+ /* @__PURE__ */ jsx(
22316
22695
  "button",
22317
22696
  {
22318
22697
  type: "button",
22319
22698
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
22320
22699
  onClick: cycleSpeed,
22321
22700
  "aria-label": "speed",
22322
- children: [
22323
- speed,
22324
- "x"
22325
- ]
22701
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
22326
22702
  }
22327
22703
  )
22328
22704
  ] }),
22329
- /* @__PURE__ */ jsxs("span", { className: "cdl-ip-timeline-time", children: [
22330
- (progress * (input.duration / 1e3)).toFixed(1),
22331
- "s /",
22332
- " ",
22333
- (input.duration / 1e3).toFixed(1),
22334
- "s"
22335
- ] })
22705
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsx(
22706
+ \u5B57,
22707
+ {
22708
+ k: "input.timeline.time",
22709
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
22710
+ }
22711
+ ) })
22336
22712
  ] });
22337
22713
  }
22338
22714
  function RangeWidget({
@@ -22570,7 +22946,7 @@ function ArrayBarReadout({
22570
22946
  const range = max - min || 1;
22571
22947
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
22572
22948
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22573
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : arr.map((v, i) => {
22949
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : arr.map((v, i) => {
22574
22950
  const h = Math.max(0, Math.min(1, (v - min) / range));
22575
22951
  return /* @__PURE__ */ jsx(
22576
22952
  "span",
@@ -22647,7 +23023,7 @@ function StackedBarReadout({
22647
23023
  const range = max - min || 1;
22648
23024
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
22649
23025
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22650
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : Array.from({ length: n }).map((_, i) => {
23026
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : Array.from({ length: n }).map((_, i) => {
22651
23027
  const va = arrA[i] ?? 0;
22652
23028
  const vb = arrB[i] ?? 0;
22653
23029
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -22742,7 +23118,7 @@ function MatrixReadout({
22742
23118
  };
22743
23119
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
22744
23120
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22745
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx(
23121
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx(
22746
23122
  "svg",
22747
23123
  {
22748
23124
  className: "cdl-ip-readout-matrix-svg",
@@ -22800,7 +23176,7 @@ function ProgressGroupReadout({
22800
23176
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
22801
23177
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
22802
23178
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22803
- arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
23179
+ arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
22804
23180
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
22805
23181
  const rowLabel = labelArr[i] ?? String(i + 1);
22806
23182
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -22862,7 +23238,7 @@ function SequenceTimelineReadout({
22862
23238
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
22863
23239
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
22864
23240
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22865
- events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(
23241
+ events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(
22866
23242
  "svg",
22867
23243
  {
22868
23244
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -22876,7 +23252,7 @@ function SequenceTimelineReadout({
22876
23252
  events.map((e, i) => {
22877
23253
  const x = xFor(e.t);
22878
23254
  return /* @__PURE__ */ jsxs("g", { "data-cdl-event-marker": e.name, children: [
22879
- /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `${e.name}: t=${e.t}` }) }),
23255
+ /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.sequenceTimeline.title", v: { name: e.name, t: e.t } }) }),
22880
23256
  /* @__PURE__ */ jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
22881
23257
  /* @__PURE__ */ jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
22882
23258
  ] }, i);
@@ -22919,7 +23295,7 @@ function RadarReadout({
22919
23295
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
22920
23296
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
22921
23297
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22922
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23298
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
22923
23299
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx(
22924
23300
  "polygon",
22925
23301
  {
@@ -22981,14 +23357,14 @@ function BubbleChartReadout({
22981
23357
  const maxCircleR = 18;
22982
23358
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
22983
23359
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22984
- bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23360
+ bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
22985
23361
  /* @__PURE__ */ jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
22986
23362
  /* @__PURE__ */ jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
22987
23363
  bubbles.map((b, i) => {
22988
23364
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
22989
23365
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
22990
23366
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
22991
- return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `(${b.x}, ${b.y}) r=${b.r}` }) }, i);
23367
+ return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bubbleChart.title", v: { x: b.x, y: b.y, r: b.r } }) }, i);
22992
23368
  })
22993
23369
  ] })
22994
23370
  ] });
@@ -23011,7 +23387,7 @@ function DonutReadout({
23011
23387
  let acc = 0;
23012
23388
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
23013
23389
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23014
- arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
23390
+ arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
23015
23391
  const from = acc;
23016
23392
  const to = acc + v / total;
23017
23393
  acc = to;
@@ -23072,7 +23448,7 @@ function CalendarHeatmapReadout({
23072
23448
  height: cellSize,
23073
23449
  rx: 2,
23074
23450
  fill,
23075
- children: /* @__PURE__ */ jsx("title", { children: `day ${i}: ${v}` })
23451
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
23076
23452
  },
23077
23453
  i
23078
23454
  );
@@ -23192,7 +23568,7 @@ function CandlestickReadout({
23192
23568
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
23193
23569
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
23194
23570
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23195
- candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
23571
+ candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
23196
23572
  const cx = pad + i * (candleW + 3) + candleW / 2;
23197
23573
  const yHigh = yFor(cd.h);
23198
23574
  const yLow = yFor(cd.l);
@@ -23213,7 +23589,7 @@ function CandlestickReadout({
23213
23589
  height: bodyH,
23214
23590
  fill: isUp ? color : color,
23215
23591
  fillOpacity: isUp ? 1 : 0.85,
23216
- children: /* @__PURE__ */ jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
23592
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.candlestick.title", v: { o: cd.o, h: cd.h, l: cd.l, c: cd.c } })
23217
23593
  }
23218
23594
  )
23219
23595
  ] }, i);
@@ -23247,7 +23623,7 @@ function VennReadout({
23247
23623
  const cxB = viewW / 2 + gap / 2;
23248
23624
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
23249
23625
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23250
- sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23626
+ sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23251
23627
  /* @__PURE__ */ jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
23252
23628
  /* @__PURE__ */ jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
23253
23629
  /* @__PURE__ */ jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -23298,11 +23674,11 @@ function SlopeReadout({
23298
23674
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
23299
23675
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
23300
23676
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23301
- slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23677
+ slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23302
23678
  /* @__PURE__ */ jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23303
23679
  /* @__PURE__ */ jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23304
- /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
23305
- /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
23680
+ /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.before" }) }),
23681
+ /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.after" }) }),
23306
23682
  slopes.map((s, i) => {
23307
23683
  const yB = yFor(s.before);
23308
23684
  const yA = yFor(s.after);
@@ -23349,7 +23725,7 @@ function FunnelReadout({
23349
23725
  const [bR, bG, bB] = hexToRgb2(colorBottom);
23350
23726
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
23351
23727
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23352
- stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
23728
+ stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
23353
23729
  const ratio = i / Math.max(1, stages.length - 1);
23354
23730
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
23355
23731
  const yTop = i * stageH + 2;
@@ -23411,7 +23787,7 @@ function GanttReadout({
23411
23787
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
23412
23788
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
23413
23789
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23414
- tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
23790
+ tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
23415
23791
  const y = pad + i * rowH;
23416
23792
  const x1 = xFor(t.start);
23417
23793
  const x2 = xFor(t.start + t.duration);
@@ -23502,7 +23878,7 @@ function TreemapReadout({
23502
23878
  }
23503
23879
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
23504
23880
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23505
- rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
23881
+ rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
23506
23882
  /* @__PURE__ */ 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__ */ jsx("title", { children: `${r.name}: ${r.size}` }) }),
23507
23883
  r.w > 40 && r.h > 20 ? /* @__PURE__ */ jsx("text", { x: r.x + 6, y: r.y + 14, fontSize: 10, fill: "#fff", fontWeight: 600, children: r.name }) : null
23508
23884
  ] }, i)) })
@@ -23568,7 +23944,7 @@ function SankeyReadout({
23568
23944
  const rightUsed = {};
23569
23945
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
23570
23946
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23571
- flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23947
+ flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23572
23948
  leftNodes.map((n, i) => {
23573
23949
  const p = leftPos[n.name];
23574
23950
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -23630,7 +24006,7 @@ function PolarAreaReadout({
23630
24006
  const maxR = Math.min(cx, cy) - 20;
23631
24007
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
23632
24008
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23633
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24009
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23634
24010
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx("circle", { cx, cy, r: maxR * t, fill: "none", stroke: "rgba(148,163,184,0.2)", strokeWidth: 1 }, t)),
23635
24011
  arr.map((v, i) => {
23636
24012
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -23676,7 +24052,7 @@ function StepIndicatorReadout({
23676
24052
  const cy = viewH / 2 - 2;
23677
24053
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
23678
24054
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23679
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24055
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23680
24056
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
23681
24057
  const x1 = pad + i * step;
23682
24058
  const x2 = pad + (i + 1) * step;
@@ -23766,8 +24142,8 @@ function BulletChartReadout({
23766
24142
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
23767
24143
  /* @__PURE__ */ jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
23768
24144
  /* @__PURE__ */ jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
23769
- /* @__PURE__ */ jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsx("title", { children: `actual: ${safeActual}` }) }),
23770
- /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx("title", { children: `target: ${safeTarget}` }) })
24145
+ /* @__PURE__ */ jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.actual", v: { v: safeActual } }) }),
24146
+ /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.target", v: { v: safeTarget } }) })
23771
24147
  ] })
23772
24148
  ] });
23773
24149
  }
@@ -23822,7 +24198,7 @@ function LeaderboardReadout({
23822
24198
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
23823
24199
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
23824
24200
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23825
- sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
24201
+ sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
23826
24202
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
23827
24203
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
23828
24204
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -23873,7 +24249,7 @@ function TrafficLightReadout({
23873
24249
  style: {
23874
24250
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
23875
24251
  },
23876
- children: /* @__PURE__ */ jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
24252
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
23877
24253
  },
23878
24254
  i
23879
24255
  );
@@ -23912,7 +24288,7 @@ function TagCloudReadout({
23912
24288
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
23913
24289
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
23914
24290
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23915
- tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
24291
+ tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
23916
24292
  "span",
23917
24293
  {
23918
24294
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -23949,7 +24325,7 @@ function ActivityFeedReadout({
23949
24325
  const shown = events.slice(0, max);
23950
24326
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
23951
24327
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23952
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
24328
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
23953
24329
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
23954
24330
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
23955
24331
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -24000,7 +24376,7 @@ function RatingReadout({
24000
24376
  strokeWidth: 1
24001
24377
  }
24002
24378
  ),
24003
- isEmpty ? /* @__PURE__ */ jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
24379
+ isEmpty ? /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: "readout.rating.empty" }) : /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: isFull ? "readout.rating.full" : "readout.rating.half" })
24004
24380
  ]
24005
24381
  },
24006
24382
  i
@@ -24096,7 +24472,7 @@ function ChatBubbleReadout({
24096
24472
  const shown = messages.slice(0, max);
24097
24473
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
24098
24474
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24099
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
24475
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
24100
24476
  "li",
24101
24477
  {
24102
24478
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -24188,7 +24564,7 @@ function ChecklistReadout({
24188
24564
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
24189
24565
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
24190
24566
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24191
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
24567
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
24192
24568
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
24193
24569
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
24194
24570
  done,
@@ -24299,11 +24675,7 @@ function PriceTagReadout({
24299
24675
  "%"
24300
24676
  ] }) : null
24301
24677
  ] }),
24302
- savings > 0 ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
24303
- "You save ",
24304
- currency,
24305
- savings
24306
- ] }) : null
24678
+ savings > 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-price-tag-savings", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.priceTag.save", v: { amount: `${currency}${savings}` } }) }) : null
24307
24679
  ] });
24308
24680
  }
24309
24681
  function SpinnerReadout({
@@ -24440,6 +24812,11 @@ function StopwatchReadout({
24440
24812
  }
24441
24813
  );
24442
24814
  }
24815
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
24816
+ low: "readout.confidence.low",
24817
+ mid: "readout.confidence.mid",
24818
+ high: "readout.confidence.high"
24819
+ };
24443
24820
  function ConfidenceMeterReadout({
24444
24821
  id,
24445
24822
  label,
@@ -24472,7 +24849,7 @@ function ConfidenceMeterReadout({
24472
24849
  Math.round(safeValue),
24473
24850
  "%"
24474
24851
  ] }),
24475
- /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
24852
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: /* @__PURE__ */ jsx(\u5B57, { k: \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57[bandLabel] }) })
24476
24853
  ] }),
24477
24854
  /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24478
24855
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -24507,7 +24884,7 @@ function ReactionBarReadout({
24507
24884
  }
24508
24885
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
24509
24886
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24510
- reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
24887
+ reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
24511
24888
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
24512
24889
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
24513
24890
  ] }, i)) })
@@ -24540,7 +24917,7 @@ function PillGroupReadout({
24540
24917
  }
24541
24918
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
24542
24919
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24543
- pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
24920
+ pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
24544
24921
  "span",
24545
24922
  {
24546
24923
  className: "cdl-ip-readout-pill-group-pill",
@@ -24628,7 +25005,7 @@ function MetricsGridReadout({
24628
25005
  }
24629
25006
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
24630
25007
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24631
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
25008
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
24632
25009
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
24633
25010
  m.value,
24634
25011
  m.unit ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -24715,7 +25092,7 @@ function IconTileReadout({
24715
25092
  }
24716
25093
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
24717
25094
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24718
- tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
25095
+ tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
24719
25096
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
24720
25097
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
24721
25098
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -24756,7 +25133,7 @@ function TokenListReadout({
24756
25133
  }
24757
25134
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
24758
25135
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24759
- tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
25136
+ tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
24760
25137
  const isUp = t.delta >= 0;
24761
25138
  const deltaColor = isUp ? colorUp : colorDown;
24762
25139
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -24810,7 +25187,7 @@ function MapPinReadout({
24810
25187
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
24811
25188
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
24812
25189
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24813
- pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
25190
+ pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24814
25191
  /* @__PURE__ */ 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 }),
24815
25192
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxs("g", { children: [
24816
25193
  /* @__PURE__ */ 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)" }),
@@ -24838,9 +25215,9 @@ function PriorityBadgeReadout({
24838
25215
  if (p === "high" || p === "2") level = "high";
24839
25216
  else if (p === "low" || p === "0") level = "low";
24840
25217
  const spec = {
24841
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
24842
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
24843
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
25218
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
25219
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
25220
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
24844
25221
  };
24845
25222
  const cur = spec[level];
24846
25223
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -24853,7 +25230,7 @@ function PriorityBadgeReadout({
24853
25230
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
24854
25231
  children: [
24855
25232
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
24856
- /* @__PURE__ */ jsx("span", { children: cur.text })
25233
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(\u5B57, { k: cur.text }) })
24857
25234
  ]
24858
25235
  }
24859
25236
  ),
@@ -24892,7 +25269,7 @@ function PodiumReadout({
24892
25269
  const order = [1, 0, 2];
24893
25270
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
24894
25271
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24895
- podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
25272
+ podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
24896
25273
  const w = podium[rankIdx];
24897
25274
  if (!w) return null;
24898
25275
  const x = pad + colIdx * (colW + pad);
@@ -24935,7 +25312,7 @@ function PollBarReadout({
24935
25312
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
24936
25313
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
24937
25314
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24938
- options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
25315
+ options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
24939
25316
  const pct = Math.round(o.count / total * 100);
24940
25317
  const isWinner = o.count === maxCount && maxCount > 0;
24941
25318
  const fillColor = isWinner ? colorWinner : color;
@@ -24970,6 +25347,7 @@ function UserStackReadout({
24970
25347
  max,
24971
25348
  size
24972
25349
  }) {
25350
+ const \u5F15\u304F = use\u5B57\u5F15();
24973
25351
  const names = safeParseArray(value).map(String);
24974
25352
  const shown = names.slice(0, max);
24975
25353
  const overflow = names.length > max;
@@ -24978,7 +25356,7 @@ function UserStackReadout({
24978
25356
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
24979
25357
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
24980
25358
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24981
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
25359
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
24982
25360
  shown.map((name, i) => /* @__PURE__ */ jsx(
24983
25361
  "span",
24984
25362
  {
@@ -25006,7 +25384,7 @@ function UserStackReadout({
25006
25384
  fontSize: `${Math.round(size * 0.35)}px`,
25007
25385
  marginLeft: `-${size * 0.3}px`
25008
25386
  },
25009
- title: `+${overflowCount} more`,
25387
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
25010
25388
  children: [
25011
25389
  "+",
25012
25390
  overflowCount
@@ -25041,7 +25419,7 @@ function CommitListReadout({
25041
25419
  const shown = commits.slice(0, max);
25042
25420
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
25043
25421
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25044
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
25422
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
25045
25423
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
25046
25424
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
25047
25425
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -25121,7 +25499,7 @@ function EventLogReadout({
25121
25499
  };
25122
25500
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
25123
25501
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25124
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
25502
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
25125
25503
  const spec = severitySpec[e.severity] ?? severitySpec.info;
25126
25504
  return /* @__PURE__ */ jsxs(
25127
25505
  "li",
@@ -25164,7 +25542,7 @@ function SearchResultReadout({
25164
25542
  const shown = hits.slice(0, max);
25165
25543
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
25166
25544
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25167
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
25545
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
25168
25546
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
25169
25547
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
25170
25548
  h.url ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -25197,7 +25575,7 @@ function RoadmapReadout({
25197
25575
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
25198
25576
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
25199
25577
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25200
- quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
25578
+ quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
25201
25579
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
25202
25580
  /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-roadmap-items", children: q.items.map((it, j) => /* @__PURE__ */ jsx("li", { className: "cdl-ip-readout-roadmap-item", children: it }, j)) })
25203
25581
  ] }, i)) })
@@ -25229,7 +25607,7 @@ function WeatherForecastReadout({
25229
25607
  }
25230
25608
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
25231
25609
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25232
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
25610
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
25233
25611
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
25234
25612
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
25235
25613
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -25273,17 +25651,14 @@ function VideoCardReadout({
25273
25651
  const shown = videos.slice(0, max);
25274
25652
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
25275
25653
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25276
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
25654
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
25277
25655
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
25278
25656
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
25279
25657
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
25280
25658
  ] }),
25281
25659
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
25282
25660
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
25283
- /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
25284
- v.views,
25285
- " views"
25286
- ] })
25661
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
25287
25662
  ] })
25288
25663
  ] }, i)) })
25289
25664
  ] });
@@ -25300,7 +25675,7 @@ function OrderStatusReadout({
25300
25675
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
25301
25676
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
25302
25677
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25303
- stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
25678
+ stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
25304
25679
  const isDone = i < safeCurrent;
25305
25680
  const isCurrent = i === safeCurrent;
25306
25681
  const isPending = i > safeCurrent;
@@ -25350,9 +25725,9 @@ function AttendanceGridReadout({
25350
25725
  const memberArr = safeParseArray(members).map(String);
25351
25726
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
25352
25727
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25353
- rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
25728
+ rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
25354
25729
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
25355
- /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
25730
+ /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.attendance.corner" }) }),
25356
25731
  memberArr.map((m, i) => /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
25357
25732
  ] }) }),
25358
25733
  /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { children: [
@@ -25406,7 +25781,7 @@ function TimezoneClockReadout({
25406
25781
  }
25407
25782
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
25408
25783
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25409
- clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
25784
+ clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
25410
25785
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
25411
25786
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
25412
25787
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -25440,7 +25815,7 @@ function FormSummaryReadout({
25440
25815
  }
25441
25816
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
25442
25817
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25443
- fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
25818
+ fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
25444
25819
  /* @__PURE__ */ jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
25445
25820
  /* @__PURE__ */ jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
25446
25821
  ] }, i)) })
@@ -25473,7 +25848,7 @@ function SongQueueReadout({
25473
25848
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
25474
25849
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
25475
25850
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25476
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
25851
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
25477
25852
  const isCurrent = i === safeCurrent;
25478
25853
  return /* @__PURE__ */ jsxs(
25479
25854
  "li",
@@ -25518,12 +25893,20 @@ function CalendarMonthReadout({
25518
25893
  } catch {
25519
25894
  }
25520
25895
  }
25521
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
25896
+ const weekDays = [
25897
+ "readout.weekday.0",
25898
+ "readout.weekday.1",
25899
+ "readout.weekday.2",
25900
+ "readout.weekday.3",
25901
+ "readout.weekday.4",
25902
+ "readout.weekday.5",
25903
+ "readout.weekday.6"
25904
+ ];
25522
25905
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
25523
25906
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25524
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
25907
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
25525
25908
  monthName ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
25526
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: w }, w)) }),
25909
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: /* @__PURE__ */ jsx(\u5B57, { k: w }) }, w)) }),
25527
25910
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxs(
25528
25911
  "div",
25529
25912
  {
@@ -25566,7 +25949,7 @@ function TerminalReadout({
25566
25949
  const shown = lines.slice(0, max);
25567
25950
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
25568
25951
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25569
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
25952
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
25570
25953
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
25571
25954
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
25572
25955
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -25665,10 +26048,11 @@ function KanbanBoardReadout({
25665
26048
  columnWidth,
25666
26049
  max
25667
26050
  }) {
26051
+ const \u5F15\u304F = use\u5B57\u5F15();
25668
26052
  const buckets = {
25669
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
25670
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
25671
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
26053
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
26054
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
26055
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
25672
26056
  };
25673
26057
  const trimmed = value.trim();
25674
26058
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -25785,7 +26169,7 @@ function KanbanBoardReadout({
25785
26169
  )
25786
26170
  ] }, ti);
25787
26171
  }),
25788
- overflow > 0 ? /* @__PURE__ */ jsxs(
26172
+ overflow > 0 ? /* @__PURE__ */ jsx(
25789
26173
  "text",
25790
26174
  {
25791
26175
  x: x + columnWidth / 2,
@@ -25794,11 +26178,7 @@ function KanbanBoardReadout({
25794
26178
  textAnchor: "middle",
25795
26179
  fill: "#64748b",
25796
26180
  style: { userSelect: "none" },
25797
- children: [
25798
- "+",
25799
- overflow,
25800
- " more"
25801
- ]
26181
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
25802
26182
  }
25803
26183
  ) : null
25804
26184
  ] }, k);
@@ -26355,7 +26735,7 @@ function UserPresenceReadout({
26355
26735
  )
26356
26736
  ] }, i);
26357
26737
  }),
26358
- overflow > 0 ? /* @__PURE__ */ jsxs(
26738
+ overflow > 0 ? /* @__PURE__ */ jsx(
26359
26739
  "text",
26360
26740
  {
26361
26741
  x: width / 2,
@@ -26364,11 +26744,7 @@ function UserPresenceReadout({
26364
26744
  textAnchor: "middle",
26365
26745
  fill: "#64748b",
26366
26746
  style: { userSelect: "none" },
26367
- children: [
26368
- "+",
26369
- overflow,
26370
- " more"
26371
- ]
26747
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
26372
26748
  }
26373
26749
  ) : null
26374
26750
  ]
@@ -26419,12 +26795,7 @@ function RatingThumbReadout({
26419
26795
  "\u25B2 ",
26420
26796
  upCount
26421
26797
  ] }),
26422
- /* @__PURE__ */ jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
26423
- upPct,
26424
- "% up \xB7 ",
26425
- total,
26426
- " votes"
26427
- ] }),
26798
+ /* @__PURE__ */ jsx("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.ratingThumb.summary", v: { pct: upPct, total } }) }),
26428
26799
  /* @__PURE__ */ jsxs(
26429
26800
  "text",
26430
26801
  {
@@ -26599,11 +26970,7 @@ function KpiTrendTileReadout({
26599
26970
  deltaPct.toFixed(1),
26600
26971
  "%)"
26601
26972
  ] }),
26602
- /* @__PURE__ */ jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
26603
- "prev ",
26604
- prev,
26605
- unit
26606
- ] }),
26973
+ /* @__PURE__ */ jsx("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.kpiTrend.prev", v: { v: `${prev}${unit}` } }) }),
26607
26974
  history.length > 1 ? /* @__PURE__ */ jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
26608
26975
  ]
26609
26976
  }
@@ -26691,7 +27058,7 @@ function QuickPollEmojiReadout({
26691
27058
  )
26692
27059
  ] }, i);
26693
27060
  }),
26694
- /* @__PURE__ */ jsxs(
27061
+ /* @__PURE__ */ jsx(
26695
27062
  "text",
26696
27063
  {
26697
27064
  x: width - 8,
@@ -26700,10 +27067,7 @@ function QuickPollEmojiReadout({
26700
27067
  textAnchor: "end",
26701
27068
  fill: "#64748b",
26702
27069
  style: { userSelect: "none" },
26703
- children: [
26704
- "total ",
26705
- total
26706
- ]
27070
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
26707
27071
  }
26708
27072
  )
26709
27073
  ]
@@ -26838,14 +27202,8 @@ function ThreadSummaryReadout({
26838
27202
  height,
26839
27203
  children: [
26840
27204
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
26841
- /* @__PURE__ */ jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
26842
- participants,
26843
- " participants"
26844
- ] }),
26845
- /* @__PURE__ */ jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
26846
- "last: ",
26847
- lastAuthor
26848
- ] }),
27205
+ /* @__PURE__ */ jsx("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.participants", v: { n: participants } }) }),
27206
+ /* @__PURE__ */ jsx("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.last", v: { name: lastAuthor } }) }),
26849
27207
  /* @__PURE__ */ jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
26850
27208
  unread > 0 ? /* @__PURE__ */ jsxs("g", { "data-cdl-thread-unread": "1", children: [
26851
27209
  /* @__PURE__ */ jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -26876,7 +27234,7 @@ function ReadReceiptReadout({
26876
27234
  colorPending
26877
27235
  }) {
26878
27236
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
26879
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
27237
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
26880
27238
  const iconColor = status === 2 ? colorRead : colorPending;
26881
27239
  const width = 180;
26882
27240
  const height = 32;
@@ -26911,7 +27269,7 @@ function ReadReceiptReadout({
26911
27269
  }
26912
27270
  ) : null
26913
27271
  ] }),
26914
- /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
27272
+ /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: labelKey }) })
26915
27273
  ]
26916
27274
  }
26917
27275
  )
@@ -26925,7 +27283,7 @@ function PasswordStrengthReadout({
26925
27283
  colorWeak
26926
27284
  }) {
26927
27285
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
26928
- const labels = ["too weak", "weak", "fair", "good", "strong"];
27286
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
26929
27287
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
26930
27288
  const barW = 46;
26931
27289
  const gap = 6;
@@ -26969,7 +27327,7 @@ function PasswordStrengthReadout({
26969
27327
  textAnchor: "end",
26970
27328
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
26971
27329
  style: { userSelect: "none" },
26972
- children: labels[level]
27330
+ children: /* @__PURE__ */ jsx(\u5B57, { k: labels[level] })
26973
27331
  }
26974
27332
  )
26975
27333
  ]
@@ -27104,7 +27462,7 @@ function FileDropzoneReadout({
27104
27462
  /* @__PURE__ */ jsx("title", { children: filename }),
27105
27463
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
27106
27464
  ] }),
27107
- /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
27465
+ /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
27108
27466
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
27109
27467
  /* @__PURE__ */ jsx(
27110
27468
  "text",
@@ -27116,7 +27474,7 @@ function FileDropzoneReadout({
27116
27474
  textAnchor: "middle",
27117
27475
  fill: "#64748b",
27118
27476
  style: { userSelect: "none" },
27119
- children: "\u2B06 Drop file here"
27477
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.drop" })
27120
27478
  }
27121
27479
  ),
27122
27480
  /* @__PURE__ */ jsx(
@@ -27128,7 +27486,7 @@ function FileDropzoneReadout({
27128
27486
  textAnchor: "middle",
27129
27487
  fill: "#94a3b8",
27130
27488
  style: { userSelect: "none" },
27131
- children: "or click to browse"
27489
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.browse" })
27132
27490
  }
27133
27491
  )
27134
27492
  ] })
@@ -27163,7 +27521,7 @@ function LogStreamReadout({
27163
27521
  }
27164
27522
  }
27165
27523
  const shown = rows.slice(-5);
27166
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
27524
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
27167
27525
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
27168
27526
  const width = 300;
27169
27527
  const rowH = 18;
@@ -27196,7 +27554,7 @@ function LogStreamReadout({
27196
27554
  fill: "#ffffff",
27197
27555
  fontFamily: "monospace",
27198
27556
  style: { userSelect: "none" },
27199
- children: levelLabels[r.level] ?? "INF"
27557
+ children: /* @__PURE__ */ jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
27200
27558
  }
27201
27559
  ),
27202
27560
  /* @__PURE__ */ jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -27390,10 +27748,10 @@ function CartSummaryReadout({
27390
27748
  if (!Number.isFinite(shipping)) shipping = 0;
27391
27749
  if (!Number.isFinite(total)) total = 0;
27392
27750
  const rows = [
27393
- { l: "Items", v: `${items}`, bold: false },
27394
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27395
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27396
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
27751
+ { l: "readout.cart.items", v: `${items}`, bold: false },
27752
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27753
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27754
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
27397
27755
  ];
27398
27756
  const width = 260;
27399
27757
  const rowH = 20;
@@ -27423,7 +27781,7 @@ function CartSummaryReadout({
27423
27781
  fontWeight: isTotal ? 700 : 500,
27424
27782
  fill: isTotal ? colorTotal : "#334155",
27425
27783
  style: { userSelect: "none" },
27426
- children: r.l
27784
+ children: /* @__PURE__ */ jsx(\u5B57, { k: r.l })
27427
27785
  }
27428
27786
  ),
27429
27787
  /* @__PURE__ */ jsx(
@@ -27471,6 +27829,8 @@ function PricingTierReadout({
27471
27829
  }
27472
27830
  }
27473
27831
  if (!Number.isFinite(price)) price = 0;
27832
+ const \u5F15\u304F = use\u5B57\u5F15();
27833
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
27474
27834
  const width = 240;
27475
27835
  const height = 176;
27476
27836
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -27495,7 +27855,7 @@ function PricingTierReadout({
27495
27855
  textAnchor: "middle",
27496
27856
  fill: "#ffffff",
27497
27857
  style: { userSelect: "none" },
27498
- children: planName || "Plan"
27858
+ children: \u898B\u305B\u308B\u540D\u524D
27499
27859
  }
27500
27860
  ),
27501
27861
  /* @__PURE__ */ jsxs(
@@ -27523,7 +27883,7 @@ function PricingTierReadout({
27523
27883
  textAnchor: "middle",
27524
27884
  fill: "#64748b",
27525
27885
  style: { userSelect: "none" },
27526
- children: "per month"
27886
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.pricing.perMonth" })
27527
27887
  }
27528
27888
  ),
27529
27889
  features.slice(0, 3).map((f, i) => {
@@ -27538,7 +27898,7 @@ function PricingTierReadout({
27538
27898
  ] }, i);
27539
27899
  }),
27540
27900
  /* @__PURE__ */ jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
27541
- /* @__PURE__ */ jsxs(
27901
+ /* @__PURE__ */ jsx(
27542
27902
  "text",
27543
27903
  {
27544
27904
  x: width / 2,
@@ -27548,10 +27908,7 @@ function PricingTierReadout({
27548
27908
  textAnchor: "middle",
27549
27909
  fill: "#ffffff",
27550
27910
  style: { userSelect: "none" },
27551
- children: [
27552
- "Get ",
27553
- planName || "Plan"
27554
- ]
27911
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
27555
27912
  }
27556
27913
  )
27557
27914
  ]
@@ -27617,12 +27974,12 @@ function CouponCodeReadout({
27617
27974
  fill: applied ? colorApplied : "#94a3b8",
27618
27975
  fontFamily: "monospace",
27619
27976
  style: { userSelect: "none" },
27620
- children: code || "ENTER CODE"
27977
+ children: code || /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.placeholder" })
27621
27978
  }
27622
27979
  ),
27623
27980
  applied ? /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-applied": "1", children: [
27624
27981
  /* @__PURE__ */ jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
27625
- /* @__PURE__ */ jsxs(
27982
+ /* @__PURE__ */ jsx(
27626
27983
  "text",
27627
27984
  {
27628
27985
  x: boxW + 57,
@@ -27632,11 +27989,7 @@ function CouponCodeReadout({
27632
27989
  textAnchor: "middle",
27633
27990
  fill: "#ffffff",
27634
27991
  style: { userSelect: "none" },
27635
- children: [
27636
- "-",
27637
- discountPct,
27638
- "% off"
27639
- ]
27992
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
27640
27993
  }
27641
27994
  )
27642
27995
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -27651,7 +28004,7 @@ function CouponCodeReadout({
27651
28004
  textAnchor: "middle",
27652
28005
  fill: "#ffffff",
27653
28006
  style: { userSelect: "none" },
27654
- children: "Apply"
28007
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.apply" })
27655
28008
  }
27656
28009
  )
27657
28010
  ] })
@@ -27731,10 +28084,7 @@ function ArticlePreviewReadout({
27731
28084
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
27732
28085
  ] }),
27733
28086
  /* @__PURE__ */ 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) }),
27734
- /* @__PURE__ */ jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
27735
- "by ",
27736
- author
27737
- ] }),
28087
+ /* @__PURE__ */ jsx("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.article.by", v: { author } }) }),
27738
28088
  /* @__PURE__ */ jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
27739
28089
  ]
27740
28090
  }