@cardenelabs/cdl 0.103.0 → 0.105.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 +65 -1
- package/dist/index.cjs +67 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +67 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +67 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +67 -1
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/layout/spec.ts +116 -0
- package/src/visual-validate.ts +23 -5
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,68 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.105.0] - 2026-09-30
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **箱の題の幅を、その種別が描く大きさから見積もるようにした** (#946)
|
|
13
|
+
|
|
14
|
+
軸 3 (`text-readability`) は「字数 × 1 字の幅 + 余白」 が箱の幅を超えるかで、題が切れる
|
|
15
|
+
可能性を見る。 1 字の幅を 22 の定数で持っていたが、`NODE_KINDS` を全件描いて題の字の
|
|
16
|
+
大きさを読むと **22 で描く種別は 1 つも無かった**。
|
|
17
|
+
|
|
18
|
+
| 大きさ | 種別の数 |
|
|
19
|
+
|---|---|
|
|
20
|
+
| 18 | 34 |
|
|
21
|
+
| 20 | 21 |
|
|
22
|
+
| 15 | 21 |
|
|
23
|
+
| 16 | 6 |
|
|
24
|
+
| 13 | 5 |
|
|
25
|
+
| 24 | 3 |
|
|
26
|
+
| 34 / 32 / 17 | 各 1 |
|
|
27
|
+
|
|
28
|
+
見積りが実物の 1.2 倍から 1.7 倍になり、収まっている題まで挙がっていた。
|
|
29
|
+
0.99.0 (#933) でどの種別も箱の題を読むようになってから差が表に出て、引く側 (見本帳) では
|
|
30
|
+
35 枚が新しく挙がっていた。 いずれも実際には収まっている。
|
|
31
|
+
|
|
32
|
+
種別ごとの大きさを `titleFontSize` に持ち、見積りをそこから出すようにした。
|
|
33
|
+
|
|
34
|
+
**内側の余白 (52) は、題を箱の中に描く種別にだけ足す**。
|
|
35
|
+
形だけを描く `dyn-*` 5 種は名前を箱の上に描き、図表 15 種も題を箱の上に描く。
|
|
36
|
+
箱の内側の余白に縛られないので、足すと収まっている題が挙がる。
|
|
37
|
+
どの種別が外に描くかは `drawsTitleOutsideBox` が持つ。
|
|
38
|
+
|
|
39
|
+
**一覧は実物と突き合わせる**。
|
|
40
|
+
`test/title-width-estimate.test.tsx` が `NODE_KINDS` を全件描き、表の値が実測を下回らず
|
|
41
|
+
実測 + 1 未満であることと、題の役割名 (`node-label` / `shape-name` / `figure-title`) が
|
|
42
|
+
述語と揃っていることを見る。 種別が増えた時に黙ってずれない。
|
|
43
|
+
|
|
44
|
+
表が持つのは **箱が十分に大きい時の大きさ** になる。 `shape-*` の多くは箱の高さに比例して
|
|
45
|
+
字を縮めるため、狭い箱では実物のほうが小さい。 見積りが実物を下回らない側に倒れるので、
|
|
46
|
+
切れる題を見逃す向きには外れない。
|
|
47
|
+
|
|
48
|
+
軸 `responsive-viewport` が使う基準の 22 は動かしていない。
|
|
49
|
+
図の中の文字全体を見る目安で、題の幅を見る本軸とは別の判定になる。
|
|
50
|
+
|
|
51
|
+
## [0.104.0] - 2026-09-30
|
|
52
|
+
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **描かない節を板の外に出たと数えるのを直した** (#945)
|
|
56
|
+
|
|
57
|
+
軸 53 (`node-inside-viewbox`) が `isRenderedNode` を引くようにした。
|
|
58
|
+
|
|
59
|
+
板は描く節だけに寄せる (`layout/viewbox.ts` が同じ述語を引く) のに、板の外に出ていないかを
|
|
60
|
+
見る判定は描かない節も相手にしていた。 0.93.0 (#924) で「描くものが 1 つも無い図は台を
|
|
61
|
+
出さない」 を入れてから、`visibleIf: "0"` の 1x1 の置き石だけを持つ図の板が最小の
|
|
62
|
+
120x120 になり、置き石はもとの座標 (例 150,128) に残るため全件が誤りとして挙がっていた
|
|
63
|
+
(引く側の読み取り盤の見本 17 枚で実測)。
|
|
64
|
+
|
|
65
|
+
判定を板と同じ述語に揃えた。 描く節が板の外に出る場合は従来どおり誤りとして出す。
|
|
66
|
+
|
|
67
|
+
同じ位置を見る軸のうち、軸 54 (`node-inside-lane`) には述語を足していない。 帯の位置は
|
|
68
|
+
板とは別に決まり、誤りが出る形を 1 件も観測していないため。
|
|
69
|
+
|
|
8
70
|
## [0.103.0] - 2026-09-30
|
|
9
71
|
|
|
10
72
|
### Added
|
|
@@ -4201,7 +4263,9 @@ Initial OSS release.
|
|
|
4201
4263
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
4202
4264
|
行き止まりになる。
|
|
4203
4265
|
|
|
4204
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
4266
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.105.0...HEAD
|
|
4267
|
+
[0.105.0]: https://github.com/cardene777/cdl/compare/v0.104.0...v0.105.0
|
|
4268
|
+
[0.104.0]: https://github.com/cardene777/cdl/compare/v0.103.0...v0.104.0
|
|
4205
4269
|
[0.103.0]: https://github.com/cardene777/cdl/compare/v0.102.0...v0.103.0
|
|
4206
4270
|
[0.102.0]: https://github.com/cardene777/cdl/compare/v0.101.0...v0.102.0
|
|
4207
4271
|
[0.101.0]: https://github.com/cardene777/cdl/compare/v0.100.0...v0.101.0
|
package/dist/index.cjs
CHANGED
|
@@ -12377,6 +12377,71 @@ var KINDS_FITTING_OWN_TITLE = /* @__PURE__ */ new Set([
|
|
|
12377
12377
|
function fitsOwnTitleWidth(kind) {
|
|
12378
12378
|
return KINDS_FITTING_OWN_TITLE.has(kind ?? "");
|
|
12379
12379
|
}
|
|
12380
|
+
var KINDS_DRAWING_TITLE_OUTSIDE = /* @__PURE__ */ new Set([
|
|
12381
|
+
"dyn-rect",
|
|
12382
|
+
"dyn-circle",
|
|
12383
|
+
"dyn-arc",
|
|
12384
|
+
"dyn-wave",
|
|
12385
|
+
"dyn-polygon",
|
|
12386
|
+
...KINDS_DRAWING_OWN_PAYLOAD
|
|
12387
|
+
]);
|
|
12388
|
+
function drawsTitleOutsideBox(kind) {
|
|
12389
|
+
return KINDS_DRAWING_TITLE_OUTSIDE.has(kind ?? "");
|
|
12390
|
+
}
|
|
12391
|
+
var TITLE_FONT_SIZE_DEFAULT = 18;
|
|
12392
|
+
var TITLE_FONT_SIZE = new Map([
|
|
12393
|
+
...["dyn-rect", "dyn-circle", "dyn-arc", "dyn-wave", "dyn-polygon"].map(
|
|
12394
|
+
(k) => [k, 13]
|
|
12395
|
+
),
|
|
12396
|
+
...[
|
|
12397
|
+
"shape-code-block",
|
|
12398
|
+
"shape-cylinder",
|
|
12399
|
+
"shape-diamond",
|
|
12400
|
+
"shape-iot-sensor",
|
|
12401
|
+
"shape-robot-arm",
|
|
12402
|
+
"shape-stack",
|
|
12403
|
+
"shape-terminal"
|
|
12404
|
+
].map((k) => [k, 15]),
|
|
12405
|
+
...[
|
|
12406
|
+
"shape-cloud",
|
|
12407
|
+
"shape-file",
|
|
12408
|
+
"shape-folder",
|
|
12409
|
+
"shape-hexagon",
|
|
12410
|
+
"shape-message-bubble",
|
|
12411
|
+
"shape-window"
|
|
12412
|
+
].map((k) => [k, 16]),
|
|
12413
|
+
["shape-kanban-card", 17],
|
|
12414
|
+
...[
|
|
12415
|
+
"admin",
|
|
12416
|
+
"api",
|
|
12417
|
+
"backend",
|
|
12418
|
+
"cache",
|
|
12419
|
+
"cdn",
|
|
12420
|
+
"cloud",
|
|
12421
|
+
"database",
|
|
12422
|
+
"decision",
|
|
12423
|
+
"developer",
|
|
12424
|
+
"external-user",
|
|
12425
|
+
"frontend",
|
|
12426
|
+
"merkle-tree",
|
|
12427
|
+
"message-bus",
|
|
12428
|
+
"microservice",
|
|
12429
|
+
"oracle",
|
|
12430
|
+
"person",
|
|
12431
|
+
"queue",
|
|
12432
|
+
"service",
|
|
12433
|
+
"signer",
|
|
12434
|
+
"user-group",
|
|
12435
|
+
"webhook"
|
|
12436
|
+
].map((k) => [k, 20]),
|
|
12437
|
+
...["card", "event", "function"].map((k) => [k, 24]),
|
|
12438
|
+
["actor", 32],
|
|
12439
|
+
["storage", 34]
|
|
12440
|
+
]);
|
|
12441
|
+
function titleFontSize(kind) {
|
|
12442
|
+
return TITLE_FONT_SIZE.get(kind ?? "") ?? TITLE_FONT_SIZE_DEFAULT;
|
|
12443
|
+
}
|
|
12444
|
+
var TITLE_BOX_PADDING = 52;
|
|
12380
12445
|
var KINDS_DRAWN_BY_GENERIC = [
|
|
12381
12446
|
"person",
|
|
12382
12447
|
"user-group",
|
|
@@ -17161,7 +17226,7 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5
|
|
|
17161
17226
|
const titleTrimmed = n.title?.trim() ?? "";
|
|
17162
17227
|
if (!titleTrimmed) continue;
|
|
17163
17228
|
const titleLen = titleTrimmed.length;
|
|
17164
|
-
const expectedW = titleLen *
|
|
17229
|
+
const expectedW = titleLen * titleFontSize(n.kind) + (drawsTitleOutsideBox(n.kind) ? 0 : TITLE_BOX_PADDING);
|
|
17165
17230
|
if (expectedW > n.w + 8) {
|
|
17166
17231
|
push(
|
|
17167
17232
|
"text-readability",
|
|
@@ -17377,6 +17442,7 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5
|
|
|
17377
17442
|
}
|
|
17378
17443
|
for (const n of laid.nodes) {
|
|
17379
17444
|
if (n.id.endsWith("-spacer") || /^s\d+-/.test(n.id)) continue;
|
|
17445
|
+
if (!isRenderedNode(n)) continue;
|
|
17380
17446
|
const nodeLeft = n.cx - n.w / 2;
|
|
17381
17447
|
const nodeTop = n.cy - n.h / 2;
|
|
17382
17448
|
const nodeRight = n.cx + n.w / 2;
|