@cardenelabs/dragon 0.23.0 → 0.26.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/dist/index.cjs +21 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +21 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/compile.ts +17 -5
- package/src/schemas/diagram.json +7 -5
- package/src/types.ts +1 -0
- package/src/v05/parser.ts +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/dragon",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0",
|
|
4
4
|
"description": "Dragon — Mermaid 感覚で animated SVG を生成する Text DSL。 cdl engine を内部利用。",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "cardene777",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"prepublishOnly": "pnpm run typecheck && pnpm run test && pnpm run build"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@cardenelabs/cdl": "^0.
|
|
60
|
+
"@cardenelabs/cdl": "^0.34.0"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"react": "^19.0.0",
|
package/src/compile.ts
CHANGED
|
@@ -273,6 +273,9 @@ export function compileToCdl(doc: DslDocument, opts?: CompileToCdlOpts): CdlDiag
|
|
|
273
273
|
case "stacked":
|
|
274
274
|
diagram = compileValueChart(doc, "stacked", "chart-stacked-bar", opts?.onNotice);
|
|
275
275
|
break;
|
|
276
|
+
case "slope":
|
|
277
|
+
diagram = compileValueChart(doc, "slope", "chart-slope", opts?.onNotice);
|
|
278
|
+
break;
|
|
276
279
|
case "funnel":
|
|
277
280
|
diagram = compileFunnel(doc, opts?.onNotice);
|
|
278
281
|
break;
|
|
@@ -808,6 +811,7 @@ const 図種の作り: Record<PresetType, "登場人物ごとに箱" | "図全
|
|
|
808
811
|
stat: "図全体を 1 箱",
|
|
809
812
|
waffle: "図全体を 1 箱",
|
|
810
813
|
stacked: "図全体を 1 箱",
|
|
814
|
+
slope: "図全体を 1 箱",
|
|
811
815
|
funnel: "図全体を 1 箱",
|
|
812
816
|
tree: "図全体を 1 箱",
|
|
813
817
|
journey: "図全体を 1 箱",
|
|
@@ -1198,6 +1202,7 @@ const 空の形の逃げ先: Record<PresetType, string[]> = {
|
|
|
1198
1202
|
stat: [],
|
|
1199
1203
|
waffle: [],
|
|
1200
1204
|
stacked: [],
|
|
1205
|
+
slope: [],
|
|
1201
1206
|
funnel: [],
|
|
1202
1207
|
tree: [],
|
|
1203
1208
|
journey: [],
|
|
@@ -4083,6 +4088,8 @@ const SINGLE_BOX_KINDS: ReadonlySet<string> = new Set([
|
|
|
4083
4088
|
"quadrant-matrix",
|
|
4084
4089
|
"tree-hierarchy",
|
|
4085
4090
|
"journey-map",
|
|
4091
|
+
// 2 時点を直線でつなぐ図も 1 箱で全体を描く (#1647)
|
|
4092
|
+
"chart-slope",
|
|
4086
4093
|
]);
|
|
4087
4094
|
|
|
4088
4095
|
|
|
@@ -4553,7 +4560,7 @@ function 参照する名前(value: number | string | null): string | null {
|
|
|
4553
4560
|
*/
|
|
4554
4561
|
function compileValueChart(
|
|
4555
4562
|
doc: DslDocument,
|
|
4556
|
-
型: "pie" | "bar" | "line" | "gauge" | "radial" | "stat" | "waffle" | "stacked",
|
|
4563
|
+
型: "pie" | "bar" | "line" | "gauge" | "radial" | "stat" | "waffle" | "stacked" | "slope",
|
|
4557
4564
|
kind:
|
|
4558
4565
|
| "chart-pie"
|
|
4559
4566
|
| "chart-bar"
|
|
@@ -4562,7 +4569,8 @@ function compileValueChart(
|
|
|
4562
4569
|
| "chart-radial"
|
|
4563
4570
|
| "chart-stat"
|
|
4564
4571
|
| "chart-waffle"
|
|
4565
|
-
| "chart-stacked-bar"
|
|
4572
|
+
| "chart-stacked-bar"
|
|
4573
|
+
| "chart-slope",
|
|
4566
4574
|
onNotice?: (notice: CompileNotice) => void,
|
|
4567
4575
|
): CdlDiagram {
|
|
4568
4576
|
const b = diagram(slugify(doc.title), { topic: doc.title, type: "chart" });
|
|
@@ -4592,10 +4600,13 @@ function compileValueChart(
|
|
|
4592
4600
|
// 値の置き場所は記法で 2 通りある。 略記 (`- TypeScript: "45%"`) は説明文に、
|
|
4593
4601
|
// 縦書きの map (`- SliceA: { kind: card, value: "30%" }`) は値に入る。 両方を読む
|
|
4594
4602
|
const value = parseChartValue(a.value ?? a.subtitle);
|
|
4595
|
-
//
|
|
4596
|
-
// 円は取り分、 棒は高さで、 どちらも負に意味が無い (review 指摘)。
|
|
4603
|
+
// **負を受けるのは折れ線と傾き図だけ**。 どちらも増減を追う図なので、気温や損益のように
|
|
4604
|
+
// 0 を跨ぐ値が来る。 円は取り分、 棒は高さで、 どちらも負に意味が無い (review 指摘)。
|
|
4597
4605
|
// 状態を読む欄 (`{名前}`) は書いた時点で符号が決まらないため、この検査を通す
|
|
4598
|
-
if (
|
|
4606
|
+
if (
|
|
4607
|
+
value === null ||
|
|
4608
|
+
(typeof value === "number" && value < 0 && 型 !== "line" && 型 !== "slope")
|
|
4609
|
+
) {
|
|
4599
4610
|
// `pos` を持たない経路がある (JSON 経路で組み立てた actor)。 無ければ 0 のまま
|
|
4600
4611
|
if (読めない.length === 0) 読めない行 = a.pos?.line ?? 0;
|
|
4601
4612
|
読めない.push(a.name);
|
|
@@ -4638,6 +4649,7 @@ function compileValueChart(
|
|
|
4638
4649
|
stat: { 量: "値", 図: "大きな数字", 例: '"1200"' },
|
|
4639
4650
|
waffle: { 量: "割合", 図: "100 個の印", 例: '"45%"' },
|
|
4640
4651
|
stacked: { 量: "内訳の値", 図: "帯", 例: '"320"' },
|
|
4652
|
+
slope: { 量: "値", 図: "傾き図", 例: '"320"' },
|
|
4641
4653
|
};
|
|
4642
4654
|
const 語 = 語の表[型];
|
|
4643
4655
|
|
package/src/schemas/diagram.json
CHANGED
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"stat",
|
|
38
38
|
"waffle",
|
|
39
39
|
"stacked",
|
|
40
|
+
"slope",
|
|
40
41
|
"funnel",
|
|
41
42
|
"tree",
|
|
42
43
|
"journey",
|
|
@@ -44,11 +45,11 @@
|
|
|
44
45
|
"c4",
|
|
45
46
|
"mind"
|
|
46
47
|
],
|
|
47
|
-
"description": "図の種類。 型ごとに actors の書き方が違う。 [関係を描く] sequence (時系列の呼び出し) / flow (処理の流れ) / swimlane (責務ごとの流れ) / er (DB の schema) / state (状態の遷移) / topology (network) / solidity (contract) / class (UML の class) / c4 (architecture) / mind (発想の枝分かれ) は actors に名前を並べ flow に矢印を書く。 [値を描く] pie (割合) / bar (棒の高さ) / line (線の高さ、 書いた順に並ぶ) / gauge (合計を半円で示す) / radial (弧の長さで比べる) / stat (値 1 つを大きく示す) / waffle (割合を 100 個の印で示す) / stacked (内訳を帯で示す) は actors に `- 名前: \"45\"` の形で数を書く。 stat と stacked は `- 名前: { value: \"320\", previous: \"280\" }` の形で前の時点の値も書ける。 funnel (段ごとに減る数) も同じ形。 [語を描く] journey (体験の起伏) は `- 登録: \"不満\"` の形で 最高 / 満足 / 普通 / 不満 / 怒り のどれかを書く。 quadrant (2 軸の仕分け) は `- 重複削除: \"左上\"` の形で 左上 / 右上 / 左下 / 右下 のどれかを書く。 [時期を描く] gantt (工程の並び) は `- 設計: \"1月\"` の形で始まりの時期を書き、 flow の矢印で前後関係を書く。 [親子を描く] tree (親子の入れ子) は actors に名前を並べ flow の矢印で親子を書く (矢印の先が子)"
|
|
48
|
+
"description": "図の種類。 型ごとに actors の書き方が違う。 [関係を描く] sequence (時系列の呼び出し) / flow (処理の流れ) / swimlane (責務ごとの流れ) / er (DB の schema) / state (状態の遷移) / topology (network) / solidity (contract) / class (UML の class) / c4 (architecture) / mind (発想の枝分かれ) は actors に名前を並べ flow に矢印を書く。 [値を描く] pie (割合) / bar (棒の高さ) / line (線の高さ、 書いた順に並ぶ) / gauge (合計を半円で示す) / radial (弧の長さで比べる) / stat (値 1 つを大きく示す) / waffle (割合を 100 個の印で示す) / stacked (内訳を帯で示す) / slope (2 時点を直線でつなぎ増減と順位の入れ替わりを示す) は actors に `- 名前: \"45\"` の形で数を書く。 stat と stacked と slope は `- 名前: { value: \"320\", previous: \"280\" }` の形で前の時点の値も書ける。 funnel (段ごとに減る数) も同じ形。 [語を描く] journey (体験の起伏) は `- 登録: \"不満\"` の形で 最高 / 満足 / 普通 / 不満 / 怒り のどれかを書く。 quadrant (2 軸の仕分け) は `- 重複削除: \"左上\"` の形で 左上 / 右上 / 左下 / 右下 のどれかを書く。 [時期を描く] gantt (工程の並び) は `- 設計: \"1月\"` の形で始まりの時期を書き、 flow の矢印で前後関係を書く。 [親子を描く] tree (親子の入れ子) は actors に名前を並べ flow の矢印で親子を書く (矢印の先が子)"
|
|
48
49
|
},
|
|
49
50
|
"eyebrow": {
|
|
50
51
|
"type": "string",
|
|
51
|
-
"description": "図表の箱の上に出す小見出し (省略可)。 効くのは図全体を 1 箱にする型 (pie / bar / line / gauge / radial / stat / waffle / stacked / funnel / tree / journey / quadrant / mind / gantt) だけ。 箱ごとに分かれる型では相手が決まらないため、 actors[].eyebrow に書く"
|
|
52
|
+
"description": "図表の箱の上に出す小見出し (省略可)。 効くのは図全体を 1 箱にする型 (pie / bar / line / gauge / radial / stat / waffle / stacked / slope / funnel / tree / journey / quadrant / mind / gantt) だけ。 箱ごとに分かれる型では相手が決まらないため、 actors[].eyebrow に書く"
|
|
52
53
|
},
|
|
53
54
|
"axes": {
|
|
54
55
|
"type": "object",
|
|
@@ -121,7 +122,7 @@
|
|
|
121
122
|
},
|
|
122
123
|
"previous": {
|
|
123
124
|
"type": "string",
|
|
124
|
-
"description": "前の時点の値。 type: stacked が 2 本目の帯として描き、type: stat が差として出す。 書かない図は 1 本のまま"
|
|
125
|
+
"description": "前の時点の値。 type: stacked が 2 本目の帯として描き、type: slope が左の点として描き、type: stat が差として出す。 書かない図は 1 本のまま"
|
|
125
126
|
},
|
|
126
127
|
"rows": {
|
|
127
128
|
"type": "array",
|
|
@@ -778,9 +779,10 @@
|
|
|
778
779
|
"mind",
|
|
779
780
|
"tree",
|
|
780
781
|
"gantt",
|
|
781
|
-
"funnel"
|
|
782
|
+
"funnel",
|
|
783
|
+
"slope"
|
|
782
784
|
],
|
|
783
|
-
"description": "この phase で起点から描くもの。 語は図種と揃える。 line / journey = 線が左端から右へ伸びる / bar = 棒が横軸から上へ伸びる / pie = 扇が 12 時から時計回りに開く / mind = 枝が中心から外へ伸びる / tree = 枝が根から下へ伸びる / gantt = 帯が各始端から右へ伸びる / funnel = 段が上端から順に積まれる"
|
|
785
|
+
"description": "この phase で起点から描くもの。 語は図種と揃える。 line / journey = 線が左端から右へ伸びる / bar = 棒が横軸から上へ伸びる / pie = 扇が 12 時から時計回りに開く / mind = 枝が中心から外へ伸びる / tree = 枝が根から下へ伸びる / gantt = 帯が各始端から右へ伸びる / funnel = 段が上端から順に積まれる / slope = 線が左の軸から右の軸へ伸びる"
|
|
784
786
|
},
|
|
785
787
|
"drawRatio": {
|
|
786
788
|
"type": "number",
|
package/src/types.ts
CHANGED
package/src/v05/parser.ts
CHANGED
|
@@ -321,6 +321,7 @@ export const PRESET_TYPES: ReadonlySet<PresetType> = new Set([
|
|
|
321
321
|
"stat",
|
|
322
322
|
"waffle",
|
|
323
323
|
"stacked",
|
|
324
|
+
"slope",
|
|
324
325
|
"funnel",
|
|
325
326
|
"tree",
|
|
326
327
|
"journey",
|
|
@@ -3970,6 +3971,7 @@ export const DRAW_TARGETS: ReadonlyMap<string, PresetType> = new Map<string, Pre
|
|
|
3970
3971
|
["tree", "tree"],
|
|
3971
3972
|
["gantt", "gantt"],
|
|
3972
3973
|
["funnel", "funnel"],
|
|
3974
|
+
["slope", "slope"],
|
|
3973
3975
|
]);
|
|
3974
3976
|
|
|
3975
3977
|
/** `draw:` に書ける語。 表から導く (#1314) */
|