@cardenelabs/cdl 0.122.0 → 0.124.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 (64) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/README.md +70 -1
  3. package/dist/index.cjs +1125 -618
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +38 -26
  6. package/dist/index.d.ts +38 -26
  7. package/dist/index.js +1125 -619
  8. package/dist/index.js.map +1 -1
  9. package/dist/react.cjs +894 -404
  10. package/dist/react.cjs.map +1 -1
  11. package/dist/react.d.cts +1 -1
  12. package/dist/react.d.ts +1 -1
  13. package/dist/react.js +894 -404
  14. package/dist/react.js.map +1 -1
  15. package/dist/{render-U_pC-Ksh.d.cts → render-U6omSNH2.d.cts} +23 -4
  16. package/dist/{render-U_pC-Ksh.d.ts → render-U6omSNH2.d.ts} +23 -4
  17. package/package.json +9 -12
  18. package/src/builder.ts +5 -0
  19. package/src/index.ts +2 -0
  20. package/src/kinds/box-lines.ts +17 -4
  21. package/src/kinds/chart-bar.tsx +4 -0
  22. package/src/kinds/chart-gauge.tsx +20 -9
  23. package/src/kinds/chart-pie.tsx +67 -17
  24. package/src/kinds/chart-radial.tsx +7 -2
  25. package/src/kinds/chart-slope.tsx +26 -7
  26. package/src/kinds/chart-stacked-bar.tsx +8 -4
  27. package/src/kinds/chart-stat.tsx +19 -4
  28. package/src/kinds/chart-waffle.tsx +7 -2
  29. package/src/kinds/funnel.tsx +9 -2
  30. package/src/kinds/generic.tsx +5 -2
  31. package/src/kinds/mind-map.tsx +26 -10
  32. package/src/kinds/quadrant.tsx +14 -4
  33. package/src/kinds/row-align.ts +19 -7
  34. package/src/kinds/sequence-board-metrics.ts +13 -3
  35. package/src/kinds/sequence-board.tsx +4 -2
  36. package/src/kinds/shape-basement.tsx +57 -32
  37. package/src/kinds/shape-blockchain.tsx +83 -34
  38. package/src/kinds/shape-commerce.tsx +65 -24
  39. package/src/kinds/shape-finance.tsx +90 -26
  40. package/src/kinds/shape-hardware.tsx +48 -17
  41. package/src/kinds/shape-region.tsx +16 -6
  42. package/src/kinds/shape-software.tsx +30 -8
  43. package/src/kinds/text-width.ts +17 -3
  44. package/src/kinds/tree.tsx +25 -7
  45. package/src/layout/collisions.ts +21 -8
  46. package/src/layout/curve-path.ts +3 -2
  47. package/src/layout/edges.ts +173 -29
  48. package/src/layout/head-label.ts +3 -1
  49. package/src/layout/lanes.ts +3 -2
  50. package/src/layout/metro-path.ts +3 -2
  51. package/src/layout/nodes.ts +14 -6
  52. package/src/layout/predict-bbox.ts +6 -3
  53. package/src/layout/self-loop.ts +10 -4
  54. package/src/layout/spec.ts +20 -6
  55. package/src/layout/text-width.ts +25 -8
  56. package/src/layout.ts +39 -15
  57. package/src/presets.ts +69 -43
  58. package/src/render/edges.tsx +18 -3
  59. package/src/render/interactive-panel.tsx +34 -7
  60. package/src/render/nodes.tsx +97 -48
  61. package/src/render/stage.tsx +3 -0
  62. package/src/text-metrics.ts +9 -0
  63. package/src/types.ts +22 -2
  64. package/src/visual-validate.ts +67 -17
package/CHANGELOG.md CHANGED
@@ -5,6 +5,31 @@ CDL (Chainome Diagram Language) の主要変更履歴。
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.124.0] - 2026-10-06
9
+
10
+ ### Changed
11
+
12
+ - **箱の上を回る戻り線が、途中の箱を貫かない道筋を選べるようにした** (#1014)
13
+
14
+ 上へ回る今までの道筋が両端以外の箱と交わる時だけ、左右の外側の列を通る道筋に替え、交わる箱が少なく短い方を選ぶ。
15
+ 両端は今までどおり上辺から出て、上辺へ入る。
16
+ 1 段前へ戻る線と間に箱が無い戻り線の座標は変わらない。
17
+ 外側を回っても避けられない箱は `edge-node-cross` として検査結果に残る。
18
+
19
+ ## [0.123.0] - 2026-10-05
20
+
21
+ ### Added
22
+
23
+ - **図ごとに等幅書体の字幅で配置を計算できる `textMetrics` を足した** (#1006, #1009)
24
+
25
+ `textMetrics: "monospace"` では半角を 0.63 em、全角を 1.08 em の実測幅で測り、箱・札・衝突判定に加えて図表・マインドマップ・絵の中の字も同じ幅に揃える。
26
+ `textMetrics` を書かない既存の図は `proportional` のままで、出力は変わらない。
27
+
28
+ - **線の札と主役の線・棒を属性で選べるようにした** (#1008)
29
+
30
+ 中ほどと端の札へ `data-cdl-tone`、主役の線と札へ `data-cdl-edge-role`、最大値の棒へ `data-cdl-emphasis` を出す。
31
+ 既存の図の色と不透明度は変わらないが、`[data-cdl-tone]` を祖先に置く selector は札にも当たり始める。
32
+
8
33
  ## [0.122.0] - 2026-10-04
9
34
 
10
35
  ### Added
@@ -4850,7 +4875,9 @@ Initial OSS release.
4850
4875
  使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
4851
4876
  行き止まりになる。
4852
4877
 
4853
- [Unreleased]: https://github.com/cardene777/cdl/compare/v0.122.0...HEAD
4878
+ [Unreleased]: https://github.com/cardene777/cdl/compare/v0.124.0...HEAD
4879
+ [0.124.0]: https://github.com/cardene777/cdl/compare/v0.123.0...v0.124.0
4880
+ [0.123.0]: https://github.com/cardene777/cdl/compare/v0.122.0...v0.123.0
4854
4881
  [0.122.0]: https://github.com/cardene777/cdl/compare/v0.121.0...v0.122.0
4855
4882
  [0.121.0]: https://github.com/cardene777/cdl/compare/v0.120.0...v0.121.0
4856
4883
  [0.120.0]: https://github.com/cardene777/cdl/compare/v0.119.0...v0.120.0
package/README.md CHANGED
@@ -66,6 +66,43 @@ export function AuthSequenceDemo() {
66
66
 
67
67
  これで UML sequence diagram が phase 切替 + state diff + 進行点 glow で animated に表示。
68
68
 
69
+ ### 等幅書体で描く図の字幅
70
+
71
+ `textMetrics` は `proportional` (既定) または `monospace` を取る。
72
+ 消費側が図全体を等幅書体で描く場合は `monospace` を指定すると、配置計算と描画の字幅を揃えられる。
73
+
74
+ `monospace` は `fontFamily: "mono"` と同じ JetBrains Mono の実測で、ASCII・半角カナ・記号を 0.63 em、
75
+ 和字と全角 (CJK) を 1.08 em、絵文字を 1.16 em として書記素ごとに加算する。
76
+ 図表の字、マインドマップの名前、絵の中の字も同じ測り方になる。
77
+
78
+ preset では options に指定する。
79
+
80
+ ```ts
81
+ const terminalFlow = sequence({
82
+ id: "terminal-flow",
83
+ topic: "Terminal flow",
84
+ actors: ["CLI", "Worker"],
85
+ textMetrics: "monospace",
86
+ });
87
+ ```
88
+
89
+ `CdlDiagram` を直接組み立てる場合は field に指定する。
90
+
91
+ ```ts
92
+ import type { CdlDiagram } from "@cardenelabs/cdl";
93
+
94
+ const terminalDiagram: CdlDiagram = {
95
+ id: "terminal",
96
+ topic: "Terminal",
97
+ textMetrics: "monospace",
98
+ lanes: [],
99
+ nodes: [],
100
+ edges: [],
101
+ states: [],
102
+ phases: [],
103
+ };
104
+ ```
105
+
69
106
  ## 6 つの preset
70
107
 
71
108
  低位 API (lane / node / edge 個別宣言) + 高位 preset (1 行で典型図生成)。
@@ -231,10 +268,15 @@ export const custom = diagram("custom", { topic: "Custom" })
231
268
  | 値 | 道筋 | 向く場面 |
232
269
  |---|---|---|
233
270
  | `default` | 箱を避け、角を丸めた直角の線 | 箱を避けたい図、直角の線に揃えたい図 |
234
- | `back-detour` | 箱の上を回って戻る線 | 前の箱へ戻る関係 |
271
+ | `back-detour` | 箱の上を回って戻り、途中の箱と交わる時は外側を回る線 | 前の箱へ戻る関係 |
235
272
  | `curve` | 両端で水平になる 3 次曲線 | 段や列をまたぐ関係を柔らかくつなぐ図 |
236
273
  | `metro` | 横線と傾き ±1 の斜線を円弧で結ぶ線 | 路線図の線路と乗り換え |
237
274
 
275
+ `back-detour` は始点と終点の上辺を結び、両端より 100 上を横に渡る。
276
+ 途中の箱と交わる時だけ、縦に並ぶ箱を避けた最も近い外側の列を通り、交わる箱が少なく短い方を選ぶ。
277
+ 両端は外側へ回る時も上辺から出て、上辺へ入る。
278
+ 外側を回っても避けられない箱は `edge-node-cross` として検査結果に残る。
279
+
238
280
  `curve` は、行き先が右なら始点の右辺から終点の左辺へ、左なら始点の左辺から終点の右辺へ結ぶ。
239
281
  2 つの箱の横の範囲が重なる時は、両方の右辺を結ぶ。
240
282
  2 点の高さが同じなら直線になる。
@@ -457,6 +499,33 @@ cdl は形だけを描き、 色や影は持たない (geometry only、 style
457
499
  [data-cdl-routing="metro"] [data-cdl-role="edge-line"] { /* 路線図の線 */ }
458
500
  ```
459
501
 
502
+ 線の札と主役は、次の属性で選べる。
503
+
504
+ | 属性 | 付く要素 | 値 |
505
+ |---|---|---|
506
+ | `data-cdl-tone` | 線の要素の `g`、中ほどの札の `g` (`[data-cdl-edge-label-for]`)、端の札の `text` (`[data-cdl-edge-end-label-for]`) | 線の tone 名 (`accent` / `teal` / `success` / `error` / `warning` / `info`)。主役の線でも tone 名のまま |
507
+ | `data-cdl-edge-role` | 主役の線 (`role: "main"`) の線の要素の `g`・中ほどの札の `g`・端の札の `text` | `main`。主役でない線には付かない |
508
+ | `data-cdl-emphasis` | 棒グラフ (`chart-bar`) の棒 `rect` | `primary`。値が最大の棒すべてに付く (同率なら全部)。全ての値が 0 以下なら付かない |
509
+
510
+ ```css
511
+ [data-cdl-edge-label-for][data-cdl-tone="accent"] [data-cdl-role="edge-label-bg"],
512
+ [data-cdl-edge-end-label-for][data-cdl-tone="accent"] {
513
+ fill: var(--cdl-tone-accent);
514
+ }
515
+
516
+ [data-cdl-edge-label-for][data-cdl-edge-role="main"] [data-cdl-role="edge-label-bg"],
517
+ [data-cdl-edge-end-label-for][data-cdl-edge-role="main"] {
518
+ fill: var(--cdl-now);
519
+ }
520
+
521
+ [data-cdl-role="chart-bar"][data-cdl-emphasis="primary"] {
522
+ stroke: var(--cdl-now);
523
+ }
524
+ ```
525
+
526
+ `[data-cdl-tone="accent"] text` のように `data-cdl-tone` を祖先に置く selector は、札にも当たり始める。
527
+ 札だけを除きたい時は `[data-cdl-edge][data-cdl-tone="accent"] text` のように `[data-cdl-edge]` を前に付け、線の要素に絞る。
528
+
460
529
  明暗の切替は consumer 側の仕組み (`html` の class 等) で行う = cdl は明暗の概念を持たない。
461
530
 
462
531
  **`CdlRole` 型は実装にある role の全部ではない**。 型に載っているのは共通の描画で使う