@cardenelabs/cdl 0.5.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 (108) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +343 -0
  3. package/SPEC.md +374 -0
  4. package/dist/index.cjs +28085 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +3415 -0
  7. package/dist/index.d.ts +3415 -0
  8. package/dist/index.js +27962 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/react.cjs +23043 -0
  11. package/dist/react.cjs.map +1 -0
  12. package/dist/react.d.cts +2 -0
  13. package/dist/react.d.ts +2 -0
  14. package/dist/react.js +23041 -0
  15. package/dist/react.js.map +1 -0
  16. package/dist/render-C78lIXeC.d.cts +2449 -0
  17. package/dist/render-C78lIXeC.d.ts +2449 -0
  18. package/examples/quick-start.md +88 -0
  19. package/package.json +79 -0
  20. package/src/anim/core/easing.ts +77 -0
  21. package/src/anim/core/timeline.ts +335 -0
  22. package/src/anim/core/types.ts +42 -0
  23. package/src/anim/index.ts +20 -0
  24. package/src/anim/react/index.ts +3 -0
  25. package/src/anim/react/useReducedMotion.ts +27 -0
  26. package/src/anim/react/useTimeline.ts +48 -0
  27. package/src/assert-never.ts +16 -0
  28. package/src/author-intent-verify.ts +587 -0
  29. package/src/builder.ts +3740 -0
  30. package/src/compile.ts +12 -0
  31. package/src/dom-verify-core.ts +121 -0
  32. package/src/dom-verify-types.ts +21 -0
  33. package/src/dom-verify.ts +948 -0
  34. package/src/event-handler/index.ts +184 -0
  35. package/src/formula/ast.ts +46 -0
  36. package/src/formula/evaluator.ts +163 -0
  37. package/src/formula/formula-computeds.ts +83 -0
  38. package/src/formula/index.ts +5 -0
  39. package/src/formula/parser.ts +399 -0
  40. package/src/index.ts +284 -0
  41. package/src/input-signals.ts +74 -0
  42. package/src/kinds/actor.tsx +79 -0
  43. package/src/kinds/card.tsx +61 -0
  44. package/src/kinds/chart-bar.tsx +121 -0
  45. package/src/kinds/chart-line.tsx +163 -0
  46. package/src/kinds/chart-pie.tsx +107 -0
  47. package/src/kinds/compact-title.ts +164 -0
  48. package/src/kinds/dyn-shape.tsx +394 -0
  49. package/src/kinds/event.tsx +70 -0
  50. package/src/kinds/function.tsx +53 -0
  51. package/src/kinds/funnel.tsx +122 -0
  52. package/src/kinds/gantt.tsx +193 -0
  53. package/src/kinds/generic.tsx +368 -0
  54. package/src/kinds/mind-map.tsx +367 -0
  55. package/src/kinds/mind-radial.tsx +209 -0
  56. package/src/kinds/node-tone.ts +18 -0
  57. package/src/kinds/quadrant.tsx +164 -0
  58. package/src/kinds/row-align.ts +179 -0
  59. package/src/kinds/shape-basement.tsx +683 -0
  60. package/src/kinds/shape-blockchain.tsx +750 -0
  61. package/src/kinds/shape-commerce.tsx +553 -0
  62. package/src/kinds/shape-finance.tsx +706 -0
  63. package/src/kinds/shape-hardware.tsx +862 -0
  64. package/src/kinds/shape-people.tsx +439 -0
  65. package/src/kinds/shape-region.tsx +383 -0
  66. package/src/kinds/shape-software.tsx +859 -0
  67. package/src/kinds/storage.tsx +180 -0
  68. package/src/kinds/text-width.ts +73 -0
  69. package/src/kinds/tree.tsx +275 -0
  70. package/src/kinds/user-journey.tsx +240 -0
  71. package/src/label-text.ts +71 -0
  72. package/src/layout/clearance-constants.ts +47 -0
  73. package/src/layout/collisions.ts +2078 -0
  74. package/src/layout/edges.ts +2498 -0
  75. package/src/layout/footer-shape.ts +97 -0
  76. package/src/layout/geometry.ts +135 -0
  77. package/src/layout/label-shift.ts +28 -0
  78. package/src/layout/lanes.ts +328 -0
  79. package/src/layout/nodes.ts +190 -0
  80. package/src/layout/predict-bbox.ts +76 -0
  81. package/src/layout/px-projection.ts +176 -0
  82. package/src/layout/spec.ts +872 -0
  83. package/src/layout/text-width.ts +133 -0
  84. package/src/layout/tokens.ts +181 -0
  85. package/src/layout/viewbox.ts +47 -0
  86. package/src/layout-with-validation.ts +175 -0
  87. package/src/layout.ts +381 -0
  88. package/src/presets.ts +2108 -0
  89. package/src/reactive/batch.ts +48 -0
  90. package/src/reactive/computed.ts +85 -0
  91. package/src/reactive/effect.ts +145 -0
  92. package/src/reactive/index.ts +6 -0
  93. package/src/reactive/internal.ts +109 -0
  94. package/src/reactive/signal.ts +113 -0
  95. package/src/render/edges.tsx +318 -0
  96. package/src/render/header.tsx +146 -0
  97. package/src/render/interactive-panel.tsx +9620 -0
  98. package/src/render/nodes.tsx +319 -0
  99. package/src/render/stage.tsx +377 -0
  100. package/src/render/tone.ts +64 -0
  101. package/src/render/utils.ts +238 -0
  102. package/src/render.tsx +221 -0
  103. package/src/scroll-trigger/index.ts +109 -0
  104. package/src/scroll-trigger/progress.ts +49 -0
  105. package/src/thumbnail.tsx +114 -0
  106. package/src/types.ts +2371 -0
  107. package/src/validate.ts +268 -0
  108. package/src/visual-validate.ts +4381 -0
package/src/compile.ts ADDED
@@ -0,0 +1,12 @@
1
+ import { layout } from "./layout";
2
+ import { validate } from "./validate";
3
+ import type { CdlDiagram, LaidDiagram } from "./types";
4
+
5
+ /**
6
+ * compile = validate → layout で LaidDiagram を返す。
7
+ * render は別 file (render.tsx) が LaidDiagram を消費。
8
+ */
9
+ export function compile(diag: CdlDiagram): LaidDiagram {
10
+ validate(diag);
11
+ return layout(diag);
12
+ }
@@ -0,0 +1,121 @@
1
+ /**
2
+ * dom-verify core (library 化前段 = adapter pattern の足場)。
3
+ *
4
+ * cdl-specific 型 (CdlDiagram / LaidDiagram) に依存しない、 任意の SVG diagram tool に
5
+ * attach 可能な generic 検証 core。 将来 @cardenelabs/diagram-verifier として独立化する際の
6
+ * 「枝葉に依存しない API 設計」 を確立する。
7
+ *
8
+ * 利用側 (cdl adapter / Mermaid adapter / D2 adapter 等) は GenericDiagramSpec を満たす
9
+ * object を構築し、 verifyGenericDom(page, spec) で検証を回す。
10
+ *
11
+ * 既存 dom-verify.ts は本 file の上に cdl adapter として乗る (cdl の CdlDiagram → GenericDiagramSpec に変換)。
12
+ */
13
+
14
+ import type { PageLike } from "./dom-verify-types";
15
+
16
+ /**
17
+ * 任意 diagram tool が「目」 で検証されるために提供すべき構造的 spec。
18
+ * cdl-specific な型を排し、 generic な primitive (id / cx / cy / w / h / path d / activate set 等) のみ。
19
+ */
20
+ export interface GenericDiagramSpec {
21
+ /** diagram の一意 id ([data-cdl-diagram="..."] でも別 attr でも良い、 adapter で selector を構築) */
22
+ id: string;
23
+ /** root selector の DOM attribute (default "data-cdl-diagram") */
24
+ rootAttribute?: string;
25
+ /** node selector の DOM attribute (default "data-cdl-node") */
26
+ nodeAttribute?: string;
27
+ /** edge selector の DOM attribute (default "data-cdl-edge") */
28
+ edgeAttribute?: string;
29
+ /** particle selector の DOM attribute (default "data-cdl-particle") */
30
+ particleAttribute?: string;
31
+ /** node 一覧 (id / cx / cy / w / h) */
32
+ nodes: Array<{
33
+ id: string;
34
+ cx: number;
35
+ cy: number;
36
+ w: number;
37
+ h: number;
38
+ }>;
39
+ /** edge 一覧 (id / from / to / d / labelX / labelY / style) */
40
+ edges: Array<{
41
+ id: string;
42
+ from: string;
43
+ to: string;
44
+ d: string;
45
+ labelX: number;
46
+ labelY: number;
47
+ /** "dotted-flow" 相当のスタイル (particle 検証対象判定用) */
48
+ hasParticle: boolean;
49
+ }>;
50
+ /** phase 一覧 (id / activate set) */
51
+ phases: Array<{
52
+ id: string;
53
+ activate: string[];
54
+ }>;
55
+ }
56
+
57
+ /**
58
+ * 検証種別。
59
+ */
60
+ export type GenericDiscrepancyKind =
61
+ | "missing-node-element"
62
+ | "missing-edge-element"
63
+ | "node-position-mismatch"
64
+ | "node-size-mismatch"
65
+ | "edge-path-endpoint-mismatch"
66
+ | "edge-label-position-mismatch"
67
+ | "particle-out-of-path"
68
+ | "activation-mismatch"
69
+ | "phase-transition-failure";
70
+
71
+ export interface GenericDiscrepancy {
72
+ kind: GenericDiscrepancyKind;
73
+ diagramId: string;
74
+ elementId: string;
75
+ expected: unknown;
76
+ actual: unknown;
77
+ detail: string;
78
+ }
79
+
80
+ export interface GenericVerifyOptions {
81
+ positionTolerance?: number;
82
+ edgeEndpointTolerance?: number;
83
+ particleTolerance?: number;
84
+ particleFrameCount?: number;
85
+ particleConsecutiveFailThreshold?: number;
86
+ bboxTolerance?: number;
87
+ skipBbox?: boolean;
88
+ skipParticle?: boolean;
89
+ skipPhase?: boolean;
90
+ }
91
+
92
+ /**
93
+ * 任意 diagram の核心検証 5 種類。
94
+ *
95
+ * 本関数自体は cdl 依存ゼロ。 adapter (cdl-adapter / mermaid-adapter 等) が
96
+ * GenericDiagramSpec を構築して渡す。
97
+ */
98
+ export async function verifyGenericDom(
99
+ _page: PageLike,
100
+ _spec: GenericDiagramSpec,
101
+ _options: GenericVerifyOptions = {},
102
+ ): Promise<GenericDiscrepancy[]> {
103
+ // implementation 詳細は dom-verify.ts の関数群を移植する形で次フェーズ実装。
104
+ // 本 PR では adapter pattern の枠組みのみ確立し、 cdl-specific dom-verify.ts は維持する。
105
+ // 将来 publish 時に dom-verify.ts は cdl-adapter として generic core を呼ぶ薄い wrapper になる。
106
+ throw new Error("verifyGenericDom: not yet implemented. Use cdl-specific verifyDiagramDom for now.");
107
+ }
108
+
109
+ /**
110
+ * 任意 diagram tool の adapter が満たすべき contract。
111
+ *
112
+ * cdl の場合 ... CdlDiagram → GenericDiagramSpec を返す純関数。
113
+ * Mermaid の場合 ... mermaid.parse() で AST 取得 → GenericDiagramSpec に変換。
114
+ * D2 の場合 ... d2 CLI で JSON dump → GenericDiagramSpec に変換。
115
+ */
116
+ export interface DiagramAdapter<DiagramType> {
117
+ /** diagram type 名 (例 "cdl" / "mermaid" / "d2") */
118
+ readonly name: string;
119
+ /** diagram 型から GenericDiagramSpec への変換 */
120
+ toSpec(diagram: DiagramType): GenericDiagramSpec;
121
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * dom-verify-core / dom-verify (cdl adapter) 両方で共有する types。
3
+ *
4
+ * PageLike を独立 file に切り出すことで、 core / adapter の循環 import を避ける。
5
+ */
6
+
7
+ /**
8
+ * Playwright Page-like 抽象。 packages/cdl は Playwright を直接 import せず、
9
+ * 利用側で Page を渡す。 これで cdl が browser dependency 持たない。
10
+ */
11
+ export interface PageLike {
12
+ /** querySelector の thin wrapper */
13
+ $$eval<T>(selector: string, fn: (els: Element[]) => T): Promise<T>;
14
+ $eval<T>(selector: string, fn: (el: Element) => T): Promise<T>;
15
+ /** 任意 JS を browser context で evaluate */
16
+ evaluate<T, A>(fn: (arg: A) => T, arg: A): Promise<T>;
17
+ /** sleep (ms) */
18
+ waitForTimeout(ms: number): Promise<void>;
19
+ /** click selector */
20
+ click(selector: string): Promise<void>;
21
+ }