@cardenelabs/cdl 0.56.0 → 0.57.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 +18 -1
- package/dist/index.cjs +66 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +66 -2
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +66 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +66 -2
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/card.tsx +27 -7
- package/src/kinds/compact-title.ts +2 -2
- package/src/kinds/subtitle-lines.ts +99 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.57.0] - 2026-09-11
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **箱の説明文が幅に入らない時、字を縮めずに 2 行へ折るようにした** (#843)
|
|
13
|
+
|
|
14
|
+
説明文 (`subtitle`) は幅に入らないと字を 21 から 11 まで小さくして 1 行に収めていた。 下限まで縮むと、
|
|
15
|
+
同じ図の中で同じ役割の字が 2 倍近く違って見える (実測 = 状態図で 待機 の説明文が 19、読み込み が 11)。
|
|
16
|
+
|
|
17
|
+
読みやすさの下限 (12) を割る時は 2 行に折る。 折る位置は ` / ` のような区切りを優先し、無ければ空白、
|
|
18
|
+
それも無ければ字の境目で割る。 2 行にしても入らない時と、2 行を置く余白が無い低い箱は、今までどおり
|
|
19
|
+
縮めて 1 行で描く。
|
|
20
|
+
|
|
21
|
+
箱の幅と高さは変えていない。 幅を広げると状態を横に並べる図が横長になり、器に収めた時に題名の方が
|
|
22
|
+
小さくなるため (#357 で幅を絞った経緯)。 2 行は、説明文の下の余白と題名との間に収める。
|
|
23
|
+
|
|
8
24
|
## [0.56.0] - 2026-09-11
|
|
9
25
|
|
|
10
26
|
### Changed
|
|
@@ -2509,7 +2525,8 @@ Initial OSS release.
|
|
|
2509
2525
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
2510
2526
|
行き止まりになる。
|
|
2511
2527
|
|
|
2512
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
2528
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.57.0...HEAD
|
|
2529
|
+
[0.57.0]: https://github.com/cardene777/cdl/compare/v0.56.0...v0.57.0
|
|
2513
2530
|
[0.56.0]: https://github.com/cardene777/cdl/compare/v0.55.0...v0.56.0
|
|
2514
2531
|
[0.55.0]: https://github.com/cardene777/cdl/compare/v0.54.0...v0.55.0
|
|
2515
2532
|
[0.54.0]: https://github.com/cardene777/cdl/compare/v0.53.0...v0.54.0
|
package/dist/index.cjs
CHANGED
|
@@ -23387,6 +23387,55 @@ function ActorNode({ node, active, value }) {
|
|
|
23387
23387
|
)
|
|
23388
23388
|
] });
|
|
23389
23389
|
}
|
|
23390
|
+
|
|
23391
|
+
// src/kinds/subtitle-lines.ts
|
|
23392
|
+
var SUBTITLE_SIZE = 21;
|
|
23393
|
+
var SUBTITLE_MIN_SIZE = 12;
|
|
23394
|
+
var \u884C\u9001\u308A\u306E\u500D\u7387 = 1.2;
|
|
23395
|
+
function \u8AAC\u660E\u6587\u3092\u5272\u308A\u4ED8\u3051\u308B(text, maxWidth, opts) {
|
|
23396
|
+
const \u76EE\u6A19 = opts.targetSize ?? SUBTITLE_SIZE;
|
|
23397
|
+
const \u8AAD\u3081\u308B\u5927\u304D\u3055 = fitTextSize(text, maxWidth, \u76EE\u6A19, SUBTITLE_MIN_SIZE);
|
|
23398
|
+
if (estimateTextWidth(text, \u8AAD\u3081\u308B\u5927\u304D\u3055) <= maxWidth) return { size: \u8AAD\u3081\u308B\u5927\u304D\u3055, lines: [text] };
|
|
23399
|
+
if (opts.\u4E8C\u884C\u307E\u3067) {
|
|
23400
|
+
for (let size = \u76EE\u6A19; size >= SUBTITLE_MIN_SIZE; size -= 1) {
|
|
23401
|
+
const \u884C = \u4E8C\u884C\u306B\u5272\u308B(text, maxWidth, size);
|
|
23402
|
+
if (\u884C) return { size, lines: \u884C };
|
|
23403
|
+
}
|
|
23404
|
+
}
|
|
23405
|
+
return { size: fitTextSize(text, maxWidth, \u76EE\u6A19, MIN_TEXT_SIZE), lines: [text] };
|
|
23406
|
+
}
|
|
23407
|
+
function \u4E8C\u884C\u306B\u5272\u308B(text, maxWidth, size) {
|
|
23408
|
+
let \u4E00\u756A\u826F\u3044;
|
|
23409
|
+
let \u4E00\u756A\u72ED\u3044 = Infinity;
|
|
23410
|
+
for (const [\u5DE6, \u53F3] of \u5272\u308B\u5019\u88DC(text)) {
|
|
23411
|
+
const \u5E45 = Math.max(estimateTextWidth(\u5DE6, size), estimateTextWidth(\u53F3, size));
|
|
23412
|
+
if (\u5E45 > maxWidth || \u5E45 >= \u4E00\u756A\u72ED\u3044) continue;
|
|
23413
|
+
\u4E00\u756A\u72ED\u3044 = \u5E45;
|
|
23414
|
+
\u4E00\u756A\u826F\u3044 = [\u5DE6, \u53F3];
|
|
23415
|
+
}
|
|
23416
|
+
return \u4E00\u756A\u826F\u3044;
|
|
23417
|
+
}
|
|
23418
|
+
function \u5272\u308B\u5019\u88DC(text) {
|
|
23419
|
+
const \u533A\u5207\u308A = [];
|
|
23420
|
+
for (const m of text.matchAll(/\s*\/\s*/g)) {
|
|
23421
|
+
\u533A\u5207\u308A.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
|
|
23422
|
+
}
|
|
23423
|
+
if (\u533A\u5207\u308A.length > 0) return \u533A\u5207\u308A.filter(\u5165\u3063\u3066\u3044\u308B);
|
|
23424
|
+
const \u7A7A\u767D = [];
|
|
23425
|
+
for (const m of text.matchAll(/\s+/g)) {
|
|
23426
|
+
\u7A7A\u767D.push([text.slice(0, m.index).trim(), text.slice(m.index + m[0].length).trim()]);
|
|
23427
|
+
}
|
|
23428
|
+
if (\u7A7A\u767D.length > 0) return \u7A7A\u767D.filter(\u5165\u3063\u3066\u3044\u308B);
|
|
23429
|
+
const \u5B57 = [];
|
|
23430
|
+
const \u4E26\u3073 = [...text];
|
|
23431
|
+
for (let i = 1; i < \u4E26\u3073.length; i += 1) {
|
|
23432
|
+
\u5B57.push([\u4E26\u3073.slice(0, i).join(""), \u4E26\u3073.slice(i).join("")]);
|
|
23433
|
+
}
|
|
23434
|
+
return \u5B57.filter(\u5165\u3063\u3066\u3044\u308B);
|
|
23435
|
+
}
|
|
23436
|
+
function \u5165\u3063\u3066\u3044\u308B([\u5DE6, \u53F3]) {
|
|
23437
|
+
return \u5DE6 !== "" && \u53F3 !== "";
|
|
23438
|
+
}
|
|
23390
23439
|
function CardNode({ node, active }) {
|
|
23391
23440
|
const accent = nodeAccent(node, "var(--cdl-tone-accent, #2d6a8f)");
|
|
23392
23441
|
const x = node.cx - node.w / 2;
|
|
@@ -23411,7 +23460,12 @@ function CardNode({ node, active }) {
|
|
|
23411
23460
|
const initialTitleSize = compact ? 20 : 24;
|
|
23412
23461
|
const titleSize = fitTextSize(node.title, availableW, initialTitleSize, 11);
|
|
23413
23462
|
const textAnchor = compact ? "middle" : "start";
|
|
23414
|
-
const
|
|
23463
|
+
const subtitleY = 124 - \u305A\u3089\u3057;
|
|
23464
|
+
const \u6700\u5927\u306E\u884C\u9001\u308A = SUBTITLE_SIZE * \u884C\u9001\u308A\u306E\u500D\u7387;
|
|
23465
|
+
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;
|
|
23466
|
+
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;
|
|
23467
|
+
const subtitleSize = \u8AAC\u660E?.size ?? 21;
|
|
23468
|
+
const \u884C\u9001\u308A = subtitleSize * \u884C\u9001\u308A\u306E\u500D\u7387;
|
|
23415
23469
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x} ${y})`, children: [
|
|
23416
23470
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
23417
23471
|
"rect",
|
|
@@ -23441,7 +23495,17 @@ function CardNode({ node, active }) {
|
|
|
23441
23495
|
children: node.title
|
|
23442
23496
|
}
|
|
23443
23497
|
),
|
|
23444
|
-
!compact &&
|
|
23498
|
+
!compact && \u8AAC\u660E?.lines.map((\u884C, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
23499
|
+
"text",
|
|
23500
|
+
{
|
|
23501
|
+
x: 26,
|
|
23502
|
+
y: subtitleY + (i - (\u8AAC\u660E.lines.length - 1) / 2) * \u884C\u9001\u308A,
|
|
23503
|
+
fontSize: subtitleSize,
|
|
23504
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
23505
|
+
children: \u884C
|
|
23506
|
+
},
|
|
23507
|
+
`sub-${i}`
|
|
23508
|
+
)),
|
|
23445
23509
|
\u5C0F\u578B\u306B\u547C\u3073\u540D && /* @__PURE__ */ jsxRuntime.jsx(
|
|
23446
23510
|
"text",
|
|
23447
23511
|
{
|