@cardenelabs/dragon 0.28.0 → 0.32.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.
Files changed (66) hide show
  1. package/README.md +391 -16
  2. package/dist/index.cjs +13479 -7403
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +2360 -208
  5. package/dist/index.d.ts +2360 -208
  6. package/dist/index.js +13462 -7405
  7. package/dist/index.js.map +1 -1
  8. package/package.json +12 -13
  9. package/src/compile/actor-ids.ts +297 -0
  10. package/src/compile/actor-option-notice.ts +379 -0
  11. package/src/compile/actors.ts +103 -0
  12. package/src/compile/c4.ts +74 -0
  13. package/src/compile/chain.ts +93 -0
  14. package/src/compile/chart-fields.ts +193 -0
  15. package/src/compile/deep-rewrite.ts +30 -0
  16. package/src/compile/derived-source.ts +18 -0
  17. package/src/compile/direction.ts +102 -0
  18. package/src/compile/edge-option-notice.ts +112 -0
  19. package/src/compile/er-relation.ts +200 -0
  20. package/src/compile/flow.ts +54 -0
  21. package/src/compile/flowchart.ts +344 -0
  22. package/src/compile/funnel.ts +87 -0
  23. package/src/compile/gantt.ts +337 -0
  24. package/src/compile/generic.ts +696 -0
  25. package/src/compile/hierarchy.ts +92 -0
  26. package/src/compile/journey.ts +93 -0
  27. package/src/compile/kinds.ts +148 -0
  28. package/src/compile/lanes.ts +138 -0
  29. package/src/compile/metro.ts +271 -0
  30. package/src/compile/mind.ts +393 -0
  31. package/src/compile/node-title.ts +24 -0
  32. package/src/compile/notice.ts +141 -0
  33. package/src/compile/order.ts +62 -0
  34. package/src/compile/parts-lookup.ts +17 -0
  35. package/src/compile/parts.ts +2709 -0
  36. package/src/compile/placement-apply.ts +689 -0
  37. package/src/compile/placement.ts +15 -0
  38. package/src/compile/quadrant.ts +265 -0
  39. package/src/compile/record.ts +75 -0
  40. package/src/compile/row-marks.ts +128 -0
  41. package/src/compile/rows.ts +40 -0
  42. package/src/compile/sequence.ts +305 -0
  43. package/src/compile/slug.ts +37 -0
  44. package/src/compile/stages.ts +247 -0
  45. package/src/compile/subtitle.ts +35 -0
  46. package/src/compile/swimlane-marks.ts +87 -0
  47. package/src/compile/swimlane.ts +82 -0
  48. package/src/compile/timeline.ts +213 -0
  49. package/src/compile/topology.ts +44 -0
  50. package/src/compile/tree.ts +69 -0
  51. package/src/compile/value-chart.ts +337 -0
  52. package/src/compile/values.ts +432 -0
  53. package/src/compile/word-state.ts +82 -0
  54. package/src/compile.ts +1806 -6971
  55. package/src/focus.ts +2 -2
  56. package/src/index.ts +42 -9
  57. package/src/json-line-map.ts +30 -0
  58. package/src/json-parser.ts +1760 -168
  59. package/src/keywords.ts +251 -17
  60. package/src/near-name.ts +42 -0
  61. package/src/notation-lint.ts +41 -64
  62. package/src/relative-pos.ts +71 -2
  63. package/src/schema.ts +1 -1
  64. package/src/schemas/diagram.json +680 -23
  65. package/src/types.ts +337 -36
  66. package/src/v05/parser.ts +2553 -354
@@ -4,6 +4,9 @@
4
4
  "title": "Dragon DSL Diagram",
5
5
  "description": "LLM 向け Dragon DSL の JSON Schema。 Anthropic Claude tool use / OpenAI GPT structured output の schema field に注入して使う。 生成された JSON は jsonToDiagram() に渡して CdlDiagram に変換する。",
6
6
  "type": "object",
7
+ "$defs": {
8
+ "positiveNumber": { "type": "number", "exclusiveMinimum": 0 }
9
+ },
7
10
  "required": [
8
11
  "title",
9
12
  "type",
@@ -22,13 +25,13 @@
22
25
  "enum": [
23
26
  "sequence",
24
27
  "flow",
28
+ "flowchart",
25
29
  "swimlane",
26
- "er",
27
- "state",
30
+ "record",
28
31
  "topology",
29
32
  "solidity",
30
33
  "gantt",
31
- "class",
34
+ "chart",
32
35
  "pie",
33
36
  "bar",
34
37
  "line",
@@ -45,11 +48,289 @@
45
48
  "c4",
46
49
  "mind"
47
50
  ],
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 の矢印で親子を書く (矢印の先が子)"
51
+ "description": "図の種類。 型ごとに actors の書き方が違う。 [関係を描く] sequence (時系列の呼び出し) / flow (処理の流れ) / flowchart (分かれ道と判断を含む手順) / swimlane (責務ごとの流れ) / record (箱が行を持ち関係を持つ図。 表のつながり、移り変わり、UML クラス関係にも使う) / topology (network) / c4 (architecture) / mind (発想の枝分かれ) は actors に名前を並べ flow に矢印を書く。 [値を描く] chart (数の並び) は actors に `- 名前: \"45\"` の形で数を書き、 shape で形を選ぶ (pie = 割合 / bar = 棒の高さ / line = 線の高さで書いた順に並ぶ / gauge = 合計を半円で示す / radial = 弧の長さで比べる / stat = 値 1 つを大きく示す / waffle = 割合を 100 個の印で示す / stacked = 内訳を帯で示す / slope = 2 時点を直線でつなぎ増減と順位の入れ替わりを示す)。 shape が stat と stacked と slope の時は `- 名前: { value: \"320\", previous: \"280\" }` の形で前の時点の値も書ける。 funnel (段ごとに減る数) も同じ形。 [語を描く] journey (体験の起伏) は `- 登録: \"不満\"` の形で 最高 / 満足 / 普通 / 不満 / 怒り のどれかを書く。 quadrant (2 軸の仕分け) は `- 重複削除: \"左上\"` の形で 左上 / 右上 / 左下 / 右下 のどれかを書く。 [時期を描く] gantt (工程の並び) は `- 設計: \"1月\"` の形で始まりの時期を書き、 flow の矢印で前後関係を書く。 [親子を描く] tree (親子の入れ子) は actors に名前を並べ flow の矢印で親子を書く (矢印の先が子)。 [古い綴り] solidity は sequence と order: kind の組、 pie / bar / line / gauge / radial / stat / waffle / stacked / slope は chart と同じ綴りの shape の組と同じ扱いになる"
49
52
  },
53
+ "form": {
54
+ "type": "string",
55
+ "enum": ["ring", "arcs", "table", "輪", "積層の弧", "銘板"],
56
+ "description": "shape: pie の見せ方。輪 / 積層の弧 / 銘板。"
57
+ },
58
+ "見せ方": {
59
+ "type": "string",
60
+ "enum": ["ring", "arcs", "table", "輪", "積層の弧", "銘板"],
61
+ "description": "form の和名。両方あれば form を採る。"
62
+ },
63
+ "ticks": {
64
+ "type": "array",
65
+ "minItems": 1,
66
+ "items": { "type": "string", "minLength": 1 },
67
+ "description": "gantt の目盛りを左から順に明示する。"
68
+ },
69
+ "目盛り": {
70
+ "type": "array",
71
+ "minItems": 1,
72
+ "items": { "type": "string", "minLength": 1 },
73
+ "description": "ticks の和名。両方あれば ticks を採る。"
74
+ },
75
+ "ganttToday": {
76
+ "type": "object",
77
+ "additionalProperties": false,
78
+ "required": ["index", "label"],
79
+ "properties": {
80
+ "index": { "type": "number" },
81
+ "label": { "type": "string" }
82
+ },
83
+ "description": "gantt の今日の線の位置と札。"
84
+ },
85
+ "ganttTickLabels": {
86
+ "type": "array",
87
+ "minItems": 1,
88
+ "items": { "type": "string" },
89
+ "description": "gantt の目盛りに順番に出す名前。"
90
+ },
91
+ "ganttBarEnd": {
92
+ "type": "string",
93
+ "enum": ["position"],
94
+ "description": "gantt の帯を end の位置で止める。"
95
+ },
96
+ "ganttBarThickness": {
97
+ "type": "string",
98
+ "enum": ["thin"],
99
+ "description": "gantt の帯を見本の比で細くする。"
100
+ },
101
+ "chartSeriesSkipMuted": { "type": "boolean" },
102
+ "chartLineSeries": {
103
+ "type": "array",
104
+ "minItems": 1,
105
+ "items": {
106
+ "type": "object",
107
+ "additionalProperties": false,
108
+ "required": ["points"],
109
+ "properties": {
110
+ "label": { "type": "string" },
111
+ "tone": { "type": "string" },
112
+ "dash": { "type": "string", "enum": ["solid", "dotted"] },
113
+ "marker": { "type": "string", "enum": ["dot", "hollow", "none"] },
114
+ "valueIndexes": { "type": "array", "items": { "type": "integer", "minimum": 0 } },
115
+ "points": {
116
+ "type": "array",
117
+ "minItems": 1,
118
+ "items": {
119
+ "type": "object",
120
+ "additionalProperties": false,
121
+ "required": ["label", "value"],
122
+ "properties": {
123
+ "label": { "type": "string" },
124
+ "value": { "type": ["number", "string"] }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ },
131
+ "chartPieCenterLabel": { "type": "string" },
132
+ "chartPieTableColumns": { "type": "string", "enum": ["share-value", "value"] },
133
+ "chartPieRingWidth": { "type": "string", "enum": ["thick", "thin"] },
134
+ "chartSlopePeriods": {
135
+ "type": "array",
136
+ "minItems": 2,
137
+ "maxItems": 2,
138
+ "items": { "type": "string", "minLength": 1 }
139
+ },
140
+ "chartSlopeEmphasisIds": {
141
+ "type": "array",
142
+ "minItems": 1,
143
+ "items": { "type": "string", "minLength": 1 }
144
+ },
145
+ "chartSlopeUnit": { "type": "string" },
146
+ "chartStackedPeriods": {
147
+ "type": "array",
148
+ "minItems": 1,
149
+ "items": {
150
+ "type": "object",
151
+ "additionalProperties": false,
152
+ "required": ["label", "values"],
153
+ "properties": {
154
+ "label": { "type": "string" },
155
+ "values": { "type": "array", "items": { "type": ["number", "string"] } }
156
+ }
157
+ }
158
+ },
159
+ "chartStackedRateId": { "type": "string" },
160
+ "chartStackedLegendPosition": { "type": "string", "enum": ["top", "bottom"] },
161
+ "chartGaugeValue": {
162
+ "type": "object",
163
+ "additionalProperties": false,
164
+ "required": ["max", "current"],
165
+ "properties": {
166
+ "max": { "type": "number", "exclusiveMinimum": 0 },
167
+ "current": {
168
+ "anyOf": [
169
+ { "type": "number" },
170
+ { "type": "string", "pattern": "\\S" }
171
+ ]
172
+ },
173
+ "target": {
174
+ "anyOf": [
175
+ { "type": "number" },
176
+ { "type": "string", "pattern": "\\S" }
177
+ ]
178
+ },
179
+ "previous": {
180
+ "anyOf": [
181
+ { "type": "number" },
182
+ { "type": "string", "pattern": "\\S" }
183
+ ]
184
+ },
185
+ "previousLabel": { "type": "string" }
186
+ }
187
+ },
188
+ "chartWaffleLegendPosition": { "type": "string", "enum": ["left", "right"] },
189
+ "funnelForm": { "type": "string", "enum": ["trapezoid", "proportional-bars"] },
190
+ "funnelRate": { "type": "string", "enum": ["drop", "conversion", "none"] },
191
+ "quadrantPointLabelSide": { "type": "string", "enum": ["auto", "right"] },
192
+ "treeNodeForm": { "type": "string", "enum": ["accent", "frame"] },
193
+ "treeSize": {
194
+ "type": "object",
195
+ "additionalProperties": false,
196
+ "properties": {
197
+ "nodeWidths": {
198
+ "type": "array",
199
+ "minItems": 1,
200
+ "items": { "type": "number", "exclusiveMinimum": 0 }
201
+ },
202
+ "nodeHeight": { "type": "number", "exclusiveMinimum": 0 },
203
+ "titleFontSize": { "type": "number", "exclusiveMinimum": 0 },
204
+ "subtitleFontSize": { "type": "number", "exclusiveMinimum": 0 },
205
+ "siblingGap": { "type": "number", "minimum": 0 },
206
+ "levelGap": { "type": "number", "minimum": 0 }
207
+ }
208
+ },
209
+ "treeEdgeTone": { "type": "string", "enum": ["accent", "depth"] },
210
+ "treeEdgeHead": { "type": "string", "enum": ["none", "triangle"] },
211
+ "mindForm": { "type": "string", "enum": ["filled", "outline"] },
212
+ "mindSize": {
213
+ "type": "object",
214
+ "additionalProperties": false,
215
+ "properties": {
216
+ "contentOffset": {
217
+ "type": "object",
218
+ "additionalProperties": false,
219
+ "required": ["x", "y"],
220
+ "properties": {
221
+ "x": { "type": "number" },
222
+ "y": { "type": "number" }
223
+ }
224
+ },
225
+ "root": {
226
+ "type": "object",
227
+ "additionalProperties": false,
228
+ "properties": {
229
+ "width": { "type": "number", "exclusiveMinimum": 0 },
230
+ "height": { "type": "number", "exclusiveMinimum": 0 },
231
+ "fontSize": { "type": "number", "exclusiveMinimum": 0 }
232
+ }
233
+ },
234
+ "branch": {
235
+ "type": "object",
236
+ "additionalProperties": false,
237
+ "properties": {
238
+ "width": { "type": "number", "exclusiveMinimum": 0 },
239
+ "height": { "type": "number", "exclusiveMinimum": 0 },
240
+ "fontSize": { "type": "number", "exclusiveMinimum": 0 }
241
+ }
242
+ },
243
+ "leaf": {
244
+ "type": "object",
245
+ "additionalProperties": false,
246
+ "properties": {
247
+ "fontSize": { "type": "number", "exclusiveMinimum": 0 }
248
+ }
249
+ },
250
+ "rootBranchGap": { "type": "number", "minimum": 0 },
251
+ "branchLeafGap": { "type": "number", "minimum": 0 },
252
+ "branchRowGap": { "type": "number", "minimum": 0 },
253
+ "branchRowOffset": { "type": "number" },
254
+ "leafRowGap": { "type": "number", "minimum": 0 },
255
+ "leafRowOffset": { "type": "number" }
256
+ }
257
+ },
258
+ "journeyForm": { "type": "string", "enum": ["bands", "rules"] },
259
+ "journeyLineForm": { "type": "string", "enum": ["curve", "straight"] },
260
+ "journeyLabels": {
261
+ "type": "object",
262
+ "additionalProperties": false,
263
+ "required": ["delighted", "happy", "neutral", "frustrated", "angry"],
264
+ "properties": {
265
+ "delighted": { "type": "string", "minLength": 1 },
266
+ "happy": { "type": "string", "minLength": 1 },
267
+ "neutral": { "type": "string", "minLength": 1 },
268
+ "frustrated": { "type": "string", "minLength": 1 },
269
+ "angry": { "type": "string", "minLength": 1 }
270
+ }
271
+ },
272
+ "sequenceActorForm": { "type": "string", "enum": ["box"] },
273
+ "sequenceLabelForm": { "type": "string", "enum": ["kind"] },
274
+ "sequenceReturnHead": { "type": "string", "enum": ["solid"] },
275
+ "sequenceRowGap": { "type": "number", "exclusiveMinimum": 0 },
276
+ "sequenceGutter": { "type": "number", "exclusiveMinimum": 0 },
277
+ "sequenceBandWidth": { "type": "number", "exclusiveMinimum": 0 },
278
+ "sequenceSelfLoop": {
279
+ "type": "object",
280
+ "additionalProperties": false,
281
+ "properties": {
282
+ "form": { "type": "string", "enum": ["orthogonal"] },
283
+ "width": { "type": "number", "exclusiveMinimum": 0 },
284
+ "drop": { "type": "number", "exclusiveMinimum": 0 }
285
+ }
286
+ },
287
+ "sequenceKindLabels": {
288
+ "type": "object",
289
+ "additionalProperties": false,
290
+ "properties": {
291
+ "call": { "type": "string" },
292
+ "return": { "type": "string" },
293
+ "fire": { "type": "string" }
294
+ }
295
+ },
296
+ "figureCard": {
297
+ "type": "object",
298
+ "additionalProperties": false,
299
+ "required": ["label"],
300
+ "properties": {
301
+ "label": { "type": "string" },
302
+ "note": { "type": "string" }
303
+ }
304
+ },
305
+ "figureSize": {
306
+ "type": "object",
307
+ "additionalProperties": false,
308
+ "required": ["width", "height"],
309
+ "properties": {
310
+ "width": { "type": "number", "exclusiveMinimum": 0 },
311
+ "height": { "type": "number", "exclusiveMinimum": 0 }
312
+ }
313
+ },
314
+ "terminalDecoration": { "type": "object", "additionalProperties": false, "properties": { "windowControls": { "type": "boolean" }, "cursor": { "type": "boolean" }, "rowOrdinal": { "type": "boolean" } } },
315
+ "cornerForm": { "type": "string", "enum": ["theme-variants"] },
316
+ "chartBarShape": { "type": "string", "enum": ["split", "top-rounded"] },
317
+ "figureKindLabel": { "type": "object", "additionalProperties": false, "required": ["text"], "properties": { "text": { "type": "string", "minLength": 1 }, "x": { "type": "number" }, "y": { "type": "number" }, "fontSize": { "type": "number", "exclusiveMinimum": 0 }, "fontWeight": { "type": "number", "exclusiveMinimum": 0 }, "letterSpacing": { "type": "number", "minimum": 0 } } },
318
+ "figureInset": { "type": "object", "additionalProperties": false, "properties": { "top": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 }, "left": { "type": "number", "minimum": 0 }, "radius": { "type": "number", "minimum": 0 } } },
319
+ "journeySize": { "type": "object", "additionalProperties": false, "properties": { "plotPadding": { "type": "object", "additionalProperties": false, "properties": { "left": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 } } }, "pointPadding": { "type": "object", "additionalProperties": false, "properties": { "left": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 } } } } },
320
+ "chartBarSize": { "type": "object", "additionalProperties": false, "properties": { "tickFontSize": { "$ref": "#/$defs/positiveNumber" }, "valueFontSize": { "$ref": "#/$defs/positiveNumber" }, "labelFontSize": { "$ref": "#/$defs/positiveNumber" }, "plotPadding": { "type": "object", "additionalProperties": false, "properties": { "top": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 }, "left": { "type": "number", "minimum": 0 } } }, "barWidth": { "$ref": "#/$defs/positiveNumber" }, "cornerRadius": { "type": "number", "minimum": 0 } } },
321
+ "chartLineSize": { "type": "object", "additionalProperties": false, "properties": { "valueLabelOffset": { "type": "object", "additionalProperties": false, "properties": { "above": { "type": "number", "minimum": 0 }, "below": { "type": "number", "minimum": 0 } } }, "tickFontSize": { "$ref": "#/$defs/positiveNumber" }, "periodFontSize": { "$ref": "#/$defs/positiveNumber" }, "pointRadius": { "$ref": "#/$defs/positiveNumber" }, "plotPadding": { "type": "object", "additionalProperties": false, "properties": { "top": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 }, "left": { "type": "number", "minimum": 0 } } }, "tickGap": { "type": "number", "minimum": 0 }, "pointPadding": { "type": "object", "additionalProperties": false, "properties": { "left": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 } } }, "periodY": { "type": "number", "minimum": 0 } } },
322
+ "chartPieSize": { "type": "object", "additionalProperties": false, "properties": { "tableWidth": { "$ref": "#/$defs/positiveNumber" }, "tableLabelFontSize": { "$ref": "#/$defs/positiveNumber" }, "tableValueFontSize": { "$ref": "#/$defs/positiveNumber" }, "tableRowGap": { "type": "number", "minimum": 0 }, "tablePaddingInline": { "type": "number", "minimum": 0 }, "outerRadius": { "$ref": "#/$defs/positiveNumber" }, "centerX": { "type": "number", "minimum": 0 } } },
323
+ "chartWaffleSize": { "type": "object", "additionalProperties": false, "properties": { "gridLeft": { "type": "number", "minimum": 0 }, "cellPitch": { "$ref": "#/$defs/positiveNumber" } } },
324
+ "chartSlopeLabelTemplate": { "type": "object", "additionalProperties": false, "properties": { "left": { "type": "string" }, "right": { "type": "string" } } },
325
+ "chartSlopeSize": { "type": "object", "additionalProperties": false, "properties": { "pointRadius": { "$ref": "#/$defs/positiveNumber" }, "periodFontSize": { "$ref": "#/$defs/positiveNumber" }, "labelFontSize": { "$ref": "#/$defs/positiveNumber" }, "leftAxisX": { "type": "number", "minimum": 0 }, "axisGap": { "$ref": "#/$defs/positiveNumber" }, "labelAxisGap": { "type": "number", "minimum": 0 }, "plotPadding": { "type": "object", "additionalProperties": false, "properties": { "top": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 } } }, "pointPadding": { "type": "object", "additionalProperties": false, "properties": { "top": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 } } } } },
326
+ "chartStackedLayout": { "type": "object", "additionalProperties": false, "properties": { "legendColumns": { "type": "integer", "minimum": 1 }, "legendColumnGap": { "type": "number", "minimum": 0 }, "segmentGap": { "type": "number", "minimum": 0 }, "barThickness": { "$ref": "#/$defs/positiveNumber" }, "barWidth": { "$ref": "#/$defs/positiveNumber" }, "legendMarkSize": { "$ref": "#/$defs/positiveNumber" }, "legendFontSize": { "$ref": "#/$defs/positiveNumber" }, "periodFontSize": { "$ref": "#/$defs/positiveNumber" }, "rateFontSize": { "$ref": "#/$defs/positiveNumber" }, "legendOffsetY": { "type": "number" } } },
327
+ "chartGaugeSize": { "type": "object", "additionalProperties": false, "properties": { "arcThickness": { "$ref": "#/$defs/positiveNumber" }, "outerRadius": { "$ref": "#/$defs/positiveNumber" }, "plotTop": { "type": "number", "minimum": 0 }, "valueFontSize": { "$ref": "#/$defs/positiveNumber" } } },
328
+ "ganttSize": { "type": "object", "additionalProperties": false, "properties": { "taskLabelFontSize": { "$ref": "#/$defs/positiveNumber" }, "taskLabelAlign": { "type": "string", "enum": ["start", "end"] }, "taskLabelX": { "type": "number", "minimum": 0 }, "tickFontSize": { "$ref": "#/$defs/positiveNumber" }, "tickCount": { "type": "integer", "minimum": 2 }, "barThickness": { "$ref": "#/$defs/positiveNumber" }, "milestoneFontSize": { "$ref": "#/$defs/positiveNumber" }, "milestoneRadius": { "$ref": "#/$defs/positiveNumber" }, "dependencyStrokeWidth": { "$ref": "#/$defs/positiveNumber" }, "taskColumnWidth": { "type": "number", "minimum": 0 }, "timelinePaddingRight": { "type": "number", "minimum": 0 } } },
329
+ "quadrantLabelPosition": { "type": "string", "enum": ["outside-corners"] },
330
+ "quadrantSize": { "type": "object", "additionalProperties": false, "properties": { "plotOffset": { "type": "object", "additionalProperties": false, "properties": { "x": { "type": "number", "minimum": 0 }, "y": { "type": "number", "minimum": 0 } } }, "plotSize": { "$ref": "#/$defs/positiveNumber" }, "pointRadius": { "$ref": "#/$defs/positiveNumber" }, "pointFontSize": { "$ref": "#/$defs/positiveNumber" }, "pointLabelGap": { "type": "number", "minimum": 0 }, "quadrantFontSize": { "$ref": "#/$defs/positiveNumber" }, "axisFontSize": { "$ref": "#/$defs/positiveNumber" } } },
50
331
  "eyebrow": {
51
332
  "type": "string",
52
- "description": "図表の箱の上に出す小見出し (省略可)。 効くのは図全体を 1 箱にする型 (pie / bar / line / gauge / radial / stat / waffle / stacked / slope / funnel / tree / journey / quadrant / mind / gantt) だけ。 箱ごとに分かれる型では相手が決まらないため、 actors[].eyebrow に書く"
333
+ "description": "図表の箱の上に出す小見出し (省略可)。 効くのは図全体を 1 箱にする型 (chart / funnel / tree / journey / quadrant / mind / gantt) だけ。 箱ごとに分かれる型では相手が決まらないため、 actors[].eyebrow に書く"
53
334
  },
54
335
  "axes": {
55
336
  "type": "object",
@@ -65,7 +346,9 @@
65
346
  },
66
347
  "right": {
67
348
  "type": "string"
68
- }
349
+ },
350
+ "label": { "type": "string" },
351
+ "direction": { "type": "boolean", "enum": [true] }
69
352
  }
70
353
  },
71
354
  "y": {
@@ -77,11 +360,32 @@
77
360
  },
78
361
  "top": {
79
362
  "type": "string"
80
- }
363
+ },
364
+ "label": { "type": "string" },
365
+ "direction": { "type": "boolean", "enum": [true] }
81
366
  }
82
367
  }
83
368
  }
84
369
  },
370
+ "regions": {
371
+ "type": "object",
372
+ "additionalProperties": false,
373
+ "description": "quadrant の区画に出す名前。 記法の regions と同じ。 鍵は項目の欄と同じ 4 語。",
374
+ "properties": {
375
+ "左上": {
376
+ "type": "string"
377
+ },
378
+ "右上": {
379
+ "type": "string"
380
+ },
381
+ "左下": {
382
+ "type": "string"
383
+ },
384
+ "右下": {
385
+ "type": "string"
386
+ }
387
+ }
388
+ },
85
389
  "actors": {
86
390
  "type": "array",
87
391
  "minItems": 1,
@@ -106,12 +410,70 @@
106
410
  },
107
411
  "kind": {
108
412
  "type": "string",
109
- "description": "node kind。 shape-* を指定して 49 shape 中から選ぶ。 例: 'shape-wallet' / 'shape-smart-contract' / 'shape-cloud' / 'shape-file' / 'actor' (default) / 'function' / 'storage' / 'event' 等"
413
+ "description": "node kind。 shape-* を指定して 49 shape 中から選ぶ。 例: 'shape-wallet' / 'shape-smart-contract' / 'shape-cloud' / 'shape-file' / 'actor' (default) / 'function' / 'storage' / 'event' 等。 種別に無い名前は部品の名前として部品の一覧 (partsCatalog) から引き、一覧にも無ければ種別を書かなかった箱になる。 部品を持つ一覧を渡した時は知らせを出し、綴りの近い名前を案内する。"
110
414
  },
111
415
  "subtitle": {
112
416
  "type": "string",
113
417
  "description": "node 下部の補足テキスト"
114
418
  },
419
+ "kindForm": { "type": "string", "enum": ["icon"] },
420
+ "icon": { "type": "string", "enum": ["person", "box", "database", "lightning", "cloud", "terminal"] },
421
+ "emptyRowsNote": { "type": "string" },
422
+ "titleAlign": { "type": "string", "enum": ["center"] },
423
+ "rowRules": { "type": "boolean" },
424
+ "rowStripe": { "type": "boolean" },
425
+ "rowLayout": {
426
+ "type": "object",
427
+ "additionalProperties": false,
428
+ "properties": {
429
+ "titleBaseline": { "type": "number", "minimum": 0 },
430
+ "rowTop": { "type": "number", "minimum": 0 },
431
+ "rowPitch": { "type": "number", "exclusiveMinimum": 0 }
432
+ }
433
+ },
434
+ "rowDividerForm": { "type": "string", "enum": ["full"] },
435
+ "rowWell": {
436
+ "type": "object",
437
+ "additionalProperties": false,
438
+ "properties": {
439
+ "top": { "type": "number", "minimum": 0 },
440
+ "right": { "type": "number", "minimum": 0 },
441
+ "bottom": { "type": "number", "minimum": 0 },
442
+ "left": { "type": "number", "minimum": 0 },
443
+ "radius": { "type": "number", "minimum": 0 }
444
+ }
445
+ },
446
+ "rowMarkForm": { "type": "string", "enum": ["tone"] },
447
+ "nestIn": { "type": "string", "minLength": 1 },
448
+ "figureCard": {
449
+ "type": "object",
450
+ "additionalProperties": false,
451
+ "required": ["label"],
452
+ "properties": {
453
+ "label": { "type": "string" },
454
+ "note": { "type": "string" }
455
+ }
456
+ },
457
+ "stationNamePosition": {
458
+ "type": "string",
459
+ "enum": ["bottom"],
460
+ "description": "路線図の駅名を駅の下へ置く"
461
+ },
462
+ "subtitlePlacement": {
463
+ "type": "string",
464
+ "enum": ["right"],
465
+ "description": "時間軸の担当を札の右へ置く"
466
+ },
467
+ "titleFontSize": {
468
+ "type": "number",
469
+ "exclusiveMinimum": 0,
470
+ "description": "流れ図の function の札の題の大きさ"
471
+ },
472
+ "markGap": {
473
+ "type": "number",
474
+ "exclusiveMinimum": 0,
475
+ "description": "流れ図の始まり・終わりの印と次の箱との間"
476
+ },
115
477
  "eyebrow": {
116
478
  "type": "string",
117
479
  "description": "node 上部の分類ラベル (accent 色)"
@@ -134,9 +496,26 @@
134
496
  "marks": {
135
497
  "type": "array",
136
498
  "items": {
137
- "type": "string"
499
+ "oneOf": [
500
+ { "type": "string" },
501
+ {
502
+ "type": "object",
503
+ "additionalProperties": false,
504
+ "required": ["mark"],
505
+ "properties": {
506
+ "mark": { "type": "string" },
507
+ "tone": { "type": "string", "enum": ["primary", "muted"] }
508
+ }
509
+ }
510
+ ]
138
511
  },
139
- "description": "行頭の印。 rows と同じ数だけ並べる。 語の意味は図の種類が決める = er は pk / fk / opt、class は + / - と () の有無、state は entry / do / exit / internal"
512
+ "description": "行頭の印。 rows と同じ数だけ並べる。 語は 鍵 (名前に下線 = その行で箱を見分ける) / 外 (行頭を山形 = 箱の外とつながる) / 条件 (行頭を中空 = 条件が揃った時だけ効く) の 3 つで、1 行に 2 つ以上書ける。 古い綴り pk / fk / opt / entry / exit / do / internal は読み取りの入口でこの 3 語に読み替わる"
513
+ },
514
+ "stage": {
515
+ "type": "string",
516
+ "minLength": 1,
517
+ "pattern": "\\S",
518
+ "description": "shape: stages の泳法図で、この箱を入れる段階。 記法では stage または 段階 と書く"
140
519
  },
141
520
  "lane": {
142
521
  "type": "string",
@@ -149,11 +528,11 @@
149
528
  },
150
529
  "initial": {
151
530
  "type": "boolean",
152
- "description": "state 開始点 (kind: state 用)"
531
+ "description": "始まりの箱か (札の形の箱に 初期 の字が出る)"
153
532
  },
154
533
  "final": {
155
534
  "type": "boolean",
156
- "description": "state 終了点 (kind: state 用)"
535
+ "description": "終わりの箱か (札の形の箱に 最終 の字が出る)"
157
536
  },
158
537
  "state": {
159
538
  "type": "object",
@@ -176,6 +555,7 @@
176
555
  "error",
177
556
  "warning",
178
557
  "info",
558
+ "muted",
179
559
  "成功",
180
560
  "失敗",
181
561
  "警告",
@@ -196,6 +576,7 @@
196
576
  "error",
197
577
  "warning",
198
578
  "info",
579
+ "muted",
199
580
  "成功",
200
581
  "失敗",
201
582
  "警告",
@@ -215,7 +596,34 @@
215
596
  },
216
597
  "end": {
217
598
  "type": "string",
218
- "description": "gantt の工程が終わる時期。"
599
+ "description": "gantt の工程が終わる時期。 始まりより前の時期は始まりと同じに倒し、知らせを出す。"
600
+ },
601
+ "startLabel": {
602
+ "type": "string",
603
+ "description": "gantt の工程の始まりに出す札。"
604
+ },
605
+ "milestone": {
606
+ "type": "boolean",
607
+ "description": "true なら gantt の帯を節目の菱形にする。"
608
+ },
609
+ "emphasis": {
610
+ "type": "string",
611
+ "enum": ["primary"],
612
+ "description": "gantt の帯を主役として描く。"
613
+ },
614
+ "at": {
615
+ "type": "array",
616
+ "minItems": 2,
617
+ "maxItems": 2,
618
+ "items": { "type": ["number", "string"] },
619
+ "description": "quadrant の座標 [x, y]。左下が 0,0、右上が 1,1。"
620
+ },
621
+ "点の位置": {
622
+ "type": "array",
623
+ "minItems": 2,
624
+ "maxItems": 2,
625
+ "items": { "type": ["number", "string"] },
626
+ "description": "at の和名。両方あれば at を採る。"
219
627
  },
220
628
  "touchpoint": {
221
629
  "type": "string",
@@ -225,6 +633,11 @@
225
633
  "type": "string",
226
634
  "description": "journey の段階の改善の余地。"
227
635
  },
636
+ "opportunityPosition": {
637
+ "type": "string",
638
+ "enum": ["below-chart", "below-point"],
639
+ "description": "journey の改善の余地を図の下か、その段階の点の下へ置く。"
640
+ },
228
641
  "posX": {
229
642
  "type": "number",
230
643
  "description": "箱の絶対 x 座標。"
@@ -245,6 +658,10 @@
245
658
  "type": "number",
246
659
  "description": "parts の描画倍率。 kind に parts identifier を指定した時だけ使える。"
247
660
  },
661
+ "phase": {
662
+ "type": "boolean",
663
+ "description": "parts が持つ段を使うか。 既定は書いた段と番号ごとに並べて再生する。 false を書くと parts の段の中身を空にし、値は animation に書いた段だけが動かす。 kind に parts identifier を指定した時だけ使える。"
664
+ },
248
665
  "pos": {
249
666
  "type": "object",
250
667
  "additionalProperties": false,
@@ -262,6 +679,36 @@
262
679
  }
263
680
  }
264
681
  },
682
+ "posRel": {
683
+ "type": "object",
684
+ "additionalProperties": false,
685
+ "description": "位置を他の要素からの相対で書く指定。 座標を知らなくても「誰の」「どちら側に」「どれだけ離して」 で置ける。 解決した後は posX / posY を書いた時と同じ経路を通る。",
686
+ "required": [
687
+ "anchor",
688
+ "dir"
689
+ ],
690
+ "properties": {
691
+ "anchor": {
692
+ "type": "string",
693
+ "minLength": 1,
694
+ "description": "基準にする相手の名前。 actors に書かれた名前をそのまま書く。"
695
+ },
696
+ "dir": {
697
+ "type": "string",
698
+ "enum": [
699
+ "right",
700
+ "left",
701
+ "above",
702
+ "below"
703
+ ],
704
+ "description": "基準からどちら側に置くか。"
705
+ },
706
+ "gap": {
707
+ "type": "number",
708
+ "description": "相手の縁との間隔。 書かなければ 160 で置く。"
709
+ }
710
+ }
711
+ },
265
712
  "visibleIf": {
266
713
  "type": "string",
267
714
  "description": "その箱を出すかどうかの条件。 状態を差し込める文字列で、\"0\" / \"false\" / 空文字が偽、それ以外は真。"
@@ -503,7 +950,7 @@
503
950
  },
504
951
  "tailSub": {
505
952
  "type": "string",
506
- "description": "クラス図の出どころ側の多重度 (例 \"1\")。 sub が行き先の端の多重度。 クラス図でだけ効く"
953
+ "description": "relation を書いた record の出どころ側の多重度 (例 \"1\")。 sub が行き先の端の多重度"
507
954
  },
508
955
  "tone": {
509
956
  "type": "string",
@@ -514,6 +961,7 @@
514
961
  "error",
515
962
  "warning",
516
963
  "info",
964
+ "muted",
517
965
  "成功",
518
966
  "失敗",
519
967
  "警告",
@@ -534,11 +982,11 @@
534
982
  },
535
983
  "guard": {
536
984
  "type": "string",
537
- "description": "state 遷移の条件 (kind: state 用)"
985
+ "description": "移り変わりの条件 (名前の下の行に出る)"
538
986
  },
539
987
  "cardinality": {
540
988
  "type": "string",
541
- "description": "ER の多重度 (1..N 等、 kind: er 用)"
989
+ "description": "ER の多重度 (type: record 用)。 1:1 / 1:N / N:1 / N:M / 0..1 / 1..* のどれかを書くと、 両端の形がその語から決まり (tailHead / head を書けばそちらが勝つ)、 語は説明文の下の行に出る。 説明文に書いた同じ語は説明文から外す。 6 語以外を書くと説明文に (語) と添えるだけで、 端の形は決まらない (tailHead と head を両方書かなければ、 描かない端を知らせる)。 type: record 以外の図種では描かず、 そのことを知らせる"
542
990
  },
543
991
  "side": {
544
992
  "type": "string",
@@ -550,10 +998,21 @@
550
998
  ],
551
999
  "description": "矢印がどの辺から出るか。 書かなければ描画側が自動で選ぶ。"
552
1000
  },
1001
+ "fromSide": {
1002
+ "type": "string",
1003
+ "enum": ["top", "right", "bottom", "left"],
1004
+ "description": "矢印が出どころのどの辺から出るか"
1005
+ },
1006
+ "toSide": {
1007
+ "type": "string",
1008
+ "enum": ["top", "right", "bottom", "left"],
1009
+ "description": "矢印が行き先のどの辺へ入るか"
1010
+ },
553
1011
  "head": {
554
1012
  "type": "string",
555
1013
  "enum": [
556
1014
  "none",
1015
+ "dot",
557
1016
  "triangle",
558
1017
  "diamond",
559
1018
  "open",
@@ -569,6 +1028,7 @@
569
1028
  "type": "string",
570
1029
  "enum": [
571
1030
  "none",
1031
+ "dot",
572
1032
  "triangle",
573
1033
  "diamond",
574
1034
  "open",
@@ -606,7 +1066,7 @@
606
1066
  "associates",
607
1067
  "uses"
608
1068
  ],
609
- "description": "クラス図の関係の語。 書くと端の形 / 塗り / 線種がまとめて決まる。"
1069
+ "description": "record に書く UML 関係の語。 書くと端の形 / 塗り / 線種がまとめて決まる。"
610
1070
  },
611
1071
  "role": {
612
1072
  "type": "string",
@@ -636,6 +1096,47 @@
636
1096
  "type": "number",
637
1097
  "description": "ラベル位置 y 調整"
638
1098
  },
1099
+ "posX1": {
1100
+ "type": "number",
1101
+ "description": "線の出どころ側を固定する world x 座標"
1102
+ },
1103
+ "posY1": {
1104
+ "type": "number",
1105
+ "description": "線の出どころ側を固定する world y 座標"
1106
+ },
1107
+ "posX2": {
1108
+ "type": "number",
1109
+ "description": "線の行き先側を固定する world x 座標"
1110
+ },
1111
+ "posY2": {
1112
+ "type": "number",
1113
+ "description": "線の行き先側を固定する world y 座標"
1114
+ },
1115
+ "waypoints": {
1116
+ "type": "array",
1117
+ "items": {
1118
+ "type": "object",
1119
+ "additionalProperties": false,
1120
+ "required": ["x", "y"],
1121
+ "properties": {
1122
+ "x": { "type": "number" },
1123
+ "y": { "type": "number" }
1124
+ }
1125
+ }
1126
+ },
1127
+ "labelCollision": {
1128
+ "type": "string",
1129
+ "enum": ["auto", "author"]
1130
+ },
1131
+ "labelSize": {
1132
+ "type": "object",
1133
+ "additionalProperties": false,
1134
+ "properties": {
1135
+ "width": { "$ref": "#/$defs/positiveNumber" },
1136
+ "height": { "$ref": "#/$defs/positiveNumber" },
1137
+ "fontSize": { "$ref": "#/$defs/positiveNumber" }
1138
+ }
1139
+ },
639
1140
  "overlay": {
640
1141
  "type": "boolean",
641
1142
  "description": "true で説明文を矢印の線の上に重ねる (分岐図の条件ラベル用)"
@@ -759,6 +1260,10 @@
759
1260
  "type": "string",
760
1261
  "description": "phase 説明文"
761
1262
  },
1263
+ "description": {
1264
+ "type": "string",
1265
+ "description": "phase 説明文の別名 (記法の description: と同じ)。 正の語は body で、 両方書いた段は body が効く"
1266
+ },
762
1267
  "badge": {
763
1268
  "type": "string",
764
1269
  "description": "phase 中に表示する badge label"
@@ -780,7 +1285,7 @@
780
1285
  "stacked",
781
1286
  "waffle"
782
1287
  ],
783
- "description": "この phase で起点から描くもの。 語は図種と揃える。 line / journey = 線が左端から右へ伸びる / bar = 棒が横軸から上へ伸びる / pie = 扇が 12 時から時計回りに開く / mind = 枝が中心から外へ伸びる / tree = 枝が根から下へ伸びる / gantt = 帯が各始端から右へ伸びる / funnel = 段が上端から順に積まれる / slope = 線が左の軸から右の軸へ伸びる / gauge = 弧が 9 時から上を通って 3 時へ伸びる / radial = 各輪が 12 時から時計回りに開く / stacked = 帯が左端から右へ伸びる / waffle = 印が左上から読む向きに 1 個ずつ埋まる"
1288
+ "description": "この phase で起点から描くもの。 語は図種と揃える (数を描く図では shape と揃える)。 line / journey = 線が左端から右へ伸びる / bar = 棒が横軸から上へ伸びる / pie = 扇が 12 時から時計回りに開く / mind = 枝が中心から外へ伸びる / tree = 枝が根から下へ伸びる / gantt = 帯が各始端から右へ伸びる / funnel = 段が上端から順に積まれる / slope = 線が左の軸から右の軸へ伸びる / gauge = 弧が 9 時から上を通って 3 時へ伸びる / radial = 各輪が 12 時から時計回りに開く / stacked = 帯が左端から右へ伸びる / waffle = 印が左上から読む向きに 1 個ずつ埋まる"
784
1289
  },
785
1290
  "drawRatio": {
786
1291
  "type": "number",
@@ -832,6 +1337,9 @@
832
1337
  "type": "number",
833
1338
  "minimum": 100
834
1339
  },
1340
+ "contentOffsetX": {
1341
+ "type": "number"
1342
+ },
835
1343
  "laneWidth": {
836
1344
  "type": "number",
837
1345
  "minimum": 100
@@ -875,6 +1383,9 @@
875
1383
  "label": {
876
1384
  "type": "string"
877
1385
  },
1386
+ "subtitle": {
1387
+ "type": "string"
1388
+ },
878
1389
  "contain": {
879
1390
  "type": "boolean"
880
1391
  },
@@ -2236,7 +2747,9 @@
2236
2747
  {
2237
2748
  "type": "object",
2238
2749
  "additionalProperties": false,
2239
- "required": ["expression"],
2750
+ "required": [
2751
+ "expression"
2752
+ ],
2240
2753
  "properties": {
2241
2754
  "expression": {
2242
2755
  "type": "string",
@@ -2266,13 +2779,157 @@
2266
2779
  ],
2267
2780
  "description": "図の並ぶ向き。 vertical = 1 つの縦列に積む。 horizontal = 1 人ずつ縦列を作る。 効くのは flow と swimlane だけ。"
2268
2781
  },
2782
+ "shape": {
2783
+ "type": "string",
2784
+ "enum": [
2785
+ "pie",
2786
+ "bar",
2787
+ "line",
2788
+ "gauge",
2789
+ "radial",
2790
+ "stat",
2791
+ "waffle",
2792
+ "stacked",
2793
+ "slope",
2794
+ "stages",
2795
+ "metro",
2796
+ "timeline"
2797
+ ],
2798
+ "description": "図種ごとの形。 chart では pie / bar / line / gauge / radial / stat / waffle / stacked / slope、swimlane では stages / metro / timeline が効く。 chart で書かなければ bar (棒の高さ)。"
2799
+ },
2800
+ "order": {
2801
+ "type": "string",
2802
+ "enum": [
2803
+ "kind"
2804
+ ],
2805
+ "description": "箱を並べ替える軸。 kind = actors の kind の順 (人 → 契約 → 保管 → 出来事) に並べ替える。 効くのは sequence だけ。 書かなければ書いた順のまま。"
2806
+ },
2807
+ "theme": {
2808
+ "type": "string",
2809
+ "enum": [
2810
+ "kinari",
2811
+ "celadon",
2812
+ "blueprint",
2813
+ "letterpress",
2814
+ "catalog",
2815
+ "terminal",
2816
+ "sketch",
2817
+ "neon",
2818
+ "relief"
2819
+ ],
2820
+ "description": "図の意匠 (`kinari` = 生成りに茶、`celadon` = 青磁に墨、`blueprint` = 図面、`letterpress` = 活版、`catalog` = 図録、`terminal` = 端末、`sketch` = 手描き、`neon` = 電飾、`relief` = 浮彫)。 名前だけが図に載り、色の値は使う側が決める。"
2821
+ },
2269
2822
  "palette": {
2270
2823
  "type": "string",
2271
2824
  "enum": [
2272
2825
  "kinari",
2273
- "celadon"
2826
+ "celadon",
2827
+ "blueprint",
2828
+ "letterpress",
2829
+ "catalog",
2830
+ "terminal",
2831
+ "sketch",
2832
+ "neon",
2833
+ "relief"
2274
2834
  ],
2275
- "description": "図の配色 (`kinari` = 生成りに茶、`celadon` = 青磁に墨) で、ER 図とクラス図は書かなくても `kinari` になり、書いた `palette` が優先され、名前だけが図に載って色の値は消費側が決める。"
2835
+ "description": "`theme` の別名。 `relief` (浮彫) を含む同じ意匠名を受ける。 両方書くと `theme` が勝ち、知らせが 1 件出る。"
2836
+ },
2837
+ "legend": {
2838
+ "type": "array",
2839
+ "description": "記法の legend と同じ、図の下へ置く凡例。",
2840
+ "items": {
2841
+ "type": "object",
2842
+ "additionalProperties": false,
2843
+ "required": ["text"],
2844
+ "properties": {
2845
+ "mark": {
2846
+ "type": "string",
2847
+ "enum": [
2848
+ "diamond",
2849
+ "filled-circle",
2850
+ "double-circle",
2851
+ "dotted-line",
2852
+ "solid-line",
2853
+ "curved-line",
2854
+ "rounded-label",
2855
+ "numbered-circle",
2856
+ "station",
2857
+ "arrow",
2858
+ "line-triangle-hollow",
2859
+ "line-diamond-hollow",
2860
+ "line-diamond-solid",
2861
+ "rounded-box"
2862
+ ]
2863
+ },
2864
+ "text": {
2865
+ "type": "string",
2866
+ "minLength": 1
2867
+ },
2868
+ "tone": { "type": "string" },
2869
+ "lineStyle": { "type": "string", "enum": ["solid", "dotted"] },
2870
+ "align": { "type": "string", "enum": ["start", "end"] },
2871
+ "lead": { "type": "string" }
2872
+ },
2873
+ "oneOf": [
2874
+ {
2875
+ "required": ["mark"],
2876
+ "not": { "anyOf": [{ "required": ["align"] }, { "required": ["lead"] }] }
2877
+ },
2878
+ {
2879
+ "not": { "required": ["mark"] },
2880
+ "allOf": [
2881
+ { "not": { "required": ["tone"] } },
2882
+ { "not": { "required": ["lineStyle"] } }
2883
+ ]
2884
+ }
2885
+ ]
2886
+ }
2887
+ },
2888
+ "legendFontSize": {
2889
+ "type": "number",
2890
+ "exclusiveMinimum": 0,
2891
+ "description": "凡例の字の大きさ"
2892
+ },
2893
+ "edgeEndGap": {
2894
+ "type": "number",
2895
+ "minimum": 0,
2896
+ "description": "線の両端と発着する箱の縁との隙間"
2897
+ },
2898
+ "legendOffset": {
2899
+ "type": "object",
2900
+ "additionalProperties": false,
2901
+ "properties": {
2902
+ "x": { "type": "number" },
2903
+ "y": { "type": "number" }
2904
+ }
2905
+ },
2906
+ "stageHeader": {
2907
+ "type": "object",
2908
+ "description": "段の箱で全意匠に共通して使う見出し寸法",
2909
+ "additionalProperties": false,
2910
+ "required": ["topPad", "numberSize", "gap", "nameSize", "bottomPad"],
2911
+ "properties": {
2912
+ "leftPad": { "type": "number", "minimum": 0 },
2913
+ "topPad": { "type": "number", "minimum": 0 },
2914
+ "numberSize": { "type": "number", "exclusiveMinimum": 0 },
2915
+ "gap": { "type": "number", "minimum": 0 },
2916
+ "nameSize": { "type": "number", "exclusiveMinimum": 0 },
2917
+ "bottomPad": { "type": "number", "minimum": 0 }
2918
+ }
2919
+ },
2920
+ "stageLayout": {
2921
+ "type": "object",
2922
+ "additionalProperties": false,
2923
+ "properties": {
2924
+ "columnWidths": {
2925
+ "type": "object",
2926
+ "additionalProperties": { "type": "number", "minimum": 0 }
2927
+ },
2928
+ "columnGap": { "type": "number", "minimum": 0 },
2929
+ "backDetourTopGap": { "type": "number", "minimum": 0 },
2930
+ "backDetourSideGap": { "type": "number", "minimum": 0 },
2931
+ "backDetourTargetInset": { "type": "number", "minimum": 0 }
2932
+ }
2276
2933
  },
2277
2934
  "reveal": {
2278
2935
  "type": "string",
@@ -2288,7 +2945,7 @@
2288
2945
  "off",
2289
2946
  "hover"
2290
2947
  ],
2291
- "description": "箱に触れると関係する線だけを光らせるか。 off (既定) = 何もしない。 hover = 箱に触れた時にその箱と繋がる線と相手の箱だけが光り、他が沈む。 順番を持たないクラス図と ER 図で使う。"
2948
+ "description": "箱に触れると関係する線だけを光らせるか。 off (既定) = 何もしない。 hover = 箱に触れた時にその箱と繋がる線と相手の箱だけが光り、他が沈む。 順番を持たない record の関係図で使う。"
2292
2949
  },
2293
2950
  "bands": {
2294
2951
  "type": "array",
@@ -2321,7 +2978,7 @@
2321
2978
  },
2322
2979
  "events": {
2323
2980
  "type": "array",
2324
- "description": "押下などの出来事で動く仕掛け。 相手は名前で指す (box / lane / arrow / diagram のどれか 1 つ)。",
2981
+ "description": "押下などの出来事で動く仕掛け。 相手は名前で指し、指し方の項目をちょうど 1 つだけ書く。",
2325
2982
  "items": {
2326
2983
  "type": "object",
2327
2984
  "required": [