@cardenelabs/cdl 0.60.0 → 0.62.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
@@ -558,6 +558,18 @@ var en = {
558
558
  "readout.kanban.inprogress": "In Progress",
559
559
  /** `kanban-board` の列の見出し (値は `done` で読む) */
560
560
  "readout.kanban.done": "Done",
561
+ /** `status-timeline` の区間の字 (値は `active` で読む) */
562
+ "readout.statusTimeline.active": "ACTIVE",
563
+ /** `status-timeline` の区間の字 (値は `idle` で読む) */
564
+ "readout.statusTimeline.idle": "IDLE",
565
+ /** `status-timeline` の区間の字 (値は `error` で読む) */
566
+ "readout.statusTimeline.error": "ERROR",
567
+ /** `user-presence` の状態の字 (値は `online` で読む) */
568
+ "readout.presence.online": "online",
569
+ /** `user-presence` の状態の字 (値は `away` で読む) */
570
+ "readout.presence.away": "away",
571
+ /** `user-presence` の状態の字 (値は `offline` で読む) */
572
+ "readout.presence.offline": "offline",
561
573
  /** `traffic-light` の赤の灯の見出し (値は `red` で読む) */
562
574
  "readout.trafficLight.red": "red",
563
575
  /** `traffic-light` の黄の灯の見出し (値は `yellow` / `amber` で読む) */
@@ -666,6 +678,12 @@ var ja = {
666
678
  "readout.kanban.todo": "\u672A\u7740\u624B",
667
679
  "readout.kanban.inprogress": "\u9032\u884C\u4E2D",
668
680
  "readout.kanban.done": "\u5B8C\u4E86",
681
+ "readout.statusTimeline.active": "\u7A3C\u50CD",
682
+ "readout.statusTimeline.idle": "\u5F85\u6A5F",
683
+ "readout.statusTimeline.error": "\u7570\u5E38",
684
+ "readout.presence.online": "\u30AA\u30F3\u30E9\u30A4\u30F3",
685
+ "readout.presence.away": "\u96E2\u5E2D",
686
+ "readout.presence.offline": "\u30AA\u30D5\u30E9\u30A4\u30F3",
669
687
  "readout.trafficLight.red": "\u8D64",
670
688
  "readout.trafficLight.yellow": "\u9EC4",
671
689
  "readout.trafficLight.green": "\u7DD1"
@@ -1589,6 +1607,34 @@ function warn(message) {
1589
1607
  }
1590
1608
  }
1591
1609
 
1610
+ // src/input-option.ts
1611
+ function \u9078\u629E\u80A2\u306E\u5024(option) {
1612
+ return typeof option === "string" ? option : option.value;
1613
+ }
1614
+ function \u9078\u629E\u80A2\u306E\u540D\u524D(option) {
1615
+ return typeof option === "string" || option.label === "" ? \u9078\u629E\u80A2\u306E\u5024(option) : option.label;
1616
+ }
1617
+ function \u5024\u306E\u540D\u524D\u306E\u8868\u3092\u4F5C\u308B(inputs) {
1618
+ const \u8868 = /* @__PURE__ */ new Map();
1619
+ for (const input of inputs ?? []) {
1620
+ const \u540D\u524D = /* @__PURE__ */ new Map();
1621
+ if (input.kind === "dropdown" || input.kind === "radio" || input.kind === "tabs" || input.kind === "multi-select") {
1622
+ for (const option of input.options) {
1623
+ if (typeof option !== "string" && option.label !== "") \u540D\u524D.set(option.value, option.label);
1624
+ }
1625
+ } else if (input.kind === "toggle") {
1626
+ if (input.onLabel) \u540D\u524D.set("true", input.onLabel);
1627
+ if (input.offLabel) \u540D\u524D.set("false", input.offLabel);
1628
+ }
1629
+ if (\u540D\u524D.size > 0) \u8868.set(input.id, { \u540D\u524D, \u8907\u6570: input.kind === "multi-select" });
1630
+ }
1631
+ return \u8868;
1632
+ }
1633
+ function \u5024\u3092\u540D\u524D\u3067\u8AAD\u3080(\u5165\u529B\u6B04, \u5024) {
1634
+ if (!\u5165\u529B\u6B04.\u8907\u6570) return \u5165\u529B\u6B04.\u540D\u524D.get(\u5024) ?? \u5024;
1635
+ return \u5024.split(",").map((v) => \u5165\u529B\u6B04.\u540D\u524D.get(v) ?? v).join(",");
1636
+ }
1637
+
1592
1638
  // src/kinds/text-width.ts
1593
1639
  var WIDE_RATIO = 1.04;
1594
1640
  var NARROW_RATIO = 0.37;
@@ -1667,6 +1713,111 @@ function requiredRowsWidth(rows, kind) {
1667
1713
  if (kind === void 0) return Math.ceil(Math.max(storage, generic));
1668
1714
  return Math.ceil(kind === "storage" ? storage : generic);
1669
1715
  }
1716
+
1717
+ // src/kinds/compact-title.ts
1718
+ function estimateTextWidth(text, fontSize) {
1719
+ let w = 0;
1720
+ for (const ch of text) {
1721
+ const isFullWidth = /[\u3000-\u9FFF\uFF00-\uFFEF]/.test(ch);
1722
+ w += fontSize * (isFullWidth ? 1.05 : 0.62);
1723
+ }
1724
+ return w;
1725
+ }
1726
+ function fitTextSize(text, maxWidth, targetSize, minSize) {
1727
+ let size = targetSize;
1728
+ while (size > minSize && estimateTextWidth(text, size) > maxWidth) {
1729
+ size -= 1;
1730
+ }
1731
+ return size;
1732
+ }
1733
+ var COMPACT_MAX_H = 100;
1734
+ var COMPACT_PADDING_X = 16;
1735
+ var MIN_TEXT_SIZE = 11;
1736
+ var ASCENT = 0.72;
1737
+ var DESCENT = 0.25;
1738
+ var MIN_BAND_H = MIN_TEXT_SIZE * (ASCENT + DESCENT);
1739
+ var EYEBROW_BASELINE = 38;
1740
+ var EYEBROW_SIZE = 18;
1741
+ var EYEBROW_GAP = 8;
1742
+ var BOTTOM_INSET = 4;
1743
+ var eyebrowBottom = () => EYEBROW_BASELINE + EYEBROW_SIZE * DESCENT;
1744
+ var titleBandTop = (hasEyebrow) => eyebrowBottom() + EYEBROW_GAP ;
1745
+ var isCompactBox = (h) => h < COMPACT_MAX_H;
1746
+ function titlePlacement(node, \u901A\u5E38, opts = {}) {
1747
+ if (!isCompactBox(node.h)) {
1748
+ return { x: \u901A\u5E38.x, y: \u901A\u5E38.y, size: \u901A\u5E38.size, anchor: "start" };
1749
+ }
1750
+ const \u9AD8\u3055 = Math.max(0, node.h);
1751
+ const \u76EE\u5370\u3042\u308A = opts.hasEyebrow === true;
1752
+ const \u4E0A = \u76EE\u5370\u3042\u308A && \u9AD8\u3055 >= eyebrowBottom() ? titleBandTop() : 0;
1753
+ const \u751F\u306E\u5E2F = Math.max(0, \u9AD8\u3055 - \u4E0A);
1754
+ const \u4E0B\u4F59\u767D = \u751F\u306E\u5E2F >= MIN_BAND_H + BOTTOM_INSET ? BOTTOM_INSET : 0;
1755
+ const \u5E2F = \u751F\u306E\u5E2F - \u4E0B\u4F59\u767D;
1756
+ const \u5E45\u3067 = fitTextSize(
1757
+ node.title,
1758
+ Math.max(0, node.w - COMPACT_PADDING_X),
1759
+ \u901A\u5E38.size,
1760
+ MIN_TEXT_SIZE
1761
+ );
1762
+ const \u5E2F\u3067 = Math.floor(\u5E2F / (ASCENT + DESCENT));
1763
+ const size = Math.max(MIN_TEXT_SIZE, Math.min(\u5E45\u3067, \u5E2F\u3067));
1764
+ const \u5B57\u9AD8 = size * (ASCENT + DESCENT);
1765
+ const y = \u5B57\u9AD8 <= \u5E2F ? \u4E0A + \u5E2F / 2 + size * (ASCENT - DESCENT) / 2 : \u4E0A > 0 ? \u4E0A + size * ASCENT : (\u9AD8\u3055 - \u5B57\u9AD8) / 2 + size * ASCENT;
1766
+ return { x: node.w / 2, y, size, anchor: "middle" };
1767
+ }
1768
+
1769
+ // src/kinds/box-lines.ts
1770
+ var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
1771
+ var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
1772
+ var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
1773
+ var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
1774
+ function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
1775
+ return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
1776
+ }
1777
+ function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
1778
+ if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
1779
+ if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
1780
+ const \u7701\u7565 = "\u2026";
1781
+ const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
1782
+ if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
1783
+ let \u51FA = "";
1784
+ let \u5E45 = 0;
1785
+ for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
1786
+ const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
1787
+ if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
1788
+ \u5E45 += \u5B57\u306E\u5E452;
1789
+ \u51FA += c;
1790
+ }
1791
+ return `${\u51FA}${\u7701\u7565}`;
1792
+ }
1793
+ var \u7E2E\u3081\u306E\u4E0B\u9650 = MIN_TEXT_SIZE;
1794
+ function \u5E45\u306B\u53CE\u3081\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
1795
+ let size = fontSize;
1796
+ while (size > \u7E2E\u3081\u306E\u4E0B\u9650 && \u6E2C\u308B(text, size) > \u4F7F\u3048\u308B\u5E452) size -= 1;
1797
+ return { text: \u5E45\u3067\u5207\u308B(text, size, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B), fontSize: size };
1798
+ }
1799
+ function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
1800
+ const \u533A\u5207\u308A = Intl.Segmenter;
1801
+ if (typeof \u533A\u5207\u308A !== "function") return [...text];
1802
+ return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
1803
+ }
1804
+ function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30553) {
1805
+ const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
1806
+ if (\u5019\u88DC.length === 0) return [];
1807
+ const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30553 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
1808
+ const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
1809
+ const \u6B8B\u3059 = [...\u5019\u88DC];
1810
+ while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
1811
+ const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
1812
+ const \u53CE\u3081\u305F = \u6B8B\u3059.map((r) => ({ ...r, ...\u5E45\u306B\u53CE\u3081\u308B(r.text, r.fontSize, \u5E45) }));
1813
+ const \u7DCF\u9AD8 = \u9AD8\u3055(\u53CE\u3081\u305F);
1814
+ let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
1815
+ return \u53CE\u3081\u305F.map((r) => {
1816
+ const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
1817
+ \u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
1818
+ return { ...r, dy };
1819
+ });
1820
+ }
1670
1821
  var \u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E = createContext("en");
1671
1822
  function use\u5B57\u5F15() {
1672
1823
  const lang = useContext(\u64CD\u4F5C\u90E8\u306E\u8A00\u8A9E);
@@ -2097,7 +2248,7 @@ function InputWidget({
2097
2248
  },
2098
2249
  "data-cdl-input": input.id,
2099
2250
  className: "cdl-ip-dropdown-select",
2100
- children: input.options.map((opt) => /* @__PURE__ */ jsx("option", { value: opt, children: opt }, opt))
2251
+ children: input.options.map((opt) => /* @__PURE__ */ jsx("option", { value: \u9078\u629E\u80A2\u306E\u5024(opt), children: \u9078\u629E\u80A2\u306E\u540D\u524D(opt) }, \u9078\u629E\u80A2\u306E\u5024(opt)))
2101
2252
  }
2102
2253
  )
2103
2254
  ] });
@@ -2114,17 +2265,17 @@ function InputWidget({
2114
2265
  {
2115
2266
  type: "radio",
2116
2267
  name: input.id,
2117
- value: opt,
2118
- checked: value === opt,
2268
+ value: \u9078\u629E\u80A2\u306E\u5024(opt),
2269
+ checked: value === \u9078\u629E\u80A2\u306E\u5024(opt),
2119
2270
  onChange: () => {
2120
- signal2.value = opt;
2271
+ signal2.value = \u9078\u629E\u80A2\u306E\u5024(opt);
2121
2272
  },
2122
2273
  "data-cdl-input": input.id,
2123
2274
  className: "cdl-ip-radio-input"
2124
2275
  }
2125
2276
  ),
2126
- /* @__PURE__ */ jsx("span", { className: "cdl-ip-radio-label", children: opt })
2127
- ] }, opt)) })
2277
+ /* @__PURE__ */ jsx("span", { className: "cdl-ip-radio-label", children: \u9078\u629E\u80A2\u306E\u540D\u524D(opt) })
2278
+ ] }, \u9078\u629E\u80A2\u306E\u5024(opt))) })
2128
2279
  ] });
2129
2280
  case "color":
2130
2281
  return /* @__PURE__ */ jsxs("label", { className: "cdl-ip-item cdl-ip-color", "data-cdl-input-kind": "color", children: [
@@ -2174,14 +2325,14 @@ function InputWidget({
2174
2325
  {
2175
2326
  type: "button",
2176
2327
  role: "tab",
2177
- className: `cdl-ip-tabs-btn ${value === opt ? "cdl-ip-tabs-active" : ""}`,
2328
+ className: `cdl-ip-tabs-btn ${value === \u9078\u629E\u80A2\u306E\u5024(opt) ? "cdl-ip-tabs-active" : ""}`,
2178
2329
  onClick: () => {
2179
- signal2.value = opt;
2330
+ signal2.value = \u9078\u629E\u80A2\u306E\u5024(opt);
2180
2331
  },
2181
2332
  "data-cdl-input": input.id,
2182
- children: opt
2333
+ children: \u9078\u629E\u80A2\u306E\u540D\u524D(opt)
2183
2334
  },
2184
- opt
2335
+ \u9078\u629E\u80A2\u306E\u5024(opt)
2185
2336
  )) })
2186
2337
  ] });
2187
2338
  case "datetime":
@@ -4236,13 +4387,13 @@ function MultiSelectWidget({
4236
4387
  "button",
4237
4388
  {
4238
4389
  type: "button",
4239
- className: `cdl-ip-multi-select-chip ${selected.has(opt) ? "cdl-ip-multi-select-active" : ""}`,
4240
- onClick: () => toggle(opt),
4390
+ className: `cdl-ip-multi-select-chip ${selected.has(\u9078\u629E\u80A2\u306E\u5024(opt)) ? "cdl-ip-multi-select-active" : ""}`,
4391
+ onClick: () => toggle(\u9078\u629E\u80A2\u306E\u5024(opt)),
4241
4392
  "data-cdl-input": input.id,
4242
- "data-cdl-multi-value": opt,
4243
- children: opt
4393
+ "data-cdl-multi-value": \u9078\u629E\u80A2\u306E\u5024(opt),
4394
+ children: \u9078\u629E\u80A2\u306E\u540D\u524D(opt)
4244
4395
  },
4245
- opt
4396
+ \u9078\u629E\u80A2\u306E\u5024(opt)
4246
4397
  )) })
4247
4398
  ] });
4248
4399
  }
@@ -7798,12 +7949,14 @@ function StatusTimelineReadout({
7798
7949
  } catch {
7799
7950
  }
7800
7951
  }
7952
+ const \u5F15\u304F = use\u5B57\u5F15();
7801
7953
  const colorLookup = new Map(colorMap.map((c) => [c.status.toLowerCase(), c.color]));
7802
7954
  const shown = events.slice(0, max);
7803
7955
  const stripHeight = 28;
7804
7956
  const width = 320;
7805
7957
  const cellW = shown.length > 0 ? (width - 20) / shown.length : 0;
7806
7958
  const height = stripHeight + 40;
7959
+ const \u533A\u9593\u306E\u5B57 = (status) => status === "active" || status === "idle" || status === "error" ? \u5F15\u304F(`readout.statusTimeline.${status}`) : status.toUpperCase();
7807
7960
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-status-timeline", "data-cdl-readout": id, children: [
7808
7961
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
7809
7962
  /* @__PURE__ */ jsx(
@@ -7816,9 +7969,11 @@ function StatusTimelineReadout({
7816
7969
  children: shown.map((ev, i) => {
7817
7970
  const x = 10 + i * cellW;
7818
7971
  const c = colorLookup.get(ev.status) ?? "#cbd5e1";
7819
- return /* @__PURE__ */ jsxs("g", { "data-cdl-status-event": i, children: [
7972
+ const \u5B572 = \u533A\u9593\u306E\u5B57(ev.status);
7973
+ const \u63CF\u304F\u5B57 = \u5E45\u3067\u5207\u308B(\u5B572, 10, cellW - 8);
7974
+ return /* @__PURE__ */ jsxs("g", { "data-cdl-status-event": i, "data-cdl-status": ev.status, children: [
7820
7975
  /* @__PURE__ */ jsx("rect", { x, y: 10, width: cellW - 2, height: stripHeight, fill: c, rx: 2 }),
7821
- /* @__PURE__ */ jsx(
7976
+ /* @__PURE__ */ jsxs(
7822
7977
  "text",
7823
7978
  {
7824
7979
  x: x + cellW / 2,
@@ -7828,7 +7983,10 @@ function StatusTimelineReadout({
7828
7983
  fill: "#ffffff",
7829
7984
  fontWeight: 600,
7830
7985
  style: { userSelect: "none" },
7831
- children: ev.status.length > 5 ? ev.status.slice(0, 4).toUpperCase() : ev.status.toUpperCase()
7986
+ children: [
7987
+ \u63CF\u304F\u5B57 !== \u5B572 ? /* @__PURE__ */ jsx("title", { children: \u5B572 }) : null,
7988
+ \u63CF\u304F\u5B57
7989
+ ]
7832
7990
  }
7833
7991
  ),
7834
7992
  /* @__PURE__ */ jsx(
@@ -8146,6 +8304,8 @@ function UserPresenceReadout({
8146
8304
  const width = 260;
8147
8305
  const height = shown.length * rowH + (overflow > 0 ? 20 : 0) + 8;
8148
8306
  const statusColor = (s) => s === "online" ? "#22c55e" : s === "away" ? "#eab308" : "#94a3b8";
8307
+ const \u5F15\u304F = use\u5B57\u5F15();
8308
+ const \u72B6\u614B\u306E\u5B57 = (s) => s === "online" || s === "away" || s === "offline" ? \u5F15\u304F(`readout.presence.${s}`) : s;
8149
8309
  return /* @__PURE__ */ jsxs("div", { className: "cdl-ip-item cdl-ip-readout-user-presence", "data-cdl-readout": id, children: [
8150
8310
  /* @__PURE__ */ jsx("span", { className: "cdl-ip-label", children: label }),
8151
8311
  /* @__PURE__ */ jsxs(
@@ -8158,7 +8318,7 @@ function UserPresenceReadout({
8158
8318
  children: [
8159
8319
  shown.map((u, i) => {
8160
8320
  const y = 4 + i * rowH;
8161
- return /* @__PURE__ */ jsxs("g", { "data-cdl-presence-user": i, children: [
8321
+ return /* @__PURE__ */ jsxs("g", { "data-cdl-presence-user": i, "data-cdl-presence-status": u.status, children: [
8162
8322
  /* @__PURE__ */ jsx("circle", { cx: 12, cy: y + rowH / 2, r: 6, fill: statusColor(u.status) }),
8163
8323
  /* @__PURE__ */ jsx(
8164
8324
  "text",
@@ -8181,7 +8341,7 @@ function UserPresenceReadout({
8181
8341
  textAnchor: "end",
8182
8342
  fill: "#64748b",
8183
8343
  style: { userSelect: "none" },
8184
- children: u.status
8344
+ children: \u72B6\u614B\u306E\u5B57(u.status)
8185
8345
  }
8186
8346
  )
8187
8347
  ] }, i);
@@ -10128,9 +10288,9 @@ function diagram(id, options) {
10128
10288
  if (opts.options.length === 0) {
10129
10289
  throw new Error(`input.dropdown '${inputId}' \u306E options \u304C\u7A7A\u3067\u3059 (\u6700\u4F4E 1 \u4EF6\u5FC5\u8981)`);
10130
10290
  }
10131
- if (!opts.options.includes(opts.defaultValue)) {
10291
+ if (!opts.options.some((o) => \u9078\u629E\u80A2\u306E\u5024(o) === opts.defaultValue)) {
10132
10292
  throw new Error(
10133
- `input.dropdown '${inputId}' \u306E defaultValue '${opts.defaultValue}' \u304C options \u306B\u542B\u307E\u308C\u307E\u305B\u3093 (options: ${opts.options.join(", ")})`
10293
+ `input.dropdown '${inputId}' \u306E defaultValue '${opts.defaultValue}' \u304C options \u306E\u5024\u306B\u542B\u307E\u308C\u307E\u305B\u3093 (options: ${opts.options.map(\u9078\u629E\u80A2\u306E\u5024).join(", ")})`
10134
10294
  );
10135
10295
  }
10136
10296
  inputs.push({
@@ -10148,6 +10308,9 @@ function diagram(id, options) {
10148
10308
  id: inputId,
10149
10309
  kind: "toggle",
10150
10310
  defaultValue: opts.defaultValue,
10311
+ // 名前を渡さない切り替えは変更前と同じ形に保つ (空の名前も渡さないのと同じ)
10312
+ ...opts.onLabel ? { onLabel: opts.onLabel } : {},
10313
+ ...opts.offLabel ? { offLabel: opts.offLabel } : {},
10151
10314
  label: opts.label
10152
10315
  });
10153
10316
  return api;
@@ -10215,9 +10378,9 @@ function diagram(id, options) {
10215
10378
  if (opts.options.length === 0) {
10216
10379
  throw new Error(`input.radio '${inputId}' \u306E options \u304C\u7A7A\u3067\u3059`);
10217
10380
  }
10218
- if (!opts.options.includes(opts.defaultValue)) {
10381
+ if (!opts.options.some((o) => \u9078\u629E\u80A2\u306E\u5024(o) === opts.defaultValue)) {
10219
10382
  throw new Error(
10220
- `input.radio '${inputId}' \u306E defaultValue '${opts.defaultValue}' \u304C options \u306B\u542B\u307E\u308C\u307E\u305B\u3093`
10383
+ `input.radio '${inputId}' \u306E defaultValue '${opts.defaultValue}' \u304C options \u306E\u5024\u306B\u542B\u307E\u308C\u307E\u305B\u3093`
10221
10384
  );
10222
10385
  }
10223
10386
  inputs.push({
@@ -10302,8 +10465,8 @@ function diagram(id, options) {
10302
10465
  if (opts.options.length === 0) {
10303
10466
  throw new Error(`input.tabs '${inputId}' \u306E options \u304C\u7A7A\u3067\u3059`);
10304
10467
  }
10305
- if (!opts.options.includes(opts.defaultValue)) {
10306
- throw new Error(`input.tabs '${inputId}' \u306E defaultValue \u304C options \u306B\u542B\u307E\u308C\u307E\u305B\u3093`);
10468
+ if (!opts.options.some((o) => \u9078\u629E\u80A2\u306E\u5024(o) === opts.defaultValue)) {
10469
+ throw new Error(`input.tabs '${inputId}' \u306E defaultValue \u304C options \u306E\u5024\u306B\u542B\u307E\u308C\u307E\u305B\u3093`);
10307
10470
  }
10308
10471
  inputs.push({
10309
10472
  id: inputId,
@@ -14255,8 +14418,8 @@ var TITLE_RATIO = 0.17;
14255
14418
  var SUB_RATIO = 0.72;
14256
14419
  var LINE_GAP = 3;
14257
14420
  var BOTTOM_PAD = 4;
14258
- var ASCENT = 0.72;
14259
- var DESCENT = 0.25;
14421
+ var ASCENT2 = 0.72;
14422
+ var DESCENT2 = 0.25;
14260
14423
  var ART_GAP = 4;
14261
14424
  var ART_MIN_BAND = 45;
14262
14425
  var \u843D\u3068\u3057\u3066\u3082\u63CF\u304F\u7A2E\u5225 = {
@@ -14314,9 +14477,9 @@ function labelPlan(node) {
14314
14477
  y -= \u540D\u524D\u5927 + LINE_GAP;
14315
14478
  const \u80A9\u66F8 = \u80A9\u66F8\u3042\u308A2 ? { y, size: \u5C0F\u3055\u3044\u5B57 } : null;
14316
14479
  const \u4E0A\u306E\u884C = \u80A9\u66F8 ?? \u540D\u524D;
14317
- return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size * ASCENT };
14480
+ return { \u540D\u524D, \u8AAC\u660E, \u80A9\u66F8, \u4E0A\u7AEF: \u4E0A\u306E\u884C.y - \u4E0A\u306E\u884C.size * ASCENT2 };
14318
14481
  };
14319
- const \u5165\u308B = (\u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2) => \u7A4D\u3080(1, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, 1 * DESCENT).\u4E0A\u7AEF >= \u5929;
14482
+ const \u5165\u308B = (\u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2) => \u7A4D\u3080(1, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, 1 * DESCENT2).\u4E0A\u7AEF >= \u5929;
14320
14483
  let \u8AAC\u660E\u3042\u308A = Boolean(node.subtitle);
14321
14484
  let \u80A9\u66F8\u3042\u308A = Boolean(node.eyebrow);
14322
14485
  const \u843D\u3068\u3057\u305F = [];
@@ -14334,14 +14497,14 @@ function labelPlan(node) {
14334
14497
  for (let size = \u4E0A\u9650; size >= 1; size--) {
14335
14498
  const \u5C0F\u3055\u3044\u5B572 = Math.max(1, Math.round(size * SUB_RATIO));
14336
14499
  const \u4E0B\u306E\u884C\u5927 = \u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B572 : size;
14337
- if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 * DESCENT).\u4E0A\u7AEF >= \u5929) {
14500
+ if (\u7A4D\u3080(size, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u306E\u884C\u5927 * DESCENT2).\u4E0A\u7AEF >= \u5929) {
14338
14501
  \u540D\u524D\u5927 = size;
14339
14502
  break;
14340
14503
  }
14341
14504
  }
14342
- if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (ASCENT + DESCENT);
14505
+ if (\u540D\u524D\u5927 === 0) \u540D\u524D\u5927 = \u9AD8\u3055 / (ASCENT2 + DESCENT2);
14343
14506
  const \u5C0F\u3055\u3044\u5B57 = Math.max(1, Math.round(\u540D\u524D\u5927 * SUB_RATIO));
14344
- const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) * DESCENT;
14507
+ const \u5F35\u308A\u51FA\u3057 = (\u8AAC\u660E\u3042\u308A2 ? \u5C0F\u3055\u3044\u5B57 : \u540D\u524D\u5927) * DESCENT2;
14345
14508
  const \u4F59\u308A = Math.max(0, \u7A4D\u3080(\u540D\u524D\u5927, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u5F35\u308A\u51FA\u3057).\u4E0A\u7AEF - \u5929);
14346
14509
  const \u4E0B\u4F59\u767D = Math.min(Math.max(BOTTOM_PAD, \u5F35\u308A\u51FA\u3057), \u5F35\u308A\u51FA\u3057 + \u4F59\u308A);
14347
14510
  return \u7A4D\u3080(\u540D\u524D\u5927, \u8AAC\u660E\u3042\u308A2, \u80A9\u66F8\u3042\u308A2, \u4E0B\u4F59\u767D);
@@ -14431,111 +14594,6 @@ function fitArt(region, extent, art) {
14431
14594
  return /* @__PURE__ */ jsx("g", { transform: `translate(${dx} ${dy}) scale(${s})`, children: art });
14432
14595
  }
14433
14596
 
14434
- // src/kinds/compact-title.ts
14435
- function estimateTextWidth(text, fontSize) {
14436
- let w = 0;
14437
- for (const ch of text) {
14438
- const isFullWidth = /[\u3000-\u9FFF\uFF00-\uFFEF]/.test(ch);
14439
- w += fontSize * (isFullWidth ? 1.05 : 0.62);
14440
- }
14441
- return w;
14442
- }
14443
- function fitTextSize(text, maxWidth, targetSize, minSize) {
14444
- let size = targetSize;
14445
- while (size > minSize && estimateTextWidth(text, size) > maxWidth) {
14446
- size -= 1;
14447
- }
14448
- return size;
14449
- }
14450
- var COMPACT_MAX_H = 100;
14451
- var COMPACT_PADDING_X = 16;
14452
- var MIN_TEXT_SIZE = 11;
14453
- var ASCENT2 = 0.72;
14454
- var DESCENT2 = 0.25;
14455
- var MIN_BAND_H = MIN_TEXT_SIZE * (ASCENT2 + DESCENT2);
14456
- var EYEBROW_BASELINE = 38;
14457
- var EYEBROW_SIZE = 18;
14458
- var EYEBROW_GAP = 8;
14459
- var BOTTOM_INSET = 4;
14460
- var eyebrowBottom = () => EYEBROW_BASELINE + EYEBROW_SIZE * DESCENT2;
14461
- var titleBandTop = (hasEyebrow) => eyebrowBottom() + EYEBROW_GAP ;
14462
- var isCompactBox = (h) => h < COMPACT_MAX_H;
14463
- function titlePlacement(node, \u901A\u5E38, opts = {}) {
14464
- if (!isCompactBox(node.h)) {
14465
- return { x: \u901A\u5E38.x, y: \u901A\u5E38.y, size: \u901A\u5E38.size, anchor: "start" };
14466
- }
14467
- const \u9AD8\u3055 = Math.max(0, node.h);
14468
- const \u76EE\u5370\u3042\u308A = opts.hasEyebrow === true;
14469
- const \u4E0A = \u76EE\u5370\u3042\u308A && \u9AD8\u3055 >= eyebrowBottom() ? titleBandTop() : 0;
14470
- const \u751F\u306E\u5E2F = Math.max(0, \u9AD8\u3055 - \u4E0A);
14471
- const \u4E0B\u4F59\u767D = \u751F\u306E\u5E2F >= MIN_BAND_H + BOTTOM_INSET ? BOTTOM_INSET : 0;
14472
- const \u5E2F = \u751F\u306E\u5E2F - \u4E0B\u4F59\u767D;
14473
- const \u5E45\u3067 = fitTextSize(
14474
- node.title,
14475
- Math.max(0, node.w - COMPACT_PADDING_X),
14476
- \u901A\u5E38.size,
14477
- MIN_TEXT_SIZE
14478
- );
14479
- const \u5E2F\u3067 = Math.floor(\u5E2F / (ASCENT2 + DESCENT2));
14480
- const size = Math.max(MIN_TEXT_SIZE, Math.min(\u5E45\u3067, \u5E2F\u3067));
14481
- const \u5B57\u9AD8 = size * (ASCENT2 + DESCENT2);
14482
- const y = \u5B57\u9AD8 <= \u5E2F ? \u4E0A + \u5E2F / 2 + size * (ASCENT2 - DESCENT2) / 2 : \u4E0A > 0 ? \u4E0A + size * ASCENT2 : (\u9AD8\u3055 - \u5B57\u9AD8) / 2 + size * ASCENT2;
14483
- return { x: node.w / 2, y, size, anchor: "middle" };
14484
- }
14485
-
14486
- // src/kinds/box-lines.ts
14487
- var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
14488
- var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
14489
- var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
14490
- var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
14491
- function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
14492
- return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
14493
- }
14494
- function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
14495
- if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
14496
- if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
14497
- const \u7701\u7565 = "\u2026";
14498
- const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
14499
- if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
14500
- let \u51FA = "";
14501
- let \u5E45 = 0;
14502
- for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
14503
- const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
14504
- if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
14505
- \u5E45 += \u5B57\u306E\u5E452;
14506
- \u51FA += c;
14507
- }
14508
- return `${\u51FA}${\u7701\u7565}`;
14509
- }
14510
- var \u7E2E\u3081\u306E\u4E0B\u9650 = MIN_TEXT_SIZE;
14511
- function \u5E45\u306B\u53CE\u3081\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
14512
- let size = fontSize;
14513
- while (size > \u7E2E\u3081\u306E\u4E0B\u9650 && \u6E2C\u308B(text, size) > \u4F7F\u3048\u308B\u5E452) size -= 1;
14514
- return { text: \u5E45\u3067\u5207\u308B(text, size, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B), fontSize: size };
14515
- }
14516
- function \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text) {
14517
- const \u533A\u5207\u308A = Intl.Segmenter;
14518
- if (typeof \u533A\u5207\u308A !== "function") return [...text];
14519
- return [...new \u533A\u5207\u308A(void 0, { granularity: "grapheme" }).segment(text)].map((g) => g.segment);
14520
- }
14521
- function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8\u30553) {
14522
- const \u5019\u88DC = \u884C.filter((r, i) => i === 0 || r.text.trim() !== "");
14523
- if (\u5019\u88DC.length === 0) return [];
14524
- const \u4F7F\u3048\u308B\u9AD8\u3055 = \u7BB1\u306E\u9AD8\u30553 - \u4E0A\u4E0B\u306E\u4F59\u767D * 2;
14525
- const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
14526
- const \u6B8B\u3059 = [...\u5019\u88DC];
14527
- while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
14528
- const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
14529
- const \u53CE\u3081\u305F = \u6B8B\u3059.map((r) => ({ ...r, ...\u5E45\u306B\u53CE\u3081\u308B(r.text, r.fontSize, \u5E45) }));
14530
- const \u7DCF\u9AD8 = \u9AD8\u3055(\u53CE\u3081\u305F);
14531
- let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
14532
- return \u53CE\u3081\u305F.map((r) => {
14533
- const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
14534
- \u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
14535
- return { ...r, dy };
14536
- });
14537
- }
14538
-
14539
14597
  // src/render/tone.ts
14540
14598
  var TONE = {
14541
14599
  accent: "var(--cdl-tone-accent, #2d6a8f)",
@@ -14934,11 +14992,14 @@ function mergeStateValues(base, overrides) {
14934
14992
  }
14935
14993
  return merged;
14936
14994
  }
14937
- function interpolate(template, values) {
14995
+ function interpolate(template, values, \u540D\u524D\u306E\u8868) {
14938
14996
  return template.replace(TEMPLATE_REF_RE, (_, id, accessor) => {
14939
14997
  const raw = Object.hasOwn(values, id) ? values[id] : void 0;
14940
14998
  if (raw === void 0) return `{${id}${accessor ?? ""}}`;
14941
- if (!accessor) return raw;
14999
+ if (!accessor) {
15000
+ const \u5165\u529B\u6B04 = \u540D\u524D\u306E\u8868?.get(id);
15001
+ return \u5165\u529B\u6B04 ? \u5024\u3092\u540D\u524D\u3067\u8AAD\u3080(\u5165\u529B\u6B04, raw) : raw;
15002
+ }
14942
15003
  const arr = parseArraySignal(raw);
14943
15004
  if (!arr) return `{${id}${accessor}}`;
14944
15005
  if (accessor === ".length") return String(arr.length);
@@ -23830,7 +23891,7 @@ function CardNode({ node, active }) {
23830
23891
  const textAnchor = compact ? "middle" : "start";
23831
23892
  const subtitleY = 124 - \u305A\u3089\u3057;
23832
23893
  const \u6700\u5927\u306E\u884C\u9001\u308A = SUBTITLE_SIZE * \u884C\u9001\u308A\u306E\u500D\u7387;
23833
- const \u4E8C\u884C\u304C\u5165\u308B = !compact && subtitleY - \u6700\u5927\u306E\u884C\u9001\u308A / 2 - SUBTITLE_SIZE * ASCENT2 > titleY + titleSize * DESCENT2 && subtitleY + \u6700\u5927\u306E\u884C\u9001\u308A / 2 + SUBTITLE_SIZE * DESCENT2 <= node.h - 4;
23894
+ const \u4E8C\u884C\u304C\u5165\u308B = !compact && subtitleY - \u6700\u5927\u306E\u884C\u9001\u308A / 2 - SUBTITLE_SIZE * ASCENT > titleY + titleSize * DESCENT && subtitleY + \u6700\u5927\u306E\u884C\u9001\u308A / 2 + SUBTITLE_SIZE * DESCENT <= node.h - 4;
23834
23895
  const \u8AAC\u660E = node.subtitle ? \u8AAC\u660E\u6587\u3092\u5272\u308A\u4ED8\u3051\u308B(node.subtitle, availableW, { \u4E8C\u884C\u307E\u3067: \u4E8C\u884C\u304C\u5165\u308B }) : void 0;
23835
23896
  const subtitleSize = \u8AAC\u660E?.size ?? 21;
23836
23897
  const \u884C\u9001\u308A = subtitleSize * \u884C\u9001\u308A\u306E\u500D\u7387;
@@ -24582,7 +24643,8 @@ function GenericNode({
24582
24643
  node,
24583
24644
  active,
24584
24645
  value,
24585
- stateValues
24646
+ stateValues,
24647
+ \u5024\u306E\u540D\u524D
24586
24648
  }) {
24587
24649
  const base = STYLES[node.kind] ?? FALLBACK;
24588
24650
  const toned = toneColor3(node.tone);
@@ -24668,7 +24730,7 @@ function GenericNode({
24668
24730
  style.look === "ledger" && /* @__PURE__ */ jsx("line", { x1: 1, y1: h - 7, x2: w - 1, y2: h - 7, stroke: paint.stroke, strokeWidth: 1 })
24669
24731
  ] });
24670
24732
  })();
24671
- const resolvedValue = value !== void 0 ? interpolate(value, stateValues) : void 0;
24733
+ const resolvedValue = value !== void 0 ? interpolate(value, stateValues, \u5024\u306E\u540D\u524D) : void 0;
24672
24734
  const hasRows = (node.rows?.length ?? 0) > 0;
24673
24735
  const centered = genericTextCentered(node.kind, hasRows);
24674
24736
  const textAnchor = centered ? "middle" : "start";
@@ -24718,7 +24780,7 @@ function GenericNode({
24718
24780
  }
24719
24781
  ),
24720
24782
  node.rows && node.rows.length > 0 && (() => {
24721
- const resolved = node.rows.map((row) => interpolate(row, stateValues));
24783
+ const resolved = node.rows.map((row) => interpolate(row, stateValues, \u5024\u306E\u540D\u524D));
24722
24784
  const splits = resolved.map(splitRow);
24723
24785
  const leftMaxWidth = splits.reduce(
24724
24786
  (m, s) => Math.max(m, rowColumnWidth(s.left, GENERIC_ROW_LEFT_SIZE_PX, false)),
@@ -27641,8 +27703,8 @@ var EYEBROW_TRACKING = 2;
27641
27703
  var SUB_SIZE = 11;
27642
27704
  var SUB_GAP = 4;
27643
27705
  function labelBlock(node, pos, size, band) {
27644
- const \u4E0A = node.eyebrow ? size + EYEBROW_GAP2 + EYEBROW_SIZE2 * ASCENT : size * ASCENT;
27645
- const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE * DESCENT : size * DESCENT;
27706
+ const \u4E0A = node.eyebrow ? size + EYEBROW_GAP2 + EYEBROW_SIZE2 * ASCENT2 : size * ASCENT2;
27707
+ const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE * DESCENT2 : size * DESCENT2;
27646
27708
  const \u5E45 = Math.max(
27647
27709
  textWidth(node.title ?? "", size),
27648
27710
  node.eyebrow ? textWidth(node.eyebrow, EYEBROW_SIZE2, EYEBROW_TRACKING) : 0,
@@ -31383,10 +31445,11 @@ function CdlNodeView({
31383
31445
  currentPhaseId,
31384
31446
  chartLineScale,
31385
31447
  \u95A2\u4FC2\u306E\u53D7\u3051\u53E3,
31386
- lang
31448
+ lang,
31449
+ \u5024\u306E\u540D\u524D
31387
31450
  }) {
31388
- const value = node.value ? interpolate(node.value, stateValues) : void 0;
31389
- const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues));
31451
+ const value = node.value ? interpolate(node.value, stateValues, \u5024\u306E\u540D\u524D) : void 0;
31452
+ const rows = (node.rows ?? []).map((r) => interpolate(r, stateValues, \u5024\u306E\u540D\u524D));
31390
31453
  const boundW = node.wBind ? resolveNumericAttr(node.wBind, stateValues, node.w) : node.w;
31391
31454
  const boundH = node.hBind ? resolveNumericAttr(node.hBind, stateValues, node.h) : node.h;
31392
31455
  const boundOpacity = node.opacity !== void 0 ? Math.min(1, Math.max(0, resolveNumericAttr(node.opacity, stateValues, 1))) : void 0;
@@ -31400,9 +31463,9 @@ function CdlNodeView({
31400
31463
  }
31401
31464
  const resolvedNode = {
31402
31465
  ...node,
31403
- title: interpolate(node.title, stateValues),
31404
- subtitle: node.subtitle ? interpolate(node.subtitle, stateValues) : node.subtitle,
31405
- eyebrow: node.eyebrow ? interpolate(node.eyebrow, stateValues) : node.eyebrow,
31466
+ title: interpolate(node.title, stateValues, \u5024\u306E\u540D\u524D),
31467
+ subtitle: node.subtitle ? interpolate(node.subtitle, stateValues, \u5024\u306E\u540D\u524D) : node.subtitle,
31468
+ eyebrow: node.eyebrow ? interpolate(node.eyebrow, stateValues, \u5024\u306E\u540D\u524D) : node.eyebrow,
31406
31469
  w: boundW,
31407
31470
  h: boundH
31408
31471
  };
@@ -31683,7 +31746,7 @@ function CdlNodeView({
31683
31746
  case "mark-end":
31684
31747
  return /* @__PURE__ */ jsx(MarkEndNode, { node: resolvedNode, active });
31685
31748
  default:
31686
- return /* @__PURE__ */ jsx(GenericNode, { node: resolvedNode, active, value: node.value, stateValues });
31749
+ return /* @__PURE__ */ jsx(GenericNode, { node: resolvedNode, active, value: node.value, stateValues, \u5024\u306E\u540D\u524D });
31687
31750
  }
31688
31751
  })();
31689
31752
  const offsetX = node.renderOffsetX !== void 0 ? resolveNumericAttr(node.renderOffsetX, stateValues, 0) : 0;
@@ -31765,7 +31828,8 @@ function CdlStage({
31765
31828
  stateValues,
31766
31829
  debug,
31767
31830
  compact = false,
31768
- svgRef
31831
+ svgRef,
31832
+ \u5024\u306E\u540D\u524D
31769
31833
  }) {
31770
31834
  const [\u7126\u70B9, set\u7126\u70B9] = useState(null);
31771
31835
  const \u95A2\u4FC2\u3092\u5149\u3089\u305B\u308B = (laid.relationFocus ?? RELATION_FOCUS_DEFAULT) === "hover";
@@ -32045,6 +32109,7 @@ function CdlStage({
32045
32109
  drawing: \u63CF\u304F,
32046
32110
  progress: \u63CF\u304F ? \u63CF\u304F\u9032\u307F : progress,
32047
32111
  stateValues,
32112
+ \u5024\u306E\u540D\u524D,
32048
32113
  currentPhaseId: currentPhase?.id,
32049
32114
  chartLineScale: chartLineScales.get(node.id)
32050
32115
  }
@@ -32286,6 +32351,7 @@ function CdlDiagramView({ diagram: diagram2, laid: laidProp, hideHeader = false,
32286
32351
  if (!isInteractive) return baseStateValues;
32287
32352
  return mergeStateValues(baseStateValues, interactive.stateOverrides);
32288
32353
  }, [isInteractive, baseStateValues, interactive.stateOverrides]);
32354
+ const \u5024\u306E\u540D\u524D = useMemo(() => \u5024\u306E\u540D\u524D\u306E\u8868\u3092\u4F5C\u308B(diagram2.inputs), [diagram2.inputs]);
32289
32355
  return /* @__PURE__ */ jsxs(
32290
32356
  "div",
32291
32357
  {
@@ -32314,7 +32380,7 @@ function CdlDiagramView({ diagram: diagram2, laid: laidProp, hideHeader = false,
32314
32380
  }
32315
32381
  ),
32316
32382
  isInteractive && interactive.panel,
32317
- /* @__PURE__ */ jsx(CdlStage, { laid, currentPhase, progress, drawProgress, stateValues, debug, compact: hideHeader, svgRef: isInteractive ? interactive.svgRef : void 0 }),
32383
+ /* @__PURE__ */ jsx(CdlStage, { laid, currentPhase, progress, drawProgress, stateValues, \u5024\u306E\u540D\u524D, debug, compact: hideHeader, svgRef: isInteractive ? interactive.svgRef : void 0 }),
32318
32384
  hideHeader && !hideMiniPhaseIndicator && currentPhase && laid.phases.length > 1 && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-t border-[var(--cdl-divider,#d4d4d8)]/40 bg-[var(--cdl-stage-bg,#f1f5f9)]/50 px-3 py-2 text-xs", children: [
32319
32385
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
32320
32386
  laid.phases.map((p, i) => /* @__PURE__ */ jsx(