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