@cardenelabs/dragon 0.15.0 → 0.16.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.d.cts CHANGED
@@ -269,7 +269,7 @@ type DslEventBinding = {
269
269
  handlerId: string;
270
270
  pos: Position;
271
271
  };
272
- type PresetType = "sequence" | "flow" | "swimlane" | "er" | "state" | "topology" | "solidity" | "gantt" | "class" | "pie" | "bar" | "line" | "funnel" | "tree" | "journey" | "quadrant" | "c4" | "mind";
272
+ type PresetType = "sequence" | "flow" | "swimlane" | "er" | "state" | "topology" | "solidity" | "gantt" | "class" | "pie" | "bar" | "line" | "gauge" | "radial" | "stat" | "waffle" | "stacked" | "funnel" | "tree" | "journey" | "quadrant" | "c4" | "mind";
273
273
  type Position = {
274
274
  line: number;
275
275
  column?: number;
@@ -407,6 +407,16 @@ type DslActor = {
407
407
  subtitle?: string;
408
408
  eyebrow?: string;
409
409
  value?: string;
410
+ /**
411
+ * 前の時点の値 (#1450)。
412
+ *
413
+ * 内訳の変化を帯で示す図 (`type: stacked`) が 2 本目の帯として描き、値 1 つを大きく示す図
414
+ * (`type: stat`) が差として出す。 書かない図は 1 本のまま (従来と同じ)。
415
+ *
416
+ * **3 時点以上は持たない**。 描画側が 2 時点で設計されており (`cdl#551`)、足すなら欄の形ごと
417
+ * 決め直すことになる。
418
+ */
419
+ previous?: string;
410
420
  rows?: string[];
411
421
  /**
412
422
  * 箱の中に描く図形 (`shape:`、 #1374)。 水位や角度を状態で動かせる。
@@ -727,6 +737,20 @@ type DslPhase = {
727
737
  * 相手の名前は書かせない = 対象の 8 図種はいずれも図全体を 1 箱で描くため相手が決まる。
728
738
  */
729
739
  draw?: string;
740
+ /**
741
+ * 描き終えるまでに段の何割を使うか (#1441)。
742
+ *
743
+ * `draw: line 0.4` のように語の後ろに書く。 0 より大きく 1 以下。
744
+ * 書かなければ段の終わりに描き終わる (従来どおり)。
745
+ *
746
+ * **段の長さと描く速さを切り離すための欄**。 伸び具合は段の進みそのものなので、
747
+ * これが無いと「線はゆっくり引きたいが値の移りは短くしたい」 が書けず、描く速さのために
748
+ * 段の長さを動かすことになる。 段の長さを動かすと同じ段の `tween` まで遅くなる。
749
+ *
750
+ * **`draw` と同じ行に書かせる**。 別の項目にすると「割合だけ書いて `draw` が無い段」 が
751
+ * 書けてしまい、何も起きない指定になる。 同じ行なら書けない。
752
+ */
753
+ drawRatio?: number;
730
754
  /**
731
755
  * `draw` を書いた行 (#1312)。 知らせの行番号に使う。
732
756
  *
@@ -1511,6 +1535,13 @@ interface JsonActor {
1511
1535
  subtitle?: string;
1512
1536
  eyebrow?: string;
1513
1537
  value?: string;
1538
+ /**
1539
+ * 前の時点の値 (#1450)。 記法の `{ value: "320", previous: "280" }` と同じ。
1540
+ *
1541
+ * 内訳の変化を帯で示す図 (`type: stacked`) が 2 本目の帯として描き、
1542
+ * 値 1 つを大きく示す図 (`type: stat`) が差として出す。 書かない図は 1 本のまま。
1543
+ */
1544
+ previous?: string;
1514
1545
  rows?: string[];
1515
1546
  lane?: string;
1516
1547
  stack?: number;
@@ -1655,6 +1686,13 @@ interface JsonPhase {
1655
1686
  * 受ける 8 語は `DRAW_WORDS` が持つ。 語と同じ図種で、その段の間に図が起点から現れる。
1656
1687
  */
1657
1688
  draw?: string;
1689
+ /**
1690
+ * 描き終えるまでに段の何割を使うか (#1441)。 記法の `draw: line 0.4` の後半と同じ。
1691
+ *
1692
+ * 0 より大きく 1 以下。 書かなければ段の終わりに描き終わる。 `draw` が無い段に書いても
1693
+ * 何も起きない (描く相手が決まらないため、写す時に外す)。
1694
+ */
1695
+ drawRatio?: number;
1658
1696
  /**
1659
1697
  * 段の中で値を動かす (#1186)。 記法の `tween: name 100 -> 90` と同じ。
1660
1698
  *
@@ -1825,6 +1863,10 @@ declare const diagramJsonSchema: {
1825
1863
  type: string;
1826
1864
  description: string;
1827
1865
  };
1866
+ previous: {
1867
+ type: string;
1868
+ description: string;
1869
+ };
1828
1870
  rows: {
1829
1871
  type: string;
1830
1872
  items: {
@@ -2232,6 +2274,12 @@ declare const diagramJsonSchema: {
2232
2274
  enum: string[];
2233
2275
  description: string;
2234
2276
  };
2277
+ drawRatio: {
2278
+ type: string;
2279
+ exclusiveMinimum: number;
2280
+ maximum: number;
2281
+ description: string;
2282
+ };
2235
2283
  tween: {
2236
2284
  type: string;
2237
2285
  description: string;
package/dist/index.d.ts CHANGED
@@ -269,7 +269,7 @@ type DslEventBinding = {
269
269
  handlerId: string;
270
270
  pos: Position;
271
271
  };
272
- type PresetType = "sequence" | "flow" | "swimlane" | "er" | "state" | "topology" | "solidity" | "gantt" | "class" | "pie" | "bar" | "line" | "funnel" | "tree" | "journey" | "quadrant" | "c4" | "mind";
272
+ type PresetType = "sequence" | "flow" | "swimlane" | "er" | "state" | "topology" | "solidity" | "gantt" | "class" | "pie" | "bar" | "line" | "gauge" | "radial" | "stat" | "waffle" | "stacked" | "funnel" | "tree" | "journey" | "quadrant" | "c4" | "mind";
273
273
  type Position = {
274
274
  line: number;
275
275
  column?: number;
@@ -407,6 +407,16 @@ type DslActor = {
407
407
  subtitle?: string;
408
408
  eyebrow?: string;
409
409
  value?: string;
410
+ /**
411
+ * 前の時点の値 (#1450)。
412
+ *
413
+ * 内訳の変化を帯で示す図 (`type: stacked`) が 2 本目の帯として描き、値 1 つを大きく示す図
414
+ * (`type: stat`) が差として出す。 書かない図は 1 本のまま (従来と同じ)。
415
+ *
416
+ * **3 時点以上は持たない**。 描画側が 2 時点で設計されており (`cdl#551`)、足すなら欄の形ごと
417
+ * 決め直すことになる。
418
+ */
419
+ previous?: string;
410
420
  rows?: string[];
411
421
  /**
412
422
  * 箱の中に描く図形 (`shape:`、 #1374)。 水位や角度を状態で動かせる。
@@ -727,6 +737,20 @@ type DslPhase = {
727
737
  * 相手の名前は書かせない = 対象の 8 図種はいずれも図全体を 1 箱で描くため相手が決まる。
728
738
  */
729
739
  draw?: string;
740
+ /**
741
+ * 描き終えるまでに段の何割を使うか (#1441)。
742
+ *
743
+ * `draw: line 0.4` のように語の後ろに書く。 0 より大きく 1 以下。
744
+ * 書かなければ段の終わりに描き終わる (従来どおり)。
745
+ *
746
+ * **段の長さと描く速さを切り離すための欄**。 伸び具合は段の進みそのものなので、
747
+ * これが無いと「線はゆっくり引きたいが値の移りは短くしたい」 が書けず、描く速さのために
748
+ * 段の長さを動かすことになる。 段の長さを動かすと同じ段の `tween` まで遅くなる。
749
+ *
750
+ * **`draw` と同じ行に書かせる**。 別の項目にすると「割合だけ書いて `draw` が無い段」 が
751
+ * 書けてしまい、何も起きない指定になる。 同じ行なら書けない。
752
+ */
753
+ drawRatio?: number;
730
754
  /**
731
755
  * `draw` を書いた行 (#1312)。 知らせの行番号に使う。
732
756
  *
@@ -1511,6 +1535,13 @@ interface JsonActor {
1511
1535
  subtitle?: string;
1512
1536
  eyebrow?: string;
1513
1537
  value?: string;
1538
+ /**
1539
+ * 前の時点の値 (#1450)。 記法の `{ value: "320", previous: "280" }` と同じ。
1540
+ *
1541
+ * 内訳の変化を帯で示す図 (`type: stacked`) が 2 本目の帯として描き、
1542
+ * 値 1 つを大きく示す図 (`type: stat`) が差として出す。 書かない図は 1 本のまま。
1543
+ */
1544
+ previous?: string;
1514
1545
  rows?: string[];
1515
1546
  lane?: string;
1516
1547
  stack?: number;
@@ -1655,6 +1686,13 @@ interface JsonPhase {
1655
1686
  * 受ける 8 語は `DRAW_WORDS` が持つ。 語と同じ図種で、その段の間に図が起点から現れる。
1656
1687
  */
1657
1688
  draw?: string;
1689
+ /**
1690
+ * 描き終えるまでに段の何割を使うか (#1441)。 記法の `draw: line 0.4` の後半と同じ。
1691
+ *
1692
+ * 0 より大きく 1 以下。 書かなければ段の終わりに描き終わる。 `draw` が無い段に書いても
1693
+ * 何も起きない (描く相手が決まらないため、写す時に外す)。
1694
+ */
1695
+ drawRatio?: number;
1658
1696
  /**
1659
1697
  * 段の中で値を動かす (#1186)。 記法の `tween: name 100 -> 90` と同じ。
1660
1698
  *
@@ -1825,6 +1863,10 @@ declare const diagramJsonSchema: {
1825
1863
  type: string;
1826
1864
  description: string;
1827
1865
  };
1866
+ previous: {
1867
+ type: string;
1868
+ description: string;
1869
+ };
1828
1870
  rows: {
1829
1871
  type: string;
1830
1872
  items: {
@@ -2232,6 +2274,12 @@ declare const diagramJsonSchema: {
2232
2274
  enum: string[];
2233
2275
  description: string;
2234
2276
  };
2277
+ drawRatio: {
2278
+ type: string;
2279
+ exclusiveMinimum: number;
2280
+ maximum: number;
2281
+ description: string;
2282
+ };
2235
2283
  tween: {
2236
2284
  type: string;
2237
2285
  description: string;
package/dist/index.js CHANGED
@@ -1994,6 +1994,11 @@ var PRESET_TYPES = /* @__PURE__ */ new Set([
1994
1994
  "pie",
1995
1995
  "bar",
1996
1996
  "line",
1997
+ "gauge",
1998
+ "radial",
1999
+ "stat",
2000
+ "waffle",
2001
+ "stacked",
1997
2002
  "funnel",
1998
2003
  "tree",
1999
2004
  "journey",
@@ -3427,6 +3432,11 @@ function applyContinuationLines(actor, rest, errors) {
3427
3432
  case "\u5024":
3428
3433
  out.value = stripQuotes(raw);
3429
3434
  break;
3435
+ // 前の時点の値 (#1450)。 内訳を帯で示す図と値 1 つを大きく示す図が読む
3436
+ case "previous":
3437
+ case "\u524D\u306E\u5024":
3438
+ out.previous = stripQuotes(raw);
3439
+ break;
3430
3440
  case "shape":
3431
3441
  case "\u56F3\u5F62":
3432
3442
  out.shape = \u56F3\u5F62\u3068\u3057\u3066\u8AAD\u3080(raw, ln.no, errors);
@@ -3574,6 +3584,9 @@ var ACTOR_ITEM_KEYS = /* @__PURE__ */ new Set([
3574
3584
  "\u88DC\u8DB3",
3575
3585
  "value",
3576
3586
  "\u5024",
3587
+ // 前の時点の値 (#1450)。 内訳の変化を帯で示す図と、値 1 つを大きく示す図が読む
3588
+ "previous",
3589
+ "\u524D\u306E\u5024",
3577
3590
  "rows",
3578
3591
  "\u884C",
3579
3592
  // 箱の中に描く図形 (#1374)
@@ -3699,6 +3712,7 @@ var ACTOR_RESERVED_FIELDS = /* @__PURE__ */ new Set([
3699
3712
  "subtitle",
3700
3713
  "eyebrow",
3701
3714
  "value",
3715
+ "previous",
3702
3716
  "rows",
3703
3717
  "lane",
3704
3718
  "stack",
@@ -3801,6 +3815,7 @@ var INLINE_ACTOR_ALIASES = {
3801
3815
  \u7A2E\u985E: "kind",
3802
3816
  \u88DC\u8DB3: "subtitle",
3803
3817
  \u5024: "value",
3818
+ \u524D\u306E\u5024: "previous",
3804
3819
  \u884C: "rows"
3805
3820
  };
3806
3821
  function \u4E2D\u62EC\u5F27\u306E\u5225\u540D\u3092\u5BC4\u305B\u308B(opts) {
@@ -3819,6 +3834,7 @@ var INLINE_ACTOR_KEYS = /* @__PURE__ */ new Set([
3819
3834
  "subtitle",
3820
3835
  "eyebrow",
3821
3836
  "value",
3837
+ "previous",
3822
3838
  "rows",
3823
3839
  "lane",
3824
3840
  "stack",
@@ -3930,6 +3946,7 @@ function parseActor2(line, errors) {
3930
3946
  owner: isPart ? void 0 : opts.owner,
3931
3947
  end: isPart ? void 0 : opts.end,
3932
3948
  value: opts.value,
3949
+ previous: opts.previous,
3933
3950
  rows: opts.rows ? opts.rows.replace(/^\[|\]$/g, "").split(/,(?![^[]*\])/).map((x) => stripQuotes(x.trim())).filter(Boolean) : void 0,
3934
3951
  lane: opts.lane,
3935
3952
  // 箱の中に描く図形 (#1374)。 パーツでは状態の上書きとして意味を持つため横取りしない
@@ -4261,16 +4278,34 @@ function parsePhase(block, errors) {
4261
4278
  continue;
4262
4279
  }
4263
4280
  if (key === "draw") {
4264
- const \u8A9E = stripQuotes(value).trim();
4281
+ const [\u8A9E = "", \u5272\u5408\u306E\u6587\u5B57, ...\u4F59\u308A] = stripQuotes(value).trim().split(/\s+/);
4265
4282
  if (!DRAW_WORDS.has(\u8A9E)) {
4266
4283
  errors.push({
4267
4284
  line: ln.no,
4268
4285
  message: `draw \u306B\u66F8\u3051\u306A\u3044\u8A9E\u3067\u3059: "${\u8A9E}"`,
4269
4286
  hint: `\u4F7F\u3048\u308B\u8A9E = ${[...DRAW_WORDS].join(", ")}`
4270
4287
  });
4288
+ } else if (\u4F59\u308A.length > 0) {
4289
+ errors.push({
4290
+ line: ln.no,
4291
+ message: `draw \u306B\u66F8\u3051\u308B\u9805\u76EE\u306F\u8A9E\u3068\u5272\u5408\u306E 2 \u3064\u307E\u3067\u3067\u3059: "${stripQuotes(value).trim()}"`,
4292
+ hint: "use `draw: line 0.4`"
4293
+ });
4271
4294
  } else {
4272
4295
  phase.draw = \u8A9E;
4273
4296
  phase.drawPos = { line: ln.no };
4297
+ if (\u5272\u5408\u306E\u6587\u5B57 !== void 0) {
4298
+ const \u5272\u5408 = Number(\u5272\u5408\u306E\u6587\u5B57);
4299
+ if (!Number.isFinite(\u5272\u5408) || \u5272\u5408 <= 0 || \u5272\u5408 > 1) {
4300
+ errors.push({
4301
+ line: ln.no,
4302
+ message: `draw \u306E\u5272\u5408\u304C\u7BC4\u56F2\u5916\u3067\u3059: "${\u5272\u5408\u306E\u6587\u5B57}"`,
4303
+ hint: "0 \u3088\u308A\u5927\u304D\u304F 1 \u4EE5\u4E0B\u3067\u66F8\u304D\u307E\u3059 (\u4F8B `draw: line 0.4`)"
4304
+ });
4305
+ } else {
4306
+ phase.drawRatio = \u5272\u5408;
4307
+ }
4308
+ }
4274
4309
  }
4275
4310
  i += 1;
4276
4311
  continue;
@@ -4814,6 +4849,21 @@ function compileToCdl(doc, opts) {
4814
4849
  case "line":
4815
4850
  diagram2 = compileValueChart(doc, "line", "chart-line", opts?.onNotice);
4816
4851
  break;
4852
+ case "gauge":
4853
+ diagram2 = compileValueChart(doc, "gauge", "chart-gauge", opts?.onNotice);
4854
+ break;
4855
+ case "radial":
4856
+ diagram2 = compileValueChart(doc, "radial", "chart-radial", opts?.onNotice);
4857
+ break;
4858
+ case "stat":
4859
+ diagram2 = compileValueChart(doc, "stat", "chart-stat", opts?.onNotice);
4860
+ break;
4861
+ case "waffle":
4862
+ diagram2 = compileValueChart(doc, "waffle", "chart-waffle", opts?.onNotice);
4863
+ break;
4864
+ case "stacked":
4865
+ diagram2 = compileValueChart(doc, "stacked", "chart-stacked-bar", opts?.onNotice);
4866
+ break;
4817
4867
  case "funnel":
4818
4868
  diagram2 = compileFunnel(doc, opts?.onNotice);
4819
4869
  break;
@@ -5072,6 +5122,11 @@ var \u56F3\u7A2E\u306E\u4F5C\u308A = {
5072
5122
  pie: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5073
5123
  bar: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5074
5124
  line: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5125
+ gauge: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5126
+ radial: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5127
+ stat: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5128
+ waffle: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5129
+ stacked: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5075
5130
  funnel: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5076
5131
  tree: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
5077
5132
  journey: "\u56F3\u5168\u4F53\u3092 1 \u7BB1",
@@ -5230,6 +5285,11 @@ var \u7A7A\u306E\u5F62\u306E\u9003\u3052\u5148 = {
5230
5285
  pie: [],
5231
5286
  bar: [],
5232
5287
  line: [],
5288
+ gauge: [],
5289
+ radial: [],
5290
+ stat: [],
5291
+ waffle: [],
5292
+ stacked: [],
5233
5293
  funnel: [],
5234
5294
  tree: [],
5235
5295
  journey: [],
@@ -7078,10 +7138,13 @@ function \u53C2\u7167\u3059\u308B\u540D\u524D(value) {
7078
7138
  function compileValueChart(doc, \u578B, kind, onNotice) {
7079
7139
  const b = diagram(slugify(doc.title), { topic: doc.title });
7080
7140
  const CHART_W = 640;
7081
- const CHART_H = \u578B === "pie" ? 320 : 368;
7141
+ const \u4F4E\u3044\u578B = \u578B === "pie" || \u578B === "gauge" || \u578B === "radial" || \u578B === "waffle" || \u578B === "stat";
7142
+ const CHART_H = \u4F4E\u3044\u578B ? 320 : 368;
7082
7143
  b.lane("chart", { width: CHART_W + 64 });
7083
7144
  const data = [];
7084
7145
  const \u8AAD\u3081\u306A\u3044 = [];
7146
+ const \u524D\u304C\u8AAD\u3081\u306A\u3044 = [];
7147
+ let \u524D\u304C\u8AAD\u3081\u306A\u3044\u884C = 0;
7085
7148
  const \u672A\u5BA3\u8A00 = [];
7086
7149
  let \u672A\u5BA3\u8A00\u884C = 0;
7087
7150
  const \u53C2\u7167\u3067\u304D\u308B = \u6570\u306E\u6B04\u304B\u3089\u53C2\u7167\u3067\u304D\u308B\u540D\u524D(doc);
@@ -7099,9 +7162,29 @@ function compileValueChart(doc, \u578B, kind, onNotice) {
7099
7162
  \u672A\u5BA3\u8A00.push(a.name);
7100
7163
  continue;
7101
7164
  }
7102
- data.push({ label: \u7BB1\u306E\u984C(a), value, ...a.tone !== void 0 ? { tone: a.tone } : {} });
7165
+ const \u524D = a.previous === void 0 ? null : parseChartValue(a.previous);
7166
+ if (a.previous !== void 0 && \u524D === null) {
7167
+ if (\u524D\u304C\u8AAD\u3081\u306A\u3044.length === 0) \u524D\u304C\u8AAD\u3081\u306A\u3044\u884C = a.pos?.line ?? 0;
7168
+ \u524D\u304C\u8AAD\u3081\u306A\u3044.push(a.name);
7169
+ }
7170
+ data.push({
7171
+ label: \u7BB1\u306E\u984C(a),
7172
+ value,
7173
+ ...\u524D === null ? {} : { previous: \u524D },
7174
+ ...a.tone !== void 0 ? { tone: a.tone } : {}
7175
+ });
7103
7176
  }
7104
- const \u8A9E = \u578B === "pie" ? { \u91CF: "\u5272\u5408", \u56F3: "\u5186", \u4F8B: '"45%"' } : \u578B === "bar" ? { \u91CF: "\u5024", \u56F3: "\u68D2", \u4F8B: '"420"' } : { \u91CF: "\u5024", \u56F3: "\u6298\u308C\u7DDA", \u4F8B: '"180"' };
7177
+ const \u8A9E\u306E\u8868 = {
7178
+ pie: { \u91CF: "\u5272\u5408", \u56F3: "\u5186", \u4F8B: '"45%"' },
7179
+ bar: { \u91CF: "\u5024", \u56F3: "\u68D2", \u4F8B: '"420"' },
7180
+ line: { \u91CF: "\u5024", \u56F3: "\u6298\u308C\u7DDA", \u4F8B: '"180"' },
7181
+ gauge: { \u91CF: "\u5024", \u56F3: "\u534A\u5186", \u4F8B: '"680"' },
7182
+ radial: { \u91CF: "\u5024", \u56F3: "\u5F27", \u4F8B: '"72"' },
7183
+ stat: { \u91CF: "\u5024", \u56F3: "\u5927\u304D\u306A\u6570\u5B57", \u4F8B: '"1200"' },
7184
+ waffle: { \u91CF: "\u5272\u5408", \u56F3: "100 \u500B\u306E\u5370", \u4F8B: '"45%"' },
7185
+ stacked: { \u91CF: "\u5185\u8A33\u306E\u5024", \u56F3: "\u5E2F", \u4F8B: '"320"' }
7186
+ };
7187
+ const \u8A9E = \u8A9E\u306E\u8868[\u578B];
7105
7188
  const \u4F1D\u3048\u308B = (\u7A2E\u985E, \u540D\u524D, message, line = 0) => {
7106
7189
  onNotice?.({ kind: \u7A2E\u985E, actor: \u540D\u524D, line, message });
7107
7190
  if (typeof console !== "undefined" && console.warn) console.warn(`[dragon] ${message}`);
@@ -7122,6 +7205,14 @@ function compileValueChart(doc, \u578B, kind, onNotice) {
7122
7205
  \u672A\u5BA3\u8A00\u884C
7123
7206
  );
7124
7207
  }
7208
+ if (\u524D\u304C\u8AAD\u3081\u306A\u3044.length > 0) {
7209
+ \u4F1D\u3048\u308B(
7210
+ "chart-value-unreadable",
7211
+ \u524D\u304C\u8AAD\u3081\u306A\u3044[0],
7212
+ `type: ${\u578B} \u3067\u524D\u306E\u6642\u70B9\u306E\u5024\u3092\u8AAD\u3081\u306A\u3044\u9805\u76EE\u304C\u3042\u308A\u307E\u3059 (\u524D\u306E\u5024\u3092\u4F7F\u3044\u307E\u305B\u3093): ${\u524D\u304C\u8AAD\u3081\u306A\u3044.join(", ")}\u3002 \`- \u540D\u524D: { value: ` + \u8A9E.\u4F8B + ", previous: " + \u8A9E.\u4F8B + " }` \u306E\u5F62\u3067\u66F8\u3044\u3066\u304F\u3060\u3055\u3044",
7213
+ \u524D\u304C\u8AAD\u3081\u306A\u3044\u884C
7214
+ );
7215
+ }
7125
7216
  if (doc.flow.length > 0) {
7126
7217
  \u4F1D\u3048\u308B(
7127
7218
  "chart-edge-dropped",
@@ -7617,6 +7708,7 @@ var \u653E\u5C04\u3067\u63CF\u3051\u306A\u3044\u6B04\u306E\u540D\u524D = {
7617
7708
  stack: "\u7A4D\u3080\u9806",
7618
7709
  initial: "\u59CB\u307E\u308A / \u7D42\u308F\u308A \u306E\u5370",
7619
7710
  final: "\u59CB\u307E\u308A / \u7D42\u308F\u308A \u306E\u5370",
7711
+ previous: "\u524D\u306E\u6642\u70B9\u306E\u5024",
7620
7712
  colorHex: "\u8272\u756A\u53F7",
7621
7713
  stateOverride: "\u72B6\u614B\u306E\u4E0A\u66F8\u304D",
7622
7714
  // 位置は「登場人物ごとの箱をどこに置くか」 の指定で、 箱が 1 つの図では置く先が無い
@@ -7984,6 +8076,9 @@ function injectPhasesFallback(diagram2, doc) {
7984
8076
  body: p.body ?? "",
7985
8077
  activate: activateIds,
7986
8078
  ...drawIds.length > 0 ? { draw: drawIds } : {},
8079
+ // 描く速さ (#1441)。 **描く相手が決まった段にだけ載せる** = 語が効かない図種
8080
+ // (`drawIds` が空) で割合だけ渡すと、描画側が「draw が空なのに割合がある」 と知らせる
8081
+ ...drawIds.length > 0 && p.drawRatio !== void 0 ? { drawRatio: p.drawRatio } : {},
7987
8082
  tweens: (p.tweens ?? []).map((t) => ({ stateId: t.state, from: t.from, to: t.to })),
7988
8083
  sets: (p.sets ?? []).map((s) => ({ stateId: s.state, value: s.value })),
7989
8084
  ...p.badge ? { badge: p.badge } : {}
@@ -8263,8 +8358,14 @@ function \u59CB\u307E\u308A\u3068\u7D42\u308F\u308A\u306E\u6C7A\u3081\u65B9(doc)
8263
8358
  \u7D42\u308F\u308A: (a, idx) => \u66F8\u3044\u305F\u7D42\u308F\u308A ? a.final === true : idx === doc.actors.length - 1 && doc.actors.length > 1
8264
8359
  };
8265
8360
  }
8361
+ var \u72B6\u614B\u306E\u56F3\u306E\u65E2\u5B9A\u306E\u7A2E\u985E = "card";
8362
+ function \u65E2\u5B9A\u3068\u9055\u3046\u7A2E\u985E\u3092\u66F8\u3044\u305F(doc) {
8363
+ return doc.actors.some(
8364
+ (a) => a.kindWritten === true && \u63CF\u3051\u308B\u7A2E\u5225(a.kind) !== \u72B6\u614B\u306E\u56F3\u306E\u65E2\u5B9A\u306E\u7A2E\u985E
8365
+ );
8366
+ }
8266
8367
  function compileState(doc) {
8267
- if (doc.animate && doc.animate.phases.length > 0) {
8368
+ if (doc.animate && doc.animate.phases.length > 0 || \u65E2\u5B9A\u3068\u9055\u3046\u7A2E\u985E\u3092\u66F8\u3044\u305F(doc)) {
8268
8369
  return compileGenericWithAnimate(doc, { kind: "state", laneWidth: 360 });
8269
8370
  }
8270
8371
  const fsm = stateMachine({
@@ -9135,6 +9236,8 @@ var ACCEPTED_KEYS = {
9135
9236
  "subtitle",
9136
9237
  "eyebrow",
9137
9238
  "value",
9239
+ // 前の時点の値 (#1450)。 内訳の変化を帯で示す図と、値 1 つを大きく示す図が読む
9240
+ "previous",
9138
9241
  "rows",
9139
9242
  "lane",
9140
9243
  "stack",
@@ -9187,7 +9290,7 @@ var ACCEPTED_KEYS = {
9187
9290
  "overlay",
9188
9291
  "pos"
9189
9292
  ],
9190
- phase: ["step", "duration", "focus", "body", "badge", "tween", "set", "draw"],
9293
+ phase: ["step", "duration", "focus", "body", "badge", "tween", "set", "draw", "drawRatio"],
9191
9294
  viewport: ["width", "height", "scale", "laneWidth", "gap", "laneGap", "nodeGap", "labelMargin"],
9192
9295
  lane: ["x", "width", "label", "contain", "lifeline", "pos"],
9193
9296
  group: ["label", "lanes"],
@@ -9227,6 +9330,7 @@ var \u6B04\u306E\u578B\u8868 = {
9227
9330
  subtitle: "\u6587\u5B57\u5217",
9228
9331
  eyebrow: "\u6587\u5B57\u5217",
9229
9332
  value: "\u6587\u5B57\u5217",
9333
+ previous: "\u6587\u5B57\u5217",
9230
9334
  rows: "\u6587\u5B57\u5217\u306E\u4E26\u3073",
9231
9335
  lane: "\u6587\u5B57\u5217",
9232
9336
  stack: "\u6570",
@@ -9287,7 +9391,8 @@ var \u6B04\u306E\u578B\u8868 = {
9287
9391
  badge: "\u6587\u5B57\u5217",
9288
9392
  tween: "object",
9289
9393
  set: "object",
9290
- draw: "\u63CF\u304F\u3082\u306E"
9394
+ draw: "\u63CF\u304F\u3082\u306E",
9395
+ drawRatio: "\u6570"
9291
9396
  },
9292
9397
  viewport: {
9293
9398
  width: "\u6570",
@@ -10325,6 +10430,7 @@ function jsonToDoc(json) {
10325
10430
  subtitle: a.subtitle,
10326
10431
  eyebrow: a.eyebrow,
10327
10432
  value: a.value,
10433
+ previous: a.previous,
10328
10434
  rows: a.rows,
10329
10435
  lane: a.lane,
10330
10436
  stack: a.stack,
@@ -10425,6 +10531,9 @@ function jsonToDoc(json) {
10425
10531
  badge: p.badge,
10426
10532
  // 書いた段だけが欄を持つ。 空文字を置くと「書いた」 と「書いていない」 が同じ形になる
10427
10533
  ...p.draw !== void 0 ? { draw: p.draw, drawPos: p0 } : {},
10534
+ // 割合は `draw` がある段にだけ写す。 単独で書いても描く相手が決まらず何も起きないので、
10535
+ // 記法側 (同じ行に書かせる形) と同じ状態に揃える
10536
+ ...p.draw !== void 0 && p.drawRatio !== void 0 ? { drawRatio: p.drawRatio } : {},
10428
10537
  // 段の中で動かす分 (#1186)。 記法側の `tweens` / `sets` と同じ形に写す。
10429
10538
  // 空の配列を置かないのは、記法側が「無ければ field ごと持たない」 形だから
10430
10539
  ...p.tween && Object.keys(p.tween).length > 0 ? {
@@ -10520,6 +10629,11 @@ var diagram_default = {
10520
10629
  "pie",
10521
10630
  "bar",
10522
10631
  "line",
10632
+ "gauge",
10633
+ "radial",
10634
+ "stat",
10635
+ "waffle",
10636
+ "stacked",
10523
10637
  "funnel",
10524
10638
  "tree",
10525
10639
  "journey",
@@ -10527,11 +10641,11 @@ var diagram_default = {
10527
10641
  "c4",
10528
10642
  "mind"
10529
10643
  ],
10530
- description: '\u56F3\u306E\u7A2E\u985E\u3002 \u578B\u3054\u3068\u306B actors \u306E\u66F8\u304D\u65B9\u304C\u9055\u3046\u3002 [\u95A2\u4FC2\u3092\u63CF\u304F] sequence (\u6642\u7CFB\u5217\u306E\u547C\u3073\u51FA\u3057) / flow (\u51E6\u7406\u306E\u6D41\u308C) / swimlane (\u8CAC\u52D9\u3054\u3068\u306E\u6D41\u308C) / er (DB \u306E schema) / state (\u72B6\u614B\u306E\u9077\u79FB) / topology (network) / solidity (contract) / class (UML \u306E class) / c4 (architecture) / mind (\u767A\u60F3\u306E\u679D\u5206\u304B\u308C) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306B\u77E2\u5370\u3092\u66F8\u304F\u3002 [\u5024\u3092\u63CF\u304F] pie (\u5272\u5408) / bar (\u68D2\u306E\u9AD8\u3055) / line (\u7DDA\u306E\u9AD8\u3055\u3001 \u66F8\u3044\u305F\u9806\u306B\u4E26\u3076) \u306F actors \u306B `- \u540D\u524D: "45"` \u306E\u5F62\u3067\u6570\u3092\u66F8\u304F\u3002 funnel (\u6BB5\u3054\u3068\u306B\u6E1B\u308B\u6570) \u3082\u540C\u3058\u5F62\u3002 [\u8A9E\u3092\u63CF\u304F] journey (\u4F53\u9A13\u306E\u8D77\u4F0F) \u306F `- \u767B\u9332: "\u4E0D\u6E80"` \u306E\u5F62\u3067 \u6700\u9AD8 / \u6E80\u8DB3 / \u666E\u901A / \u4E0D\u6E80 / \u6012\u308A \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 quadrant (2 \u8EF8\u306E\u4ED5\u5206\u3051) \u306F `- \u91CD\u8907\u524A\u9664: "\u5DE6\u4E0A"` \u306E\u5F62\u3067 \u5DE6\u4E0A / \u53F3\u4E0A / \u5DE6\u4E0B / \u53F3\u4E0B \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 [\u6642\u671F\u3092\u63CF\u304F] gantt (\u5DE5\u7A0B\u306E\u4E26\u3073) \u306F `- \u8A2D\u8A08: "1\u6708"` \u306E\u5F62\u3067\u59CB\u307E\u308A\u306E\u6642\u671F\u3092\u66F8\u304D\u3001 flow \u306E\u77E2\u5370\u3067\u524D\u5F8C\u95A2\u4FC2\u3092\u66F8\u304F\u3002 [\u89AA\u5B50\u3092\u63CF\u304F] tree (\u89AA\u5B50\u306E\u5165\u308C\u5B50) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306E\u77E2\u5370\u3067\u89AA\u5B50\u3092\u66F8\u304F (\u77E2\u5370\u306E\u5148\u304C\u5B50)'
10644
+ description: '\u56F3\u306E\u7A2E\u985E\u3002 \u578B\u3054\u3068\u306B actors \u306E\u66F8\u304D\u65B9\u304C\u9055\u3046\u3002 [\u95A2\u4FC2\u3092\u63CF\u304F] sequence (\u6642\u7CFB\u5217\u306E\u547C\u3073\u51FA\u3057) / flow (\u51E6\u7406\u306E\u6D41\u308C) / swimlane (\u8CAC\u52D9\u3054\u3068\u306E\u6D41\u308C) / er (DB \u306E schema) / state (\u72B6\u614B\u306E\u9077\u79FB) / topology (network) / solidity (contract) / class (UML \u306E class) / c4 (architecture) / mind (\u767A\u60F3\u306E\u679D\u5206\u304B\u308C) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306B\u77E2\u5370\u3092\u66F8\u304F\u3002 [\u5024\u3092\u63CF\u304F] pie (\u5272\u5408) / bar (\u68D2\u306E\u9AD8\u3055) / line (\u7DDA\u306E\u9AD8\u3055\u3001 \u66F8\u3044\u305F\u9806\u306B\u4E26\u3076) / gauge (\u5408\u8A08\u3092\u534A\u5186\u3067\u793A\u3059) / radial (\u5F27\u306E\u9577\u3055\u3067\u6BD4\u3079\u308B) / stat (\u5024 1 \u3064\u3092\u5927\u304D\u304F\u793A\u3059) / waffle (\u5272\u5408\u3092 100 \u500B\u306E\u5370\u3067\u793A\u3059) / stacked (\u5185\u8A33\u3092\u5E2F\u3067\u793A\u3059) \u306F actors \u306B `- \u540D\u524D: "45"` \u306E\u5F62\u3067\u6570\u3092\u66F8\u304F\u3002 stat \u3068 stacked \u306F `- \u540D\u524D: { value: "320", previous: "280" }` \u306E\u5F62\u3067\u524D\u306E\u6642\u70B9\u306E\u5024\u3082\u66F8\u3051\u308B\u3002 funnel (\u6BB5\u3054\u3068\u306B\u6E1B\u308B\u6570) \u3082\u540C\u3058\u5F62\u3002 [\u8A9E\u3092\u63CF\u304F] journey (\u4F53\u9A13\u306E\u8D77\u4F0F) \u306F `- \u767B\u9332: "\u4E0D\u6E80"` \u306E\u5F62\u3067 \u6700\u9AD8 / \u6E80\u8DB3 / \u666E\u901A / \u4E0D\u6E80 / \u6012\u308A \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 quadrant (2 \u8EF8\u306E\u4ED5\u5206\u3051) \u306F `- \u91CD\u8907\u524A\u9664: "\u5DE6\u4E0A"` \u306E\u5F62\u3067 \u5DE6\u4E0A / \u53F3\u4E0A / \u5DE6\u4E0B / \u53F3\u4E0B \u306E\u3069\u308C\u304B\u3092\u66F8\u304F\u3002 [\u6642\u671F\u3092\u63CF\u304F] gantt (\u5DE5\u7A0B\u306E\u4E26\u3073) \u306F `- \u8A2D\u8A08: "1\u6708"` \u306E\u5F62\u3067\u59CB\u307E\u308A\u306E\u6642\u671F\u3092\u66F8\u304D\u3001 flow \u306E\u77E2\u5370\u3067\u524D\u5F8C\u95A2\u4FC2\u3092\u66F8\u304F\u3002 [\u89AA\u5B50\u3092\u63CF\u304F] tree (\u89AA\u5B50\u306E\u5165\u308C\u5B50) \u306F actors \u306B\u540D\u524D\u3092\u4E26\u3079 flow \u306E\u77E2\u5370\u3067\u89AA\u5B50\u3092\u66F8\u304F (\u77E2\u5370\u306E\u5148\u304C\u5B50)'
10531
10645
  },
10532
10646
  eyebrow: {
10533
10647
  type: "string",
10534
- description: "\u56F3\u8868\u306E\u7BB1\u306E\u4E0A\u306B\u51FA\u3059\u5C0F\u898B\u51FA\u3057 (\u7701\u7565\u53EF)\u3002 \u52B9\u304F\u306E\u306F\u56F3\u5168\u4F53\u3092 1 \u7BB1\u306B\u3059\u308B\u578B (pie / bar / line / funnel / tree / journey / quadrant / mind / gantt) \u3060\u3051\u3002 \u7BB1\u3054\u3068\u306B\u5206\u304B\u308C\u308B\u578B\u3067\u306F\u76F8\u624B\u304C\u6C7A\u307E\u3089\u306A\u3044\u305F\u3081\u3001 actors[].eyebrow \u306B\u66F8\u304F"
10648
+ description: "\u56F3\u8868\u306E\u7BB1\u306E\u4E0A\u306B\u51FA\u3059\u5C0F\u898B\u51FA\u3057 (\u7701\u7565\u53EF)\u3002 \u52B9\u304F\u306E\u306F\u56F3\u5168\u4F53\u3092 1 \u7BB1\u306B\u3059\u308B\u578B (pie / bar / line / gauge / radial / stat / waffle / stacked / funnel / tree / journey / quadrant / mind / gantt) \u3060\u3051\u3002 \u7BB1\u3054\u3068\u306B\u5206\u304B\u308C\u308B\u578B\u3067\u306F\u76F8\u624B\u304C\u6C7A\u307E\u3089\u306A\u3044\u305F\u3081\u3001 actors[].eyebrow \u306B\u66F8\u304F"
10535
10649
  },
10536
10650
  axes: {
10537
10651
  type: "object",
@@ -10600,6 +10714,10 @@ var diagram_default = {
10600
10714
  type: "string",
10601
10715
  description: "actor \u6570\u5024\u8868\u793A (kind: actor \u7528)"
10602
10716
  },
10717
+ previous: {
10718
+ type: "string",
10719
+ description: "\u524D\u306E\u6642\u70B9\u306E\u5024\u3002 type: stacked \u304C 2 \u672C\u76EE\u306E\u5E2F\u3068\u3057\u3066\u63CF\u304D\u3001type: stat \u304C\u5DEE\u3068\u3057\u3066\u51FA\u3059\u3002 \u66F8\u304B\u306A\u3044\u56F3\u306F 1 \u672C\u306E\u307E\u307E"
10720
+ },
10603
10721
  rows: {
10604
10722
  type: "array",
10605
10723
  items: {
@@ -11077,6 +11195,12 @@ var diagram_default = {
11077
11195
  enum: ["line", "bar", "pie", "journey", "mind", "tree", "gantt", "funnel"],
11078
11196
  description: "\u3053\u306E phase \u3067\u8D77\u70B9\u304B\u3089\u63CF\u304F\u3082\u306E\u3002 \u8A9E\u306F\u56F3\u7A2E\u3068\u63C3\u3048\u308B\u3002 line / journey = \u7DDA\u304C\u5DE6\u7AEF\u304B\u3089\u53F3\u3078\u4F38\u3073\u308B / bar = \u68D2\u304C\u6A2A\u8EF8\u304B\u3089\u4E0A\u3078\u4F38\u3073\u308B / pie = \u6247\u304C 12 \u6642\u304B\u3089\u6642\u8A08\u56DE\u308A\u306B\u958B\u304F / mind = \u679D\u304C\u4E2D\u5FC3\u304B\u3089\u5916\u3078\u4F38\u3073\u308B / tree = \u679D\u304C\u6839\u304B\u3089\u4E0B\u3078\u4F38\u3073\u308B / gantt = \u5E2F\u304C\u5404\u59CB\u7AEF\u304B\u3089\u53F3\u3078\u4F38\u3073\u308B / funnel = \u6BB5\u304C\u4E0A\u7AEF\u304B\u3089\u9806\u306B\u7A4D\u307E\u308C\u308B"
11079
11197
  },
11198
+ drawRatio: {
11199
+ type: "number",
11200
+ exclusiveMinimum: 0,
11201
+ maximum: 1,
11202
+ description: "\u63CF\u304D\u7D42\u3048\u308B\u307E\u3067\u306B phase \u306E\u4F55\u5272\u3092\u4F7F\u3046\u304B\u3002 0.4 \u306A\u3089\u9032\u307F\u304C 0.4 \u306B\u9054\u3057\u305F\u6642\u70B9\u3067\u63CF\u304D\u7D42\u308F\u308A\u3001\u6B8B\u308A\u306F\u63CF\u304D\u7D42\u308F\u3063\u305F\u59FF\u306E\u307E\u307E\u5024\u3060\u3051\u304C\u52D5\u304F\u3002 \u66F8\u304B\u306A\u3051\u308C\u3070 phase \u306E\u7D42\u308F\u308A\u306B\u63CF\u304D\u7D42\u308F\u308B\u3002 draw \u3068\u4E00\u7DD2\u306B\u66F8\u304F (draw \u304C\u7121\u3044\u3068\u4F55\u3082\u8D77\u304D\u306A\u3044)"
11203
+ },
11080
11204
  tween: {
11081
11205
  type: "object",
11082
11206
  description: "\u3053\u306E phase \u3067\u88DC\u9593\u3059\u308B\u72B6\u614B\u3002 \u72B6\u614B\u540D -> [\u958B\u59CB\u5024, \u7D42\u4E86\u5024]\u3002 \u540D\u524D\u306F\u82F1\u5B57\u304B _ \u3067\u59CB\u3081\u3001 \u82F1\u6570\u5B57\u3068 _ \u3060\u3051\u3092\u4F7F\u3046",