@cardenelabs/cdl 0.40.4 → 0.40.5
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 +23 -1
- package/dist/index.cjs +44 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +44 -11
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +44 -11
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +44 -11
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/chart-gauge.tsx +88 -17
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,27 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.40.5] - 2026-09-07
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **内訳が多い半円ゲージで合計が主役でなくなるのを直した** (#735)
|
|
13
|
+
|
|
14
|
+
段を折り返すようにした (#732) 結果、件数が増えると弧に残る高さが尽き、**合計の字が
|
|
15
|
+
内訳の名前より小さくなっていた**。 実測で件数 22 から合計 13 に対し名前 14、
|
|
16
|
+
件数 30 では合計が弧の内側の穴から 4.9 はみ出し、件数 40 では 10.2 はみ出した。
|
|
17
|
+
この種別は合計を大きく見せるために作ったので、主役が入れ替わると図の意味が変わる。
|
|
18
|
+
|
|
19
|
+
弧に残す高さ (48) を先に確保し、そこから置ける段数を逆算する。 入り切らない件は
|
|
20
|
+
末尾 1 件に「その他」 として畳み、**合計の値は変えない** = 畳んだ件の値を足して持たせる。
|
|
21
|
+
弧も同じ並びで描くので、扇と内訳が食い違わない。
|
|
22
|
+
|
|
23
|
+
合計の級の決め方も直した。 中心の高さの横幅で測っていたため、字が中心より上に置かれる
|
|
24
|
+
ぶんだけ穴からはみ出していた。 字の上の角が穴の円に入る大きさを解いて決める。
|
|
25
|
+
|
|
26
|
+
件数 12 以下の図は段の数も弧の半径も今までと同じ (実測で 1 段が半径 128.96、
|
|
27
|
+
2 段が 94.24 で前後一致)。
|
|
28
|
+
|
|
8
29
|
## [0.40.4] - 2026-09-07
|
|
9
30
|
|
|
10
31
|
### Fixed
|
|
@@ -1862,7 +1883,8 @@ Initial OSS release.
|
|
|
1862
1883
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
1863
1884
|
行き止まりになる。
|
|
1864
1885
|
|
|
1865
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.40.
|
|
1886
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.40.5...HEAD
|
|
1887
|
+
[0.40.5]: https://github.com/cardene777/cdl/compare/v0.40.4...v0.40.5
|
|
1866
1888
|
[0.40.4]: https://github.com/cardene777/cdl/compare/v0.40.3...v0.40.4
|
|
1867
1889
|
[0.40.3]: https://github.com/cardene777/cdl/compare/v0.40.2...v0.40.3
|
|
1868
1890
|
[0.40.2]: https://github.com/cardene777/cdl/compare/v0.40.1...v0.40.2
|
package/dist/index.cjs
CHANGED
|
@@ -24892,13 +24892,46 @@ function ChartGaugeNode({
|
|
|
24892
24892
|
const \u5F27\u3068\u5185\u8A33\u306E\u9593 = 16;
|
|
24893
24893
|
const \u5370\u306E\u5E452 = 30;
|
|
24894
24894
|
const \u533A\u753B\u306E\u9593 = 12;
|
|
24895
|
-
const \
|
|
24896
|
-
const \
|
|
24897
|
-
|
|
24898
|
-
|
|
24899
|
-
|
|
24895
|
+
const \u6570\u5024\u306E\u884C = (d) => `${\u5B9F\u5024\u8868\u8A18(d.value)} ${\u5272\u5408\u8868\u8A18(d.value / total)}`;
|
|
24896
|
+
const \u5272\u308A\u4ED8\u3051\u308B = (\u4EF6\u305F\u3061) => {
|
|
24897
|
+
const \u5E45 = Math.max(\u5370\u306E\u5E452, ...\u4EF6\u305F\u3061.map((d) => textWidth(\u6570\u5024\u306E\u884C(d), \u6570\u5024\u306E\u7D1A))) + \u533A\u753B\u306E\u9593;
|
|
24898
|
+
const \u884C\u306E\u4EF6\u65702 = Math.min(
|
|
24899
|
+
Math.max(1, Math.floor(\u4F7F\u3048\u308B\u5E452 / Math.max(\u5E45, 1))),
|
|
24900
|
+
Math.max(\u4EF6\u305F\u3061.length, 1)
|
|
24901
|
+
);
|
|
24902
|
+
return { \u884C\u306E\u4EF6\u6570: \u884C\u306E\u4EF6\u65702, \u6BB5\u6570: Math.ceil(Math.max(\u4EF6\u305F\u3061.length, 1) / \u884C\u306E\u4EF6\u65702) };
|
|
24903
|
+
};
|
|
24904
|
+
const \u5F27\u306B\u6B8B\u3059\u9AD8\u3055 = 48;
|
|
24905
|
+
const \u7F6E\u3051\u308B\u6BB5\u6570 = Math.max(
|
|
24906
|
+
1,
|
|
24907
|
+
Math.floor((\u4F7F\u3048\u308B\u9AD8\u3055 - \u5F27\u306B\u6B8B\u3059\u9AD8\u3055 - \u5F27\u3068\u5185\u8A33\u306E\u9593) / \u6BB5\u306E\u9AD8\u3055)
|
|
24900
24908
|
);
|
|
24901
|
-
const \
|
|
24909
|
+
const \u7573\u3080 = (\u6B8B\u3059\u4EF6\u6570) => {
|
|
24910
|
+
if (\u6B8B\u3059\u4EF6\u6570 >= data.length) return data;
|
|
24911
|
+
const \u524D = data.slice(0, Math.max(0, \u6B8B\u3059\u4EF6\u6570 - 1));
|
|
24912
|
+
const \u6B8B\u308A = data.slice(Math.max(0, \u6B8B\u3059\u4EF6\u6570 - 1));
|
|
24913
|
+
const \u5024 = \u6B8B\u308A.reduce((acc, d) => acc + d.value, 0);
|
|
24914
|
+
const \u8AAD\u3081\u306A\u3044 = \u6B8B\u308A.some((d) => d.unresolved);
|
|
24915
|
+
const \u7573\u3093\u3060 = {
|
|
24916
|
+
...\u6B8B\u308A[0],
|
|
24917
|
+
label: "\u305D\u306E\u4ED6",
|
|
24918
|
+
value: \u5024,
|
|
24919
|
+
previous: void 0,
|
|
24920
|
+
...\u8AAD\u3081\u306A\u3044 ? { unresolved: true } : { unresolved: void 0 }
|
|
24921
|
+
};
|
|
24922
|
+
return [...\u524D, \u7573\u3093\u3060];
|
|
24923
|
+
};
|
|
24924
|
+
const \u51FA\u3059\u4EF6\u305F\u3061 = (() => {
|
|
24925
|
+
let \u4EF6\u305F\u3061 = data;
|
|
24926
|
+
for (let i = 0; i < 4; i++) {
|
|
24927
|
+
const { \u884C\u306E\u4EF6\u6570: \u884C\u306E\u4EF6\u65702, \u6BB5\u6570 } = \u5272\u308A\u4ED8\u3051\u308B(\u4EF6\u305F\u3061);
|
|
24928
|
+
if (\u6BB5\u6570 <= \u7F6E\u3051\u308B\u6BB5\u6570) return \u4EF6\u305F\u3061;
|
|
24929
|
+
\u4EF6\u305F\u3061 = \u7573\u3080(Math.max(1, \u7F6E\u3051\u308B\u6BB5\u6570 * \u884C\u306E\u4EF6\u65702));
|
|
24930
|
+
}
|
|
24931
|
+
return \u4EF6\u305F\u3061;
|
|
24932
|
+
})();
|
|
24933
|
+
const \u5185\u8A33\u306E\u6570\u5024 = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => \u6570\u5024\u306E\u884C(d));
|
|
24934
|
+
const { \u884C\u306E\u4EF6\u6570, \u6BB5\u6570: \u5185\u8A33\u306E\u6BB5\u6570 } = \u5272\u308A\u4ED8\u3051\u308B(\u51FA\u3059\u4EF6\u305F\u3061);
|
|
24902
24935
|
const \u5185\u8A33\u306E\u9AD8\u3055 = \u6BB5\u306E\u9AD8\u3055 * \u5185\u8A33\u306E\u6BB5\u6570;
|
|
24903
24936
|
const \u5F27\u306B\u4F7F\u3048\u308B\u9AD8\u3055 = \u4F7F\u3048\u308B\u9AD8\u3055 - \u5185\u8A33\u306E\u9AD8\u3055 - \u5F27\u3068\u5185\u8A33\u306E\u9593;
|
|
24904
24937
|
const radius = Math.max(24, Math.min(\u5F27\u306B\u4F7F\u3048\u308B\u9AD8\u3055, \u4F7F\u3048\u308B\u5E452 / 2));
|
|
@@ -24906,7 +24939,7 @@ function ChartGaugeNode({
|
|
|
24906
24939
|
const cx = node.w / 2;
|
|
24907
24940
|
const cy = PAD_TOP2 + radius;
|
|
24908
24941
|
let cumFrac = 0;
|
|
24909
|
-
const slices =
|
|
24942
|
+
const slices = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => {
|
|
24910
24943
|
const frac = d.value / total;
|
|
24911
24944
|
const a0 = Math.PI + cumFrac * Math.PI;
|
|
24912
24945
|
const a1 = a0 + frac * Math.PI;
|
|
@@ -24919,10 +24952,10 @@ function ChartGaugeNode({
|
|
|
24919
24952
|
return { d, frac, path };
|
|
24920
24953
|
});
|
|
24921
24954
|
const \u5408\u8A08\u306E\u6587\u5B57 = \u5B9F\u5024\u8868\u8A18(Math.round(total));
|
|
24922
|
-
const \
|
|
24955
|
+
const \u5358\u4F4D\u5E45 = Math.max(textWidth(\u5408\u8A08\u306E\u6587\u5B57, 100), 1) / 100;
|
|
24923
24956
|
const \u7D1A\u306E\u5019\u88DC = Math.min(
|
|
24924
|
-
// 横 =
|
|
24925
|
-
\
|
|
24957
|
+
// 横 = 字の上の角が内側の円に入る大きさ
|
|
24958
|
+
\u5185\u534A\u5F84 / Math.sqrt((\u5358\u4F4D\u5E45 / 2) ** 2 + 1.25 ** 2),
|
|
24926
24959
|
// 縦 = 合計 1 行 + 見出し 1 行が内側の高さに収まる比
|
|
24927
24960
|
\u5185\u534A\u5F84 * 0.52
|
|
24928
24961
|
);
|
|
@@ -24985,7 +25018,7 @@ function ChartGaugeNode({
|
|
|
24985
25018
|
children: "\u5408\u8A08"
|
|
24986
25019
|
}
|
|
24987
25020
|
),
|
|
24988
|
-
|
|
25021
|
+
\u51FA\u3059\u4EF6\u305F\u3061.map((d, idx) => {
|
|
24989
25022
|
const \u5217 = idx % \u884C\u306E\u4EF6\u6570;
|
|
24990
25023
|
const \u6BB5 = Math.floor(idx / \u884C\u306E\u4EF6\u6570);
|
|
24991
25024
|
const x = PAD_SIDE + \u5185\u8A33\u306E\u5E45 * \u5217;
|