@cardenelabs/cdl 0.12.0 → 0.13.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 +36 -1
- package/dist/index.cjs +55 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +55 -33
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +54 -33
- 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 +54 -33
- package/dist/react.js.map +1 -1
- package/dist/{render-C7FKvMqq.d.cts → render-B5JHcUrb.d.cts} +8 -0
- package/dist/{render-C7FKvMqq.d.ts → render-B5JHcUrb.d.ts} +8 -0
- package/package.json +1 -1
- package/src/kinds/box-lines.ts +12 -2
- package/src/kinds/mind-map.tsx +9 -4
- package/src/kinds/tree.tsx +5 -3
- package/src/presets.ts +3 -0
- package/src/render/payload-binding.ts +14 -4
- package/src/render/template-fields.ts +1 -0
- package/src/types.ts +8 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,39 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
7
7
|
|
|
8
8
|
予定 ... feedback を反映した patch / minor。
|
|
9
9
|
|
|
10
|
+
## [0.13.0] - 2026-08-22
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **放射図の中心にも補足を渡せるようにした** (#530)
|
|
15
|
+
|
|
16
|
+
枝 (`MindBranchNode`) は元から `subtitle` を持つのに、中心だけ渡す口が無かった。 呼出側が
|
|
17
|
+
名前と補足を連結して `rootTitle` に入れるため 1 行に全部入り、箱幅 120px に対して 163px の
|
|
18
|
+
文字が切られていた。
|
|
19
|
+
|
|
20
|
+
`MindBranchPayload` に `rootSubtitle` を足し、枝と同じ経路で 2 行に積む。 分けて渡せば
|
|
21
|
+
1 行あたりが短くなり (`図を速くする` 90px / `300 ms 短縮` 60px)、同じ箱幅でも収まる。
|
|
22
|
+
|
|
23
|
+
**箱の大きさは変えない**。 配置の計算が箱幅から出ているため。
|
|
24
|
+
|
|
25
|
+
## [0.12.1] - 2026-08-22
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- **放射と木の箱で、名前が枠を超えて描かれるのを直した** (#526)
|
|
30
|
+
|
|
31
|
+
補足 (`subtitle`) が無い箱は行を積む処理を通らず、名前をそのまま描いていた。 その経路
|
|
32
|
+
だけが幅を見ておらず、長い名前が箱の外へ出て枝の線と重なる (実測 = 中心の箱で文字
|
|
33
|
+
163px に対し箱 120px)。
|
|
34
|
+
|
|
35
|
+
補足の有無に関わらず箱の幅に収める。 収まらない分は末尾に `…` を付けて切る = 切られた
|
|
36
|
+
ことが読み手に見える。
|
|
37
|
+
|
|
38
|
+
**箱の幅は変えない**。 配置の計算が箱幅から出ているため、広げると枝どうしの重なりと
|
|
39
|
+
canvas 超えの確認が要る。
|
|
40
|
+
|
|
41
|
+
同じ形は木 (`tree`) にも 2 箇所あり、併せて直した。
|
|
42
|
+
|
|
10
43
|
## [0.12.0] - 2026-08-21
|
|
11
44
|
|
|
12
45
|
### Added
|
|
@@ -498,7 +531,9 @@ Initial OSS release.
|
|
|
498
531
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
499
532
|
行き止まりになる。
|
|
500
533
|
|
|
501
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
534
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.13.0...HEAD
|
|
535
|
+
[0.13.0]: https://github.com/cardene777/cdl/compare/v0.12.1...v0.13.0
|
|
536
|
+
[0.12.1]: https://github.com/cardene777/cdl/compare/v0.12.0...v0.12.1
|
|
502
537
|
[0.12.0]: https://github.com/cardene777/cdl/compare/v0.11.0...v0.12.0
|
|
503
538
|
[0.11.0]: https://github.com/cardene777/cdl/compare/v0.10.0...v0.11.0
|
|
504
539
|
[0.10.0]: https://github.com/cardene777/cdl/compare/v0.9.0...v0.10.0
|
package/dist/index.cjs
CHANGED
|
@@ -15837,6 +15837,7 @@ function payloadTexts(node) {
|
|
|
15837
15837
|
}
|
|
15838
15838
|
if (node.mindData) {
|
|
15839
15839
|
\u8DB3\u3059(node.mindData.rootTitle);
|
|
15840
|
+
\u8DB3\u3059(node.mindData.rootSubtitle);
|
|
15840
15841
|
for (const b of node.mindData.branches) {
|
|
15841
15842
|
\u8DB3\u3059(b.title);
|
|
15842
15843
|
\u8DB3\u3059(b.subtitle);
|
|
@@ -21275,9 +21276,10 @@ function resolveTreeData(nodes, values) {
|
|
|
21275
21276
|
});
|
|
21276
21277
|
}
|
|
21277
21278
|
function resolveMindData(data, values) {
|
|
21278
|
-
const \u8AAD\u3080 = data.rootTitle.includes("{") || data.branches.some((b) => b.title.includes("{") || (b.subtitle?.includes("{") ?? false));
|
|
21279
|
+
const \u8AAD\u3080 = data.rootTitle.includes("{") || (data.rootSubtitle?.includes("{") ?? false) || data.branches.some((b) => b.title.includes("{") || (b.subtitle?.includes("{") ?? false));
|
|
21279
21280
|
if (!\u8AAD\u3080) return data;
|
|
21280
21281
|
const root = resolveBoundText(data.rootTitle, values);
|
|
21282
|
+
const rootSubtitle = data.rootSubtitle === void 0 ? void 0 : resolveBoundText(data.rootSubtitle, values);
|
|
21281
21283
|
const branches = data.branches.map((b) => {
|
|
21282
21284
|
const title = resolveBoundText(b.title, values);
|
|
21283
21285
|
const subtitle = b.subtitle === void 0 ? void 0 : resolveBoundText(b.subtitle, values);
|
|
@@ -21288,8 +21290,13 @@ function resolveMindData(data, values) {
|
|
|
21288
21290
|
};
|
|
21289
21291
|
return title.ok && (subtitle?.ok ?? true) ? \u89E3\u6C7A\u5F8C2 : { ...\u89E3\u6C7A\u5F8C2, unresolved: true };
|
|
21290
21292
|
});
|
|
21291
|
-
const \u89E3\u6C7A\u5F8C = {
|
|
21292
|
-
|
|
21293
|
+
const \u89E3\u6C7A\u5F8C = {
|
|
21294
|
+
...data,
|
|
21295
|
+
rootTitle: root.value,
|
|
21296
|
+
...rootSubtitle ? { rootSubtitle: rootSubtitle.value } : {},
|
|
21297
|
+
branches
|
|
21298
|
+
};
|
|
21299
|
+
return root.ok && (rootSubtitle?.ok ?? true) ? \u89E3\u6C7A\u5F8C : { ...\u89E3\u6C7A\u5F8C, unresolved: true };
|
|
21293
21300
|
}
|
|
21294
21301
|
|
|
21295
21302
|
// src/kinds/draw-progress.ts
|
|
@@ -22000,17 +22007,20 @@ var \u884C\u9001\u308A\u306E\u6BD4 = 1.15;
|
|
|
22000
22007
|
var \u5B57\u306E\u9AD8\u3055\u306E\u6BD4 = 0.72;
|
|
22001
22008
|
var \u4E0A\u4E0B\u306E\u4F59\u767D = 2;
|
|
22002
22009
|
var \u5DE6\u53F3\u306E\u4F59\u767D = 8;
|
|
22003
|
-
function \
|
|
22004
|
-
|
|
22005
|
-
|
|
22010
|
+
function \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45) {
|
|
22011
|
+
return \u7BB1\u306E\u5E45 - \u5DE6\u53F3\u306E\u4F59\u767D * 2;
|
|
22012
|
+
}
|
|
22013
|
+
function \u5E45\u3067\u5207\u308B(text, fontSize, \u4F7F\u3048\u308B\u5E452, \u6E2C\u308B = textWidth) {
|
|
22014
|
+
if (\u4F7F\u3048\u308B\u5E452 <= 0) return "";
|
|
22015
|
+
if (\u6E2C\u308B(text, fontSize) <= \u4F7F\u3048\u308B\u5E452) return text;
|
|
22006
22016
|
const \u7701\u7565 = "\u2026";
|
|
22007
22017
|
const \u7701\u7565\u306E\u5E45 = \u6E2C\u308B(\u7701\u7565, fontSize);
|
|
22008
|
-
if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\
|
|
22018
|
+
if (\u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) return "";
|
|
22009
22019
|
let \u51FA = "";
|
|
22010
22020
|
let \u5E45 = 0;
|
|
22011
22021
|
for (const c of \u66F8\u8A18\u7D20\u306B\u5206\u3051\u308B(text)) {
|
|
22012
22022
|
const \u5B57\u306E\u5E452 = \u6E2C\u308B(c, fontSize);
|
|
22013
|
-
if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\
|
|
22023
|
+
if (\u5E45 + \u5B57\u306E\u5E452 + \u7701\u7565\u306E\u5E45 > \u4F7F\u3048\u308B\u5E452) break;
|
|
22014
22024
|
\u5E45 += \u5B57\u306E\u5E452;
|
|
22015
22025
|
\u51FA += c;
|
|
22016
22026
|
}
|
|
@@ -22028,13 +22038,13 @@ function \u7BB1\u306B\u7A4D\u3080(\u884C, \u7BB1\u306E\u5E45, \u7BB1\u306E\u9AD8
|
|
|
22028
22038
|
const \u9AD8\u3055 = (rs) => rs.reduce((a, r) => a + r.fontSize * \u884C\u9001\u308A\u306E\u6BD4, 0);
|
|
22029
22039
|
const \u6B8B\u3059 = [...\u5019\u88DC];
|
|
22030
22040
|
while (\u6B8B\u3059.length > 1 && \u9AD8\u3055(\u6B8B\u3059) > \u4F7F\u3048\u308B\u9AD8\u3055) \u6B8B\u3059.pop();
|
|
22031
|
-
const \u4F7F\u3048\u308B\u5E45
|
|
22041
|
+
const \u5E45 = \u4F7F\u3048\u308B\u5E45(\u7BB1\u306E\u5E45);
|
|
22032
22042
|
const \u7DCF\u9AD8 = \u9AD8\u3055(\u6B8B\u3059);
|
|
22033
22043
|
let \u7A4D\u307F = -\u7DCF\u9AD8 / 2;
|
|
22034
22044
|
return \u6B8B\u3059.map((r) => {
|
|
22035
22045
|
const dy = \u7A4D\u307F + (\u884C\u9001\u308A\u306E\u6BD4 + \u5B57\u306E\u9AD8\u3055\u306E\u6BD4) / 2 * r.fontSize;
|
|
22036
22046
|
\u7A4D\u307F += r.fontSize * \u884C\u9001\u308A\u306E\u6BD4;
|
|
22037
|
-
return { ...r, text: \u5E45\u3067\u5207\u308B(r.text, r.fontSize, \
|
|
22047
|
+
return { ...r, text: \u5E45\u3067\u5207\u308B(r.text, r.fontSize, \u5E45), dy };
|
|
22038
22048
|
});
|
|
22039
22049
|
}
|
|
22040
22050
|
var MIND_TONES = ["accent", "teal", "success", "warning", "info", "error"];
|
|
@@ -22131,17 +22141,22 @@ function MindMapNode({
|
|
|
22131
22141
|
children: r.text
|
|
22132
22142
|
},
|
|
22133
22143
|
r.\u5F79\u5272
|
|
22134
|
-
)) :
|
|
22135
|
-
|
|
22136
|
-
|
|
22137
|
-
|
|
22138
|
-
|
|
22139
|
-
|
|
22140
|
-
|
|
22141
|
-
|
|
22142
|
-
|
|
22143
|
-
|
|
22144
|
-
|
|
22144
|
+
)) : (
|
|
22145
|
+
// 補足が無くても **幅に収める** (#526)。 `箱に積む` を通らないこの経路だけが
|
|
22146
|
+
// 幅を見ておらず、長い名前がそのまま箱の外へ出て枝の線と重なっていた
|
|
22147
|
+
// (実測 = 中心の箱で文字 163px に対し箱 120px)
|
|
22148
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22149
|
+
"text",
|
|
22150
|
+
{
|
|
22151
|
+
x: n.x,
|
|
22152
|
+
y: n.y + 5,
|
|
22153
|
+
fontSize: n.isRoot ? 15 : 13,
|
|
22154
|
+
fontWeight: n.isRoot ? 700 : 600,
|
|
22155
|
+
textAnchor: "middle",
|
|
22156
|
+
fill: \u6587\u5B57\u306E\u8272,
|
|
22157
|
+
children: \u5E45\u3067\u5207\u308B(n.title, n.isRoot ? 15 : 13, \u4F7F\u3048\u308B\u5E45(n.w))
|
|
22158
|
+
}
|
|
22159
|
+
)
|
|
22145
22160
|
)
|
|
22146
22161
|
] }, `n-${n.id}`);
|
|
22147
22162
|
})
|
|
@@ -22155,6 +22170,8 @@ function computeMindMapLayout(mindData, cx, cy, canvasW, canvasH) {
|
|
|
22155
22170
|
nodes.push({
|
|
22156
22171
|
id: mindData.rootId,
|
|
22157
22172
|
title: mindData.rootTitle,
|
|
22173
|
+
// 中心も枝と同じく 2 行に積める (#530)。 高さ 52 に 15px + 9px の 2 行が入る
|
|
22174
|
+
...mindData.rootSubtitle === void 0 ? {} : { subtitle: mindData.rootSubtitle },
|
|
22158
22175
|
x: cx,
|
|
22159
22176
|
y: cy,
|
|
22160
22177
|
w: rootW,
|
|
@@ -22757,17 +22774,21 @@ function TreeNode({
|
|
|
22757
22774
|
\u7BB1\u306E\u9AD8\u3055: n.h,
|
|
22758
22775
|
fill: "var(--cdl-text-on-tone, #ffffff)",
|
|
22759
22776
|
\u540D\u524D\u306E\u592A\u3055: 700
|
|
22760
|
-
}) :
|
|
22761
|
-
|
|
22762
|
-
|
|
22763
|
-
|
|
22764
|
-
|
|
22765
|
-
|
|
22766
|
-
|
|
22767
|
-
|
|
22768
|
-
|
|
22769
|
-
|
|
22770
|
-
|
|
22777
|
+
}) : (
|
|
22778
|
+
// 補足が無くても幅に収める (#526)。 `箱の文字` を通らないこの経路だけが
|
|
22779
|
+
// 幅を見ておらず、長い名前が箱の外へ出ていた
|
|
22780
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
22781
|
+
"text",
|
|
22782
|
+
{
|
|
22783
|
+
x: n.w / 2,
|
|
22784
|
+
y: n.h / 2 + 5,
|
|
22785
|
+
fontSize: 13,
|
|
22786
|
+
fontWeight: 700,
|
|
22787
|
+
textAnchor: "middle",
|
|
22788
|
+
fill: "var(--cdl-text-on-tone, #ffffff)",
|
|
22789
|
+
children: \u5E45\u3067\u5207\u308B(n.title, 13, \u4F7F\u3048\u308B\u5E45(n.w))
|
|
22790
|
+
}
|
|
22791
|
+
)
|
|
22771
22792
|
)
|
|
22772
22793
|
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
22773
22794
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -22800,7 +22821,7 @@ function TreeNode({
|
|
|
22800
22821
|
fontWeight: 600,
|
|
22801
22822
|
textAnchor: "middle",
|
|
22802
22823
|
fill: "var(--cdl-chip-text, #1a1f2a)",
|
|
22803
|
-
children: n.title
|
|
22824
|
+
children: \u5E45\u3067\u5207\u308B(n.title, 12, \u4F7F\u3048\u308B\u5E45(n.w))
|
|
22804
22825
|
}
|
|
22805
22826
|
)
|
|
22806
22827
|
] })
|
|
@@ -28391,6 +28412,7 @@ function mindMap(preset) {
|
|
|
28391
28412
|
mindData: {
|
|
28392
28413
|
rootId: preset.rootId,
|
|
28393
28414
|
rootTitle: preset.rootTitle,
|
|
28415
|
+
...preset.rootSubtitle === void 0 ? {} : { rootSubtitle: preset.rootSubtitle },
|
|
28394
28416
|
branches: branches.map((br) => ({
|
|
28395
28417
|
id: br.id,
|
|
28396
28418
|
title: br.title,
|