@cardenelabs/cdl 0.32.0 → 0.33.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 +21 -1
- package/README.md +27 -1
- 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 +323 -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,25 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.33.0] - 2026-09-07
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **2 時点をつなぐ線で増減と順位の入れ替わりを見せる図を新設した** (#688)
|
|
13
|
+
|
|
14
|
+
`chart-slope` を足した。 左右に縦軸を置き、系列ごとに 前 と 今 を直線で結ぶ。
|
|
15
|
+
線の向きが増減、傾きが動いた量、線の交差が順位の入れ替わりを表す。
|
|
16
|
+
|
|
17
|
+
値は `chart-stacked-bar` と同じ datum の `previous` から読む。 新しい欄は足していない。
|
|
18
|
+
|
|
19
|
+
尺は 0 に固定せず両時点の最小と最大から取る = 近い値どうしの差を傾きで読ませる図なので、
|
|
20
|
+
0 まで伸ばすと線が全部水平に潰れる。
|
|
21
|
+
|
|
22
|
+
`previous` を 1 件も書かない図は線を引かず、軸 1 本に点を並べる。 2 点が無いと傾きが
|
|
23
|
+
定義できず、水平線を引くと「動かなかった」 という別の意味になる。
|
|
24
|
+
|
|
25
|
+
段の `draw` に載せると線が左の軸から右の軸へ伸びる。
|
|
26
|
+
|
|
8
27
|
## [0.32.0] - 2026-09-07
|
|
9
28
|
|
|
10
29
|
### Added
|
|
@@ -1629,7 +1648,8 @@ Initial OSS release.
|
|
|
1629
1648
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
1630
1649
|
行き止まりになる。
|
|
1631
1650
|
|
|
1632
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
1651
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.33.0...HEAD
|
|
1652
|
+
[0.33.0]: https://github.com/cardene777/cdl/compare/v0.32.0...v0.33.0
|
|
1633
1653
|
[0.32.0]: https://github.com/cardene777/cdl/compare/v0.31.1...v0.32.0
|
|
1634
1654
|
[0.31.1]: https://github.com/cardene777/cdl/compare/v0.31.0...v0.31.1
|
|
1635
1655
|
[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,32 @@ 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
|
+
|
|
270
296
|
## 円グラフの見せ方
|
|
271
297
|
|
|
272
298
|
`chart-pie` は `chartPieForm` で見せ方を選ぶ。 欄を書かない図は `ring` と同じ。
|
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-label",
|
|
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-label",
|
|
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-label",
|
|
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-label",
|
|
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-label",
|
|
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) {
|