docviz-builder 0.1.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 (233) hide show
  1. package/AGENTS.md +371 -0
  2. package/LICENSE +21 -0
  3. package/README.md +837 -0
  4. package/bin/docviz-mcp.mjs +10 -0
  5. package/bin/docviz.mjs +11 -0
  6. package/dist/build/builder.d.ts +62 -0
  7. package/dist/build/builder.d.ts.map +1 -0
  8. package/dist/build/builder.js +337 -0
  9. package/dist/build/builder.js.map +1 -0
  10. package/dist/build/diff.d.ts +64 -0
  11. package/dist/build/diff.d.ts.map +1 -0
  12. package/dist/build/diff.js +156 -0
  13. package/dist/build/diff.js.map +1 -0
  14. package/dist/build/doctor.d.ts +39 -0
  15. package/dist/build/doctor.d.ts.map +1 -0
  16. package/dist/build/doctor.js +190 -0
  17. package/dist/build/doctor.js.map +1 -0
  18. package/dist/build/init.d.ts +28 -0
  19. package/dist/build/init.d.ts.map +1 -0
  20. package/dist/build/init.js +274 -0
  21. package/dist/build/init.js.map +1 -0
  22. package/dist/build/preview.d.ts +13 -0
  23. package/dist/build/preview.d.ts.map +1 -0
  24. package/dist/build/preview.js +277 -0
  25. package/dist/build/preview.js.map +1 -0
  26. package/dist/build/skill.d.ts +41 -0
  27. package/dist/build/skill.d.ts.map +1 -0
  28. package/dist/build/skill.js +63 -0
  29. package/dist/build/skill.js.map +1 -0
  30. package/dist/build/verify.d.ts +26 -0
  31. package/dist/build/verify.d.ts.map +1 -0
  32. package/dist/build/verify.js +99 -0
  33. package/dist/build/verify.js.map +1 -0
  34. package/dist/cli.d.ts +20 -0
  35. package/dist/cli.d.ts.map +1 -0
  36. package/dist/cli.js +427 -0
  37. package/dist/cli.js.map +1 -0
  38. package/dist/config/load.d.ts +32 -0
  39. package/dist/config/load.d.ts.map +1 -0
  40. package/dist/config/load.js +279 -0
  41. package/dist/config/load.js.map +1 -0
  42. package/dist/config/types.d.ts +89 -0
  43. package/dist/config/types.d.ts.map +1 -0
  44. package/dist/config/types.js +5 -0
  45. package/dist/config/types.js.map +1 -0
  46. package/dist/core/cache.d.ts +32 -0
  47. package/dist/core/cache.d.ts.map +1 -0
  48. package/dist/core/cache.js +69 -0
  49. package/dist/core/cache.js.map +1 -0
  50. package/dist/core/errors.d.ts +115 -0
  51. package/dist/core/errors.d.ts.map +1 -0
  52. package/dist/core/errors.js +164 -0
  53. package/dist/core/errors.js.map +1 -0
  54. package/dist/core/hash.d.ts +57 -0
  55. package/dist/core/hash.d.ts.map +1 -0
  56. package/dist/core/hash.js +0 -0
  57. package/dist/core/hash.js.map +1 -0
  58. package/dist/core/package-version.d.ts +9 -0
  59. package/dist/core/package-version.d.ts.map +1 -0
  60. package/dist/core/package-version.js +44 -0
  61. package/dist/core/package-version.js.map +1 -0
  62. package/dist/core/paths.d.ts +46 -0
  63. package/dist/core/paths.d.ts.map +1 -0
  64. package/dist/core/paths.js +105 -0
  65. package/dist/core/paths.js.map +1 -0
  66. package/dist/core/registry.d.ts +24 -0
  67. package/dist/core/registry.d.ts.map +1 -0
  68. package/dist/core/registry.js +72 -0
  69. package/dist/core/registry.js.map +1 -0
  70. package/dist/core/types.d.ts +78 -0
  71. package/dist/core/types.d.ts.map +1 -0
  72. package/dist/core/types.js +11 -0
  73. package/dist/core/types.js.map +1 -0
  74. package/dist/dsl/architecture.d.ts +15 -0
  75. package/dist/dsl/architecture.d.ts.map +1 -0
  76. package/dist/dsl/architecture.js +242 -0
  77. package/dist/dsl/architecture.js.map +1 -0
  78. package/dist/dsl/catalog.d.ts +62 -0
  79. package/dist/dsl/catalog.d.ts.map +1 -0
  80. package/dist/dsl/catalog.en.d.ts +18 -0
  81. package/dist/dsl/catalog.en.d.ts.map +1 -0
  82. package/dist/dsl/catalog.en.js +299 -0
  83. package/dist/dsl/catalog.en.js.map +1 -0
  84. package/dist/dsl/catalog.js +1082 -0
  85. package/dist/dsl/catalog.js.map +1 -0
  86. package/dist/dsl/chart.d.ts +14 -0
  87. package/dist/dsl/chart.d.ts.map +1 -0
  88. package/dist/dsl/chart.js +435 -0
  89. package/dist/dsl/chart.js.map +1 -0
  90. package/dist/dsl/compile.d.ts +31 -0
  91. package/dist/dsl/compile.d.ts.map +1 -0
  92. package/dist/dsl/compile.js +120 -0
  93. package/dist/dsl/compile.js.map +1 -0
  94. package/dist/dsl/diagram-bpmn.d.ts +13 -0
  95. package/dist/dsl/diagram-bpmn.d.ts.map +1 -0
  96. package/dist/dsl/diagram-bpmn.js +215 -0
  97. package/dist/dsl/diagram-bpmn.js.map +1 -0
  98. package/dist/dsl/diagram-product.d.ts +15 -0
  99. package/dist/dsl/diagram-product.d.ts.map +1 -0
  100. package/dist/dsl/diagram-product.js +291 -0
  101. package/dist/dsl/diagram-product.js.map +1 -0
  102. package/dist/dsl/diagram-technical.d.ts +28 -0
  103. package/dist/dsl/diagram-technical.d.ts.map +1 -0
  104. package/dist/dsl/diagram-technical.js +365 -0
  105. package/dist/dsl/diagram-technical.js.map +1 -0
  106. package/dist/dsl/diagram.d.ts +22 -0
  107. package/dist/dsl/diagram.d.ts.map +1 -0
  108. package/dist/dsl/diagram.js +542 -0
  109. package/dist/dsl/diagram.js.map +1 -0
  110. package/dist/dsl/fallbacks-d2.d.ts +27 -0
  111. package/dist/dsl/fallbacks-d2.d.ts.map +1 -0
  112. package/dist/dsl/fallbacks-d2.js +265 -0
  113. package/dist/dsl/fallbacks-d2.js.map +1 -0
  114. package/dist/dsl/fallbacks.d.ts +25 -0
  115. package/dist/dsl/fallbacks.d.ts.map +1 -0
  116. package/dist/dsl/fallbacks.js +264 -0
  117. package/dist/dsl/fallbacks.js.map +1 -0
  118. package/dist/dsl/fields.d.ts +93 -0
  119. package/dist/dsl/fields.d.ts.map +1 -0
  120. package/dist/dsl/fields.js +233 -0
  121. package/dist/dsl/fields.js.map +1 -0
  122. package/dist/dsl/index.d.ts +50 -0
  123. package/dist/dsl/index.d.ts.map +1 -0
  124. package/dist/dsl/index.js +114 -0
  125. package/dist/dsl/index.js.map +1 -0
  126. package/dist/dsl/util.d.ts +105 -0
  127. package/dist/dsl/util.d.ts.map +1 -0
  128. package/dist/dsl/util.js +261 -0
  129. package/dist/dsl/util.js.map +1 -0
  130. package/dist/index.d.ts +27 -0
  131. package/dist/index.d.ts.map +1 -0
  132. package/dist/index.js +21 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/markdown/scan.d.ts +73 -0
  135. package/dist/markdown/scan.d.ts.map +1 -0
  136. package/dist/markdown/scan.js +150 -0
  137. package/dist/markdown/scan.js.map +1 -0
  138. package/dist/markdown/transform.d.ts +28 -0
  139. package/dist/markdown/transform.d.ts.map +1 -0
  140. package/dist/markdown/transform.js +38 -0
  141. package/dist/markdown/transform.js.map +1 -0
  142. package/dist/mcp/server.d.ts +18 -0
  143. package/dist/mcp/server.d.ts.map +1 -0
  144. package/dist/mcp/server.js +118 -0
  145. package/dist/mcp/server.js.map +1 -0
  146. package/dist/mcp/tools.d.ts +118 -0
  147. package/dist/mcp/tools.d.ts.map +1 -0
  148. package/dist/mcp/tools.js +573 -0
  149. package/dist/mcp/tools.js.map +1 -0
  150. package/dist/renderers/base.d.ts +18 -0
  151. package/dist/renderers/base.d.ts.map +1 -0
  152. package/dist/renderers/base.js +59 -0
  153. package/dist/renderers/base.js.map +1 -0
  154. package/dist/renderers/bpmn.d.ts +68 -0
  155. package/dist/renderers/bpmn.d.ts.map +1 -0
  156. package/dist/renderers/bpmn.js +158 -0
  157. package/dist/renderers/bpmn.js.map +1 -0
  158. package/dist/renderers/browser.d.ts +30 -0
  159. package/dist/renderers/browser.d.ts.map +1 -0
  160. package/dist/renderers/browser.js +143 -0
  161. package/dist/renderers/browser.js.map +1 -0
  162. package/dist/renderers/color-scheme.d.ts +40 -0
  163. package/dist/renderers/color-scheme.d.ts.map +1 -0
  164. package/dist/renderers/color-scheme.js +122 -0
  165. package/dist/renderers/color-scheme.js.map +1 -0
  166. package/dist/renderers/d2.d.ts +37 -0
  167. package/dist/renderers/d2.d.ts.map +1 -0
  168. package/dist/renderers/d2.js +108 -0
  169. package/dist/renderers/d2.js.map +1 -0
  170. package/dist/renderers/graphviz.d.ts +33 -0
  171. package/dist/renderers/graphviz.d.ts.map +1 -0
  172. package/dist/renderers/graphviz.js +88 -0
  173. package/dist/renderers/graphviz.js.map +1 -0
  174. package/dist/renderers/in-page.d.ts +33 -0
  175. package/dist/renderers/in-page.d.ts.map +1 -0
  176. package/dist/renderers/in-page.js +76 -0
  177. package/dist/renderers/in-page.js.map +1 -0
  178. package/dist/renderers/index.d.ts +20 -0
  179. package/dist/renderers/index.d.ts.map +1 -0
  180. package/dist/renderers/index.js +94 -0
  181. package/dist/renderers/index.js.map +1 -0
  182. package/dist/renderers/kroki.d.ts +38 -0
  183. package/dist/renderers/kroki.d.ts.map +1 -0
  184. package/dist/renderers/kroki.js +151 -0
  185. package/dist/renderers/kroki.js.map +1 -0
  186. package/dist/renderers/likec4-svg.d.ts +82 -0
  187. package/dist/renderers/likec4-svg.d.ts.map +1 -0
  188. package/dist/renderers/likec4-svg.js +435 -0
  189. package/dist/renderers/likec4-svg.js.map +1 -0
  190. package/dist/renderers/likec4.d.ts +22 -0
  191. package/dist/renderers/likec4.d.ts.map +1 -0
  192. package/dist/renderers/likec4.js +77 -0
  193. package/dist/renderers/likec4.js.map +1 -0
  194. package/dist/renderers/mermaid.d.ts +64 -0
  195. package/dist/renderers/mermaid.d.ts.map +1 -0
  196. package/dist/renderers/mermaid.js +196 -0
  197. package/dist/renderers/mermaid.js.map +1 -0
  198. package/dist/renderers/plantuml.d.ts +56 -0
  199. package/dist/renderers/plantuml.d.ts.map +1 -0
  200. package/dist/renderers/plantuml.js +195 -0
  201. package/dist/renderers/plantuml.js.map +1 -0
  202. package/dist/renderers/svg-utils.d.ts +46 -0
  203. package/dist/renderers/svg-utils.d.ts.map +1 -0
  204. package/dist/renderers/svg-utils.js +439 -0
  205. package/dist/renderers/svg-utils.js.map +1 -0
  206. package/dist/renderers/svgbob.d.ts +26 -0
  207. package/dist/renderers/svgbob.d.ts.map +1 -0
  208. package/dist/renderers/svgbob.js +70 -0
  209. package/dist/renderers/svgbob.js.map +1 -0
  210. package/dist/renderers/vega-lite.d.ts +18 -0
  211. package/dist/renderers/vega-lite.d.ts.map +1 -0
  212. package/dist/renderers/vega-lite.js +94 -0
  213. package/dist/renderers/vega-lite.js.map +1 -0
  214. package/dist/themes/index.d.ts +17 -0
  215. package/dist/themes/index.d.ts.map +1 -0
  216. package/dist/themes/index.js +419 -0
  217. package/dist/themes/index.js.map +1 -0
  218. package/dist/themes/types.d.ts +99 -0
  219. package/dist/themes/types.d.ts.map +1 -0
  220. package/dist/themes/types.js +9 -0
  221. package/dist/themes/types.js.map +1 -0
  222. package/eval/casos.json +513 -0
  223. package/package.json +114 -0
  224. package/scripts/capture-preview.mjs +101 -0
  225. package/scripts/check-github.mjs +128 -0
  226. package/scripts/eval.d.mts +8 -0
  227. package/scripts/eval.mjs +284 -0
  228. package/scripts/fetch-plantuml.mjs +122 -0
  229. package/scripts/generate-catalog-doc.mjs +106 -0
  230. package/scripts/rasterize.mjs +68 -0
  231. package/scripts/sync-docs.mjs +158 -0
  232. package/skills/docviz/SKILL.md +111 -0
  233. package/vendor/.gitkeep +0 -0
@@ -0,0 +1,435 @@
1
+ /**
2
+ * Emisor SVG propio para vistas LikeC4.
3
+ *
4
+ * LikeC4 calcula el layout (posiciones, tamanos y curvas Bezier de cada
5
+ * relacion) mediante Graphviz; lo que no ofrece es un dibujado a SVG sin
6
+ * navegador. Este modulo toma la vista ya distribuida y la dibuja, de forma que
7
+ * el renderer LikeC4 sea tan offline como los demas y respete el tema del
8
+ * proyecto.
9
+ */
10
+ import { escapeXml } from './svg-utils.js';
11
+ const PADDING = 24;
12
+ const TITLE_SIZE = 15;
13
+ const BODY_SIZE = 11.5;
14
+ const TECH_SIZE = 10.5;
15
+ const LINE_GAP = 1.35;
16
+ /** Ancho medio de caracter respecto al tamano de fuente, para el ajuste de linea. */
17
+ const CHAR_RATIO = 0.55;
18
+ /** Neutros de maximo contraste para el texto dentro de un nodo. */
19
+ const INK_ON_LIGHT = '#12181F';
20
+ const INK_ON_DARK = '#FFFFFF';
21
+ /**
22
+ * Registro de colores duales del emisor.
23
+ *
24
+ * A diferencia del resto de motores, aqui los colores no salen tal cual de la
25
+ * paleta: se componen con la opacidad del nodo y el color del texto se elige por
26
+ * contraste. Esos valores calculados no existen en el tema, asi que la
27
+ * sustitucion textual generica no puede alcanzarlos. Cada decision de color
28
+ * registra su par claro/oscuro y devuelve una variable CSS.
29
+ */
30
+ class ColorVars {
31
+ byPair = new Map();
32
+ /** Devuelve `var(--lcN,<claro>)` para el par indicado. */
33
+ pair(light, dark) {
34
+ const key = `${light}|${dark}`;
35
+ let name = this.byPair.get(key);
36
+ if (name === undefined) {
37
+ name = `--lc${this.byPair.size + 1}`;
38
+ this.byPair.set(key, name);
39
+ }
40
+ return `var(${name},${light})`;
41
+ }
42
+ /** Hoja de estilos con los valores claros y su redefinicion en modo oscuro. */
43
+ styleBlock() {
44
+ if (this.byPair.size === 0)
45
+ return '';
46
+ const light = [];
47
+ const dark = [];
48
+ for (const [key, name] of this.byPair) {
49
+ const [l, d] = key.split('|');
50
+ light.push(`${name}:${l};`);
51
+ dark.push(`${name}:${d};`);
52
+ }
53
+ return (`<style>:root{${light.join('')}}` +
54
+ `@media (prefers-color-scheme:dark){:root{${dark.join('')}}}</style>`);
55
+ }
56
+ }
57
+ export function renderLikeC4View(view, theme) {
58
+ const { bounds } = view;
59
+ const width = Math.max(1, Math.round(bounds.width)) + PADDING * 2;
60
+ const height = Math.max(1, Math.round(bounds.height)) + PADDING * 2;
61
+ const offsetX = PADDING - bounds.x;
62
+ const offsetY = PADDING - bounds.y;
63
+ const colors = new ColorVars();
64
+ const byId = new Map(view.nodes.map((n) => [n.id, n]));
65
+ // Los contenedores se pintan primero para que las hojas queden por encima.
66
+ const ordered = [...view.nodes].sort((a, b) => a.level - b.level || b.children.length - a.children.length);
67
+ const parts = [];
68
+ parts.push(`<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img">`);
69
+ parts.push(defs(theme, colors));
70
+ const background = colors.pair(theme.likec4.background, theme.dark.likec4.background);
71
+ parts.push(`<rect width="${width}" height="${height}" fill="${background}"/>`);
72
+ parts.push(`<g transform="translate(${round(offsetX)},${round(offsetY)})">`);
73
+ for (const node of ordered)
74
+ parts.push(renderNode(node, theme, colors));
75
+ for (const edge of view.edges)
76
+ parts.push(renderEdge(edge, theme, byId, colors));
77
+ parts.push('</g>');
78
+ parts.push('</svg>');
79
+ // La hoja de estilos va justo tras la etiqueta de apertura.
80
+ const openTagEnd = parts[0].length;
81
+ const body = parts.join('\n');
82
+ return `${body.slice(0, openTagEnd)}${colors.styleBlock()}${body.slice(openTagEnd)}`;
83
+ }
84
+ function defs(theme, colors) {
85
+ const stroke = colors.pair(theme.likec4.edgeStroke, theme.dark.likec4.edgeStroke);
86
+ return [
87
+ '<defs>',
88
+ `<marker id="lc4-arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse" markerUnits="userSpaceOnUse"><path d="M 0 0 L 10 5 L 0 10 z" fill="${stroke}"/></marker>`,
89
+ `<marker id="lc4-arrow-open" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="8" markerHeight="8" orient="auto-start-reverse" markerUnits="userSpaceOnUse"><path d="M 0 0 L 10 5 L 0 10" fill="none" stroke="${stroke}" stroke-width="1.6"/></marker>`,
90
+ `<marker id="lc4-diamond" viewBox="0 0 12 12" refX="11" refY="6" markerWidth="8" markerHeight="8" orient="auto-start-reverse" markerUnits="userSpaceOnUse"><path d="M 0 6 L 6 1 L 12 6 L 6 11 z" fill="${stroke}"/></marker>`,
91
+ `<marker id="lc4-dot" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="6" markerHeight="6" orient="auto" markerUnits="userSpaceOnUse"><circle cx="5" cy="5" r="4" fill="${stroke}"/></marker>`,
92
+ `<filter id="lc4-shadow" x="-10%" y="-10%" width="130%" height="140%"><feDropShadow dx="0" dy="2" stdDeviation="2.5" flood-opacity="0.18"/></filter>`,
93
+ '</defs>',
94
+ ].join('\n');
95
+ }
96
+ // --------------------------------------------------------------------------
97
+ // Nodos
98
+ // --------------------------------------------------------------------------
99
+ function renderNode(node, theme, colors) {
100
+ const isGroup = node.children.length > 0;
101
+ const key = node.color ?? 'primary';
102
+ // Cada decision de color se toma dos veces —con la paleta clara y con la
103
+ // oscura— y se registra como un par. Asi la misma imagen se lee bien en un
104
+ // visor claro y en uno oscuro sin renderizar dos veces el diagrama.
105
+ const light = nodeColors(theme, key, node, isGroup);
106
+ const dark = nodeColors({ ...theme, palette: theme.dark.palette, likec4: theme.dark.likec4 }, key, node, isGroup);
107
+ const fill = colors.pair(light.fill, dark.fill);
108
+ const stroke = colors.pair(light.stroke, dark.stroke);
109
+ const text = colors.pair(light.text, dark.text);
110
+ const muted = colors.pair(light.muted, dark.muted);
111
+ const x = round(node.x);
112
+ const y = round(node.y);
113
+ const w = round(node.width);
114
+ const h = round(node.height);
115
+ const parts = [`<g data-node="${escapeXml(node.id)}">`];
116
+ if (isGroup) {
117
+ parts.push(`<rect x="${x}" y="${y}" width="${w}" height="${h}" rx="10" fill="${fill}" fill-opacity="0.55" stroke="${stroke}" stroke-width="1.2" stroke-dasharray="6 4"/>`);
118
+ // El titulo del contenedor va arriba a la izquierda, fuera del area util.
119
+ parts.push(textNode(escapeXml(node.title), x + 14, y + 20, TITLE_SIZE, text, 'start', 600, theme));
120
+ }
121
+ else {
122
+ parts.push(shapePath(node.shape ?? 'rectangle', x, y, w, h, fill, stroke, 1));
123
+ parts.push(...nodeLabels(node, x, y, w, h, text, muted, theme));
124
+ }
125
+ parts.push('</g>');
126
+ return parts.join('\n');
127
+ }
128
+ /** Resuelve relleno, borde y texto de un nodo para una paleta concreta. */
129
+ function nodeColors(theme, key, node, isGroup) {
130
+ const baseFill = isGroup
131
+ ? theme.likec4.groupFill
132
+ : (theme.likec4.nodeFill[key] ?? theme.palette.primary);
133
+ const stroke = isGroup
134
+ ? theme.likec4.groupStroke
135
+ : (theme.likec4.nodeStroke[key] ?? theme.palette.primary);
136
+ // LikeC4 expresa la transparencia del relleno en `style.opacity` (0-100).
137
+ // Se compone contra el fondo aqui, en lugar de emitir `fill-opacity`, porque
138
+ // el color del texto debe elegirse contra el color que se vera de verdad: un
139
+ // azul oscuro al 15 % es un azul claro, y encima de el el texto blanco no se
140
+ // lee.
141
+ const opacity = node.style?.opacity !== undefined ? clamp(node.style.opacity / 100, 0.08, 1) : 1;
142
+ const fill = isGroup ? baseFill : blend(baseFill, theme.likec4.background, opacity);
143
+ const text = isGroup ? theme.palette.text : contrastText(fill, theme.palette);
144
+ const muted = isGroup ? theme.palette.textMuted : withAlpha(text, 0.75);
145
+ return { fill, stroke, text, muted };
146
+ }
147
+ function nodeLabels(node, x, y, w, h, color, muted, theme) {
148
+ const innerWidth = Math.max(40, w - 32);
149
+ const titleLines = wrap(node.title, innerWidth, TITLE_SIZE, 3);
150
+ const description = normalizeText(node.description);
151
+ const descLines = description === undefined ? [] : wrap(description, innerWidth, BODY_SIZE, 3);
152
+ const technology = normalizeText(node.technology);
153
+ const techLines = technology === undefined ? [] : wrap(`[${technology}]`, innerWidth, TECH_SIZE, 1);
154
+ const blockHeight = titleLines.length * TITLE_SIZE * LINE_GAP +
155
+ (descLines.length > 0 ? 6 + descLines.length * BODY_SIZE * LINE_GAP : 0) +
156
+ (techLines.length > 0 ? 4 + techLines.length * TECH_SIZE * LINE_GAP : 0);
157
+ const cx = x + w / 2;
158
+ let cursor = y + h / 2 - blockHeight / 2 + TITLE_SIZE * 0.85;
159
+ const out = [];
160
+ for (const line of titleLines) {
161
+ out.push(textNode(escapeXml(line), cx, cursor, TITLE_SIZE, color, 'middle', 600, theme));
162
+ cursor += TITLE_SIZE * LINE_GAP;
163
+ }
164
+ if (descLines.length > 0) {
165
+ cursor += 6;
166
+ for (const line of descLines) {
167
+ out.push(textNode(escapeXml(line), cx, cursor, BODY_SIZE, muted, 'middle', 400, theme));
168
+ cursor += BODY_SIZE * LINE_GAP;
169
+ }
170
+ }
171
+ if (techLines.length > 0) {
172
+ cursor += 4;
173
+ for (const line of techLines) {
174
+ out.push(textNode(escapeXml(line), cx, cursor, TECH_SIZE, muted, 'middle', 400, theme, 'italic'));
175
+ cursor += TECH_SIZE * LINE_GAP;
176
+ }
177
+ }
178
+ return out;
179
+ }
180
+ /** Dibuja el contorno correspondiente a la forma LikeC4 declarada. */
181
+ function shapePath(shape, x, y, w, h, fill, stroke, opacity) {
182
+ const common = `fill="${fill}" fill-opacity="${opacity}" stroke="${stroke}" stroke-width="1.5" filter="url(#lc4-shadow)"`;
183
+ switch (shape) {
184
+ case 'person': {
185
+ // Rectangulo redondeado con una cabeza semicircular en el borde superior.
186
+ const headR = Math.min(16, h * 0.14);
187
+ const bodyY = y + headR;
188
+ return [
189
+ `<rect x="${x}" y="${round(bodyY)}" width="${w}" height="${round(h - headR)}" rx="10" ${common}/>`,
190
+ `<circle cx="${round(x + w / 2)}" cy="${round(bodyY)}" r="${round(headR)}" fill="${fill}" fill-opacity="${opacity}" stroke="${stroke}" stroke-width="1.5"/>`,
191
+ ].join('\n');
192
+ }
193
+ case 'cylinder':
194
+ case 'storage': {
195
+ const ry = Math.min(14, h * 0.12);
196
+ return [
197
+ `<path d="M ${x} ${round(y + ry)} A ${round(w / 2)} ${round(ry)} 0 0 1 ${x + w} ${round(y + ry)} L ${x + w} ${round(y + h - ry)} A ${round(w / 2)} ${round(ry)} 0 0 1 ${x} ${round(y + h - ry)} Z" ${common}/>`,
198
+ `<path d="M ${x} ${round(y + ry)} A ${round(w / 2)} ${round(ry)} 0 0 0 ${x + w} ${round(y + ry)}" fill="none" stroke="${stroke}" stroke-width="1.2" stroke-opacity="0.7"/>`,
199
+ ].join('\n');
200
+ }
201
+ case 'queue': {
202
+ const rx = Math.min(16, w * 0.06);
203
+ return [
204
+ `<rect x="${x}" y="${y}" width="${w}" height="${h}" rx="${round(rx)}" ry="${round(h / 2)}" ${common}/>`,
205
+ `<path d="M ${round(x + w - rx * 2)} ${y} A ${round(rx)} ${round(h / 2)} 0 0 1 ${round(x + w - rx * 2)} ${y + h}" fill="none" stroke="${stroke}" stroke-width="1.2" stroke-opacity="0.7"/>`,
206
+ ].join('\n');
207
+ }
208
+ case 'browser': {
209
+ const bar = 18;
210
+ return [
211
+ `<rect x="${x}" y="${y}" width="${w}" height="${h}" rx="8" ${common}/>`,
212
+ `<path d="M ${x} ${round(y + bar)} L ${x + w} ${round(y + bar)}" stroke="${stroke}" stroke-width="1.2" stroke-opacity="0.7" fill="none"/>`,
213
+ `<circle cx="${x + 14}" cy="${round(y + bar / 2)}" r="3" fill="${stroke}" fill-opacity="0.55"/>`,
214
+ `<circle cx="${x + 26}" cy="${round(y + bar / 2)}" r="3" fill="${stroke}" fill-opacity="0.55"/>`,
215
+ `<circle cx="${x + 38}" cy="${round(y + bar / 2)}" r="3" fill="${stroke}" fill-opacity="0.55"/>`,
216
+ ].join('\n');
217
+ }
218
+ case 'mobile': {
219
+ const inset = Math.min(28, w * 0.12);
220
+ return [
221
+ `<rect x="${round(x + inset)}" y="${y}" width="${round(w - inset * 2)}" height="${h}" rx="12" ${common}/>`,
222
+ `<rect x="${round(x + w / 2 - 12)}" y="${round(y + 6)}" width="24" height="3" rx="1.5" fill="${stroke}" fill-opacity="0.55"/>`,
223
+ ].join('\n');
224
+ }
225
+ case 'component': {
226
+ const tabW = 14;
227
+ const tabH = 10;
228
+ return [
229
+ `<rect x="${round(x + tabW / 2)}" y="${y}" width="${round(w - tabW / 2)}" height="${h}" rx="6" ${common}/>`,
230
+ `<rect x="${x}" y="${round(y + h * 0.28)}" width="${tabW}" height="${tabH}" fill="${fill}" fill-opacity="${opacity}" stroke="${stroke}" stroke-width="1.3"/>`,
231
+ `<rect x="${x}" y="${round(y + h * 0.58)}" width="${tabW}" height="${tabH}" fill="${fill}" fill-opacity="${opacity}" stroke="${stroke}" stroke-width="1.3"/>`,
232
+ ].join('\n');
233
+ }
234
+ case 'document': {
235
+ const wave = Math.min(16, h * 0.12);
236
+ return `<path d="M ${x} ${round(y + 6)} Q ${x} ${y} ${x + 6} ${y} L ${x + w - 6} ${y} Q ${x + w} ${y} ${x + w} ${round(y + 6)} L ${x + w} ${round(y + h - wave)} Q ${round(x + w * 0.75)} ${round(y + h)} ${round(x + w / 2)} ${round(y + h - wave / 2)} Q ${round(x + w * 0.25)} ${round(y + h - wave)} ${x} ${round(y + h - wave / 2)} Z" ${common}/>`;
237
+ }
238
+ case 'bucket': {
239
+ const ry = Math.min(12, h * 0.1);
240
+ const inset = w * 0.08;
241
+ return [
242
+ `<path d="M ${x} ${round(y + ry)} A ${round(w / 2)} ${round(ry)} 0 0 1 ${x + w} ${round(y + ry)} L ${round(x + w - inset)} ${round(y + h - ry)} A ${round(w / 2 - inset)} ${round(ry)} 0 0 1 ${round(x + inset)} ${round(y + h - ry)} Z" ${common}/>`,
243
+ `<path d="M ${x} ${round(y + ry)} A ${round(w / 2)} ${round(ry)} 0 0 0 ${x + w} ${round(y + ry)}" fill="none" stroke="${stroke}" stroke-width="1.2" stroke-opacity="0.7"/>`,
244
+ ].join('\n');
245
+ }
246
+ case 'rectangle':
247
+ default:
248
+ return `<rect x="${x}" y="${y}" width="${w}" height="${h}" rx="10" ${common}/>`;
249
+ }
250
+ }
251
+ // --------------------------------------------------------------------------
252
+ // Relaciones
253
+ // --------------------------------------------------------------------------
254
+ function renderEdge(edge, theme, nodes, colors) {
255
+ const points = edge.points ?? [];
256
+ if (points.length < 2)
257
+ return '';
258
+ const stroke = colors.pair(theme.likec4.edgeStroke, theme.dark.likec4.edgeStroke);
259
+ const dash = edge.line === 'dashed' ? ' stroke-dasharray="7 5"' : edge.line === 'dotted' ? ' stroke-dasharray="2 4"' : '';
260
+ const marker = markerFor(edge.head);
261
+ const tailMarker = edge.tail !== undefined && edge.tail !== 'none' ? ` marker-start="url(#${markerFor(edge.tail)})"` : '';
262
+ const parts = [
263
+ `<path d="${bezierPath(points)}" fill="none" stroke="${stroke}" stroke-width="1.6" stroke-linecap="round"${dash} marker-end="url(#${marker})"${tailMarker} data-edge="${escapeXml(edge.id)}"/>`,
264
+ ];
265
+ const label = typeof edge.label === 'string' ? edge.label.trim() : '';
266
+ if (label !== '') {
267
+ const box = edge.labelBBox;
268
+ const anchor = box ?? midpointBox(points);
269
+ const lines = wrap(label, Math.max(70, box?.width ?? 120), BODY_SIZE, 2);
270
+ const lineHeight = BODY_SIZE * LINE_GAP;
271
+ const boxWidth = Math.max(...lines.map((l) => textWidth(l, BODY_SIZE))) + 10;
272
+ const boxHeight = lines.length * lineHeight + 6;
273
+ const cx = round(anchor.x + (box?.width ?? 0) / 2);
274
+ const top = round(anchor.y - (box === undefined ? boxHeight / 2 : 2));
275
+ const labelBackground = colors.pair(theme.likec4.background, theme.dark.likec4.background);
276
+ const labelText = colors.pair(theme.likec4.edgeText, theme.dark.likec4.edgeText);
277
+ parts.push(`<rect x="${round(cx - boxWidth / 2)}" y="${top}" width="${round(boxWidth)}" height="${round(boxHeight)}" rx="4" fill="${labelBackground}" fill-opacity="0.92"/>`);
278
+ let cursor = top + BODY_SIZE + 2;
279
+ for (const line of lines) {
280
+ parts.push(textNode(escapeXml(line), cx, cursor, BODY_SIZE, labelText, 'middle', 500, theme));
281
+ cursor += lineHeight;
282
+ }
283
+ }
284
+ // Nota: `nodes` queda disponible para futuras decoraciones por forma de origen.
285
+ void nodes;
286
+ return parts.join('\n');
287
+ }
288
+ function markerFor(head) {
289
+ switch (head) {
290
+ case 'diamond':
291
+ case 'odiamond':
292
+ return 'lc4-diamond';
293
+ case 'dot':
294
+ case 'odot':
295
+ return 'lc4-dot';
296
+ case 'open':
297
+ case 'vee':
298
+ case 'onormal':
299
+ return 'lc4-arrow-open';
300
+ default:
301
+ return 'lc4-arrow';
302
+ }
303
+ }
304
+ /**
305
+ * Graphviz entrega la curva como punto inicial seguido de tripletas de control.
306
+ * Si sobran puntos que no completan una tripleta se cierran con segmentos rectos.
307
+ */
308
+ function bezierPath(points) {
309
+ const [first, ...rest] = points;
310
+ let d = `M ${round(first[0])} ${round(first[1])}`;
311
+ let i = 0;
312
+ while (i + 2 < rest.length) {
313
+ const c1 = rest[i];
314
+ const c2 = rest[i + 1];
315
+ const end = rest[i + 2];
316
+ d += ` C ${round(c1[0])} ${round(c1[1])}, ${round(c2[0])} ${round(c2[1])}, ${round(end[0])} ${round(end[1])}`;
317
+ i += 3;
318
+ }
319
+ for (; i < rest.length; i += 1) {
320
+ const p = rest[i];
321
+ d += ` L ${round(p[0])} ${round(p[1])}`;
322
+ }
323
+ return d;
324
+ }
325
+ function midpointBox(points) {
326
+ const mid = points[Math.floor(points.length / 2)];
327
+ return { x: mid[0], y: mid[1], width: 0, height: 0 };
328
+ }
329
+ // --------------------------------------------------------------------------
330
+ // Texto
331
+ // --------------------------------------------------------------------------
332
+ function textNode(content, x, y, size, fill, anchor, weight, theme, style) {
333
+ const italic = style === 'italic' ? ' font-style="italic"' : '';
334
+ return `<text x="${round(x)}" y="${round(y)}" font-family="${escapeXml(theme.fontFamily)}" font-size="${size}" font-weight="${weight}" fill="${fill}" text-anchor="${anchor}"${italic}>${content}</text>`;
335
+ }
336
+ function textWidth(text, size) {
337
+ return text.length * size * CHAR_RATIO;
338
+ }
339
+ /** Ajuste de linea por palabras con truncado con elipsis al llegar al maximo. */
340
+ export function wrap(text, maxWidth, size, maxLines) {
341
+ const words = text.split(/\s+/).filter((w) => w !== '');
342
+ if (words.length === 0)
343
+ return [];
344
+ const lines = [];
345
+ let current = '';
346
+ for (const word of words) {
347
+ const candidate = current === '' ? word : `${current} ${word}`;
348
+ if (textWidth(candidate, size) <= maxWidth || current === '') {
349
+ current = candidate;
350
+ }
351
+ else {
352
+ lines.push(current);
353
+ current = word;
354
+ if (lines.length === maxLines)
355
+ break;
356
+ }
357
+ }
358
+ if (lines.length < maxLines && current !== '')
359
+ lines.push(current);
360
+ if (lines.length === maxLines) {
361
+ const consumed = lines.join(' ').split(/\s+/).length;
362
+ if (consumed < words.length) {
363
+ const last = lines[maxLines - 1];
364
+ lines[maxLines - 1] = `${last.replace(/[\s,.;:]+$/, '')}...`;
365
+ }
366
+ }
367
+ return lines;
368
+ }
369
+ function normalizeText(value) {
370
+ if (typeof value === 'string') {
371
+ const t = value.trim();
372
+ return t === '' ? undefined : t;
373
+ }
374
+ if (value !== null && typeof value === 'object' && 'txt' in value) {
375
+ return normalizeText(value.txt);
376
+ }
377
+ return undefined;
378
+ }
379
+ // --------------------------------------------------------------------------
380
+ // Color
381
+ // --------------------------------------------------------------------------
382
+ /**
383
+ * Elige texto claro u oscuro segun la luminancia del relleno (WCAG).
384
+ *
385
+ * Devuelve neutros absolutos, no tokens de la paleta: el criterio es el
386
+ * contraste contra ese relleno concreto, y el relleno ya cambia entre el modo
387
+ * claro y el oscuro. Usar `primaryText` seria un error de significado —ese token
388
+ * es "texto sobre el color primario", que en la paleta oscura es oscuro.
389
+ */
390
+ export function contrastText(fill, palette) {
391
+ const rgb = parseHex(fill);
392
+ if (rgb === undefined)
393
+ return palette.text;
394
+ const [r, g, b] = rgb.map((c) => {
395
+ const s = c / 255;
396
+ return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
397
+ });
398
+ const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
399
+ return luminance > 0.45 ? INK_ON_LIGHT : INK_ON_DARK;
400
+ }
401
+ /** Compone `fg` sobre `bg` con la opacidad dada y devuelve un color opaco. */
402
+ export function blend(fg, bg, alpha) {
403
+ const a = parseHex(fg);
404
+ const b = parseHex(bg);
405
+ if (a === undefined || b === undefined)
406
+ return fg;
407
+ const mix = a.map((c, i) => Math.round(c * alpha + b[i] * (1 - alpha)));
408
+ return `#${mix.map((c) => c.toString(16).padStart(2, '0')).join('')}`;
409
+ }
410
+ function withAlpha(hex, alpha) {
411
+ const rgb = parseHex(hex);
412
+ if (rgb === undefined)
413
+ return hex;
414
+ return `rgba(${rgb[0]},${rgb[1]},${rgb[2]},${alpha})`;
415
+ }
416
+ function parseHex(hex) {
417
+ const m = /^#?([0-9a-f]{6}|[0-9a-f]{3})$/i.exec(hex.trim());
418
+ if (m === null)
419
+ return undefined;
420
+ let value = m[1];
421
+ if (value.length === 3)
422
+ value = value.split('').map((c) => c + c).join('');
423
+ return [
424
+ Number.parseInt(value.slice(0, 2), 16),
425
+ Number.parseInt(value.slice(2, 4), 16),
426
+ Number.parseInt(value.slice(4, 6), 16),
427
+ ];
428
+ }
429
+ function clamp(v, min, max) {
430
+ return Math.min(max, Math.max(min, v));
431
+ }
432
+ function round(v) {
433
+ return Math.round(v * 100) / 100;
434
+ }
435
+ //# sourceMappingURL=likec4-svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"likec4-svg.js","sourceRoot":"","sources":["../../src/renderers/likec4-svg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Renderer LikeC4 — renderer especializado, no pasa por Kroki.
3
+ *
4
+ * Usa la API programatica de `likec4` para parsear el DSL, validar el modelo y
5
+ * calcular el layout (Graphviz WASM), y despues dibuja la vista con el emisor
6
+ * SVG propio (`likec4-svg.ts`) aplicando el tema del proyecto.
7
+ */
8
+ import type { DiagramRenderer, OutputFormat, RenderOptions, RenderResult } from '../core/types.js';
9
+ export interface LikeC4Options {
10
+ /** Nombre de la vista a renderizar cuando el modelo define varias. */
11
+ view?: string;
12
+ }
13
+ export declare class LikeC4Renderer implements DiagramRenderer {
14
+ readonly type = "likec4";
15
+ readonly defaultFormat: OutputFormat;
16
+ readonly supportedFormats: readonly OutputFormat[];
17
+ private cachedVersion?;
18
+ version(): Promise<string>;
19
+ render(source: string, options: RenderOptions): Promise<RenderResult>;
20
+ }
21
+ export declare function createLikeC4Renderer(options?: LikeC4Options): DiagramRenderer;
22
+ //# sourceMappingURL=likec4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"likec4.d.ts","sourceRoot":"","sources":["../../src/renderers/likec4.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQnG,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,qBAAa,cAAe,YAAW,eAAe;IACpD,QAAQ,CAAC,IAAI,YAAQ;IACrB,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAS;IAC7C,QAAQ,CAAC,gBAAgB,0BAAa;IAEtC,OAAO,CAAC,aAAa,CAAC,CAAS;IAEzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAS1B,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CAmC5E;AAiBD,wBAAgB,oBAAoB,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe,CAG7E"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Renderer LikeC4 — renderer especializado, no pasa por Kroki.
3
+ *
4
+ * Usa la API programatica de `likec4` para parsear el DSL, validar el modelo y
5
+ * calcular el layout (Graphviz WASM), y despues dibuja la vista con el emisor
6
+ * SVG propio (`likec4-svg.ts`) aplicando el tema del proyecto.
7
+ */
8
+ import { RenderError } from '../core/errors.js';
9
+ import { packageVersion } from '../core/package-version.js';
10
+ import { assertFormat, asRenderError, svgResult } from './base.js';
11
+ import { renderLikeC4View } from './likec4-svg.js';
12
+ const TYPE = 'likec4';
13
+ const SUPPORTED = ['svg'];
14
+ export class LikeC4Renderer {
15
+ type = TYPE;
16
+ defaultFormat = 'svg';
17
+ supportedFormats = SUPPORTED;
18
+ cachedVersion;
19
+ async version() {
20
+ if (this.cachedVersion !== undefined)
21
+ return this.cachedVersion;
22
+ // El emisor SVG es nuestro, asi que su version tambien entra en el hash:
23
+ // hay que subirla al cambiar el dibujado, o el cache serviria imagenes
24
+ // generadas por el emisor anterior. Version 2: colores duales claro/oscuro.
25
+ this.cachedVersion = `likec4-${packageVersion('likec4')}+docviz-svg-2`;
26
+ return this.cachedVersion;
27
+ }
28
+ async render(source, options) {
29
+ assertFormat(TYPE, options.format, SUPPORTED);
30
+ if (source.trim() === '')
31
+ throw new RenderError(TYPE, 'el modelo LikeC4 esta vacio');
32
+ let instance;
33
+ let views;
34
+ try {
35
+ const { LikeC4 } = await import('likec4');
36
+ instance = (await LikeC4.fromSource(source, {
37
+ logger: false,
38
+ printErrors: false,
39
+ throwIfInvalid: true,
40
+ graphviz: 'wasm',
41
+ }));
42
+ views = await instance.diagrams();
43
+ }
44
+ catch (err) {
45
+ throw asRenderError(TYPE, err, 'LikeC4 rechazo el modelo');
46
+ }
47
+ finally {
48
+ // El servicio de lenguaje deja timers vivos si no se libera.
49
+ await instance?.dispose?.().catch(() => undefined);
50
+ }
51
+ if (views.length === 0) {
52
+ throw new RenderError(TYPE, 'el modelo no define ninguna vista', 'anade un bloque `views { view index { include * } }`');
53
+ }
54
+ const requested = options.title;
55
+ const view = pickView(views, requested);
56
+ const svg = renderLikeC4View(view, options.theme);
57
+ return svgResult(TYPE, svg, options);
58
+ }
59
+ }
60
+ /**
61
+ * Elige la vista a dibujar: la que coincida por id o titulo con lo pedido, o la
62
+ * primera declarada. Un bloque Markdown produce exactamente una imagen.
63
+ */
64
+ function pickView(views, requested) {
65
+ if (requested !== undefined) {
66
+ const match = views.find((v) => v.id === requested || (typeof v.title === 'string' && v.title === requested));
67
+ if (match !== undefined)
68
+ return match;
69
+ }
70
+ const index = views.find((v) => v.id === 'index');
71
+ return index ?? views[0];
72
+ }
73
+ export function createLikeC4Renderer(options) {
74
+ void options;
75
+ return new LikeC4Renderer();
76
+ }
77
+ //# sourceMappingURL=likec4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"likec4.js","sourceRoot":"","sources":["../../src/renderers/likec4.ts"],"names":[],"mappings":"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"}