@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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useMemo, useEffect, useState, useSyncExternalStore, useRef, useCallback, useLayoutEffect, useId, createElement } from 'react';
1
+ import { createContext, useMemo, useEffect, useState, useSyncExternalStore, useRef, useCallback, useLayoutEffect, useId, createElement, useContext } from 'react';
2
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
3
 
4
4
  // src/reactive/internal.ts
@@ -423,7 +423,147 @@ var en = {
423
423
  /** `shape-api-gateway` の 2 行目の宛先 */
424
424
  "apiGateway.orders": "/orders",
425
425
  /** `shape-api-gateway` の 3 行目の宛先 */
426
- "apiGateway.session": "/session"
426
+ "apiGateway.session": "/session",
427
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
428
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
429
+ /** 配列を描く読み出しで、値が空の時の字 */
430
+ "readout.empty": "empty",
431
+ /** `sparkline` で点がまだ無い時の字 */
432
+ "readout.sparkline.waiting": "waiting",
433
+ /** 時の流れの入力欄の速さ */
434
+ "input.timeline.speed": "{speed}x",
435
+ /** 時の流れの入力欄の経過と長さ (秒) */
436
+ "input.timeline.time": "{t}s / {d}s",
437
+ /** `sequence-timeline` の点の見出し */
438
+ "readout.sequenceTimeline.title": "{name}: t={t}",
439
+ /** `bubble-chart` の泡の見出し */
440
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
441
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
442
+ "readout.calendarHeatmap.title": "day {i}: {v}",
443
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
444
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
445
+ /** `slope` の左の目盛 */
446
+ "readout.slope.before": "before",
447
+ /** `slope` の右の目盛 */
448
+ "readout.slope.after": "after",
449
+ /** `bullet-chart` の実績の見出し */
450
+ "readout.bulletChart.actual": "actual: {v}",
451
+ /** `bullet-chart` の目標の見出し */
452
+ "readout.bulletChart.target": "target: {v}",
453
+ /** `rating` の塗った星の見出し */
454
+ "readout.rating.full": "full",
455
+ /** `rating` の半分塗った星の見出し */
456
+ "readout.rating.half": "half",
457
+ /** `rating` の塗っていない星の見出し */
458
+ "readout.rating.empty": "empty",
459
+ /** `price-tag` の割引額 */
460
+ "readout.priceTag.save": "You save {amount}",
461
+ /** `confidence-meter` の低い帯の名前 */
462
+ "readout.confidence.low": "low",
463
+ /** `confidence-meter` の中ほどの帯の名前 */
464
+ "readout.confidence.mid": "mid",
465
+ /** `confidence-meter` の高い帯の名前 */
466
+ "readout.confidence.high": "high",
467
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
468
+ "readout.more": "+{n} more",
469
+ /** `video-card` の再生数 */
470
+ "readout.videoCard.views": "{v} views",
471
+ /** `attendance-grid` の角の見出し */
472
+ "readout.attendance.corner": "day",
473
+ /** `calendar-month` の曜日 (日曜) */
474
+ "readout.weekday.0": "Sun",
475
+ /** `calendar-month` の曜日 (月曜) */
476
+ "readout.weekday.1": "Mon",
477
+ /** `calendar-month` の曜日 (火曜) */
478
+ "readout.weekday.2": "Tue",
479
+ /** `calendar-month` の曜日 (水曜) */
480
+ "readout.weekday.3": "Wed",
481
+ /** `calendar-month` の曜日 (木曜) */
482
+ "readout.weekday.4": "Thu",
483
+ /** `calendar-month` の曜日 (金曜) */
484
+ "readout.weekday.5": "Fri",
485
+ /** `calendar-month` の曜日 (土曜) */
486
+ "readout.weekday.6": "Sat",
487
+ /** `rating-thumb` の賛成の割合と票数 */
488
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
489
+ /** `kpi-trend-tile` の前の期間の値 */
490
+ "readout.kpiTrend.prev": "prev {v}",
491
+ /** `quick-poll-emoji` の票の合計 */
492
+ "readout.poll.total": "total {n}",
493
+ /** `thread-summary` の参加者の数 */
494
+ "readout.thread.participants": "{n} participants",
495
+ /** `thread-summary` の最後に書いた人 */
496
+ "readout.thread.last": "last: {name}",
497
+ /** `read-receipt` の送信した段 */
498
+ "readout.readReceipt.sent": "sent",
499
+ /** `read-receipt` の相手に届いた段 */
500
+ "readout.readReceipt.delivered": "delivered",
501
+ /** `read-receipt` の読まれた段 */
502
+ "readout.readReceipt.read": "read",
503
+ /** `password-strength` の段階 0 */
504
+ "readout.password.0": "too weak",
505
+ /** `password-strength` の段階 1 */
506
+ "readout.password.1": "weak",
507
+ /** `password-strength` の段階 2 */
508
+ "readout.password.2": "fair",
509
+ /** `password-strength` の段階 3 */
510
+ "readout.password.3": "good",
511
+ /** `password-strength` の段階 4 */
512
+ "readout.password.4": "strong",
513
+ /** `file-dropzone` で取り込んだ後の字 */
514
+ "readout.dropzone.uploaded": "uploaded",
515
+ /** `file-dropzone` の空の時の 1 行目 */
516
+ "readout.dropzone.drop": "\u2B06 Drop file here",
517
+ /** `file-dropzone` の空の時の 2 行目 */
518
+ "readout.dropzone.browse": "or click to browse",
519
+ /** `log-stream` の重さ 0 (調べるための詳細) */
520
+ "readout.log.0": "DBG",
521
+ /** `log-stream` の重さ 1 (知らせ) */
522
+ "readout.log.1": "INF",
523
+ /** `log-stream` の重さ 2 (警告) */
524
+ "readout.log.2": "WRN",
525
+ /** `log-stream` の重さ 3 (異常) */
526
+ "readout.log.3": "ERR",
527
+ /** `cart-summary` の点数 */
528
+ "readout.cart.items": "Items",
529
+ /** `cart-summary` の小計 */
530
+ "readout.cart.subtotal": "Subtotal",
531
+ /** `cart-summary` の送料 */
532
+ "readout.cart.shipping": "Shipping",
533
+ /** `cart-summary` の合計 */
534
+ "readout.cart.total": "Total",
535
+ /** `pricing-tier` で名前が空の時の名前 */
536
+ "readout.pricing.plan": "Plan",
537
+ /** `pricing-tier` の価格の後ろ */
538
+ "readout.pricing.perMonth": "per month",
539
+ /** `pricing-tier` の押す札 */
540
+ "readout.pricing.get": "Get {name}",
541
+ /** `coupon-code` で番号が空の時の字 */
542
+ "readout.coupon.placeholder": "ENTER CODE",
543
+ /** `coupon-code` の割引の割合 */
544
+ "readout.coupon.off": "-{pct}% off",
545
+ /** `coupon-code` の押す札 */
546
+ "readout.coupon.apply": "Apply",
547
+ /** `article-preview` の書いた人 */
548
+ "readout.article.by": "by {author}",
549
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
550
+ "readout.priority.high": "HIGH",
551
+ /** `priority-badge` の中ほどの優先度の表示 */
552
+ "readout.priority.med": "MED",
553
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
554
+ "readout.priority.low": "LOW",
555
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
556
+ "readout.kanban.todo": "Todo",
557
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
558
+ "readout.kanban.inprogress": "In Progress",
559
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
560
+ "readout.kanban.done": "Done",
561
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
562
+ "readout.trafficLight.red": "red",
563
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
564
+ "readout.trafficLight.yellow": "yellow",
565
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
566
+ "readout.trafficLight.green": "green"
427
567
  };
428
568
  var ja = {
429
569
  "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
@@ -459,13 +599,85 @@ var ja = {
459
599
  "apiGateway.delete": "DELETE",
460
600
  "apiGateway.users": "/\u5229\u7528\u8005",
461
601
  "apiGateway.orders": "/\u6CE8\u6587",
462
- "apiGateway.session": "/\u63A5\u7D9A"
602
+ "apiGateway.session": "/\u63A5\u7D9A",
603
+ "readout.empty": "\u306A\u3057",
604
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
605
+ "input.timeline.speed": "{speed}\u500D",
606
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
607
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
608
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
609
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
610
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
611
+ "readout.slope.before": "\u524D",
612
+ "readout.slope.after": "\u5F8C",
613
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
614
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
615
+ "readout.rating.full": "\u6E80",
616
+ "readout.rating.half": "\u534A\u5206",
617
+ "readout.rating.empty": "\u7A7A",
618
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
619
+ "readout.confidence.low": "\u4F4E",
620
+ "readout.confidence.mid": "\u4E2D",
621
+ "readout.confidence.high": "\u9AD8",
622
+ "readout.more": "\u307B\u304B {n}",
623
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
624
+ "readout.attendance.corner": "\u65E5",
625
+ "readout.weekday.0": "\u65E5",
626
+ "readout.weekday.1": "\u6708",
627
+ "readout.weekday.2": "\u706B",
628
+ "readout.weekday.3": "\u6C34",
629
+ "readout.weekday.4": "\u6728",
630
+ "readout.weekday.5": "\u91D1",
631
+ "readout.weekday.6": "\u571F",
632
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
633
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
634
+ "readout.poll.total": "\u5408\u8A08 {n}",
635
+ "readout.thread.participants": "{n} \u4EBA",
636
+ "readout.thread.last": "\u6700\u5F8C: {name}",
637
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
638
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
639
+ "readout.readReceipt.read": "\u65E2\u8AAD",
640
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
641
+ "readout.password.1": "\u5F31\u3044",
642
+ "readout.password.2": "\u666E\u901A",
643
+ "readout.password.3": "\u826F\u3044",
644
+ "readout.password.4": "\u5F37\u3044",
645
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
646
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
647
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
648
+ "readout.log.0": "\u8A73\u7D30",
649
+ "readout.log.1": "\u60C5\u5831",
650
+ "readout.log.2": "\u8B66\u544A",
651
+ "readout.log.3": "\u7570\u5E38",
652
+ "readout.cart.items": "\u70B9\u6570",
653
+ "readout.cart.subtotal": "\u5C0F\u8A08",
654
+ "readout.cart.shipping": "\u9001\u6599",
655
+ "readout.cart.total": "\u5408\u8A08",
656
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
657
+ "readout.pricing.perMonth": "\u6708\u984D",
658
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
659
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
660
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
661
+ "readout.coupon.apply": "\u9069\u7528",
662
+ "readout.article.by": "\u6587: {author}",
663
+ "readout.priority.high": "\u9AD8",
664
+ "readout.priority.med": "\u4E2D",
665
+ "readout.priority.low": "\u4F4E",
666
+ "readout.kanban.todo": "\u672A\u7740\u624B",
667
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
668
+ "readout.kanban.done": "\u5B8C\u4E86",
669
+ "readout.trafficLight.red": "\u8D64",
670
+ "readout.trafficLight.yellow": "\u9EC4",
671
+ "readout.trafficLight.green": "\u7DD1"
463
672
  };
464
673
  var CDL_TEXT = { en, ja };
465
674
  function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
466
675
  const \u8A00\u8A9E = lang ?? "en";
467
676
  return (key) => CDL_TEXT[\u8A00\u8A9E][key];
468
677
  }
678
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
679
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
680
+ }
469
681
 
470
682
  // src/formula/ast.ts
471
683
  var ALLOWED_MATH_FNS = /* @__PURE__ */ new Set([
@@ -1377,6 +1589,83 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1377
1589
  }
1378
1590
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1379
1591
  }
1592
+
1593
+ // src/kinds/row-align.ts
1594
+ var GENERIC_ROW_LEFT_SIZE_PX = 18;
1595
+ var GENERIC_ROW_RIGHT_SIZE_PX = 21;
1596
+ var MONO_ADVANCE_RATIO = 0.6;
1597
+ var STORAGE_CHAR_ADVANCE_PX = 26 * MONO_ADVANCE_RATIO;
1598
+ var ROW_PAD_X_PX = 26;
1599
+ var ROW_COL_GAP_PX = 16;
1600
+ var STORAGE_COL_GAP_PX = 32;
1601
+ var ROW_RIGHT_PAD_PX = 26;
1602
+ var DELIMITERS = [" -> ", " \u2192 ", " = ", ": ", ":"];
1603
+ function splitRow(row) {
1604
+ for (const d of DELIMITERS) {
1605
+ const idx = row.indexOf(d);
1606
+ if (idx > 0) {
1607
+ return {
1608
+ left: row.slice(0, idx).trim(),
1609
+ right: row.slice(idx + d.length).trim(),
1610
+ split: true
1611
+ };
1612
+ }
1613
+ }
1614
+ return { left: row.trim(), right: "", split: false };
1615
+ }
1616
+ function rowColumnWidth(text, size, mono) {
1617
+ return mono ? displayWidth(text) * size * MONO_ADVANCE_RATIO : textWidth(text, size);
1618
+ }
1619
+ function displayWidth(text) {
1620
+ let w = 0;
1621
+ for (const ch of text) {
1622
+ const code = ch.codePointAt(0) ?? 0;
1623
+ w += code >= 32 && code <= 126 ? 1 : 2;
1624
+ }
1625
+ return w;
1626
+ }
1627
+ function \u6841\u3067\u5272\u308B(text, \u6841) {
1628
+ let w = 0;
1629
+ let \u53D6\u3063\u305F = "";
1630
+ for (const ch of text) {
1631
+ const code = ch.codePointAt(0) ?? 0;
1632
+ const \u5B57\u306E\u6841 = code >= 32 && code <= 126 ? 1 : 2;
1633
+ if (w + \u5B57\u306E\u6841 > \u6841) break;
1634
+ w += \u5B57\u306E\u6841;
1635
+ \u53D6\u3063\u305F += ch;
1636
+ }
1637
+ return [\u53D6\u3063\u305F, text.slice(\u53D6\u3063\u305F.length)];
1638
+ }
1639
+ function \u6841\u3067\u7701\u304F(text, \u4E0A\u9650) {
1640
+ if (displayWidth(text) <= \u4E0A\u9650) return text;
1641
+ return `${\u6841\u3067\u5272\u308B(text, \u4E0A\u9650 - 1)[0]}\u2026`;
1642
+ }
1643
+ function requiredRowsWidth(rows, kind) {
1644
+ if (!rows || rows.length === 0) return 0;
1645
+ const splits = rows.map(splitRow);
1646
+ const \u4E00\u756A\u5E83\u3044 = (\u53D6\u308B) => splits.reduce((m, s) => Math.max(m, \u53D6\u308B(s)), 0);
1647
+ const storage = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, 26, true)) + STORAGE_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, 26, true)) + ROW_RIGHT_PAD_PX;
1648
+ const generic = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, GENERIC_ROW_LEFT_SIZE_PX, false)) + ROW_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, GENERIC_ROW_RIGHT_SIZE_PX, true)) + ROW_RIGHT_PAD_PX;
1649
+ if (kind === void 0) return Math.ceil(Math.max(storage, generic));
1650
+ return Math.ceil(kind === "storage" ? storage : generic);
1651
+ }
1652
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = createContext("en");
1653
+ function use\u5B57\u5F15() {
1654
+ const lang = useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
1655
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
1656
+ }
1657
+ function \u5B57({ k, v }) {
1658
+ const \u5F15\u304F = use\u5B57\u5F15();
1659
+ return /* @__PURE__ */ jsx(Fragment, { children: \u5F15\u304F(k, v) });
1660
+ }
1661
+ function \u5B57\u306E\u898B\u51FA\u3057({
1662
+ k,
1663
+ v,
1664
+ \u524D = ""
1665
+ }) {
1666
+ const \u5F15\u304F = use\u5B57\u5F15();
1667
+ return /* @__PURE__ */ jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
1668
+ }
1380
1669
  function createInteractiveSignalsAccessor(diagram2, signals, formula, scroll) {
1381
1670
  const kindByInputId = /* @__PURE__ */ new Map();
1382
1671
  for (const inp of diagram2.inputs ?? []) {
@@ -1691,20 +1980,23 @@ function useInteractiveIntegration(diagram2, options = {}) {
1691
1980
  const readouts = diagram2.readouts ?? [];
1692
1981
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
1693
1982
  return null;
1694
- return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1695
- inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1696
- formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
1697
- FormulaReadout,
1698
- {
1699
- id: f.id,
1700
- expression: f.expression,
1701
- value: stateOverrides[f.id]
1702
- },
1703
- f.id
1704
- )) }),
1705
- scrolls.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1706
- readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1707
- ] });
1983
+ return (
1984
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
1985
+ /* @__PURE__ */ jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram2.lang), children: /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1986
+ inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1987
+ formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
1988
+ FormulaReadout,
1989
+ {
1990
+ id: f.id,
1991
+ expression: f.expression,
1992
+ value: stateOverrides[f.id]
1993
+ },
1994
+ f.id
1995
+ )) }),
1996
+ scrolls.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
1997
+ readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1998
+ ] }) })
1999
+ );
1708
2000
  }, [diagram2, signals, stateOverrides, mergedStateValues]);
1709
2001
  return { stateOverrides, panel, svgRef, containerRef };
1710
2002
  }
@@ -3565,7 +3857,7 @@ function SparklineReadout({
3565
3857
  if (points.length < 2) {
3566
3858
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
3567
3859
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
3568
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
3860
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? /* @__PURE__ */ jsx(\u5B57, { k: "readout.sparkline.waiting" }) : "\u2014" }),
3569
3861
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
3570
3862
  ] });
3571
3863
  }
@@ -3828,27 +4120,24 @@ function TimelineWidget({
3828
4120
  className: "cdl-ip-timeline-scrubber"
3829
4121
  }
3830
4122
  ),
3831
- /* @__PURE__ */ jsxs(
4123
+ /* @__PURE__ */ jsx(
3832
4124
  "button",
3833
4125
  {
3834
4126
  type: "button",
3835
4127
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
3836
4128
  onClick: cycleSpeed,
3837
4129
  "aria-label": "speed",
3838
- children: [
3839
- speed,
3840
- "x"
3841
- ]
4130
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
3842
4131
  }
3843
4132
  )
3844
4133
  ] }),
3845
- /* @__PURE__ */ jsxs("span", { className: "cdl-ip-timeline-time", children: [
3846
- (progress * (input.duration / 1e3)).toFixed(1),
3847
- "s /",
3848
- " ",
3849
- (input.duration / 1e3).toFixed(1),
3850
- "s"
3851
- ] })
4134
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsx(
4135
+ \u5B57,
4136
+ {
4137
+ k: "input.timeline.time",
4138
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
4139
+ }
4140
+ ) })
3852
4141
  ] });
3853
4142
  }
3854
4143
  function RangeWidget({
@@ -4086,7 +4375,7 @@ function ArrayBarReadout({
4086
4375
  const range = max - min || 1;
4087
4376
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
4088
4377
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4089
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : arr.map((v, i) => {
4378
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : arr.map((v, i) => {
4090
4379
  const h = Math.max(0, Math.min(1, (v - min) / range));
4091
4380
  return /* @__PURE__ */ jsx(
4092
4381
  "span",
@@ -4163,7 +4452,7 @@ function StackedBarReadout({
4163
4452
  const range = max - min || 1;
4164
4453
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
4165
4454
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4166
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : Array.from({ length: n }).map((_, i) => {
4455
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : Array.from({ length: n }).map((_, i) => {
4167
4456
  const va = arrA[i] ?? 0;
4168
4457
  const vb = arrB[i] ?? 0;
4169
4458
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -4258,7 +4547,7 @@ function MatrixReadout({
4258
4547
  };
4259
4548
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
4260
4549
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4261
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx(
4550
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx(
4262
4551
  "svg",
4263
4552
  {
4264
4553
  className: "cdl-ip-readout-matrix-svg",
@@ -4316,7 +4605,7 @@ function ProgressGroupReadout({
4316
4605
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
4317
4606
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
4318
4607
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4319
- arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4608
+ arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
4320
4609
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
4321
4610
  const rowLabel = labelArr[i] ?? String(i + 1);
4322
4611
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -4378,7 +4667,7 @@ function SequenceTimelineReadout({
4378
4667
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
4379
4668
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
4380
4669
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4381
- events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(
4670
+ events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(
4382
4671
  "svg",
4383
4672
  {
4384
4673
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -4392,7 +4681,7 @@ function SequenceTimelineReadout({
4392
4681
  events.map((e, i) => {
4393
4682
  const x = xFor(e.t);
4394
4683
  return /* @__PURE__ */ jsxs("g", { "data-cdl-event-marker": e.name, children: [
4395
- /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `${e.name}: t=${e.t}` }) }),
4684
+ /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.sequenceTimeline.title", v: { name: e.name, t: e.t } }) }),
4396
4685
  /* @__PURE__ */ jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
4397
4686
  /* @__PURE__ */ jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
4398
4687
  ] }, i);
@@ -4435,7 +4724,7 @@ function RadarReadout({
4435
4724
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
4436
4725
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
4437
4726
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4438
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4727
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4439
4728
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx(
4440
4729
  "polygon",
4441
4730
  {
@@ -4497,14 +4786,14 @@ function BubbleChartReadout({
4497
4786
  const maxCircleR = 18;
4498
4787
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
4499
4788
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4500
- bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4789
+ bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4501
4790
  /* @__PURE__ */ jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4502
4791
  /* @__PURE__ */ jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4503
4792
  bubbles.map((b, i) => {
4504
4793
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
4505
4794
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
4506
4795
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
4507
- return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `(${b.x}, ${b.y}) r=${b.r}` }) }, i);
4796
+ return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bubbleChart.title", v: { x: b.x, y: b.y, r: b.r } }) }, i);
4508
4797
  })
4509
4798
  ] })
4510
4799
  ] });
@@ -4527,7 +4816,7 @@ function DonutReadout({
4527
4816
  let acc = 0;
4528
4817
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
4529
4818
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4530
- arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4819
+ arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
4531
4820
  const from = acc;
4532
4821
  const to = acc + v / total;
4533
4822
  acc = to;
@@ -4588,7 +4877,7 @@ function CalendarHeatmapReadout({
4588
4877
  height: cellSize,
4589
4878
  rx: 2,
4590
4879
  fill,
4591
- children: /* @__PURE__ */ jsx("title", { children: `day ${i}: ${v}` })
4880
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
4592
4881
  },
4593
4882
  i
4594
4883
  );
@@ -4708,7 +4997,7 @@ function CandlestickReadout({
4708
4997
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
4709
4998
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
4710
4999
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4711
- candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
5000
+ candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
4712
5001
  const cx = pad + i * (candleW + 3) + candleW / 2;
4713
5002
  const yHigh = yFor(cd.h);
4714
5003
  const yLow = yFor(cd.l);
@@ -4729,7 +5018,7 @@ function CandlestickReadout({
4729
5018
  height: bodyH,
4730
5019
  fill: isUp ? color : color,
4731
5020
  fillOpacity: isUp ? 1 : 0.85,
4732
- children: /* @__PURE__ */ jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
5021
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.candlestick.title", v: { o: cd.o, h: cd.h, l: cd.l, c: cd.c } })
4733
5022
  }
4734
5023
  )
4735
5024
  ] }, i);
@@ -4763,7 +5052,7 @@ function VennReadout({
4763
5052
  const cxB = viewW / 2 + gap / 2;
4764
5053
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
4765
5054
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4766
- sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5055
+ sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4767
5056
  /* @__PURE__ */ jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
4768
5057
  /* @__PURE__ */ jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
4769
5058
  /* @__PURE__ */ jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -4814,11 +5103,11 @@ function SlopeReadout({
4814
5103
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
4815
5104
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
4816
5105
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4817
- slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5106
+ slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
4818
5107
  /* @__PURE__ */ jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4819
5108
  /* @__PURE__ */ jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4820
- /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
4821
- /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
5109
+ /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.before" }) }),
5110
+ /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.after" }) }),
4822
5111
  slopes.map((s, i) => {
4823
5112
  const yB = yFor(s.before);
4824
5113
  const yA = yFor(s.after);
@@ -4865,7 +5154,7 @@ function FunnelReadout({
4865
5154
  const [bR, bG, bB] = hexToRgb(colorBottom);
4866
5155
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
4867
5156
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4868
- stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
5157
+ stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
4869
5158
  const ratio = i / Math.max(1, stages.length - 1);
4870
5159
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
4871
5160
  const yTop = i * stageH + 2;
@@ -4927,7 +5216,7 @@ function GanttReadout({
4927
5216
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
4928
5217
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
4929
5218
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4930
- tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
5219
+ tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
4931
5220
  const y = pad + i * rowH;
4932
5221
  const x1 = xFor(t.start);
4933
5222
  const x2 = xFor(t.start + t.duration);
@@ -5018,7 +5307,7 @@ function TreemapReadout({
5018
5307
  }
5019
5308
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
5020
5309
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5021
- rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
5310
+ rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
5022
5311
  /* @__PURE__ */ jsx("rect", { x: r.x + 1, y: r.y + 1, width: Math.max(0, r.w - 2), height: Math.max(0, r.h - 2), fill: colors[i % colors.length] ?? "#94a3b8", rx: 2, children: /* @__PURE__ */ jsx("title", { children: `${r.name}: ${r.size}` }) }),
5023
5312
  r.w > 40 && r.h > 20 ? /* @__PURE__ */ jsx("text", { x: r.x + 6, y: r.y + 14, fontSize: 10, fill: "#fff", fontWeight: 600, children: r.name }) : null
5024
5313
  ] }, i)) })
@@ -5084,7 +5373,7 @@ function SankeyReadout({
5084
5373
  const rightUsed = {};
5085
5374
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
5086
5375
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5087
- flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5376
+ flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5088
5377
  leftNodes.map((n, i) => {
5089
5378
  const p = leftPos[n.name];
5090
5379
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -5146,7 +5435,7 @@ function PolarAreaReadout({
5146
5435
  const maxR = Math.min(cx, cy) - 20;
5147
5436
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
5148
5437
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5149
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5438
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5150
5439
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx("circle", { cx, cy, r: maxR * t, fill: "none", stroke: "rgba(148,163,184,0.2)", strokeWidth: 1 }, t)),
5151
5440
  arr.map((v, i) => {
5152
5441
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -5192,7 +5481,7 @@ function StepIndicatorReadout({
5192
5481
  const cy = viewH / 2 - 2;
5193
5482
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
5194
5483
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5195
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5484
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5196
5485
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
5197
5486
  const x1 = pad + i * step;
5198
5487
  const x2 = pad + (i + 1) * step;
@@ -5282,8 +5571,8 @@ function BulletChartReadout({
5282
5571
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
5283
5572
  /* @__PURE__ */ jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
5284
5573
  /* @__PURE__ */ jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
5285
- /* @__PURE__ */ jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsx("title", { children: `actual: ${safeActual}` }) }),
5286
- /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx("title", { children: `target: ${safeTarget}` }) })
5574
+ /* @__PURE__ */ jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.actual", v: { v: safeActual } }) }),
5575
+ /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.target", v: { v: safeTarget } }) })
5287
5576
  ] })
5288
5577
  ] });
5289
5578
  }
@@ -5338,7 +5627,7 @@ function LeaderboardReadout({
5338
5627
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
5339
5628
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
5340
5629
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5341
- sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5630
+ sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
5342
5631
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
5343
5632
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
5344
5633
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -5389,7 +5678,7 @@ function TrafficLightReadout({
5389
5678
  style: {
5390
5679
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
5391
5680
  },
5392
- children: /* @__PURE__ */ jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
5681
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
5393
5682
  },
5394
5683
  i
5395
5684
  );
@@ -5428,7 +5717,7 @@ function TagCloudReadout({
5428
5717
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
5429
5718
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
5430
5719
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5431
- tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
5720
+ tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
5432
5721
  "span",
5433
5722
  {
5434
5723
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -5465,7 +5754,7 @@ function ActivityFeedReadout({
5465
5754
  const shown = events.slice(0, max);
5466
5755
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
5467
5756
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5468
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5757
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
5469
5758
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
5470
5759
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
5471
5760
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -5516,7 +5805,7 @@ function RatingReadout({
5516
5805
  strokeWidth: 1
5517
5806
  }
5518
5807
  ),
5519
- isEmpty ? /* @__PURE__ */ jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
5808
+ isEmpty ? /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: "readout.rating.empty" }) : /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: isFull ? "readout.rating.full" : "readout.rating.half" })
5520
5809
  ]
5521
5810
  },
5522
5811
  i
@@ -5612,7 +5901,7 @@ function ChatBubbleReadout({
5612
5901
  const shown = messages.slice(0, max);
5613
5902
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
5614
5903
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5615
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
5904
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
5616
5905
  "li",
5617
5906
  {
5618
5907
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -5704,7 +5993,7 @@ function ChecklistReadout({
5704
5993
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
5705
5994
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
5706
5995
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5707
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
5996
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
5708
5997
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
5709
5998
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
5710
5999
  done,
@@ -5815,11 +6104,7 @@ function PriceTagReadout({
5815
6104
  "%"
5816
6105
  ] }) : null
5817
6106
  ] }),
5818
- savings > 0 ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
5819
- "You save ",
5820
- currency,
5821
- savings
5822
- ] }) : null
6107
+ savings > 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-price-tag-savings", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.priceTag.save", v: { amount: `${currency}${savings}` } }) }) : null
5823
6108
  ] });
5824
6109
  }
5825
6110
  function SpinnerReadout({
@@ -5956,6 +6241,11 @@ function StopwatchReadout({
5956
6241
  }
5957
6242
  );
5958
6243
  }
6244
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
6245
+ low: "readout.confidence.low",
6246
+ mid: "readout.confidence.mid",
6247
+ high: "readout.confidence.high"
6248
+ };
5959
6249
  function ConfidenceMeterReadout({
5960
6250
  id,
5961
6251
  label,
@@ -5988,7 +6278,7 @@ function ConfidenceMeterReadout({
5988
6278
  Math.round(safeValue),
5989
6279
  "%"
5990
6280
  ] }),
5991
- /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
6281
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: /* @__PURE__ */ jsx(\u5B57, { k: \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57[bandLabel] }) })
5992
6282
  ] }),
5993
6283
  /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5994
6284
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -6023,7 +6313,7 @@ function ReactionBarReadout({
6023
6313
  }
6024
6314
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
6025
6315
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6026
- reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
6316
+ reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
6027
6317
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
6028
6318
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
6029
6319
  ] }, i)) })
@@ -6056,7 +6346,7 @@ function PillGroupReadout({
6056
6346
  }
6057
6347
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
6058
6348
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6059
- pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
6349
+ pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
6060
6350
  "span",
6061
6351
  {
6062
6352
  className: "cdl-ip-readout-pill-group-pill",
@@ -6144,7 +6434,7 @@ function MetricsGridReadout({
6144
6434
  }
6145
6435
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
6146
6436
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6147
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6437
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
6148
6438
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
6149
6439
  m.value,
6150
6440
  m.unit ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -6231,7 +6521,7 @@ function IconTileReadout({
6231
6521
  }
6232
6522
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
6233
6523
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6234
- tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6524
+ tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
6235
6525
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
6236
6526
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
6237
6527
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -6272,7 +6562,7 @@ function TokenListReadout({
6272
6562
  }
6273
6563
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
6274
6564
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6275
- tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6565
+ tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
6276
6566
  const isUp = t.delta >= 0;
6277
6567
  const deltaColor = isUp ? colorUp : colorDown;
6278
6568
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -6326,7 +6616,7 @@ function MapPinReadout({
6326
6616
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
6327
6617
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
6328
6618
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6329
- pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6619
+ pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
6330
6620
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: viewW, height: viewH, fill: "rgba(148,163,184,0.08)", stroke: "rgba(148,163,184,0.3)", strokeWidth: 1, rx: 4 }),
6331
6621
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxs("g", { children: [
6332
6622
  /* @__PURE__ */ jsx("line", { x1: pad + (viewW - pad * 2) * t, x2: pad + (viewW - pad * 2) * t, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.15)" }),
@@ -6354,9 +6644,9 @@ function PriorityBadgeReadout({
6354
6644
  if (p === "high" || p === "2") level = "high";
6355
6645
  else if (p === "low" || p === "0") level = "low";
6356
6646
  const spec = {
6357
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
6358
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
6359
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
6647
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
6648
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
6649
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
6360
6650
  };
6361
6651
  const cur = spec[level];
6362
6652
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -6369,7 +6659,7 @@ function PriorityBadgeReadout({
6369
6659
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
6370
6660
  children: [
6371
6661
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
6372
- /* @__PURE__ */ jsx("span", { children: cur.text })
6662
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(\u5B57, { k: cur.text }) })
6373
6663
  ]
6374
6664
  }
6375
6665
  ),
@@ -6408,7 +6698,7 @@ function PodiumReadout({
6408
6698
  const order = [1, 0, 2];
6409
6699
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
6410
6700
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6411
- podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6701
+ podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
6412
6702
  const w = podium[rankIdx];
6413
6703
  if (!w) return null;
6414
6704
  const x = pad + colIdx * (colW + pad);
@@ -6451,7 +6741,7 @@ function PollBarReadout({
6451
6741
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
6452
6742
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
6453
6743
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6454
- options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6744
+ options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
6455
6745
  const pct = Math.round(o.count / total * 100);
6456
6746
  const isWinner = o.count === maxCount && maxCount > 0;
6457
6747
  const fillColor = isWinner ? colorWinner : color;
@@ -6486,6 +6776,7 @@ function UserStackReadout({
6486
6776
  max,
6487
6777
  size
6488
6778
  }) {
6779
+ const \u5F15\u304F = use\u5B57\u5F15();
6489
6780
  const names = safeParseArray(value).map(String);
6490
6781
  const shown = names.slice(0, max);
6491
6782
  const overflow = names.length > max;
@@ -6494,7 +6785,7 @@ function UserStackReadout({
6494
6785
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
6495
6786
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
6496
6787
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6497
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6788
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
6498
6789
  shown.map((name, i) => /* @__PURE__ */ jsx(
6499
6790
  "span",
6500
6791
  {
@@ -6522,7 +6813,7 @@ function UserStackReadout({
6522
6813
  fontSize: `${Math.round(size * 0.35)}px`,
6523
6814
  marginLeft: `-${size * 0.3}px`
6524
6815
  },
6525
- title: `+${overflowCount} more`,
6816
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
6526
6817
  children: [
6527
6818
  "+",
6528
6819
  overflowCount
@@ -6557,7 +6848,7 @@ function CommitListReadout({
6557
6848
  const shown = commits.slice(0, max);
6558
6849
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
6559
6850
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6560
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6851
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
6561
6852
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
6562
6853
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
6563
6854
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -6637,7 +6928,7 @@ function EventLogReadout({
6637
6928
  };
6638
6929
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
6639
6930
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6640
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6931
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
6641
6932
  const spec = severitySpec[e.severity] ?? severitySpec.info;
6642
6933
  return /* @__PURE__ */ jsxs(
6643
6934
  "li",
@@ -6680,7 +6971,7 @@ function SearchResultReadout({
6680
6971
  const shown = hits.slice(0, max);
6681
6972
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
6682
6973
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6683
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6974
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
6684
6975
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
6685
6976
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
6686
6977
  h.url ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -6713,7 +7004,7 @@ function RoadmapReadout({
6713
7004
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
6714
7005
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
6715
7006
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6716
- quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
7007
+ quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
6717
7008
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
6718
7009
  /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-roadmap-items", children: q.items.map((it, j) => /* @__PURE__ */ jsx("li", { className: "cdl-ip-readout-roadmap-item", children: it }, j)) })
6719
7010
  ] }, i)) })
@@ -6745,7 +7036,7 @@ function WeatherForecastReadout({
6745
7036
  }
6746
7037
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
6747
7038
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6748
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
7039
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
6749
7040
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
6750
7041
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
6751
7042
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -6789,17 +7080,14 @@ function VideoCardReadout({
6789
7080
  const shown = videos.slice(0, max);
6790
7081
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
6791
7082
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6792
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
7083
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
6793
7084
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
6794
7085
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
6795
7086
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
6796
7087
  ] }),
6797
7088
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
6798
7089
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
6799
- /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
6800
- v.views,
6801
- " views"
6802
- ] })
7090
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
6803
7091
  ] })
6804
7092
  ] }, i)) })
6805
7093
  ] });
@@ -6816,7 +7104,7 @@ function OrderStatusReadout({
6816
7104
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
6817
7105
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
6818
7106
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6819
- stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
7107
+ stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
6820
7108
  const isDone = i < safeCurrent;
6821
7109
  const isCurrent = i === safeCurrent;
6822
7110
  const isPending = i > safeCurrent;
@@ -6866,9 +7154,9 @@ function AttendanceGridReadout({
6866
7154
  const memberArr = safeParseArray(members).map(String);
6867
7155
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
6868
7156
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6869
- rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
7157
+ rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
6870
7158
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
6871
- /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
7159
+ /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.attendance.corner" }) }),
6872
7160
  memberArr.map((m, i) => /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
6873
7161
  ] }) }),
6874
7162
  /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { children: [
@@ -6922,7 +7210,7 @@ function TimezoneClockReadout({
6922
7210
  }
6923
7211
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
6924
7212
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6925
- clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
7213
+ clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
6926
7214
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
6927
7215
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
6928
7216
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -6956,7 +7244,7 @@ function FormSummaryReadout({
6956
7244
  }
6957
7245
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
6958
7246
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6959
- fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
7247
+ fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
6960
7248
  /* @__PURE__ */ jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
6961
7249
  /* @__PURE__ */ jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
6962
7250
  ] }, i)) })
@@ -6989,7 +7277,7 @@ function SongQueueReadout({
6989
7277
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
6990
7278
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
6991
7279
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6992
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
7280
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
6993
7281
  const isCurrent = i === safeCurrent;
6994
7282
  return /* @__PURE__ */ jsxs(
6995
7283
  "li",
@@ -7034,12 +7322,20 @@ function CalendarMonthReadout({
7034
7322
  } catch {
7035
7323
  }
7036
7324
  }
7037
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
7325
+ const weekDays = [
7326
+ "readout.weekday.0",
7327
+ "readout.weekday.1",
7328
+ "readout.weekday.2",
7329
+ "readout.weekday.3",
7330
+ "readout.weekday.4",
7331
+ "readout.weekday.5",
7332
+ "readout.weekday.6"
7333
+ ];
7038
7334
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
7039
7335
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
7040
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
7336
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
7041
7337
  monthName ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
7042
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: w }, w)) }),
7338
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: /* @__PURE__ */ jsx(\u5B57, { k: w }) }, w)) }),
7043
7339
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxs(
7044
7340
  "div",
7045
7341
  {
@@ -7082,7 +7378,7 @@ function TerminalReadout({
7082
7378
  const shown = lines.slice(0, max);
7083
7379
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
7084
7380
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
7085
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
7381
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
7086
7382
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
7087
7383
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
7088
7384
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -7181,10 +7477,11 @@ function KanbanBoardReadout({
7181
7477
  columnWidth,
7182
7478
  max
7183
7479
  }) {
7480
+ const \u5F15\u304F = use\u5B57\u5F15();
7184
7481
  const buckets = {
7185
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
7186
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
7187
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
7482
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
7483
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
7484
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
7188
7485
  };
7189
7486
  const trimmed = value.trim();
7190
7487
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -7295,13 +7592,13 @@ function KanbanBoardReadout({
7295
7592
  style: { userSelect: "none" },
7296
7593
  children: [
7297
7594
  /* @__PURE__ */ jsx("title", { children: task.title }),
7298
- task.title.length > 18 ? `${task.title.slice(0, 17)}\u2026` : task.title
7595
+ \u6841\u3067\u7701\u304F(task.title, 18)
7299
7596
  ]
7300
7597
  }
7301
7598
  )
7302
7599
  ] }, ti);
7303
7600
  }),
7304
- overflow > 0 ? /* @__PURE__ */ jsxs(
7601
+ overflow > 0 ? /* @__PURE__ */ jsx(
7305
7602
  "text",
7306
7603
  {
7307
7604
  x: x + columnWidth / 2,
@@ -7310,11 +7607,7 @@ function KanbanBoardReadout({
7310
7607
  textAnchor: "middle",
7311
7608
  fill: "#64748b",
7312
7609
  style: { userSelect: "none" },
7313
- children: [
7314
- "+",
7315
- overflow,
7316
- " more"
7317
- ]
7610
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7318
7611
  }
7319
7612
  ) : null
7320
7613
  ] }, k);
@@ -7436,7 +7729,7 @@ function TimelineVerticalReadout({
7436
7729
  style: { userSelect: "none" },
7437
7730
  children: [
7438
7731
  /* @__PURE__ */ jsx("title", { children: ev.title }),
7439
- ev.title.length > 38 ? `${ev.title.slice(0, 37)}\u2026` : ev.title
7732
+ \u6841\u3067\u7701\u304F(ev.title, 38)
7440
7733
  ]
7441
7734
  }
7442
7735
  ),
@@ -7450,7 +7743,7 @@ function TimelineVerticalReadout({
7450
7743
  style: { userSelect: "none" },
7451
7744
  children: [
7452
7745
  /* @__PURE__ */ jsx("title", { children: ev.description }),
7453
- ev.description.length > 44 ? `${ev.description.slice(0, 43)}\u2026` : ev.description
7746
+ \u6841\u3067\u7701\u304F(ev.description, 44)
7454
7747
  ]
7455
7748
  }
7456
7749
  ) : null
@@ -7793,7 +8086,7 @@ function StepProgressReadout({
7793
8086
  style: { userSelect: "none" },
7794
8087
  children: [
7795
8088
  /* @__PURE__ */ jsx("title", { children: s }),
7796
- s.length > 10 ? `${s.slice(0, 9)}\u2026` : s
8089
+ \u6841\u3067\u7701\u304F(s, 10)
7797
8090
  ]
7798
8091
  }
7799
8092
  )
@@ -7854,7 +8147,7 @@ function UserPresenceReadout({
7854
8147
  fontWeight: 500,
7855
8148
  fill: "#0f172a",
7856
8149
  style: { userSelect: "none" },
7857
- children: u.name.length > 24 ? `${u.name.slice(0, 23)}\u2026` : u.name
8150
+ children: \u6841\u3067\u7701\u304F(u.name, 24)
7858
8151
  }
7859
8152
  ),
7860
8153
  /* @__PURE__ */ jsx(
@@ -7871,7 +8164,7 @@ function UserPresenceReadout({
7871
8164
  )
7872
8165
  ] }, i);
7873
8166
  }),
7874
- overflow > 0 ? /* @__PURE__ */ jsxs(
8167
+ overflow > 0 ? /* @__PURE__ */ jsx(
7875
8168
  "text",
7876
8169
  {
7877
8170
  x: width / 2,
@@ -7880,11 +8173,7 @@ function UserPresenceReadout({
7880
8173
  textAnchor: "middle",
7881
8174
  fill: "#64748b",
7882
8175
  style: { userSelect: "none" },
7883
- children: [
7884
- "+",
7885
- overflow,
7886
- " more"
7887
- ]
8176
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7888
8177
  }
7889
8178
  ) : null
7890
8179
  ]
@@ -7935,12 +8224,7 @@ function RatingThumbReadout({
7935
8224
  "\u25B2 ",
7936
8225
  upCount
7937
8226
  ] }),
7938
- /* @__PURE__ */ jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
7939
- upPct,
7940
- "% up \xB7 ",
7941
- total,
7942
- " votes"
7943
- ] }),
8227
+ /* @__PURE__ */ jsx("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.ratingThumb.summary", v: { pct: upPct, total } }) }),
7944
8228
  /* @__PURE__ */ jsxs(
7945
8229
  "text",
7946
8230
  {
@@ -8025,7 +8309,7 @@ function OrgChartMiniReadout({
8025
8309
  style: { userSelect: "none" },
8026
8310
  children: [
8027
8311
  /* @__PURE__ */ jsx("title", { children: n.name }),
8028
- n.name.length > 10 ? `${n.name.slice(0, 9)}\u2026` : n.name
8312
+ \u6841\u3067\u7701\u304F(n.name, 10)
8029
8313
  ]
8030
8314
  }
8031
8315
  ),
@@ -8115,11 +8399,7 @@ function KpiTrendTileReadout({
8115
8399
  deltaPct.toFixed(1),
8116
8400
  "%)"
8117
8401
  ] }),
8118
- /* @__PURE__ */ jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
8119
- "prev ",
8120
- prev,
8121
- unit
8122
- ] }),
8402
+ /* @__PURE__ */ jsx("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.kpiTrend.prev", v: { v: `${prev}${unit}` } }) }),
8123
8403
  history.length > 1 ? /* @__PURE__ */ jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
8124
8404
  ]
8125
8405
  }
@@ -8207,7 +8487,7 @@ function QuickPollEmojiReadout({
8207
8487
  )
8208
8488
  ] }, i);
8209
8489
  }),
8210
- /* @__PURE__ */ jsxs(
8490
+ /* @__PURE__ */ jsx(
8211
8491
  "text",
8212
8492
  {
8213
8493
  x: width - 8,
@@ -8216,10 +8496,7 @@ function QuickPollEmojiReadout({
8216
8496
  textAnchor: "end",
8217
8497
  fill: "#64748b",
8218
8498
  style: { userSelect: "none" },
8219
- children: [
8220
- "total ",
8221
- total
8222
- ]
8499
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
8223
8500
  }
8224
8501
  )
8225
8502
  ]
@@ -8354,14 +8631,8 @@ function ThreadSummaryReadout({
8354
8631
  height,
8355
8632
  children: [
8356
8633
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
8357
- /* @__PURE__ */ jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
8358
- participants,
8359
- " participants"
8360
- ] }),
8361
- /* @__PURE__ */ jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
8362
- "last: ",
8363
- lastAuthor
8364
- ] }),
8634
+ /* @__PURE__ */ jsx("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.participants", v: { n: participants } }) }),
8635
+ /* @__PURE__ */ jsx("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.last", v: { name: lastAuthor } }) }),
8365
8636
  /* @__PURE__ */ jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
8366
8637
  unread > 0 ? /* @__PURE__ */ jsxs("g", { "data-cdl-thread-unread": "1", children: [
8367
8638
  /* @__PURE__ */ jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -8392,7 +8663,7 @@ function ReadReceiptReadout({
8392
8663
  colorPending
8393
8664
  }) {
8394
8665
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
8395
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
8666
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
8396
8667
  const iconColor = status === 2 ? colorRead : colorPending;
8397
8668
  const width = 180;
8398
8669
  const height = 32;
@@ -8427,7 +8698,7 @@ function ReadReceiptReadout({
8427
8698
  }
8428
8699
  ) : null
8429
8700
  ] }),
8430
- /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
8701
+ /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: labelKey }) })
8431
8702
  ]
8432
8703
  }
8433
8704
  )
@@ -8441,7 +8712,7 @@ function PasswordStrengthReadout({
8441
8712
  colorWeak
8442
8713
  }) {
8443
8714
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
8444
- const labels = ["too weak", "weak", "fair", "good", "strong"];
8715
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
8445
8716
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
8446
8717
  const barW = 46;
8447
8718
  const gap = 6;
@@ -8485,7 +8756,7 @@ function PasswordStrengthReadout({
8485
8756
  textAnchor: "end",
8486
8757
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
8487
8758
  style: { userSelect: "none" },
8488
- children: labels[level]
8759
+ children: /* @__PURE__ */ jsx(\u5B57, { k: labels[level] })
8489
8760
  }
8490
8761
  )
8491
8762
  ]
@@ -8618,9 +8889,9 @@ function FileDropzoneReadout({
8618
8889
  ),
8619
8890
  /* @__PURE__ */ jsxs("text", { x: 54, y: 34, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
8620
8891
  /* @__PURE__ */ jsx("title", { children: filename }),
8621
- filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
8892
+ \u6841\u3067\u7701\u304F(filename, 26)
8622
8893
  ] }),
8623
- /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
8894
+ /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
8624
8895
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
8625
8896
  /* @__PURE__ */ jsx(
8626
8897
  "text",
@@ -8632,7 +8903,7 @@ function FileDropzoneReadout({
8632
8903
  textAnchor: "middle",
8633
8904
  fill: "#64748b",
8634
8905
  style: { userSelect: "none" },
8635
- children: "\u2B06 Drop file here"
8906
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.drop" })
8636
8907
  }
8637
8908
  ),
8638
8909
  /* @__PURE__ */ jsx(
@@ -8644,7 +8915,7 @@ function FileDropzoneReadout({
8644
8915
  textAnchor: "middle",
8645
8916
  fill: "#94a3b8",
8646
8917
  style: { userSelect: "none" },
8647
- children: "or click to browse"
8918
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.browse" })
8648
8919
  }
8649
8920
  )
8650
8921
  ] })
@@ -8679,7 +8950,7 @@ function LogStreamReadout({
8679
8950
  }
8680
8951
  }
8681
8952
  const shown = rows.slice(-5);
8682
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
8953
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
8683
8954
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
8684
8955
  const width = 300;
8685
8956
  const rowH = 18;
@@ -8697,7 +8968,7 @@ function LogStreamReadout({
8697
8968
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width, height, fill: "#0f172a", rx: 4 }),
8698
8969
  shown.map((r, i) => {
8699
8970
  const y = 4 + i * rowH;
8700
- const displayMsg = r.msg.length > 24 ? `${r.msg.slice(0, 23)}\u2026` : r.msg;
8971
+ const displayMsg = \u6841\u3067\u7701\u304F(r.msg, 24);
8701
8972
  return /* @__PURE__ */ jsxs("g", { "data-cdl-log-row": i, children: [
8702
8973
  /* @__PURE__ */ jsx("text", { x: 6, y: y + 12, fontSize: 9, fill: "#94a3b8", fontFamily: "monospace", style: { userSelect: "none" }, children: r.ts }),
8703
8974
  /* @__PURE__ */ jsx("rect", { x: 62, y: y + 3, width: 26, height: 12, fill: levelColors[r.level] ?? "#94a3b8", rx: 2 }),
@@ -8712,7 +8983,7 @@ function LogStreamReadout({
8712
8983
  fill: "#ffffff",
8713
8984
  fontFamily: "monospace",
8714
8985
  style: { userSelect: "none" },
8715
- children: levelLabels[r.level] ?? "INF"
8986
+ children: /* @__PURE__ */ jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
8716
8987
  }
8717
8988
  ),
8718
8989
  /* @__PURE__ */ jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -8797,7 +9068,7 @@ function AlertBannerReadout({
8797
9068
  style: { userSelect: "none" },
8798
9069
  children: [
8799
9070
  /* @__PURE__ */ jsx("title", { children: message }),
8800
- message.length > 32 ? `${message.slice(0, 31)}\u2026` : message
9071
+ \u6841\u3067\u7701\u304F(message, 32)
8801
9072
  ]
8802
9073
  }
8803
9074
  )
@@ -8867,7 +9138,7 @@ function ServiceHealthReadout({
8867
9138
  style: { userSelect: "none" },
8868
9139
  children: [
8869
9140
  /* @__PURE__ */ jsx("title", { children: s.name }),
8870
- s.name.length > 10 ? `${s.name.slice(0, 9)}\u2026` : s.name
9141
+ \u6841\u3067\u7701\u304F(s.name, 10)
8871
9142
  ]
8872
9143
  }
8873
9144
  )
@@ -8906,10 +9177,10 @@ function CartSummaryReadout({
8906
9177
  if (!Number.isFinite(shipping)) shipping = 0;
8907
9178
  if (!Number.isFinite(total)) total = 0;
8908
9179
  const rows = [
8909
- { l: "Items", v: `${items}`, bold: false },
8910
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
8911
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
8912
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
9180
+ { l: "readout.cart.items", v: `${items}`, bold: false },
9181
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
9182
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
9183
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
8913
9184
  ];
8914
9185
  const width = 260;
8915
9186
  const rowH = 20;
@@ -8939,7 +9210,7 @@ function CartSummaryReadout({
8939
9210
  fontWeight: isTotal ? 700 : 500,
8940
9211
  fill: isTotal ? colorTotal : "#334155",
8941
9212
  style: { userSelect: "none" },
8942
- children: r.l
9213
+ children: /* @__PURE__ */ jsx(\u5B57, { k: r.l })
8943
9214
  }
8944
9215
  ),
8945
9216
  /* @__PURE__ */ jsx(
@@ -8987,6 +9258,8 @@ function PricingTierReadout({
8987
9258
  }
8988
9259
  }
8989
9260
  if (!Number.isFinite(price)) price = 0;
9261
+ const \u5F15\u304F = use\u5B57\u5F15();
9262
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
8990
9263
  const width = 240;
8991
9264
  const height = 176;
8992
9265
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -9011,7 +9284,7 @@ function PricingTierReadout({
9011
9284
  textAnchor: "middle",
9012
9285
  fill: "#ffffff",
9013
9286
  style: { userSelect: "none" },
9014
- children: planName || "Plan"
9287
+ children: \u898B\u305B\u308B\u540D\u524D
9015
9288
  }
9016
9289
  ),
9017
9290
  /* @__PURE__ */ jsxs(
@@ -9039,12 +9312,12 @@ function PricingTierReadout({
9039
9312
  textAnchor: "middle",
9040
9313
  fill: "#64748b",
9041
9314
  style: { userSelect: "none" },
9042
- children: "per month"
9315
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.pricing.perMonth" })
9043
9316
  }
9044
9317
  ),
9045
9318
  features.slice(0, 3).map((f, i) => {
9046
9319
  const y = 96 + i * 18;
9047
- const displayF = f.length > 24 ? `${f.slice(0, 23)}\u2026` : f;
9320
+ const displayF = \u6841\u3067\u7701\u304F(f, 24);
9048
9321
  return /* @__PURE__ */ jsxs("g", { "data-cdl-tier-feature": i, children: [
9049
9322
  /* @__PURE__ */ jsx("text", { x: 16, y, fontSize: 11, fill: colorAccent, style: { userSelect: "none" }, children: "\u2713" }),
9050
9323
  /* @__PURE__ */ jsxs("text", { x: 30, y, fontSize: 11, fill: "#0f172a", style: { userSelect: "none" }, children: [
@@ -9054,7 +9327,7 @@ function PricingTierReadout({
9054
9327
  ] }, i);
9055
9328
  }),
9056
9329
  /* @__PURE__ */ jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
9057
- /* @__PURE__ */ jsxs(
9330
+ /* @__PURE__ */ jsx(
9058
9331
  "text",
9059
9332
  {
9060
9333
  x: width / 2,
@@ -9064,10 +9337,7 @@ function PricingTierReadout({
9064
9337
  textAnchor: "middle",
9065
9338
  fill: "#ffffff",
9066
9339
  style: { userSelect: "none" },
9067
- children: [
9068
- "Get ",
9069
- planName || "Plan"
9070
- ]
9340
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
9071
9341
  }
9072
9342
  )
9073
9343
  ]
@@ -9133,12 +9403,12 @@ function CouponCodeReadout({
9133
9403
  fill: applied ? colorApplied : "#94a3b8",
9134
9404
  fontFamily: "monospace",
9135
9405
  style: { userSelect: "none" },
9136
- children: code || "ENTER CODE"
9406
+ children: code || /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.placeholder" })
9137
9407
  }
9138
9408
  ),
9139
9409
  applied ? /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-applied": "1", children: [
9140
9410
  /* @__PURE__ */ jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
9141
- /* @__PURE__ */ jsxs(
9411
+ /* @__PURE__ */ jsx(
9142
9412
  "text",
9143
9413
  {
9144
9414
  x: boxW + 57,
@@ -9148,11 +9418,7 @@ function CouponCodeReadout({
9148
9418
  textAnchor: "middle",
9149
9419
  fill: "#ffffff",
9150
9420
  style: { userSelect: "none" },
9151
- children: [
9152
- "-",
9153
- discountPct,
9154
- "% off"
9155
- ]
9421
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
9156
9422
  }
9157
9423
  )
9158
9424
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -9167,7 +9433,7 @@ function CouponCodeReadout({
9167
9433
  textAnchor: "middle",
9168
9434
  fill: "#ffffff",
9169
9435
  style: { userSelect: "none" },
9170
- children: "Apply"
9436
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.apply" })
9171
9437
  }
9172
9438
  )
9173
9439
  ] })
@@ -9202,6 +9468,7 @@ function ArticlePreviewReadout({
9202
9468
  const width = 300;
9203
9469
  const height = 116;
9204
9470
  const thumbW = 80;
9471
+ const [\u629C\u7C8B\u306E\u4E00\u884C\u76EE, \u629C\u7C8B\u306E\u6B8B\u308A] = \u6841\u3067\u5272\u308B(excerpt, 28);
9205
9472
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-article-preview", "data-cdl-readout": id, children: [
9206
9473
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
9207
9474
  /* @__PURE__ */ jsxs(
@@ -9238,19 +9505,16 @@ function ArticlePreviewReadout({
9238
9505
  style: { userSelect: "none" },
9239
9506
  children: [
9240
9507
  /* @__PURE__ */ jsx("title", { children: title }),
9241
- title.length > 26 ? `${title.slice(0, 25)}\u2026` : title
9508
+ \u6841\u3067\u7701\u304F(title, 26)
9242
9509
  ]
9243
9510
  }
9244
9511
  ),
9245
9512
  /* @__PURE__ */ jsxs("text", { x: thumbW + 20, y: 44, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: [
9246
9513
  /* @__PURE__ */ jsx("title", { children: excerpt }),
9247
- excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
9248
- ] }),
9249
- /* @__PURE__ */ jsx("text", { x: thumbW + 20, y: 60, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: excerpt.length > 56 ? `${excerpt.slice(28, 55)}\u2026` : excerpt.slice(28, 56) }),
9250
- /* @__PURE__ */ jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
9251
- "by ",
9252
- author
9514
+ \u629C\u7C8B\u306E\u4E00\u884C\u76EE
9253
9515
  ] }),
9516
+ /* @__PURE__ */ 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) }),
9517
+ /* @__PURE__ */ jsx("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.article.by", v: { author } }) }),
9254
9518
  /* @__PURE__ */ jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
9255
9519
  ]
9256
9520
  }
@@ -9301,7 +9565,7 @@ function TocNavReadout({
9301
9565
  shown.map((it, i) => {
9302
9566
  const y = 4 + i * rowH;
9303
9567
  const indent = 12 + it.level * 16;
9304
- const displayT = it.title.length > 30 ? `${it.title.slice(0, 29)}\u2026` : it.title;
9568
+ const displayT = \u6841\u3067\u7701\u304F(it.title, 30);
9305
9569
  return /* @__PURE__ */ jsxs("g", { "data-cdl-toc-item": i, children: [
9306
9570
  it.active ? /* @__PURE__ */ jsx("rect", { x: 4, y, width: 3, height: rowH - 4, fill: colorActive, rx: 1 }) : null,
9307
9571
  /* @__PURE__ */ jsxs(
@@ -20610,50 +20874,6 @@ function recomputeContainedLanes(lanes, nodes) {
20610
20874
  });
20611
20875
  }
20612
20876
 
20613
- // src/kinds/row-align.ts
20614
- var GENERIC_ROW_LEFT_SIZE_PX = 18;
20615
- var GENERIC_ROW_RIGHT_SIZE_PX = 21;
20616
- var MONO_ADVANCE_RATIO = 0.6;
20617
- var STORAGE_CHAR_ADVANCE_PX = 26 * MONO_ADVANCE_RATIO;
20618
- var ROW_PAD_X_PX = 26;
20619
- var ROW_COL_GAP_PX = 16;
20620
- var STORAGE_COL_GAP_PX = 32;
20621
- var ROW_RIGHT_PAD_PX = 26;
20622
- var DELIMITERS = [" -> ", " \u2192 ", " = ", ": ", ":"];
20623
- function splitRow(row) {
20624
- for (const d of DELIMITERS) {
20625
- const idx = row.indexOf(d);
20626
- if (idx > 0) {
20627
- return {
20628
- left: row.slice(0, idx).trim(),
20629
- right: row.slice(idx + d.length).trim(),
20630
- split: true
20631
- };
20632
- }
20633
- }
20634
- return { left: row.trim(), right: "", split: false };
20635
- }
20636
- function rowColumnWidth(text, size, mono) {
20637
- return mono ? displayWidth(text) * size * MONO_ADVANCE_RATIO : textWidth(text, size);
20638
- }
20639
- function displayWidth(text) {
20640
- let w = 0;
20641
- for (const ch of text) {
20642
- const code = ch.codePointAt(0) ?? 0;
20643
- w += code >= 32 && code <= 126 ? 1 : 2;
20644
- }
20645
- return w;
20646
- }
20647
- function requiredRowsWidth(rows, kind) {
20648
- if (!rows || rows.length === 0) return 0;
20649
- const splits = rows.map(splitRow);
20650
- const \u4E00\u756A\u5E83\u3044 = (\u53D6\u308B) => splits.reduce((m, s) => Math.max(m, \u53D6\u308B(s)), 0);
20651
- const storage = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, 26, true)) + STORAGE_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, 26, true)) + ROW_RIGHT_PAD_PX;
20652
- const generic = ROW_PAD_X_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.left, GENERIC_ROW_LEFT_SIZE_PX, false)) + ROW_COL_GAP_PX + \u4E00\u756A\u5E83\u3044((s) => rowColumnWidth(s.right, GENERIC_ROW_RIGHT_SIZE_PX, true)) + ROW_RIGHT_PAD_PX;
20653
- if (kind === void 0) return Math.ceil(Math.max(storage, generic));
20654
- return Math.ceil(kind === "storage" ? storage : generic);
20655
- }
20656
-
20657
20877
  // src/layout/head-label.ts
20658
20878
  var \u7AEF\u306E\u5B57\u3092\u623B\u3059\u8DDD\u96E2 = 22;
20659
20879
  var \u7AEF\u306E\u5B57\u3068\u7DDA\u306E\u9699\u9593 = 8;
@@ -23551,12 +23771,12 @@ function \u5272\u308B\u5019\u88DC(text) {
23551
23771
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
23552
23772
  }
23553
23773
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
23554
- const \u5B57 = [];
23774
+ const \u5B572 = [];
23555
23775
  const \u4E26\u3073 = [...text];
23556
23776
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
23557
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23777
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23558
23778
  }
23559
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
23779
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
23560
23780
  }
23561
23781
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
23562
23782
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -25915,9 +26135,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
25915
26135
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
25916
26136
  };
25917
26137
  }
25918
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
26138
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
25919
26139
  let \u7D1A = \u521D\u671F;
25920
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
26140
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
25921
26141
  return \u7D1A;
25922
26142
  }
25923
26143
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {