@cardenelabs/dragon 0.26.0 → 0.28.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/README.md +42 -8
- package/dist/index.cjs +1417 -369
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +225 -113
- package/dist/index.d.ts +225 -113
- package/dist/index.js +1416 -370
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/compile.ts +1572 -303
- package/src/index.ts +5 -3
- package/src/json-parser.ts +171 -71
- package/src/notation-lint.ts +112 -74
- package/src/schemas/diagram.json +92 -30
- package/src/types.ts +59 -40
- package/src/v05/input-table.generated.ts +6 -4
- package/src/v05/parser-types.ts +12 -1
- package/src/v05/parser.ts +412 -77
package/src/types.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* docs/cdl/text-dsl-spec.md の文法を AST に変換した中間表現
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { CdlDiagram, NodeKind, Tone, EdgeStyle, EdgeHead, EdgeHeadFill, EdgeReveal, ClassRelationType, SequenceMessageKind } from "@cardenelabs/cdl";
|
|
6
|
+
import type { CdlDiagram, NodeKind, Tone, EdgeStyle, EdgeHead, EdgeHeadFill, EdgeReveal, RelationFocus, ClassRelationType, SequenceMessageKind } from "@cardenelabs/cdl";
|
|
7
7
|
import type { DslOnlyKind } from "./v05/parser";
|
|
8
8
|
import type { DslDirection, DslPalette } from "./keywords";
|
|
9
9
|
|
|
@@ -91,13 +91,13 @@ export type Position = {
|
|
|
91
91
|
};
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
|
-
*
|
|
95
|
-
* auto layout の compute value からの offset (dx, dy) を表す。 element の `layoutPos:` が
|
|
96
|
-
* undefined なら auto layout の値をそのまま採用 (catalog 100+ backward compat)、 set 済なら
|
|
97
|
-
* Phase 2 の applyPosOffset pass が offset として適用する。
|
|
94
|
+
* 自動で決まった位置からのずらし (dx, dy) (#1971)。
|
|
98
95
|
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
96
|
+
* JSON は `pos: { x, y }`、記法は `offsetX` / `offsetY` で書く。 内部では、行番号を持つ
|
|
97
|
+
* `pos: Position` と名前が重ならないよう `layoutPos` に入れる。
|
|
98
|
+
*
|
|
99
|
+
* 書かなければ自動の配置のまま。 書くと組み立ての出口 (`applyLayoutOffsets`) が 1 度配置してから
|
|
100
|
+
* 配置後の位置に足して置き直す。 箱と縦列は位置が動き、矢印は名前のずらしに足す。
|
|
101
101
|
*/
|
|
102
102
|
export type LayoutPos = {
|
|
103
103
|
x: number;
|
|
@@ -168,6 +168,16 @@ export type DslDocument = {
|
|
|
168
168
|
* 段に関わらず最初から全部描く。 描き手の `CdlDiagram.edgeReveal` にそのまま渡る。
|
|
169
169
|
*/
|
|
170
170
|
reveal?: EdgeReveal;
|
|
171
|
+
/**
|
|
172
|
+
* 箱に触れると関係する線だけを光らせるか (`relations:`、 #1757)。
|
|
173
|
+
*
|
|
174
|
+
* 既定 (`off`) は何もしない。 `hover` と書くと、箱に触れた時に その箱 ・ 繋がる線 ・
|
|
175
|
+
* 相手の箱だけが光り、他が沈む。 描き手の `CdlDiagram.relationFocus` にそのまま渡る。
|
|
176
|
+
*
|
|
177
|
+
* クラス図と ER 図は **順番を持たない** 図で、段を追う見せ方は「どの順で読ませるか」 しか
|
|
178
|
+
* 運ばない。 触れた箱の関係を光らせれば、読み手の問いにその場で答えられる。
|
|
179
|
+
*/
|
|
180
|
+
relations?: RelationFocus;
|
|
171
181
|
/**
|
|
172
182
|
* 図の並ぶ向き (`direction:`、 #1494)。
|
|
173
183
|
*
|
|
@@ -371,6 +381,14 @@ export type DslActor = {
|
|
|
371
381
|
* 解析の時点ではパーツの定義を知らないため、 名前を決めずに持っておく。
|
|
372
382
|
*/
|
|
373
383
|
colorHex?: string;
|
|
384
|
+
/**
|
|
385
|
+
* 部品に `color:` で書いた色の名前 (`成功` 等) (#1973)。
|
|
386
|
+
*
|
|
387
|
+
* 部品の色の状態は色番号しか受けず、色の名前は箱の色 (`tone`) にしか効かない。 部品には
|
|
388
|
+
* 箱の色を渡さないため、書いても絵が変わらない。 黙って捨てると手掛かりが残らないので、
|
|
389
|
+
* 書いた名前を残して組み立て側が知らせる。
|
|
390
|
+
*/
|
|
391
|
+
partColorName?: Tone;
|
|
374
392
|
/**
|
|
375
393
|
* parts state override (partId set 時のみ有効)。 kind + 既存 reserved fields を除いた
|
|
376
394
|
* inline option の残り (`v: 50` / `count: 100` 等) を state 名 → initial 値 map として保持。
|
|
@@ -410,35 +428,14 @@ export type DslActor = {
|
|
|
410
428
|
*/
|
|
411
429
|
posRel?: RelativePos;
|
|
412
430
|
/**
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
* `spacer` / `s0` 等)、 value = posX/Y/W/H の 4 field。 compile 側は対応 CDL node に単独反映、
|
|
417
|
-
* 同 actor の他 sub-node は影響を受けない (lane 全体 posX とは独立経路)。
|
|
418
|
-
*/
|
|
419
|
-
nodes?: Record<string, DslActorNodeOverride>;
|
|
420
|
-
/**
|
|
421
|
-
* canvas pivot (CAR-1693 Phase 1) DSL 表面 `pos: {x, y}` 由来の layout offset。 未指定は auto
|
|
422
|
-
* layout の compute value そのまま (backward compat)、 set 済なら Phase 2 の applyPosOffset で
|
|
423
|
-
* (auto x + layoutPos.x, auto y + layoutPos.y) に shift される。 既存 posX/posY (絶対座標) は
|
|
424
|
-
* 別 mechanism で、 layoutPos は auto layout からの nudge (dx, dy)。
|
|
431
|
+
* 箱の位置のずらし (#1971)。 配置後の箱の中心を (x, y) だけ動かす。 `posX` / `posY` (座標) とは
|
|
432
|
+
* 別の欄で、座標も書いた時は座標で置いた位置からずらす。 見本 (parts) は見本 1 つ分をまとめて動かす。
|
|
433
|
+
* 同じ縦列の箱に近づくと、描画側が間隔を保つようそちらを押し下げる。
|
|
425
434
|
*/
|
|
426
435
|
layoutPos?: LayoutPos;
|
|
427
436
|
pos: Position;
|
|
428
437
|
};
|
|
429
438
|
|
|
430
|
-
/**
|
|
431
|
-
* canvas pivot UX 修正 (B1) = actor 内 sub-node 単位で「絶対座標 / サイズ」 を固定するための
|
|
432
|
-
* override 値。 全 field optional、 posX / posY が両方 set 済なら CDL 側で該当 sub-node の
|
|
433
|
-
* auto layout を skip、 明示座標をそのまま採用する。 posW / posH は width / height の上書き。
|
|
434
|
-
*/
|
|
435
|
-
export type DslActorNodeOverride = {
|
|
436
|
-
posX?: number;
|
|
437
|
-
posY?: number;
|
|
438
|
-
posW?: number;
|
|
439
|
-
posH?: number;
|
|
440
|
-
};
|
|
441
|
-
|
|
442
439
|
/** 流れ (1 行 = 1 step) (v0.5+ ... inline option 拡張) */
|
|
443
440
|
export type DslStep = {
|
|
444
441
|
no: number;
|
|
@@ -465,8 +462,8 @@ export type DslStep = {
|
|
|
465
462
|
/**
|
|
466
463
|
* 矢印の先の形 (#1462)。 書かなければ従来どおり塗った三角。
|
|
467
464
|
*
|
|
468
|
-
* 4 図の設計は **端の形で関係の種類を示す** = 三角 (
|
|
469
|
-
* 開いた矢 (
|
|
465
|
+
* 4 図の設計は **端の形で関係の種類を示す** = 三角 (継承・実装) / 菱 (集約・コンポジション) /
|
|
466
|
+
* 開いた矢 (関連・依存) / 鳥の足 (多)。 書けないと 4 種とも同じ三角になり、
|
|
470
467
|
* 線の種類 (実線 / 点線) だけで 6 種の関係を区別することになる。
|
|
471
468
|
*
|
|
472
469
|
* 受ける語は描画側の `EDGE_HEADS` から導く = 描画側が増やせば書けるようになる。
|
|
@@ -474,10 +471,16 @@ export type DslStep = {
|
|
|
474
471
|
head?: EdgeHead;
|
|
475
472
|
/** 出どころ側の端の形 (#1466)。 ER は端ごとに違う個数を示すので両端に要る */
|
|
476
473
|
tailHead?: EdgeHead;
|
|
477
|
-
/** 端の印の塗り (#1466)。
|
|
474
|
+
/** 端の印の塗り (#1466)。 白抜きの菱が集約、塗った菱がコンポジション */
|
|
478
475
|
headFill?: EdgeHeadFill;
|
|
479
476
|
/** 出どころ側の印の塗り (#1466) */
|
|
480
477
|
tailHeadFill?: EdgeHeadFill;
|
|
478
|
+
/**
|
|
479
|
+
* クラス図の出どころ側の多重度 (#1771)。 `sub` (行き先の端の多重度) と対。
|
|
480
|
+
*
|
|
481
|
+
* クラス図でだけ効く (関係の語 `relation` と同じ)。 engine が出どころの端の近くに添える。
|
|
482
|
+
*/
|
|
483
|
+
tailSub?: string;
|
|
481
484
|
/**
|
|
482
485
|
* クラス図の関係の種類 (#1466)。 書くと線と端の形と塗りと付く側がまとめて決まる。
|
|
483
486
|
*
|
|
@@ -500,10 +503,19 @@ export type DslStep = {
|
|
|
500
503
|
/** true で説明文を矢印の線の上に重ねる。 分岐図の条件ラベル用。 */
|
|
501
504
|
overlay?: boolean;
|
|
502
505
|
/**
|
|
503
|
-
*
|
|
504
|
-
*
|
|
506
|
+
* 矢印の位置のずらし (#1971)。 矢印の通り道は両端の箱で決まるので、名前のずらし
|
|
507
|
+
* (`labelOffsetX` / `labelOffsetY`) に足して名前だけを動かす。
|
|
505
508
|
*/
|
|
506
509
|
layoutPos?: LayoutPos;
|
|
510
|
+
/**
|
|
511
|
+
* 部品 (parts) の端で、矢印を繋ぐ部品の中の要素の id (#1979)。 出どころ側が `fromPartNode`、
|
|
512
|
+
* 行き先側が `toPartNode`。
|
|
513
|
+
*
|
|
514
|
+
* 要素を 1 つだけ持つ部品は書かなくてもその要素に繋ぐ。 要素を 2 つ以上持つ部品は外枠を持たず
|
|
515
|
+
* 同格の要素が並ぶため、1 つを自動で選ぶと「その要素だけ」 を指す矢印に見える。 書き手が名指しする。
|
|
516
|
+
*/
|
|
517
|
+
fromPartNode?: string;
|
|
518
|
+
toPartNode?: string;
|
|
507
519
|
pos: Position;
|
|
508
520
|
};
|
|
509
521
|
|
|
@@ -516,18 +528,25 @@ export type DslLane = {
|
|
|
516
528
|
contain?: boolean;
|
|
517
529
|
lifeline?: boolean;
|
|
518
530
|
/**
|
|
519
|
-
*
|
|
520
|
-
*
|
|
531
|
+
* 縦列の位置のずらし (#1971)。 配置後の縦列の左上を (x, y) だけ動かし、中の箱も一緒に動く。
|
|
532
|
+
* 1 本でもずらすと全ての縦列を配置後の位置と大きさで固定し、動いた箱を元の位置に留めるので、
|
|
533
|
+
* 他の縦列とその箱は動かない。
|
|
521
534
|
*/
|
|
522
535
|
layoutPos?: LayoutPos;
|
|
523
536
|
pos: Position;
|
|
524
537
|
};
|
|
525
538
|
|
|
526
|
-
/**
|
|
539
|
+
/**
|
|
540
|
+
* 組の宣言 (v0.5+ top-level groups section)。
|
|
541
|
+
*
|
|
542
|
+
* `lanes` に並べた縦列とその中の箱を、 縦列の位置が決まった後に 1 つの枠 (`group-{id}`) で囲む (#1972)。
|
|
543
|
+
* 図に無い縦列は除いて囲み、 1 本も無ければ枠を描かない。 間に束ねない縦列を挟むと、 その縦列ごと囲む。
|
|
544
|
+
* どちらも知らせで伝える。
|
|
545
|
+
*/
|
|
527
546
|
export type DslGroup = {
|
|
528
547
|
id: string;
|
|
529
548
|
label?: string;
|
|
530
|
-
lanes: string[]; //
|
|
549
|
+
lanes: string[]; // 囲む縦列の id
|
|
531
550
|
pos: Position;
|
|
532
551
|
};
|
|
533
552
|
|
|
@@ -25,7 +25,7 @@ export const つまみの表: Record<string, 図形の定義> = {
|
|
|
25
25
|
dropdown: {
|
|
26
26
|
必須: ["options", "defaultValue"],
|
|
27
27
|
欄: {
|
|
28
|
-
options: "
|
|
28
|
+
options: "選択肢の並び",
|
|
29
29
|
defaultValue: "文字列",
|
|
30
30
|
label: "文字列",
|
|
31
31
|
},
|
|
@@ -33,7 +33,7 @@ export const つまみの表: Record<string, 図形の定義> = {
|
|
|
33
33
|
"multi-select": {
|
|
34
34
|
必須: ["options", "defaultValues"],
|
|
35
35
|
欄: {
|
|
36
|
-
options: "
|
|
36
|
+
options: "選択肢の並び",
|
|
37
37
|
defaultValues: "文字列の並び",
|
|
38
38
|
label: "文字列",
|
|
39
39
|
},
|
|
@@ -50,7 +50,7 @@ export const つまみの表: Record<string, 図形の定義> = {
|
|
|
50
50
|
radio: {
|
|
51
51
|
必須: ["options", "defaultValue"],
|
|
52
52
|
欄: {
|
|
53
|
-
options: "
|
|
53
|
+
options: "選択肢の並び",
|
|
54
54
|
defaultValue: "文字列",
|
|
55
55
|
label: "文字列",
|
|
56
56
|
},
|
|
@@ -89,7 +89,7 @@ export const つまみの表: Record<string, 図形の定義> = {
|
|
|
89
89
|
tabs: {
|
|
90
90
|
必須: ["options", "defaultValue"],
|
|
91
91
|
欄: {
|
|
92
|
-
options: "
|
|
92
|
+
options: "選択肢の並び",
|
|
93
93
|
defaultValue: "文字列",
|
|
94
94
|
label: "文字列",
|
|
95
95
|
},
|
|
@@ -119,6 +119,8 @@ export const つまみの表: Record<string, 図形の定義> = {
|
|
|
119
119
|
欄: {
|
|
120
120
|
defaultValue: "真偽",
|
|
121
121
|
label: "文字列",
|
|
122
|
+
onLabel: "文字列",
|
|
123
|
+
offLabel: "文字列",
|
|
122
124
|
},
|
|
123
125
|
},
|
|
124
126
|
xypad: {
|
package/src/v05/parser-types.ts
CHANGED
|
@@ -13,9 +13,20 @@
|
|
|
13
13
|
*
|
|
14
14
|
* `数の並び` は #1389 で足した。 描画側のつまみに `readonly number[]` の欄が 1 つあり
|
|
15
15
|
* (`timeline` の再生速度の候補)、`文字列の並び` として読むと数が文字列のまま図に載る。
|
|
16
|
+
*
|
|
17
|
+
* `選択肢の並び` は #1920 で足した。 選択肢を持つ入力欄の `options` で、要素は文字列か
|
|
18
|
+
* `{ value, label }` の組 (描画側の `CdlInputOption`)。 `文字列の並び` として読むと組を `,` で割る。
|
|
16
19
|
*/
|
|
17
20
|
export type 欄の形 =
|
|
18
|
-
|
|
21
|
+
| "数"
|
|
22
|
+
| "文字列"
|
|
23
|
+
| "数か文字列"
|
|
24
|
+
| "文字列の並び"
|
|
25
|
+
| "数の並び"
|
|
26
|
+
| "向き"
|
|
27
|
+
| "組の並び"
|
|
28
|
+
| "真偽"
|
|
29
|
+
| "選択肢の並び";
|
|
19
30
|
|
|
20
31
|
/** 1 つの種類が受ける、必須の欄と全欄の形 */
|
|
21
32
|
export type 図形の定義 = { 必須: readonly string[]; 欄: Record<string, 欄の形> };
|