@cardenelabs/cdl 0.58.0 → 0.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.cjs CHANGED
@@ -430,7 +430,147 @@ var en = {
430
430
  /** `shape-api-gateway` の 2 行目の宛先 */
431
431
  "apiGateway.orders": "/orders",
432
432
  /** `shape-api-gateway` の 3 行目の宛先 */
433
- "apiGateway.session": "/session"
433
+ "apiGateway.session": "/session",
434
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
435
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
436
+ /** 配列を描く読み出しで、値が空の時の字 */
437
+ "readout.empty": "empty",
438
+ /** `sparkline` で点がまだ無い時の字 */
439
+ "readout.sparkline.waiting": "waiting",
440
+ /** 時の流れの入力欄の速さ */
441
+ "input.timeline.speed": "{speed}x",
442
+ /** 時の流れの入力欄の経過と長さ (秒) */
443
+ "input.timeline.time": "{t}s / {d}s",
444
+ /** `sequence-timeline` の点の見出し */
445
+ "readout.sequenceTimeline.title": "{name}: t={t}",
446
+ /** `bubble-chart` の泡の見出し */
447
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
448
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
449
+ "readout.calendarHeatmap.title": "day {i}: {v}",
450
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
451
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
452
+ /** `slope` の左の目盛 */
453
+ "readout.slope.before": "before",
454
+ /** `slope` の右の目盛 */
455
+ "readout.slope.after": "after",
456
+ /** `bullet-chart` の実績の見出し */
457
+ "readout.bulletChart.actual": "actual: {v}",
458
+ /** `bullet-chart` の目標の見出し */
459
+ "readout.bulletChart.target": "target: {v}",
460
+ /** `rating` の塗った星の見出し */
461
+ "readout.rating.full": "full",
462
+ /** `rating` の半分塗った星の見出し */
463
+ "readout.rating.half": "half",
464
+ /** `rating` の塗っていない星の見出し */
465
+ "readout.rating.empty": "empty",
466
+ /** `price-tag` の割引額 */
467
+ "readout.priceTag.save": "You save {amount}",
468
+ /** `confidence-meter` の低い帯の名前 */
469
+ "readout.confidence.low": "low",
470
+ /** `confidence-meter` の中ほどの帯の名前 */
471
+ "readout.confidence.mid": "mid",
472
+ /** `confidence-meter` の高い帯の名前 */
473
+ "readout.confidence.high": "high",
474
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
475
+ "readout.more": "+{n} more",
476
+ /** `video-card` の再生数 */
477
+ "readout.videoCard.views": "{v} views",
478
+ /** `attendance-grid` の角の見出し */
479
+ "readout.attendance.corner": "day",
480
+ /** `calendar-month` の曜日 (日曜) */
481
+ "readout.weekday.0": "Sun",
482
+ /** `calendar-month` の曜日 (月曜) */
483
+ "readout.weekday.1": "Mon",
484
+ /** `calendar-month` の曜日 (火曜) */
485
+ "readout.weekday.2": "Tue",
486
+ /** `calendar-month` の曜日 (水曜) */
487
+ "readout.weekday.3": "Wed",
488
+ /** `calendar-month` の曜日 (木曜) */
489
+ "readout.weekday.4": "Thu",
490
+ /** `calendar-month` の曜日 (金曜) */
491
+ "readout.weekday.5": "Fri",
492
+ /** `calendar-month` の曜日 (土曜) */
493
+ "readout.weekday.6": "Sat",
494
+ /** `rating-thumb` の賛成の割合と票数 */
495
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
496
+ /** `kpi-trend-tile` の前の期間の値 */
497
+ "readout.kpiTrend.prev": "prev {v}",
498
+ /** `quick-poll-emoji` の票の合計 */
499
+ "readout.poll.total": "total {n}",
500
+ /** `thread-summary` の参加者の数 */
501
+ "readout.thread.participants": "{n} participants",
502
+ /** `thread-summary` の最後に書いた人 */
503
+ "readout.thread.last": "last: {name}",
504
+ /** `read-receipt` の送信した段 */
505
+ "readout.readReceipt.sent": "sent",
506
+ /** `read-receipt` の相手に届いた段 */
507
+ "readout.readReceipt.delivered": "delivered",
508
+ /** `read-receipt` の読まれた段 */
509
+ "readout.readReceipt.read": "read",
510
+ /** `password-strength` の段階 0 */
511
+ "readout.password.0": "too weak",
512
+ /** `password-strength` の段階 1 */
513
+ "readout.password.1": "weak",
514
+ /** `password-strength` の段階 2 */
515
+ "readout.password.2": "fair",
516
+ /** `password-strength` の段階 3 */
517
+ "readout.password.3": "good",
518
+ /** `password-strength` の段階 4 */
519
+ "readout.password.4": "strong",
520
+ /** `file-dropzone` で取り込んだ後の字 */
521
+ "readout.dropzone.uploaded": "uploaded",
522
+ /** `file-dropzone` の空の時の 1 行目 */
523
+ "readout.dropzone.drop": "\u2B06 Drop file here",
524
+ /** `file-dropzone` の空の時の 2 行目 */
525
+ "readout.dropzone.browse": "or click to browse",
526
+ /** `log-stream` の重さ 0 (調べるための詳細) */
527
+ "readout.log.0": "DBG",
528
+ /** `log-stream` の重さ 1 (知らせ) */
529
+ "readout.log.1": "INF",
530
+ /** `log-stream` の重さ 2 (警告) */
531
+ "readout.log.2": "WRN",
532
+ /** `log-stream` の重さ 3 (異常) */
533
+ "readout.log.3": "ERR",
534
+ /** `cart-summary` の点数 */
535
+ "readout.cart.items": "Items",
536
+ /** `cart-summary` の小計 */
537
+ "readout.cart.subtotal": "Subtotal",
538
+ /** `cart-summary` の送料 */
539
+ "readout.cart.shipping": "Shipping",
540
+ /** `cart-summary` の合計 */
541
+ "readout.cart.total": "Total",
542
+ /** `pricing-tier` で名前が空の時の名前 */
543
+ "readout.pricing.plan": "Plan",
544
+ /** `pricing-tier` の価格の後ろ */
545
+ "readout.pricing.perMonth": "per month",
546
+ /** `pricing-tier` の押す札 */
547
+ "readout.pricing.get": "Get {name}",
548
+ /** `coupon-code` で番号が空の時の字 */
549
+ "readout.coupon.placeholder": "ENTER CODE",
550
+ /** `coupon-code` の割引の割合 */
551
+ "readout.coupon.off": "-{pct}% off",
552
+ /** `coupon-code` の押す札 */
553
+ "readout.coupon.apply": "Apply",
554
+ /** `article-preview` の書いた人 */
555
+ "readout.article.by": "by {author}",
556
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
557
+ "readout.priority.high": "HIGH",
558
+ /** `priority-badge` の中ほどの優先度の表示 */
559
+ "readout.priority.med": "MED",
560
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
561
+ "readout.priority.low": "LOW",
562
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
563
+ "readout.kanban.todo": "Todo",
564
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
565
+ "readout.kanban.inprogress": "In Progress",
566
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
567
+ "readout.kanban.done": "Done",
568
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
569
+ "readout.trafficLight.red": "red",
570
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
571
+ "readout.trafficLight.yellow": "yellow",
572
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
573
+ "readout.trafficLight.green": "green"
434
574
  };
435
575
  var ja = {
436
576
  "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
@@ -466,13 +606,85 @@ var ja = {
466
606
  "apiGateway.delete": "DELETE",
467
607
  "apiGateway.users": "/\u5229\u7528\u8005",
468
608
  "apiGateway.orders": "/\u6CE8\u6587",
469
- "apiGateway.session": "/\u63A5\u7D9A"
609
+ "apiGateway.session": "/\u63A5\u7D9A",
610
+ "readout.empty": "\u306A\u3057",
611
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
612
+ "input.timeline.speed": "{speed}\u500D",
613
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
614
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
615
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
616
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
617
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
618
+ "readout.slope.before": "\u524D",
619
+ "readout.slope.after": "\u5F8C",
620
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
621
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
622
+ "readout.rating.full": "\u6E80",
623
+ "readout.rating.half": "\u534A\u5206",
624
+ "readout.rating.empty": "\u7A7A",
625
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
626
+ "readout.confidence.low": "\u4F4E",
627
+ "readout.confidence.mid": "\u4E2D",
628
+ "readout.confidence.high": "\u9AD8",
629
+ "readout.more": "\u307B\u304B {n}",
630
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
631
+ "readout.attendance.corner": "\u65E5",
632
+ "readout.weekday.0": "\u65E5",
633
+ "readout.weekday.1": "\u6708",
634
+ "readout.weekday.2": "\u706B",
635
+ "readout.weekday.3": "\u6C34",
636
+ "readout.weekday.4": "\u6728",
637
+ "readout.weekday.5": "\u91D1",
638
+ "readout.weekday.6": "\u571F",
639
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
640
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
641
+ "readout.poll.total": "\u5408\u8A08 {n}",
642
+ "readout.thread.participants": "{n} \u4EBA",
643
+ "readout.thread.last": "\u6700\u5F8C: {name}",
644
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
645
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
646
+ "readout.readReceipt.read": "\u65E2\u8AAD",
647
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
648
+ "readout.password.1": "\u5F31\u3044",
649
+ "readout.password.2": "\u666E\u901A",
650
+ "readout.password.3": "\u826F\u3044",
651
+ "readout.password.4": "\u5F37\u3044",
652
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
653
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
654
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
655
+ "readout.log.0": "\u8A73\u7D30",
656
+ "readout.log.1": "\u60C5\u5831",
657
+ "readout.log.2": "\u8B66\u544A",
658
+ "readout.log.3": "\u7570\u5E38",
659
+ "readout.cart.items": "\u70B9\u6570",
660
+ "readout.cart.subtotal": "\u5C0F\u8A08",
661
+ "readout.cart.shipping": "\u9001\u6599",
662
+ "readout.cart.total": "\u5408\u8A08",
663
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
664
+ "readout.pricing.perMonth": "\u6708\u984D",
665
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
666
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
667
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
668
+ "readout.coupon.apply": "\u9069\u7528",
669
+ "readout.article.by": "\u6587: {author}",
670
+ "readout.priority.high": "\u9AD8",
671
+ "readout.priority.med": "\u4E2D",
672
+ "readout.priority.low": "\u4F4E",
673
+ "readout.kanban.todo": "\u672A\u7740\u624B",
674
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
675
+ "readout.kanban.done": "\u5B8C\u4E86",
676
+ "readout.trafficLight.red": "\u8D64",
677
+ "readout.trafficLight.yellow": "\u9EC4",
678
+ "readout.trafficLight.green": "\u7DD1"
470
679
  };
471
680
  var CDL_TEXT = { en, ja };
472
681
  function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
473
682
  const \u8A00\u8A9E = lang ?? "en";
474
683
  return (key) => CDL_TEXT[\u8A00\u8A9E][key];
475
684
  }
685
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
686
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
687
+ }
476
688
 
477
689
  // src/layout/clearance-constants.ts
478
690
  var CLEARANCE_NODE_LABEL = 32;
@@ -9332,6 +9544,22 @@ function displayWidth(text) {
9332
9544
  }
9333
9545
  return w;
9334
9546
  }
9547
+ function \u6841\u3067\u5272\u308B(text, \u6841) {
9548
+ let w = 0;
9549
+ let \u53D6\u3063\u305F = "";
9550
+ for (const ch of text) {
9551
+ const code = ch.codePointAt(0) ?? 0;
9552
+ const \u5B57\u306E\u6841 = code >= 32 && code <= 126 ? 1 : 2;
9553
+ if (w + \u5B57\u306E\u6841 > \u6841) break;
9554
+ w += \u5B57\u306E\u6841;
9555
+ \u53D6\u3063\u305F += ch;
9556
+ }
9557
+ return [\u53D6\u3063\u305F, text.slice(\u53D6\u3063\u305F.length)];
9558
+ }
9559
+ function \u6841\u3067\u7701\u304F(text, \u4E0A\u9650) {
9560
+ if (displayWidth(text) <= \u4E0A\u9650) return text;
9561
+ return `${\u6841\u3067\u5272\u308B(text, \u4E0A\u9650 - 1)[0]}\u2026`;
9562
+ }
9335
9563
  function requiredRowsWidth(rows, kind) {
9336
9564
  if (!rows || rows.length === 0) return 0;
9337
9565
  const splits = rows.map(splitRow);
@@ -11024,12 +11252,12 @@ function \u5272\u308B\u5019\u88DC(text) {
11024
11252
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
11025
11253
  }
11026
11254
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
11027
- const \u5B57 = [];
11255
+ const \u5B572 = [];
11028
11256
  const \u4E26\u3073 = [...text];
11029
11257
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
11030
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11258
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11031
11259
  }
11032
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
11260
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
11033
11261
  }
11034
11262
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
11035
11263
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -13385,9 +13613,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
13385
13613
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
13386
13614
  };
13387
13615
  }
13388
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13616
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13389
13617
  let \u7D1A = \u521D\u671F;
13390
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13618
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13391
13619
  return \u7D1A;
13392
13620
  }
13393
13621
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -20010,6 +20238,23 @@ function warn(message) {
20010
20238
  console.warn(`[cdl event-handler] ${message}`);
20011
20239
  }
20012
20240
  }
20241
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = react.createContext("en");
20242
+ function use\u5B57\u5F15() {
20243
+ const lang = react.useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
20244
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
20245
+ }
20246
+ function \u5B57({ k, v }) {
20247
+ const \u5F15\u304F = use\u5B57\u5F15();
20248
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: \u5F15\u304F(k, v) });
20249
+ }
20250
+ function \u5B57\u306E\u898B\u51FA\u3057({
20251
+ k,
20252
+ v,
20253
+ \u524D = ""
20254
+ }) {
20255
+ const \u5F15\u304F = use\u5B57\u5F15();
20256
+ return /* @__PURE__ */ jsxRuntime.jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
20257
+ }
20013
20258
  function createInteractiveSignalsAccessor(diagram, signals, formula, scroll) {
20014
20259
  const kindByInputId = /* @__PURE__ */ new Map();
20015
20260
  for (const inp of diagram.inputs ?? []) {
@@ -20324,20 +20569,23 @@ function useInteractiveIntegration(diagram, options = {}) {
20324
20569
  const readouts = diagram.readouts ?? [];
20325
20570
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
20326
20571
  return null;
20327
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20328
- 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)) }),
20329
- formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
20330
- FormulaReadout,
20331
- {
20332
- id: f.id,
20333
- expression: f.expression,
20334
- value: stateOverrides[f.id]
20335
- },
20336
- f.id
20337
- )) }),
20338
- 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)) }),
20339
- 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)) })
20340
- ] });
20572
+ return (
20573
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
20574
+ /* @__PURE__ */ jsxRuntime.jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram.lang), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20575
+ 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)) }),
20576
+ formulasList.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsxRuntime.jsx(
20577
+ FormulaReadout,
20578
+ {
20579
+ id: f.id,
20580
+ expression: f.expression,
20581
+ value: stateOverrides[f.id]
20582
+ },
20583
+ f.id
20584
+ )) }),
20585
+ 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)) }),
20586
+ 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)) })
20587
+ ] }) })
20588
+ );
20341
20589
  }, [diagram, signals, stateOverrides, mergedStateValues]);
20342
20590
  return { stateOverrides, panel, svgRef, containerRef };
20343
20591
  }
@@ -22198,7 +22446,7 @@ function SparklineReadout({
22198
22446
  if (points.length < 2) {
22199
22447
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
22200
22448
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22201
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
22449
+ /* @__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" }),
22202
22450
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
22203
22451
  ] });
22204
22452
  }
@@ -22461,27 +22709,24 @@ function TimelineWidget({
22461
22709
  className: "cdl-ip-timeline-scrubber"
22462
22710
  }
22463
22711
  ),
22464
- /* @__PURE__ */ jsxRuntime.jsxs(
22712
+ /* @__PURE__ */ jsxRuntime.jsx(
22465
22713
  "button",
22466
22714
  {
22467
22715
  type: "button",
22468
22716
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
22469
22717
  onClick: cycleSpeed,
22470
22718
  "aria-label": "speed",
22471
- children: [
22472
- speed,
22473
- "x"
22474
- ]
22719
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
22475
22720
  }
22476
22721
  )
22477
22722
  ] }),
22478
- /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-timeline-time", children: [
22479
- (progress * (input.duration / 1e3)).toFixed(1),
22480
- "s /",
22481
- " ",
22482
- (input.duration / 1e3).toFixed(1),
22483
- "s"
22484
- ] })
22723
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsxRuntime.jsx(
22724
+ \u5B57,
22725
+ {
22726
+ k: "input.timeline.time",
22727
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
22728
+ }
22729
+ ) })
22485
22730
  ] });
22486
22731
  }
22487
22732
  function RangeWidget({
@@ -22719,7 +22964,7 @@ function ArrayBarReadout({
22719
22964
  const range = max - min || 1;
22720
22965
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
22721
22966
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22722
- /* @__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) => {
22967
+ /* @__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) => {
22723
22968
  const h = Math.max(0, Math.min(1, (v - min) / range));
22724
22969
  return /* @__PURE__ */ jsxRuntime.jsx(
22725
22970
  "span",
@@ -22796,7 +23041,7 @@ function StackedBarReadout({
22796
23041
  const range = max - min || 1;
22797
23042
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
22798
23043
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22799
- /* @__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) => {
23044
+ /* @__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) => {
22800
23045
  const va = arrA[i] ?? 0;
22801
23046
  const vb = arrB[i] ?? 0;
22802
23047
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -22891,7 +23136,7 @@ function MatrixReadout({
22891
23136
  };
22892
23137
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
22893
23138
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22894
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx(
23139
+ 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(
22895
23140
  "svg",
22896
23141
  {
22897
23142
  className: "cdl-ip-readout-matrix-svg",
@@ -22949,7 +23194,7 @@ function ProgressGroupReadout({
22949
23194
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
22950
23195
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
22951
23196
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
22952
- 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) => {
23197
+ 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) => {
22953
23198
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
22954
23199
  const rowLabel = labelArr[i] ?? String(i + 1);
22955
23200
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -23011,7 +23256,7 @@ function SequenceTimelineReadout({
23011
23256
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
23012
23257
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
23013
23258
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23014
- events.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(
23259
+ 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(
23015
23260
  "svg",
23016
23261
  {
23017
23262
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -23025,7 +23270,7 @@ function SequenceTimelineReadout({
23025
23270
  events.map((e, i) => {
23026
23271
  const x = xFor(e.t);
23027
23272
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-event-marker": e.name, children: [
23028
- /* @__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}` }) }),
23273
+ /* @__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 } }) }),
23029
23274
  /* @__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 }),
23030
23275
  /* @__PURE__ */ jsxRuntime.jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
23031
23276
  ] }, i);
@@ -23068,7 +23313,7 @@ function RadarReadout({
23068
23313
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
23069
23314
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
23070
23315
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23071
- 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: [
23316
+ 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: [
23072
23317
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsxRuntime.jsx(
23073
23318
  "polygon",
23074
23319
  {
@@ -23130,14 +23375,14 @@ function BubbleChartReadout({
23130
23375
  const maxCircleR = 18;
23131
23376
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
23132
23377
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23133
- 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: [
23378
+ 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: [
23134
23379
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
23135
23380
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
23136
23381
  bubbles.map((b, i) => {
23137
23382
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
23138
23383
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
23139
23384
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
23140
- 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);
23385
+ 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);
23141
23386
  })
23142
23387
  ] })
23143
23388
  ] });
@@ -23160,7 +23405,7 @@ function DonutReadout({
23160
23405
  let acc = 0;
23161
23406
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
23162
23407
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23163
- 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) => {
23408
+ 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) => {
23164
23409
  const from = acc;
23165
23410
  const to = acc + v / total;
23166
23411
  acc = to;
@@ -23221,7 +23466,7 @@ function CalendarHeatmapReadout({
23221
23466
  height: cellSize,
23222
23467
  rx: 2,
23223
23468
  fill,
23224
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `day ${i}: ${v}` })
23469
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
23225
23470
  },
23226
23471
  i
23227
23472
  );
@@ -23341,7 +23586,7 @@ function CandlestickReadout({
23341
23586
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
23342
23587
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
23343
23588
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23344
- 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) => {
23589
+ 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) => {
23345
23590
  const cx = pad + i * (candleW + 3) + candleW / 2;
23346
23591
  const yHigh = yFor(cd.h);
23347
23592
  const yLow = yFor(cd.l);
@@ -23362,7 +23607,7 @@ function CandlestickReadout({
23362
23607
  height: bodyH,
23363
23608
  fill: isUp ? color : color,
23364
23609
  fillOpacity: isUp ? 1 : 0.85,
23365
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
23610
+ 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 } })
23366
23611
  }
23367
23612
  )
23368
23613
  ] }, i);
@@ -23396,7 +23641,7 @@ function VennReadout({
23396
23641
  const cxB = viewW / 2 + gap / 2;
23397
23642
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
23398
23643
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23399
- 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: [
23644
+ 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: [
23400
23645
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
23401
23646
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
23402
23647
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -23447,11 +23692,11 @@ function SlopeReadout({
23447
23692
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
23448
23693
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
23449
23694
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23450
- 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: [
23695
+ 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: [
23451
23696
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23452
23697
  /* @__PURE__ */ jsxRuntime.jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23453
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
23454
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
23698
+ /* @__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" }) }),
23699
+ /* @__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" }) }),
23455
23700
  slopes.map((s, i) => {
23456
23701
  const yB = yFor(s.before);
23457
23702
  const yA = yFor(s.after);
@@ -23498,7 +23743,7 @@ function FunnelReadout({
23498
23743
  const [bR, bG, bB] = hexToRgb2(colorBottom);
23499
23744
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
23500
23745
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23501
- 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) => {
23746
+ 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) => {
23502
23747
  const ratio = i / Math.max(1, stages.length - 1);
23503
23748
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
23504
23749
  const yTop = i * stageH + 2;
@@ -23560,7 +23805,7 @@ function GanttReadout({
23560
23805
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
23561
23806
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
23562
23807
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23563
- 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) => {
23808
+ 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) => {
23564
23809
  const y = pad + i * rowH;
23565
23810
  const x1 = xFor(t.start);
23566
23811
  const x2 = xFor(t.start + t.duration);
@@ -23651,7 +23896,7 @@ function TreemapReadout({
23651
23896
  }
23652
23897
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
23653
23898
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23654
- 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: [
23899
+ 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: [
23655
23900
  /* @__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}` }) }),
23656
23901
  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
23657
23902
  ] }, i)) })
@@ -23717,7 +23962,7 @@ function SankeyReadout({
23717
23962
  const rightUsed = {};
23718
23963
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
23719
23964
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23720
- 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: [
23965
+ 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: [
23721
23966
  leftNodes.map((n, i) => {
23722
23967
  const p = leftPos[n.name];
23723
23968
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
@@ -23779,7 +24024,7 @@ function PolarAreaReadout({
23779
24024
  const maxR = Math.min(cx, cy) - 20;
23780
24025
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
23781
24026
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23782
- 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: [
24027
+ 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: [
23783
24028
  [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)),
23784
24029
  arr.map((v, i) => {
23785
24030
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -23825,7 +24070,7 @@ function StepIndicatorReadout({
23825
24070
  const cy = viewH / 2 - 2;
23826
24071
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
23827
24072
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23828
- 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: [
24073
+ 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: [
23829
24074
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
23830
24075
  const x1 = pad + i * step;
23831
24076
  const x2 = pad + (i + 1) * step;
@@ -23915,8 +24160,8 @@ function BulletChartReadout({
23915
24160
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
23916
24161
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
23917
24162
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
23918
- /* @__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}` }) }),
23919
- /* @__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}` }) })
24163
+ /* @__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 } }) }),
24164
+ /* @__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 } }) })
23920
24165
  ] })
23921
24166
  ] });
23922
24167
  }
@@ -23971,7 +24216,7 @@ function LeaderboardReadout({
23971
24216
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
23972
24217
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
23973
24218
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
23974
- 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) => {
24219
+ 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) => {
23975
24220
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
23976
24221
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
23977
24222
  return /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -24022,7 +24267,7 @@ function TrafficLightReadout({
24022
24267
  style: {
24023
24268
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
24024
24269
  },
24025
- children: /* @__PURE__ */ jsxRuntime.jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
24270
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
24026
24271
  },
24027
24272
  i
24028
24273
  );
@@ -24061,7 +24306,7 @@ function TagCloudReadout({
24061
24306
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
24062
24307
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
24063
24308
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24064
- 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(
24309
+ 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(
24065
24310
  "span",
24066
24311
  {
24067
24312
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -24098,7 +24343,7 @@ function ActivityFeedReadout({
24098
24343
  const shown = events.slice(0, max);
24099
24344
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
24100
24345
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24101
- shown.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
24346
+ 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: [
24102
24347
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
24103
24348
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
24104
24349
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -24149,7 +24394,7 @@ function RatingReadout({
24149
24394
  strokeWidth: 1
24150
24395
  }
24151
24396
  ),
24152
- isEmpty ? /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsxRuntime.jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
24397
+ 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" })
24153
24398
  ]
24154
24399
  },
24155
24400
  i
@@ -24245,7 +24490,7 @@ function ChatBubbleReadout({
24245
24490
  const shown = messages.slice(0, max);
24246
24491
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
24247
24492
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24248
- 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(
24493
+ 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(
24249
24494
  "li",
24250
24495
  {
24251
24496
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -24337,7 +24582,7 @@ function ChecklistReadout({
24337
24582
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
24338
24583
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
24339
24584
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24340
- items.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
24585
+ 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: [
24341
24586
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
24342
24587
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
24343
24588
  done,
@@ -24448,11 +24693,7 @@ function PriceTagReadout({
24448
24693
  "%"
24449
24694
  ] }) : null
24450
24695
  ] }),
24451
- savings > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
24452
- "You save ",
24453
- currency,
24454
- savings
24455
- ] }) : null
24696
+ 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
24456
24697
  ] });
24457
24698
  }
24458
24699
  function SpinnerReadout({
@@ -24589,6 +24830,11 @@ function StopwatchReadout({
24589
24830
  }
24590
24831
  );
24591
24832
  }
24833
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
24834
+ low: "readout.confidence.low",
24835
+ mid: "readout.confidence.mid",
24836
+ high: "readout.confidence.high"
24837
+ };
24592
24838
  function ConfidenceMeterReadout({
24593
24839
  id,
24594
24840
  label,
@@ -24621,7 +24867,7 @@ function ConfidenceMeterReadout({
24621
24867
  Math.round(safeValue),
24622
24868
  "%"
24623
24869
  ] }),
24624
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
24870
+ /* @__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] }) })
24625
24871
  ] }),
24626
24872
  /* @__PURE__ */ jsxRuntime.jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24627
24873
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -24656,7 +24902,7 @@ function ReactionBarReadout({
24656
24902
  }
24657
24903
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
24658
24904
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24659
- 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: [
24905
+ 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: [
24660
24906
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
24661
24907
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
24662
24908
  ] }, i)) })
@@ -24689,7 +24935,7 @@ function PillGroupReadout({
24689
24935
  }
24690
24936
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
24691
24937
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24692
- 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(
24938
+ 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(
24693
24939
  "span",
24694
24940
  {
24695
24941
  className: "cdl-ip-readout-pill-group-pill",
@@ -24777,7 +25023,7 @@ function MetricsGridReadout({
24777
25023
  }
24778
25024
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
24779
25025
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24780
- 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: [
25026
+ 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: [
24781
25027
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
24782
25028
  m.value,
24783
25029
  m.unit ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -24864,7 +25110,7 @@ function IconTileReadout({
24864
25110
  }
24865
25111
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
24866
25112
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24867
- 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: [
25113
+ 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: [
24868
25114
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
24869
25115
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
24870
25116
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -24905,7 +25151,7 @@ function TokenListReadout({
24905
25151
  }
24906
25152
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
24907
25153
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24908
- 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) => {
25154
+ 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) => {
24909
25155
  const isUp = t.delta >= 0;
24910
25156
  const deltaColor = isUp ? colorUp : colorDown;
24911
25157
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -24959,7 +25205,7 @@ function MapPinReadout({
24959
25205
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
24960
25206
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
24961
25207
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
24962
- 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: [
25208
+ 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: [
24963
25209
  /* @__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 }),
24964
25210
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
24965
25211
  /* @__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)" }),
@@ -24987,9 +25233,9 @@ function PriorityBadgeReadout({
24987
25233
  if (p === "high" || p === "2") level = "high";
24988
25234
  else if (p === "low" || p === "0") level = "low";
24989
25235
  const spec = {
24990
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
24991
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
24992
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
25236
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
25237
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
25238
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
24993
25239
  };
24994
25240
  const cur = spec[level];
24995
25241
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -25002,7 +25248,7 @@ function PriorityBadgeReadout({
25002
25248
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
25003
25249
  children: [
25004
25250
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
25005
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: cur.text })
25251
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: cur.text }) })
25006
25252
  ]
25007
25253
  }
25008
25254
  ),
@@ -25041,7 +25287,7 @@ function PodiumReadout({
25041
25287
  const order = [1, 0, 2];
25042
25288
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
25043
25289
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25044
- 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) => {
25290
+ 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) => {
25045
25291
  const w = podium[rankIdx];
25046
25292
  if (!w) return null;
25047
25293
  const x = pad + colIdx * (colW + pad);
@@ -25084,7 +25330,7 @@ function PollBarReadout({
25084
25330
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
25085
25331
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
25086
25332
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25087
- 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) => {
25333
+ 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) => {
25088
25334
  const pct = Math.round(o.count / total * 100);
25089
25335
  const isWinner = o.count === maxCount && maxCount > 0;
25090
25336
  const fillColor = isWinner ? colorWinner : color;
@@ -25119,6 +25365,7 @@ function UserStackReadout({
25119
25365
  max,
25120
25366
  size
25121
25367
  }) {
25368
+ const \u5F15\u304F = use\u5B57\u5F15();
25122
25369
  const names = safeParseArray(value).map(String);
25123
25370
  const shown = names.slice(0, max);
25124
25371
  const overflow = names.length > max;
@@ -25127,7 +25374,7 @@ function UserStackReadout({
25127
25374
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
25128
25375
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
25129
25376
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25130
- 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: [
25377
+ 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: [
25131
25378
  shown.map((name, i) => /* @__PURE__ */ jsxRuntime.jsx(
25132
25379
  "span",
25133
25380
  {
@@ -25155,7 +25402,7 @@ function UserStackReadout({
25155
25402
  fontSize: `${Math.round(size * 0.35)}px`,
25156
25403
  marginLeft: `-${size * 0.3}px`
25157
25404
  },
25158
- title: `+${overflowCount} more`,
25405
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
25159
25406
  children: [
25160
25407
  "+",
25161
25408
  overflowCount
@@ -25190,7 +25437,7 @@ function CommitListReadout({
25190
25437
  const shown = commits.slice(0, max);
25191
25438
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
25192
25439
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25193
- 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: [
25440
+ 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: [
25194
25441
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
25195
25442
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
25196
25443
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -25270,7 +25517,7 @@ function EventLogReadout({
25270
25517
  };
25271
25518
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
25272
25519
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25273
- 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) => {
25520
+ 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) => {
25274
25521
  const spec = severitySpec[e.severity] ?? severitySpec.info;
25275
25522
  return /* @__PURE__ */ jsxRuntime.jsxs(
25276
25523
  "li",
@@ -25313,7 +25560,7 @@ function SearchResultReadout({
25313
25560
  const shown = hits.slice(0, max);
25314
25561
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
25315
25562
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25316
- 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: [
25563
+ 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: [
25317
25564
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
25318
25565
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
25319
25566
  h.url ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -25346,7 +25593,7 @@ function RoadmapReadout({
25346
25593
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
25347
25594
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
25348
25595
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25349
- 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: [
25596
+ 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: [
25350
25597
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
25351
25598
  /* @__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)) })
25352
25599
  ] }, i)) })
@@ -25378,7 +25625,7 @@ function WeatherForecastReadout({
25378
25625
  }
25379
25626
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
25380
25627
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25381
- 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: [
25628
+ 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: [
25382
25629
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
25383
25630
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
25384
25631
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -25422,17 +25669,14 @@ function VideoCardReadout({
25422
25669
  const shown = videos.slice(0, max);
25423
25670
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
25424
25671
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25425
- 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: [
25672
+ 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: [
25426
25673
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
25427
25674
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
25428
25675
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
25429
25676
  ] }),
25430
25677
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
25431
25678
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
25432
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
25433
- v.views,
25434
- " views"
25435
- ] })
25679
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
25436
25680
  ] })
25437
25681
  ] }, i)) })
25438
25682
  ] });
@@ -25449,7 +25693,7 @@ function OrderStatusReadout({
25449
25693
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
25450
25694
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
25451
25695
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25452
- 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) => {
25696
+ 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) => {
25453
25697
  const isDone = i < safeCurrent;
25454
25698
  const isCurrent = i === safeCurrent;
25455
25699
  const isPending = i > safeCurrent;
@@ -25499,9 +25743,9 @@ function AttendanceGridReadout({
25499
25743
  const memberArr = safeParseArray(members).map(String);
25500
25744
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
25501
25745
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25502
- 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: [
25746
+ 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: [
25503
25747
  /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
25504
- /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
25748
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.attendance.corner" }) }),
25505
25749
  memberArr.map((m, i) => /* @__PURE__ */ jsxRuntime.jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
25506
25750
  ] }) }),
25507
25751
  /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
@@ -25555,7 +25799,7 @@ function TimezoneClockReadout({
25555
25799
  }
25556
25800
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
25557
25801
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25558
- 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: [
25802
+ 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: [
25559
25803
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
25560
25804
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
25561
25805
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -25589,7 +25833,7 @@ function FormSummaryReadout({
25589
25833
  }
25590
25834
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
25591
25835
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25592
- 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: [
25836
+ 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: [
25593
25837
  /* @__PURE__ */ jsxRuntime.jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
25594
25838
  /* @__PURE__ */ jsxRuntime.jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
25595
25839
  ] }, i)) })
@@ -25622,7 +25866,7 @@ function SongQueueReadout({
25622
25866
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
25623
25867
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
25624
25868
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25625
- 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) => {
25869
+ 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) => {
25626
25870
  const isCurrent = i === safeCurrent;
25627
25871
  return /* @__PURE__ */ jsxRuntime.jsxs(
25628
25872
  "li",
@@ -25667,12 +25911,20 @@ function CalendarMonthReadout({
25667
25911
  } catch {
25668
25912
  }
25669
25913
  }
25670
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
25914
+ const weekDays = [
25915
+ "readout.weekday.0",
25916
+ "readout.weekday.1",
25917
+ "readout.weekday.2",
25918
+ "readout.weekday.3",
25919
+ "readout.weekday.4",
25920
+ "readout.weekday.5",
25921
+ "readout.weekday.6"
25922
+ ];
25671
25923
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
25672
25924
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25673
- 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: [
25925
+ 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: [
25674
25926
  monthName ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
25675
- /* @__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)) }),
25927
+ /* @__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)) }),
25676
25928
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxRuntime.jsxs(
25677
25929
  "div",
25678
25930
  {
@@ -25715,7 +25967,7 @@ function TerminalReadout({
25715
25967
  const shown = lines.slice(0, max);
25716
25968
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
25717
25969
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
25718
- 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: [
25970
+ 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: [
25719
25971
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
25720
25972
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
25721
25973
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -25814,10 +26066,11 @@ function KanbanBoardReadout({
25814
26066
  columnWidth,
25815
26067
  max
25816
26068
  }) {
26069
+ const \u5F15\u304F = use\u5B57\u5F15();
25817
26070
  const buckets = {
25818
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
25819
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
25820
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
26071
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
26072
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
26073
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
25821
26074
  };
25822
26075
  const trimmed = value.trim();
25823
26076
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -25928,13 +26181,13 @@ function KanbanBoardReadout({
25928
26181
  style: { userSelect: "none" },
25929
26182
  children: [
25930
26183
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: task.title }),
25931
- task.title.length > 18 ? `${task.title.slice(0, 17)}\u2026` : task.title
26184
+ \u6841\u3067\u7701\u304F(task.title, 18)
25932
26185
  ]
25933
26186
  }
25934
26187
  )
25935
26188
  ] }, ti);
25936
26189
  }),
25937
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
26190
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
25938
26191
  "text",
25939
26192
  {
25940
26193
  x: x + columnWidth / 2,
@@ -25943,11 +26196,7 @@ function KanbanBoardReadout({
25943
26196
  textAnchor: "middle",
25944
26197
  fill: "#64748b",
25945
26198
  style: { userSelect: "none" },
25946
- children: [
25947
- "+",
25948
- overflow,
25949
- " more"
25950
- ]
26199
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
25951
26200
  }
25952
26201
  ) : null
25953
26202
  ] }, k);
@@ -26069,7 +26318,7 @@ function TimelineVerticalReadout({
26069
26318
  style: { userSelect: "none" },
26070
26319
  children: [
26071
26320
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: ev.title }),
26072
- ev.title.length > 38 ? `${ev.title.slice(0, 37)}\u2026` : ev.title
26321
+ \u6841\u3067\u7701\u304F(ev.title, 38)
26073
26322
  ]
26074
26323
  }
26075
26324
  ),
@@ -26083,7 +26332,7 @@ function TimelineVerticalReadout({
26083
26332
  style: { userSelect: "none" },
26084
26333
  children: [
26085
26334
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: ev.description }),
26086
- ev.description.length > 44 ? `${ev.description.slice(0, 43)}\u2026` : ev.description
26335
+ \u6841\u3067\u7701\u304F(ev.description, 44)
26087
26336
  ]
26088
26337
  }
26089
26338
  ) : null
@@ -26426,7 +26675,7 @@ function StepProgressReadout({
26426
26675
  style: { userSelect: "none" },
26427
26676
  children: [
26428
26677
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: s }),
26429
- s.length > 10 ? `${s.slice(0, 9)}\u2026` : s
26678
+ \u6841\u3067\u7701\u304F(s, 10)
26430
26679
  ]
26431
26680
  }
26432
26681
  )
@@ -26487,7 +26736,7 @@ function UserPresenceReadout({
26487
26736
  fontWeight: 500,
26488
26737
  fill: "#0f172a",
26489
26738
  style: { userSelect: "none" },
26490
- children: u.name.length > 24 ? `${u.name.slice(0, 23)}\u2026` : u.name
26739
+ children: \u6841\u3067\u7701\u304F(u.name, 24)
26491
26740
  }
26492
26741
  ),
26493
26742
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -26504,7 +26753,7 @@ function UserPresenceReadout({
26504
26753
  )
26505
26754
  ] }, i);
26506
26755
  }),
26507
- overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
26756
+ overflow > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
26508
26757
  "text",
26509
26758
  {
26510
26759
  x: width / 2,
@@ -26513,11 +26762,7 @@ function UserPresenceReadout({
26513
26762
  textAnchor: "middle",
26514
26763
  fill: "#64748b",
26515
26764
  style: { userSelect: "none" },
26516
- children: [
26517
- "+",
26518
- overflow,
26519
- " more"
26520
- ]
26765
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
26521
26766
  }
26522
26767
  ) : null
26523
26768
  ]
@@ -26568,12 +26813,7 @@ function RatingThumbReadout({
26568
26813
  "\u25B2 ",
26569
26814
  upCount
26570
26815
  ] }),
26571
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
26572
- upPct,
26573
- "% up \xB7 ",
26574
- total,
26575
- " votes"
26576
- ] }),
26816
+ /* @__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 } }) }),
26577
26817
  /* @__PURE__ */ jsxRuntime.jsxs(
26578
26818
  "text",
26579
26819
  {
@@ -26658,7 +26898,7 @@ function OrgChartMiniReadout({
26658
26898
  style: { userSelect: "none" },
26659
26899
  children: [
26660
26900
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: n.name }),
26661
- n.name.length > 10 ? `${n.name.slice(0, 9)}\u2026` : n.name
26901
+ \u6841\u3067\u7701\u304F(n.name, 10)
26662
26902
  ]
26663
26903
  }
26664
26904
  ),
@@ -26748,11 +26988,7 @@ function KpiTrendTileReadout({
26748
26988
  deltaPct.toFixed(1),
26749
26989
  "%)"
26750
26990
  ] }),
26751
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
26752
- "prev ",
26753
- prev,
26754
- unit
26755
- ] }),
26991
+ /* @__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}` } }) }),
26756
26992
  history.length > 1 ? /* @__PURE__ */ jsxRuntime.jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
26757
26993
  ]
26758
26994
  }
@@ -26840,7 +27076,7 @@ function QuickPollEmojiReadout({
26840
27076
  )
26841
27077
  ] }, i);
26842
27078
  }),
26843
- /* @__PURE__ */ jsxRuntime.jsxs(
27079
+ /* @__PURE__ */ jsxRuntime.jsx(
26844
27080
  "text",
26845
27081
  {
26846
27082
  x: width - 8,
@@ -26849,10 +27085,7 @@ function QuickPollEmojiReadout({
26849
27085
  textAnchor: "end",
26850
27086
  fill: "#64748b",
26851
27087
  style: { userSelect: "none" },
26852
- children: [
26853
- "total ",
26854
- total
26855
- ]
27088
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
26856
27089
  }
26857
27090
  )
26858
27091
  ]
@@ -26987,14 +27220,8 @@ function ThreadSummaryReadout({
26987
27220
  height,
26988
27221
  children: [
26989
27222
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
26990
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
26991
- participants,
26992
- " participants"
26993
- ] }),
26994
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
26995
- "last: ",
26996
- lastAuthor
26997
- ] }),
27223
+ /* @__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 } }) }),
27224
+ /* @__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 } }) }),
26998
27225
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
26999
27226
  unread > 0 ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-thread-unread": "1", children: [
27000
27227
  /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -27025,7 +27252,7 @@ function ReadReceiptReadout({
27025
27252
  colorPending
27026
27253
  }) {
27027
27254
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
27028
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
27255
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
27029
27256
  const iconColor = status === 2 ? colorRead : colorPending;
27030
27257
  const width = 180;
27031
27258
  const height = 32;
@@ -27060,7 +27287,7 @@ function ReadReceiptReadout({
27060
27287
  }
27061
27288
  ) : null
27062
27289
  ] }),
27063
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
27290
+ /* @__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 }) })
27064
27291
  ]
27065
27292
  }
27066
27293
  )
@@ -27074,7 +27301,7 @@ function PasswordStrengthReadout({
27074
27301
  colorWeak
27075
27302
  }) {
27076
27303
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
27077
- const labels = ["too weak", "weak", "fair", "good", "strong"];
27304
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
27078
27305
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
27079
27306
  const barW = 46;
27080
27307
  const gap = 6;
@@ -27118,7 +27345,7 @@ function PasswordStrengthReadout({
27118
27345
  textAnchor: "end",
27119
27346
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
27120
27347
  style: { userSelect: "none" },
27121
- children: labels[level]
27348
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: labels[level] })
27122
27349
  }
27123
27350
  )
27124
27351
  ]
@@ -27251,9 +27478,9 @@ function FileDropzoneReadout({
27251
27478
  ),
27252
27479
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 54, y: 34, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
27253
27480
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: filename }),
27254
- filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
27481
+ \u6841\u3067\u7701\u304F(filename, 26)
27255
27482
  ] }),
27256
- /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
27483
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
27257
27484
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
27258
27485
  /* @__PURE__ */ jsxRuntime.jsx(
27259
27486
  "text",
@@ -27265,7 +27492,7 @@ function FileDropzoneReadout({
27265
27492
  textAnchor: "middle",
27266
27493
  fill: "#64748b",
27267
27494
  style: { userSelect: "none" },
27268
- children: "\u2B06 Drop file here"
27495
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.drop" })
27269
27496
  }
27270
27497
  ),
27271
27498
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -27277,7 +27504,7 @@ function FileDropzoneReadout({
27277
27504
  textAnchor: "middle",
27278
27505
  fill: "#94a3b8",
27279
27506
  style: { userSelect: "none" },
27280
- children: "or click to browse"
27507
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.dropzone.browse" })
27281
27508
  }
27282
27509
  )
27283
27510
  ] })
@@ -27312,7 +27539,7 @@ function LogStreamReadout({
27312
27539
  }
27313
27540
  }
27314
27541
  const shown = rows.slice(-5);
27315
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
27542
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
27316
27543
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
27317
27544
  const width = 300;
27318
27545
  const rowH = 18;
@@ -27330,7 +27557,7 @@ function LogStreamReadout({
27330
27557
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 0, y: 0, width, height, fill: "#0f172a", rx: 4 }),
27331
27558
  shown.map((r, i) => {
27332
27559
  const y = 4 + i * rowH;
27333
- const displayMsg = r.msg.length > 24 ? `${r.msg.slice(0, 23)}\u2026` : r.msg;
27560
+ const displayMsg = \u6841\u3067\u7701\u304F(r.msg, 24);
27334
27561
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-log-row": i, children: [
27335
27562
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 6, y: y + 12, fontSize: 9, fill: "#94a3b8", fontFamily: "monospace", style: { userSelect: "none" }, children: r.ts }),
27336
27563
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 62, y: y + 3, width: 26, height: 12, fill: levelColors[r.level] ?? "#94a3b8", rx: 2 }),
@@ -27345,7 +27572,7 @@ function LogStreamReadout({
27345
27572
  fill: "#ffffff",
27346
27573
  fontFamily: "monospace",
27347
27574
  style: { userSelect: "none" },
27348
- children: levelLabels[r.level] ?? "INF"
27575
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
27349
27576
  }
27350
27577
  ),
27351
27578
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -27430,7 +27657,7 @@ function AlertBannerReadout({
27430
27657
  style: { userSelect: "none" },
27431
27658
  children: [
27432
27659
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: message }),
27433
- message.length > 32 ? `${message.slice(0, 31)}\u2026` : message
27660
+ \u6841\u3067\u7701\u304F(message, 32)
27434
27661
  ]
27435
27662
  }
27436
27663
  )
@@ -27500,7 +27727,7 @@ function ServiceHealthReadout({
27500
27727
  style: { userSelect: "none" },
27501
27728
  children: [
27502
27729
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: s.name }),
27503
- s.name.length > 10 ? `${s.name.slice(0, 9)}\u2026` : s.name
27730
+ \u6841\u3067\u7701\u304F(s.name, 10)
27504
27731
  ]
27505
27732
  }
27506
27733
  )
@@ -27539,10 +27766,10 @@ function CartSummaryReadout({
27539
27766
  if (!Number.isFinite(shipping)) shipping = 0;
27540
27767
  if (!Number.isFinite(total)) total = 0;
27541
27768
  const rows = [
27542
- { l: "Items", v: `${items}`, bold: false },
27543
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27544
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27545
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
27769
+ { l: "readout.cart.items", v: `${items}`, bold: false },
27770
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27771
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27772
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
27546
27773
  ];
27547
27774
  const width = 260;
27548
27775
  const rowH = 20;
@@ -27572,7 +27799,7 @@ function CartSummaryReadout({
27572
27799
  fontWeight: isTotal ? 700 : 500,
27573
27800
  fill: isTotal ? colorTotal : "#334155",
27574
27801
  style: { userSelect: "none" },
27575
- children: r.l
27802
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: r.l })
27576
27803
  }
27577
27804
  ),
27578
27805
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -27620,6 +27847,8 @@ function PricingTierReadout({
27620
27847
  }
27621
27848
  }
27622
27849
  if (!Number.isFinite(price)) price = 0;
27850
+ const \u5F15\u304F = use\u5B57\u5F15();
27851
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
27623
27852
  const width = 240;
27624
27853
  const height = 176;
27625
27854
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -27644,7 +27873,7 @@ function PricingTierReadout({
27644
27873
  textAnchor: "middle",
27645
27874
  fill: "#ffffff",
27646
27875
  style: { userSelect: "none" },
27647
- children: planName || "Plan"
27876
+ children: \u898B\u305B\u308B\u540D\u524D
27648
27877
  }
27649
27878
  ),
27650
27879
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -27672,12 +27901,12 @@ function PricingTierReadout({
27672
27901
  textAnchor: "middle",
27673
27902
  fill: "#64748b",
27674
27903
  style: { userSelect: "none" },
27675
- children: "per month"
27904
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.pricing.perMonth" })
27676
27905
  }
27677
27906
  ),
27678
27907
  features.slice(0, 3).map((f, i) => {
27679
27908
  const y = 96 + i * 18;
27680
- const displayF = f.length > 24 ? `${f.slice(0, 23)}\u2026` : f;
27909
+ const displayF = \u6841\u3067\u7701\u304F(f, 24);
27681
27910
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-tier-feature": i, children: [
27682
27911
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: 16, y, fontSize: 11, fill: colorAccent, style: { userSelect: "none" }, children: "\u2713" }),
27683
27912
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: 30, y, fontSize: 11, fill: "#0f172a", style: { userSelect: "none" }, children: [
@@ -27687,7 +27916,7 @@ function PricingTierReadout({
27687
27916
  ] }, i);
27688
27917
  }),
27689
27918
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
27690
- /* @__PURE__ */ jsxRuntime.jsxs(
27919
+ /* @__PURE__ */ jsxRuntime.jsx(
27691
27920
  "text",
27692
27921
  {
27693
27922
  x: width / 2,
@@ -27697,10 +27926,7 @@ function PricingTierReadout({
27697
27926
  textAnchor: "middle",
27698
27927
  fill: "#ffffff",
27699
27928
  style: { userSelect: "none" },
27700
- children: [
27701
- "Get ",
27702
- planName || "Plan"
27703
- ]
27929
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
27704
27930
  }
27705
27931
  )
27706
27932
  ]
@@ -27766,12 +27992,12 @@ function CouponCodeReadout({
27766
27992
  fill: applied ? colorApplied : "#94a3b8",
27767
27993
  fontFamily: "monospace",
27768
27994
  style: { userSelect: "none" },
27769
- children: code || "ENTER CODE"
27995
+ children: code || /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.placeholder" })
27770
27996
  }
27771
27997
  ),
27772
27998
  applied ? /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-applied": "1", children: [
27773
27999
  /* @__PURE__ */ jsxRuntime.jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
27774
- /* @__PURE__ */ jsxRuntime.jsxs(
28000
+ /* @__PURE__ */ jsxRuntime.jsx(
27775
28001
  "text",
27776
28002
  {
27777
28003
  x: boxW + 57,
@@ -27781,11 +28007,7 @@ function CouponCodeReadout({
27781
28007
  textAnchor: "middle",
27782
28008
  fill: "#ffffff",
27783
28009
  style: { userSelect: "none" },
27784
- children: [
27785
- "-",
27786
- discountPct,
27787
- "% off"
27788
- ]
28010
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
27789
28011
  }
27790
28012
  )
27791
28013
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -27800,7 +28022,7 @@ function CouponCodeReadout({
27800
28022
  textAnchor: "middle",
27801
28023
  fill: "#ffffff",
27802
28024
  style: { userSelect: "none" },
27803
- children: "Apply"
28025
+ children: /* @__PURE__ */ jsxRuntime.jsx(\u5B57, { k: "readout.coupon.apply" })
27804
28026
  }
27805
28027
  )
27806
28028
  ] })
@@ -27835,6 +28057,7 @@ function ArticlePreviewReadout({
27835
28057
  const width = 300;
27836
28058
  const height = 116;
27837
28059
  const thumbW = 80;
28060
+ const [\u629C\u7C8B\u306E\u4E00\u884C\u76EE, \u629C\u7C8B\u306E\u6B8B\u308A] = \u6841\u3067\u5272\u308B(excerpt, 28);
27838
28061
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "cdl-ip-item cdl-ip-readout-article-preview", "data-cdl-readout": id, children: [
27839
28062
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "cdl-ip-label", children: label }),
27840
28063
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -27871,19 +28094,16 @@ function ArticlePreviewReadout({
27871
28094
  style: { userSelect: "none" },
27872
28095
  children: [
27873
28096
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: title }),
27874
- title.length > 26 ? `${title.slice(0, 25)}\u2026` : title
28097
+ \u6841\u3067\u7701\u304F(title, 26)
27875
28098
  ]
27876
28099
  }
27877
28100
  ),
27878
28101
  /* @__PURE__ */ jsxRuntime.jsxs("text", { x: thumbW + 20, y: 44, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: [
27879
28102
  /* @__PURE__ */ jsxRuntime.jsx("title", { children: excerpt }),
27880
- excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
27881
- ] }),
27882
- /* @__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) }),
27883
- /* @__PURE__ */ jsxRuntime.jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
27884
- "by ",
27885
- author
28103
+ \u629C\u7C8B\u306E\u4E00\u884C\u76EE
27886
28104
  ] }),
28105
+ /* @__PURE__ */ jsxRuntime.jsx("text", { x: thumbW + 20, y: 60, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: \u6841\u3067\u7701\u304F(\u629C\u7C8B\u306E\u6B8B\u308A, 28) }),
28106
+ /* @__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 } }) }),
27887
28107
  /* @__PURE__ */ jsxRuntime.jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
27888
28108
  ]
27889
28109
  }
@@ -27934,7 +28154,7 @@ function TocNavReadout({
27934
28154
  shown.map((it, i) => {
27935
28155
  const y = 4 + i * rowH;
27936
28156
  const indent = 12 + it.level * 16;
27937
- const displayT = it.title.length > 30 ? `${it.title.slice(0, 29)}\u2026` : it.title;
28157
+ const displayT = \u6841\u3067\u7701\u304F(it.title, 30);
27938
28158
  return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-toc-item": i, children: [
27939
28159
  it.active ? /* @__PURE__ */ jsxRuntime.jsx("rect", { x: 4, y, width: 3, height: rowH - 4, fill: colorActive, rx: 1 }) : null,
27940
28160
  /* @__PURE__ */ jsxRuntime.jsxs(