@cardenelabs/dragon 0.34.0 → 0.35.1

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.
Files changed (127) hide show
  1. package/README.md +39 -720
  2. package/dist/cli.cjs +4529 -0
  3. package/dist/cli.cjs.map +1 -0
  4. package/dist/cli.js +4523 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/export.cjs +3912 -0
  7. package/dist/export.cjs.map +1 -0
  8. package/dist/export.d.cts +36 -0
  9. package/dist/export.d.ts +36 -0
  10. package/dist/export.js +3907 -0
  11. package/dist/export.js.map +1 -0
  12. package/dist/fonts.cjs +7 -0
  13. package/dist/fonts.cjs.map +1 -0
  14. package/dist/fonts.js +4 -0
  15. package/dist/fonts.js.map +1 -0
  16. package/dist/index.cjs +4105 -20356
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +227 -5522
  19. package/dist/index.d.ts +227 -5522
  20. package/dist/index.js +4091 -20283
  21. package/dist/index.js.map +1 -1
  22. package/dist/player.global.js +2 -0
  23. package/dist/schema-BBWfniwH.d.cts +112 -0
  24. package/dist/schema-BBWfniwH.d.ts +112 -0
  25. package/package.json +53 -27
  26. package/src/cli.ts +237 -0
  27. package/src/export/capture.ts +277 -0
  28. package/src/export/fonts.ts +68 -0
  29. package/src/export/html.ts +32 -0
  30. package/src/export/index.ts +146 -0
  31. package/src/field-messages.ts +104 -0
  32. package/src/figure-text.ts +42 -0
  33. package/src/index.ts +30 -283
  34. package/src/layout/architecture.ts +381 -0
  35. package/src/layout/measure.ts +21 -0
  36. package/src/layout/scene.ts +353 -0
  37. package/src/layout/sequence.ts +189 -0
  38. package/src/load-fonts.ts +8 -0
  39. package/src/look/fonts.ts +33 -0
  40. package/src/look/palettes.json +209 -0
  41. package/src/look/values.ts +155 -0
  42. package/src/markdown.ts +35 -0
  43. package/src/messages.ts +122 -0
  44. package/src/parser.ts +342 -310
  45. package/src/player-global.ts +4 -0
  46. package/src/player.ts +271 -0
  47. package/src/printer.ts +76 -0
  48. package/src/render/icons.ts +41 -0
  49. package/src/render/motion.ts +106 -0
  50. package/src/render/parts.ts +279 -0
  51. package/src/render/svg.ts +341 -0
  52. package/src/schema.ts +161 -16
  53. package/src/schemas/diagram.schema.json +150 -0
  54. package/src/schemas/validate-diagram.d.ts +12 -0
  55. package/src/schemas/validate-diagram.js +8 -0
  56. package/src/timeline.ts +166 -0
  57. package/src/tokenize.ts +20 -281
  58. package/src/version.ts +55 -0
  59. package/src/view.ts +16 -0
  60. package/src/words.ts +79 -0
  61. package/examples/quick-start.md +0 -142
  62. package/src/canvas-bounds.ts +0 -52
  63. package/src/color.ts +0 -197
  64. package/src/compile/actor-ids.ts +0 -297
  65. package/src/compile/actor-option-notice.ts +0 -379
  66. package/src/compile/actors.ts +0 -103
  67. package/src/compile/c4.ts +0 -74
  68. package/src/compile/chain.ts +0 -93
  69. package/src/compile/chart-fields.ts +0 -193
  70. package/src/compile/deep-rewrite.ts +0 -30
  71. package/src/compile/derived-source.ts +0 -18
  72. package/src/compile/direction.ts +0 -102
  73. package/src/compile/edge-option-notice.ts +0 -112
  74. package/src/compile/er-relation.ts +0 -200
  75. package/src/compile/flow.ts +0 -54
  76. package/src/compile/flowchart.ts +0 -344
  77. package/src/compile/funnel.ts +0 -87
  78. package/src/compile/gantt.ts +0 -337
  79. package/src/compile/generic.ts +0 -696
  80. package/src/compile/hierarchy.ts +0 -92
  81. package/src/compile/journey.ts +0 -93
  82. package/src/compile/kinds.ts +0 -139
  83. package/src/compile/lanes.ts +0 -138
  84. package/src/compile/metro.ts +0 -271
  85. package/src/compile/mind.ts +0 -393
  86. package/src/compile/node-title.ts +0 -24
  87. package/src/compile/notice.ts +0 -141
  88. package/src/compile/order.ts +0 -57
  89. package/src/compile/parts-lookup.ts +0 -17
  90. package/src/compile/parts.ts +0 -2709
  91. package/src/compile/placement-apply.ts +0 -689
  92. package/src/compile/placement.ts +0 -15
  93. package/src/compile/quadrant.ts +0 -265
  94. package/src/compile/record.ts +0 -75
  95. package/src/compile/row-marks.ts +0 -128
  96. package/src/compile/rows.ts +0 -40
  97. package/src/compile/sequence.ts +0 -305
  98. package/src/compile/slug.ts +0 -37
  99. package/src/compile/stages.ts +0 -247
  100. package/src/compile/subtitle.ts +0 -35
  101. package/src/compile/swimlane-marks.ts +0 -87
  102. package/src/compile/swimlane.ts +0 -82
  103. package/src/compile/timeline.ts +0 -213
  104. package/src/compile/topology.ts +0 -44
  105. package/src/compile/tree.ts +0 -69
  106. package/src/compile/value-chart.ts +0 -337
  107. package/src/compile/values.ts +0 -432
  108. package/src/compile/word-state.ts +0 -82
  109. package/src/compile.ts +0 -3168
  110. package/src/focus.ts +0 -46
  111. package/src/input-size.ts +0 -181
  112. package/src/json-line-map.ts +0 -30
  113. package/src/json-parser.ts +0 -4306
  114. package/src/keywords.ts +0 -417
  115. package/src/near-name.ts +0 -42
  116. package/src/notation-lint.ts +0 -342
  117. package/src/relative-pos.ts +0 -251
  118. package/src/schemas/diagram.json +0 -3088
  119. package/src/types.ts +0 -1009
  120. package/src/v05/index.ts +0 -9
  121. package/src/v05/input-table.generated.ts +0 -138
  122. package/src/v05/parser-types.ts +0 -32
  123. package/src/v05/parser.ts +0 -6668
  124. package/src/v05/readout-table.generated.ts +0 -1088
  125. package/src/v05/removed-syntax.ts +0 -115
  126. package/src/value-syntax.ts +0 -313
  127. package/src/write-position.ts +0 -270
package/src/types.ts DELETED
@@ -1,1009 +0,0 @@
1
- /**
2
- * Text DSL の AST 型定義
3
- * docs/cdl/text-dsl-spec.md の文法を AST に変換した中間表現
4
- */
5
-
6
- import type { CdlDiagram, CdlLegendItem, NodeKind, Tone, EdgeStyle, EdgeHead, EdgeHeadFill, EdgeReveal, RelationFocus, ClassRelationType, SequenceMessageKind, RowWell } from "@cardenelabs/cdl";
7
- import type { DslOnlyKind } from "./v05/parser";
8
- import type { DslDiagramShape, DslDirection, DslOrder, DslTheme } from "./keywords";
9
-
10
- /**
11
- * 記法が書ける箱の種類 (#1420)。
12
- *
13
- * 描画できる種類 (`NodeKind`) に、**記法だけが持つ種類** (`entity` / `state` など) を足す。
14
- * 後者は図種ごとの役割分け (ER 図の実体など) に使い、描画側へ渡す手前で
15
- * `compile.ts` の `描ける種別` が読み替える。
16
- *
17
- * `NodeKind` だけに縛っていた間、記法が受ける値を型が表せていなかった。
18
- */
19
- export type DslNodeKind = NodeKind | DslOnlyKind;
20
- import type { RelativePos } from "./relative-pos";
21
-
22
- /**
23
- * 箱の中に描く図形 (#1374)。 **描画側の型をそのまま使う**。
24
- *
25
- * 写して持つと欄が増えた時にずれる。 指した先が変われば型検査が教える。
26
- */
27
- export type DslDynShape = NonNullable<CdlDiagram["nodes"][number]["shape"]>;
28
-
29
- /**
30
- * 値を見せる部品 (#1374)。 図形と同じ理由で描画側の型をそのまま使う。
31
- *
32
- * `pos` は書いた行 (#2405)。 読む元の名前を突き合わせた知らせが、直す行を指すのに使う。
33
- * **図へ載せる時に外す** (`compile.ts` の読み取り値を載せる所) = 残すと、行を足しただけで
34
- * 組み上がる図が変わる。 JSON から読んだ文書は行を持たないため `undefined` になる。
35
- */
36
- export type DslReadout = NonNullable<CdlDiagram["readouts"]>[number] & { pos?: Position };
37
-
38
- /** 読む人が動かすつまみ (#1389)。 部品と同じ理由で描画側の型をそのまま使う */
39
- export type DslInput = NonNullable<CdlDiagram["inputs"]>[number];
40
-
41
- /** つまみの値から決まる値 (#1391)。 描画側の型に、知らせ用の記述位置だけを足す。 */
42
- export type DslFormula = NonNullable<CdlDiagram["formulas"]>[number] & { pos?: Position };
43
-
44
- /** 巻き上げに応じて進む値 (#1393)。 描画側の型をそのまま使う */
45
- export type DslScrollTrigger = NonNullable<CdlDiagram["scrollTriggers"]>[number];
46
-
47
- /**
48
- * 押下などの出来事で動く仕掛け (`events:`、 #1393)。
49
- *
50
- * **描画側の型をそのまま使わない**。 描画側は相手を識別子で持つ (`{ kind: "node", id }`) が、
51
- * 記法は識別子を書けず名前で指す。 名前から識別子への読み替えは組み立てが行うため、
52
- * 記法の段階では「何をどう指したか」 だけを持つ。
53
- */
54
- export type DslEventBinding = {
55
- /** 出来事の種類 (`click` / `hover` など、描画側の `CdlEventKind` と同じ語) */
56
- event: NonNullable<CdlDiagram["eventBindings"]>[number]["event"];
57
- /** 何を指したか。 名前は記法に書かれたまま持ち、組み立てが識別子へ直す */
58
- target:
59
- | { kind: "node"; name: string }
60
- | { kind: "lane"; name: string }
61
- | { kind: "edge"; from: string; to: string }
62
- | { kind: "diagram" };
63
- /** 呼び出す仕掛けの名前。 実体は画面側が持つ */
64
- handlerId: string;
65
- pos: Position;
66
- };
67
-
68
- export type PresetType =
69
- | "sequence"
70
- | "flow"
71
- | "flowchart"
72
- | "swimlane"
73
- /**
74
- * 箱が行を持ち、箱どうしが関係を持つ図 (#2782)。
75
- *
76
- * 畳む前は `er` / `state` / `class` の 3 つに分かれていたが、描画側へ渡す形は同じだった。
77
- * 箱はいずれも `storage`、行頭の印はいずれも 形 (四角 / 山形) × 塗り (塗る / 中空) の
78
- * 2 軸で、違うのはその軸を何と呼ぶかだけだった (`pk` / `fk` / `opt` と
79
- * `entry` / `exit` / `do` / `internal`)。
80
- *
81
- * dragon の語は 3 つ (`鍵` / `外` / `条件`) で、印の 3 軸と 1 対 1 に対応する。
82
- * 古い語は読み取りの入口でこの 3 語へ読み替える (`compile/row-marks.ts` の `行頭の語の別名`)。
83
- */
84
- | "record"
85
- | "topology"
86
- | "gantt"
87
- /**
88
- * 数を描く図 (#2657)。 形は `shape:` が決める。
89
- *
90
- * 畳む前は形ごとに 9 つの型 (`pie` / `bar` / …) を持っていたが、書き方も組み立ても
91
- * 同じで、渡す文字列 2 つしか違わなかった。 古い綴りは読み替えの入口で この型と
92
- * 形の語の組に読み替える。
93
- */
94
- | "chart"
95
- | "funnel"
96
- | "tree"
97
- | "journey"
98
- | "quadrant"
99
- | "c4"
100
- | "mind";
101
-
102
- export type Position = {
103
- line: number;
104
- column?: number;
105
- };
106
-
107
- /**
108
- * 自動で決まった位置からのずらし (dx, dy) (#1971)。
109
- *
110
- * JSON は `pos: { x, y }`、記法は `offsetX` / `offsetY` で書く。 内部では、行番号を持つ
111
- * `pos: Position` と名前が重ならないよう `layoutPos` に入れる。
112
- *
113
- * 書かなければ自動の配置のまま。 書くと組み立ての出口 (`applyLayoutOffsets`) が 1 度配置してから
114
- * 配置後の位置に足して置き直す。 箱と縦列は位置が動き、矢印は名前のずらしに足す。
115
- */
116
- export type LayoutPos = {
117
- x: number;
118
- y: number;
119
- };
120
-
121
- /**
122
- * diagram-level layout mode (CAR-1693 Phase 1)。 未指定は "auto" default で catalog 100+ は
123
- * byte-identical 動作。 "manual" は Phase 4 で drag interaction が「auto layout を skip して
124
- * pos: 値をそのまま採用する」 mode として使う予定。
125
- */
126
- export type LayoutMode = "auto" | "manual";
127
-
128
- /** トップレベル AST */
129
- export type DslDocument = {
130
- title: string;
131
- type: PresetType;
132
- /** 円グラフの見せ方。 読めない語も組み立ての知らせにするため、入口では文字列で保持する。 */
133
- form?: string;
134
- /** `form` を書いた行。 */
135
- formPos?: Position;
136
- /** ガントチャートの目盛り。 書かなければ工程の始まりから作る従来の規則を使う。 */
137
- ticks?: string[];
138
- /** `ticks` を書いた行。 */
139
- ticksPos?: Position;
140
- /** ガントチャートの今日の線の位置と札。 */
141
- ganttToday?: { index: number; label: string };
142
- /** 工程の端とは独立して描く目盛り名。 */
143
- ganttTickLabels?: string[];
144
- /** 帯の終わりを位置として扱う。 */
145
- ganttBarEnd?: "position";
146
- /** 行の字に対して見本の比で細くする。 */
147
- ganttBarThickness?: "thin";
148
- /** 図表の系列色で `muted` の項目を数えない。 */
149
- chartSeriesSkipMuted?: NonNullable<CdlDiagram["nodes"][number]["chartSeriesSkipMuted"]>;
150
- /** 折れ線の複数系列。 */
151
- chartLineSeries?: NonNullable<CdlDiagram["nodes"][number]["chartLineSeries"]>;
152
- /** 円の中心で合計の下に置く字。 */
153
- chartPieCenterLabel?: NonNullable<CdlDiagram["nodes"][number]["chartPieCenterLabel"]>;
154
- /** 円の表に置く列。 */
155
- chartPieTableColumns?: NonNullable<CdlDiagram["nodes"][number]["chartPieTableColumns"]>;
156
- /** 円の輪の太さ。 */
157
- chartPieRingWidth?: NonNullable<CdlDiagram["nodes"][number]["chartPieRingWidth"]>;
158
- /** 傾き図の左右の時点名。 */
159
- chartSlopePeriods?: NonNullable<CdlDiagram["nodes"][number]["chartSlopePeriods"]>;
160
- /** 傾き図で主役にする項目の id。 */
161
- chartSlopeEmphasisIds?: NonNullable<CdlDiagram["nodes"][number]["chartSlopeEmphasisIds"]>;
162
- /** 傾き図の値に付ける単位。 */
163
- chartSlopeUnit?: NonNullable<CdlDiagram["nodes"][number]["chartSlopeUnit"]>;
164
- /** 内訳の帯の期間。 */
165
- chartStackedPeriods?: NonNullable<CdlDiagram["nodes"][number]["chartStackedPeriods"]>;
166
- /** 内訳の帯の右に率を描く項目の id。 */
167
- chartStackedRateId?: NonNullable<CdlDiagram["nodes"][number]["chartStackedRateId"]>;
168
- /** 内訳の帯の凡例の位置。 */
169
- chartStackedLegendPosition?: NonNullable<
170
- CdlDiagram["nodes"][number]["chartStackedLegendPosition"]
171
- >;
172
- /** 半円を固定の尺で読む値。 */
173
- chartGaugeValue?: NonNullable<CdlDiagram["nodes"][number]["chartGaugeValue"]>;
174
- /** 升目の一覧を置く側。 */
175
- chartWaffleLegendPosition?: NonNullable<
176
- CdlDiagram["nodes"][number]["chartWaffleLegendPosition"]
177
- >;
178
- /** 漏斗の形。 */
179
- funnelForm?: NonNullable<CdlDiagram["nodes"][number]["funnelForm"]>;
180
- /** 漏斗に描く率。 */
181
- funnelRate?: NonNullable<CdlDiagram["nodes"][number]["funnelRate"]>;
182
- /** 座標で置いた四象限の点の名前を置く側。 */
183
- quadrantPointLabelSide?: NonNullable<
184
- CdlDiagram["nodes"][number]["quadrantPointLabelSide"]
185
- >;
186
- /** 木の箱を根まで同じ枠で描くか。 */
187
- treeNodeForm?: NonNullable<CdlDiagram["nodes"][number]["treeNodeForm"]>;
188
- /** 木の札・字・枝間の寸法。 */
189
- treeSize?: NonNullable<CdlDiagram["nodes"][number]["treeSize"]>;
190
- /** 木の枝色を 1 色にするか、段ごとに分けるか。 */
191
- treeEdgeTone?: NonNullable<CdlDiagram["nodes"][number]["treeEdgeTone"]>;
192
- /** 木の枝先の印。 */
193
- treeEdgeHead?: NonNullable<CdlDiagram["nodes"][number]["treeEdgeHead"]>;
194
- /** 放射の中心・枝・葉を、面か輪郭のどちらで描くか。 */
195
- mindForm?: NonNullable<CdlDiagram["nodes"][number]["mindForm"]>;
196
- /** 放射の札・字・枝間の寸法。 */
197
- mindSize?: NonNullable<CdlDiagram["nodes"][number]["mindSize"]>;
198
- /** ジャーニーの段を帯か罫で描くか。 */
199
- journeyForm?: NonNullable<CdlDiagram["nodes"][number]["journeyForm"]>;
200
- /** ジャーニーの点を曲線か直線で結ぶか。 */
201
- journeyLineForm?: NonNullable<CdlDiagram["nodes"][number]["journeyLineForm"]>;
202
- /** ジャーニーの 5 段に描く名前。 */
203
- journeyLabels?: NonNullable<CdlDiagram["nodes"][number]["journeyLabels"]>;
204
- /** ジャーニーの描画面と点列の左右余白。 */
205
- journeySize?: NonNullable<CdlDiagram["nodes"][number]["journeySize"]>;
206
- /** 図表の見出し帯と足。 */
207
- figureCard?: NonNullable<CdlDiagram["nodes"][number]["figureCard"]>;
208
- /** 端末意匠用の窓操作・字送り・行番号。 */
209
- terminalDecoration?: NonNullable<CdlDiagram["nodes"][number]["terminalDecoration"]>;
210
- /** 矩形札の一様角と手描き角を意匠で選ぶ。 */
211
- cornerForm?: NonNullable<CdlDiagram["nodes"][number]["cornerForm"]>;
212
- /** 階層図とマインドマップの種類札。 */
213
- figureKindLabel?: NonNullable<CdlDiagram["nodes"][number]["figureKindLabel"]>;
214
- /** 図表札の見出しと足の間に置く飾りの凹み面。 */
215
- figureInset?: {
216
- top?: number;
217
- right?: number;
218
- bottom?: number;
219
- left?: number;
220
- radius?: number;
221
- };
222
- /** 棒グラフの見本寸法。 */
223
- chartBarSize?: NonNullable<CdlDiagram["nodes"][number]["chartBarSize"]>;
224
- /** 棒グラフの棒を分割するか、上だけ丸めて一体にするか。 */
225
- chartBarShape?: NonNullable<CdlDiagram["nodes"][number]["chartBarShape"]>;
226
- /** 折れ線グラフの見本寸法。 */
227
- chartLineSize?: NonNullable<CdlDiagram["nodes"][number]["chartLineSize"]>;
228
- /** 円グラフの見本寸法。 */
229
- chartPieSize?: NonNullable<CdlDiagram["nodes"][number]["chartPieSize"]>;
230
- /** 升目図の左端と升目の送り。 */
231
- chartWaffleSize?: NonNullable<CdlDiagram["nodes"][number]["chartWaffleSize"]>;
232
- /** 傾き図の左右の札の書式。 */
233
- chartSlopeLabelTemplate?: NonNullable<
234
- CdlDiagram["nodes"][number]["chartSlopeLabelTemplate"]
235
- >;
236
- /** 傾き図の見本寸法。 */
237
- chartSlopeSize?: NonNullable<CdlDiagram["nodes"][number]["chartSlopeSize"]>;
238
- /** 内訳の帯の見本配置。 */
239
- chartStackedLayout?: NonNullable<CdlDiagram["nodes"][number]["chartStackedLayout"]>;
240
- /** 半円図の見本寸法。 */
241
- chartGaugeSize?: NonNullable<CdlDiagram["nodes"][number]["chartGaugeSize"]>;
242
- /** ガント図の見本寸法。 */
243
- ganttSize?: NonNullable<CdlDiagram["nodes"][number]["ganttSize"]>;
244
- /** 四象限の区画名を置く位置。 */
245
- quadrantLabelPosition?: NonNullable<
246
- CdlDiagram["nodes"][number]["quadrantLabelPosition"]
247
- >;
248
- /** 四象限の見本寸法。 */
249
- quadrantSize?: NonNullable<CdlDiagram["nodes"][number]["quadrantSize"]>;
250
- /**
251
- * 図全体を 1 箱にする図種の札の大きさ。
252
- *
253
- * `viewport` は図全体の画布なので分ける。`width` / `height` は既存の viewport と lane の
254
- * 綴りに揃え、描画側だけが使う短い `w` / `h` を記法へ漏らさない。
255
- */
256
- figureSize?: { width: number; height: number };
257
- /** 図の下へ指定順に置く凡例。 */
258
- legend?: CdlLegendItem[];
259
- /** 図全体の凡例の位置を既定位置からずらす。 */
260
- legendOffset?: NonNullable<CdlDiagram["legendOffset"]>;
261
- /** 線の両端と発着する箱の縁との隙間。 */
262
- edgeEndGap?: NonNullable<CdlDiagram["edgeEndGap"]>;
263
- /** 順序図の参加者を枠で囲む。 */
264
- sequenceActorForm?: "box";
265
- /** 順序図の段へ種類印と種類名を添える。 */
266
- sequenceLabelForm?: "kind";
267
- /** 順序図の返す言づてにも塗った三角の矢じりを使う。 */
268
- sequenceReturnHead?: "solid";
269
- /** 順序図の言づての段の間。 */
270
- sequenceRowGap?: number;
271
- /** 順序図の左の札の列幅。 */
272
- sequenceGutter?: number;
273
- /** 順序図の動いている間の帯幅。 */
274
- sequenceBandWidth?: number;
275
- /** 順序図の自分へ戻る線の形と寸法。 */
276
- sequenceSelfLoop?: { form?: "orthogonal"; width?: number; drop?: number };
277
- /** 順序図の種類名の表示語。 */
278
- sequenceKindLabels?: Partial<Record<"call" | "return" | "fire", string>>;
279
- /** 図の凡例の字の大きさ。 */
280
- legendFontSize?: number;
281
- /** 段の箱で全意匠に共通して使う見出しの寸法。 */
282
- stageHeader?: DslStageHeader;
283
- /** 段の列幅・列間と戻る線の迂回寸法。 */
284
- stageLayout?: NonNullable<CdlDiagram["stageLayout"]>;
285
- /**
286
- * 図全体を 1 箱にする図種 (`pie` / `bar` / `line` / `funnel` / `tree` / `journey` /
287
- * `quadrant` / `mind` / `gantt`) で、 その箱の上に出す小見出し (#1247)。
288
- *
289
- * これらの図種は箱を 1 つしか作らないため「どの箱の小見出しか」 が決まる。 箱ごとに
290
- * 分かれる図種では決まらないので、 書かれていたら組み立て側が知らせる。
291
- */
292
- eyebrow?: string;
293
- /**
294
- * `eyebrow` を書いた行 (#1247)。 知らせの行番号に使う。
295
- *
296
- * 図の `pos` は常に 1 行目を指すため、 そこを使うと「10 行目に書いた `eyebrow` が効かない」
297
- * を 1 行目として知らせることになり、 書いた場所に辿り着けない。
298
- */
299
- eyebrowPos?: Position;
300
- /**
301
- * 2 軸で仕分ける図 (`type: quadrant`) の軸の名前 (#1251)。
302
- *
303
- * 書かないと「小さい / 大きい」 のままになり、何を判断する図か読めない。
304
- * 区画の名前 (`右上` 等) は軸の名前から `{上} × {右}` の形で決まる。
305
- *
306
- * 他の図種には軸が無いため、書かれていたら組み立て側が知らせる。
307
- */
308
- axes?: DslAxes;
309
- /** `axes` を書いた行 (#1251)。 知らせの行番号に使う */
310
- axesPos?: Position;
311
- /**
312
- * 2 軸で仕分ける図の区画の名前 (#2667)。
313
- *
314
- * `axes` が軸の両端の名前を持つのに対し、こちらは区画の中に出す名前を持つ。
315
- * 軸の掛け合わせ (`効果が大きい × 手間が小さい`) から一段離れた言い方
316
- * (`すぐやる`) を書くための欄。
317
- */
318
- regions?: DslRegions;
319
- actors: DslActor[];
320
- flow: DslStep[];
321
- animate?: DslAnimate;
322
- /**
323
- * 他の値から自動で決まる値 (`values:`)。 時間を持たず、 参照した値が動けば常に追随する。
324
- *
325
- * `states` (初期値だけを持つ) と `animation` (いつ何を動かすか) の間に置く層で、
326
- * 値どうしの関係を書く場所。 書かなければ今までと同じ挙動。
327
- */
328
- values?: DslValue[];
329
- /** v0.5+ 拡張 ... viewport / lanes / groups */
330
- viewport?: DslViewport;
331
- lanes?: Record<string, DslLane>;
332
- /**
333
- * 動いている間の帯 (#1466)。 順序図だけが読む。
334
- *
335
- * 書かなければ面ごとに「最初に関わった段から最後まで」 の 1 本。 途中で手が空く面を
336
- * 分けたい図だけ書く = どこで手が空くかは言づての並びからは決まらない。
337
- */
338
- bands?: DslBand[];
339
- /**
340
- * 矢印をいつ出すか (`reveal:`、 #1470)。
341
- *
342
- * 既定 (`phase`) は「段が名指しする矢印は、その段が来るまで描かない」。 `all` と書くと
343
- * 段に関わらず最初から全部描く。 描き手の `CdlDiagram.edgeReveal` にそのまま渡る。
344
- */
345
- reveal?: EdgeReveal;
346
- /**
347
- * 箱に触れると関係する線だけを光らせるか (`relations:`、 #1757)。
348
- *
349
- * 既定 (`off`) は何もしない。 `hover` と書くと、箱に触れた時に その箱 ・ 繋がる線 ・
350
- * 相手の箱だけが光り、他が沈む。 描き手の `CdlDiagram.relationFocus` にそのまま渡る。
351
- *
352
- * UML の関係や表の関係を描く record は **順番を持たない** 図で、段を追う見せ方は「どの順で読ませるか」 しか
353
- * 運ばない。 触れた箱の関係を光らせれば、読み手の問いにその場で答えられる。
354
- */
355
- relations?: RelationFocus;
356
- /**
357
- * 図の並ぶ向き (`direction:`、 #1494)。
358
- *
359
- * `縦` は 1 つの縦列に積み、`横` は 1 人ずつ縦列を作る。 効くのはフローと泳法図だけで、
360
- * 他の図種は並び方そのものが読み方を担うため書いても効かない (知らせを出す)。
361
- *
362
- * 全ての箱が縦列を書いた形では、書いた縦列が勝つ (同じく知らせを出す)。
363
- */
364
- direction?: DslDirection;
365
- /** `direction:` を書いた行。 効かない時の知らせで、書いた場所を指すために持つ */
366
- directionPos?: { line: number };
367
- /**
368
- * 箱を並べる順 (`order:`、 #2655)。
369
- *
370
- * 書かなければ書いた順のまま。 `種類` と書くと箱の種類で並べ替えてから置く。
371
- * 効くのは順序図だけで、他の図種は並び方そのものが読み方を担うため書いても効かない
372
- * (知らせを出す)。
373
- *
374
- * 並べ替えの鍵しか持たない図種を畳んだ先。 その図種 (`solidity`) は特定の技術に向けた
375
- * 名前なので外した (#2947)。
376
- */
377
- order?: DslOrder;
378
- /** `order:` を書いた行。 効かない時の知らせで、書いた場所を指すために持つ */
379
- orderPos?: { line: number };
380
- /** 図種ごとに選ぶ形 (#2657 / #2797)。 書ける語は `DIAGRAM_SHAPES` が決める */
381
- shape?: DslDiagramShape;
382
- /** `shape:` を書いた行。 効かない時の知らせで、書いた場所を指すために持つ */
383
- shapePos?: { line: number };
384
- /**
385
- * 図の意匠 (`theme:`、 #1553 / #2790)。
386
- *
387
- * 名前だけを持つ。 実際の色は消費側 (`cdl-theme.css`) が決めるので、ここには値を書かない。
388
- * `palette:` も同じ意匠を書く別名として読む。record の用途は一つに決められないため、
389
- * UML クラス図の生成り色が要る時も本文で明記する。
390
- */
391
- theme?: DslTheme;
392
- /** `theme:` と別名の `palette:` を両方書いた時の行 (#2790)。 */
393
- themeAlsoPalettePos?: { themeLine: number; paletteLine: number };
394
- groups?: Record<string, DslGroup>;
395
- /**
396
- * 値を見せる部品 (`readouts:`、 #1374)。 割合の輪や数え上げを図の脇に出す。
397
- *
398
- * 箱ではないので縦列に載らない。 図全体に 1 つの並びとして持つ。
399
- */
400
- readouts?: DslReadout[];
401
- /**
402
- * 読む人が動かすつまみ (`inputs:`、 #1389)。 つまみが握る値は状態と同じ名前で参照できる。
403
- *
404
- * 部品と同じく箱ではないので縦列に載らない。 図全体に 1 つの並びとして持つ。
405
- */
406
- inputs?: DslInput[];
407
- /**
408
- * つまみの値から決まる値 (`formulas:`、 #1391)。
409
- *
410
- * **`values:` とは経路が別**。 あちらは段が動かす状態を読んで毎 frame 決まり直す
411
- * (`derived`) のに対し、こちらはつまみが握る値を読む反応の網に載る (`formulas`)。
412
- * 描画側がこの 2 つを別の欄として持つため、記法でも別の項目にする。
413
- *
414
- * 式は描画側の書き方。 名前は中括弧で囲っても囲わなくてもよい (描画側の parser が
415
- * どちらも同じ名前として読む)。
416
- */
417
- formulas?: DslFormula[];
418
- /**
419
- * 押下などの出来事で動く仕掛け (`events:`、 #1393)。
420
- *
421
- * 相手は名前で指す。 組み立てが識別子へ直し、指す先が無ければ知らせる。
422
- */
423
- events?: DslEventBinding[];
424
- /**
425
- * 巻き上げに応じて進む値 (`scrolls:`、 #1393)。
426
- *
427
- * 画面を巻き上げた量から 0 から 1 の進み具合を作る。 描画側はこれを値として読む。
428
- */
429
- scrolls?: DslScrollTrigger[];
430
- /**
431
- * canvas pivot (CAR-1693 Phase 1) diagram-level layout mode。 未指定は "auto" default で
432
- * catalog 100+ backward compat。 "manual" は Phase 4 で drag → pos: 保存の完全 manual mode。
433
- */
434
- layout?: LayoutMode;
435
- pos: Position;
436
- };
437
-
438
- /** 2 軸で仕分ける図の軸の名前 (#1251) */
439
- export type DslAxes = {
440
- x?: { left?: string; right?: string; label?: never; direction?: never } | DslAxisDirection;
441
- y?: { bottom?: string; top?: string; label?: never; direction?: never } | DslAxisDirection;
442
- };
443
-
444
- /** 端の名前ではなく、向き付きの軸名を 1 つだけ描く形。 */
445
- export type DslAxisDirection = { label: string; direction: true };
446
-
447
- /**
448
- * 2 軸で仕分ける図の区画の名前 (#2667)。
449
- *
450
- * 欄の名前は描画側の区画の綴りに揃える。 記法では `左上` のような語で書き、
451
- * 解析の時にここへ直す = 区画を指す語を 2 通り持たないため。
452
- */
453
- export type DslRegions = {
454
- topLeft?: string;
455
- topRight?: string;
456
- bottomLeft?: string;
457
- bottomRight?: string;
458
- };
459
-
460
-
461
- /** 登場人物 (v0.5+ ... inline option 拡張) */
462
- export type DslActor = {
463
- name: string;
464
- kind: DslNodeKind;
465
- /**
466
- * 著者が種類を書いたか。 書かなかった時 `kind` には既定の `actor` が入るため、
467
- * `kind` の値だけでは「書いた `actor`」 と「書かなかった」 を区別できない。
468
- *
469
- * 順序図の名札は小型の箱 (`h: 72`) で作られる。 描画側は `card` に小型用の分岐を持つが
470
- * `actor` には無く、 名札の文字が箱の下端をはみ出す。 書いた時だけ種類を名札に載せ、
471
- * 書かなかった時は小型に耐える形のまま残すために、 この 2 つを区別する (#1058)。
472
- */
473
- kindWritten?: boolean;
474
- /** v0.5+ inline option */
475
- subtitle?: string;
476
- /** kind の意味を保ったまま共通の部品箱で描く。 */
477
- kindForm?: "icon";
478
- /** 共通の部品箱へ描く線画。 */
479
- icon?: "person" | "box" | "database" | "lightning" | "cloud" | "terminal";
480
- /** 行を持たない表の箱で行の代わりに描く注記。 */
481
- emptyRowsNote?: string;
482
- /** 表の箱の名前と小見出しを中央へ揃える。 */
483
- titleAlign?: "center";
484
- /** 表の箱の行の間に罫線を引く。 */
485
- rowRules?: boolean;
486
- /** 表の箱の行へ交互の縞を敷く。 */
487
- rowStripe?: boolean;
488
- /** 表の箱の題と行の baseline。 */
489
- rowLayout?: NonNullable<CdlDiagram["nodes"][number]["rowLayout"]>;
490
- /** 表の箱の見出し下の線を左右端まで引く。 */
491
- rowDividerForm?: "full";
492
- /** 表の箱の行のまとまりを収める透明な面。 */
493
- rowWell?: RowWell;
494
- /** 表の箱の行頭の印を色の段で分ける。 */
495
- rowMarkForm?: "tone";
496
- /** 表の箱を内側へ抱える親の表の箱の名前。 */
497
- nestIn?: string;
498
- /** 表または共通の部品箱の足。 */
499
- figureCard?: NonNullable<CdlDiagram["nodes"][number]["figureCard"]>;
500
- /** 路線図の駅名を駅の上下どちらへ置くか。 */
501
- stationNamePosition?: "bottom";
502
- /** 時間軸の担当を札のどちらへ置くか。 */
503
- subtitlePlacement?: "right";
504
- /** 流れ図の function の札の題の大きさ。 */
505
- titleFontSize?: number;
506
- /** 流れ図の始まり・終わりの印と次の箱との間。 */
507
- markGap?: number;
508
- eyebrow?: string;
509
- value?: string;
510
- /**
511
- * 前の時点の値 (#1450)。
512
- *
513
- * 内訳の変化を帯で示す図 (`type: stacked`) が 2 本目の帯として描き、値 1 つを大きく示す図
514
- * (`type: stat`) が差として出す。 書かない図は 1 本のまま (従来と同じ)。
515
- *
516
- * **3 時点以上は持たない**。 描画側が 2 時点で設計されており (`cdl#551`)、足すなら欄の形ごと
517
- * 決め直すことになる。
518
- */
519
- previous?: string;
520
- rows?: string[];
521
- /**
522
- * 行頭の印 (#1466)。 `rows` と同じ並びで、空文字はその行に印を付けない。
523
- *
524
- * **語の意味は図の種類が決める**。 ER は `pk` / `fk` / `opt`、状態遷移は
525
- * `entry` / `exit` / `do` / `internal`。 印の 2 軸 (形 × 塗り) は共通だが、その軸が
526
- * 何を指すかは種類ごとに違う。
527
- */
528
- marks?: Array<string | { mark: string; tone?: "primary" | "muted" }>;
529
- /**
530
- * 箱の中に描く図形 (`shape:`、 #1374)。 水位や角度を状態で動かせる。
531
- *
532
- * 種類ごとに書ける欄が違う (`図形の表`)。 知らない種類と欄は読み取りが知らせる。
533
- */
534
- shape?: DslDynShape;
535
- /**
536
- * 箱に出す題 (`title:`、 #1381)。 書かなければ名前がそのまま題になる。
537
- *
538
- * 名前は図の中で 1 つに決まる必要がある (`focus:` と `flow:` が名前で指すため) 一方、
539
- * 題は重なってよい。 同じ題の箱を並べる図と、題を持たない箱を、名前と切り離して書ける。
540
- */
541
- title?: string;
542
- /**
543
- * その箱を出すかどうかの条件 (`visibleIf:`、 #1381)。
544
- *
545
- * 状態を差し込める文字列で、描画側が真偽を判定する。 `"0"` / `"false"` / 空文字が偽で、
546
- * それ以外は真。 値だけを見せる図が、場所を空けるためだけの見えない箱を置くのに使う。
547
- */
548
- visibleIf?: string;
549
- /**
550
- * 箱の幅と高さを値に追随させる (`wBind:` / `hBind:`、 #1392)。
551
- *
552
- * 状態の名前を `{名前}` の形で書く。 配置計算は追随前の `posW` / `posH` を使い、
553
- * 描く時だけ値に合わせて伸び縮みする (矢印の通り道が動かないようにするための分離)。
554
- */
555
- wBind?: string;
556
- hBind?: string;
557
- /**
558
- * 箱の濃さ (`opacity:`、 #1392)。 0 から 1 の数か、状態の名前を書く。
559
- *
560
- * 書かなければ完全に見える状態になる。 `visibleIf` が出す / 出さないの 2 値なのに対し、
561
- * こちらは途中の濃さを持てる。
562
- */
563
- opacity?: number | string;
564
- /**
565
- * 描く時だけ箱をずらす量 (`renderOffsetX:` / `renderOffsetY:`、 #1392)。
566
- *
567
- * 配置計算と矢印はずらす前の位置を使うため、円周上に並べて見せる等の見た目専用。
568
- * 数か、状態の名前を書く。
569
- */
570
- renderOffsetX?: number | string;
571
- renderOffsetY?: number | string;
572
- /**
573
- * 工程の並び (`type: gantt`) で、その工程の担当 (#1251)。
574
- *
575
- * 他の図種では相手が無いため、書かれていたら組み立て側が知らせる。
576
- */
577
- owner?: string;
578
- /**
579
- * 工程の並び (`type: gantt`) で、その工程が終わる時期 (#1251)。
580
- *
581
- * 書かなければ始まりと同じ時期に終わる (帯が 1 コマ)。 `{名前}` を書くと状態から取り、
582
- * 段で帯が伸び縮みする様子を見せられる。
583
- *
584
- * 他の図種では相手が無いため、書かれていたら組み立て側が知らせる。
585
- */
586
- end?: string;
587
- /** 工程の始まりに出す札。節目の位置名とは独立して書ける。 */
588
- startLabel?: string;
589
- /** 帯を菱形の節目として描く。 */
590
- milestone?: boolean;
591
- /** 工程の帯を主役として描く。 */
592
- emphasis?: "primary";
593
- /**
594
- * 四象限の点を置く座標。 左下が (0, 0)、右上が (1, 1)。
595
- * 数のほか `{名前}` を受け、描画側の BoundNumber へそのまま渡す。
596
- */
597
- at?: { x?: number | string; y?: number | string; raw: string };
598
- /** `at` を書いた行。 */
599
- atPos?: Position;
600
- /**
601
- * ユーザージャーニー (`type: journey`) で、その段階が起きる場所 (#1251)。
602
- *
603
- * 「どこで起きたか」 を段の下に出す。 他の図種では相手が無いため、書かれていたら
604
- * 組み立て側が知らせる。
605
- */
606
- touchpoint?: string;
607
- /**
608
- * ユーザージャーニー (`type: journey`) で、その段階の改善の余地 (#1251)。
609
- *
610
- * 気持ちが落ちる段に「何を直せるか」 を添える。 他の図種では相手が無いため、
611
- * 書かれていたら組み立て側が知らせる。
612
- */
613
- opportunity?: string;
614
- /** ジャーニーの改善注記を置く場所。 */
615
- opportunityPosition?: NonNullable<
616
- NonNullable<CdlDiagram["nodes"][number]["journeyData"]>[number]["opportunityPosition"]
617
- >;
618
- /**
619
- * 段階ごとの箱 (`type: swimlane` + `shape: stages`) で、この箱を入れる段階 (#2797)。
620
- *
621
- * 書かなければ担当 (`lane`)、担当も無ければ箱の名前を段階として使う。
622
- */
623
- stage?: string;
624
- lane?: string;
625
- stack?: number;
626
- initial?: boolean;
627
- final?: boolean;
628
- /**
629
- * 箱の色。 未指定なら種類ごとの既定色。
630
- *
631
- * 矢印 (`DslStep.tone`) と同じ名前と別名を受け付ける (`成功` / `success` 等)。
632
- * 効く種類は cdl 側の 26 種で、 それ以外は指定しても色が変わらない。
633
- */
634
- tone?: Tone;
635
- /**
636
- * CAR-1657 parts unified syntax = kind が既存 NODE_KIND_VALID に無い値 (parts identifier 候補)
637
- * だった時、 parser は partId に格納して compile 側に委譲する。 compile 時に partsCatalog から
638
- * 対応する CdlDiagram を lookup + merge する経路。 partId set 時は kind = "actor" (default) fallback。
639
- */
640
- partId?: string;
641
- /**
642
- * `色:` に色番号を書いた時の値。 どの状態に入れるかは組み立て時に決める。
643
- *
644
- * 色を保持する状態の名前はパーツごとに違う (`bg` / `stFill` / `gFill` / `hue` など 17 種)。
645
- * 解析の時点ではパーツの定義を知らないため、 名前を決めずに持っておく。
646
- */
647
- colorHex?: string;
648
- /**
649
- * 部品に `color:` で書いた色の名前 (`成功` 等) (#1973)。
650
- *
651
- * 部品の色の状態は色番号しか受けず、色の名前は箱の色 (`tone`) にしか効かない。 部品には
652
- * 箱の色を渡さないため、書いても絵が変わらない。 黙って捨てると手掛かりが残らないので、
653
- * 書いた名前を残して組み立て側が知らせる。
654
- */
655
- partColorName?: Tone;
656
- /**
657
- * parts state override (partId set 時のみ有効)。 kind + 既存 reserved fields を除いた
658
- * inline option の残り (`v: 50` / `count: 100` 等) を state 名 → initial 値 map として保持。
659
- * compile 時に parts.states[i].initial を上書きする。
660
- */
661
- stateOverride?: Record<string, number | string | boolean>;
662
- /**
663
- * canvas pivot 新 spec (dragon canvas pivot spec §layout-role-conversion)。
664
- * user drag / resize で明示的に固定した絶対座標 / サイズ。 4 field set 済なら CDL layout が
665
- * 該当 actor 由来 lane / node の位置計算を skip、 posX / posY / posW / posH をそのまま採用する。
666
- * 未指定なら従来の auto layout (catalog 100+ backward compat 保証)。
667
- */
668
- posX?: number;
669
- posY?: number;
670
- posW?: number;
671
- posH?: number;
672
- /**
673
- * 見本を何倍で描くか (`倍率: 2` / `scale: 2`、 #1026)。 partId set 時のみ有効。
674
- *
675
- * `大きさ:` (`posW` / `posH`) とは掛け合わさる。 画面側も同じ意味で読むため、
676
- * `scale` は状態の名前としては使えない (予約語)。 状態を上書きしたい時は
677
- * `state: { scale: 2 }` と明示するか、別の名前を使う。
678
- */
679
- scale?: number;
680
- /**
681
- * 倍率として書かれた項目名 (`scale` / `倍率`、 #1026)。
682
- *
683
- * 値が読めない形 (`scale: x`) と書いていない形を見分けるために持つ。 見本が同じ名前の
684
- * 状態を持つ時の知らせ (`scale-reserved`) が、値の読めなさに左右されないようにする。
685
- */
686
- scaleKeys?: string[];
687
- /**
688
- * 位置を他の要素からの相対で書いた時の指定 (`位置: Web の右 200`)。
689
- *
690
- * 組み立ての段階で 1 度配置を計算し、 基準の実座標から `posX` / `posY` に直す。 解決後は
691
- * 座標を直接書いた時と同じ経路を通るため、 効き方は書き方によって変わらない。
692
- */
693
- posRel?: RelativePos;
694
- /**
695
- * 箱の位置のずらし (#1971)。 配置後の箱の中心を (x, y) だけ動かす。 `posX` / `posY` (座標) とは
696
- * 別の欄で、座標も書いた時は座標で置いた位置からずらす。 見本 (parts) は見本 1 つ分をまとめて動かす。
697
- * 同じ縦列の箱に近づくと、描画側が間隔を保つようそちらを押し下げる。
698
- */
699
- layoutPos?: LayoutPos;
700
- pos: Position;
701
- };
702
-
703
- /** 流れ (1 行 = 1 step) (v0.5+ ... inline option 拡張) */
704
- export type DslStep = {
705
- no: number;
706
- from: string;
707
- to: string;
708
- label: string;
709
- sub?: string;
710
- tone?: Tone;
711
- style?: EdgeStyle;
712
- /** v0.5+ inline option */
713
- guard?: string;
714
- cardinality?: string;
715
- /**
716
- * 矢印を値に追随させる欄 (`widthBind:` / `strokeBind:` / `dashOffsetBind:`、 #1396)。
717
- *
718
- * 箱の `wBind` (#1392) と同じ形で、状態やつまみの名前を `{名前}` で書く。
719
- * 太さ / 色 / 破線の位置がその値に合わせて動く。 通り道そのものは動かない。
720
- */
721
- widthBind?: string;
722
- strokeBind?: string;
723
- dashOffsetBind?: string;
724
- /** 矢印がどの辺から出るか (#1385)。 書かなければ描画側が自動で選ぶ */
725
- side?: "top" | "right" | "bottom" | "left";
726
- /** 矢印の出どころと行き先で、個別に使う辺。 */
727
- fromSide?: "top" | "right" | "bottom" | "left";
728
- toSide?: "top" | "right" | "bottom" | "left";
729
- /**
730
- * 矢印の先の形 (#1462)。 書かなければ従来どおり塗った三角。
731
- *
732
- * 4 図の設計は **端の形で関係の種類を示す** = 三角 (継承・実装) / 菱 (集約・コンポジション) /
733
- * 開いた矢 (関連・依存) / 鳥の足 (多)。 書けないと 4 種とも同じ三角になり、
734
- * 線の種類 (実線 / 点線) だけで 6 種の関係を区別することになる。
735
- *
736
- * 受ける語は描画側の `EDGE_HEADS` から導く = 描画側が増やせば書けるようになる。
737
- */
738
- head?: EdgeHead;
739
- /** 出どころ側の端の形 (#1466)。 ER は端ごとに違う個数を示すので両端に要る */
740
- tailHead?: EdgeHead;
741
- /** 端の印の塗り (#1466)。 白抜きの菱が集約、塗った菱がコンポジション */
742
- headFill?: EdgeHeadFill;
743
- /** 出どころ側の印の塗り (#1466) */
744
- tailHeadFill?: EdgeHeadFill;
745
- /**
746
- * UML の関係を持つ record の出どころ側の多重度 (#1771 / #2783)。
747
- * `sub` (行き先の端の多重度) と対。
748
- *
749
- * `relation` を書いた edge で効き、engine が出どころの端の近くに添える。
750
- */
751
- tailSub?: string;
752
- /**
753
- * UML の関係の種類 (#1466 / #2783)。record に書くと線と端の形と塗りと付く側がまとめて決まる。
754
- *
755
- * 4 つを個別に書かせないのは、組合せが 6 通りしか無く、1 つでも書き違えると読み手に
756
- * 別の意味で伝わるため (菱を逆に置くと持ち主が入れ替わる)。
757
- */
758
- relation?: ClassRelationType;
759
- /**
760
- * 言づての種類 (#1466)。 順序図で線と矢の形がまとめて決まる。
761
- *
762
- * `kind` にしないのは、箱の種類 (`DslActor.kind`) と同じ語が別の意味を持つため。
763
- */
764
- msgKind?: SequenceMessageKind;
765
- /** 辺の役目 (cdl#618)。 `main` を書いた辺だけ「いま」 の色で引く */
766
- role?: "main";
767
- /** 名前の下地を敷くか (cdl#618)。 書かなければ敷く */
768
- labelPlate?: boolean;
769
- labelOffsetX?: number;
770
- labelOffsetY?: number;
771
- /** cdl の固定直線経路。4 欄が全て揃った時だけ描画側が採用する。 */
772
- posX1?: number;
773
- posY1?: number;
774
- posX2?: number;
775
- posY2?: number;
776
- /** 固定した両端の間を通る直角の折れ線の点。 */
777
- waypoints?: NonNullable<CdlDiagram["edges"][number]["waypoints"]>;
778
- /** 線の名札を自動回避するか、作者の位置に固定するか。 */
779
- labelCollision?: NonNullable<CdlDiagram["edges"][number]["labelCollision"]>;
780
- /** 線の名札の幅・高さ・字の大きさ。 */
781
- labelSize?: NonNullable<CdlDiagram["edges"][number]["labelSize"]>;
782
- /** true で説明文を矢印の線の上に重ねる。 分岐図の条件ラベル用。 */
783
- overlay?: boolean;
784
- /**
785
- * 矢印の位置のずらし (#1971)。 矢印の通り道は両端の箱で決まるので、名前のずらし
786
- * (`labelOffsetX` / `labelOffsetY`) に足して名前だけを動かす。
787
- */
788
- layoutPos?: LayoutPos;
789
- /**
790
- * 部品 (parts) の端で、矢印を繋ぐ部品の中の要素の id (#1979)。 出どころ側が `fromPartNode`、
791
- * 行き先側が `toPartNode`。
792
- *
793
- * 要素を 1 つだけ持つ部品は書かなくてもその要素に繋ぐ。 要素を 2 つ以上持つ部品は外枠を持たず
794
- * 同格の要素が並ぶため、1 つを自動で選ぶと「その要素だけ」 を指す矢印に見える。 書き手が名指しする。
795
- */
796
- fromPartNode?: string;
797
- toPartNode?: string;
798
- pos: Position;
799
- };
800
-
801
- /** lane 宣言 (v0.5+ top-level lanes section) */
802
- export type DslLane = {
803
- id: string;
804
- x?: number;
805
- width?: number;
806
- label?: string;
807
- /** 路線図の担当の名札で、名前の下へ出す補足。 */
808
- subtitle?: string;
809
- contain?: boolean;
810
- lifeline?: boolean;
811
- /**
812
- * 縦列の位置のずらし (#1971)。 配置後の縦列の左上を (x, y) だけ動かし、中の箱も一緒に動く。
813
- * 1 本でもずらすと全ての縦列を配置後の位置と大きさで固定し、動いた箱を元の位置に留めるので、
814
- * 他の縦列とその箱は動かない。
815
- */
816
- layoutPos?: LayoutPos;
817
- pos: Position;
818
- };
819
-
820
- /** 段の箱の列見出しの寸法。 */
821
- export type DslStageHeader = {
822
- leftPad?: number;
823
- topPad: number;
824
- numberSize: number;
825
- gap: number;
826
- nameSize: number;
827
- bottomPad: number;
828
- };
829
-
830
- /**
831
- * 組の宣言 (v0.5+ top-level groups section)。
832
- *
833
- * `lanes` に並べた縦列とその中の箱を、 縦列の位置が決まった後に 1 つの枠 (`group-{id}`) で囲む (#1972)。
834
- * 図に無い縦列は除いて囲み、 1 本も無ければ枠を描かない。 間に束ねない縦列を挟むと、 その縦列ごと囲む。
835
- * どちらも知らせで伝える。
836
- */
837
- export type DslGroup = {
838
- id: string;
839
- label?: string;
840
- lanes: string[]; // 囲む縦列の id
841
- pos: Position;
842
- };
843
-
844
- /** viewport 全体仕様 (v0.5+ top-level viewport section) */
845
- export type DslViewport = {
846
- width?: number;
847
- height?: number;
848
- /** 描画内容だけを画布の中で横へずらす。 */
849
- contentOffsetX?: number;
850
- /**
851
- * 図全体の倍率 (default 1)。 箱 / 文字 / 線 / 間隔のすべてが等比で拡大縮小される。
852
- *
853
- * `laneWidth` / `laneGap` / `nodeGap` は **間隔だけ**を動かすため、 箱の大きさは変わらず
854
- * 図に占める割合はむしろ下がる。 本 field は cdl 側で座標系ごと拡大するので、
855
- * 見た目の比率が完全に保たれる (SVG user unit 固定の font-size も追従する)。
856
- */
857
- scale?: number;
858
- laneWidth?: number;
859
- /** 全体 default gap (互換維持、 個別 laneGap / nodeGap / labelMargin の fallback) */
860
- gap?: number;
861
- /** lanes 間 horizontal gap */
862
- laneGap?: number;
863
- /** nodes 間 vertical gap within lane */
864
- nodeGap?: number;
865
- /** edge label 周辺余白 */
866
- labelMargin?: number;
867
- pos: Position;
868
- };
869
-
870
- /** アニメーション ブロック */
871
- export type DslAnimate = {
872
- states: DslState[];
873
- phases: DslPhase[];
874
- pos: Position;
875
- };
876
-
877
- /** 状態宣言 */
878
- export type DslState = {
879
- name: string;
880
- initial: number | string;
881
- pos: Position;
882
- };
883
-
884
- /**
885
- * 値が動き出すきっかけ (#1161 段 2)。
886
- *
887
- * `step` は段が始まった時、 `reaches` は別の値が境目を越えた時。 どちらも「成り立った瞬間の
888
- * 出来事」 で、 常に成り立つ関係を表す式とは別物 (spec § 2.3)。
889
- */
890
- export type DslValueTrigger =
891
- | { kind: "step"; step: string }
892
- | {
893
- kind: "reaches";
894
- /** 見張る相手の値の名前 */
895
- source: string;
896
- op: ">=" | ">" | "<=" | "<" | "==" | "!=";
897
- threshold: number;
898
- };
899
-
900
- /**
901
- * 記法の `values:` の 1 件。 形は 2 つある。
902
- *
903
- * | 形 | 持つもの | 意味 |
904
- * |---|---|---|
905
- * | 式 | `expression` | 常に成り立つ関係。 時間を持たない |
906
- * | きっかけ | `trigger` / `to` / `durationMs` | きっかけから `to` まで動く。 時間を持つ |
907
- *
908
- * 両方を持つ形は無い (parser が弾く)。 きっかけ形は組み立ての時点で段の時計を読む式へ畳まれる
909
- * ため、 図に載る時にはどちらも `derived` になる。
910
- */
911
- export type DslValue = {
912
- name: string;
913
- pos: Position;
914
- } & (
915
- | {
916
- /** 式そのもの。 評価は描画側が毎 frame 行う */
917
- expression: string;
918
- trigger?: never;
919
- to?: never;
920
- durationMs?: never;
921
- }
922
- | {
923
- expression?: never;
924
- /** 動き出すきっかけ */
925
- trigger: DslValueTrigger;
926
- /** 動いた先の値 */
927
- to: number;
928
- /** 動く長さ (ms) */
929
- durationMs: number;
930
- }
931
- );
932
-
933
- /**
934
- * 動いている間の帯 (#1466)。 順序図で、面がいつ動いているかを言づての番号で持つ。
935
- *
936
- * `from` / `to` が指すのは **板に載る言づての行** で、0 から数える (#2404 で実測)。
937
- * 段 (`animation` の `step`) ではない = 数も起点も違う。
938
- *
939
- * `pos` は書いた行 (#2404)。 名前と番号を突き合わせた知らせが、直す行を指すのに使う。
940
- * JSON から読んだ文書は行を持たないため `undefined` になる (矢印の飾りの知らせと同じ扱い)。
941
- */
942
- export type DslBand = { actor: string; from: number; to: number; pos?: Position };
943
-
944
- /** ステップ (phase) */
945
- export type DslPhase = {
946
- name: string;
947
- durationMs: number;
948
- highlight?: string[]; // active 化対象 (node 名 / edge 名)
949
- tweens?: DslTween[]; // state lerp
950
- sets?: DslSet[]; // state 即時遷移
951
- body?: string;
952
- badge?: string;
953
- /**
954
- * その段で起点から描くもの (#1312 / #1314 / #1318)。
955
- *
956
- * 受ける語は `line` / `bar` / `pie` / `journey` / `mind` / `tree` / `gantt` / `funnel`。
957
- * 語と同じ図種で、その段の間に線・棒・扇・枝・帯・段が各図の起点から現れる。
958
- *
959
- * **最上位ではなく段に置く**。 記法は動き (`tween` / `set` / `focus` / `badge`) を段に、
960
- * 静的な性質 (`eyebrow` / `axes`) を最上位に書く分け方を既に持つ。 起点から描くのは動き。
961
- *
962
- * 相手の名前は書かせない = 対象の 8 図種はいずれも図全体を 1 箱で描くため相手が決まる。
963
- */
964
- draw?: string;
965
- /**
966
- * 描き終えるまでに段の何割を使うか (#1441)。
967
- *
968
- * `draw: line 0.4` のように語の後ろに書く。 0 より大きく 1 以下。
969
- * 書かなければ段の終わりに描き終わる (従来どおり)。
970
- *
971
- * **段の長さと描く速さを切り離すための欄**。 伸び具合は段の進みそのものなので、
972
- * これが無いと「線はゆっくり引きたいが値の移りは短くしたい」 が書けず、描く速さのために
973
- * 段の長さを動かすことになる。 段の長さを動かすと同じ段の `tween` まで遅くなる。
974
- *
975
- * **`draw` と同じ行に書かせる**。 別の項目にすると「割合だけ書いて `draw` が無い段」 が
976
- * 書けてしまい、何も起きない指定になる。 同じ行なら書けない。
977
- */
978
- drawRatio?: number;
979
- /**
980
- * `draw` を書いた行 (#1312)。 知らせの行番号に使う。
981
- *
982
- * 段の `pos` は `- step:` の行を指すため、そこを使うと「段の 3 行目に書いた `draw` が
983
- * 効かない」 を段の先頭行として知らせることになる。
984
- */
985
- drawPos?: Position;
986
- pos: Position;
987
- };
988
-
989
- /** state lerp (遷移) */
990
- export type DslTween = {
991
- state: string;
992
- from: number;
993
- to: number;
994
- pos: Position;
995
- };
996
-
997
- /** state 即時遷移 (切替) */
998
- export type DslSet = {
999
- state: string;
1000
- value: string | number;
1001
- pos: Position;
1002
- };
1003
-
1004
- /** Parser error (行番号付き) */
1005
- export type DslError = {
1006
- line: number;
1007
- message: string;
1008
- hint?: string;
1009
- };