@cardenelabs/cdl 0.58.0 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/react.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useMemo, useEffect, useSyncExternalStore, useRef, useCallback, useState, useLayoutEffect, useId, createElement } from 'react';
1
+ import { createContext, useMemo, useEffect, useSyncExternalStore, useRef, useCallback, useState, useLayoutEffect, useId, createElement, useContext } from 'react';
2
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
3
 
4
4
  // src/render.tsx
@@ -428,7 +428,147 @@ var en = {
428
428
  /** `shape-api-gateway` の 2 行目の宛先 */
429
429
  "apiGateway.orders": "/orders",
430
430
  /** `shape-api-gateway` の 3 行目の宛先 */
431
- "apiGateway.session": "/session"
431
+ "apiGateway.session": "/session",
432
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
433
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
434
+ /** 配列を描く読み出しで、値が空の時の字 */
435
+ "readout.empty": "empty",
436
+ /** `sparkline` で点がまだ無い時の字 */
437
+ "readout.sparkline.waiting": "waiting",
438
+ /** 時の流れの入力欄の速さ */
439
+ "input.timeline.speed": "{speed}x",
440
+ /** 時の流れの入力欄の経過と長さ (秒) */
441
+ "input.timeline.time": "{t}s / {d}s",
442
+ /** `sequence-timeline` の点の見出し */
443
+ "readout.sequenceTimeline.title": "{name}: t={t}",
444
+ /** `bubble-chart` の泡の見出し */
445
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
446
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
447
+ "readout.calendarHeatmap.title": "day {i}: {v}",
448
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
449
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
450
+ /** `slope` の左の目盛 */
451
+ "readout.slope.before": "before",
452
+ /** `slope` の右の目盛 */
453
+ "readout.slope.after": "after",
454
+ /** `bullet-chart` の実績の見出し */
455
+ "readout.bulletChart.actual": "actual: {v}",
456
+ /** `bullet-chart` の目標の見出し */
457
+ "readout.bulletChart.target": "target: {v}",
458
+ /** `rating` の塗った星の見出し */
459
+ "readout.rating.full": "full",
460
+ /** `rating` の半分塗った星の見出し */
461
+ "readout.rating.half": "half",
462
+ /** `rating` の塗っていない星の見出し */
463
+ "readout.rating.empty": "empty",
464
+ /** `price-tag` の割引額 */
465
+ "readout.priceTag.save": "You save {amount}",
466
+ /** `confidence-meter` の低い帯の名前 */
467
+ "readout.confidence.low": "low",
468
+ /** `confidence-meter` の中ほどの帯の名前 */
469
+ "readout.confidence.mid": "mid",
470
+ /** `confidence-meter` の高い帯の名前 */
471
+ "readout.confidence.high": "high",
472
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
473
+ "readout.more": "+{n} more",
474
+ /** `video-card` の再生数 */
475
+ "readout.videoCard.views": "{v} views",
476
+ /** `attendance-grid` の角の見出し */
477
+ "readout.attendance.corner": "day",
478
+ /** `calendar-month` の曜日 (日曜) */
479
+ "readout.weekday.0": "Sun",
480
+ /** `calendar-month` の曜日 (月曜) */
481
+ "readout.weekday.1": "Mon",
482
+ /** `calendar-month` の曜日 (火曜) */
483
+ "readout.weekday.2": "Tue",
484
+ /** `calendar-month` の曜日 (水曜) */
485
+ "readout.weekday.3": "Wed",
486
+ /** `calendar-month` の曜日 (木曜) */
487
+ "readout.weekday.4": "Thu",
488
+ /** `calendar-month` の曜日 (金曜) */
489
+ "readout.weekday.5": "Fri",
490
+ /** `calendar-month` の曜日 (土曜) */
491
+ "readout.weekday.6": "Sat",
492
+ /** `rating-thumb` の賛成の割合と票数 */
493
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
494
+ /** `kpi-trend-tile` の前の期間の値 */
495
+ "readout.kpiTrend.prev": "prev {v}",
496
+ /** `quick-poll-emoji` の票の合計 */
497
+ "readout.poll.total": "total {n}",
498
+ /** `thread-summary` の参加者の数 */
499
+ "readout.thread.participants": "{n} participants",
500
+ /** `thread-summary` の最後に書いた人 */
501
+ "readout.thread.last": "last: {name}",
502
+ /** `read-receipt` の送信した段 */
503
+ "readout.readReceipt.sent": "sent",
504
+ /** `read-receipt` の相手に届いた段 */
505
+ "readout.readReceipt.delivered": "delivered",
506
+ /** `read-receipt` の読まれた段 */
507
+ "readout.readReceipt.read": "read",
508
+ /** `password-strength` の段階 0 */
509
+ "readout.password.0": "too weak",
510
+ /** `password-strength` の段階 1 */
511
+ "readout.password.1": "weak",
512
+ /** `password-strength` の段階 2 */
513
+ "readout.password.2": "fair",
514
+ /** `password-strength` の段階 3 */
515
+ "readout.password.3": "good",
516
+ /** `password-strength` の段階 4 */
517
+ "readout.password.4": "strong",
518
+ /** `file-dropzone` で取り込んだ後の字 */
519
+ "readout.dropzone.uploaded": "uploaded",
520
+ /** `file-dropzone` の空の時の 1 行目 */
521
+ "readout.dropzone.drop": "\u2B06 Drop file here",
522
+ /** `file-dropzone` の空の時の 2 行目 */
523
+ "readout.dropzone.browse": "or click to browse",
524
+ /** `log-stream` の重さ 0 (調べるための詳細) */
525
+ "readout.log.0": "DBG",
526
+ /** `log-stream` の重さ 1 (知らせ) */
527
+ "readout.log.1": "INF",
528
+ /** `log-stream` の重さ 2 (警告) */
529
+ "readout.log.2": "WRN",
530
+ /** `log-stream` の重さ 3 (異常) */
531
+ "readout.log.3": "ERR",
532
+ /** `cart-summary` の点数 */
533
+ "readout.cart.items": "Items",
534
+ /** `cart-summary` の小計 */
535
+ "readout.cart.subtotal": "Subtotal",
536
+ /** `cart-summary` の送料 */
537
+ "readout.cart.shipping": "Shipping",
538
+ /** `cart-summary` の合計 */
539
+ "readout.cart.total": "Total",
540
+ /** `pricing-tier` で名前が空の時の名前 */
541
+ "readout.pricing.plan": "Plan",
542
+ /** `pricing-tier` の価格の後ろ */
543
+ "readout.pricing.perMonth": "per month",
544
+ /** `pricing-tier` の押す札 */
545
+ "readout.pricing.get": "Get {name}",
546
+ /** `coupon-code` で番号が空の時の字 */
547
+ "readout.coupon.placeholder": "ENTER CODE",
548
+ /** `coupon-code` の割引の割合 */
549
+ "readout.coupon.off": "-{pct}% off",
550
+ /** `coupon-code` の押す札 */
551
+ "readout.coupon.apply": "Apply",
552
+ /** `article-preview` の書いた人 */
553
+ "readout.article.by": "by {author}",
554
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
555
+ "readout.priority.high": "HIGH",
556
+ /** `priority-badge` の中ほどの優先度の表示 */
557
+ "readout.priority.med": "MED",
558
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
559
+ "readout.priority.low": "LOW",
560
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
561
+ "readout.kanban.todo": "Todo",
562
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
563
+ "readout.kanban.inprogress": "In Progress",
564
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
565
+ "readout.kanban.done": "Done",
566
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
567
+ "readout.trafficLight.red": "red",
568
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
569
+ "readout.trafficLight.yellow": "yellow",
570
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
571
+ "readout.trafficLight.green": "green"
432
572
  };
433
573
  var ja = {
434
574
  "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
@@ -464,13 +604,85 @@ var ja = {
464
604
  "apiGateway.delete": "DELETE",
465
605
  "apiGateway.users": "/\u5229\u7528\u8005",
466
606
  "apiGateway.orders": "/\u6CE8\u6587",
467
- "apiGateway.session": "/\u63A5\u7D9A"
607
+ "apiGateway.session": "/\u63A5\u7D9A",
608
+ "readout.empty": "\u306A\u3057",
609
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
610
+ "input.timeline.speed": "{speed}\u500D",
611
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
612
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
613
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
614
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
615
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
616
+ "readout.slope.before": "\u524D",
617
+ "readout.slope.after": "\u5F8C",
618
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
619
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
620
+ "readout.rating.full": "\u6E80",
621
+ "readout.rating.half": "\u534A\u5206",
622
+ "readout.rating.empty": "\u7A7A",
623
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
624
+ "readout.confidence.low": "\u4F4E",
625
+ "readout.confidence.mid": "\u4E2D",
626
+ "readout.confidence.high": "\u9AD8",
627
+ "readout.more": "\u307B\u304B {n}",
628
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
629
+ "readout.attendance.corner": "\u65E5",
630
+ "readout.weekday.0": "\u65E5",
631
+ "readout.weekday.1": "\u6708",
632
+ "readout.weekday.2": "\u706B",
633
+ "readout.weekday.3": "\u6C34",
634
+ "readout.weekday.4": "\u6728",
635
+ "readout.weekday.5": "\u91D1",
636
+ "readout.weekday.6": "\u571F",
637
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
638
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
639
+ "readout.poll.total": "\u5408\u8A08 {n}",
640
+ "readout.thread.participants": "{n} \u4EBA",
641
+ "readout.thread.last": "\u6700\u5F8C: {name}",
642
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
643
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
644
+ "readout.readReceipt.read": "\u65E2\u8AAD",
645
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
646
+ "readout.password.1": "\u5F31\u3044",
647
+ "readout.password.2": "\u666E\u901A",
648
+ "readout.password.3": "\u826F\u3044",
649
+ "readout.password.4": "\u5F37\u3044",
650
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
651
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
652
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
653
+ "readout.log.0": "\u8A73\u7D30",
654
+ "readout.log.1": "\u60C5\u5831",
655
+ "readout.log.2": "\u8B66\u544A",
656
+ "readout.log.3": "\u7570\u5E38",
657
+ "readout.cart.items": "\u70B9\u6570",
658
+ "readout.cart.subtotal": "\u5C0F\u8A08",
659
+ "readout.cart.shipping": "\u9001\u6599",
660
+ "readout.cart.total": "\u5408\u8A08",
661
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
662
+ "readout.pricing.perMonth": "\u6708\u984D",
663
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
664
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
665
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
666
+ "readout.coupon.apply": "\u9069\u7528",
667
+ "readout.article.by": "\u6587: {author}",
668
+ "readout.priority.high": "\u9AD8",
669
+ "readout.priority.med": "\u4E2D",
670
+ "readout.priority.low": "\u4F4E",
671
+ "readout.kanban.todo": "\u672A\u7740\u624B",
672
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
673
+ "readout.kanban.done": "\u5B8C\u4E86",
674
+ "readout.trafficLight.red": "\u8D64",
675
+ "readout.trafficLight.yellow": "\u9EC4",
676
+ "readout.trafficLight.green": "\u7DD1"
468
677
  };
469
678
  var CDL_TEXT = { en, ja };
470
679
  function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
471
680
  const \u8A00\u8A9E = lang ?? "en";
472
681
  return (key) => CDL_TEXT[\u8A00\u8A9E][key];
473
682
  }
683
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
684
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
685
+ }
474
686
 
475
687
  // src/layout/clearance-constants.ts
476
688
  var CLEARANCE_NODE_LABEL = 32;
@@ -11022,12 +11234,12 @@ function \u5272\u308B\u5019\u88DC(text) {
11022
11234
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
11023
11235
  }
11024
11236
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
11025
- const \u5B57 = [];
11237
+ const \u5B572 = [];
11026
11238
  const \u4E26\u3073 = [...text];
11027
11239
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
11028
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11240
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
11029
11241
  }
11030
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
11242
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
11031
11243
  }
11032
11244
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
11033
11245
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -13383,9 +13595,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
13383
13595
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
13384
13596
  };
13385
13597
  }
13386
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13598
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
13387
13599
  let \u7D1A = \u521D\u671F;
13388
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13600
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
13389
13601
  return \u7D1A;
13390
13602
  }
13391
13603
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -20008,6 +20220,23 @@ function warn(message) {
20008
20220
  console.warn(`[cdl event-handler] ${message}`);
20009
20221
  }
20010
20222
  }
20223
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = createContext("en");
20224
+ function use\u5B57\u5F15() {
20225
+ const lang = useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
20226
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
20227
+ }
20228
+ function \u5B57({ k, v }) {
20229
+ const \u5F15\u304F = use\u5B57\u5F15();
20230
+ return /* @__PURE__ */ jsx(Fragment, { children: \u5F15\u304F(k, v) });
20231
+ }
20232
+ function \u5B57\u306E\u898B\u51FA\u3057({
20233
+ k,
20234
+ v,
20235
+ \u524D = ""
20236
+ }) {
20237
+ const \u5F15\u304F = use\u5B57\u5F15();
20238
+ return /* @__PURE__ */ jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
20239
+ }
20011
20240
  function createInteractiveSignalsAccessor(diagram, signals, formula, scroll) {
20012
20241
  const kindByInputId = /* @__PURE__ */ new Map();
20013
20242
  for (const inp of diagram.inputs ?? []) {
@@ -20322,20 +20551,23 @@ function useInteractiveIntegration(diagram, options = {}) {
20322
20551
  const readouts = diagram.readouts ?? [];
20323
20552
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
20324
20553
  return null;
20325
- return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20326
- inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
20327
- formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
20328
- FormulaReadout,
20329
- {
20330
- id: f.id,
20331
- expression: f.expression,
20332
- value: stateOverrides[f.id]
20333
- },
20334
- f.id
20335
- )) }),
20336
- 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)) }),
20337
- readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
20338
- ] });
20554
+ return (
20555
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
20556
+ /* @__PURE__ */ jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram.lang), children: /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
20557
+ inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
20558
+ formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
20559
+ FormulaReadout,
20560
+ {
20561
+ id: f.id,
20562
+ expression: f.expression,
20563
+ value: stateOverrides[f.id]
20564
+ },
20565
+ f.id
20566
+ )) }),
20567
+ scrolls.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: scrolls.map((s) => /* @__PURE__ */ jsx(ScrollReadout, { id: s.id, progress: stateOverrides[s.id] }, s.id)) }),
20568
+ readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
20569
+ ] }) })
20570
+ );
20339
20571
  }, [diagram, signals, stateOverrides, mergedStateValues]);
20340
20572
  return { stateOverrides, panel, svgRef, containerRef };
20341
20573
  }
@@ -22196,7 +22428,7 @@ function SparklineReadout({
22196
22428
  if (points.length < 2) {
22197
22429
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
22198
22430
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22199
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
22431
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? /* @__PURE__ */ jsx(\u5B57, { k: "readout.sparkline.waiting" }) : "\u2014" }),
22200
22432
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
22201
22433
  ] });
22202
22434
  }
@@ -22459,27 +22691,24 @@ function TimelineWidget({
22459
22691
  className: "cdl-ip-timeline-scrubber"
22460
22692
  }
22461
22693
  ),
22462
- /* @__PURE__ */ jsxs(
22694
+ /* @__PURE__ */ jsx(
22463
22695
  "button",
22464
22696
  {
22465
22697
  type: "button",
22466
22698
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
22467
22699
  onClick: cycleSpeed,
22468
22700
  "aria-label": "speed",
22469
- children: [
22470
- speed,
22471
- "x"
22472
- ]
22701
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
22473
22702
  }
22474
22703
  )
22475
22704
  ] }),
22476
- /* @__PURE__ */ jsxs("span", { className: "cdl-ip-timeline-time", children: [
22477
- (progress * (input.duration / 1e3)).toFixed(1),
22478
- "s /",
22479
- " ",
22480
- (input.duration / 1e3).toFixed(1),
22481
- "s"
22482
- ] })
22705
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsx(
22706
+ \u5B57,
22707
+ {
22708
+ k: "input.timeline.time",
22709
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
22710
+ }
22711
+ ) })
22483
22712
  ] });
22484
22713
  }
22485
22714
  function RangeWidget({
@@ -22717,7 +22946,7 @@ function ArrayBarReadout({
22717
22946
  const range = max - min || 1;
22718
22947
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
22719
22948
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22720
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : arr.map((v, i) => {
22949
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-array-bar-row", children: arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : arr.map((v, i) => {
22721
22950
  const h = Math.max(0, Math.min(1, (v - min) / range));
22722
22951
  return /* @__PURE__ */ jsx(
22723
22952
  "span",
@@ -22794,7 +23023,7 @@ function StackedBarReadout({
22794
23023
  const range = max - min || 1;
22795
23024
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
22796
23025
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22797
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : Array.from({ length: n }).map((_, i) => {
23026
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-stacked-bar-row", children: n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : Array.from({ length: n }).map((_, i) => {
22798
23027
  const va = arrA[i] ?? 0;
22799
23028
  const vb = arrB[i] ?? 0;
22800
23029
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -22889,7 +23118,7 @@ function MatrixReadout({
22889
23118
  };
22890
23119
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
22891
23120
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22892
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx(
23121
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx(
22893
23122
  "svg",
22894
23123
  {
22895
23124
  className: "cdl-ip-readout-matrix-svg",
@@ -22947,7 +23176,7 @@ function ProgressGroupReadout({
22947
23176
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
22948
23177
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
22949
23178
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
22950
- arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
23179
+ arr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-progress-group-list", children: arr.map((v, i) => {
22951
23180
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
22952
23181
  const rowLabel = labelArr[i] ?? String(i + 1);
22953
23182
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -23009,7 +23238,7 @@ function SequenceTimelineReadout({
23009
23238
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
23010
23239
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
23011
23240
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23012
- events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(
23241
+ events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(
23013
23242
  "svg",
23014
23243
  {
23015
23244
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -23023,7 +23252,7 @@ function SequenceTimelineReadout({
23023
23252
  events.map((e, i) => {
23024
23253
  const x = xFor(e.t);
23025
23254
  return /* @__PURE__ */ jsxs("g", { "data-cdl-event-marker": e.name, children: [
23026
- /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `${e.name}: t=${e.t}` }) }),
23255
+ /* @__PURE__ */ jsx("circle", { cx: x, cy: trackY, r: 5, fill: color, stroke: "#fff", strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.sequenceTimeline.title", v: { name: e.name, t: e.t } }) }),
23027
23256
  /* @__PURE__ */ jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
23028
23257
  /* @__PURE__ */ jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
23029
23258
  ] }, i);
@@ -23066,7 +23295,7 @@ function RadarReadout({
23066
23295
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
23067
23296
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
23068
23297
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23069
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23298
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-radar-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23070
23299
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx(
23071
23300
  "polygon",
23072
23301
  {
@@ -23128,14 +23357,14 @@ function BubbleChartReadout({
23128
23357
  const maxCircleR = 18;
23129
23358
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
23130
23359
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23131
- bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23360
+ bubbles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-bubble-chart-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23132
23361
  /* @__PURE__ */ jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
23133
23362
  /* @__PURE__ */ jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
23134
23363
  bubbles.map((b, i) => {
23135
23364
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
23136
23365
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
23137
23366
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
23138
- return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx("title", { children: `(${b.x}, ${b.y}) r=${b.r}` }) }, i);
23367
+ return /* @__PURE__ */ jsx("circle", { cx, cy, r, fill: color, fillOpacity: 0.35, stroke: color, strokeWidth: 1.5, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bubbleChart.title", v: { x: b.x, y: b.y, r: b.r } }) }, i);
23139
23368
  })
23140
23369
  ] })
23141
23370
  ] });
@@ -23158,7 +23387,7 @@ function DonutReadout({
23158
23387
  let acc = 0;
23159
23388
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
23160
23389
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23161
- arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
23390
+ arr.length === 0 || total === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-donut-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: arr.map((v, i) => {
23162
23391
  const from = acc;
23163
23392
  const to = acc + v / total;
23164
23393
  acc = to;
@@ -23219,7 +23448,7 @@ function CalendarHeatmapReadout({
23219
23448
  height: cellSize,
23220
23449
  rx: 2,
23221
23450
  fill,
23222
- children: /* @__PURE__ */ jsx("title", { children: `day ${i}: ${v}` })
23451
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
23223
23452
  },
23224
23453
  i
23225
23454
  );
@@ -23339,7 +23568,7 @@ function CandlestickReadout({
23339
23568
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
23340
23569
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
23341
23570
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23342
- candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
23571
+ candles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-candlestick-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: candles.map((cd, i) => {
23343
23572
  const cx = pad + i * (candleW + 3) + candleW / 2;
23344
23573
  const yHigh = yFor(cd.h);
23345
23574
  const yLow = yFor(cd.l);
@@ -23360,7 +23589,7 @@ function CandlestickReadout({
23360
23589
  height: bodyH,
23361
23590
  fill: isUp ? color : color,
23362
23591
  fillOpacity: isUp ? 1 : 0.85,
23363
- children: /* @__PURE__ */ jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
23592
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.candlestick.title", v: { o: cd.o, h: cd.h, l: cd.l, c: cd.c } })
23364
23593
  }
23365
23594
  )
23366
23595
  ] }, i);
@@ -23394,7 +23623,7 @@ function VennReadout({
23394
23623
  const cxB = viewW / 2 + gap / 2;
23395
23624
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
23396
23625
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23397
- sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23626
+ sizeA === 0 && sizeB === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-venn-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23398
23627
  /* @__PURE__ */ jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
23399
23628
  /* @__PURE__ */ jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
23400
23629
  /* @__PURE__ */ jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -23445,11 +23674,11 @@ function SlopeReadout({
23445
23674
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
23446
23675
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
23447
23676
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23448
- slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23677
+ slopes.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-slope-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23449
23678
  /* @__PURE__ */ jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23450
23679
  /* @__PURE__ */ jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
23451
- /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
23452
- /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
23680
+ /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.before" }) }),
23681
+ /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.slope.after" }) }),
23453
23682
  slopes.map((s, i) => {
23454
23683
  const yB = yFor(s.before);
23455
23684
  const yA = yFor(s.after);
@@ -23496,7 +23725,7 @@ function FunnelReadout({
23496
23725
  const [bR, bG, bB] = hexToRgb2(colorBottom);
23497
23726
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
23498
23727
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23499
- stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
23728
+ stages.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-funnel-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: stages.map((s, i) => {
23500
23729
  const ratio = i / Math.max(1, stages.length - 1);
23501
23730
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
23502
23731
  const yTop = i * stageH + 2;
@@ -23558,7 +23787,7 @@ function GanttReadout({
23558
23787
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
23559
23788
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
23560
23789
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23561
- tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
23790
+ tasks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-gantt-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: tasks.map((t, i) => {
23562
23791
  const y = pad + i * rowH;
23563
23792
  const x1 = xFor(t.start);
23564
23793
  const x2 = xFor(t.start + t.duration);
@@ -23649,7 +23878,7 @@ function TreemapReadout({
23649
23878
  }
23650
23879
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
23651
23880
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23652
- rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
23881
+ rects.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-treemap-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: rects.map((r, i) => /* @__PURE__ */ jsxs("g", { children: [
23653
23882
  /* @__PURE__ */ jsx("rect", { x: r.x + 1, y: r.y + 1, width: Math.max(0, r.w - 2), height: Math.max(0, r.h - 2), fill: colors[i % colors.length] ?? "#94a3b8", rx: 2, children: /* @__PURE__ */ jsx("title", { children: `${r.name}: ${r.size}` }) }),
23654
23883
  r.w > 40 && r.h > 20 ? /* @__PURE__ */ jsx("text", { x: r.x + 6, y: r.y + 14, fontSize: 10, fill: "#fff", fontWeight: 600, children: r.name }) : null
23655
23884
  ] }, i)) })
@@ -23715,7 +23944,7 @@ function SankeyReadout({
23715
23944
  const rightUsed = {};
23716
23945
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
23717
23946
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23718
- flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23947
+ flows.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-sankey-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23719
23948
  leftNodes.map((n, i) => {
23720
23949
  const p = leftPos[n.name];
23721
23950
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -23777,7 +24006,7 @@ function PolarAreaReadout({
23777
24006
  const maxR = Math.min(cx, cy) - 20;
23778
24007
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
23779
24008
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23780
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24009
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-polar-area-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23781
24010
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx("circle", { cx, cy, r: maxR * t, fill: "none", stroke: "rgba(148,163,184,0.2)", strokeWidth: 1 }, t)),
23782
24011
  arr.map((v, i) => {
23783
24012
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -23823,7 +24052,7 @@ function StepIndicatorReadout({
23823
24052
  const cy = viewH / 2 - 2;
23824
24053
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
23825
24054
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23826
- n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24055
+ n === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-step-indicator-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
23827
24056
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
23828
24057
  const x1 = pad + i * step;
23829
24058
  const x2 = pad + (i + 1) * step;
@@ -23913,8 +24142,8 @@ function BulletChartReadout({
23913
24142
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
23914
24143
  /* @__PURE__ */ jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
23915
24144
  /* @__PURE__ */ jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
23916
- /* @__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}` }) }),
23917
- /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx("title", { children: `target: ${safeTarget}` }) })
24145
+ /* @__PURE__ */ jsx("rect", { x: pad, y: pad + trackH * 0.3, width: actualX - pad, height: trackH * 0.4, fill: colorActual, rx: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.actual", v: { v: safeActual } }) }),
24146
+ /* @__PURE__ */ jsx("line", { x1: targetX, x2: targetX, y1: pad - 2, y2: pad + trackH + 2, stroke: "#0f172a", strokeWidth: 2, children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.bulletChart.target", v: { v: safeTarget } }) })
23918
24147
  ] })
23919
24148
  ] });
23920
24149
  }
@@ -23969,7 +24198,7 @@ function LeaderboardReadout({
23969
24198
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
23970
24199
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
23971
24200
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
23972
- sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
24201
+ sorted.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-leaderboard-list", children: sorted.map((it, i) => {
23973
24202
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
23974
24203
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
23975
24204
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -24020,7 +24249,7 @@ function TrafficLightReadout({
24020
24249
  style: {
24021
24250
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
24022
24251
  },
24023
- children: /* @__PURE__ */ jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
24252
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
24024
24253
  },
24025
24254
  i
24026
24255
  );
@@ -24059,7 +24288,7 @@ function TagCloudReadout({
24059
24288
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
24060
24289
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
24061
24290
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24062
- tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
24291
+ tags.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-tag-cloud-list", children: tags.map((t, i) => /* @__PURE__ */ jsx(
24063
24292
  "span",
24064
24293
  {
24065
24294
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -24096,7 +24325,7 @@ function ActivityFeedReadout({
24096
24325
  const shown = events.slice(0, max);
24097
24326
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
24098
24327
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24099
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
24328
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-activity-feed-list", children: shown.map((e, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-activity-feed-row", children: [
24100
24329
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
24101
24330
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
24102
24331
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -24147,7 +24376,7 @@ function RatingReadout({
24147
24376
  strokeWidth: 1
24148
24377
  }
24149
24378
  ),
24150
- isEmpty ? /* @__PURE__ */ jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
24379
+ isEmpty ? /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: "readout.rating.empty" }) : /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { \u524D: `${i + 1}: `, k: isFull ? "readout.rating.full" : "readout.rating.half" })
24151
24380
  ]
24152
24381
  },
24153
24382
  i
@@ -24243,7 +24472,7 @@ function ChatBubbleReadout({
24243
24472
  const shown = messages.slice(0, max);
24244
24473
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
24245
24474
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24246
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
24475
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-chat-bubble-list", children: shown.map((m, i) => /* @__PURE__ */ jsx(
24247
24476
  "li",
24248
24477
  {
24249
24478
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -24335,7 +24564,7 @@ function ChecklistReadout({
24335
24564
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
24336
24565
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
24337
24566
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24338
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
24567
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
24339
24568
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
24340
24569
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
24341
24570
  done,
@@ -24446,11 +24675,7 @@ function PriceTagReadout({
24446
24675
  "%"
24447
24676
  ] }) : null
24448
24677
  ] }),
24449
- savings > 0 ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
24450
- "You save ",
24451
- currency,
24452
- savings
24453
- ] }) : null
24678
+ savings > 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-price-tag-savings", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.priceTag.save", v: { amount: `${currency}${savings}` } }) }) : null
24454
24679
  ] });
24455
24680
  }
24456
24681
  function SpinnerReadout({
@@ -24587,6 +24812,11 @@ function StopwatchReadout({
24587
24812
  }
24588
24813
  );
24589
24814
  }
24815
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
24816
+ low: "readout.confidence.low",
24817
+ mid: "readout.confidence.mid",
24818
+ high: "readout.confidence.high"
24819
+ };
24590
24820
  function ConfidenceMeterReadout({
24591
24821
  id,
24592
24822
  label,
@@ -24619,7 +24849,7 @@ function ConfidenceMeterReadout({
24619
24849
  Math.round(safeValue),
24620
24850
  "%"
24621
24851
  ] }),
24622
- /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
24852
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: /* @__PURE__ */ jsx(\u5B57, { k: \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57[bandLabel] }) })
24623
24853
  ] }),
24624
24854
  /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24625
24855
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -24654,7 +24884,7 @@ function ReactionBarReadout({
24654
24884
  }
24655
24885
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
24656
24886
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24657
- reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
24887
+ reactions.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-reaction-bar-row", children: reactions.map((r, i) => /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-reaction-bar-pill", style: { borderColor: color }, children: [
24658
24888
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
24659
24889
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
24660
24890
  ] }, i)) })
@@ -24687,7 +24917,7 @@ function PillGroupReadout({
24687
24917
  }
24688
24918
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
24689
24919
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24690
- pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
24920
+ pills.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-pill-group-row", children: pills.map((p, i) => /* @__PURE__ */ jsx(
24691
24921
  "span",
24692
24922
  {
24693
24923
  className: "cdl-ip-readout-pill-group-pill",
@@ -24775,7 +25005,7 @@ function MetricsGridReadout({
24775
25005
  }
24776
25006
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
24777
25007
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24778
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
25008
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-metrics-grid-grid", children: items.map((m, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-cell", children: [
24779
25009
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
24780
25010
  m.value,
24781
25011
  m.unit ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -24862,7 +25092,7 @@ function IconTileReadout({
24862
25092
  }
24863
25093
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
24864
25094
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24865
- tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
25095
+ tiles.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-row", children: tiles.map((t, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-cell", children: [
24866
25096
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
24867
25097
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
24868
25098
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -24903,7 +25133,7 @@ function TokenListReadout({
24903
25133
  }
24904
25134
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
24905
25135
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24906
- tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
25136
+ tokens.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-token-list-items", children: tokens.map((t, i) => {
24907
25137
  const isUp = t.delta >= 0;
24908
25138
  const deltaColor = isUp ? colorUp : colorDown;
24909
25139
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -24957,7 +25187,7 @@ function MapPinReadout({
24957
25187
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
24958
25188
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
24959
25189
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
24960
- pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
25190
+ pins.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-map-pin-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
24961
25191
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: viewW, height: viewH, fill: "rgba(148,163,184,0.08)", stroke: "rgba(148,163,184,0.3)", strokeWidth: 1, rx: 4 }),
24962
25192
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxs("g", { children: [
24963
25193
  /* @__PURE__ */ jsx("line", { x1: pad + (viewW - pad * 2) * t, x2: pad + (viewW - pad * 2) * t, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.15)" }),
@@ -24985,9 +25215,9 @@ function PriorityBadgeReadout({
24985
25215
  if (p === "high" || p === "2") level = "high";
24986
25216
  else if (p === "low" || p === "0") level = "low";
24987
25217
  const spec = {
24988
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
24989
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
24990
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
25218
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
25219
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
25220
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
24991
25221
  };
24992
25222
  const cur = spec[level];
24993
25223
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -25000,7 +25230,7 @@ function PriorityBadgeReadout({
25000
25230
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
25001
25231
  children: [
25002
25232
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
25003
- /* @__PURE__ */ jsx("span", { children: cur.text })
25233
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(\u5B57, { k: cur.text }) })
25004
25234
  ]
25005
25235
  }
25006
25236
  ),
@@ -25039,7 +25269,7 @@ function PodiumReadout({
25039
25269
  const order = [1, 0, 2];
25040
25270
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
25041
25271
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25042
- podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
25272
+ podium.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("svg", { className: "cdl-ip-readout-podium-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: order.map((rankIdx, colIdx) => {
25043
25273
  const w = podium[rankIdx];
25044
25274
  if (!w) return null;
25045
25275
  const x = pad + colIdx * (colW + pad);
@@ -25082,7 +25312,7 @@ function PollBarReadout({
25082
25312
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
25083
25313
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
25084
25314
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25085
- options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
25315
+ options.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-poll-bar-list", children: options.map((o, i) => {
25086
25316
  const pct = Math.round(o.count / total * 100);
25087
25317
  const isWinner = o.count === maxCount && maxCount > 0;
25088
25318
  const fillColor = isWinner ? colorWinner : color;
@@ -25117,6 +25347,7 @@ function UserStackReadout({
25117
25347
  max,
25118
25348
  size
25119
25349
  }) {
25350
+ const \u5F15\u304F = use\u5B57\u5F15();
25120
25351
  const names = safeParseArray(value).map(String);
25121
25352
  const shown = names.slice(0, max);
25122
25353
  const overflow = names.length > max;
@@ -25125,7 +25356,7 @@ function UserStackReadout({
25125
25356
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
25126
25357
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
25127
25358
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25128
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
25359
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-user-stack-row", children: [
25129
25360
  shown.map((name, i) => /* @__PURE__ */ jsx(
25130
25361
  "span",
25131
25362
  {
@@ -25153,7 +25384,7 @@ function UserStackReadout({
25153
25384
  fontSize: `${Math.round(size * 0.35)}px`,
25154
25385
  marginLeft: `-${size * 0.3}px`
25155
25386
  },
25156
- title: `+${overflowCount} more`,
25387
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
25157
25388
  children: [
25158
25389
  "+",
25159
25390
  overflowCount
@@ -25188,7 +25419,7 @@ function CommitListReadout({
25188
25419
  const shown = commits.slice(0, max);
25189
25420
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
25190
25421
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25191
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
25422
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-commit-list-items", children: shown.map((c, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-commit-list-row", children: [
25192
25423
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
25193
25424
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
25194
25425
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -25268,7 +25499,7 @@ function EventLogReadout({
25268
25499
  };
25269
25500
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
25270
25501
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25271
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
25502
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-event-log-items", children: shown.map((e, i) => {
25272
25503
  const spec = severitySpec[e.severity] ?? severitySpec.info;
25273
25504
  return /* @__PURE__ */ jsxs(
25274
25505
  "li",
@@ -25311,7 +25542,7 @@ function SearchResultReadout({
25311
25542
  const shown = hits.slice(0, max);
25312
25543
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
25313
25544
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25314
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
25545
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-search-result-items", children: shown.map((h, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-search-result-row", children: [
25315
25546
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
25316
25547
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
25317
25548
  h.url ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -25344,7 +25575,7 @@ function RoadmapReadout({
25344
25575
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
25345
25576
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
25346
25577
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25347
- quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
25578
+ quarters.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-row", style: { minHeight: `${viewH}px` }, children: quarters.map((q, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-roadmap-column", children: [
25348
25579
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
25349
25580
  /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-roadmap-items", children: q.items.map((it, j) => /* @__PURE__ */ jsx("li", { className: "cdl-ip-readout-roadmap-item", children: it }, j)) })
25350
25581
  ] }, i)) })
@@ -25376,7 +25607,7 @@ function WeatherForecastReadout({
25376
25607
  }
25377
25608
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
25378
25609
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25379
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
25610
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-row", children: days.map((d, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-day", children: [
25380
25611
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
25381
25612
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
25382
25613
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -25420,17 +25651,14 @@ function VideoCardReadout({
25420
25651
  const shown = videos.slice(0, max);
25421
25652
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
25422
25653
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25423
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
25654
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-video-card-list", children: shown.map((v, i) => /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-video-card-row", children: [
25424
25655
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
25425
25656
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
25426
25657
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
25427
25658
  ] }),
25428
25659
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
25429
25660
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
25430
- /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
25431
- v.views,
25432
- " views"
25433
- ] })
25661
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
25434
25662
  ] })
25435
25663
  ] }, i)) })
25436
25664
  ] });
@@ -25447,7 +25675,7 @@ function OrderStatusReadout({
25447
25675
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
25448
25676
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
25449
25677
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25450
- stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
25678
+ stepArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ul", { className: "cdl-ip-readout-order-status-list", children: stepArr.map((s, i) => {
25451
25679
  const isDone = i < safeCurrent;
25452
25680
  const isCurrent = i === safeCurrent;
25453
25681
  const isPending = i > safeCurrent;
@@ -25497,9 +25725,9 @@ function AttendanceGridReadout({
25497
25725
  const memberArr = safeParseArray(members).map(String);
25498
25726
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
25499
25727
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25500
- rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
25728
+ rows.length === 0 || memberArr.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("table", { className: "cdl-ip-readout-attendance-grid-table", children: [
25501
25729
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
25502
- /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
25730
+ /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.attendance.corner" }) }),
25503
25731
  memberArr.map((m, i) => /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
25504
25732
  ] }) }),
25505
25733
  /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { children: [
@@ -25553,7 +25781,7 @@ function TimezoneClockReadout({
25553
25781
  }
25554
25782
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
25555
25783
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25556
- clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
25784
+ clocks.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-row", children: clocks.map((c, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-cell", children: [
25557
25785
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
25558
25786
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
25559
25787
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -25587,7 +25815,7 @@ function FormSummaryReadout({
25587
25815
  }
25588
25816
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
25589
25817
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25590
- fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
25818
+ fields.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("dl", { className: "cdl-ip-readout-form-summary-list", children: fields.map((f, i) => /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-form-summary-row", children: [
25591
25819
  /* @__PURE__ */ jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
25592
25820
  /* @__PURE__ */ jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
25593
25821
  ] }, i)) })
@@ -25620,7 +25848,7 @@ function SongQueueReadout({
25620
25848
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
25621
25849
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
25622
25850
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25623
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
25851
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx("ol", { className: "cdl-ip-readout-song-queue-list", children: shown.map((s, i) => {
25624
25852
  const isCurrent = i === safeCurrent;
25625
25853
  return /* @__PURE__ */ jsxs(
25626
25854
  "li",
@@ -25665,12 +25893,20 @@ function CalendarMonthReadout({
25665
25893
  } catch {
25666
25894
  }
25667
25895
  }
25668
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
25896
+ const weekDays = [
25897
+ "readout.weekday.0",
25898
+ "readout.weekday.1",
25899
+ "readout.weekday.2",
25900
+ "readout.weekday.3",
25901
+ "readout.weekday.4",
25902
+ "readout.weekday.5",
25903
+ "readout.weekday.6"
25904
+ ];
25669
25905
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
25670
25906
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25671
- days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
25907
+ days.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-calendar-month-widget", children: [
25672
25908
  monthName ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
25673
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: w }, w)) }),
25909
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-weekdays", children: weekDays.map((w) => /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-calendar-month-weekday", children: /* @__PURE__ */ jsx(\u5B57, { k: w }) }, w)) }),
25674
25910
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxs(
25675
25911
  "div",
25676
25912
  {
@@ -25713,7 +25949,7 @@ function TerminalReadout({
25713
25949
  const shown = lines.slice(0, max);
25714
25950
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
25715
25951
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
25716
- shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
25952
+ shown.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-window", children: [
25717
25953
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
25718
25954
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
25719
25955
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -25812,10 +26048,11 @@ function KanbanBoardReadout({
25812
26048
  columnWidth,
25813
26049
  max
25814
26050
  }) {
26051
+ const \u5F15\u304F = use\u5B57\u5F15();
25815
26052
  const buckets = {
25816
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
25817
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
25818
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
26053
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
26054
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
26055
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
25819
26056
  };
25820
26057
  const trimmed = value.trim();
25821
26058
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -25932,7 +26169,7 @@ function KanbanBoardReadout({
25932
26169
  )
25933
26170
  ] }, ti);
25934
26171
  }),
25935
- overflow > 0 ? /* @__PURE__ */ jsxs(
26172
+ overflow > 0 ? /* @__PURE__ */ jsx(
25936
26173
  "text",
25937
26174
  {
25938
26175
  x: x + columnWidth / 2,
@@ -25941,11 +26178,7 @@ function KanbanBoardReadout({
25941
26178
  textAnchor: "middle",
25942
26179
  fill: "#64748b",
25943
26180
  style: { userSelect: "none" },
25944
- children: [
25945
- "+",
25946
- overflow,
25947
- " more"
25948
- ]
26181
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
25949
26182
  }
25950
26183
  ) : null
25951
26184
  ] }, k);
@@ -26502,7 +26735,7 @@ function UserPresenceReadout({
26502
26735
  )
26503
26736
  ] }, i);
26504
26737
  }),
26505
- overflow > 0 ? /* @__PURE__ */ jsxs(
26738
+ overflow > 0 ? /* @__PURE__ */ jsx(
26506
26739
  "text",
26507
26740
  {
26508
26741
  x: width / 2,
@@ -26511,11 +26744,7 @@ function UserPresenceReadout({
26511
26744
  textAnchor: "middle",
26512
26745
  fill: "#64748b",
26513
26746
  style: { userSelect: "none" },
26514
- children: [
26515
- "+",
26516
- overflow,
26517
- " more"
26518
- ]
26747
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
26519
26748
  }
26520
26749
  ) : null
26521
26750
  ]
@@ -26566,12 +26795,7 @@ function RatingThumbReadout({
26566
26795
  "\u25B2 ",
26567
26796
  upCount
26568
26797
  ] }),
26569
- /* @__PURE__ */ jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
26570
- upPct,
26571
- "% up \xB7 ",
26572
- total,
26573
- " votes"
26574
- ] }),
26798
+ /* @__PURE__ */ jsx("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.ratingThumb.summary", v: { pct: upPct, total } }) }),
26575
26799
  /* @__PURE__ */ jsxs(
26576
26800
  "text",
26577
26801
  {
@@ -26746,11 +26970,7 @@ function KpiTrendTileReadout({
26746
26970
  deltaPct.toFixed(1),
26747
26971
  "%)"
26748
26972
  ] }),
26749
- /* @__PURE__ */ jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
26750
- "prev ",
26751
- prev,
26752
- unit
26753
- ] }),
26973
+ /* @__PURE__ */ jsx("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.kpiTrend.prev", v: { v: `${prev}${unit}` } }) }),
26754
26974
  history.length > 1 ? /* @__PURE__ */ jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
26755
26975
  ]
26756
26976
  }
@@ -26838,7 +27058,7 @@ function QuickPollEmojiReadout({
26838
27058
  )
26839
27059
  ] }, i);
26840
27060
  }),
26841
- /* @__PURE__ */ jsxs(
27061
+ /* @__PURE__ */ jsx(
26842
27062
  "text",
26843
27063
  {
26844
27064
  x: width - 8,
@@ -26847,10 +27067,7 @@ function QuickPollEmojiReadout({
26847
27067
  textAnchor: "end",
26848
27068
  fill: "#64748b",
26849
27069
  style: { userSelect: "none" },
26850
- children: [
26851
- "total ",
26852
- total
26853
- ]
27070
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
26854
27071
  }
26855
27072
  )
26856
27073
  ]
@@ -26985,14 +27202,8 @@ function ThreadSummaryReadout({
26985
27202
  height,
26986
27203
  children: [
26987
27204
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
26988
- /* @__PURE__ */ jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
26989
- participants,
26990
- " participants"
26991
- ] }),
26992
- /* @__PURE__ */ jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
26993
- "last: ",
26994
- lastAuthor
26995
- ] }),
27205
+ /* @__PURE__ */ jsx("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.participants", v: { n: participants } }) }),
27206
+ /* @__PURE__ */ jsx("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.thread.last", v: { name: lastAuthor } }) }),
26996
27207
  /* @__PURE__ */ jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
26997
27208
  unread > 0 ? /* @__PURE__ */ jsxs("g", { "data-cdl-thread-unread": "1", children: [
26998
27209
  /* @__PURE__ */ jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -27023,7 +27234,7 @@ function ReadReceiptReadout({
27023
27234
  colorPending
27024
27235
  }) {
27025
27236
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
27026
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
27237
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
27027
27238
  const iconColor = status === 2 ? colorRead : colorPending;
27028
27239
  const width = 180;
27029
27240
  const height = 32;
@@ -27058,7 +27269,7 @@ function ReadReceiptReadout({
27058
27269
  }
27059
27270
  ) : null
27060
27271
  ] }),
27061
- /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
27272
+ /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: labelKey }) })
27062
27273
  ]
27063
27274
  }
27064
27275
  )
@@ -27072,7 +27283,7 @@ function PasswordStrengthReadout({
27072
27283
  colorWeak
27073
27284
  }) {
27074
27285
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
27075
- const labels = ["too weak", "weak", "fair", "good", "strong"];
27286
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
27076
27287
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
27077
27288
  const barW = 46;
27078
27289
  const gap = 6;
@@ -27116,7 +27327,7 @@ function PasswordStrengthReadout({
27116
27327
  textAnchor: "end",
27117
27328
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
27118
27329
  style: { userSelect: "none" },
27119
- children: labels[level]
27330
+ children: /* @__PURE__ */ jsx(\u5B57, { k: labels[level] })
27120
27331
  }
27121
27332
  )
27122
27333
  ]
@@ -27251,7 +27462,7 @@ function FileDropzoneReadout({
27251
27462
  /* @__PURE__ */ jsx("title", { children: filename }),
27252
27463
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
27253
27464
  ] }),
27254
- /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
27465
+ /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
27255
27466
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
27256
27467
  /* @__PURE__ */ jsx(
27257
27468
  "text",
@@ -27263,7 +27474,7 @@ function FileDropzoneReadout({
27263
27474
  textAnchor: "middle",
27264
27475
  fill: "#64748b",
27265
27476
  style: { userSelect: "none" },
27266
- children: "\u2B06 Drop file here"
27477
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.drop" })
27267
27478
  }
27268
27479
  ),
27269
27480
  /* @__PURE__ */ jsx(
@@ -27275,7 +27486,7 @@ function FileDropzoneReadout({
27275
27486
  textAnchor: "middle",
27276
27487
  fill: "#94a3b8",
27277
27488
  style: { userSelect: "none" },
27278
- children: "or click to browse"
27489
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.browse" })
27279
27490
  }
27280
27491
  )
27281
27492
  ] })
@@ -27310,7 +27521,7 @@ function LogStreamReadout({
27310
27521
  }
27311
27522
  }
27312
27523
  const shown = rows.slice(-5);
27313
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
27524
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
27314
27525
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
27315
27526
  const width = 300;
27316
27527
  const rowH = 18;
@@ -27343,7 +27554,7 @@ function LogStreamReadout({
27343
27554
  fill: "#ffffff",
27344
27555
  fontFamily: "monospace",
27345
27556
  style: { userSelect: "none" },
27346
- children: levelLabels[r.level] ?? "INF"
27557
+ children: /* @__PURE__ */ jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
27347
27558
  }
27348
27559
  ),
27349
27560
  /* @__PURE__ */ jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -27537,10 +27748,10 @@ function CartSummaryReadout({
27537
27748
  if (!Number.isFinite(shipping)) shipping = 0;
27538
27749
  if (!Number.isFinite(total)) total = 0;
27539
27750
  const rows = [
27540
- { l: "Items", v: `${items}`, bold: false },
27541
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27542
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27543
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
27751
+ { l: "readout.cart.items", v: `${items}`, bold: false },
27752
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
27753
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
27754
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
27544
27755
  ];
27545
27756
  const width = 260;
27546
27757
  const rowH = 20;
@@ -27570,7 +27781,7 @@ function CartSummaryReadout({
27570
27781
  fontWeight: isTotal ? 700 : 500,
27571
27782
  fill: isTotal ? colorTotal : "#334155",
27572
27783
  style: { userSelect: "none" },
27573
- children: r.l
27784
+ children: /* @__PURE__ */ jsx(\u5B57, { k: r.l })
27574
27785
  }
27575
27786
  ),
27576
27787
  /* @__PURE__ */ jsx(
@@ -27618,6 +27829,8 @@ function PricingTierReadout({
27618
27829
  }
27619
27830
  }
27620
27831
  if (!Number.isFinite(price)) price = 0;
27832
+ const \u5F15\u304F = use\u5B57\u5F15();
27833
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
27621
27834
  const width = 240;
27622
27835
  const height = 176;
27623
27836
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -27642,7 +27855,7 @@ function PricingTierReadout({
27642
27855
  textAnchor: "middle",
27643
27856
  fill: "#ffffff",
27644
27857
  style: { userSelect: "none" },
27645
- children: planName || "Plan"
27858
+ children: \u898B\u305B\u308B\u540D\u524D
27646
27859
  }
27647
27860
  ),
27648
27861
  /* @__PURE__ */ jsxs(
@@ -27670,7 +27883,7 @@ function PricingTierReadout({
27670
27883
  textAnchor: "middle",
27671
27884
  fill: "#64748b",
27672
27885
  style: { userSelect: "none" },
27673
- children: "per month"
27886
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.pricing.perMonth" })
27674
27887
  }
27675
27888
  ),
27676
27889
  features.slice(0, 3).map((f, i) => {
@@ -27685,7 +27898,7 @@ function PricingTierReadout({
27685
27898
  ] }, i);
27686
27899
  }),
27687
27900
  /* @__PURE__ */ jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
27688
- /* @__PURE__ */ jsxs(
27901
+ /* @__PURE__ */ jsx(
27689
27902
  "text",
27690
27903
  {
27691
27904
  x: width / 2,
@@ -27695,10 +27908,7 @@ function PricingTierReadout({
27695
27908
  textAnchor: "middle",
27696
27909
  fill: "#ffffff",
27697
27910
  style: { userSelect: "none" },
27698
- children: [
27699
- "Get ",
27700
- planName || "Plan"
27701
- ]
27911
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
27702
27912
  }
27703
27913
  )
27704
27914
  ]
@@ -27764,12 +27974,12 @@ function CouponCodeReadout({
27764
27974
  fill: applied ? colorApplied : "#94a3b8",
27765
27975
  fontFamily: "monospace",
27766
27976
  style: { userSelect: "none" },
27767
- children: code || "ENTER CODE"
27977
+ children: code || /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.placeholder" })
27768
27978
  }
27769
27979
  ),
27770
27980
  applied ? /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-applied": "1", children: [
27771
27981
  /* @__PURE__ */ jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
27772
- /* @__PURE__ */ jsxs(
27982
+ /* @__PURE__ */ jsx(
27773
27983
  "text",
27774
27984
  {
27775
27985
  x: boxW + 57,
@@ -27779,11 +27989,7 @@ function CouponCodeReadout({
27779
27989
  textAnchor: "middle",
27780
27990
  fill: "#ffffff",
27781
27991
  style: { userSelect: "none" },
27782
- children: [
27783
- "-",
27784
- discountPct,
27785
- "% off"
27786
- ]
27992
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
27787
27993
  }
27788
27994
  )
27789
27995
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -27798,7 +28004,7 @@ function CouponCodeReadout({
27798
28004
  textAnchor: "middle",
27799
28005
  fill: "#ffffff",
27800
28006
  style: { userSelect: "none" },
27801
- children: "Apply"
28007
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.apply" })
27802
28008
  }
27803
28009
  )
27804
28010
  ] })
@@ -27878,10 +28084,7 @@ function ArticlePreviewReadout({
27878
28084
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
27879
28085
  ] }),
27880
28086
  /* @__PURE__ */ jsx("text", { x: thumbW + 20, y: 60, fontSize: 10, fill: "#334155", style: { userSelect: "none" }, children: excerpt.length > 56 ? `${excerpt.slice(28, 55)}\u2026` : excerpt.slice(28, 56) }),
27881
- /* @__PURE__ */ jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
27882
- "by ",
27883
- author
27884
- ] }),
28087
+ /* @__PURE__ */ jsx("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.article.by", v: { author } }) }),
27885
28088
  /* @__PURE__ */ jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
27886
28089
  ]
27887
28090
  }