@cardenelabs/cdl 0.57.1 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useMemo, useEffect, useState, useSyncExternalStore, useRef, useCallback, useLayoutEffect, useId, createElement } from 'react';
1
+ import { createContext, useMemo, useEffect, useState, useSyncExternalStore, useRef, useCallback, useLayoutEffect, useId, createElement, useContext } from 'react';
2
2
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
3
3
 
4
4
  // src/reactive/internal.ts
@@ -351,6 +351,334 @@ function inputDefaultValue(input) {
351
351
  }
352
352
  }
353
353
 
354
+ // src/lang.ts
355
+ function resolveLang(value) {
356
+ return value === "ja" ? "ja" : "en";
357
+ }
358
+ var en = {
359
+ /** `shape-terminal` の 2 行目 (命令の出力) */
360
+ "terminal.output": "\u2192 12 chunks in 1.8s",
361
+ /** `shape-code-block` の札の file 名 */
362
+ "codeBlock.fileName": "utils.ts",
363
+ /** `shape-kanban-card` の課題の番号 */
364
+ "kanbanCard.id": "CAR-1111",
365
+ /** `shape-kanban-card` の状態の札 */
366
+ "kanbanCard.status": "IN PROG",
367
+ /** `shape-kanban-card` の題の下の説明 */
368
+ "kanbanCard.task": "shape-driven kind \u5B9F\u88C5",
369
+ /** `shape-kanban-card` の期日 */
370
+ "kanbanCard.due": "Jul 10",
371
+ /** `shape-smart-contract` の契約の本文の 1 行 */
372
+ "smartContract.call": "function execute()",
373
+ /** `shape-blockchain-block` の題を渡さない時の見出し */
374
+ "blockchainBlock.title": "Block #421,873",
375
+ /** `shape-blockchain-block` の 1 行目の名前 (塊を識別する値) */
376
+ "blockchainBlock.hash": "hash",
377
+ /** `shape-blockchain-block` の 2 行目の名前 (1 つ前の塊の識別値) */
378
+ "blockchainBlock.prev": "prev",
379
+ /** `shape-blockchain-block` の 3 行目の名前 (取引をまとめた木の根) */
380
+ "blockchainBlock.merkle": "merkle",
381
+ /** `shape-blockchain-block` の 4 行目の名前 (採掘で試した値) */
382
+ "blockchainBlock.nonce": "nonce",
383
+ /** `shape-blockchain-block` の 5 行目の名前 (取引の件数) */
384
+ "blockchainBlock.tx": "tx",
385
+ /** `shape-blockchain-block` の 5 行目の値 */
386
+ "blockchainBlock.txCount": "142 tx",
387
+ /** `shape-rpc-node` の稼働の札 */
388
+ "rpcNode.status": "RPC ONLINE",
389
+ /** `shape-trust-bank` の看板 */
390
+ "trustBank.sign": "TRUST",
391
+ /** `shape-payment-provider` の看板 */
392
+ "paymentProvider.sign": "PAY",
393
+ /** `shape-payment-provider` の状態の札 */
394
+ "paymentProvider.status": "PROCESSING",
395
+ /** `shape-brokerage` の株価の帯 */
396
+ "brokerage.ticker": "\u25B2NKY 38,240 \u25B2AAPL 194",
397
+ /** `shape-brokerage` の看板 */
398
+ "brokerage.sign": "$ SECURITIES",
399
+ /** `shape-exchange` の看板 */
400
+ "exchange.sign": "EXCHANGE",
401
+ /** `shape-exchange` の看板の下の札 */
402
+ "exchange.sub": "clearing",
403
+ /** `shape-atm` の天井の看板 */
404
+ "atm.sign": "ATM CORNER",
405
+ /** `shape-atm` の画面の案内 */
406
+ "atm.screen": "SELECT AMOUNT",
407
+ /** `shape-atm` の決める鍵 */
408
+ "atm.ok": "OK",
409
+ /** `shape-atm` のカードを入れる口の札 */
410
+ "atm.cardSlot": "CARD SLOT",
411
+ /** `shape-storefront` の看板 */
412
+ "storefront.sign": "SHOP",
413
+ /** `shape-storefront` の扉の札 */
414
+ "storefront.open": "OPEN",
415
+ /** `shape-warehouse` の看板 */
416
+ "warehouse.sign": "WAREHOUSE",
417
+ /** `shape-api-gateway` の看板 */
418
+ "apiGateway.sign": "API GATEWAY",
419
+ /** `shape-api-gateway` の 3 行目の要求の種類 */
420
+ "apiGateway.delete": "DEL",
421
+ /** `shape-api-gateway` の 1 行目の宛先 */
422
+ "apiGateway.users": "/users",
423
+ /** `shape-api-gateway` の 2 行目の宛先 */
424
+ "apiGateway.orders": "/orders",
425
+ /** `shape-api-gateway` の 3 行目の宛先 */
426
+ "apiGateway.session": "/session",
427
+ // 読み出し (`readout.*`) と入力欄の固定の字 (#849)。
428
+ // `{名前}` は描く時に値を差し込む位置 (`字を差し込む`)。 語順が言語で変わるので、位置ごと辞書に持つ
429
+ /** 配列を描く読み出しで、値が空の時の字 */
430
+ "readout.empty": "empty",
431
+ /** `sparkline` で点がまだ無い時の字 */
432
+ "readout.sparkline.waiting": "waiting",
433
+ /** 時の流れの入力欄の速さ */
434
+ "input.timeline.speed": "{speed}x",
435
+ /** 時の流れの入力欄の経過と長さ (秒) */
436
+ "input.timeline.time": "{t}s / {d}s",
437
+ /** `sequence-timeline` の点の見出し */
438
+ "readout.sequenceTimeline.title": "{name}: t={t}",
439
+ /** `bubble-chart` の泡の見出し */
440
+ "readout.bubbleChart.title": "({x}, {y}) r={r}",
441
+ /** `calendar-heatmap` の升目の見出し (`i` は 0 から) */
442
+ "readout.calendarHeatmap.title": "day {i}: {v}",
443
+ /** `candlestick` の足の見出し (始値 / 高値 / 安値 / 終値) */
444
+ "readout.candlestick.title": "O:{o} H:{h} L:{l} C:{c}",
445
+ /** `slope` の左の目盛 */
446
+ "readout.slope.before": "before",
447
+ /** `slope` の右の目盛 */
448
+ "readout.slope.after": "after",
449
+ /** `bullet-chart` の実績の見出し */
450
+ "readout.bulletChart.actual": "actual: {v}",
451
+ /** `bullet-chart` の目標の見出し */
452
+ "readout.bulletChart.target": "target: {v}",
453
+ /** `rating` の塗った星の見出し */
454
+ "readout.rating.full": "full",
455
+ /** `rating` の半分塗った星の見出し */
456
+ "readout.rating.half": "half",
457
+ /** `rating` の塗っていない星の見出し */
458
+ "readout.rating.empty": "empty",
459
+ /** `price-tag` の割引額 */
460
+ "readout.priceTag.save": "You save {amount}",
461
+ /** `confidence-meter` の低い帯の名前 */
462
+ "readout.confidence.low": "low",
463
+ /** `confidence-meter` の中ほどの帯の名前 */
464
+ "readout.confidence.mid": "mid",
465
+ /** `confidence-meter` の高い帯の名前 */
466
+ "readout.confidence.high": "high",
467
+ /** 並べきれなかった件数 (`user-stack` / `kanban-board` / `user-presence`) */
468
+ "readout.more": "+{n} more",
469
+ /** `video-card` の再生数 */
470
+ "readout.videoCard.views": "{v} views",
471
+ /** `attendance-grid` の角の見出し */
472
+ "readout.attendance.corner": "day",
473
+ /** `calendar-month` の曜日 (日曜) */
474
+ "readout.weekday.0": "Sun",
475
+ /** `calendar-month` の曜日 (月曜) */
476
+ "readout.weekday.1": "Mon",
477
+ /** `calendar-month` の曜日 (火曜) */
478
+ "readout.weekday.2": "Tue",
479
+ /** `calendar-month` の曜日 (水曜) */
480
+ "readout.weekday.3": "Wed",
481
+ /** `calendar-month` の曜日 (木曜) */
482
+ "readout.weekday.4": "Thu",
483
+ /** `calendar-month` の曜日 (金曜) */
484
+ "readout.weekday.5": "Fri",
485
+ /** `calendar-month` の曜日 (土曜) */
486
+ "readout.weekday.6": "Sat",
487
+ /** `rating-thumb` の賛成の割合と票数 */
488
+ "readout.ratingThumb.summary": "{pct}% up \xB7 {total} votes",
489
+ /** `kpi-trend-tile` の前の期間の値 */
490
+ "readout.kpiTrend.prev": "prev {v}",
491
+ /** `quick-poll-emoji` の票の合計 */
492
+ "readout.poll.total": "total {n}",
493
+ /** `thread-summary` の参加者の数 */
494
+ "readout.thread.participants": "{n} participants",
495
+ /** `thread-summary` の最後に書いた人 */
496
+ "readout.thread.last": "last: {name}",
497
+ /** `read-receipt` の送信した段 */
498
+ "readout.readReceipt.sent": "sent",
499
+ /** `read-receipt` の相手に届いた段 */
500
+ "readout.readReceipt.delivered": "delivered",
501
+ /** `read-receipt` の読まれた段 */
502
+ "readout.readReceipt.read": "read",
503
+ /** `password-strength` の段階 0 */
504
+ "readout.password.0": "too weak",
505
+ /** `password-strength` の段階 1 */
506
+ "readout.password.1": "weak",
507
+ /** `password-strength` の段階 2 */
508
+ "readout.password.2": "fair",
509
+ /** `password-strength` の段階 3 */
510
+ "readout.password.3": "good",
511
+ /** `password-strength` の段階 4 */
512
+ "readout.password.4": "strong",
513
+ /** `file-dropzone` で取り込んだ後の字 */
514
+ "readout.dropzone.uploaded": "uploaded",
515
+ /** `file-dropzone` の空の時の 1 行目 */
516
+ "readout.dropzone.drop": "\u2B06 Drop file here",
517
+ /** `file-dropzone` の空の時の 2 行目 */
518
+ "readout.dropzone.browse": "or click to browse",
519
+ /** `log-stream` の重さ 0 (調べるための詳細) */
520
+ "readout.log.0": "DBG",
521
+ /** `log-stream` の重さ 1 (知らせ) */
522
+ "readout.log.1": "INF",
523
+ /** `log-stream` の重さ 2 (警告) */
524
+ "readout.log.2": "WRN",
525
+ /** `log-stream` の重さ 3 (異常) */
526
+ "readout.log.3": "ERR",
527
+ /** `cart-summary` の点数 */
528
+ "readout.cart.items": "Items",
529
+ /** `cart-summary` の小計 */
530
+ "readout.cart.subtotal": "Subtotal",
531
+ /** `cart-summary` の送料 */
532
+ "readout.cart.shipping": "Shipping",
533
+ /** `cart-summary` の合計 */
534
+ "readout.cart.total": "Total",
535
+ /** `pricing-tier` で名前が空の時の名前 */
536
+ "readout.pricing.plan": "Plan",
537
+ /** `pricing-tier` の価格の後ろ */
538
+ "readout.pricing.perMonth": "per month",
539
+ /** `pricing-tier` の押す札 */
540
+ "readout.pricing.get": "Get {name}",
541
+ /** `coupon-code` で番号が空の時の字 */
542
+ "readout.coupon.placeholder": "ENTER CODE",
543
+ /** `coupon-code` の割引の割合 */
544
+ "readout.coupon.off": "-{pct}% off",
545
+ /** `coupon-code` の押す札 */
546
+ "readout.coupon.apply": "Apply",
547
+ /** `article-preview` の書いた人 */
548
+ "readout.article.by": "by {author}",
549
+ /** `priority-badge` の高い優先度の表示 (値は `high` / `2` で読む) */
550
+ "readout.priority.high": "HIGH",
551
+ /** `priority-badge` の中ほどの優先度の表示 */
552
+ "readout.priority.med": "MED",
553
+ /** `priority-badge` の低い優先度の表示 (値は `low` / `0` で読む) */
554
+ "readout.priority.low": "LOW",
555
+ /** `kanban-board` の列の見出し (値は `todo` で読む) */
556
+ "readout.kanban.todo": "Todo",
557
+ /** `kanban-board` の列の見出し (値は `inprogress` で読む) */
558
+ "readout.kanban.inprogress": "In Progress",
559
+ /** `kanban-board` の列の見出し (値は `done` で読む) */
560
+ "readout.kanban.done": "Done",
561
+ /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
562
+ "readout.trafficLight.red": "red",
563
+ /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
564
+ "readout.trafficLight.yellow": "yellow",
565
+ /** `traffic-light` の緑の灯の見出し (値は `green` で読む) */
566
+ "readout.trafficLight.green": "green"
567
+ };
568
+ var ja = {
569
+ "terminal.output": "\u2192 1.8 \u79D2\u3067\u5B8C\u4E86",
570
+ "codeBlock.fileName": "\u5171\u901A.ts",
571
+ "kanbanCard.id": "#1111",
572
+ "kanbanCard.status": "\u9032\u884C\u4E2D",
573
+ "kanbanCard.task": "\u5F62\u3092\u5B9F\u88C5",
574
+ "kanbanCard.due": "7/10",
575
+ "smartContract.call": "\u81EA\u52D5\u3067\u5B9F\u884C\u3059\u308B",
576
+ "blockchainBlock.title": "\u30D6\u30ED\u30C3\u30AF #421,873",
577
+ "blockchainBlock.hash": "\u30CF\u30C3\u30B7\u30E5",
578
+ "blockchainBlock.prev": "\u76F4\u524D",
579
+ "blockchainBlock.merkle": "\u6728\u306E\u6839",
580
+ "blockchainBlock.nonce": "\u30CE\u30F3\u30B9",
581
+ "blockchainBlock.tx": "\u53D6\u5F15",
582
+ "blockchainBlock.txCount": "142 \u4EF6",
583
+ "rpcNode.status": "RPC \u7A3C\u50CD\u4E2D",
584
+ "trustBank.sign": "\u4FE1\u8A17",
585
+ "paymentProvider.sign": "\u6C7A\u6E08",
586
+ "paymentProvider.status": "\u51E6\u7406\u4E2D",
587
+ "brokerage.ticker": "\u25B2\u65E5\u7D4C 38,240 \u25B2\u6771\u8A3C 2,710",
588
+ "brokerage.sign": "\xA5 \u8A3C\u5238",
589
+ "exchange.sign": "\u53D6\u5F15\u6240",
590
+ "exchange.sub": "\u6E05\u7B97",
591
+ "atm.sign": "ATM \u30B3\u30FC\u30CA\u30FC",
592
+ "atm.screen": "\u91D1\u984D\u3092\u9078\u629E",
593
+ "atm.ok": "\u78BA\u5B9A",
594
+ "atm.cardSlot": "\u30AB\u30FC\u30C9\u633F\u5165\u53E3",
595
+ "storefront.sign": "\u5546\u5E97",
596
+ "storefront.open": "\u55B6\u696D",
597
+ "warehouse.sign": "\u5009\u5EAB",
598
+ "apiGateway.sign": "API \u5165\u53E3",
599
+ "apiGateway.delete": "DELETE",
600
+ "apiGateway.users": "/\u5229\u7528\u8005",
601
+ "apiGateway.orders": "/\u6CE8\u6587",
602
+ "apiGateway.session": "/\u63A5\u7D9A",
603
+ "readout.empty": "\u306A\u3057",
604
+ "readout.sparkline.waiting": "\u5F85\u6A5F\u4E2D",
605
+ "input.timeline.speed": "{speed}\u500D",
606
+ "input.timeline.time": "{t}\u79D2 / {d}\u79D2",
607
+ "readout.sequenceTimeline.title": "{name}: \u6642\u523B {t}",
608
+ "readout.bubbleChart.title": "({x}, {y}) \u534A\u5F84 {r}",
609
+ "readout.calendarHeatmap.title": "{i} \u65E5\u76EE: {v}",
610
+ "readout.candlestick.title": "\u59CB {o} \u9AD8 {h} \u5B89 {l} \u7D42 {c}",
611
+ "readout.slope.before": "\u524D",
612
+ "readout.slope.after": "\u5F8C",
613
+ "readout.bulletChart.actual": "\u5B9F\u7E3E: {v}",
614
+ "readout.bulletChart.target": "\u76EE\u6A19: {v}",
615
+ "readout.rating.full": "\u6E80",
616
+ "readout.rating.half": "\u534A\u5206",
617
+ "readout.rating.empty": "\u7A7A",
618
+ "readout.priceTag.save": "{amount} \u304A\u5F97",
619
+ "readout.confidence.low": "\u4F4E",
620
+ "readout.confidence.mid": "\u4E2D",
621
+ "readout.confidence.high": "\u9AD8",
622
+ "readout.more": "\u307B\u304B {n}",
623
+ "readout.videoCard.views": "{v} \u56DE\u8996\u8074",
624
+ "readout.attendance.corner": "\u65E5",
625
+ "readout.weekday.0": "\u65E5",
626
+ "readout.weekday.1": "\u6708",
627
+ "readout.weekday.2": "\u706B",
628
+ "readout.weekday.3": "\u6C34",
629
+ "readout.weekday.4": "\u6728",
630
+ "readout.weekday.5": "\u91D1",
631
+ "readout.weekday.6": "\u571F",
632
+ "readout.ratingThumb.summary": "\u8CDB\u6210 {pct}% \xB7 {total} \u7968",
633
+ "readout.kpiTrend.prev": "\u524D\u56DE {v}",
634
+ "readout.poll.total": "\u5408\u8A08 {n}",
635
+ "readout.thread.participants": "{n} \u4EBA",
636
+ "readout.thread.last": "\u6700\u5F8C: {name}",
637
+ "readout.readReceipt.sent": "\u9001\u4FE1\u6E08\u307F",
638
+ "readout.readReceipt.delivered": "\u914D\u4FE1\u6E08\u307F",
639
+ "readout.readReceipt.read": "\u65E2\u8AAD",
640
+ "readout.password.0": "\u5F31\u3059\u304E\u308B",
641
+ "readout.password.1": "\u5F31\u3044",
642
+ "readout.password.2": "\u666E\u901A",
643
+ "readout.password.3": "\u826F\u3044",
644
+ "readout.password.4": "\u5F37\u3044",
645
+ "readout.dropzone.uploaded": "\u53D6\u308A\u8FBC\u307F\u6E08\u307F",
646
+ "readout.dropzone.drop": "\u2B06 \u3053\u3053\u306B\u30D5\u30A1\u30A4\u30EB\u3092\u7F6E\u304F",
647
+ "readout.dropzone.browse": "\u307E\u305F\u306F\u62BC\u3057\u3066\u9078\u3076",
648
+ "readout.log.0": "\u8A73\u7D30",
649
+ "readout.log.1": "\u60C5\u5831",
650
+ "readout.log.2": "\u8B66\u544A",
651
+ "readout.log.3": "\u7570\u5E38",
652
+ "readout.cart.items": "\u70B9\u6570",
653
+ "readout.cart.subtotal": "\u5C0F\u8A08",
654
+ "readout.cart.shipping": "\u9001\u6599",
655
+ "readout.cart.total": "\u5408\u8A08",
656
+ "readout.pricing.plan": "\u30D7\u30E9\u30F3",
657
+ "readout.pricing.perMonth": "\u6708\u984D",
658
+ "readout.pricing.get": "{name}\u3092\u9078\u3076",
659
+ "readout.coupon.placeholder": "\u30B3\u30FC\u30C9\u3092\u5165\u529B",
660
+ "readout.coupon.off": "-{pct}% \u5F15\u304D",
661
+ "readout.coupon.apply": "\u9069\u7528",
662
+ "readout.article.by": "\u6587: {author}",
663
+ "readout.priority.high": "\u9AD8",
664
+ "readout.priority.med": "\u4E2D",
665
+ "readout.priority.low": "\u4F4E",
666
+ "readout.kanban.todo": "\u672A\u7740\u624B",
667
+ "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
668
+ "readout.kanban.done": "\u5B8C\u4E86",
669
+ "readout.trafficLight.red": "\u8D64",
670
+ "readout.trafficLight.yellow": "\u9EC4",
671
+ "readout.trafficLight.green": "\u7DD1"
672
+ };
673
+ var CDL_TEXT = { en, ja };
674
+ function \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang) {
675
+ const \u8A00\u8A9E = lang ?? "en";
676
+ return (key) => CDL_TEXT[\u8A00\u8A9E][key];
677
+ }
678
+ function \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(template, values) {
679
+ return template.replace(/\{(\w+)\}/g, (whole, name) => name in values ? String(values[name]) : whole);
680
+ }
681
+
354
682
  // src/formula/ast.ts
355
683
  var ALLOWED_MATH_FNS = /* @__PURE__ */ new Set([
356
684
  "min",
@@ -1261,6 +1589,23 @@ function textWidth(s, size, \u5B57\u9001\u308A = 0) {
1261
1589
  }
1262
1590
  return \u5E45 * size + \u5B57\u9001\u308A * \u5B57\u6570;
1263
1591
  }
1592
+ var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = createContext("en");
1593
+ function use\u5B57\u5F15() {
1594
+ const lang = useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
1595
+ return (key, values) => values ? \u5B57\u3092\u5DEE\u3057\u8FBC\u3080(CDL_TEXT[lang][key], values) : CDL_TEXT[lang][key];
1596
+ }
1597
+ function \u5B57({ k, v }) {
1598
+ const \u5F15\u304F = use\u5B57\u5F15();
1599
+ return /* @__PURE__ */ jsx(Fragment, { children: \u5F15\u304F(k, v) });
1600
+ }
1601
+ function \u5B57\u306E\u898B\u51FA\u3057({
1602
+ k,
1603
+ v,
1604
+ \u524D = ""
1605
+ }) {
1606
+ const \u5F15\u304F = use\u5B57\u5F15();
1607
+ return /* @__PURE__ */ jsx("title", { children: k === void 0 ? "" : `${\u524D}${\u5F15\u304F(k, v)}` });
1608
+ }
1264
1609
  function createInteractiveSignalsAccessor(diagram2, signals, formula, scroll) {
1265
1610
  const kindByInputId = /* @__PURE__ */ new Map();
1266
1611
  for (const inp of diagram2.inputs ?? []) {
@@ -1575,20 +1920,23 @@ function useInteractiveIntegration(diagram2, options = {}) {
1575
1920
  const readouts = diagram2.readouts ?? [];
1576
1921
  if (inputs.length === 0 && scrolls.length === 0 && formulasList.length === 0 && readouts.length === 0)
1577
1922
  return null;
1578
- return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1579
- inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1580
- formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
1581
- FormulaReadout,
1582
- {
1583
- id: f.id,
1584
- expression: f.expression,
1585
- value: stateOverrides[f.id]
1586
- },
1587
- f.id
1588
- )) }),
1589
- 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)) }),
1590
- readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1591
- ] });
1923
+ return (
1924
+ // 操作部の中の読み出しと入力欄へ、図の言語を届ける (#849)。 型の外の値は英語に落ちる
1925
+ /* @__PURE__ */ jsx(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E.Provider, { value: resolveLang(diagram2.lang), children: /* @__PURE__ */ jsxs("div", { className: "cdl-ip-root", "data-cdl-interactive-panel": "true", children: [
1926
+ inputs.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: inputs.map((input) => /* @__PURE__ */ jsx(InputWidget, { input, signal: signals[input.id] }, input.id)) }),
1927
+ formulasList.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: formulasList.map((f) => /* @__PURE__ */ jsx(
1928
+ FormulaReadout,
1929
+ {
1930
+ id: f.id,
1931
+ expression: f.expression,
1932
+ value: stateOverrides[f.id]
1933
+ },
1934
+ f.id
1935
+ )) }),
1936
+ 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)) }),
1937
+ readouts.length > 0 && /* @__PURE__ */ jsx("div", { className: "cdl-ip-group", children: readouts.map((r) => /* @__PURE__ */ jsx(ReadoutWidget, { readout: r, stateOverrides: mergedStateValues }, r.id)) })
1938
+ ] }) })
1939
+ );
1592
1940
  }, [diagram2, signals, stateOverrides, mergedStateValues]);
1593
1941
  return { stateOverrides, panel, svgRef, containerRef };
1594
1942
  }
@@ -3449,7 +3797,7 @@ function SparklineReadout({
3449
3797
  if (points.length < 2) {
3450
3798
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sparkline", "data-cdl-readout": id, children: [
3451
3799
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
3452
- /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-sparkline-empty", style: { width: w, height: h }, children: points.length === 0 ? "waiting" : "\u2014" }),
3800
+ /* @__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" }),
3453
3801
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-sparkline-value", children: Number.isFinite(value) ? value : "\u2014" })
3454
3802
  ] });
3455
3803
  }
@@ -3712,27 +4060,24 @@ function TimelineWidget({
3712
4060
  className: "cdl-ip-timeline-scrubber"
3713
4061
  }
3714
4062
  ),
3715
- /* @__PURE__ */ jsxs(
4063
+ /* @__PURE__ */ jsx(
3716
4064
  "button",
3717
4065
  {
3718
4066
  type: "button",
3719
4067
  className: "cdl-ip-timeline-btn cdl-ip-timeline-speed",
3720
4068
  onClick: cycleSpeed,
3721
4069
  "aria-label": "speed",
3722
- children: [
3723
- speed,
3724
- "x"
3725
- ]
4070
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "input.timeline.speed", v: { speed } })
3726
4071
  }
3727
4072
  )
3728
4073
  ] }),
3729
- /* @__PURE__ */ jsxs("span", { className: "cdl-ip-timeline-time", children: [
3730
- (progress * (input.duration / 1e3)).toFixed(1),
3731
- "s /",
3732
- " ",
3733
- (input.duration / 1e3).toFixed(1),
3734
- "s"
3735
- ] })
4074
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-timeline-time", children: /* @__PURE__ */ jsx(
4075
+ \u5B57,
4076
+ {
4077
+ k: "input.timeline.time",
4078
+ v: { t: (progress * (input.duration / 1e3)).toFixed(1), d: (input.duration / 1e3).toFixed(1) }
4079
+ }
4080
+ ) })
3736
4081
  ] });
3737
4082
  }
3738
4083
  function RangeWidget({
@@ -3970,7 +4315,7 @@ function ArrayBarReadout({
3970
4315
  const range = max - min || 1;
3971
4316
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-array-bar", "data-cdl-readout": id, children: [
3972
4317
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
3973
- /* @__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) => {
4318
+ /* @__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) => {
3974
4319
  const h = Math.max(0, Math.min(1, (v - min) / range));
3975
4320
  return /* @__PURE__ */ jsx(
3976
4321
  "span",
@@ -4047,7 +4392,7 @@ function StackedBarReadout({
4047
4392
  const range = max - min || 1;
4048
4393
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-stacked-bar", "data-cdl-readout": id, children: [
4049
4394
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4050
- /* @__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) => {
4395
+ /* @__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) => {
4051
4396
  const va = arrA[i] ?? 0;
4052
4397
  const vb = arrB[i] ?? 0;
4053
4398
  const hA = Math.max(0, Math.min(1, (va - min) / range));
@@ -4142,7 +4487,7 @@ function MatrixReadout({
4142
4487
  };
4143
4488
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-matrix", "data-cdl-readout": id, children: [
4144
4489
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4145
- rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsx(
4490
+ rows === 0 || cols === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsx(
4146
4491
  "svg",
4147
4492
  {
4148
4493
  className: "cdl-ip-readout-matrix-svg",
@@ -4200,7 +4545,7 @@ function ProgressGroupReadout({
4200
4545
  const labelArr = labels ? safeParseArray(labels).map(String) : [];
4201
4546
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-progress-group", "data-cdl-readout": id, children: [
4202
4547
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4203
- 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) => {
4548
+ 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) => {
4204
4549
  const pct = Math.max(0, Math.min(100, v / (max || 1) * 100));
4205
4550
  const rowLabel = labelArr[i] ?? String(i + 1);
4206
4551
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-progress-group-row", children: [
@@ -4262,7 +4607,7 @@ function SequenceTimelineReadout({
4262
4607
  const xFor = (t) => pad + (Math.max(min, Math.min(max, t)) - min) / range * (viewW - pad * 2);
4263
4608
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sequence-timeline", "data-cdl-readout": id, children: [
4264
4609
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4265
- events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(
4610
+ events.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(
4266
4611
  "svg",
4267
4612
  {
4268
4613
  className: "cdl-ip-readout-sequence-timeline-svg",
@@ -4276,7 +4621,7 @@ function SequenceTimelineReadout({
4276
4621
  events.map((e, i) => {
4277
4622
  const x = xFor(e.t);
4278
4623
  return /* @__PURE__ */ jsxs("g", { "data-cdl-event-marker": e.name, children: [
4279
- /* @__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}` }) }),
4624
+ /* @__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 } }) }),
4280
4625
  /* @__PURE__ */ jsx("text", { x, y: trackY - 12, textAnchor: sequenceLabelAnchor(x, e.name, 10, viewW), fontSize: 10, fill: "var(--v4-ink, #1a1f2a)", children: e.name }),
4281
4626
  /* @__PURE__ */ jsx("text", { x, y: trackY + 18, textAnchor: "middle", fontSize: 9, fill: "var(--v4-mute, #64748b)", children: e.t })
4282
4627
  ] }, i);
@@ -4319,7 +4664,7 @@ function RadarReadout({
4319
4664
  const polygon = points.length ? points.map((p) => `${p.x.toFixed(1)},${p.y.toFixed(1)}`).join(" ") : "";
4320
4665
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-radar", "data-cdl-readout": id, children: [
4321
4666
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4322
- 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: [
4667
+ 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: [
4323
4668
  [0.33, 0.66, 1].map((t) => /* @__PURE__ */ jsx(
4324
4669
  "polygon",
4325
4670
  {
@@ -4381,14 +4726,14 @@ function BubbleChartReadout({
4381
4726
  const maxCircleR = 18;
4382
4727
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-bubble-chart", "data-cdl-readout": id, children: [
4383
4728
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4384
- 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: [
4729
+ 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: [
4385
4730
  /* @__PURE__ */ jsx("line", { x1: pad, x2: viewW - pad, y1: viewH - pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4386
4731
  /* @__PURE__ */ jsx("line", { x1: pad, x2: pad, y1: pad, y2: viewH - pad, stroke: "rgba(148,163,184,0.4)" }),
4387
4732
  bubbles.map((b, i) => {
4388
4733
  const cx = pad + (Math.max(xMin, Math.min(xMax, b.x)) - xMin) / xRange * w;
4389
4734
  const cy = viewH - pad - (Math.max(yMin, Math.min(yMax, b.y)) - yMin) / yRange * h;
4390
4735
  const r = 4 + (Math.max(rMin, Math.min(rMax, b.r)) - rMin) / rRange * (maxCircleR - 4);
4391
- 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);
4736
+ 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);
4392
4737
  })
4393
4738
  ] })
4394
4739
  ] });
@@ -4411,7 +4756,7 @@ function DonutReadout({
4411
4756
  let acc = 0;
4412
4757
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-donut", "data-cdl-readout": id, children: [
4413
4758
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4414
- 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) => {
4759
+ 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) => {
4415
4760
  const from = acc;
4416
4761
  const to = acc + v / total;
4417
4762
  acc = to;
@@ -4472,7 +4817,7 @@ function CalendarHeatmapReadout({
4472
4817
  height: cellSize,
4473
4818
  rx: 2,
4474
4819
  fill,
4475
- children: /* @__PURE__ */ jsx("title", { children: `day ${i}: ${v}` })
4820
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: "readout.calendarHeatmap.title", v: { i, v } })
4476
4821
  },
4477
4822
  i
4478
4823
  );
@@ -4592,7 +4937,7 @@ function CandlestickReadout({
4592
4937
  const candleW = candles.length === 0 ? 0 : Math.max(3, (w - (candles.length - 1) * 3) / candles.length);
4593
4938
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-candlestick", "data-cdl-readout": id, children: [
4594
4939
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4595
- 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) => {
4940
+ 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) => {
4596
4941
  const cx = pad + i * (candleW + 3) + candleW / 2;
4597
4942
  const yHigh = yFor(cd.h);
4598
4943
  const yLow = yFor(cd.l);
@@ -4613,7 +4958,7 @@ function CandlestickReadout({
4613
4958
  height: bodyH,
4614
4959
  fill: isUp ? color : color,
4615
4960
  fillOpacity: isUp ? 1 : 0.85,
4616
- children: /* @__PURE__ */ jsx("title", { children: `O:${cd.o} H:${cd.h} L:${cd.l} C:${cd.c}` })
4961
+ 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 } })
4617
4962
  }
4618
4963
  )
4619
4964
  ] }, i);
@@ -4647,7 +4992,7 @@ function VennReadout({
4647
4992
  const cxB = viewW / 2 + gap / 2;
4648
4993
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-venn", "data-cdl-readout": id, children: [
4649
4994
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4650
- 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: [
4995
+ 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: [
4651
4996
  /* @__PURE__ */ jsx("circle", { cx: cxA, cy, r: rA, fill: colorA, fillOpacity: 0.4, stroke: colorA, strokeWidth: 1.5 }),
4652
4997
  /* @__PURE__ */ jsx("circle", { cx: cxB, cy, r: rB, fill: colorB, fillOpacity: 0.4, stroke: colorB, strokeWidth: 1.5 }),
4653
4998
  /* @__PURE__ */ jsx("text", { x: cxA - rA + 8, y: cy - 4, fontSize: 11, fill: "var(--v4-ink, #1a1f2a)", fontWeight: 600, children: labelA }),
@@ -4698,11 +5043,11 @@ function SlopeReadout({
4698
5043
  const yFor = (v) => pad + (1 - (Math.max(min, Math.min(max, v)) - min) / range) * h;
4699
5044
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-slope", "data-cdl-readout": id, children: [
4700
5045
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4701
- 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: [
5046
+ 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: [
4702
5047
  /* @__PURE__ */ jsx("line", { x1: xL, x2: xL, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4703
5048
  /* @__PURE__ */ jsx("line", { x1: xR, x2: xR, y1: pad - 4, y2: viewH - pad + 4, stroke: "rgba(148,163,184,0.4)" }),
4704
- /* @__PURE__ */ jsx("text", { x: xL, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "before" }),
4705
- /* @__PURE__ */ jsx("text", { x: xR, y: viewH - 4, fontSize: 9, textAnchor: "middle", fill: "var(--v4-mute, #64748b)", children: "after" }),
5049
+ /* @__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" }) }),
5050
+ /* @__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" }) }),
4706
5051
  slopes.map((s, i) => {
4707
5052
  const yB = yFor(s.before);
4708
5053
  const yA = yFor(s.after);
@@ -4749,7 +5094,7 @@ function FunnelReadout({
4749
5094
  const [bR, bG, bB] = hexToRgb(colorBottom);
4750
5095
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-funnel", "data-cdl-readout": id, children: [
4751
5096
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4752
- 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) => {
5097
+ 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) => {
4753
5098
  const ratio = i / Math.max(1, stages.length - 1);
4754
5099
  const w = maxCount > 0 ? s.count / maxCount * (viewW - 12) : 0;
4755
5100
  const yTop = i * stageH + 2;
@@ -4811,7 +5156,7 @@ function GanttReadout({
4811
5156
  const xFor = (v) => labelW + (Math.max(min, Math.min(max, v)) - min) / range * (viewW - labelW - pad);
4812
5157
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-gantt", "data-cdl-readout": id, children: [
4813
5158
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4814
- 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) => {
5159
+ 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) => {
4815
5160
  const y = pad + i * rowH;
4816
5161
  const x1 = xFor(t.start);
4817
5162
  const x2 = xFor(t.start + t.duration);
@@ -4902,7 +5247,7 @@ function TreemapReadout({
4902
5247
  }
4903
5248
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-treemap", "data-cdl-readout": id, children: [
4904
5249
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4905
- 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: [
5250
+ 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: [
4906
5251
  /* @__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}` }) }),
4907
5252
  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
4908
5253
  ] }, i)) })
@@ -4968,7 +5313,7 @@ function SankeyReadout({
4968
5313
  const rightUsed = {};
4969
5314
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-sankey", "data-cdl-readout": id, children: [
4970
5315
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
4971
- 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: [
5316
+ 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: [
4972
5317
  leftNodes.map((n, i) => {
4973
5318
  const p = leftPos[n.name];
4974
5319
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -5030,7 +5375,7 @@ function PolarAreaReadout({
5030
5375
  const maxR = Math.min(cx, cy) - 20;
5031
5376
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-polar-area", "data-cdl-readout": id, children: [
5032
5377
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5033
- 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: [
5378
+ 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: [
5034
5379
  [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)),
5035
5380
  arr.map((v, i) => {
5036
5381
  const ratio = Math.sqrt(Math.max(0, Math.min(max, v)) / (max || 1));
@@ -5076,7 +5421,7 @@ function StepIndicatorReadout({
5076
5421
  const cy = viewH / 2 - 2;
5077
5422
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-step-indicator", "data-cdl-readout": id, children: [
5078
5423
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5079
- 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: [
5424
+ 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: [
5080
5425
  n > 1 ? Array.from({ length: n - 1 }).map((_, i) => {
5081
5426
  const x1 = pad + i * step;
5082
5427
  const x2 = pad + (i + 1) * step;
@@ -5166,8 +5511,8 @@ function BulletChartReadout({
5166
5511
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: badX - pad, height: trackH, fill: "rgba(239,68,68,0.25)", rx: 2 }),
5167
5512
  /* @__PURE__ */ jsx("rect", { x: badX, y: pad, width: avgX - badX, height: trackH, fill: "rgba(234,179,8,0.25)" }),
5168
5513
  /* @__PURE__ */ jsx("rect", { x: avgX, y: pad, width: pad + w - avgX, height: trackH, fill: "rgba(34,197,94,0.25)" }),
5169
- /* @__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}` }) }),
5170
- /* @__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}` }) })
5514
+ /* @__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 } }) }),
5515
+ /* @__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 } }) })
5171
5516
  ] })
5172
5517
  ] });
5173
5518
  }
@@ -5222,7 +5567,7 @@ function LeaderboardReadout({
5222
5567
  const medals = ["#eab308", "#94a3b8", "#c2410c"];
5223
5568
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-leaderboard", "data-cdl-readout": id, children: [
5224
5569
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5225
- 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) => {
5570
+ 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) => {
5226
5571
  const pct = topMax > 0 ? it.value / topMax * 100 : 0;
5227
5572
  const rankColor = i < medals.length ? medals[i] : "#cbd5e1";
5228
5573
  return /* @__PURE__ */ jsxs("li", { className: "cdl-ip-readout-leaderboard-row", children: [
@@ -5273,7 +5618,7 @@ function TrafficLightReadout({
5273
5618
  style: {
5274
5619
  filter: isActive ? `drop-shadow(0 0 6px ${colors[i]})` : void 0
5275
5620
  },
5276
- children: /* @__PURE__ */ jsx("title", { children: isActive ? ["red", "yellow", "green"][i] : "" })
5621
+ children: /* @__PURE__ */ jsx(\u5B57\u306E\u898B\u51FA\u3057, { k: isActive ? ["readout.trafficLight.red", "readout.trafficLight.yellow", "readout.trafficLight.green"][i] : void 0 })
5277
5622
  },
5278
5623
  i
5279
5624
  );
@@ -5312,7 +5657,7 @@ function TagCloudReadout({
5312
5657
  const sizeFor = (w) => minSize + (w - minW) / range * (maxSize - minSize);
5313
5658
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-tag-cloud", "data-cdl-readout": id, children: [
5314
5659
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5315
- 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(
5660
+ 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(
5316
5661
  "span",
5317
5662
  {
5318
5663
  className: "cdl-ip-readout-tag-cloud-tag",
@@ -5349,7 +5694,7 @@ function ActivityFeedReadout({
5349
5694
  const shown = events.slice(0, max);
5350
5695
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-activity-feed", "data-cdl-readout": id, children: [
5351
5696
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5352
- 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: [
5697
+ 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: [
5353
5698
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-bullet", style: { background: color } }),
5354
5699
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-activity-feed-content", children: [
5355
5700
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-activity-feed-actor", children: e.actor }),
@@ -5400,7 +5745,7 @@ function RatingReadout({
5400
5745
  strokeWidth: 1
5401
5746
  }
5402
5747
  ),
5403
- isEmpty ? /* @__PURE__ */ jsx("title", { children: `${i + 1}: empty` }) : /* @__PURE__ */ jsx("title", { children: `${i + 1}: ${isFull ? "full" : "half"}` })
5748
+ 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" })
5404
5749
  ]
5405
5750
  },
5406
5751
  i
@@ -5496,7 +5841,7 @@ function ChatBubbleReadout({
5496
5841
  const shown = messages.slice(0, max);
5497
5842
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-chat-bubble", "data-cdl-readout": id, children: [
5498
5843
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5499
- 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(
5844
+ 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(
5500
5845
  "li",
5501
5846
  {
5502
5847
  className: `cdl-ip-readout-chat-bubble-row ${m.isSelf ? "self" : "other"}`,
@@ -5588,7 +5933,7 @@ function ChecklistReadout({
5588
5933
  const pct = items.length === 0 ? 0 : Math.round(done / items.length * 100);
5589
5934
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-checklist", "data-cdl-readout": id, children: [
5590
5935
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5591
- items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: "empty" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
5936
+ items.length === 0 ? /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-array-bar-empty", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.empty" }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
5592
5937
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-checklist-progress", children: [
5593
5938
  /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-checklist-progress-text", children: [
5594
5939
  done,
@@ -5699,11 +6044,7 @@ function PriceTagReadout({
5699
6044
  "%"
5700
6045
  ] }) : null
5701
6046
  ] }),
5702
- savings > 0 ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-price-tag-savings", children: [
5703
- "You save ",
5704
- currency,
5705
- savings
5706
- ] }) : null
6047
+ 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
5707
6048
  ] });
5708
6049
  }
5709
6050
  function SpinnerReadout({
@@ -5840,6 +6181,11 @@ function StopwatchReadout({
5840
6181
  }
5841
6182
  );
5842
6183
  }
6184
+ var \u78BA\u4FE1\u5EA6\u306E\u5E2F\u306E\u5B57 = {
6185
+ low: "readout.confidence.low",
6186
+ mid: "readout.confidence.mid",
6187
+ high: "readout.confidence.high"
6188
+ };
5843
6189
  function ConfidenceMeterReadout({
5844
6190
  id,
5845
6191
  label,
@@ -5872,7 +6218,7 @@ function ConfidenceMeterReadout({
5872
6218
  Math.round(safeValue),
5873
6219
  "%"
5874
6220
  ] }),
5875
- /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-confidence-meter-band", style: { color: bandColor }, children: bandLabel })
6221
+ /* @__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] }) })
5876
6222
  ] }),
5877
6223
  /* @__PURE__ */ jsxs("svg", { className: "cdl-ip-readout-confidence-meter-svg", viewBox: `0 0 ${viewW} ${viewH}`, width: viewW, height: viewH, children: [
5878
6224
  /* @__PURE__ */ jsx("rect", { x: pad, y: pad, width: lowX - pad, height: h, fill: "rgba(239,68,68,0.2)", rx: 2 }),
@@ -5907,7 +6253,7 @@ function ReactionBarReadout({
5907
6253
  }
5908
6254
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-reaction-bar", "data-cdl-readout": id, children: [
5909
6255
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5910
- 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: [
6256
+ 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: [
5911
6257
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-emoji", children: r.emoji }),
5912
6258
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-reaction-bar-count", style: { color }, children: r.count })
5913
6259
  ] }, i)) })
@@ -5940,7 +6286,7 @@ function PillGroupReadout({
5940
6286
  }
5941
6287
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pill-group", "data-cdl-readout": id, children: [
5942
6288
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
5943
- 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(
6289
+ 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(
5944
6290
  "span",
5945
6291
  {
5946
6292
  className: "cdl-ip-readout-pill-group-pill",
@@ -6028,7 +6374,7 @@ function MetricsGridReadout({
6028
6374
  }
6029
6375
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-metrics-grid", "data-cdl-readout": id, children: [
6030
6376
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6031
- 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: [
6377
+ 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: [
6032
6378
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-metrics-grid-value", style: { color }, children: [
6033
6379
  m.value,
6034
6380
  m.unit ? /* @__PURE__ */ jsxs("span", { className: "cdl-ip-readout-metrics-grid-unit", children: [
@@ -6115,7 +6461,7 @@ function IconTileReadout({
6115
6461
  }
6116
6462
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-icon-tile", "data-cdl-readout": id, children: [
6117
6463
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6118
- 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: [
6464
+ 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: [
6119
6465
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-icon", style: { background: color }, children: t.icon }),
6120
6466
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-icon-tile-content", children: [
6121
6467
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-icon-tile-value", children: t.value }),
@@ -6156,7 +6502,7 @@ function TokenListReadout({
6156
6502
  }
6157
6503
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-token-list", "data-cdl-readout": id, children: [
6158
6504
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6159
- 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) => {
6505
+ 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) => {
6160
6506
  const isUp = t.delta >= 0;
6161
6507
  const deltaColor = isUp ? colorUp : colorDown;
6162
6508
  const arrow = isUp ? "\u25B2" : "\u25BC";
@@ -6210,7 +6556,7 @@ function MapPinReadout({
6210
6556
  const yFor = (v) => pad + (Math.max(yMin, Math.min(yMax, v)) - yMin) / yRange * (viewH - pad * 2);
6211
6557
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-map-pin", "data-cdl-readout": id, children: [
6212
6558
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6213
- 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: [
6559
+ 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: [
6214
6560
  /* @__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 }),
6215
6561
  [0.25, 0.5, 0.75].map((t) => /* @__PURE__ */ jsxs("g", { children: [
6216
6562
  /* @__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)" }),
@@ -6238,9 +6584,9 @@ function PriorityBadgeReadout({
6238
6584
  if (p === "high" || p === "2") level = "high";
6239
6585
  else if (p === "low" || p === "0") level = "low";
6240
6586
  const spec = {
6241
- high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "HIGH" },
6242
- med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "MED" },
6243
- low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "LOW" }
6587
+ high: { icon: "\u25B2", color: "#ef4444", bg: "rgba(239,68,68,0.12)", text: "readout.priority.high" },
6588
+ med: { icon: "\u25CF", color: "#eab308", bg: "rgba(234,179,8,0.12)", text: "readout.priority.med" },
6589
+ low: { icon: "\u25BC", color: "#64748b", bg: "rgba(100,116,139,0.12)", text: "readout.priority.low" }
6244
6590
  };
6245
6591
  const cur = spec[level];
6246
6592
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-priority-badge", "data-cdl-readout": id, "data-cdl-priority": level, children: [
@@ -6253,7 +6599,7 @@ function PriorityBadgeReadout({
6253
6599
  style: { background: cur.bg, borderColor: cur.color, color: cur.color },
6254
6600
  children: [
6255
6601
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-priority-badge-icon", children: cur.icon }),
6256
- /* @__PURE__ */ jsx("span", { children: cur.text })
6602
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(\u5B57, { k: cur.text }) })
6257
6603
  ]
6258
6604
  }
6259
6605
  ),
@@ -6292,7 +6638,7 @@ function PodiumReadout({
6292
6638
  const order = [1, 0, 2];
6293
6639
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-podium", "data-cdl-readout": id, children: [
6294
6640
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6295
- 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) => {
6641
+ 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) => {
6296
6642
  const w = podium[rankIdx];
6297
6643
  if (!w) return null;
6298
6644
  const x = pad + colIdx * (colW + pad);
@@ -6335,7 +6681,7 @@ function PollBarReadout({
6335
6681
  const maxCount = options.length ? Math.max(...options.map((o) => o.count)) : 0;
6336
6682
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-poll-bar", "data-cdl-readout": id, children: [
6337
6683
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6338
- 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) => {
6684
+ 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) => {
6339
6685
  const pct = Math.round(o.count / total * 100);
6340
6686
  const isWinner = o.count === maxCount && maxCount > 0;
6341
6687
  const fillColor = isWinner ? colorWinner : color;
@@ -6370,6 +6716,7 @@ function UserStackReadout({
6370
6716
  max,
6371
6717
  size
6372
6718
  }) {
6719
+ const \u5F15\u304F = use\u5B57\u5F15();
6373
6720
  const names = safeParseArray(value).map(String);
6374
6721
  const shown = names.slice(0, max);
6375
6722
  const overflow = names.length > max;
@@ -6378,7 +6725,7 @@ function UserStackReadout({
6378
6725
  const initialsOf = (name) => name.split(/\s+/).filter(Boolean).slice(0, 2).map((w) => w[0]?.toUpperCase() ?? "").join("") || "?";
6379
6726
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-stack", "data-cdl-readout": id, children: [
6380
6727
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6381
- 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: [
6728
+ 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: [
6382
6729
  shown.map((name, i) => /* @__PURE__ */ jsx(
6383
6730
  "span",
6384
6731
  {
@@ -6406,7 +6753,7 @@ function UserStackReadout({
6406
6753
  fontSize: `${Math.round(size * 0.35)}px`,
6407
6754
  marginLeft: `-${size * 0.3}px`
6408
6755
  },
6409
- title: `+${overflowCount} more`,
6756
+ title: \u5F15\u304F("readout.more", { n: overflowCount }),
6410
6757
  children: [
6411
6758
  "+",
6412
6759
  overflowCount
@@ -6441,7 +6788,7 @@ function CommitListReadout({
6441
6788
  const shown = commits.slice(0, max);
6442
6789
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-commit-list", "data-cdl-readout": id, children: [
6443
6790
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6444
- 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: [
6791
+ 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: [
6445
6792
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-sha", style: { color }, children: c.sha }),
6446
6793
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-msg", children: c.msg }),
6447
6794
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-commit-list-author", children: c.author })
@@ -6521,7 +6868,7 @@ function EventLogReadout({
6521
6868
  };
6522
6869
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-event-log", "data-cdl-readout": id, children: [
6523
6870
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6524
- 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) => {
6871
+ 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) => {
6525
6872
  const spec = severitySpec[e.severity] ?? severitySpec.info;
6526
6873
  return /* @__PURE__ */ jsxs(
6527
6874
  "li",
@@ -6564,7 +6911,7 @@ function SearchResultReadout({
6564
6911
  const shown = hits.slice(0, max);
6565
6912
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-search-result", "data-cdl-readout": id, children: [
6566
6913
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6567
- 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: [
6914
+ 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: [
6568
6915
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-title", style: { color }, children: h.title }),
6569
6916
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-snippet", children: h.snippet }),
6570
6917
  h.url ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-search-result-url", children: h.url }) : null
@@ -6597,7 +6944,7 @@ function RoadmapReadout({
6597
6944
  const colors = ["#2563eb", "#22c55e", "#eab308", "#a855f7"];
6598
6945
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-roadmap", "data-cdl-readout": id, style: { minWidth: `${viewW}px` }, children: [
6599
6946
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6600
- 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: [
6947
+ 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: [
6601
6948
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-roadmap-header", style: { background: colors[i % colors.length] }, children: q.quarter }),
6602
6949
  /* @__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)) })
6603
6950
  ] }, i)) })
@@ -6629,7 +6976,7 @@ function WeatherForecastReadout({
6629
6976
  }
6630
6977
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-weather-forecast", "data-cdl-readout": id, children: [
6631
6978
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6632
- 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: [
6979
+ 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: [
6633
6980
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-name", children: d.day }),
6634
6981
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-weather-forecast-icon", children: d.icon }),
6635
6982
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-weather-forecast-high", children: [
@@ -6673,17 +7020,14 @@ function VideoCardReadout({
6673
7020
  const shown = videos.slice(0, max);
6674
7021
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-video-card", "data-cdl-readout": id, children: [
6675
7022
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6676
- 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: [
7023
+ 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: [
6677
7024
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-thumb", style: { background: color }, children: [
6678
7025
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-thumb-icon", children: v.emoji }),
6679
7026
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-video-card-duration", children: v.duration })
6680
7027
  ] }),
6681
7028
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-info", children: [
6682
7029
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-title", children: v.title }),
6683
- /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-video-card-views", children: [
6684
- v.views,
6685
- " views"
6686
- ] })
7030
+ /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-video-card-views", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.videoCard.views", v: { v: v.views } }) })
6687
7031
  ] })
6688
7032
  ] }, i)) })
6689
7033
  ] });
@@ -6700,7 +7044,7 @@ function OrderStatusReadout({
6700
7044
  const safeCurrent = Number.isFinite(current) ? Math.max(0, Math.min(stepArr.length - 1, Math.round(current))) : 0;
6701
7045
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-order-status", "data-cdl-readout": id, "data-cdl-step": safeCurrent, children: [
6702
7046
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6703
- 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) => {
7047
+ 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) => {
6704
7048
  const isDone = i < safeCurrent;
6705
7049
  const isCurrent = i === safeCurrent;
6706
7050
  const isPending = i > safeCurrent;
@@ -6750,9 +7094,9 @@ function AttendanceGridReadout({
6750
7094
  const memberArr = safeParseArray(members).map(String);
6751
7095
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-attendance-grid", "data-cdl-readout": id, children: [
6752
7096
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6753
- 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: [
7097
+ 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: [
6754
7098
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
6755
- /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: "day" }),
7099
+ /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-corner", children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.attendance.corner" }) }),
6756
7100
  memberArr.map((m, i) => /* @__PURE__ */ jsx("th", { className: "cdl-ip-readout-attendance-grid-member", children: m }, i))
6757
7101
  ] }) }),
6758
7102
  /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { children: [
@@ -6806,7 +7150,7 @@ function TimezoneClockReadout({
6806
7150
  }
6807
7151
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-timezone-clock", "data-cdl-readout": id, children: [
6808
7152
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6809
- 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: [
7153
+ 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: [
6810
7154
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-city", children: c.city }),
6811
7155
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-timezone-clock-time", style: { color }, children: c.time }),
6812
7156
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-timezone-clock-offset", children: [
@@ -6840,7 +7184,7 @@ function FormSummaryReadout({
6840
7184
  }
6841
7185
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-form-summary", "data-cdl-readout": id, children: [
6842
7186
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6843
- 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: [
7187
+ 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: [
6844
7188
  /* @__PURE__ */ jsx("dt", { className: "cdl-ip-readout-form-summary-key", children: f.name }),
6845
7189
  /* @__PURE__ */ jsx("dd", { className: "cdl-ip-readout-form-summary-value", style: { color }, children: f.value })
6846
7190
  ] }, i)) })
@@ -6873,7 +7217,7 @@ function SongQueueReadout({
6873
7217
  const safeCurrent = Number.isFinite(current) ? Math.round(current) : -1;
6874
7218
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-song-queue", "data-cdl-readout": id, "data-cdl-current": safeCurrent, children: [
6875
7219
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6876
- 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) => {
7220
+ 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) => {
6877
7221
  const isCurrent = i === safeCurrent;
6878
7222
  return /* @__PURE__ */ jsxs(
6879
7223
  "li",
@@ -6918,12 +7262,20 @@ function CalendarMonthReadout({
6918
7262
  } catch {
6919
7263
  }
6920
7264
  }
6921
- const weekDays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
7265
+ const weekDays = [
7266
+ "readout.weekday.0",
7267
+ "readout.weekday.1",
7268
+ "readout.weekday.2",
7269
+ "readout.weekday.3",
7270
+ "readout.weekday.4",
7271
+ "readout.weekday.5",
7272
+ "readout.weekday.6"
7273
+ ];
6922
7274
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-calendar-month", "data-cdl-readout": id, children: [
6923
7275
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6924
- 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: [
7276
+ 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: [
6925
7277
  monthName ? /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-header", children: monthName }) : null,
6926
- /* @__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)) }),
7278
+ /* @__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)) }),
6927
7279
  /* @__PURE__ */ jsx("div", { className: "cdl-ip-readout-calendar-month-grid", children: days.map((d, i) => /* @__PURE__ */ jsxs(
6928
7280
  "div",
6929
7281
  {
@@ -6966,7 +7318,7 @@ function TerminalReadout({
6966
7318
  const shown = lines.slice(0, max);
6967
7319
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-terminal", "data-cdl-readout": id, children: [
6968
7320
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
6969
- 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: [
7321
+ 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: [
6970
7322
  /* @__PURE__ */ jsxs("div", { className: "cdl-ip-readout-terminal-titlebar", children: [
6971
7323
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#ef4444" } }),
6972
7324
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-readout-terminal-dot", style: { background: "#eab308" } }),
@@ -7065,10 +7417,11 @@ function KanbanBoardReadout({
7065
7417
  columnWidth,
7066
7418
  max
7067
7419
  }) {
7420
+ const \u5F15\u304F = use\u5B57\u5F15();
7068
7421
  const buckets = {
7069
- todo: { key: "todo", label: "Todo", color: "#94a3b8", tasks: [] },
7070
- inprogress: { key: "inprogress", label: "In Progress", color: "#2563eb", tasks: [] },
7071
- done: { key: "done", label: "Done", color: "#22c55e", tasks: [] }
7422
+ todo: { key: "todo", label: \u5F15\u304F("readout.kanban.todo"), color: "#94a3b8", tasks: [] },
7423
+ inprogress: { key: "inprogress", label: \u5F15\u304F("readout.kanban.inprogress"), color: "#2563eb", tasks: [] },
7424
+ done: { key: "done", label: \u5F15\u304F("readout.kanban.done"), color: "#22c55e", tasks: [] }
7072
7425
  };
7073
7426
  const trimmed = value.trim();
7074
7427
  if (trimmed.startsWith("[") && trimmed.endsWith("]")) {
@@ -7185,7 +7538,7 @@ function KanbanBoardReadout({
7185
7538
  )
7186
7539
  ] }, ti);
7187
7540
  }),
7188
- overflow > 0 ? /* @__PURE__ */ jsxs(
7541
+ overflow > 0 ? /* @__PURE__ */ jsx(
7189
7542
  "text",
7190
7543
  {
7191
7544
  x: x + columnWidth / 2,
@@ -7194,11 +7547,7 @@ function KanbanBoardReadout({
7194
7547
  textAnchor: "middle",
7195
7548
  fill: "#64748b",
7196
7549
  style: { userSelect: "none" },
7197
- children: [
7198
- "+",
7199
- overflow,
7200
- " more"
7201
- ]
7550
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7202
7551
  }
7203
7552
  ) : null
7204
7553
  ] }, k);
@@ -7755,7 +8104,7 @@ function UserPresenceReadout({
7755
8104
  )
7756
8105
  ] }, i);
7757
8106
  }),
7758
- overflow > 0 ? /* @__PURE__ */ jsxs(
8107
+ overflow > 0 ? /* @__PURE__ */ jsx(
7759
8108
  "text",
7760
8109
  {
7761
8110
  x: width / 2,
@@ -7764,11 +8113,7 @@ function UserPresenceReadout({
7764
8113
  textAnchor: "middle",
7765
8114
  fill: "#64748b",
7766
8115
  style: { userSelect: "none" },
7767
- children: [
7768
- "+",
7769
- overflow,
7770
- " more"
7771
- ]
8116
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.more", v: { n: overflow } })
7772
8117
  }
7773
8118
  ) : null
7774
8119
  ]
@@ -7819,12 +8164,7 @@ function RatingThumbReadout({
7819
8164
  "\u25B2 ",
7820
8165
  upCount
7821
8166
  ] }),
7822
- /* @__PURE__ */ jsxs("text", { x: width / 2, y: 20, fontSize: 11, textAnchor: "middle", fill: "#64748b", style: { userSelect: "none" }, children: [
7823
- upPct,
7824
- "% up \xB7 ",
7825
- total,
7826
- " votes"
7827
- ] }),
8167
+ /* @__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 } }) }),
7828
8168
  /* @__PURE__ */ jsxs(
7829
8169
  "text",
7830
8170
  {
@@ -7999,11 +8339,7 @@ function KpiTrendTileReadout({
7999
8339
  deltaPct.toFixed(1),
8000
8340
  "%)"
8001
8341
  ] }),
8002
- /* @__PURE__ */ jsxs("text", { x: 12, y: 78, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: [
8003
- "prev ",
8004
- prev,
8005
- unit
8006
- ] }),
8342
+ /* @__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}` } }) }),
8007
8343
  history.length > 1 ? /* @__PURE__ */ jsx("polyline", { points, fill: "none", stroke: arrowColor, strokeWidth: 2 }) : null
8008
8344
  ]
8009
8345
  }
@@ -8091,7 +8427,7 @@ function QuickPollEmojiReadout({
8091
8427
  )
8092
8428
  ] }, i);
8093
8429
  }),
8094
- /* @__PURE__ */ jsxs(
8430
+ /* @__PURE__ */ jsx(
8095
8431
  "text",
8096
8432
  {
8097
8433
  x: width - 8,
@@ -8100,10 +8436,7 @@ function QuickPollEmojiReadout({
8100
8436
  textAnchor: "end",
8101
8437
  fill: "#64748b",
8102
8438
  style: { userSelect: "none" },
8103
- children: [
8104
- "total ",
8105
- total
8106
- ]
8439
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.poll.total", v: { n: total } })
8107
8440
  }
8108
8441
  )
8109
8442
  ]
@@ -8238,14 +8571,8 @@ function ThreadSummaryReadout({
8238
8571
  height,
8239
8572
  children: [
8240
8573
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width, height, fill: "#f8fafc", rx: 6 }),
8241
- /* @__PURE__ */ jsxs("text", { x: 12, y: 22, fontSize: 12, fontWeight: 600, fill: "#0f172a", style: { userSelect: "none" }, children: [
8242
- participants,
8243
- " participants"
8244
- ] }),
8245
- /* @__PURE__ */ jsxs("text", { x: 12, y: 42, fontSize: 11, fill: "#334155", style: { userSelect: "none" }, children: [
8246
- "last: ",
8247
- lastAuthor
8248
- ] }),
8574
+ /* @__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 } }) }),
8575
+ /* @__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 } }) }),
8249
8576
  /* @__PURE__ */ jsx("text", { x: 12, y: 60, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: timeAgo }),
8250
8577
  unread > 0 ? /* @__PURE__ */ jsxs("g", { "data-cdl-thread-unread": "1", children: [
8251
8578
  /* @__PURE__ */ jsx("circle", { cx: width - 24, cy: 26, r: 14, fill: colorUnread }),
@@ -8276,7 +8603,7 @@ function ReadReceiptReadout({
8276
8603
  colorPending
8277
8604
  }) {
8278
8605
  const status = Number.isFinite(value) ? Math.max(0, Math.min(2, Math.floor(value))) : 0;
8279
- const labelText = status === 0 ? "sent" : status === 1 ? "delivered" : "read";
8606
+ const labelKey = status === 0 ? "readout.readReceipt.sent" : status === 1 ? "readout.readReceipt.delivered" : "readout.readReceipt.read";
8280
8607
  const iconColor = status === 2 ? colorRead : colorPending;
8281
8608
  const width = 180;
8282
8609
  const height = 32;
@@ -8311,7 +8638,7 @@ function ReadReceiptReadout({
8311
8638
  }
8312
8639
  ) : null
8313
8640
  ] }),
8314
- /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: labelText })
8641
+ /* @__PURE__ */ jsx("text", { x: 52, y: height / 2 + 4, fontSize: 11, fontWeight: 600, fill: iconColor, style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: labelKey }) })
8315
8642
  ]
8316
8643
  }
8317
8644
  )
@@ -8325,7 +8652,7 @@ function PasswordStrengthReadout({
8325
8652
  colorWeak
8326
8653
  }) {
8327
8654
  const level = Number.isFinite(value) ? Math.max(0, Math.min(4, Math.floor(value))) : 0;
8328
- const labels = ["too weak", "weak", "fair", "good", "strong"];
8655
+ const labels = ["readout.password.0", "readout.password.1", "readout.password.2", "readout.password.3", "readout.password.4"];
8329
8656
  const colors = [colorWeak, "#f97316", "#eab308", "#84cc16", colorStrong];
8330
8657
  const barW = 46;
8331
8658
  const gap = 6;
@@ -8369,7 +8696,7 @@ function PasswordStrengthReadout({
8369
8696
  textAnchor: "end",
8370
8697
  fill: level > 0 ? colors[level] ?? colorStrong : "#94a3b8",
8371
8698
  style: { userSelect: "none" },
8372
- children: labels[level]
8699
+ children: /* @__PURE__ */ jsx(\u5B57, { k: labels[level] })
8373
8700
  }
8374
8701
  )
8375
8702
  ]
@@ -8504,7 +8831,7 @@ function FileDropzoneReadout({
8504
8831
  /* @__PURE__ */ jsx("title", { children: filename }),
8505
8832
  filename.length > 26 ? `${filename.slice(0, 25)}\u2026` : filename
8506
8833
  ] }),
8507
- /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: "uploaded" })
8834
+ /* @__PURE__ */ jsx("text", { x: 54, y: 50, fontSize: 10, fill: "#64748b", style: { userSelect: "none" }, children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.uploaded" }) })
8508
8835
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-dropzone-empty": "1", children: [
8509
8836
  /* @__PURE__ */ jsx(
8510
8837
  "text",
@@ -8516,7 +8843,7 @@ function FileDropzoneReadout({
8516
8843
  textAnchor: "middle",
8517
8844
  fill: "#64748b",
8518
8845
  style: { userSelect: "none" },
8519
- children: "\u2B06 Drop file here"
8846
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.drop" })
8520
8847
  }
8521
8848
  ),
8522
8849
  /* @__PURE__ */ jsx(
@@ -8528,7 +8855,7 @@ function FileDropzoneReadout({
8528
8855
  textAnchor: "middle",
8529
8856
  fill: "#94a3b8",
8530
8857
  style: { userSelect: "none" },
8531
- children: "or click to browse"
8858
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.dropzone.browse" })
8532
8859
  }
8533
8860
  )
8534
8861
  ] })
@@ -8563,7 +8890,7 @@ function LogStreamReadout({
8563
8890
  }
8564
8891
  }
8565
8892
  const shown = rows.slice(-5);
8566
- const levelLabels = ["DBG", "INF", "WRN", "ERR"];
8893
+ const levelLabels = ["readout.log.0", "readout.log.1", "readout.log.2", "readout.log.3"];
8567
8894
  const levelColors = ["#94a3b8", "#2563eb", "#f97316", "#ef4444"];
8568
8895
  const width = 300;
8569
8896
  const rowH = 18;
@@ -8596,7 +8923,7 @@ function LogStreamReadout({
8596
8923
  fill: "#ffffff",
8597
8924
  fontFamily: "monospace",
8598
8925
  style: { userSelect: "none" },
8599
- children: levelLabels[r.level] ?? "INF"
8926
+ children: /* @__PURE__ */ jsx(\u5B57, { k: levelLabels[r.level] ?? "readout.log.1" })
8600
8927
  }
8601
8928
  ),
8602
8929
  /* @__PURE__ */ jsxs("text", { x: 94, y: y + 12, fontSize: 10, fill: "#e2e8f0", fontFamily: "monospace", style: { userSelect: "none" }, children: [
@@ -8790,10 +9117,10 @@ function CartSummaryReadout({
8790
9117
  if (!Number.isFinite(shipping)) shipping = 0;
8791
9118
  if (!Number.isFinite(total)) total = 0;
8792
9119
  const rows = [
8793
- { l: "Items", v: `${items}`, bold: false },
8794
- { l: "Subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
8795
- { l: "Shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
8796
- { l: "Total", v: `${currency}${total.toFixed(2)}`, bold: true }
9120
+ { l: "readout.cart.items", v: `${items}`, bold: false },
9121
+ { l: "readout.cart.subtotal", v: `${currency}${subtotal.toFixed(2)}`, bold: false },
9122
+ { l: "readout.cart.shipping", v: `${currency}${shipping.toFixed(2)}`, bold: false },
9123
+ { l: "readout.cart.total", v: `${currency}${total.toFixed(2)}`, bold: true }
8797
9124
  ];
8798
9125
  const width = 260;
8799
9126
  const rowH = 20;
@@ -8823,7 +9150,7 @@ function CartSummaryReadout({
8823
9150
  fontWeight: isTotal ? 700 : 500,
8824
9151
  fill: isTotal ? colorTotal : "#334155",
8825
9152
  style: { userSelect: "none" },
8826
- children: r.l
9153
+ children: /* @__PURE__ */ jsx(\u5B57, { k: r.l })
8827
9154
  }
8828
9155
  ),
8829
9156
  /* @__PURE__ */ jsx(
@@ -8871,6 +9198,8 @@ function PricingTierReadout({
8871
9198
  }
8872
9199
  }
8873
9200
  if (!Number.isFinite(price)) price = 0;
9201
+ const \u5F15\u304F = use\u5B57\u5F15();
9202
+ const \u898B\u305B\u308B\u540D\u524D = planName || \u5F15\u304F("readout.pricing.plan");
8874
9203
  const width = 240;
8875
9204
  const height = 176;
8876
9205
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-pricing-tier", "data-cdl-readout": id, children: [
@@ -8895,7 +9224,7 @@ function PricingTierReadout({
8895
9224
  textAnchor: "middle",
8896
9225
  fill: "#ffffff",
8897
9226
  style: { userSelect: "none" },
8898
- children: planName || "Plan"
9227
+ children: \u898B\u305B\u308B\u540D\u524D
8899
9228
  }
8900
9229
  ),
8901
9230
  /* @__PURE__ */ jsxs(
@@ -8923,7 +9252,7 @@ function PricingTierReadout({
8923
9252
  textAnchor: "middle",
8924
9253
  fill: "#64748b",
8925
9254
  style: { userSelect: "none" },
8926
- children: "per month"
9255
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.pricing.perMonth" })
8927
9256
  }
8928
9257
  ),
8929
9258
  features.slice(0, 3).map((f, i) => {
@@ -8938,7 +9267,7 @@ function PricingTierReadout({
8938
9267
  ] }, i);
8939
9268
  }),
8940
9269
  /* @__PURE__ */ jsx("rect", { x: 16, y: 150, width: width - 32, height: 20, fill: colorAccent, rx: 4 }),
8941
- /* @__PURE__ */ jsxs(
9270
+ /* @__PURE__ */ jsx(
8942
9271
  "text",
8943
9272
  {
8944
9273
  x: width / 2,
@@ -8948,10 +9277,7 @@ function PricingTierReadout({
8948
9277
  textAnchor: "middle",
8949
9278
  fill: "#ffffff",
8950
9279
  style: { userSelect: "none" },
8951
- children: [
8952
- "Get ",
8953
- planName || "Plan"
8954
- ]
9280
+ children: \u5F15\u304F("readout.pricing.get", { name: \u898B\u305B\u308B\u540D\u524D })
8955
9281
  }
8956
9282
  )
8957
9283
  ]
@@ -9017,12 +9343,12 @@ function CouponCodeReadout({
9017
9343
  fill: applied ? colorApplied : "#94a3b8",
9018
9344
  fontFamily: "monospace",
9019
9345
  style: { userSelect: "none" },
9020
- children: code || "ENTER CODE"
9346
+ children: code || /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.placeholder" })
9021
9347
  }
9022
9348
  ),
9023
9349
  applied ? /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-applied": "1", children: [
9024
9350
  /* @__PURE__ */ jsx("rect", { x: boxW + 12, y: 10, width: 90, height: height - 20, fill: colorApplied, rx: 4 }),
9025
- /* @__PURE__ */ jsxs(
9351
+ /* @__PURE__ */ jsx(
9026
9352
  "text",
9027
9353
  {
9028
9354
  x: boxW + 57,
@@ -9032,11 +9358,7 @@ function CouponCodeReadout({
9032
9358
  textAnchor: "middle",
9033
9359
  fill: "#ffffff",
9034
9360
  style: { userSelect: "none" },
9035
- children: [
9036
- "-",
9037
- discountPct,
9038
- "% off"
9039
- ]
9361
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.off", v: { pct: discountPct } })
9040
9362
  }
9041
9363
  )
9042
9364
  ] }) : /* @__PURE__ */ jsxs("g", { "data-cdl-coupon-empty": "1", children: [
@@ -9051,7 +9373,7 @@ function CouponCodeReadout({
9051
9373
  textAnchor: "middle",
9052
9374
  fill: "#ffffff",
9053
9375
  style: { userSelect: "none" },
9054
- children: "Apply"
9376
+ children: /* @__PURE__ */ jsx(\u5B57, { k: "readout.coupon.apply" })
9055
9377
  }
9056
9378
  )
9057
9379
  ] })
@@ -9131,10 +9453,7 @@ function ArticlePreviewReadout({
9131
9453
  excerpt.length > 28 ? `${excerpt.slice(0, 27)}\u2026` : excerpt
9132
9454
  ] }),
9133
9455
  /* @__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) }),
9134
- /* @__PURE__ */ jsxs("text", { x: thumbW + 20, y: height - 14, fontSize: 10, fontWeight: 600, fill: "#64748b", style: { userSelect: "none" }, children: [
9135
- "by ",
9136
- author
9137
- ] }),
9456
+ /* @__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 } }) }),
9138
9457
  /* @__PURE__ */ jsx("text", { x: width - 8, y: height - 14, fontSize: 10, textAnchor: "end", fill: "#94a3b8", style: { userSelect: "none" }, children: timeAgo })
9139
9458
  ]
9140
9459
  }
@@ -11513,6 +11832,8 @@ function diagram(id, options) {
11513
11832
  ...options.structuredData === "exclude" ? { structuredData: "exclude" } : {},
11514
11833
  // 配色の名前は素通しする。 空文字の遮断は `layout` が持つ (後段が必ず通るため)
11515
11834
  ...options.palette !== void 0 ? { palette: options.palette } : {},
11835
+ // 言語も素通しする。 型の外の値を既定に落とすのは `layout` の 1 箇所に置く
11836
+ ...options.lang !== void 0 ? { lang: options.lang } : {},
11516
11837
  // 種類の名前も同じ経路で渡し、空文字の扱いを `layout` の 1 箇所に揃える
11517
11838
  ...options.type !== void 0 ? { type: options.type } : {},
11518
11839
  // inputs / formulas / scrollTriggers / eventBindings は空なら省略 (static diagram の JSON 形状維持)
@@ -20946,6 +21267,9 @@ function layout(diag) {
20946
21267
  // **遮断はここだけに置く**。 描画は必ず組み立てを通り、組み立て API も `er` も
20947
21268
  // 素通しにしてある。 上流にも置くと、どの入力でも通らない分岐が残る
20948
21269
  ...diag.palette ? { palette: diag.palette } : {},
21270
+ // 描画側の固定の字の言語 (#847)。 既定 (`en`) と型の外の値は持たせない = 配置の結果の形を
21271
+ // 変更前と揃え、記法の書き損じで一部の字だけ日本語になる形を作らない
21272
+ ...resolveLang(diag.lang) === "ja" ? { lang: "ja" } : {},
20949
21273
  // 種類も配色と同じく空の目印を出さない。 遮断をここに揃えると手書きの図にも効く
20950
21274
  ...diag.type ? { type: diag.type } : {},
20951
21275
  bboxes,
@@ -23430,12 +23754,12 @@ function \u5272\u308B\u5019\u88DC(text) {
23430
23754
  \u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
23431
23755
  }
23432
23756
  if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
23433
- const \u5B57 = [];
23757
+ const \u5B572 = [];
23434
23758
  const \u4E26\u3073 = [...text];
23435
23759
  for (let i = 1; i < \u4E26\u3073.length; i += 1) {
23436
- \u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23760
+ \u5B572.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
23437
23761
  }
23438
- return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
23762
+ return \u5B572.filter(\u5165\u3063\u3066\u3044\u308B);
23439
23763
  }
23440
23764
  function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
23441
23765
  return \u5DE6 !== "" && \u53F3 !== "";
@@ -25794,9 +26118,9 @@ function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u
25794
26118
  \u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
25795
26119
  };
25796
26120
  }
25797
- function \u53CE\u3081\u308B\u7D1A(\u5B57, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
26121
+ function \u53CE\u3081\u308B\u7D1A(\u5B572, \u4F7F\u3048\u308B\u5E452, \u521D\u671F, \u4E0B\u9650) {
25798
26122
  let \u7D1A = \u521D\u671F;
25799
- while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B57, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
26123
+ while (\u7D1A > \u4E0B\u9650 && textWidth(\u5B572, \u7D1A) > \u4F7F\u3048\u308B\u5E452) \u7D1A -= 1;
25800
26124
  return \u7D1A;
25801
26125
  }
25802
26126
  function \u5F27\u306E\u90533(cx, cy, r, \u5272\u5408) {
@@ -27775,6 +28099,11 @@ var commonFrame2 = (active) => ({
27775
28099
  var ASCENT3 = 0.72;
27776
28100
  var DESCENT3 = 0.25;
27777
28101
  var MONO_ADVANCE = 0.62;
28102
+ function \u7B49\u5E45\u306E\u6841(s) {
28103
+ let \u6841 = 0;
28104
+ for (const c of s) \u6841 += (c.codePointAt(0) ?? 0) >= 11904 ? 2 : 1;
28105
+ return \u6841;
28106
+ }
27778
28107
  var LABEL_SUB_RATIO = 11 / 16;
27779
28108
  var LABEL_EYE_RATIO = 12 / 16;
27780
28109
  var LABEL_EYE_GAP = 8;
@@ -27872,7 +28201,8 @@ function ShapeWindowNode({ node, active }) {
27872
28201
  commonLabel2(node, node.cx, \u540D\u524D.y, \u540D\u524D.size)
27873
28202
  ] });
27874
28203
  }
27875
- function ShapeTerminalNode({ node, active }) {
28204
+ function ShapeTerminalNode({ node, active, lang }) {
28205
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
27876
28206
  const frame = commonFrame2(active);
27877
28207
  const \u7DDA = frame.strokeWidth / 2;
27878
28208
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -27893,10 +28223,10 @@ function ShapeTerminalNode({ node, active }) {
27893
28223
  { \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" },
27894
28224
  { \u5DE6: 30, \u5B57: 12.5, \u8272: "#e6edf3", \u6587: "pnpm build" }
27895
28225
  ],
27896
- [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: "\u2192 12 chunks in 1.8s" }],
28226
+ [{ \u5DE6: 16, \u5B57: 12, \u8272: "#8b95a5", \u6587: \u5B57\u5F15("terminal.output") }],
27897
28227
  [{ \u5DE6: 16, \u5B57: 12.5, \u8272: "#7cd88f", \u6587: "$" }]
27898
28228
  ];
27899
- const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((t) => t.\u5DE6 + t.\u6587.length * MONO_ADVANCE * t.\u5B57)) + \u4F59\u767D;
28229
+ const \u81EA\u7136\u5E45 = Math.max(...\u884C.flat().map((c) => c.\u5DE6 + \u7B49\u5E45\u306E\u6841(c.\u6587) * MONO_ADVANCE * c.\u5B57)) + \u4F59\u767D;
27900
28230
  const \u81EA\u7136\u9AD8 = \u5E2F + \u5148\u982D + \u884C\u9593 * (\u884C.length - 1) + Math.max(\u30AB\u30FC\u30BD\u30EB.\u4E0B, 12.5 * DESCENT3);
27901
28231
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, bodyH / \u81EA\u7136\u9AD8);
27902
28232
  const barH = \u5E2F * \u500D;
@@ -28006,7 +28336,8 @@ function ShapeTerminalNode({ node, active }) {
28006
28336
  )
28007
28337
  ] });
28008
28338
  }
28009
- function ShapeCodeBlockNode({ node, active }) {
28339
+ function ShapeCodeBlockNode({ node, active, lang }) {
28340
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28010
28341
  const frame = commonFrame2(active);
28011
28342
  const \u7DDA = frame.strokeWidth / 2;
28012
28343
  const x = node.cx - node.w / 2 + \u7DDA;
@@ -28096,7 +28427,7 @@ function ShapeCodeBlockNode({ node, active }) {
28096
28427
  fontFamily: lineFont,
28097
28428
  textAnchor: "middle",
28098
28429
  fill: "#e6edf3",
28099
- children: "utils.ts"
28430
+ children: \u5B57\u5F15("codeBlock.fileName")
28100
28431
  }
28101
28432
  ),
28102
28433
  /* @__PURE__ */ jsx("circle", { cx: x + tabW - \u4E38, cy: y + tabH / 2, r: 3 * \u500D, fill: "#7cd88f", stroke: "none" }),
@@ -28172,7 +28503,8 @@ function ShapeCodeBlockNode({ node, active }) {
28172
28503
  )
28173
28504
  ] });
28174
28505
  }
28175
- function ShapeKanbanCardNode({ node, active }) {
28506
+ function ShapeKanbanCardNode({ node, active, lang }) {
28507
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
28176
28508
  const frame = commonFrame2(active);
28177
28509
  const \u7DDA = frame.strokeWidth / 2;
28178
28510
  const \u5F71 = 3;
@@ -28184,7 +28516,7 @@ function ShapeKanbanCardNode({ node, active }) {
28184
28516
  const \u5DE6\u53F3\u4F59\u767D = 14;
28185
28517
  const \u4E0A\u6BB5\u9699\u9593 = 8;
28186
28518
  const \u512A\u5148\u5E2F\u9AD8 = 10;
28187
- const ID\u6587 = "CAR-1111";
28519
+ const ID\u6587 = \u5B57\u5F15("kanbanCard.id");
28188
28520
  const ID\u57FA\u6E96 = 30;
28189
28521
  const ID\u5B57 = 11;
28190
28522
  const ID\u5B57\u9593 = 1;
@@ -28203,7 +28535,7 @@ function ShapeKanbanCardNode({ node, active }) {
28203
28535
  const \u4E0B\u5E2F = FOOTER\u4E0B - AVATAR\u4E2D\u5FC3Y + AVATAR\u534A\u5F84 + AVATAR\u67A0 / 2 + \u5E2F\u9593\u4F59\u767D;
28204
28536
  const \u4E2D\u5E2F = \u540D\u524D\u5B57 * ASCENT3 + \u540D\u524D\u5B57 * \u8AAC\u660E\u57FA\u6E96\u6BD4 + \u540D\u524D\u5B57 * \u8AAC\u660E\u5B57\u6BD4 * DESCENT3;
28205
28537
  const \u81EA\u7136\u9AD8 = \u4E0A\u5E2F + \u4E2D\u5E2F + \u4E0B\u5E2F;
28206
- const ID\u5E45 = ID\u6587.length * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * ID\u6587.length;
28538
+ const ID\u5E45 = \u7B49\u5E45\u306E\u6841(ID\u6587) * MONO_ADVANCE * ID\u5B57 + ID\u5B57\u9593 * [...ID\u6587].length;
28207
28539
  const \u81EA\u7136\u5E45 = \u5DE6\u53F3\u4F59\u767D + ID\u5E45 + \u4E0A\u6BB5\u9699\u9593 + PILL\u5E45 + \u5DE6\u53F3\u4F59\u767D;
28208
28540
  const \u500D = Math.min(1, w / \u81EA\u7136\u5E45, h / \u81EA\u7136\u9AD8);
28209
28541
  const priorityBarH = \u512A\u5148\u5E2F\u9AD8 * \u500D;
@@ -28282,7 +28614,7 @@ function ShapeKanbanCardNode({ node, active }) {
28282
28614
  textAnchor: "middle",
28283
28615
  fill: "#5a4a1a",
28284
28616
  fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
28285
- children: "IN PROG"
28617
+ children: \u5B57\u5F15("kanbanCard.status")
28286
28618
  }
28287
28619
  ),
28288
28620
  /* @__PURE__ */ jsx(
@@ -28306,7 +28638,7 @@ function ShapeKanbanCardNode({ node, active }) {
28306
28638
  fontSize: \u540D\u524D.size * \u8AAC\u660E\u5B57\u6BD4,
28307
28639
  textAnchor: "middle",
28308
28640
  fill: "var(--cdl-text-dim, #5a6270)",
28309
- children: "shape-driven kind \u5B9F\u88C5"
28641
+ children: \u5B57\u5F15("kanbanCard.task")
28310
28642
  }
28311
28643
  ),
28312
28644
  /* @__PURE__ */ jsxs("g", { transform: `translate(${x + \u5DE6\u53F3\u4F59\u767D * \u500D}, ${footY})`, children: [
@@ -28369,7 +28701,7 @@ function ShapeKanbanCardNode({ node, active }) {
28369
28701
  fontWeight: 600,
28370
28702
  textAnchor: "end",
28371
28703
  fill: "var(--cdl-text-dim, #5a6270)",
28372
- children: "Jul 10"
28704
+ children: \u5B57\u5F15("kanbanCard.due")
28373
28705
  }
28374
28706
  )
28375
28707
  ] })
@@ -29413,7 +29745,8 @@ function EthereumDiamond({ cx, cy, h, colors }) {
29413
29745
  /* @__PURE__ */ jsx("path", { d: `M ${cx} ${midY} L ${cx + w} ${cy + h * 0.05} L ${cx} ${lowerBotY} Z`, fill: c.dark, stroke: c.stroke, strokeWidth: 0.6, strokeLinejoin: "round" })
29414
29746
  ] });
29415
29747
  }
29416
- function ShapeSmartContractNode({ node, active }) {
29748
+ function ShapeSmartContractNode({ node, active, lang }) {
29749
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29417
29750
  const frame = commonFrame4(active);
29418
29751
  const r = shapeRegion(node);
29419
29752
  const docW = SMART_CONTRACT_W;
@@ -29449,7 +29782,7 @@ function ShapeSmartContractNode({ node, active }) {
29449
29782
  /* @__PURE__ */ jsx("path", { "data-cdl-role": "node-body", d: path, ...frame, strokeLinejoin: "round" }),
29450
29783
  /* @__PURE__ */ jsx("path", { d: foldPath, fill: "none", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
29451
29784
  [y + 40, y + 58, y + 76, y + 94].map((ly, i) => /* @__PURE__ */ jsx("rect", { x: x + 16, y: ly - 3, width: docW - 32 - i * 22, height: 5, rx: 1, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.7, stroke: "none" }, i)),
29452
- /* @__PURE__ */ jsx("text", { x: x + 16, y: y + docH - 46, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-tone-accent, #2d6a8f)", children: "function execute()" }),
29785
+ /* @__PURE__ */ jsx("text", { x: x + 16, y: y + docH - 46, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-tone-accent, #2d6a8f)", children: \u5B57\u5F15("smartContract.call") }),
29453
29786
  /* @__PURE__ */ jsx(
29454
29787
  "polygon",
29455
29788
  {
@@ -29470,14 +29803,14 @@ function ShapeSmartContractNode({ node, active }) {
29470
29803
  }
29471
29804
  var \u5B57\u306E\u5E45 = (text, size) => Math.max(displayWidth(text) * size * MONO_ADVANCE_RATIO, textWidth(text, size));
29472
29805
  var BLOCK_DEFAULT_FIELDS = [
29473
- { label: "hash", value: "0xaf31c9d2..." },
29474
- { label: "prev", value: "0x7b3f92c1..." },
29475
- { label: "merkle", value: "0xc1892f4a..." },
29476
- { label: "nonce", value: "82,914" },
29477
- { label: "tx", value: "142 tx" }
29806
+ { key: "hash", label: "blockchainBlock.hash", value: { text: "0xaf31c9d2..." } },
29807
+ { key: "prev", label: "blockchainBlock.prev", value: { text: "0x7b3f92c1..." } },
29808
+ { key: "merkle", label: "blockchainBlock.merkle", value: { text: "0xc1892f4a..." } },
29809
+ { key: "nonce", label: "blockchainBlock.nonce", value: { text: "82,914" } },
29810
+ { key: "tx", label: "blockchainBlock.tx", value: { \u8F9E\u66F8: "blockchainBlock.txCount" } }
29478
29811
  ];
29479
- var BLOCK_DEFAULT_TITLE = "Block #421,873";
29480
- function ShapeBlockchainBlockNode({ node, active }) {
29812
+ function ShapeBlockchainBlockNode({ node, active, lang }) {
29813
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29481
29814
  const frame = commonFrame4(active);
29482
29815
  const r = shapeRegion(node);
29483
29816
  const bw = BLOCK_W;
@@ -29487,11 +29820,15 @@ function ShapeBlockchainBlockNode({ node, active }) {
29487
29820
  const x = cx - bw / 2;
29488
29821
  const y = cy - bh / 2;
29489
29822
  const \u6E21\u3055\u308C\u305F = (v) => (v ?? "").trim();
29490
- const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || BLOCK_DEFAULT_TITLE;
29491
- const fields = BLOCK_DEFAULT_FIELDS.map((f) => ({
29492
- label: f.label,
29493
- value: f.label === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || f.value : f.value
29494
- }));
29823
+ const \u898B\u51FA\u3057 = \u6E21\u3055\u308C\u305F(node.title) || \u5B57\u5F15("blockchainBlock.title");
29824
+ const fields = BLOCK_DEFAULT_FIELDS.map((f) => {
29825
+ const \u65E2\u5B9A\u5024 = "text" in f.value ? f.value.text : \u5B57\u5F15(f.value.\u8F9E\u66F8);
29826
+ return {
29827
+ key: f.key,
29828
+ label: \u5B57\u5F15(f.label),
29829
+ value: f.key === "hash" ? \u6E21\u3055\u308C\u305F(node.subtitle) || \u65E2\u5B9A\u5024 : \u65E2\u5B9A\u5024
29830
+ };
29831
+ });
29495
29832
  const \u898B\u51FA\u3057\u306E\u5E45 = bw - 14 - 30;
29496
29833
  const art = /* @__PURE__ */ jsxs("g", { children: [
29497
29834
  /* @__PURE__ */ jsx("rect", { x: x + 6, y: y + 6, width: bw, height: bh, rx: 8, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
@@ -29501,7 +29838,7 @@ function ShapeBlockchainBlockNode({ node, active }) {
29501
29838
  /* @__PURE__ */ jsx("circle", { cx: x + bw - 16, cy: y + 16, r: 5.5, fill: "#7cd88f", stroke: "#ffffff", strokeWidth: 1.5 }),
29502
29839
  fields.map((f, i) => /* @__PURE__ */ jsxs("g", { children: [
29503
29840
  /* @__PURE__ */ jsx("text", { x: x + 14, y: y + 54 + i * 22, fontSize: 10.5, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "var(--cdl-text-dim, #5a6270)", children: f.label }),
29504
- /* @__PURE__ */ jsx("text", { "data-cdl-role": `blockchain-block-${f.label}`, x: x + bw - 14, y: y + 54 + i * 22, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, 11, bw - 28 - \u5B57\u306E\u5E45(f.label, 10.5) - 8, \u5B57\u306E\u5E45) }),
29841
+ /* @__PURE__ */ jsx("text", { "data-cdl-role": `blockchain-block-${f.key}`, x: x + bw - 14, y: y + 54 + i * 22, fontSize: 11, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 600, textAnchor: "end", fill: "var(--cdl-text, #1a1f2a)", children: \u5E45\u3067\u5207\u308B(f.value, 11, bw - 28 - \u5B57\u306E\u5E45(f.label, 10.5) - 8, \u5B57\u306E\u5E45) }),
29505
29842
  /* @__PURE__ */ jsx("line", { x1: x + 14, y1: y + 60 + i * 22, x2: x + bw - 14, y2: y + 60 + i * 22, stroke: "var(--cdl-divider, #d4d4d8)", strokeWidth: 0.5, opacity: 0.5 })
29506
29843
  ] }, i)),
29507
29844
  /* @__PURE__ */ jsxs("g", { transform: `translate(${cx - 32}, ${y + bh - 26})`, children: [
@@ -29706,7 +30043,8 @@ function ShapeBlockchainNodeNode({ node, active }) {
29706
30043
  bottomLabel2(node, r.cx, r.label)
29707
30044
  ] });
29708
30045
  }
29709
- function ShapeRpcNodeNode({ node, active }) {
30046
+ function ShapeRpcNodeNode({ node, active, lang }) {
30047
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
29710
30048
  const frame = commonFrame4(active);
29711
30049
  const r = shapeRegion(node);
29712
30050
  const cx = r.cx;
@@ -29719,7 +30057,7 @@ function ShapeRpcNodeNode({ node, active }) {
29719
30057
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
29720
30058
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: 30, rx: 10, fill: "#2d3a4f", stroke: "none" }),
29721
30059
  /* @__PURE__ */ jsx("circle", { cx: x + 14, cy: y + 15, r: 5, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: "1.5s", repeatCount: "indefinite" }) }),
29722
- /* @__PURE__ */ jsx("text", { x: x + 26, y: y + 20, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, fill: "#7cd88f", children: "RPC ONLINE" }),
30060
+ /* @__PURE__ */ jsx("text", { x: x + 26, y: y + 20, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fontWeight: 700, fill: "#7cd88f", children: \u5B57\u5F15("rpcNode.status") }),
29723
30061
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 6, fontSize: 30, fontWeight: 700, textAnchor: "middle", fill: "#e6edf3", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "{...}" }),
29724
30062
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 26, fontSize: 11, textAnchor: "middle", fill: "#7a8290", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "JSON-RPC 2.0" }),
29725
30063
  /* @__PURE__ */ jsx("rect", { x: x + 16, y: y + bh - 24, width: bw - 32, height: 8, rx: 4, fill: "#0f1419", stroke: "none" }),
@@ -30005,7 +30343,8 @@ var TRUST_BASE_H = 14;
30005
30343
  var TRUST_BODY_OUT = 8;
30006
30344
  var TRUST_BLD_W_MIN = 140;
30007
30345
  var TRUST_BLD_W_MAX = 280;
30008
- function ShapeTrustBankNode({ node, active }) {
30346
+ function ShapeTrustBankNode({ node, active, lang }) {
30347
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30009
30348
  const frame = commonFrame5(active);
30010
30349
  const r = shapeRegion(node);
30011
30350
  const \u7DDA = frame.strokeWidth / 2;
@@ -30042,7 +30381,7 @@ function ShapeTrustBankNode({ node, active }) {
30042
30381
  return /* @__PURE__ */ jsx("rect", { x: r.cx - w / 2, y: y + bldH + i * BANK_STEP_DY, width: w, height: BANK_STEP_H, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.5 + i * 0.15, stroke: frame.stroke, strokeWidth: BANK_STEP_SW }, i);
30043
30382
  }),
30044
30383
  /* @__PURE__ */ jsx("path", { d: `M ${x - 6} ${y + pedimentH} L ${r.cx} ${y + 2} L ${x + bldW + 6} ${y + pedimentH} Z`, fill: "var(--cdl-node-fill, #ffffff)", stroke: frame.stroke, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30045
- /* @__PURE__ */ jsx("text", { x: r.cx, y: y + pedimentH - 8, fontSize: 15, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: "TRUST" }),
30384
+ /* @__PURE__ */ jsx("text", { x: r.cx, y: y + pedimentH - 8, fontSize: 15, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "var(--cdl-tone-accent, #2d6a8f)", fontFamily: "Georgia, serif", children: \u5B57\u5F15("trustBank.sign") }),
30046
30385
  /* @__PURE__ */ jsx("rect", { x: x - 4, y: y + pedimentH, width: bldW + 8, height: architraveH, fill: "var(--cdl-divider, #d4d4d8)", fillOpacity: 0.4, stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
30047
30386
  Array.from({ length: nCols }, (_, i) => i).map((i) => {
30048
30387
  const colCx = x + 15 + colGap + i * (colW + colGap) + colW / 2;
@@ -30061,7 +30400,8 @@ function ShapeTrustBankNode({ node, active }) {
30061
30400
  bottomLabel3(node, r.cx, r.label)
30062
30401
  ] });
30063
30402
  }
30064
- function ShapePaymentProviderNode({ node, active }) {
30403
+ function ShapePaymentProviderNode({ node, active, lang }) {
30404
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30065
30405
  const frame = commonFrame5(active);
30066
30406
  const r = shapeRegion(node);
30067
30407
  const cx = r.cx;
@@ -30078,13 +30418,13 @@ function ShapePaymentProviderNode({ node, active }) {
30078
30418
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: boxW, height: boxH, rx: 10, fill: "#255a7a", stroke: accentDark, strokeWidth: frame.strokeWidth }),
30079
30419
  /* @__PURE__ */ jsx("rect", { x, y, width: boxW, height: headerH, rx: 10, fill: accentDarker }),
30080
30420
  /* @__PURE__ */ jsx("rect", { x, y: y + headerH - 8, width: boxW, height: 8, fill: accentDarker }),
30081
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: "PAY" }),
30421
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 22, fontSize: 16, fontWeight: 700, letterSpacing: 4, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("paymentProvider.sign") }),
30082
30422
  /* @__PURE__ */ jsxs("g", { children: [
30083
30423
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 22, fill: "none", stroke: "#e5c07b", strokeWidth: 3.5, strokeDasharray: "38 24", strokeLinecap: "round", children: /* @__PURE__ */ jsx("animateTransform", { attributeName: "transform", type: "rotate", from: `0 ${cx} ${cy + 4}`, to: `360 ${cx} ${cy + 4}`, dur: "2s", repeatCount: "indefinite" }) }),
30084
30424
  /* @__PURE__ */ jsx("circle", { cx, cy: cy + 4, r: 10, fill: "#e5c07b", stroke: accentDarker, strokeWidth: 1.5 }),
30085
30425
  /* @__PURE__ */ jsx("text", { x: cx, y: cy + 9, fontSize: 13, fontWeight: 700, textAnchor: "middle", fill: accentDarker, fontFamily: "Georgia, serif", children: "$" })
30086
30426
  ] }),
30087
- /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: "PROCESSING" }),
30427
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + boxH - 16, fontSize: 9, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("paymentProvider.status") }),
30088
30428
  bottomLabel3(node, r.cx, r.label)
30089
30429
  ] });
30090
30430
  }
@@ -30132,7 +30472,8 @@ var BROKERAGE_SHADE_OUT = 2;
30132
30472
  var BROKERAGE_W_MIN = BROKERAGE_COLS * BROKERAGE_CELL_W + (BROKERAGE_COLS - 1) * BROKERAGE_GAP_X + 6;
30133
30473
  var BROKERAGE_W_MAX = 140;
30134
30474
  var BROKERAGE_H_MIN = BROKERAGE_TICK_H + BROKERAGE_LOGO_H + BROKERAGE_BASE_H;
30135
- function ShapeBrokerageNode({ node, active }) {
30475
+ function ShapeBrokerageNode({ node, active, lang }) {
30476
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30136
30477
  const frame = commonFrame5(active);
30137
30478
  const r = shapeRegion(node);
30138
30479
  const cx = r.cx;
@@ -30168,9 +30509,9 @@ function ShapeBrokerageNode({ node, active }) {
30168
30509
  /* @__PURE__ */ jsx("rect", { x: x - BROKERAGE_SHADE_OUT, y, width: BROKERAGE_SHADE_OUT * 2, height: h, fill: accentDarker }),
30169
30510
  /* @__PURE__ */ jsx("rect", { x, y, width: w, height: BROKERAGE_TICK_H, fill: "#0f1830", stroke: "none" }),
30170
30511
  /* @__PURE__ */ jsx("rect", { x: x + 2, y: y + 2, width: w - 4, height: 8, fill: "#1a2340", stroke: "none" }),
30171
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 9, fontSize: 5.5, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "\u25B2NKY 38,240 \u25B2AAPL 194" }),
30512
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 9, fontSize: 5.5, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("brokerage.ticker") }),
30172
30513
  /* @__PURE__ */ jsx("rect", { x, y: y + BROKERAGE_TICK_H, width: w, height: BROKERAGE_LOGO_H, fill: "#e5c07b", stroke: "none" }),
30173
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: "$ SECURITIES" }),
30514
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 30, fontSize: 12, fontWeight: 700, letterSpacing: 2.5, textAnchor: "middle", fill: "#0f1830", children: \u5B57\u5F15("brokerage.sign") }),
30174
30515
  Array.from({ length: rows }).map(
30175
30516
  (_, ri) => Array.from({ length: cols }).map((_2, ci) => {
30176
30517
  const wx = gridStartX + ci * (cellW + gapX);
@@ -30191,7 +30532,8 @@ function ShapeBrokerageNode({ node, active }) {
30191
30532
  bottomLabel3(node, r.cx, r.label)
30192
30533
  ] });
30193
30534
  }
30194
- function ShapeExchangeNode({ node, active }) {
30535
+ function ShapeExchangeNode({ node, active, lang }) {
30536
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30195
30537
  const frame = commonFrame5(active);
30196
30538
  const r = shapeRegion(node);
30197
30539
  const cx = r.cx;
@@ -30236,9 +30578,9 @@ function ShapeExchangeNode({ node, active }) {
30236
30578
  ] }, `d${i}`);
30237
30579
  }),
30238
30580
  /* @__PURE__ */ jsx("path", { d: hexPath, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth, strokeLinejoin: "round" }),
30239
- /* @__PURE__ */ jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "EXCHANGE" }),
30581
+ /* @__PURE__ */ jsx("text", { x: cx, y: cy - 8, fontSize: 10, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("exchange.sign") }),
30240
30582
  /* @__PURE__ */ jsx("text", { "data-cdl-role": "node-body", x: cx, y: cy + 12, fontSize: 22, fontWeight: 700, textAnchor: "middle", fill: "#e5c07b", children: "\u21C4" }),
30241
- /* @__PURE__ */ jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "clearing" }),
30583
+ /* @__PURE__ */ jsx("text", { x: cx, y: cy + 26, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("exchange.sub") }),
30242
30584
  nodes.map((n, i) => /* @__PURE__ */ jsx("circle", { cx: n.cx, cy: n.cy, r: 8, fill: n.fill, stroke: accentDarker, strokeWidth: 1.5 }, `n${i}`))
30243
30585
  ] });
30244
30586
  return /* @__PURE__ */ jsxs("g", { children: [
@@ -30260,7 +30602,8 @@ var ATM_PANEL_H = 146;
30260
30602
  var ATM_W_MIN = 100;
30261
30603
  var ATM_W_MAX = 140;
30262
30604
  var ATM_H_MIN = ATM_SIGN_H + ATM_SIGN_GAP + 30 + ATM_FLOOR_RESERVE;
30263
- function ShapeAtmNode({ node, active }) {
30605
+ function ShapeAtmNode({ node, active, lang }) {
30606
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30264
30607
  const frame = commonFrame5(active);
30265
30608
  const r = shapeRegion(node);
30266
30609
  const cx = r.cx;
@@ -30294,12 +30637,12 @@ function ShapeAtmNode({ node, active }) {
30294
30637
  const \u7D75 = /* @__PURE__ */ jsxs("g", { children: [
30295
30638
  /* @__PURE__ */ jsx("ellipse", { cx, cy: y + totalH + ATM_SHADOW_DY, rx: totalW * ATM_SHADOW_RX_RATIO, ry: ATM_SHADOW_RY, fill: frame.stroke, opacity: 0.15, stroke: "none" }),
30296
30639
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: signY, width: totalW, height: signH, fill: accentDarker, stroke: "#000", strokeWidth: ATM_SIGN_SW }),
30297
- /* @__PURE__ */ jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: "ATM CORNER" }),
30640
+ /* @__PURE__ */ jsx("text", { x: centerX, y: signY + 17, fontSize: 11, fontWeight: 700, letterSpacing: 2, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.sign") }),
30298
30641
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x: atmX, y: atmY, width: atmW, height: atmH, rx: 6, fill: "#255a7a", stroke: accentDarker, strokeWidth: frame.strokeWidth }),
30299
30642
  /* @__PURE__ */ jsxs("g", { transform: `translate(${centerX} ${atmY}) scale(${\u9762})`, children: [
30300
30643
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 10, width: ATM_PANEL_W - 16, height: 52, rx: 3, fill: "#0f1830", stroke: "#000", strokeWidth: 1.5 }),
30301
30644
  /* @__PURE__ */ jsx("text", { x: 0, y: 30, fontSize: 10, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "\u304A\u5F15\u51FA\u3057" }),
30302
- /* @__PURE__ */ jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: "SELECT AMOUNT" }),
30645
+ /* @__PURE__ */ jsx("text", { x: 0, y: 44, fontSize: 8, fontWeight: 700, textAnchor: "middle", fill: "#a4b5f2", children: \u5B57\u5F15("atm.screen") }),
30303
30646
  /* @__PURE__ */ jsx("text", { x: 0, y: 56, fontSize: 10, fontWeight: 700, textAnchor: "middle", fill: "#4ea36a", children: "\xA5 20,000" }),
30304
30647
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 8, y: 68, width: ATM_PANEL_W - 16, height: 42, rx: 2, fill: "#8b949e", stroke: "#5a6270", strokeWidth: 1 }),
30305
30648
  (() => {
@@ -30313,7 +30656,7 @@ function ShapeAtmNode({ node, active }) {
30313
30656
  ["5", "#5a6270"],
30314
30657
  ["6", "#5a6270"],
30315
30658
  ["0", "#5a6270"],
30316
- ["OK", "#4ea36a"]
30659
+ [\u5B57\u5F15("atm.ok"), "#4ea36a"]
30317
30660
  ];
30318
30661
  const keyW = 18;
30319
30662
  const keyH = 10;
@@ -30326,13 +30669,16 @@ function ShapeAtmNode({ node, active }) {
30326
30669
  const ky = 74 + row * (keyH + 2);
30327
30670
  return /* @__PURE__ */ jsxs("g", { children: [
30328
30671
  /* @__PURE__ */ jsx("rect", { x: kx, y: ky, width: keyW, height: keyH, fill: k[1], stroke: "#0f1830", strokeWidth: 0.8 }),
30329
- /* @__PURE__ */ jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: k[0] === "OK" ? 6 : 7, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
30672
+ /* @__PURE__ */ jsx("text", { x: kx + keyW / 2, y: ky + 7, fontSize: (
30673
+ /* 決める鍵 (末尾) は 2 字あるので小さく描く。 字は言語で変わるため位置で見分ける */
30674
+ i === keys.length - 1 ? 6 : 7
30675
+ ), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", children: k[0] })
30330
30676
  ] }, `k${i}`);
30331
30677
  });
30332
30678
  })(),
30333
30679
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 116, width: ATM_PANEL_W - 24, height: 8, rx: 1.5, fill: "#0f1830", stroke: accentDarker, strokeWidth: 1 }),
30334
30680
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 15, y: 118, width: ATM_PANEL_W - 30, height: 4, rx: 0.5, fill: "#e5c07b" }),
30335
- /* @__PURE__ */ jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: "CARD SLOT" }),
30681
+ /* @__PURE__ */ jsx("text", { x: 0, y: 132, fontSize: 6, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#e5c07b", children: \u5B57\u5F15("atm.cardSlot") }),
30336
30682
  /* @__PURE__ */ jsx("rect", { x: \u9762\u5DE6 + 12, y: 136, width: ATM_PANEL_W - 24, height: 4, rx: 1, fill: "#0f1830" })
30337
30683
  ] }),
30338
30684
  /* @__PURE__ */ jsx("rect", { x: centerX - totalW / 2, y: floorY, width: totalW, height: 6, fill: "#8b949e", stroke: "none" }),
@@ -30417,7 +30763,8 @@ function ShapeWebsiteNode({ node, active }) {
30417
30763
  bottomLabel4(node, r.cx, r.label)
30418
30764
  ] });
30419
30765
  }
30420
- function ShapeStorefrontNode({ node, active }) {
30766
+ function ShapeStorefrontNode({ node, active, lang }) {
30767
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30421
30768
  const frame = commonFrame6(active);
30422
30769
  const r = shapeRegion(node);
30423
30770
  const cx = r.cx;
@@ -30443,7 +30790,7 @@ function ShapeStorefrontNode({ node, active }) {
30443
30790
  return /* @__PURE__ */ jsxs("g", { children: [
30444
30791
  /* @__PURE__ */ jsx("ellipse", { cx, cy: y + bh + 8, rx: bw * 0.5, ry: 5, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
30445
30792
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: signH, fill: accent, stroke: accentDark, strokeWidth: 2 }),
30446
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: "SHOP" }),
30793
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 18, fontSize: 16, fontWeight: 900, letterSpacing: 8, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("storefront.sign") }),
30447
30794
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y: facadeY, width: bw, height: facadeH, fill: "#e0e4e8", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
30448
30795
  /* @__PURE__ */ jsx("rect", { x: winX, y: winY, width: winW, height: winH, fill: "#a4c5d9", stroke: accentDarker, strokeWidth: 2 }),
30449
30796
  /* @__PURE__ */ jsx("line", { x1: winX + winW / 2, y1: winY, x2: winX + winW / 2, y2: winY + winH, stroke: accentDarker, strokeWidth: 1 }),
@@ -30457,7 +30804,7 @@ function ShapeStorefrontNode({ node, active }) {
30457
30804
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.38, x2: doorX + doorW - 4, y2: doorY + doorH * 0.38, stroke: accentDarker, strokeWidth: 1 }),
30458
30805
  /* @__PURE__ */ jsx("line", { x1: doorX + 4, y1: doorY + doorH * 0.72, x2: doorX + doorW - 4, y2: doorY + doorH * 0.72, stroke: accentDarker, strokeWidth: 1 }),
30459
30806
  /* @__PURE__ */ jsx("rect", { x: doorX + doorW / 2 - 20, y: doorY + doorH * 0.85, width: 40, height: 12, fill: "#e5c07b", stroke: "#a67c00", strokeWidth: 1.5 }),
30460
- /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: "OPEN" }),
30807
+ /* @__PURE__ */ jsx("text", { x: doorX + doorW / 2, y: doorY + doorH * 0.85 + 9, fontSize: 8, fontWeight: 700, letterSpacing: 1, textAnchor: "middle", fill: "#5a3a10", children: \u5B57\u5F15("storefront.open") }),
30461
30808
  /* @__PURE__ */ jsx("circle", { cx: doorX + 6, cy: doorY + doorH * 0.55, r: 1.5, fill: "#c15a4a" }),
30462
30809
  /* @__PURE__ */ jsx("rect", { x: x - 6, y: y + bh - 6, width: bw + 12, height: 8, fill: "#5a6270", stroke: "none" }),
30463
30810
  bottomLabel4(node, r.cx, r.label)
@@ -30474,7 +30821,8 @@ var WAREHOUSE_SHADOW_RX_RATIO = 0.5;
30474
30821
  var WAREHOUSE_H_MIN = WAREHOUSE_ROOF_H + WAREHOUSE_SIGN_H + 68;
30475
30822
  var WAREHOUSE_W_MIN = 160;
30476
30823
  var WAREHOUSE_W_MAX = 240;
30477
- function ShapeWarehouseNode({ node, active }) {
30824
+ function ShapeWarehouseNode({ node, active, lang }) {
30825
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30478
30826
  const frame = commonFrame6(active);
30479
30827
  const r = shapeRegion(node);
30480
30828
  const cx = r.cx;
@@ -30503,7 +30851,7 @@ function ShapeWarehouseNode({ node, active }) {
30503
30851
  /* @__PURE__ */ jsx("path", { d: `M ${x - WAREHOUSE_ROOF_OUT} ${y + roofH} L ${x + 12} ${y + 2} L ${x + bw - 12} ${y + 2} L ${x + bw + WAREHOUSE_ROOF_OUT} ${y + roofH} Z`, fill: "#5a6270", stroke: accentDarker, strokeWidth: WAREHOUSE_ROOF_SW, strokeLinejoin: "round" }),
30504
30852
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y: y + roofH, width: bw, height: bh - roofH - 12, fill: "#a89d8f", stroke: "#5a6270", strokeWidth: frame.strokeWidth }),
30505
30853
  /* @__PURE__ */ jsx("rect", { x, y: y + roofH, width: bw, height: signH, fill: "#c15a4a", stroke: "#8b3f2f", strokeWidth: 1.5 }),
30506
- /* @__PURE__ */ jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: "WAREHOUSE" }),
30854
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + roofH + 17, fontSize: 12, fontWeight: 900, letterSpacing: 6, textAnchor: "middle", fill: "#ffffff", children: \u5B57\u5F15("warehouse.sign") }),
30507
30855
  /* @__PURE__ */ jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: shutterH, fill: "#8b949e", stroke: accentDarker, strokeWidth: 2 }),
30508
30856
  /* @__PURE__ */ jsx("rect", { x: shutterX, y: shutterY, width: shutterW, height: 5, fill: "#5a6270", stroke: "none" }),
30509
30857
  Array.from({ length: 10 }, (_, i) => i).map((i) => /* @__PURE__ */ jsx(
@@ -30660,7 +31008,8 @@ var API_ROWS = 3;
30660
31008
  var API_H_MIN = API_ROW_TOP + (API_ROWS - 1) * API_ROW_PITCH_MIN + API_ROW_H + API_ROW_BOTTOM_PAD;
30661
31009
  var API_W_MIN = 200;
30662
31010
  var API_W_MAX = 300;
30663
- function ShapeApiGatewayNode({ node, active }) {
31011
+ function ShapeApiGatewayNode({ node, active, lang }) {
31012
+ const \u5B57\u5F15 = \u5B57\u5F15\u304D\u3092\u4F5C\u308B(lang);
30664
31013
  const frame = commonFrame6(active);
30665
31014
  const r = shapeRegion(node);
30666
31015
  const cx = r.cx;
@@ -30671,6 +31020,7 @@ function ShapeApiGatewayNode({ node, active }) {
30671
31020
  const x = cx - bw / 2;
30672
31021
  const y = r.cy - \u7E26 / 2 + \u4F59\u767D;
30673
31022
  const \u5E83\u304C\u308A = { \u4E0A: \u7E26 / 2, \u4E0B: \u7E26 / 2, \u5DE6: bw / 2 + \u4F59\u767D, \u53F3: bw / 2 + \u4F59\u767D };
31023
+ const \u7A2E\u985E\u306E\u5B57 = (s) => Math.min(11, 11 * 48 / Math.max(displayWidth(s) * 11 * MONO_ADVANCE_RATIO, textWidth(s, 11)));
30674
31024
  const rowPitch = Math.max(
30675
31025
  API_ROW_PITCH_MIN,
30676
31026
  (bh - API_ROW_TOP - API_ROW_H - API_ROW_BOTTOM_PAD) / (API_ROWS - 1)
@@ -30679,15 +31029,15 @@ function ShapeApiGatewayNode({ node, active }) {
30679
31029
  /* @__PURE__ */ jsx("rect", { x: x + DROP_SHADOW_D, y: y + DROP_SHADOW_D, width: bw, height: bh, rx: 10, fill: frame.stroke, opacity: 0.2, stroke: "none" }),
30680
31030
  /* @__PURE__ */ jsx("rect", { "data-cdl-role": "node-body", x, y, width: bw, height: bh, rx: 10, fill: "#1a2332", stroke: frame.stroke, strokeWidth: frame.strokeWidth }),
30681
31031
  /* @__PURE__ */ jsx("rect", { x, y, width: bw, height: 36, rx: 10, fill: "var(--cdl-tone-accent, #2d6a8f)", stroke: "none" }),
30682
- /* @__PURE__ */ jsx("text", { x: cx, y: y + 24, fontSize: 14, fontWeight: 700, letterSpacing: 3, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: "API GATEWAY" }),
31032
+ /* @__PURE__ */ jsx("text", { x: cx, y: y + 24, fontSize: 14, fontWeight: 700, letterSpacing: 3, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: \u5B57\u5F15("apiGateway.sign") }),
30683
31033
  [
30684
- { method: "GET", path: "/users", color: "#27c93f" },
30685
- { method: "POST", path: "/orders", color: "#e5c07b" },
30686
- { method: "DEL", path: "/session", color: "#c9302c" }
31034
+ { method: "GET", path: \u5B57\u5F15("apiGateway.users"), color: "#27c93f" },
31035
+ { method: "POST", path: \u5B57\u5F15("apiGateway.orders"), color: "#e5c07b" },
31036
+ { method: \u5B57\u5F15("apiGateway.delete"), path: \u5B57\u5F15("apiGateway.session"), color: "#c9302c" }
30687
31037
  ].map((e, i) => /* @__PURE__ */ jsxs("g", { transform: `translate(${x + 16}, ${y + API_ROW_TOP + i * rowPitch})`, children: [
30688
31038
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: bw - 32, height: API_ROW_H, rx: 4, fill: "#0f1419", stroke: "none" }),
30689
31039
  /* @__PURE__ */ jsx("rect", { x: 0, y: 0, width: 54, height: API_ROW_H, rx: 4, fill: e.color, stroke: "none" }),
30690
- /* @__PURE__ */ jsx("text", { x: 27, y: 16, fontSize: 11, fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
31040
+ /* @__PURE__ */ jsx("text", { x: 27, y: 16, fontSize: \u7A2E\u985E\u306E\u5B57(e.method), fontWeight: 700, textAnchor: "middle", fill: "#ffffff", fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", children: e.method }),
30691
31041
  /* @__PURE__ */ jsx("text", { x: 64, y: 16, fontSize: 12, fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace", fill: "#e6edf3", children: e.path }),
30692
31042
  /* @__PURE__ */ jsx("circle", { cx: bw - 44, cy: 12, r: 4, fill: "#27c93f", stroke: "none", children: /* @__PURE__ */ jsx("animate", { attributeName: "opacity", values: "0.4;1;0.4", dur: `${1.2 + i * 0.3}s`, repeatCount: "indefinite" }) })
30693
31043
  ] }, i))
@@ -30992,7 +31342,8 @@ function CdlNodeView({
30992
31342
  stateValues,
30993
31343
  currentPhaseId,
30994
31344
  chartLineScale,
30995
- \u95A2\u4FC2\u306E\u53D7\u3051\u53E3
31345
+ \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
31346
+ lang
30996
31347
  }) {
30997
31348
  const value = node.value ? interpolate(node.value, stateValues) : void 0;
30998
31349
  const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
@@ -31208,11 +31559,11 @@ function CdlNodeView({
31208
31559
  case "shape-window":
31209
31560
  return /* @__PURE__ */ jsx(ShapeWindowNode, { node: resolvedNode, active });
31210
31561
  case "shape-terminal":
31211
- return /* @__PURE__ */ jsx(ShapeTerminalNode, { node: resolvedNode, active });
31562
+ return /* @__PURE__ */ jsx(ShapeTerminalNode, { node: resolvedNode, active, lang });
31212
31563
  case "shape-code-block":
31213
- return /* @__PURE__ */ jsx(ShapeCodeBlockNode, { node: resolvedNode, active });
31564
+ return /* @__PURE__ */ jsx(ShapeCodeBlockNode, { node: resolvedNode, active, lang });
31214
31565
  case "shape-kanban-card":
31215
- return /* @__PURE__ */ jsx(ShapeKanbanCardNode, { node: resolvedNode, active });
31566
+ return /* @__PURE__ */ jsx(ShapeKanbanCardNode, { node: resolvedNode, active, lang });
31216
31567
  case "shape-message-bubble":
31217
31568
  return /* @__PURE__ */ jsx(ShapeMessageBubbleNode, { node: resolvedNode, active });
31218
31569
  case "shape-gear":
@@ -31230,11 +31581,11 @@ function CdlNodeView({
31230
31581
  case "shape-satellite":
31231
31582
  return /* @__PURE__ */ jsx(ShapeSatelliteNode, { node: resolvedNode, active });
31232
31583
  case "shape-smart-contract":
31233
- return /* @__PURE__ */ jsx(ShapeSmartContractNode, { node: resolvedNode, active });
31584
+ return /* @__PURE__ */ jsx(ShapeSmartContractNode, { node: resolvedNode, active, lang });
31234
31585
  case "shape-blockchain-block":
31235
- return /* @__PURE__ */ jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active });
31586
+ return /* @__PURE__ */ jsx(ShapeBlockchainBlockNode, { node: resolvedNode, active, lang });
31236
31587
  case "shape-rpc-node":
31237
- return /* @__PURE__ */ jsx(ShapeRpcNodeNode, { node: resolvedNode, active });
31588
+ return /* @__PURE__ */ jsx(ShapeRpcNodeNode, { node: resolvedNode, active, lang });
31238
31589
  case "shape-wallet":
31239
31590
  return /* @__PURE__ */ jsx(ShapeWalletNode, { node: resolvedNode, active });
31240
31591
  case "shape-nft":
@@ -31252,29 +31603,29 @@ function CdlNodeView({
31252
31603
  case "shape-bank":
31253
31604
  return /* @__PURE__ */ jsx(ShapeBankNode, { node: resolvedNode, active });
31254
31605
  case "shape-trust-bank":
31255
- return /* @__PURE__ */ jsx(ShapeTrustBankNode, { node: resolvedNode, active });
31606
+ return /* @__PURE__ */ jsx(ShapeTrustBankNode, { node: resolvedNode, active, lang });
31256
31607
  case "shape-payment-provider":
31257
- return /* @__PURE__ */ jsx(ShapePaymentProviderNode, { node: resolvedNode, active });
31608
+ return /* @__PURE__ */ jsx(ShapePaymentProviderNode, { node: resolvedNode, active, lang });
31258
31609
  case "shape-credit-card":
31259
31610
  return /* @__PURE__ */ jsx(ShapeCreditCardNode, { node: resolvedNode, active });
31260
31611
  case "shape-brokerage":
31261
- return /* @__PURE__ */ jsx(ShapeBrokerageNode, { node: resolvedNode, active });
31612
+ return /* @__PURE__ */ jsx(ShapeBrokerageNode, { node: resolvedNode, active, lang });
31262
31613
  case "shape-exchange":
31263
- return /* @__PURE__ */ jsx(ShapeExchangeNode, { node: resolvedNode, active });
31614
+ return /* @__PURE__ */ jsx(ShapeExchangeNode, { node: resolvedNode, active, lang });
31264
31615
  case "shape-atm":
31265
- return /* @__PURE__ */ jsx(ShapeAtmNode, { node: resolvedNode, active });
31616
+ return /* @__PURE__ */ jsx(ShapeAtmNode, { node: resolvedNode, active, lang });
31266
31617
  case "shape-website":
31267
31618
  return /* @__PURE__ */ jsx(ShapeWebsiteNode, { node: resolvedNode, active });
31268
31619
  case "shape-storefront":
31269
- return /* @__PURE__ */ jsx(ShapeStorefrontNode, { node: resolvedNode, active });
31620
+ return /* @__PURE__ */ jsx(ShapeStorefrontNode, { node: resolvedNode, active, lang });
31270
31621
  case "shape-warehouse":
31271
- return /* @__PURE__ */ jsx(ShapeWarehouseNode, { node: resolvedNode, active });
31622
+ return /* @__PURE__ */ jsx(ShapeWarehouseNode, { node: resolvedNode, active, lang });
31272
31623
  case "shape-online-shop":
31273
31624
  return /* @__PURE__ */ jsx(ShapeOnlineShopNode, { node: resolvedNode, active });
31274
31625
  case "shape-cdn-edge":
31275
31626
  return /* @__PURE__ */ jsx(ShapeCdnEdgeNode, { node: resolvedNode, active });
31276
31627
  case "shape-api-gateway":
31277
- return /* @__PURE__ */ jsx(ShapeApiGatewayNode, { node: resolvedNode, active });
31628
+ return /* @__PURE__ */ jsx(ShapeApiGatewayNode, { node: resolvedNode, active, lang });
31278
31629
  case "shape-auditor":
31279
31630
  return /* @__PURE__ */ jsx(ShapeAuditorNode, { node: resolvedNode, active });
31280
31631
  case "shape-regulator":
@@ -31649,6 +32000,7 @@ function CdlStage({
31649
32000
  {
31650
32001
  node,
31651
32002
  active: activeSet.has(node.id),
32003
+ lang: laid.lang,
31652
32004
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3: \u7BB1\u306E\u53D7\u3051\u53E3,
31653
32005
  drawing: \u63CF\u304F,
31654
32006
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
@@ -33272,6 +33624,6 @@ function slugify(s) {
33272
33624
  return s.toLowerCase().replace(/[^a-z0-9぀-ゟ゠-ヿ一-龯]+/g, "-").replace(/^-|-$/g, "");
33273
33625
  }
33274
33626
 
33275
- export { ARROW_ANGLE_MAX_DEG, ARROW_ENDPOINT_CENTER_TOL, CHAIN_MIN_CLEARANCE, CHAIN_SHIFT_MAX_ACCUMULATED, CHAIN_SHIFT_MAX_ITER, CLASS_RELATION_LOOK, CLEARANCE_LABEL_LABEL, CLEARANCE_LANE_LABEL, CLEARANCE_NODE_LABEL, CLEARANCE_PATH_LABEL, COLUMN_GAP_VARIANCE_TOL, CdlDiagramThumbnail, CdlDiagramView, DETOUR_GAP, DETOUR_SLOT_GAP, DIST_LABEL_PATH_MAX, DIST_LABEL_PATH_MIN, EDGE_HEADS, EDGE_HEAD_DEFAULT, EDGE_HEAD_FILLS, EDGE_HEAD_FILL_DEFAULT, EDGE_LABEL_TEXT, EDGE_REVEALS, EDGE_REVEAL_DEFAULT, EDGE_STUB_OUT, EDGE_STYLES, ER_CARDINALITY_HEAD, FAN_GAP, FONT_RENDER_TOLERANCE_WORLD, FSM_ACTION_MARK, LABEL_INIT_CLEARANCE, LABEL_INIT_CLEARANCE_DOTTED_FLOW, LABEL_SIZE_TOLERANCE_WORLD, LABEL_TO_PATH_CLEARANCE, LANE_BORDER_CLEARANCE_TOL, MARKER_GLOW_RADIUS, MIN_COLUMN_ALIGNMENT_TOLERANCE, MIN_ROW_ALIGNMENT_TOLERANCE, NEAR_COLLISION_DEFAULT_MIN, NEAR_COLLISION_POLICY, NODE_FRAME_SELECTOR, NODE_KINDS, RELATION_FOCUSES, RELATION_FOCUS_DEFAULT, ROW_GAP_VARIANCE_TOL, SEQUENCE_MESSAGE_LOOK, SPEC_CLEARANCE_POLICY, STAGE_SVG_SELECTOR, TARGET_LABEL_PATH_DIST, TONES, WCAG_AA_LARGE, WCAG_AA_NORMAL, applyDerivedValues, assertNever, attachEventHandlers, batch, bboxClearance, bboxDiffWorld, cdlAdapter, chart, classDiagram, compile, computeEventBindingKey, computeFormulaKey, computeInputSignalKey, computeScrollProgress, computeScrollTriggerKey, computeStateValues, computeViewportScale, computed, countEdgeCrossings, countOrderCrossings, createFormulaComputeds, createInputSignals, createInteractiveSignalsAccessor, createScrollProgressHandle, createScrollProgressSignals, diagram, effect, er, evaluate as evaluateFormula, extractIdentifiers, flow, flowchart, funnel, gantt, hasInteractivePrimitives, infrastructure, inputDefaultValue, interpolate, isLargeText, labelInitClearance, layout, layoutWithValidation, mindMap, network, orderNodes, parseFormula, pointRectEdgeDistance, pointToSegmentDistance2 as pointToSegmentDistance, predictLabelBBoxWorld, predictNodeBBoxWorld, projectEdgeLabel, projectNode, projectPathSegment, pxToWorld, quadrant, rectRectClearance, rectRectOverlapArea, relatedFocusSet, rendersRows, requiredContrastRatio, requiredNearClearance, requiredRowsHeight, requiredRowsWidth, requiredSpecClearance, resolveEdgeLabelOverlapsWithChain, resolveEdgeLabelOverlapsWithChainAndPropagate, resolveLabelClearanceAfterPathPasses, resolveOverlapsWithChain, resolveTarget, resolveTargetAll, segmentsIntersect2 as segmentsIntersect, sequence, sequenceBoardMetrics, sequenceStepId, signal, stateMachine, stateMachine2, swimlane, topology, tree, untrack, userJourney, validate, verifyAllDiagramsDom, verifyAuthorIntent, verifyAuthorIntentAll, verifyDiagramDom, visualValidate, visualValidateAll, visualValidateLaid, withDerivedValues, worldToPx };
33627
+ export { ARROW_ANGLE_MAX_DEG, ARROW_ENDPOINT_CENTER_TOL, CHAIN_MIN_CLEARANCE, CHAIN_SHIFT_MAX_ACCUMULATED, CHAIN_SHIFT_MAX_ITER, CLASS_RELATION_LOOK, CLEARANCE_LABEL_LABEL, CLEARANCE_LANE_LABEL, CLEARANCE_NODE_LABEL, CLEARANCE_PATH_LABEL, COLUMN_GAP_VARIANCE_TOL, CdlDiagramThumbnail, CdlDiagramView, DETOUR_GAP, DETOUR_SLOT_GAP, DIST_LABEL_PATH_MAX, DIST_LABEL_PATH_MIN, EDGE_HEADS, EDGE_HEAD_DEFAULT, EDGE_HEAD_FILLS, EDGE_HEAD_FILL_DEFAULT, EDGE_LABEL_TEXT, EDGE_REVEALS, EDGE_REVEAL_DEFAULT, EDGE_STUB_OUT, EDGE_STYLES, ER_CARDINALITY_HEAD, FAN_GAP, FONT_RENDER_TOLERANCE_WORLD, FSM_ACTION_MARK, LABEL_INIT_CLEARANCE, LABEL_INIT_CLEARANCE_DOTTED_FLOW, LABEL_SIZE_TOLERANCE_WORLD, LABEL_TO_PATH_CLEARANCE, LANE_BORDER_CLEARANCE_TOL, MARKER_GLOW_RADIUS, MIN_COLUMN_ALIGNMENT_TOLERANCE, MIN_ROW_ALIGNMENT_TOLERANCE, NEAR_COLLISION_DEFAULT_MIN, NEAR_COLLISION_POLICY, NODE_FRAME_SELECTOR, NODE_KINDS, RELATION_FOCUSES, RELATION_FOCUS_DEFAULT, ROW_GAP_VARIANCE_TOL, SEQUENCE_MESSAGE_LOOK, SPEC_CLEARANCE_POLICY, STAGE_SVG_SELECTOR, TARGET_LABEL_PATH_DIST, TONES, WCAG_AA_LARGE, WCAG_AA_NORMAL, applyDerivedValues, assertNever, attachEventHandlers, batch, bboxClearance, bboxDiffWorld, cdlAdapter, chart, classDiagram, compile, computeEventBindingKey, computeFormulaKey, computeInputSignalKey, computeScrollProgress, computeScrollTriggerKey, computeStateValues, computeViewportScale, computed, countEdgeCrossings, countOrderCrossings, createFormulaComputeds, createInputSignals, createInteractiveSignalsAccessor, createScrollProgressHandle, createScrollProgressSignals, diagram, effect, er, evaluate as evaluateFormula, extractIdentifiers, flow, flowchart, funnel, gantt, hasInteractivePrimitives, infrastructure, inputDefaultValue, interpolate, isLargeText, labelInitClearance, layout, layoutWithValidation, mindMap, network, orderNodes, parseFormula, pointRectEdgeDistance, pointToSegmentDistance2 as pointToSegmentDistance, predictLabelBBoxWorld, predictNodeBBoxWorld, projectEdgeLabel, projectNode, projectPathSegment, pxToWorld, quadrant, rectRectClearance, rectRectOverlapArea, relatedFocusSet, rendersRows, requiredContrastRatio, requiredNearClearance, requiredRowsHeight, requiredRowsWidth, requiredSpecClearance, resolveEdgeLabelOverlapsWithChain, resolveEdgeLabelOverlapsWithChainAndPropagate, resolveLabelClearanceAfterPathPasses, resolveLang, resolveOverlapsWithChain, resolveTarget, resolveTargetAll, segmentsIntersect2 as segmentsIntersect, sequence, sequenceBoardMetrics, sequenceStepId, signal, stateMachine, stateMachine2, swimlane, topology, tree, untrack, userJourney, validate, verifyAllDiagramsDom, verifyAuthorIntent, verifyAuthorIntentAll, verifyDiagramDom, visualValidate, visualValidateAll, visualValidateLaid, withDerivedValues, worldToPx };
33276
33628
  //# sourceMappingURL=index.js.map
33277
33629
  //# sourceMappingURL=index.js.map