@cardenelabs/cdl 0.27.0 → 0.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cardenelabs/cdl",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "description": "CDL (Chainome Diagram Language). Mermaid-like declarative DSL that compiles to animated SVG diagrams. Built for blockchain / Solidity flows, generic enough for sequence / flow / state / ER / topology diagrams.",
5
5
  "license": "MIT",
6
6
  "author": "cardene777",
package/src/presets.ts CHANGED
@@ -1347,6 +1347,38 @@ export const CLASS_RELATION_LOOK: Record<
1347
1347
  uses: { head: "open", fill: "solid", tailHead: "none", tailFill: "solid", style: "dashed" },
1348
1348
  };
1349
1349
 
1350
+ /**
1351
+ * 関係の 6 種を 3 群に寄せた色み (#641)。
1352
+ *
1353
+ * 足す前は 6 種とも 1 色で、種類の違いが色に出なかった。 見分けを担うのは 線 / 印の形 /
1354
+ * 印が付く側 の 3 軸だけで、6 種を 1 枚に並べると印の形まで見ないとどれがどれか判らない。
1355
+ *
1356
+ * **群の中は色を分けない**。 群の中の 2 種は既に線か印の塗りで分かれているので、色まで足すと
1357
+ * 同じことを 2 回言うことになる。 色が担うのは群の見分けだけ。
1358
+ *
1359
+ * | 群 | 種類 | 群の中の見分け |
1360
+ * |---|---|---|
1361
+ * | 縦の関係 | `extends` / `implements` | 線 (実線 / 破線) |
1362
+ * | 所有 | `aggregates` / `composes` | 印の塗り (白抜き / 塗る) |
1363
+ * | 向きだけ | `associates` / `uses` | 線 (実線 / 破線) |
1364
+ *
1365
+ * 群の分け方は `CLASS_RELATION_LOOK` と同じ = あちらの 印の形 が群を表しており、
1366
+ * 三角 = 縦の関係 / 菱 = 所有 / 開いた矢 = 向きだけ に 1 対 1 で対応する。
1367
+ *
1368
+ * **色の値は持たない**。 描き手は名前だけを図に載せ、実際の色は消費側が `data-cdl-tone` を
1369
+ * 見て当てる。 値を持たせると、色を変えるたびに描き手を出し直すことになる。
1370
+ *
1371
+ * `Record<ClassRelationType, Tone>` なので、種類を足すと色みも要る。
1372
+ */
1373
+ export const CLASS_RELATION_TONE: Record<ClassRelationType, Tone> = {
1374
+ extends: "accent",
1375
+ implements: "accent",
1376
+ aggregates: "teal",
1377
+ composes: "teal",
1378
+ associates: "success",
1379
+ uses: "success",
1380
+ };
1381
+
1350
1382
  /** 端の形だけを引く経路 (cdl#574 からの名前を残す)。 実体は `CLASS_RELATION_LOOK` */
1351
1383
  export const CLASS_RELATION_HEAD: Record<ClassRelationType, EdgeHead> = Object.fromEntries(
1352
1384
  Object.entries(CLASS_RELATION_LOOK).map(([k, v]) => [k, v.head]),
@@ -1457,7 +1489,13 @@ export type ClassDiagramBuilder = {
1457
1489
  */
1458
1490
  export function classDiagram(preset: ClassDiagramPreset): ClassDiagramBuilder {
1459
1491
  const classW = resolveStorageBoxW(preset.classWidth, "classDiagram", "classWidth");
1460
- const tone: Tone = preset.defaultTone ?? "info";
1492
+ /**
1493
+ * 図ぜんぶに効く色み (#641)。 **書かなければ種類ごとに決まる**。
1494
+ *
1495
+ * 書いた図は「全部同じ色みにする」 と宣言しているので、種類の既定より勝たせる。
1496
+ * 優先順位は 関係に書いた色み > 図に書いた既定 > 種類から決まる既定 の 3 段。
1497
+ */
1498
+ const 図の既定 = preset.defaultTone;
1461
1499
  // 縞と配色は `er()` と同じ扱い (#627)。 箱の作りが同じなので、既定も揃える
1462
1500
  const 縞を敷く = preset.rowStripe ?? true;
1463
1501
  const b = diagram(preset.id, { topic: preset.topic, palette: preset.palette });
@@ -1536,7 +1574,7 @@ export function classDiagram(preset: ClassDiagramPreset): ClassDiagramBuilder {
1536
1574
  id: edgeId,
1537
1575
  label: r.label ?? r.type,
1538
1576
  ...(r.cardinality ? { sub: r.cardinality } : {}),
1539
- tone: r.tone ?? tone,
1577
+ tone: r.tone ?? 図の既定 ?? CLASS_RELATION_TONE[r.type],
1540
1578
  // 関係の種類から線と端の形を決める (cdl#574 / #578)。 書いた値が勝つ
1541
1579
  style: r.style ?? 見た目.style,
1542
1580
  head: r.head ?? 見た目.head,