@cardenelabs/cdl 0.44.0 → 0.45.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 +31 -1
- package/dist/index.cjs +51 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +21 -1
- package/dist/index.d.ts +21 -1
- package/dist/index.js +51 -16
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +31 -15
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +31 -15
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/visual-validate.ts +104 -30
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,35 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.45.0] - 2026-09-11
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **読みにくさを測る器を呼び出し側から渡せるようにした** (軸 23 `responsive-viewport`、#797)
|
|
13
|
+
|
|
14
|
+
`visualValidate` / `visualValidateLaid` / `visualValidateAll` に `container` を足した。
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
visualValidate(diagram, { container: { width: 874 } });
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
軸 23 は `#793` から器に収めた倍率で読みにくさを判定するが、その器を engine が
|
|
21
|
+
1150 × 630px に決め打っていた。 これは下流の見本帳の **拡大表示** を画面で実測した値で、
|
|
22
|
+
同じ見本帳でも一覧に並べた時の枠は幅 874px、縦は巻き取るので上限が無い。
|
|
23
|
+
器が違えば同じ図でも読めるかどうかが変わるため、決め打つと片方の見せ方が測れないまま残る。
|
|
24
|
+
|
|
25
|
+
**高さは省ける**。 省いた器では縦を見ない = 0 や無限大で表すと「上限が無い」 と
|
|
26
|
+
「潰れている」 が同じ値になる。 省いた時の文面は `器 幅 874px (高さの上限なし)` になり、
|
|
27
|
+
効いた辺は必ず横、届く寸法も幅で出す。
|
|
28
|
+
|
|
29
|
+
**壊れた寸法は既定に落とさず例外にする**。 落とすと、誤った値を渡した呼び出し側が
|
|
30
|
+
「効いている」 と読む。 0 / 負値 / `NaN` / 無限大が対象で、判定は **図ごとではなく入口で
|
|
31
|
+
1 度だけ**行う (図ごとに投げると、器の誤りが図の破綻に紛れてどちらを直すか読めない)。
|
|
32
|
+
図を 1 枚も渡さない掃き出しでも確かめる。
|
|
33
|
+
|
|
34
|
+
`container` を渡さない呼び出しは今までどおり拡大表示の器 (1150 × 630px) で判定する。
|
|
35
|
+
文面も 1 文字も変えていない。
|
|
36
|
+
|
|
8
37
|
## [0.44.0] - 2026-09-10
|
|
9
38
|
|
|
10
39
|
### Fixed
|
|
@@ -2267,7 +2296,8 @@ Initial OSS release.
|
|
|
2267
2296
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
2268
2297
|
行き止まりになる。
|
|
2269
2298
|
|
|
2270
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
2299
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.45.0...HEAD
|
|
2300
|
+
[0.45.0]: https://github.com/cardene777/cdl/compare/v0.44.0...v0.45.0
|
|
2271
2301
|
[0.44.0]: https://github.com/cardene777/cdl/compare/v0.43.0...v0.44.0
|
|
2272
2302
|
[0.43.0]: https://github.com/cardene777/cdl/compare/v0.42.0...v0.43.0
|
|
2273
2303
|
[0.42.0]: https://github.com/cardene777/cdl/compare/v0.41.1...v0.42.0
|
package/dist/index.cjs
CHANGED
|
@@ -15500,6 +15500,27 @@ var SKIPPED_AXES = {
|
|
|
15500
15500
|
production: /* @__PURE__ */ new Set(),
|
|
15501
15501
|
catalog: /* @__PURE__ */ new Set(["seo-metadata-quality", "structured-data-extraction"])
|
|
15502
15502
|
};
|
|
15503
|
+
var \u65E2\u5B9A\u306E\u5668 = {
|
|
15504
|
+
/**
|
|
15505
|
+
* 拡大表示の枠は `min(1200px, 94vw)` で、中身は 1px の縁と 24px の余白の内側に描かれる。
|
|
15506
|
+
* 画面が 1280px 以上なら 1200 が効くので、そこから縁 2 枚と余白 2 枚を引く。
|
|
15507
|
+
*/
|
|
15508
|
+
width: 1200 - 1 * 2 - 24 * 2,
|
|
15509
|
+
/** 同じ拡大表示の高さの頭打ち (`90vh − 180px`) を、基準の画面の高さ 900px で評価した値。 */
|
|
15510
|
+
height: 900 * 0.9 - 180
|
|
15511
|
+
};
|
|
15512
|
+
function \u5668\u3092\u78BA\u304B\u3081\u308B(c) {
|
|
15513
|
+
if (c === void 0) return { \u5E45: \u65E2\u5B9A\u306E\u5668.width, \u9AD8\u3055: \u65E2\u5B9A\u306E\u5668.height };
|
|
15514
|
+
if (!(c.width > 0) || !Number.isFinite(c.width)) {
|
|
15515
|
+
throw new Error(`container.width \u304C\u63CF\u753B\u4E0D\u80FD (\u6B63\u306E\u6709\u9650\u5024\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308B): ${c.width}`);
|
|
15516
|
+
}
|
|
15517
|
+
if (c.height !== void 0 && (!(c.height > 0) || !Number.isFinite(c.height))) {
|
|
15518
|
+
throw new Error(
|
|
15519
|
+
`container.height \u304C\u63CF\u753B\u4E0D\u80FD (\u6B63\u306E\u6709\u9650\u5024\u3067\u6E21\u3059\u304B\u3001\u4E0A\u9650\u304C\u7121\u3044\u306A\u3089\u7701\u304F): ${c.height}`
|
|
15520
|
+
);
|
|
15521
|
+
}
|
|
15522
|
+
return { \u5E45: c.width, \u9AD8\u3055: c.height };
|
|
15523
|
+
}
|
|
15503
15524
|
var MIN_NODE_W = 80;
|
|
15504
15525
|
var MIN_NODE_H = 40;
|
|
15505
15526
|
var ROW_FORMAT = /^[^:]+:\s*.+$/;
|
|
@@ -15971,7 +15992,16 @@ function visualValidateLaid(laid, diag, opts) {
|
|
|
15971
15992
|
violations.push({ axis, diagramId: safeDiagramId(diag), detail, severity });
|
|
15972
15993
|
counts[axis]++;
|
|
15973
15994
|
};
|
|
15974
|
-
return visualValidateInner(
|
|
15995
|
+
return visualValidateInner(
|
|
15996
|
+
laid,
|
|
15997
|
+
diag,
|
|
15998
|
+
violations,
|
|
15999
|
+
counts,
|
|
16000
|
+
push,
|
|
16001
|
+
profile,
|
|
16002
|
+
[...skipped],
|
|
16003
|
+
\u5668\u3092\u78BA\u304B\u3081\u308B(opts?.container)
|
|
16004
|
+
);
|
|
15975
16005
|
}
|
|
15976
16006
|
function visualValidate(diag, opts) {
|
|
15977
16007
|
const violations = [];
|
|
@@ -16008,7 +16038,16 @@ function visualValidate(diag, opts) {
|
|
|
16008
16038
|
} finally {
|
|
16009
16039
|
console.warn = origWarn;
|
|
16010
16040
|
}
|
|
16011
|
-
return visualValidateInner(
|
|
16041
|
+
return visualValidateInner(
|
|
16042
|
+
laid,
|
|
16043
|
+
safeDiag,
|
|
16044
|
+
violations,
|
|
16045
|
+
counts,
|
|
16046
|
+
push,
|
|
16047
|
+
profile,
|
|
16048
|
+
[...skipped],
|
|
16049
|
+
\u5668\u3092\u78BA\u304B\u3081\u308B(opts?.container)
|
|
16050
|
+
);
|
|
16012
16051
|
}
|
|
16013
16052
|
var VALIDATED_ARRAY_FIELDS = [
|
|
16014
16053
|
["laid", "lanes"],
|
|
@@ -16208,7 +16247,7 @@ function normalizeForValidation(value, problems, owner) {
|
|
|
16208
16247
|
}
|
|
16209
16248
|
return next;
|
|
16210
16249
|
}
|
|
16211
|
-
function visualValidateInner(laid, diag, violations, counts, push, profile, skippedAxes) {
|
|
16250
|
+
function visualValidateInner(laid, diag, violations, counts, push, profile, skippedAxes, \u5668) {
|
|
16212
16251
|
const problems = findMalformedInput(laid, diag);
|
|
16213
16252
|
for (const p of problems) push("malformed-input", p.detail, "error");
|
|
16214
16253
|
if (problems.length > 0) {
|
|
@@ -16216,7 +16255,7 @@ function visualValidateInner(laid, diag, violations, counts, push, profile, skip
|
|
|
16216
16255
|
diag = normalizeForValidation(diag, problems, "diag");
|
|
16217
16256
|
}
|
|
16218
16257
|
try {
|
|
16219
|
-
return runAxes(laid, diag, violations, counts, push, profile, skippedAxes);
|
|
16258
|
+
return runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5668);
|
|
16220
16259
|
} catch (err) {
|
|
16221
16260
|
const known = counts["malformed-input"] > 0;
|
|
16222
16261
|
const axis = known ? "malformed-input" : "validation-interrupted";
|
|
@@ -16229,7 +16268,7 @@ function visualValidateInner(laid, diag, violations, counts, push, profile, skip
|
|
|
16229
16268
|
return { diagramId: safeDiagramId(diag), ok: false, violations, counts, profile, skippedAxes };
|
|
16230
16269
|
}
|
|
16231
16270
|
}
|
|
16232
|
-
function runAxes(laid, diag, violations, counts, push, profile, skippedAxes) {
|
|
16271
|
+
function runAxes(laid, diag, violations, counts, push, profile, skippedAxes, \u5668) {
|
|
16233
16272
|
const LIFELINE_W_THRESHOLD = 8;
|
|
16234
16273
|
for (const n of laid.nodes) {
|
|
16235
16274
|
if (n.w < LIFELINE_W_THRESHOLD) continue;
|
|
@@ -16929,14 +16968,8 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes) {
|
|
|
16929
16968
|
} catch {
|
|
16930
16969
|
}
|
|
16931
16970
|
}
|
|
16932
|
-
const
|
|
16933
|
-
const
|
|
16934
|
-
const RESPONSIVE_REF_FRAME_PAD_PX = 24;
|
|
16935
|
-
const RESPONSIVE_REF_CONTAINER_W_PX = RESPONSIVE_REF_FRAME_W_PX - RESPONSIVE_REF_FRAME_BORDER_PX * 2 - RESPONSIVE_REF_FRAME_PAD_PX * 2;
|
|
16936
|
-
const RESPONSIVE_REF_VIEWPORT_H_PX = 900;
|
|
16937
|
-
const RESPONSIVE_REF_FRAME_H_RATIO = 0.9;
|
|
16938
|
-
const RESPONSIVE_REF_CHROME_H_PX = 180;
|
|
16939
|
-
const RESPONSIVE_REF_CONTAINER_H_PX = RESPONSIVE_REF_VIEWPORT_H_PX * RESPONSIVE_REF_FRAME_H_RATIO - RESPONSIVE_REF_CHROME_H_PX;
|
|
16971
|
+
const RESPONSIVE_REF_CONTAINER_W_PX = \u5668.\u5E45;
|
|
16972
|
+
const RESPONSIVE_REF_CONTAINER_H_PX = \u5668.\u9AD8\u3055;
|
|
16940
16973
|
const RESPONSIVE_MIN_ON_SCREEN_FONT_PX = 12;
|
|
16941
16974
|
const RESPONSIVE_BASE_FONT_WORLD = 22;
|
|
16942
16975
|
const vbResp = laid.viewBox;
|
|
@@ -16948,15 +16981,16 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes) {
|
|
|
16948
16981
|
);
|
|
16949
16982
|
} else {
|
|
16950
16983
|
const \u6A2A\u306E\u500D\u7387 = RESPONSIVE_REF_CONTAINER_W_PX / vbResp.w;
|
|
16951
|
-
const \u7E26\u306E\u500D\u7387 = RESPONSIVE_REF_CONTAINER_H_PX / vbResp.h;
|
|
16984
|
+
const \u7E26\u306E\u500D\u7387 = RESPONSIVE_REF_CONTAINER_H_PX === void 0 ? Number.POSITIVE_INFINITY : RESPONSIVE_REF_CONTAINER_H_PX / vbResp.h;
|
|
16952
16985
|
const \u500D\u7387 = Math.min(\u6A2A\u306E\u500D\u7387, \u7E26\u306E\u500D\u7387);
|
|
16953
16986
|
const \u753B\u9762\u4E0A\u306E\u5B57 = RESPONSIVE_BASE_FONT_WORLD * \u500D\u7387;
|
|
16954
16987
|
if (\u753B\u9762\u4E0A\u306E\u5B57 < RESPONSIVE_MIN_ON_SCREEN_FONT_PX) {
|
|
16955
16988
|
const \u52B9\u304F\u8FBA = \u6A2A\u306E\u500D\u7387 <= \u7E26\u306E\u500D\u7387 ? "\u6A2A" : "\u7E26";
|
|
16956
|
-
const \u53CE\u307E\u308B\u5BF8\u6CD5 = \u52B9\u304F\u8FBA === "\u6A2A" ? `\u5E45 ${(RESPONSIVE_REF_CONTAINER_W_PX * RESPONSIVE_BASE_FONT_WORLD / RESPONSIVE_MIN_ON_SCREEN_FONT_PX).toFixed(0)} \u4EE5\u4E0B` : `\u9AD8\u3055 ${(RESPONSIVE_REF_CONTAINER_H_PX * RESPONSIVE_BASE_FONT_WORLD / RESPONSIVE_MIN_ON_SCREEN_FONT_PX).toFixed(0)} \u4EE5\u4E0B`;
|
|
16989
|
+
const \u53CE\u307E\u308B\u5BF8\u6CD5 = \u52B9\u304F\u8FBA === "\u6A2A" || RESPONSIVE_REF_CONTAINER_H_PX === void 0 ? `\u5E45 ${(RESPONSIVE_REF_CONTAINER_W_PX * RESPONSIVE_BASE_FONT_WORLD / RESPONSIVE_MIN_ON_SCREEN_FONT_PX).toFixed(0)} \u4EE5\u4E0B` : `\u9AD8\u3055 ${(RESPONSIVE_REF_CONTAINER_H_PX * RESPONSIVE_BASE_FONT_WORLD / RESPONSIVE_MIN_ON_SCREEN_FONT_PX).toFixed(0)} \u4EE5\u4E0B`;
|
|
16990
|
+
const \u5668\u306E\u66F8\u304D\u65B9 = RESPONSIVE_REF_CONTAINER_H_PX === void 0 ? `\u5668 \u5E45 ${RESPONSIVE_REF_CONTAINER_W_PX}px (\u9AD8\u3055\u306E\u4E0A\u9650\u306A\u3057)` : `\u5668 ${RESPONSIVE_REF_CONTAINER_W_PX}\xD7${RESPONSIVE_REF_CONTAINER_H_PX}px`;
|
|
16957
16991
|
push(
|
|
16958
16992
|
"responsive-viewport",
|
|
16959
|
-
`viewBox ${vbResp.w}\xD7${vbResp.h} \u306F
|
|
16993
|
+
`viewBox ${vbResp.w}\xD7${vbResp.h} \u306F${\u5668\u306E\u66F8\u304D\u65B9} \u3067 ${\u500D\u7387.toFixed(3)} \u500D\u306B\u7E2E\u307F\u3001 \u7BB1\u306E\u984C\u304C ${\u753B\u9762\u4E0A\u306E\u5B57.toFixed(1)}px \u306B\u306A\u308B (\u4E0B\u9650 ${RESPONSIVE_MIN_ON_SCREEN_FONT_PX}px\u3001 \u500D\u7387\u3092\u6C7A\u3081\u305F\u306E\u306F ${\u52B9\u304F\u8FBA}\u3001 ${\u53CE\u307E\u308B\u5BF8\u6CD5}\u306B\u3059\u308B\u3068\u5C4A\u304F)`,
|
|
16960
16994
|
"warn"
|
|
16961
16995
|
);
|
|
16962
16996
|
}
|
|
@@ -17661,6 +17695,7 @@ function runAxes(laid, diag, violations, counts, push, profile, skippedAxes) {
|
|
|
17661
17695
|
};
|
|
17662
17696
|
}
|
|
17663
17697
|
function visualValidateAll(diagrams, opts) {
|
|
17698
|
+
\u5668\u3092\u78BA\u304B\u3081\u308B(opts?.container);
|
|
17664
17699
|
const durations = [];
|
|
17665
17700
|
const reports = diagrams.map((d) => {
|
|
17666
17701
|
const start = Date.now();
|