@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/CHANGELOG.md +39 -1
- package/dist/index.cjs +221 -155
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -8
- package/dist/index.d.ts +22 -8
- package/dist/index.js +221 -155
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +97 -34
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +97 -34
- package/dist/react.js.map +1 -1
- package/dist/{render-MbIjRWdX.d.cts → render-Dk8_6ua6.d.cts} +21 -6
- package/dist/{render-MbIjRWdX.d.ts → render-Dk8_6ua6.d.ts} +21 -6
- package/package.json +1 -1
- package/src/builder.ts +17 -11
- package/src/index.ts +1 -1
- package/src/input-option.ts +62 -0
- package/src/kinds/generic.tsx +6 -2
- package/src/lang.ts +18 -0
- package/src/render/interactive-panel.tsx +43 -20
- package/src/render/nodes.tsx +13 -6
- package/src/render/stage.tsx +5 -0
- package/src/render/utils.ts +14 -2
- package/src/render.tsx +6 -1
- package/src/types.ts +18 -5
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
|
-
|
|
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.
|
|
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:
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
14261
|
-
var
|
|
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 *
|
|
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 *
|
|
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 *
|
|
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 / (
|
|
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) *
|
|
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)
|
|
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 *
|
|
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 *
|
|
27647
|
-
const \u4E0B = node.subtitle ? size + SUB_GAP + SUB_SIZE *
|
|
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(
|