@cardenelabs/cdl 0.32.0 → 0.34.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 +37 -1
- package/README.md +37 -4
- package/dist/index.cjs +252 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +252 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +250 -0
- 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 +250 -0
- package/dist/react.js.map +1 -1
- package/dist/{render-DjnLKv2Q.d.cts → render-C2rcAsgk.d.cts} +1 -1
- package/dist/{render-DjnLKv2Q.d.ts → render-C2rcAsgk.d.ts} +1 -1
- package/package.json +1 -1
- package/src/kinds/chart-number.ts +20 -0
- package/src/kinds/chart-slope.tsx +327 -0
- package/src/layout/spec.ts +1 -0
- package/src/layout/tokens.ts +2 -0
- package/src/presets.ts +3 -1
- package/src/render/nodes.tsx +12 -0
- package/src/types.ts +2 -1
- package/src/validate.ts +2 -0
- package/src/visual-validate.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,40 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.34.0] - 2026-09-07
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- **傾き図の名札の役割を値と名前で分けた** (#693)
|
|
13
|
+
|
|
14
|
+
`chart-slope-label` を `chart-slope-value` (軸の脇に置く値) と `chart-slope-name`
|
|
15
|
+
(その外に置く系列の名前) の 2 つにした。 古い役割は残していない。
|
|
16
|
+
|
|
17
|
+
1 つにまとめていると、使う側が値だけに字体を当てられず、寸法を記録する側も級 14 と
|
|
18
|
+
級 9-13 の 2 つを 1 行に潰してしまう。 他の図表 (`chart-stat` / `chart-stacked-bar`) も
|
|
19
|
+
字を役割で分けている。
|
|
20
|
+
|
|
21
|
+
`chart-slope` は `0.33.0` で入ったばかりで、この役割で selector を書いている消費側は無い。
|
|
22
|
+
|
|
23
|
+
## [0.33.0] - 2026-09-07
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **2 時点をつなぐ線で増減と順位の入れ替わりを見せる図を新設した** (#688)
|
|
28
|
+
|
|
29
|
+
`chart-slope` を足した。 左右に縦軸を置き、系列ごとに 前 と 今 を直線で結ぶ。
|
|
30
|
+
線の向きが増減、傾きが動いた量、線の交差が順位の入れ替わりを表す。
|
|
31
|
+
|
|
32
|
+
値は `chart-stacked-bar` と同じ datum の `previous` から読む。 新しい欄は足していない。
|
|
33
|
+
|
|
34
|
+
尺は 0 に固定せず両時点の最小と最大から取る = 近い値どうしの差を傾きで読ませる図なので、
|
|
35
|
+
0 まで伸ばすと線が全部水平に潰れる。
|
|
36
|
+
|
|
37
|
+
`previous` を 1 件も書かない図は線を引かず、軸 1 本に点を並べる。 2 点が無いと傾きが
|
|
38
|
+
定義できず、水平線を引くと「動かなかった」 という別の意味になる。
|
|
39
|
+
|
|
40
|
+
段の `draw` に載せると線が左の軸から右の軸へ伸びる。
|
|
41
|
+
|
|
8
42
|
## [0.32.0] - 2026-09-07
|
|
9
43
|
|
|
10
44
|
### Added
|
|
@@ -1629,7 +1663,9 @@ Initial OSS release.
|
|
|
1629
1663
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
1630
1664
|
行き止まりになる。
|
|
1631
1665
|
|
|
1632
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
1666
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.34.0...HEAD
|
|
1667
|
+
[0.34.0]: https://github.com/cardene777/cdl/compare/v0.33.0...v0.34.0
|
|
1668
|
+
[0.33.0]: https://github.com/cardene777/cdl/compare/v0.32.0...v0.33.0
|
|
1633
1669
|
[0.32.0]: https://github.com/cardene777/cdl/compare/v0.31.1...v0.32.0
|
|
1634
1670
|
[0.31.1]: https://github.com/cardene777/cdl/compare/v0.31.0...v0.31.1
|
|
1635
1671
|
[0.31.0]: https://github.com/cardene777/cdl/compare/v0.30.3...v0.31.0
|
package/README.md
CHANGED
|
@@ -246,7 +246,7 @@ phase 切替に連動して `status: idle` → `status: running` のように描
|
|
|
246
246
|
|
|
247
247
|
## 2 時点の構成比
|
|
248
248
|
|
|
249
|
-
`chart-pie` と `chart-stacked-bar` は datum の `previous` で前の時点を受け取る。
|
|
249
|
+
`chart-pie` と `chart-stacked-bar` と `chart-slope` は datum の `previous` で前の時点を受け取る。
|
|
250
250
|
`previous` を 1 件でも書くと、書かない datum も前の時点では 0 として扱うため、系列の色と
|
|
251
251
|
並びが時点間で対応する。
|
|
252
252
|
|
|
@@ -267,6 +267,35 @@ phase 切替に連動して `status: idle` → `status: running` のように描
|
|
|
267
267
|
`chart-stacked-bar` は前から今の順に帯を並べる。`previous` を書かない図は、どちらも今だけを描く。
|
|
268
268
|
3 時点以上は持たない。
|
|
269
269
|
|
|
270
|
+
## 2 時点の増減と順位
|
|
271
|
+
|
|
272
|
+
`chart-slope` は同じ `previous` を読むが、構成比ではなく **値そのもの** を左右に打ち、系列ごとに
|
|
273
|
+
直線で結ぶ。 線の向きが増減、傾きが動いた量、線の交差が順位の入れ替わりを表す。
|
|
274
|
+
|
|
275
|
+
```ts
|
|
276
|
+
.node("trend", {
|
|
277
|
+
lane: "l",
|
|
278
|
+
stack: 0,
|
|
279
|
+
kind: "chart-slope",
|
|
280
|
+
chartData: [
|
|
281
|
+
{ label: "Web", previous: 45, value: 30 },
|
|
282
|
+
{ label: "Mobile", previous: 35, value: 45 },
|
|
283
|
+
{ label: "API", previous: 20, value: 25 },
|
|
284
|
+
],
|
|
285
|
+
})
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
尺は 0 に固定せず、両時点の最小と最大から取る。 近い値どうしの差を傾きで読ませる図なので、
|
|
289
|
+
0 まで伸ばすと線が全部水平に潰れるため。
|
|
290
|
+
|
|
291
|
+
`previous` を 1 件も書かない図は線を引かず、軸 1 本に点を並べる。 2 点が無いと傾きが定義できず、
|
|
292
|
+
水平線を引くと「動かなかった」 という別の意味になる。
|
|
293
|
+
|
|
294
|
+
段の `draw` にこの node を載せると、線が左の軸から右の軸へ伸びる。
|
|
295
|
+
|
|
296
|
+
名札の字は値と名前で role が分かれる (`chart-slope-value` / `chart-slope-name`)。
|
|
297
|
+
値だけに字体を当てられるようにするため。
|
|
298
|
+
|
|
270
299
|
## 円グラフの見せ方
|
|
271
300
|
|
|
272
301
|
`chart-pie` は `chartPieForm` で見せ方を選ぶ。 欄を書かない図は `ring` と同じ。
|
|
@@ -310,9 +339,13 @@ cdl は形だけを描き、 色や影は持たない (geometry only、 style
|
|
|
310
339
|
|
|
311
340
|
明暗の切替は consumer 側の仕組み (`html` の class 等) で行う = cdl は明暗の概念を持たない。
|
|
312
341
|
|
|
313
|
-
**`CdlRole` 型は実装にある role の全部ではない**。
|
|
314
|
-
|
|
315
|
-
|
|
342
|
+
**`CdlRole` 型は実装にある role の全部ではない**。 型に載っているのは共通の描画で使う
|
|
343
|
+
ものだけで、 種別ごとの role (`chart-line` / `tree-edge` / `funnel-stage` / `edge-glow` 等)
|
|
344
|
+
は型を持たないが、 属性は付くので selector は書ける。
|
|
345
|
+
|
|
346
|
+
**件数は書かない**。 role は種別を足すたびに増えるため、 数を書くと必ずずれる
|
|
347
|
+
(実際に 32 種と書いてあった時点の実物は 85 種だった)。 一覧が要る時は source を
|
|
348
|
+
`data-cdl-role=` で検索する。
|
|
316
349
|
|
|
317
350
|
型の内外は「共通か kind 固有か」 では分かれていない (共通の描画で使う `edge-glow` が型の外に
|
|
318
351
|
あり、 枝分かれ図でしか使わない `mind-edge` も型の外にある)。 **型に載っているかどうかは
|
package/dist/index.cjs
CHANGED
|
@@ -11748,6 +11748,7 @@ var KINDS_WITHOUT_TITLE_TEXT = /* @__PURE__ */ new Set([
|
|
|
11748
11748
|
"chart-stat",
|
|
11749
11749
|
"chart-waffle",
|
|
11750
11750
|
"chart-stacked-bar",
|
|
11751
|
+
"chart-slope",
|
|
11751
11752
|
"gantt-timeline",
|
|
11752
11753
|
"mind-map",
|
|
11753
11754
|
"funnel-stages",
|
|
@@ -13656,8 +13657,10 @@ var NODE_KINDS = [
|
|
|
13656
13657
|
"chart-radial",
|
|
13657
13658
|
"chart-stat",
|
|
13658
13659
|
// chart-stacked-bar は帯を割合で区切り時点を並べる形 (cdl#551)
|
|
13660
|
+
// chart-slope は 2 時点を直線でつなぎ増減と順位の入れ替わりを見せる形 (cdl#688)
|
|
13659
13661
|
"chart-waffle",
|
|
13660
13662
|
"chart-stacked-bar",
|
|
13663
|
+
"chart-slope",
|
|
13661
13664
|
// Timeline / Mind 系 (2、 CAR-994 Phase B) ... 1 node に payload 配列、 SVG geometry render
|
|
13662
13665
|
"gantt-timeline",
|
|
13663
13666
|
"mind-map",
|
|
@@ -15462,6 +15465,7 @@ var GRID_ALIGNED_KINDS = /* @__PURE__ */ new Set([
|
|
|
15462
15465
|
"chart-stat",
|
|
15463
15466
|
"chart-waffle",
|
|
15464
15467
|
"chart-stacked-bar",
|
|
15468
|
+
"chart-slope",
|
|
15465
15469
|
"funnel-stages",
|
|
15466
15470
|
"quadrant-matrix"
|
|
15467
15471
|
]);
|
|
@@ -18068,6 +18072,8 @@ var TOKENS = {
|
|
|
18068
18072
|
"chart-waffle": { w: 640, h: 320 },
|
|
18069
18073
|
// 帯を最大 2 本 + 下に一覧。 縦は帯 2 本ぶんで足りる (cdl#551)
|
|
18070
18074
|
"chart-stacked-bar": { w: 640, h: 320 },
|
|
18075
|
+
// 左右 2 本の縦軸と、その外に名札。 縦は系列が縦に並ぶぶん要る (cdl#688)
|
|
18076
|
+
"chart-slope": { w: 640, h: 360 },
|
|
18071
18077
|
// Timeline / Mind 系 (CAR-994 Phase B)
|
|
18072
18078
|
"gantt-timeline": { w: 720, h: 360 },
|
|
18073
18079
|
"mind-map": { w: 720, h: 480 },
|
|
@@ -20781,6 +20787,7 @@ var DRAW_KINDS = /* @__PURE__ */ new Set([
|
|
|
20781
20787
|
"chart-line",
|
|
20782
20788
|
"chart-bar",
|
|
20783
20789
|
"chart-pie",
|
|
20790
|
+
"chart-slope",
|
|
20784
20791
|
"journey-map",
|
|
20785
20792
|
"mind-map",
|
|
20786
20793
|
"tree-hierarchy",
|
|
@@ -25514,6 +25521,238 @@ function \u4E00\u89A7\u306E\u4E26\u3073(data, \u5DE6, \u53F3\u7AEF, \u7D1A) {
|
|
|
25514
25521
|
});
|
|
25515
25522
|
return out;
|
|
25516
25523
|
}
|
|
25524
|
+
|
|
25525
|
+
// src/kinds/chart-number.ts
|
|
25526
|
+
function \u5B9F\u5024\u8868\u8A187(v) {
|
|
25527
|
+
return Number.isInteger(v) ? v.toLocaleString("en-US") : v.toLocaleString("en-US", { maximumFractionDigits: 1 });
|
|
25528
|
+
}
|
|
25529
|
+
var \u7DDA\u306E\u6700\u5C0F\u5E45 = 120;
|
|
25530
|
+
function ChartSlopeNode({
|
|
25531
|
+
node,
|
|
25532
|
+
active,
|
|
25533
|
+
stateValues = {},
|
|
25534
|
+
drawing = false,
|
|
25535
|
+
progress = 1
|
|
25536
|
+
}) {
|
|
25537
|
+
const x0 = node.cx - node.w / 2;
|
|
25538
|
+
const y0 = node.cy - node.h / 2;
|
|
25539
|
+
const data = resolveChartData(node.chartData ?? [], stateValues);
|
|
25540
|
+
const PAD = 24;
|
|
25541
|
+
const \u6642\u70B9\u306E\u7D1A = 12;
|
|
25542
|
+
const \u5024\u306E\u7D1A = 14;
|
|
25543
|
+
const \u540D\u524D\u306E\u4E0A\u9650\u7D1A = 13;
|
|
25544
|
+
const \u540D\u524D\u306E\u4E0B\u9650\u7D1A = 9;
|
|
25545
|
+
const \u8EF8\u304B\u3089\u5024\u307E\u3067 = 10;
|
|
25546
|
+
const \u5024\u304B\u3089\u540D\u524D\u307E\u3067 = 8;
|
|
25547
|
+
const \u524D\u3042\u308A = data.some((d) => d.previous !== void 0);
|
|
25548
|
+
const \u7CFB\u5217\u305F\u3061 = data.map((d, i) => ({
|
|
25549
|
+
\u540D\u524D: d.label ?? "",
|
|
25550
|
+
// 前を持たない件は 0 から立ち上げる。 件を落とすと左右で系列の数が変わり、色の並びが
|
|
25551
|
+
// 対応しなくなる (`chart-stacked-bar` と同じ判断)
|
|
25552
|
+
\u524D: d.previous ?? 0,
|
|
25553
|
+
\u4ECA: d.value,
|
|
25554
|
+
\u8272: \u5370\u306E\u82724(d.tone, i),
|
|
25555
|
+
\u672A\u89E3\u6C7A: d.unresolved === true
|
|
25556
|
+
}));
|
|
25557
|
+
const \u5168\u90E8\u306E\u5024 = \u524D\u3042\u308A ? \u7CFB\u5217\u305F\u3061.flatMap((s) => [s.\u524D, s.\u4ECA]) : \u7CFB\u5217\u305F\u3061.map((s) => s.\u4ECA);
|
|
25558
|
+
const \u6700\u5C0F = \u5168\u90E8\u306E\u5024.length > 0 ? Math.min(...\u5168\u90E8\u306E\u5024) : 0;
|
|
25559
|
+
const \u6700\u5927 = \u5168\u90E8\u306E\u5024.length > 0 ? Math.max(...\u5168\u90E8\u306E\u5024) : 0;
|
|
25560
|
+
const \u5C3A\u306E\u5E45 = \u6700\u5927 - \u6700\u5C0F;
|
|
25561
|
+
const \u4E0A\u7AEF = PAD + (\u524D\u3042\u308A ? \u6642\u70B9\u306E\u7D1A + 12 : 0) + 6;
|
|
25562
|
+
const \u4E0B\u7AEF = Math.max(\u4E0A\u7AEF + 10, node.h - PAD - 6);
|
|
25563
|
+
const y\u3092\u53D6\u308B = (v) => \u5C3A\u306E\u5E45 > 0 ? \u4E0B\u7AEF - (v - \u6700\u5C0F) / \u5C3A\u306E\u5E45 * (\u4E0B\u7AEF - \u4E0A\u7AEF) : (\u4E0A\u7AEF + \u4E0B\u7AEF) / 2;
|
|
25564
|
+
const \u5DE6\u306E\u5B57 = \u7CFB\u5217\u305F\u3061.map((s) => \u5B9F\u5024\u8868\u8A187(s.\u524D));
|
|
25565
|
+
const \u53F3\u306E\u5B57 = \u7CFB\u5217\u305F\u3061.map((s) => \u5B9F\u5024\u8868\u8A187(s.\u4ECA));
|
|
25566
|
+
const \u5DE6\u5024\u5E45 = Math.max(0, ...\u5DE6\u306E\u5B57.map((t) => textWidth(t, \u5024\u306E\u7D1A)));
|
|
25567
|
+
const \u53F3\u5024\u5E45 = Math.max(0, ...\u53F3\u306E\u5B57.map((t) => textWidth(t, \u5024\u306E\u7D1A)));
|
|
25568
|
+
const \u540D\u524D\u306B\u4F7F\u3048\u308B = Math.max(
|
|
25569
|
+
0,
|
|
25570
|
+
(node.w - PAD * 2 - \u7DDA\u306E\u6700\u5C0F\u5E45 - (\u5DE6\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067) - (\u53F3\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067)) / 2
|
|
25571
|
+
);
|
|
25572
|
+
const \u540D\u524D\u306E\u7D1A = \u53CE\u3081\u308B\u7D1A2(\u7CFB\u5217\u305F\u3061.map((s) => s.\u540D\u524D), \u540D\u524D\u306B\u4F7F\u3048\u308B, \u540D\u524D\u306E\u4E0A\u9650\u7D1A, \u540D\u524D\u306E\u4E0B\u9650\u7D1A);
|
|
25573
|
+
const \u540D\u524D\u5E45 = Math.min(
|
|
25574
|
+
\u540D\u524D\u306B\u4F7F\u3048\u308B,
|
|
25575
|
+
Math.max(0, ...\u7CFB\u5217\u305F\u3061.map((s) => textWidth(s.\u540D\u524D, \u540D\u524D\u306E\u7D1A)))
|
|
25576
|
+
);
|
|
25577
|
+
const \u5DE6\u306E\u4F59\u767D = \u540D\u524D\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067 + \u5DE6\u5024\u5E45 + \u8EF8\u304B\u3089\u5024\u307E\u3067;
|
|
25578
|
+
const \u53F3\u306E\u4F59\u767D = \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u53F3\u5024\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067 + \u540D\u524D\u5E45;
|
|
25579
|
+
const \u5DE6\u8EF8x = \u524D\u3042\u308A ? Math.max(PAD, Math.min(PAD + \u5DE6\u306E\u4F59\u767D, node.w / 2 - \u7DDA\u306E\u6700\u5C0F\u5E45 / 2)) : Math.max(PAD, Math.min(node.w / 2, node.w - PAD));
|
|
25580
|
+
const \u53F3\u8EF8x = \u524D\u3042\u308A ? Math.min(node.w - PAD, Math.max(node.w - PAD - \u53F3\u306E\u4F59\u767D, node.w / 2 + \u7DDA\u306E\u6700\u5C0F\u5E45 / 2)) : \u5DE6\u8EF8x;
|
|
25581
|
+
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
25582
|
+
const \u53F3\u3092\u51FA\u3059 = !drawing || \u4F38\u3073 >= 1;
|
|
25583
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
25584
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25585
|
+
"rect",
|
|
25586
|
+
{
|
|
25587
|
+
"data-cdl-role": "node-body",
|
|
25588
|
+
x: 0,
|
|
25589
|
+
y: 0,
|
|
25590
|
+
width: node.w,
|
|
25591
|
+
height: node.h,
|
|
25592
|
+
rx: 16,
|
|
25593
|
+
fill: "var(--cdl-node-fill, #ffffff)",
|
|
25594
|
+
stroke: active ? "var(--cdl-tone-accent, #2d6a8f)" : "var(--cdl-divider, #d4d4d8)",
|
|
25595
|
+
strokeWidth: active ? 3 : 1.25
|
|
25596
|
+
}
|
|
25597
|
+
),
|
|
25598
|
+
(\u524D\u3042\u308A ? [\u5DE6\u8EF8x, \u53F3\u8EF8x] : [\u5DE6\u8EF8x]).map((x, i) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
25599
|
+
"line",
|
|
25600
|
+
{
|
|
25601
|
+
"data-cdl-role": "chart-slope-axis",
|
|
25602
|
+
x1: x,
|
|
25603
|
+
y1: \u4E0A\u7AEF - 6,
|
|
25604
|
+
x2: x,
|
|
25605
|
+
y2: \u4E0B\u7AEF + 6,
|
|
25606
|
+
stroke: "var(--cdl-divider, #d4d4d8)",
|
|
25607
|
+
strokeWidth: 1
|
|
25608
|
+
},
|
|
25609
|
+
`axis-${i}`
|
|
25610
|
+
)),
|
|
25611
|
+
\u524D\u3042\u308A && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25612
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25613
|
+
"text",
|
|
25614
|
+
{
|
|
25615
|
+
"data-cdl-role": "chart-slope-period",
|
|
25616
|
+
x: \u5DE6\u8EF8x,
|
|
25617
|
+
y: PAD + \u6642\u70B9\u306E\u7D1A,
|
|
25618
|
+
textAnchor: "middle",
|
|
25619
|
+
fontSize: \u6642\u70B9\u306E\u7D1A,
|
|
25620
|
+
fontWeight: 700,
|
|
25621
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
25622
|
+
children: "\u524D"
|
|
25623
|
+
}
|
|
25624
|
+
),
|
|
25625
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25626
|
+
"text",
|
|
25627
|
+
{
|
|
25628
|
+
"data-cdl-role": "chart-slope-period",
|
|
25629
|
+
x: \u53F3\u8EF8x,
|
|
25630
|
+
y: PAD + \u6642\u70B9\u306E\u7D1A,
|
|
25631
|
+
textAnchor: "middle",
|
|
25632
|
+
fontSize: \u6642\u70B9\u306E\u7D1A,
|
|
25633
|
+
fontWeight: 700,
|
|
25634
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
25635
|
+
children: "\u4ECA"
|
|
25636
|
+
}
|
|
25637
|
+
)
|
|
25638
|
+
] }),
|
|
25639
|
+
\u7CFB\u5217\u305F\u3061.map((s, i) => {
|
|
25640
|
+
const \u5DE6y = y\u3092\u53D6\u308B(s.\u524D);
|
|
25641
|
+
const \u53F3y = y\u3092\u53D6\u308B(s.\u4ECA);
|
|
25642
|
+
const \u672A\u89E3\u6C7A = s.\u672A\u89E3\u6C7A ? "true" : void 0;
|
|
25643
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
25644
|
+
\u524D\u3042\u308A && /* @__PURE__ */ jsxRuntime.jsx(
|
|
25645
|
+
"path",
|
|
25646
|
+
{
|
|
25647
|
+
"data-cdl-role": "chart-slope-line",
|
|
25648
|
+
"data-cdl-unresolved": \u672A\u89E3\u6C7A,
|
|
25649
|
+
d: `M ${\u5DE6\u8EF8x} ${\u5DE6y} L ${\u53F3\u8EF8x} ${\u53F3y}`,
|
|
25650
|
+
fill: "none",
|
|
25651
|
+
stroke: s.\u8272,
|
|
25652
|
+
strokeWidth: 2.5,
|
|
25653
|
+
strokeLinecap: "round",
|
|
25654
|
+
...\u4F38\u3070\u3059dash(drawing, \u4F38\u3073)
|
|
25655
|
+
}
|
|
25656
|
+
),
|
|
25657
|
+
\u524D\u3042\u308A && /* @__PURE__ */ jsxRuntime.jsx(
|
|
25658
|
+
"circle",
|
|
25659
|
+
{
|
|
25660
|
+
"data-cdl-role": "chart-slope-dot",
|
|
25661
|
+
"data-cdl-unresolved": \u672A\u89E3\u6C7A,
|
|
25662
|
+
cx: \u5DE6\u8EF8x,
|
|
25663
|
+
cy: \u5DE6y,
|
|
25664
|
+
r: 4,
|
|
25665
|
+
fill: s.\u8272
|
|
25666
|
+
}
|
|
25667
|
+
),
|
|
25668
|
+
\u53F3\u3092\u51FA\u3059 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
25669
|
+
"circle",
|
|
25670
|
+
{
|
|
25671
|
+
"data-cdl-role": "chart-slope-dot",
|
|
25672
|
+
"data-cdl-unresolved": \u672A\u89E3\u6C7A,
|
|
25673
|
+
cx: \u53F3\u8EF8x,
|
|
25674
|
+
cy: \u53F3y,
|
|
25675
|
+
r: 4,
|
|
25676
|
+
fill: s.\u8272
|
|
25677
|
+
}
|
|
25678
|
+
),
|
|
25679
|
+
\u524D\u3042\u308A ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25680
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25681
|
+
"text",
|
|
25682
|
+
{
|
|
25683
|
+
"data-cdl-role": "chart-slope-value",
|
|
25684
|
+
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25685
|
+
y: \u5DE6y + 5,
|
|
25686
|
+
textAnchor: "end",
|
|
25687
|
+
fontSize: \u5024\u306E\u7D1A,
|
|
25688
|
+
fontWeight: 600,
|
|
25689
|
+
fill: "var(--cdl-text, #1a1f2a)",
|
|
25690
|
+
children: \u5DE6\u306E\u5B57[i]
|
|
25691
|
+
}
|
|
25692
|
+
),
|
|
25693
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25694
|
+
"text",
|
|
25695
|
+
{
|
|
25696
|
+
"data-cdl-role": "chart-slope-name",
|
|
25697
|
+
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067 - \u5DE6\u5024\u5E45 - \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
|
|
25698
|
+
y: \u5DE6y + 5,
|
|
25699
|
+
textAnchor: "end",
|
|
25700
|
+
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25701
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
25702
|
+
children: s.\u540D\u524D
|
|
25703
|
+
}
|
|
25704
|
+
)
|
|
25705
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
25706
|
+
"text",
|
|
25707
|
+
{
|
|
25708
|
+
"data-cdl-role": "chart-slope-name",
|
|
25709
|
+
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25710
|
+
y: \u53F3y + 5,
|
|
25711
|
+
textAnchor: "end",
|
|
25712
|
+
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25713
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
25714
|
+
children: s.\u540D\u524D
|
|
25715
|
+
}
|
|
25716
|
+
),
|
|
25717
|
+
\u53F3\u3092\u51FA\u3059 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25718
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25719
|
+
"text",
|
|
25720
|
+
{
|
|
25721
|
+
"data-cdl-role": "chart-slope-value",
|
|
25722
|
+
x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25723
|
+
y: \u53F3y + 5,
|
|
25724
|
+
fontSize: \u5024\u306E\u7D1A,
|
|
25725
|
+
fontWeight: 600,
|
|
25726
|
+
fill: "var(--cdl-text, #1a1f2a)",
|
|
25727
|
+
children: \u53F3\u306E\u5B57[i]
|
|
25728
|
+
}
|
|
25729
|
+
),
|
|
25730
|
+
\u524D\u3042\u308A && /* @__PURE__ */ jsxRuntime.jsx(
|
|
25731
|
+
"text",
|
|
25732
|
+
{
|
|
25733
|
+
"data-cdl-role": "chart-slope-name",
|
|
25734
|
+
x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u53F3\u5024\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
|
|
25735
|
+
y: \u53F3y + 5,
|
|
25736
|
+
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25737
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
25738
|
+
children: s.\u540D\u524D
|
|
25739
|
+
}
|
|
25740
|
+
)
|
|
25741
|
+
] })
|
|
25742
|
+
] }, `slope-${i}`);
|
|
25743
|
+
})
|
|
25744
|
+
] });
|
|
25745
|
+
}
|
|
25746
|
+
function \u5370\u306E\u82724(tone, idx) {
|
|
25747
|
+
if (tone) return TONE[tone];
|
|
25748
|
+
return chartSeriesColor(idx);
|
|
25749
|
+
}
|
|
25750
|
+
function \u53CE\u3081\u308B\u7D1A2(\u540D\u524D\u305F\u3061, \u5E45, \u4E0A\u9650, \u4E0B\u9650) {
|
|
25751
|
+
if (\u540D\u524D\u305F\u3061.length === 0) return \u4E0A\u9650;
|
|
25752
|
+
let \u7D1A = \u4E0A\u9650;
|
|
25753
|
+
while (\u7D1A > \u4E0B\u9650 && Math.max(...\u540D\u524D\u305F\u3061.map((n) => textWidth(n, \u7D1A))) > \u5E45) \u7D1A -= 1;
|
|
25754
|
+
return \u7D1A;
|
|
25755
|
+
}
|
|
25517
25756
|
function ChartBarNode({
|
|
25518
25757
|
node,
|
|
25519
25758
|
active,
|
|
@@ -30193,6 +30432,17 @@ function CdlNodeView({
|
|
|
30193
30432
|
return /* @__PURE__ */ jsxRuntime.jsx(ChartGaugeNode, { node: resolvedNode, active, stateValues });
|
|
30194
30433
|
case "chart-stacked-bar":
|
|
30195
30434
|
return /* @__PURE__ */ jsxRuntime.jsx(ChartStackedBarNode, { node: resolvedNode, active, stateValues });
|
|
30435
|
+
case "chart-slope":
|
|
30436
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
30437
|
+
ChartSlopeNode,
|
|
30438
|
+
{
|
|
30439
|
+
node: resolvedNode,
|
|
30440
|
+
active,
|
|
30441
|
+
stateValues,
|
|
30442
|
+
drawing,
|
|
30443
|
+
progress
|
|
30444
|
+
}
|
|
30445
|
+
);
|
|
30196
30446
|
case "chart-waffle":
|
|
30197
30447
|
return /* @__PURE__ */ jsxRuntime.jsx(ChartWaffleNode, { node: resolvedNode, active, stateValues });
|
|
30198
30448
|
case "chart-stat":
|
|
@@ -31974,7 +32224,8 @@ function chart(preset) {
|
|
|
31974
32224
|
radial: "chart-radial",
|
|
31975
32225
|
stat: "chart-stat",
|
|
31976
32226
|
waffle: "chart-waffle",
|
|
31977
|
-
"stacked-bar": "chart-stacked-bar"
|
|
32227
|
+
"stacked-bar": "chart-stacked-bar",
|
|
32228
|
+
slope: "chart-slope"
|
|
31978
32229
|
};
|
|
31979
32230
|
const api = {
|
|
31980
32231
|
datum(d) {
|