@cardenelabs/cdl 0.58.0 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -425,7 +425,147 @@ var en = {
425
425
  /** `shape-api-gateway` の 2 行目の宛先 */
426
426
  "apiGateway.orders": "/orders",
427
427
  /** `shape-api-gateway` の 3 行目の宛先 */
428
- "apiGateway.session": "/session"
428
+ "apiGateway.session": "/session",
429
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
430
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
431
+ /** 配列を描く読み出しで、値が空の時の字 */
432
+ "readout.empty": "empty",
433
+ /** `sparkline` で点がまだ無い時の字 */
434
+ "readout.sparkline.waiting": "waiting",
435
+ /** 時の流れの入力欄の速さ */
436
+ "input.timeline.speed": "{speed}x",
437
+ /** 時の流れの入力欄の経過と長さ (秒) */
438
+ "input.timeline.time": "{t}s / {d}s",
439
+ /** `sequence-timeline` の点の見出し */
440
+ "readout.sequenceTimeline.title": "{name}: t={t}",
441
+ /** `bubble-chart` の泡の見出し */
442
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
443
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
444
+ "readout.calendarHeatmap.title": "day {i}: {v}",
445
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
446
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
447
+ /** `slope` の左の目盛 */
448
+ "readout.slope.before": "before",
449
+ /** `slope` の右の目盛 */
450
+ "readout.slope.after": "after",
451
+ /** `bullet-chart` の実績の見出し */
452
+ "readout.bulletChart.actual": "actual: {v}",
453
+ /** `bullet-chart` の目標の見出し */
454
+ "readout.bulletChart.target": "target: {v}",
455
+ /** `rating` の塗った星の見出し */
456
+ "readout.rating.full": "full",
457
+ /** `rating` の半分塗った星の見出し */
458
+ "readout.rating.half": "half",
459
+ /** `rating` の塗っていない星の見出し */
460
+ "readout.rating.empty": "empty",
461
+ /** `price-tag` の割引額 */
462
+ "readout.priceTag.save": "You save {amount}",
463
+ /** `confidence-meter` の低い帯の名前 */
464
+ "readout.confidence.low": "low",
465
+ /** `confidence-meter` の中ほどの帯の名前 */
466
+ "readout.confidence.mid": "mid",
467
+ /** `confidence-meter` の高い帯の名前 */
468
+ "readout.confidence.high": "high",
469
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
470
+ "readout.more": "+{n} more",
471
+ /** `video-card` の再生数 */
472
+ "readout.videoCard.views": "{v} views",
473
+ /** `attendance-grid` の角の見出し */
474
+ "readout.attendance.corner": "day",
475
+ /** `calendar-month` の曜日 (日曜) */
476
+ "readout.weekday.0": "Sun",
477
+ /** `calendar-month` の曜日 (月曜) */
478
+ "readout.weekday.1": "Mon",
479
+ /** `calendar-month` の曜日 (火曜) */
480
+ "readout.weekday.2": "Tue",
481
+ /** `calendar-month` の曜日 (水曜) */
482
+ "readout.weekday.3": "Wed",
483
+ /** `calendar-month` の曜日 (木曜) */
484
+ "readout.weekday.4": "Thu",
485
+ /** `calendar-month` の曜日 (金曜) */
486
+ "readout.weekday.5": "Fri",
487
+ /** `calendar-month` の曜日 (土曜) */
488
+ "readout.weekday.6": "Sat",
489
+ /** `rating-thumb` の賛成の割合と票数 */
490
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
491
+ /** `kpi-trend-tile` の前の期間の値 */
492
+ "readout.kpiTrend.prev": "prev {v}",
493
+ /** `quick-poll-emoji` の票の合計 */
494
+ "readout.poll.total": "total {n}",
495
+ /** `thread-summary` の参加者の数 */
496
+ "readout.thread.participants": "{n} participants",
497
+ /** `thread-summary` の最後に書いた人 */
498
+ "readout.thread.last": "last: {name}",
499
+ /** `read-receipt` の送信した段 */
500
+ "readout.readReceipt.sent": "sent",
501
+ /** `read-receipt` の相手に届いた段 */
502
+ "readout.readReceipt.delivered": "delivered",
503
+ /** `read-receipt` の読まれた段 */
504
+ "readout.readReceipt.read": "read",
505
+ /** `password-strength` の段階 0 */
506
+ "readout.password.0": "too weak",
507
+ /** `password-strength` の段階 1 */
508
+ "readout.password.1": "weak",
509
+ /** `password-strength` の段階 2 */
510
+ "readout.password.2": "fair",
511
+ /** `password-strength` の段階 3 */
512
+ "readout.password.3": "good",
513
+ /** `password-strength` の段階 4 */
514
+ "readout.password.4": "strong",
515
+ /** `file-dropzone` で取り込んだ後の字 */
516
+ "readout.dropzone.uploaded": "uploaded",
517
+ /** `file-dropzone` の空の時の 1 行目 */
518
+ "readout.dropzone.drop": "\u2B06 Drop file here",
519
+ /** `file-dropzone` の空の時の 2 行目 */
520
+ "readout.dropzone.browse": "or click to browse",
521
+ /** `log-stream` の重さ 0 (調べるための詳細) */
522
+ "readout.log.0": "DBG",
523
+ /** `log-stream` の重さ 1 (知らせ) */
524
+ "readout.log.1": "INF",
525
+ /** `log-stream` の重さ 2 (警告) */
526
+ "readout.log.2": "WRN",
527
+ /** `log-stream` の重さ 3 (異常) */
528
+ "readout.log.3": "ERR",
529
+ /** `cart-summary` の点数 */
530
+ "readout.cart.items": "Items",
531
+ /** `cart-summary` の小計 */
532
+ "readout.cart.subtotal": "Subtotal",
533
+ /** `cart-summary` の送料 */
534
+ "readout.cart.shipping": "Shipping",
535
+ /** `cart-summary` の合計 */
536
+ "readout.cart.total": "Total",
537
+ /** `pricing-tier` で名前が空の時の名前 */
538
+ "readout.pricing.plan": "Plan",
539
+ /** `pricing-tier` の価格の後ろ */
540
+ "readout.pricing.perMonth": "per month",
541
+ /** `pricing-tier` の押す札 */
542
+ "readout.pricing.get": "Get {name}",
543
+ /** `coupon-code` で番号が空の時の字 */
544
+ "readout.coupon.placeholder": "ENTER CODE",
545
+ /** `coupon-code` の割引の割合 */
546
+ "readout.coupon.off": "-{pct}% off",
547
+ /** `coupon-code` の押す札 */
548
+ "readout.coupon.apply": "Apply",
549
+ /** `article-preview` の書いた人 */
550
+ "readout.article.by": "by {author}",
551
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
552
+ "readout.priority.high": "HIGH",
553
+ /** `priority-badge` の中ほどの優先度の表示 */
554
+ "readout.priority.med": "MED",
555
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
556
+ "readout.priority.low": "LOW",
557
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
558
+ "readout.kanban.todo": "Todo",
559
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
560
+ "readout.kanban.inprogress": "In Progress",
561
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
562
+ "readout.kanban.done": "Done",
563
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
564
+ "readout.trafficLight.red": "red",
565
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
566
+ "readout.trafficLight.yellow": "yellow",
567
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
568
+ "readout.trafficLight.green": "green"
429
569
  };
430
570
  var ja = {
431
571
  "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
@@ -461,13 +601,85 @@ var ja = {
461
601
  "apiGateway.delete": "DELETE",
462
602
  "apiGateway.users": "/\u5229\u7528\u8005",
463
603
  "apiGateway.orders": "/\u6CE8\u6587",
464
- "apiGateway.session": "/\u63A5\u7D9A"
604
+ "apiGateway.session": "/\u63A5\u7D9A",
605
+ "readout.empty": "\u306A\u3057",
606
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
607
+ "input.timeline.speed": "{speed}\u500D",
608
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
609
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
610
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
611
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
612
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
613
+ "readout.slope.before": "\u524D",
614
+ "readout.slope.after": "\u5F8C",
615
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
616
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
617
+ "readout.rating.full": "\u6E80",
618
+ "readout.rating.half": "\u534A\u5206",
619
+ "readout.rating.empty": "\u7A7A",
620
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
621
+ "readout.confidence.low": "\u4F4E",
622
+ "readout.confidence.mid": "\u4E2D",
623
+ "readout.confidence.high": "\u9AD8",
624
+ "readout.more": "\u307B\u304B {n}",
625
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
626
+ "readout.attendance.corner": "\u65E5",
627
+ "readout.weekday.0": "\u65E5",
628
+ "readout.weekday.1": "\u6708",
629
+ "readout.weekday.2": "\u706B",
630
+ "readout.weekday.3": "\u6C34",
631
+ "readout.weekday.4": "\u6728",
632
+ "readout.weekday.5": "\u91D1",
633
+ "readout.weekday.6": "\u571F",
634
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
635
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
636
+ "readout.poll.total": "\u5408\u8A08 {n}",
637
+ "readout.thread.participants": "{n} \u4EBA",
638
+ "readout.thread.last": "\u6700\u5F8C: {name}",
639
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
640
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
641
+ "readout.readReceipt.read": "\u65E2\u8AAD",
642
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
643
+ "readout.password.1": "\u5F31\u3044",
644
+ "readout.password.2": "\u666E\u901A",
645
+ "readout.password.3": "\u826F\u3044",
646
+ "readout.password.4": "\u5F37\u3044",
647
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
648
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
649
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
650
+ "readout.log.0": "\u8A73\u7D30",
651
+ "readout.log.1": "\u60C5\u5831",
652
+ "readout.log.2": "\u8B66\u544A",
653
+ "readout.log.3": "\u7570\u5E38",
654
+ "readout.cart.items": "\u70B9\u6570",
655
+ "readout.cart.subtotal": "\u5C0F\u8A08",
656
+ "readout.cart.shipping": "\u9001\u6599",
657
+ "readout.cart.total": "\u5408\u8A08",
658
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
659
+ "readout.pricing.perMonth": "\u6708\u984D",
660
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
661
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
662
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
663
+ "readout.coupon.apply": "\u9069\u7528",
664
+ "readout.article.by": "\u6587: {author}",
665
+ "readout.priority.high": "\u9AD8",
666
+ "readout.priority.med": "\u4E2D",
667
+ "readout.priority.low": "\u4F4E",
668
+ "readout.kanban.todo": "\u672A\u7740\u624B",
669
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
670
+ "readout.kanban.done": "\u5B8C\u4E86",
671
+ "readout.trafficLight.red": "\u8D64",
672
+ "readout.trafficLight.yellow": "\u9EC4",
673
+ "readout.trafficLight.green": "\u7DD1"
465
674
  };
466
675
  var CDL_TEXT = { en, ja };
467
676
  function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
468
677
  const \u8A00\u8A9E = lang ?? "en";
469
678
  return (key) => CDL_TEXT[\u8A00\u8A9E][key];
470
679
  }
680
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
681
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
682
+ }
471
683
 
472
684
  // src/formula/ast.ts
473
685
  var ALLOWED_MATH_FNS = /* @__PURE__ */ new Set([
@@ -1379,6 +1591,23 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1379
1591
  }
1380
1592
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1381
1593
  }
1594
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = react.createContext("en");
1595
+ function use\u5B57\u5F15() {
1596
+ const lang = react.useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
1597
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
1598
+ }
1599
+ function \u5B57({ k, v }) {
1600
+ const \u5F15\u304F = use\u5B57\u5F15();
1601
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: \u5F15\u304F(k, v) });
1602
+ }
1603
+ function \u5B57\u306E\u898B\u51FA\u3057({
1604
+ k,
1605
+ v,
1606
+ \u524D = ""
1607
+ }) {
1608
+ const \u5F15\u304F = use\u5B57\u5F15();
1609
+ return /* @__PURE__ */ jsxRuntime.jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
1610
+ }
1382
1611
  function createInteractiveSignalsAccessor(diagram2, signals, formula, scroll) {
1383
1612
  const kindByInputId = /* @__PURE__ */ new Map();
1384
1613
  for (const inp of diagram2.inputs ?? []) {
@@ -1693,20 +1922,23 @@ function useInteractiveIntegration(diagram2, options = {}) {
1693
1922
  const readouts = diagram2.readouts ?? [];
1694
1923
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
1695
1924
  return null;
1696
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1697
- inputs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsxRuntime.jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1698
- formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
1699
- FormulaReadout,
1700
- {
1701
- id: f.id,
1702
- expression: f.expression,
1703
- value: stateOverrides[f.id]
1704
- },
1705
- f.id
1706
- )) }),
1707
- scrolls.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsxRuntime.jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1708
- readouts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1709
- ] });
1925
+ return (
1926
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
1927
+ /* @__PURE__ */ jsxRuntime.jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram2.lang), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1928
+ inputs.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsxRuntime.jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1929
+ formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
1930
+ FormulaReadout,
1931
+ {
1932
+ id: f.id,
1933
+ expression: f.expression,
1934
+ value: stateOverrides[f.id]
1935
+ },
1936
+ f.id
1937
+ )) }),
1938
+ scrolls.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsxRuntime.jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1939
+ readouts.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsxRuntime.jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1940
+ ] }) })
1941
+ );
1710
1942
  }, [diagram2, signals, stateOverrides, mergedStateValues]);
1711
1943
  return { stateOverrides, panel, svgRef, containerRef };
1712
1944
  }
@@ -3567,7 +3799,7 @@ function SparklineReadout({
3567
3799
  if (points.length < 2) {
3568
3800
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
3569
3801
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
3570
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
3802
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.sparkline.waiting" }) : "\u2014" }),
3571
3803
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
3572
3804
  ] });
3573
3805
  }
@@ -3830,27 +4062,24 @@ function TimelineWidget({
3830
4062
  className: "cdl-ip-timeline-scrubber"
3831
4063
  }
3832
4064
  ),
3833
- /* @__PURE__ */ jsxRuntime.jsxs(
4065
+ /* @__PURE__ */ jsxRuntime.jsx(
3834
4066
  "button",
3835
4067
  {
3836
4068
  type: "button",
3837
4069
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
3838
4070
  onClick: cycleSpeed,
3839
4071
  "aria-label": "speed",
3840
- children: [
3841
- speed,
3842
- "x"
3843
- ]
4072
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
3844
4073
  }
3845
4074
  )
3846
4075
  ] }),
3847
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-timeline-time", children: [
3848
- (progress * (input.duration / 1e3)).toFixed(1),
3849
- "s /",
3850
- " ",
3851
- (input.duration / 1e3).toFixed(1),
3852
- "s"
3853
- ] })
4076
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsxRuntime.jsx(
4077
+ \u5B57,
4078
+ {
4079
+ k: "input.timeline.time",
4080
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
4081
+ }
4082
+ ) })
3854
4083
  ] });
3855
4084
  }
3856
4085
  function RangeWidget({
@@ -4088,7 +4317,7 @@ function ArrayBarReadout({
4088
4317
  const range = max - min || 1;
4089
4318
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
4090
4319
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4091
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : arr.map((v, i) => {
4320
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : arr.map((v, i) => {
4092
4321
  const h = Math.max(0, Math.min(1, (v - min) / range));
4093
4322
  return /* @__PURE__ */ jsxRuntime.jsx(
4094
4323
  "span",
@@ -4165,7 +4394,7 @@ function StackedBarReadout({
4165
4394
  const range = max - min || 1;
4166
4395
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
4167
4396
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4168
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : Array.from({ length: n }).map((_, i) => {
4397
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : Array.from({ length: n }).map((_, i) => {
4169
4398
  const va = arrA[i] ?? 0;
4170
4399
  const vb = arrB[i] ?? 0;
4171
4400
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -4260,7 +4489,7 @@ function MatrixReadout({
4260
4489
  };
4261
4490
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
4262
4491
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4263
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx(
4492
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx(
4264
4493
  "svg",
4265
4494
  {
4266
4495
  className: "cdl-ip-readout-matrix-svg",
@@ -4318,7 +4547,7 @@ function ProgressGroupReadout({
4318
4547
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
4319
4548
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
4320
4549
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4321
- arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4550
+ arr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4322
4551
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
4323
4552
  const rowLabel = labelArr[i] ?? String(i + 1);
4324
4553
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -4380,7 +4609,7 @@ function SequenceTimelineReadout({
4380
4609
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
4381
4610
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
4382
4611
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4383
- events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(
4612
+ events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs(
4384
4613
  "svg",
4385
4614
  {
4386
4615
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -4394,7 +4623,7 @@ function SequenceTimelineReadout({
4394
4623
  events.map((e, i) => {
4395
4624
  const x = xFor(e.t);
4396
4625
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-event-marker": e.name, children: [
4397
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${e.name}: t=${e.t}` }) }),
4626
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.sequenceTimeline.title", v: { name: e.name, t: e.t } }) }),
4398
4627
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
4399
4628
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
4400
4629
  ] }, i);
@@ -4437,7 +4666,7 @@ function RadarReadout({
4437
4666
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
4438
4667
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
4439
4668
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4440
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4669
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4441
4670
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx(
4442
4671
  "polygon",
4443
4672
  {
@@ -4499,14 +4728,14 @@ function BubbleChartReadout({
4499
4728
  const maxCircleR = 18;
4500
4729
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
4501
4730
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4502
- bubbles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4731
+ bubbles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4503
4732
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4504
4733
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4505
4734
  bubbles.map((b, i) => {
4506
4735
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
4507
4736
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
4508
4737
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
4509
- return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `(${b.x}, ${b.y}) r=${b.r}` }) }, i);
4738
+ return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bubbleChart.title", v: { x: b.x, y: b.y, r: b.r } }) }, i);
4510
4739
  })
4511
4740
  ] })
4512
4741
  ] });
@@ -4529,7 +4758,7 @@ function DonutReadout({
4529
4758
  let acc = 0;
4530
4759
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
4531
4760
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4532
- arr.length === 0 || total === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4761
+ arr.length === 0 || total === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4533
4762
  const from = acc;
4534
4763
  const to = acc + v / total;
4535
4764
  acc = to;
@@ -4590,7 +4819,7 @@ function CalendarHeatmapReadout({
4590
4819
  height: cellSize,
4591
4820
  rx: 2,
4592
4821
  fill,
4593
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `day ${i}: ${v}` })
4822
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
4594
4823
  },
4595
4824
  i
4596
4825
  );
@@ -4710,7 +4939,7 @@ function CandlestickReadout({
4710
4939
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
4711
4940
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
4712
4941
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4713
- candles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
4942
+ candles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
4714
4943
  const cx = pad + i * (candleW + 3) + candleW / 2;
4715
4944
  const yHigh = yFor(cd.h);
4716
4945
  const yLow = yFor(cd.l);
@@ -4731,7 +4960,7 @@ function CandlestickReadout({
4731
4960
  height: bodyH,
4732
4961
  fill: isUp ? color : color,
4733
4962
  fillOpacity: isUp ? 1 : 0.85,
4734
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
4963
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.candlestick.title", v: { o: cd.o, h: cd.h, l: cd.l, c: cd.c } })
4735
4964
  }
4736
4965
  )
4737
4966
  ] }, i);
@@ -4765,7 +4994,7 @@ function VennReadout({
4765
4994
  const cxB = viewW / 2 + gap / 2;
4766
4995
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
4767
4996
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4768
- sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4997
+ sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4769
4998
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
4770
4999
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
4771
5000
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -4816,11 +5045,11 @@ function SlopeReadout({
4816
5045
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
4817
5046
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
4818
5047
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4819
- slopes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5048
+ slopes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4820
5049
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4821
5050
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4822
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
4823
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
5051
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.slope.before" }) }),
5052
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.slope.after" }) }),
4824
5053
  slopes.map((s, i) => {
4825
5054
  const yB = yFor(s.before);
4826
5055
  const yA = yFor(s.after);
@@ -4867,7 +5096,7 @@ function FunnelReadout({
4867
5096
  const [bR, bG, bB] = hexToRgb(colorBottom);
4868
5097
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
4869
5098
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4870
- stages.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
5099
+ stages.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
4871
5100
  const ratio = i / Math.max(1, stages.length - 1);
4872
5101
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
4873
5102
  const yTop = i * stageH + 2;
@@ -4929,7 +5158,7 @@ function GanttReadout({
4929
5158
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
4930
5159
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
4931
5160
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
4932
- tasks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
5161
+ tasks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
4933
5162
  const y = pad + i * rowH;
4934
5163
  const x1 = xFor(t.start);
4935
5164
  const x2 = xFor(t.start + t.duration);
@@ -5020,7 +5249,7 @@ function TreemapReadout({
5020
5249
  }
5021
5250
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
5022
5251
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5023
- rects.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
5252
+ rects.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
5024
5253
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: r.x + 1, y: r.y + 1, width: Math.max(0, r.w - 2), height: Math.max(0, r.h - 2), fill: colors[i % colors.length] ?? "#94a3b8", rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${r.name}: ${r.size}` }) }),
5025
5254
  r.w > 40 && r.h > 20 ? /* @__PURE__ */ jsxRuntime.jsx("text", { x: r.x + 6, y: r.y + 14, fontSize: 10, fill: "#fff", fontWeight: 600, children: r.name }) : null
5026
5255
  ] }, i)) })
@@ -5086,7 +5315,7 @@ function SankeyReadout({
5086
5315
  const rightUsed = {};
5087
5316
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
5088
5317
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5089
- flows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5318
+ flows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5090
5319
  leftNodes.map((n, i) => {
5091
5320
  const p = leftPos[n.name];
5092
5321
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -5148,7 +5377,7 @@ function PolarAreaReadout({
5148
5377
  const maxR = Math.min(cx, cy) - 20;
5149
5378
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
5150
5379
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5151
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5380
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5152
5381
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r: maxR * t, fill: "none", stroke: "rgba(148,163,184,0.2)", strokeWidth: 1 }, t)),
5153
5382
  arr.map((v, i) => {
5154
5383
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -5194,7 +5423,7 @@ function StepIndicatorReadout({
5194
5423
  const cy = viewH / 2 - 2;
5195
5424
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
5196
5425
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5197
- n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5426
+ n === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5198
5427
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
5199
5428
  const x1 = pad + i * step;
5200
5429
  const x2 = pad + (i + 1) * step;
@@ -5284,8 +5513,8 @@ function BulletChartReadout({
5284
5513
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
5285
5514
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
5286
5515
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
5287
- /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `actual: ${safeActual}` }) }),
5288
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `target: ${safeTarget}` }) })
5516
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.actual", v: { v: safeActual } }) }),
5517
+ /* @__PURE__ */ jsxRuntime.jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.target", v: { v: safeTarget } }) })
5289
5518
  ] })
5290
5519
  ] });
5291
5520
  }
@@ -5340,7 +5569,7 @@ function LeaderboardReadout({
5340
5569
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
5341
5570
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
5342
5571
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5343
- sorted.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5572
+ sorted.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5344
5573
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
5345
5574
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
5346
5575
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -5391,7 +5620,7 @@ function TrafficLightReadout({
5391
5620
  style: {
5392
5621
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
5393
5622
  },
5394
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
5623
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
5395
5624
  },
5396
5625
  i
5397
5626
  );
@@ -5430,7 +5659,7 @@ function TagCloudReadout({
5430
5659
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
5431
5660
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
5432
5661
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5433
- tags.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
5662
+ tags.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsxRuntime.jsx(
5434
5663
  "span",
5435
5664
  {
5436
5665
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -5467,7 +5696,7 @@ function ActivityFeedReadout({
5467
5696
  const shown = events.slice(0, max);
5468
5697
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
5469
5698
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5470
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5699
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5471
5700
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
5472
5701
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
5473
5702
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -5518,7 +5747,7 @@ function RatingReadout({
5518
5747
  strokeWidth: 1
5519
5748
  }
5520
5749
  ),
5521
- isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
5750
+ isEmpty ? /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: "readout.rating.empty" }) : /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: isFull ? "readout.rating.full" : "readout.rating.half" })
5522
5751
  ]
5523
5752
  },
5524
5753
  i
@@ -5614,7 +5843,7 @@ function ChatBubbleReadout({
5614
5843
  const shown = messages.slice(0, max);
5615
5844
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
5616
5845
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5617
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
5846
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx(
5618
5847
  "li",
5619
5848
  {
5620
5849
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -5706,7 +5935,7 @@ function ChecklistReadout({
5706
5935
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
5707
5936
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
5708
5937
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
5709
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5938
+ items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
5710
5939
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
5711
5940
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
5712
5941
  done,
@@ -5817,11 +6046,7 @@ function PriceTagReadout({
5817
6046
  "%"
5818
6047
  ] }) : null
5819
6048
  ] }),
5820
- savings > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
5821
- "You save ",
5822
- currency,
5823
- savings
5824
- ] }) : null
6049
+ savings > 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-price-tag-savings", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.priceTag.save", v: { amount: `${currency}${savings}` } }) }) : null
5825
6050
  ] });
5826
6051
  }
5827
6052
  function SpinnerReadout({
@@ -5958,6 +6183,11 @@ function StopwatchReadout({
5958
6183
  }
5959
6184
  );
5960
6185
  }
6186
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
6187
+ low: "readout.confidence.low",
6188
+ mid: "readout.confidence.mid",
6189
+ high: "readout.confidence.high"
6190
+ };
5961
6191
  function ConfidenceMeterReadout({
5962
6192
  id,
5963
6193
  label,
@@ -5990,7 +6220,7 @@ function ConfidenceMeterReadout({
5990
6220
  Math.round(safeValue),
5991
6221
  "%"
5992
6222
  ] }),
5993
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
6223
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57[bandLabel] }) })
5994
6224
  ] }),
5995
6225
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5996
6226
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -6025,7 +6255,7 @@ function ReactionBarReadout({
6025
6255
  }
6026
6256
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
6027
6257
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6028
- reactions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
6258
+ reactions.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
6029
6259
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
6030
6260
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
6031
6261
  ] }, i)) })
@@ -6058,7 +6288,7 @@ function PillGroupReadout({
6058
6288
  }
6059
6289
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
6060
6290
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6061
- pills.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(
6291
+ pills.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsxRuntime.jsx(
6062
6292
  "span",
6063
6293
  {
6064
6294
  className: "cdl-ip-readout-pill-group-pill",
@@ -6146,7 +6376,7 @@ function MetricsGridReadout({
6146
6376
  }
6147
6377
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
6148
6378
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6149
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6379
+ items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6150
6380
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
6151
6381
  m.value,
6152
6382
  m.unit ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -6233,7 +6463,7 @@ function IconTileReadout({
6233
6463
  }
6234
6464
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
6235
6465
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6236
- tiles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6466
+ tiles.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6237
6467
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
6238
6468
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
6239
6469
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -6274,7 +6504,7 @@ function TokenListReadout({
6274
6504
  }
6275
6505
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
6276
6506
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6277
- tokens.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6507
+ tokens.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6278
6508
  const isUp = t.delta >= 0;
6279
6509
  const deltaColor = isUp ? colorUp : colorDown;
6280
6510
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -6328,7 +6558,7 @@ function MapPinReadout({
6328
6558
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
6329
6559
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
6330
6560
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6331
- pins.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6561
+ pins.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6332
6562
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width: viewW, height: viewH, fill: "rgba(148,163,184,0.08)", stroke: "rgba(148,163,184,0.3)", strokeWidth: 1, rx: 4 }),
6333
6563
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
6334
6564
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad + (viewW - pad * 2) * t, x2: pad + (viewW - pad * 2) * t, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.15)" }),
@@ -6356,9 +6586,9 @@ function PriorityBadgeReadout({
6356
6586
  if (p === "high" || p === "2") level = "high";
6357
6587
  else if (p === "low" || p === "0") level = "low";
6358
6588
  const spec = {
6359
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
6360
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
6361
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
6589
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
6590
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
6591
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
6362
6592
  };
6363
6593
  const cur = spec[level];
6364
6594
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -6371,7 +6601,7 @@ function PriorityBadgeReadout({
6371
6601
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
6372
6602
  children: [
6373
6603
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
6374
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: cur.text })
6604
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: cur.text }) })
6375
6605
  ]
6376
6606
  }
6377
6607
  ),
@@ -6410,7 +6640,7 @@ function PodiumReadout({
6410
6640
  const order = [1, 0, 2];
6411
6641
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
6412
6642
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6413
- podium.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6643
+ podium.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6414
6644
  const w = podium[rankIdx];
6415
6645
  if (!w) return null;
6416
6646
  const x = pad + colIdx * (colW + pad);
@@ -6453,7 +6683,7 @@ function PollBarReadout({
6453
6683
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
6454
6684
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
6455
6685
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6456
- options.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6686
+ options.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6457
6687
  const pct = Math.round(o.count / total * 100);
6458
6688
  const isWinner = o.count === maxCount && maxCount > 0;
6459
6689
  const fillColor = isWinner ? colorWinner : color;
@@ -6488,6 +6718,7 @@ function UserStackReadout({
6488
6718
  max,
6489
6719
  size
6490
6720
  }) {
6721
+ const \u5F15\u304F = use\u5B57\u5F15();
6491
6722
  const names = safeParseArray(value).map(String);
6492
6723
  const shown = names.slice(0, max);
6493
6724
  const overflow = names.length > max;
@@ -6496,7 +6727,7 @@ function UserStackReadout({
6496
6727
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
6497
6728
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
6498
6729
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6499
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6730
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6500
6731
  shown.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx(
6501
6732
  "span",
6502
6733
  {
@@ -6524,7 +6755,7 @@ function UserStackReadout({
6524
6755
  fontSize: `${Math.round(size * 0.35)}px`,
6525
6756
  marginLeft: `-${size * 0.3}px`
6526
6757
  },
6527
- title: `+${overflowCount} more`,
6758
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
6528
6759
  children: [
6529
6760
  "+",
6530
6761
  overflowCount
@@ -6559,7 +6790,7 @@ function CommitListReadout({
6559
6790
  const shown = commits.slice(0, max);
6560
6791
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
6561
6792
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6562
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6793
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6563
6794
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
6564
6795
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
6565
6796
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -6639,7 +6870,7 @@ function EventLogReadout({
6639
6870
  };
6640
6871
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
6641
6872
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6642
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6873
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6643
6874
  const spec = severitySpec[e.severity] ?? severitySpec.info;
6644
6875
  return /* @__PURE__ */ jsxRuntime.jsxs(
6645
6876
  "li",
@@ -6682,7 +6913,7 @@ function SearchResultReadout({
6682
6913
  const shown = hits.slice(0, max);
6683
6914
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
6684
6915
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6685
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6916
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6686
6917
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
6687
6918
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
6688
6919
  h.url ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -6715,7 +6946,7 @@ function RoadmapReadout({
6715
6946
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
6716
6947
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
6717
6948
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6718
- quarters.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
6949
+ quarters.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
6719
6950
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
6720
6951
  /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-roadmap-items", children: q.items.map((it, j) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "cdl-ip-readout-roadmap-item", children: it }, j)) })
6721
6952
  ] }, i)) })
@@ -6747,7 +6978,7 @@ function WeatherForecastReadout({
6747
6978
  }
6748
6979
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
6749
6980
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6750
- days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
6981
+ days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
6751
6982
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
6752
6983
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
6753
6984
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -6791,17 +7022,14 @@ function VideoCardReadout({
6791
7022
  const shown = videos.slice(0, max);
6792
7023
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
6793
7024
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6794
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
7025
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
6795
7026
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
6796
7027
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
6797
7028
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
6798
7029
  ] }),
6799
7030
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
6800
7031
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
6801
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
6802
- v.views,
6803
- " views"
6804
- ] })
7032
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
6805
7033
  ] })
6806
7034
  ] }, i)) })
6807
7035
  ] });
@@ -6818,7 +7046,7 @@ function OrderStatusReadout({
6818
7046
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
6819
7047
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
6820
7048
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6821
- stepArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
7049
+ stepArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
6822
7050
  const isDone = i < safeCurrent;
6823
7051
  const isCurrent = i === safeCurrent;
6824
7052
  const isPending = i > safeCurrent;
@@ -6868,9 +7096,9 @@ function AttendanceGridReadout({
6868
7096
  const memberArr = safeParseArray(members).map(String);
6869
7097
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
6870
7098
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6871
- rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
7099
+ rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
6872
7100
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
6873
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
7101
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.attendance.corner" }) }),
6874
7102
  memberArr.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
6875
7103
  ] }) }),
6876
7104
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
@@ -6924,7 +7152,7 @@ function TimezoneClockReadout({
6924
7152
  }
6925
7153
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
6926
7154
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6927
- clocks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
7155
+ clocks.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
6928
7156
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
6929
7157
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
6930
7158
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -6958,7 +7186,7 @@ function FormSummaryReadout({
6958
7186
  }
6959
7187
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
6960
7188
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6961
- fields.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
7189
+ fields.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
6962
7190
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
6963
7191
  /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
6964
7192
  ] }, i)) })
@@ -6991,7 +7219,7 @@ function SongQueueReadout({
6991
7219
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
6992
7220
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
6993
7221
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
6994
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
7222
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
6995
7223
  const isCurrent = i === safeCurrent;
6996
7224
  return /* @__PURE__ */ jsxRuntime.jsxs(
6997
7225
  "li",
@@ -7036,12 +7264,20 @@ function CalendarMonthReadout({
7036
7264
  } catch {
7037
7265
  }
7038
7266
  }
7039
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
7267
+ const weekDays = [
7268
+ "readout.weekday.0",
7269
+ "readout.weekday.1",
7270
+ "readout.weekday.2",
7271
+ "readout.weekday.3",
7272
+ "readout.weekday.4",
7273
+ "readout.weekday.5",
7274
+ "readout.weekday.6"
7275
+ ];
7040
7276
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
7041
7277
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
7042
- days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
7278
+ days.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
7043
7279
  monthName ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
7044
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: w }, w)) }),
7280
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: w }) }, w)) }),
7045
7281
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs(
7046
7282
  "div",
7047
7283
  {
@@ -7084,7 +7320,7 @@ function TerminalReadout({
7084
7320
  const shown = lines.slice(0, max);
7085
7321
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
7086
7322
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
7087
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
7323
+ shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
7088
7324
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
7089
7325
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
7090
7326
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -7183,10 +7419,11 @@ function KanbanBoardReadout({
7183
7419
  columnWidth,
7184
7420
  max
7185
7421
  }) {
7422
+ const \u5F15\u304F = use\u5B57\u5F15();
7186
7423
  const buckets = {
7187
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
7188
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
7189
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
7424
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
7425
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
7426
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
7190
7427
  };
7191
7428
  const trimmed = value.trim();
7192
7429
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -7303,7 +7540,7 @@ function KanbanBoardReadout({
7303
7540
  )
7304
7541
  ] }, ti);
7305
7542
  }),
7306
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
7543
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
7307
7544
  "text",
7308
7545
  {
7309
7546
  x: x + columnWidth / 2,
@@ -7312,11 +7549,7 @@ function KanbanBoardReadout({
7312
7549
  textAnchor: "middle",
7313
7550
  fill: "#64748b",
7314
7551
  style: { userSelect: "none" },
7315
- children: [
7316
- "+",
7317
- overflow,
7318
- " more"
7319
- ]
7552
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7320
7553
  }
7321
7554
  ) : null
7322
7555
  ] }, k);
@@ -7873,7 +8106,7 @@ function UserPresenceReadout({
7873
8106
  )
7874
8107
  ] }, i);
7875
8108
  }),
7876
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
8109
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
7877
8110
  "text",
7878
8111
  {
7879
8112
  x: width / 2,
@@ -7882,11 +8115,7 @@ function UserPresenceReadout({
7882
8115
  textAnchor: "middle",
7883
8116
  fill: "#64748b",
7884
8117
  style: { userSelect: "none" },
7885
- children: [
7886
- "+",
7887
- overflow,
7888
- " more"
7889
- ]
8118
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7890
8119
  }
7891
8120
  ) : null
7892
8121
  ]
@@ -7937,12 +8166,7 @@ function RatingThumbReadout({
7937
8166
  "\u25B2 ",
7938
8167
  upCount
7939
8168
  ] }),
7940
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
7941
- upPct,
7942
- "% up \xB7 ",
7943
- total,
7944
- " votes"
7945
- ] }),
8169
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.ratingThumb.summary", v: { pct: upPct, total } }) }),
7946
8170
  /* @__PURE__ */ jsxRuntime.jsxs(
7947
8171
  "text",
7948
8172
  {
@@ -8117,11 +8341,7 @@ function KpiTrendTileReadout({
8117
8341
  deltaPct.toFixed(1),
8118
8342
  "%)"
8119
8343
  ] }),
8120
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
8121
- "prev ",
8122
- prev,
8123
- unit
8124
- ] }),
8344
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.kpiTrend.prev", v: { v: `${prev}${unit}` } }) }),
8125
8345
  history.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
8126
8346
  ]
8127
8347
  }
@@ -8209,7 +8429,7 @@ function QuickPollEmojiReadout({
8209
8429
  )
8210
8430
  ] }, i);
8211
8431
  }),
8212
- /* @__PURE__ */ jsxRuntime.jsxs(
8432
+ /* @__PURE__ */ jsxRuntime.jsx(
8213
8433
  "text",
8214
8434
  {
8215
8435
  x: width - 8,
@@ -8218,10 +8438,7 @@ function QuickPollEmojiReadout({
8218
8438
  textAnchor: "end",
8219
8439
  fill: "#64748b",
8220
8440
  style: { userSelect: "none" },
8221
- children: [
8222
- "total ",
8223
- total
8224
- ]
8441
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
8225
8442
  }
8226
8443
  )
8227
8444
  ]
@@ -8356,14 +8573,8 @@ function ThreadSummaryReadout({
8356
8573
  height,
8357
8574
  children: [
8358
8575
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
8359
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
8360
- participants,
8361
- " participants"
8362
- ] }),
8363
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
8364
- "last: ",
8365
- lastAuthor
8366
- ] }),
8576
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.thread.participants", v: { n: participants } }) }),
8577
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.thread.last", v: { name: lastAuthor } }) }),
8367
8578
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
8368
8579
  unread > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-thread-unread": "1", children: [
8369
8580
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -8394,7 +8605,7 @@ function ReadReceiptReadout({
8394
8605
  colorPending
8395
8606
  }) {
8396
8607
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
8397
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
8608
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
8398
8609
  const iconColor = status === 2 ? colorRead : colorPending;
8399
8610
  const width = 180;
8400
8611
  const height = 32;
@@ -8429,7 +8640,7 @@ function ReadReceiptReadout({
8429
8640
  }
8430
8641
  ) : null
8431
8642
  ] }),
8432
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
8643
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labelKey }) })
8433
8644
  ]
8434
8645
  }
8435
8646
  )
@@ -8443,7 +8654,7 @@ function PasswordStrengthReadout({
8443
8654
  colorWeak
8444
8655
  }) {
8445
8656
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
8446
- const labels = ["too weak", "weak", "fair", "good", "strong"];
8657
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
8447
8658
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
8448
8659
  const barW = 46;
8449
8660
  const gap = 6;
@@ -8487,7 +8698,7 @@ function PasswordStrengthReadout({
8487
8698
  textAnchor: "end",
8488
8699
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
8489
8700
  style: { userSelect: "none" },
8490
- children: labels[level]
8701
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labels[level] })
8491
8702
  }
8492
8703
  )
8493
8704
  ]
@@ -8622,7 +8833,7 @@ function FileDropzoneReadout({
8622
8833
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: filename }),
8623
8834
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
8624
8835
  ] }),
8625
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
8836
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
8626
8837
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
8627
8838
  /* @__PURE__ */ jsxRuntime.jsx(
8628
8839
  "text",
@@ -8634,7 +8845,7 @@ function FileDropzoneReadout({
8634
8845
  textAnchor: "middle",
8635
8846
  fill: "#64748b",
8636
8847
  style: { userSelect: "none" },
8637
- children: "\u2B06 Drop file here"
8848
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.drop" })
8638
8849
  }
8639
8850
  ),
8640
8851
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8646,7 +8857,7 @@ function FileDropzoneReadout({
8646
8857
  textAnchor: "middle",
8647
8858
  fill: "#94a3b8",
8648
8859
  style: { userSelect: "none" },
8649
- children: "or click to browse"
8860
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.browse" })
8650
8861
  }
8651
8862
  )
8652
8863
  ] })
@@ -8681,7 +8892,7 @@ function LogStreamReadout({
8681
8892
  }
8682
8893
  }
8683
8894
  const shown = rows.slice(-5);
8684
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
8895
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
8685
8896
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
8686
8897
  const width = 300;
8687
8898
  const rowH = 18;
@@ -8714,7 +8925,7 @@ function LogStreamReadout({
8714
8925
  fill: "#ffffff",
8715
8926
  fontFamily: "monospace",
8716
8927
  style: { userSelect: "none" },
8717
- children: levelLabels[r.level] ?? "INF"
8928
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
8718
8929
  }
8719
8930
  ),
8720
8931
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -8908,10 +9119,10 @@ function CartSummaryReadout({
8908
9119
  if (!Number.isFinite(shipping)) shipping = 0;
8909
9120
  if (!Number.isFinite(total)) total = 0;
8910
9121
  const rows = [
8911
- { l: "Items", v: `${items}`, bold: false },
8912
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
8913
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
8914
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
9122
+ { l: "readout.cart.items", v: `${items}`, bold: false },
9123
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
9124
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
9125
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
8915
9126
  ];
8916
9127
  const width = 260;
8917
9128
  const rowH = 20;
@@ -8941,7 +9152,7 @@ function CartSummaryReadout({
8941
9152
  fontWeight: isTotal ? 700 : 500,
8942
9153
  fill: isTotal ? colorTotal : "#334155",
8943
9154
  style: { userSelect: "none" },
8944
- children: r.l
9155
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: r.l })
8945
9156
  }
8946
9157
  ),
8947
9158
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -8989,6 +9200,8 @@ function PricingTierReadout({
8989
9200
  }
8990
9201
  }
8991
9202
  if (!Number.isFinite(price)) price = 0;
9203
+ const \u5F15\u304F = use\u5B57\u5F15();
9204
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
8992
9205
  const width = 240;
8993
9206
  const height = 176;
8994
9207
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -9013,7 +9226,7 @@ function PricingTierReadout({
9013
9226
  textAnchor: "middle",
9014
9227
  fill: "#ffffff",
9015
9228
  style: { userSelect: "none" },
9016
- children: planName || "Plan"
9229
+ children: \u898B\u305B\u308B\u540D\u524D
9017
9230
  }
9018
9231
  ),
9019
9232
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -9041,7 +9254,7 @@ function PricingTierReadout({
9041
9254
  textAnchor: "middle",
9042
9255
  fill: "#64748b",
9043
9256
  style: { userSelect: "none" },
9044
- children: "per month"
9257
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.pricing.perMonth" })
9045
9258
  }
9046
9259
  ),
9047
9260
  features.slice(0, 3).map((f, i) => {
@@ -9056,7 +9269,7 @@ function PricingTierReadout({
9056
9269
  ] }, i);
9057
9270
  }),
9058
9271
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
9059
- /* @__PURE__ */ jsxRuntime.jsxs(
9272
+ /* @__PURE__ */ jsxRuntime.jsx(
9060
9273
  "text",
9061
9274
  {
9062
9275
  x: width / 2,
@@ -9066,10 +9279,7 @@ function PricingTierReadout({
9066
9279
  textAnchor: "middle",
9067
9280
  fill: "#ffffff",
9068
9281
  style: { userSelect: "none" },
9069
- children: [
9070
- "Get ",
9071
- planName || "Plan"
9072
- ]
9282
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
9073
9283
  }
9074
9284
  )
9075
9285
  ]
@@ -9135,12 +9345,12 @@ function CouponCodeReadout({
9135
9345
  fill: applied ? colorApplied : "#94a3b8",
9136
9346
  fontFamily: "monospace",
9137
9347
  style: { userSelect: "none" },
9138
- children: code || "ENTER CODE"
9348
+ children: code || /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.placeholder" })
9139
9349
  }
9140
9350
  ),
9141
9351
  applied ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-applied": "1", children: [
9142
9352
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
9143
- /* @__PURE__ */ jsxRuntime.jsxs(
9353
+ /* @__PURE__ */ jsxRuntime.jsx(
9144
9354
  "text",
9145
9355
  {
9146
9356
  x: boxW + 57,
@@ -9150,11 +9360,7 @@ function CouponCodeReadout({
9150
9360
  textAnchor: "middle",
9151
9361
  fill: "#ffffff",
9152
9362
  style: { userSelect: "none" },
9153
- children: [
9154
- "-",
9155
- discountPct,
9156
- "% off"
9157
- ]
9363
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
9158
9364
  }
9159
9365
  )
9160
9366
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -9169,7 +9375,7 @@ function CouponCodeReadout({
9169
9375
  textAnchor: "middle",
9170
9376
  fill: "#ffffff",
9171
9377
  style: { userSelect: "none" },
9172
- children: "Apply"
9378
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.apply" })
9173
9379
  }
9174
9380
  )
9175
9381
  ] })
@@ -9249,10 +9455,7 @@ function ArticlePreviewReadout({
9249
9455
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
9250
9456
  ] }),
9251
9457
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: thumbW + 20, y: 60, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: excerpt.length > 56 ? `${excerpt.slice(28, 55)}\u2026` : excerpt.slice(28, 56) }),
9252
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
9253
- "by ",
9254
- author
9255
- ] }),
9458
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.article.by", v: { author } }) }),
9256
9459
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
9257
9460
  ]
9258
9461
  }
@@ -23553,12 +23756,12 @@ function \u5272\u308B\u5019\u88DC(text) {
23553
23756
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
23554
23757
  }
23555
23758
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
23556
- const \u5B57 = [];
23759
+ const \u5B572 = [];
23557
23760
  const \u4E26\u3073 = [...text];
23558
23761
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
23559
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23762
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23560
23763
  }
23561
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
23764
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
23562
23765
  }
23563
23766
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
23564
23767
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -25917,9 +26120,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
25917
26120
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
25918
26121
  };
25919
26122
  }
25920
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
26123
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
25921
26124
  let \u7D1A = \u521D\u671F;
25922
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
26125
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
25923
26126
  return \u7D1A;
25924
26127
  }
25925
26128
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {