@unovis/mcp 1.7.0-mcp.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 (153) hide show
  1. package/LICENSE +193 -0
  2. package/README.md +154 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +109 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/codegen/index.d.ts +14 -0
  7. package/dist/codegen/index.js +346 -0
  8. package/dist/codegen/index.js.map +1 -0
  9. package/dist/env/bbox.d.ts +13 -0
  10. package/dist/env/bbox.js +335 -0
  11. package/dist/env/bbox.js.map +1 -0
  12. package/dist/env/canvas.d.ts +9 -0
  13. package/dist/env/canvas.js +55 -0
  14. package/dist/env/canvas.js.map +1 -0
  15. package/dist/env/computed-style.d.ts +38 -0
  16. package/dist/env/computed-style.js +186 -0
  17. package/dist/env/computed-style.js.map +1 -0
  18. package/dist/env/fonts.d.ts +3 -0
  19. package/dist/env/fonts.js +103 -0
  20. package/dist/env/fonts.js.map +1 -0
  21. package/dist/env/index.d.ts +13 -0
  22. package/dist/env/index.js +121 -0
  23. package/dist/env/index.js.map +1 -0
  24. package/dist/env/raf-queue.d.ts +23 -0
  25. package/dist/env/raf-queue.js +51 -0
  26. package/dist/env/raf-queue.js.map +1 -0
  27. package/dist/env/size.d.ts +9 -0
  28. package/dist/env/size.js +30 -0
  29. package/dist/env/size.js.map +1 -0
  30. package/dist/html/document.d.ts +16 -0
  31. package/dist/html/document.js +95 -0
  32. package/dist/html/document.js.map +1 -0
  33. package/dist/index.d.ts +25 -0
  34. package/dist/index.js +18 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/recipes/area.d.ts +66 -0
  37. package/dist/recipes/area.js +76 -0
  38. package/dist/recipes/area.js.map +1 -0
  39. package/dist/recipes/bar.d.ts +67 -0
  40. package/dist/recipes/bar.js +69 -0
  41. package/dist/recipes/bar.js.map +1 -0
  42. package/dist/recipes/boxplot.d.ts +64 -0
  43. package/dist/recipes/boxplot.js +89 -0
  44. package/dist/recipes/boxplot.js.map +1 -0
  45. package/dist/recipes/chord.d.ts +41 -0
  46. package/dist/recipes/chord.js +72 -0
  47. package/dist/recipes/chord.js.map +1 -0
  48. package/dist/recipes/choropleth-regions.d.ts +49 -0
  49. package/dist/recipes/choropleth-regions.js +521 -0
  50. package/dist/recipes/choropleth-regions.js.map +1 -0
  51. package/dist/recipes/choropleth.d.ts +27 -0
  52. package/dist/recipes/choropleth.js +86 -0
  53. package/dist/recipes/choropleth.js.map +1 -0
  54. package/dist/recipes/donut.d.ts +25 -0
  55. package/dist/recipes/donut.js +51 -0
  56. package/dist/recipes/donut.js.map +1 -0
  57. package/dist/recipes/graph.d.ts +55 -0
  58. package/dist/recipes/graph.js +132 -0
  59. package/dist/recipes/graph.js.map +1 -0
  60. package/dist/recipes/heatmap.d.ts +21 -0
  61. package/dist/recipes/heatmap.js +79 -0
  62. package/dist/recipes/heatmap.js.map +1 -0
  63. package/dist/recipes/index.d.ts +5 -0
  64. package/dist/recipes/index.js +35 -0
  65. package/dist/recipes/index.js.map +1 -0
  66. package/dist/recipes/line.d.ts +69 -0
  67. package/dist/recipes/line.js +64 -0
  68. package/dist/recipes/line.js.map +1 -0
  69. package/dist/recipes/nested-donut.d.ts +22 -0
  70. package/dist/recipes/nested-donut.js +47 -0
  71. package/dist/recipes/nested-donut.js.map +1 -0
  72. package/dist/recipes/radial-bar.d.ts +25 -0
  73. package/dist/recipes/radial-bar.js +53 -0
  74. package/dist/recipes/radial-bar.js.map +1 -0
  75. package/dist/recipes/sankey.d.ts +41 -0
  76. package/dist/recipes/sankey.js +61 -0
  77. package/dist/recipes/sankey.js.map +1 -0
  78. package/dist/recipes/scatter.d.ts +68 -0
  79. package/dist/recipes/scatter.js +75 -0
  80. package/dist/recipes/scatter.js.map +1 -0
  81. package/dist/recipes/shared.d.ts +144 -0
  82. package/dist/recipes/shared.js +212 -0
  83. package/dist/recipes/shared.js.map +1 -0
  84. package/dist/recipes/timeline.d.ts +31 -0
  85. package/dist/recipes/timeline.js +123 -0
  86. package/dist/recipes/timeline.js.map +1 -0
  87. package/dist/recipes/treemap.d.ts +19 -0
  88. package/dist/recipes/treemap.js +43 -0
  89. package/dist/recipes/treemap.js.map +1 -0
  90. package/dist/recipes/types.d.ts +16 -0
  91. package/dist/recipes/types.js +2 -0
  92. package/dist/recipes/types.js.map +1 -0
  93. package/dist/render/headless.d.ts +62 -0
  94. package/dist/render/headless.js +158 -0
  95. package/dist/render/headless.js.map +1 -0
  96. package/dist/render/materialize.d.ts +35 -0
  97. package/dist/render/materialize.js +160 -0
  98. package/dist/render/materialize.js.map +1 -0
  99. package/dist/render/mutex.d.ts +9 -0
  100. package/dist/render/mutex.js +14 -0
  101. package/dist/render/mutex.js.map +1 -0
  102. package/dist/render/rasterize.d.ts +10 -0
  103. package/dist/render/rasterize.js +29 -0
  104. package/dist/render/rasterize.js.map +1 -0
  105. package/dist/render/renderer.d.ts +21 -0
  106. package/dist/render/renderer.js +66 -0
  107. package/dist/render/renderer.js.map +1 -0
  108. package/dist/render/spec.d.ts +95 -0
  109. package/dist/render/spec.js +15 -0
  110. package/dist/render/spec.js.map +1 -0
  111. package/dist/server.d.ts +4 -0
  112. package/dist/server.js +44 -0
  113. package/dist/server.js.map +1 -0
  114. package/dist/svg/collect-css.d.ts +14 -0
  115. package/dist/svg/collect-css.js +53 -0
  116. package/dist/svg/collect-css.js.map +1 -0
  117. package/dist/svg/css-vars.d.ts +17 -0
  118. package/dist/svg/css-vars.js +64 -0
  119. package/dist/svg/css-vars.js.map +1 -0
  120. package/dist/svg/header.d.ts +8 -0
  121. package/dist/svg/header.js +81 -0
  122. package/dist/svg/header.js.map +1 -0
  123. package/dist/svg/ids.d.ts +12 -0
  124. package/dist/svg/ids.js +94 -0
  125. package/dist/svg/ids.js.map +1 -0
  126. package/dist/svg/postprocess.d.ts +41 -0
  127. package/dist/svg/postprocess.js +135 -0
  128. package/dist/svg/postprocess.js.map +1 -0
  129. package/dist/tools/register.d.ts +12 -0
  130. package/dist/tools/register.js +127 -0
  131. package/dist/tools/register.js.map +1 -0
  132. package/dist/widget/bundle.js +1777 -0
  133. package/dist/widget/bundle.meta.json +3 -0
  134. package/dist/widget/entry.d.ts +34 -0
  135. package/dist/widget/entry.js +118 -0
  136. package/dist/widget/entry.js.map +1 -0
  137. package/dist/widget/interactions.d.ts +14 -0
  138. package/dist/widget/interactions.js +151 -0
  139. package/dist/widget/interactions.js.map +1 -0
  140. package/dist/widget/unovis-slim.d.ts +33 -0
  141. package/dist/widget/unovis-slim.js +34 -0
  142. package/dist/widget/unovis-slim.js.map +1 -0
  143. package/docs/README.md +56 -0
  144. package/docs/architecture.md +158 -0
  145. package/docs/chart-spec.md +148 -0
  146. package/docs/getting-started.md +175 -0
  147. package/docs/interactive.md +125 -0
  148. package/docs/output-types.md +170 -0
  149. package/docs/programmatic.md +234 -0
  150. package/docs/tools.md +273 -0
  151. package/docs/troubleshooting.md +140 -0
  152. package/fonts/README.md +19 -0
  153. package/package.json +73 -0
@@ -0,0 +1,346 @@
1
+ /** ChartSpec → runnable Unovis code.
2
+ *
3
+ * The same spec that renders headlessly can be emitted as source for any
4
+ * Unovis wrapper, which turns the server into a scaffolding tool: ask for a
5
+ * chart, get code you can paste into your app. Accessor descriptors become
6
+ * arrow functions, `{ $unovisMap }` markers become map imports, and the data
7
+ * is emitted alongside so the snippet runs as-is.
8
+ */
9
+ import { isAccessorRef } from '../render/spec.js';
10
+ export const FRAMEWORKS = ['ts', 'react', 'svelte', 'vue', 'angular', 'solid'];
11
+ const indent = (text, spaces) => text.split('\n').map(line => (line ? ' '.repeat(spaces) + line : line)).join('\n');
12
+ const camelToKebab = (name) => name.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/([A-Z])([A-Z][a-z])/g, '$1-$2').toLowerCase();
13
+ /** JSON with single-quoted strings, matching the repo's code style */
14
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
15
+ const json = (value, spaces = 2) => requote(JSON.stringify(value, null, spaces));
16
+ /** Swap JSON's double quotes for single quotes, leaving escaped content intact */
17
+ function requote(jsonText) {
18
+ return jsonText.replace(/"(?:[^"\\]|\\.)*"/g, (match) => {
19
+ const text = JSON.parse(match);
20
+ return /^[A-Za-z_$][\w$]*$/.test(text) || !/['\\]/.test(text)
21
+ ? `'${text.replace(/'/g, "\\'")}'`
22
+ : match;
23
+ }).replace(/'([A-Za-z_$][\w$]*)':/g, '$1:'); // unquote plain object keys
24
+ }
25
+ /** One record per line — readable for the dozens of rows charts usually carry */
26
+ function dataLiteralFor(data) {
27
+ if (!Array.isArray(data))
28
+ return json(data);
29
+ const rows = data.map(record => {
30
+ if (typeof record !== 'object' || record === null)
31
+ return ` ${json(record, 0)},`;
32
+ const fields = Object.entries(record)
33
+ .map(([key, value]) => `${/^[A-Za-z_$][\w$]*$/.test(key) ? key : `'${key}'`}: ${json(value, 0)}`);
34
+ return ` { ${fields.join(', ')} },`;
35
+ });
36
+ return `[\n${rows.join('\n')}\n]`;
37
+ }
38
+ /** Values that are safe to inline; anything larger is referenced by import */
39
+ const isBigMapPayload = (value) => typeof value === 'object' && value !== null && 'objects' in value;
40
+ function addHelper(emit, code) {
41
+ if (!emit.helpers.includes(code))
42
+ emit.helpers.push(code);
43
+ }
44
+ /** An accessor descriptor as a source expression */
45
+ function accessorExpression(ref, emit) {
46
+ if ('$field' in ref) {
47
+ const access = `d.${/^[A-Za-z_$][\w$]*$/.test(ref.$field) ? ref.$field : `['${ref.$field}']`}`;
48
+ if (ref.as === 'date')
49
+ return `d => new Date(${access}).getTime()`;
50
+ return `d => ${access}`;
51
+ }
52
+ if ('$index' in ref)
53
+ return '(d, i) => i';
54
+ if ('$const' in ref)
55
+ return `() => ${json(ref.$const)}`;
56
+ if ('$numTickFormat' in ref) {
57
+ addHelper(emit, "const formatNumber = (value: number | Date): string =>\n Number(value).toLocaleString('en-US', { maximumFractionDigits: 6 })");
58
+ return 'formatNumber';
59
+ }
60
+ if ('$dateTickFormat' in ref) {
61
+ addHelper(emit, "const formatDate = (value: number | Date): string =>\n new Date(Number(value)).toLocaleDateString('en-US', { month: 'short', day: 'numeric', timeZone: 'UTC' })");
62
+ return 'formatDate';
63
+ }
64
+ if ('$lookup' in ref) {
65
+ addHelper(emit, `const categories = ${json(ref.$lookup)}`);
66
+ return '(index: number | Date) => categories[Math.round(Number(index))]';
67
+ }
68
+ if ('$format' in ref) {
69
+ const { field, prefix = '', suffix = '' } = ref.$format;
70
+ addHelper(emit, "const formatNumber = (value: number): string => value.toLocaleString('en-US', { maximumFractionDigits: 6 })");
71
+ return `d => \`${prefix}\${formatNumber(d.${field})}${suffix}\``;
72
+ }
73
+ if ('$mapField' in ref) {
74
+ const { field, mapping, fallback } = ref.$mapField;
75
+ const name = `colorBy${field.charAt(0).toUpperCase()}${field.slice(1)}`;
76
+ addHelper(emit, `const ${name}: Record<string, string> = ${json(mapping)}`);
77
+ return `d => ${name}[d.${field}]${fallback ? ` ?? '${fallback}'` : ''}`;
78
+ }
79
+ return 'undefined';
80
+ }
81
+ /** A config value as a source expression, or undefined to skip the prop */
82
+ function valueExpression(value, emit) {
83
+ if (value === undefined)
84
+ return undefined;
85
+ if (isAccessorRef(value))
86
+ return accessorExpression(value, emit);
87
+ // Map data: import the topojson instead of inlining megabytes
88
+ const marker = value?.$unovisMap;
89
+ if (marker) {
90
+ emit.mapImports.add(marker);
91
+ return marker;
92
+ }
93
+ if (isBigMapPayload(value))
94
+ return undefined;
95
+ if (Array.isArray(value)) {
96
+ const parts = value.map(item => valueExpression(item, emit)).filter((v) => v !== undefined);
97
+ return `[${parts.join(', ')}]`;
98
+ }
99
+ if (typeof value === 'object' && value !== null) {
100
+ const entries = Object.entries(value)
101
+ .map(([key, item]) => {
102
+ const expr = valueExpression(item, emit);
103
+ return expr === undefined ? undefined : `${key}: ${expr}`;
104
+ })
105
+ .filter((v) => v !== undefined);
106
+ return `{ ${entries.join(', ')} }`;
107
+ }
108
+ return json(value);
109
+ }
110
+ /** Config props whose types are enums rather than plain strings — a string
111
+ * literal would not type-check, so the enum member is emitted and imported.
112
+ * (Most Unovis enums are declared `Enum | string`; these are not.) */
113
+ const ENUM_PROPS = {
114
+ curveType: 'CurveType',
115
+ };
116
+ const enumMember = (value) => value.charAt(0).toUpperCase() + value.slice(1);
117
+ function componentProps(component, emit) {
118
+ return Object.entries(component.config)
119
+ .map(([name, value]) => {
120
+ const enumName = ENUM_PROPS[name];
121
+ if (enumName && typeof value === 'string') {
122
+ emit.enumImports.add(enumName);
123
+ return { name, expr: `${enumName}.${enumMember(value)}` };
124
+ }
125
+ const expr = valueExpression(value, emit);
126
+ return expr === undefined ? undefined : { name, expr };
127
+ })
128
+ .filter((p) => p !== undefined);
129
+ }
130
+ function axisProps(spec, axis, emit) {
131
+ const config = axis === 'x' ? spec.xAxis : spec.yAxis;
132
+ if (!config)
133
+ return undefined;
134
+ const props = [{ name: 'type', expr: `'${axis}'` }];
135
+ for (const [name, value] of Object.entries(config)) {
136
+ const expr = valueExpression(value, emit);
137
+ if (expr !== undefined)
138
+ props.push({ name, expr });
139
+ }
140
+ return props;
141
+ }
142
+ // ── emitters ────────────────────────────────────────────────────────────────
143
+ const containerName = (spec) => spec.container === 'xy' ? 'XYContainer' : 'SingleContainer';
144
+ const preamble = (emit, dataLiteral, includeEnumImport = false) => {
145
+ const blocks = [];
146
+ // Enums live in the core package even when components come from a wrapper
147
+ if (includeEnumImport && emit.enumImports.size) {
148
+ blocks.push(`import { ${[...emit.enumImports].sort().join(', ')} } from '@unovis/ts'`);
149
+ }
150
+ if (emit.mapImports.size) {
151
+ blocks.push(`import { ${[...emit.mapImports].join(', ')} } from '@unovis/ts/maps'`);
152
+ }
153
+ blocks.push(dataLiteral);
154
+ if (emit.helpers.length)
155
+ blocks.push(emit.helpers.join('\n\n'));
156
+ return blocks.join('\n\n');
157
+ };
158
+ /** Vanilla TypeScript, using the imperative API */
159
+ function emitTs(spec, emit) {
160
+ const components = spec.components.map(c => ({ type: c.type, props: componentProps(c, emit) }));
161
+ const xAxis = axisProps(spec, 'x', emit);
162
+ const yAxis = axisProps(spec, 'y', emit);
163
+ const componentVars = components.map((c, i) => {
164
+ const varName = components.length > 1 ? `${c.type.charAt(0).toLowerCase()}${c.type.slice(1)}${i + 1}` : c.type.charAt(0).toLowerCase() + c.type.slice(1);
165
+ const props = c.props.map(p => ` ${p.name}: ${p.expr},`).join('\n');
166
+ return { varName, code: `const ${varName} = new ${c.type}<DataRecord>({\n${props}\n})` };
167
+ });
168
+ const containerProps = [];
169
+ if (spec.container === 'xy') {
170
+ containerProps.push(`components: [${componentVars.map(c => c.varName).join(', ')}]`);
171
+ if (xAxis)
172
+ containerProps.push(`xAxis: new Axis<DataRecord>({ ${xAxis.filter(p => p.name !== 'type').map(p => `${p.name}: ${p.expr}`).join(', ')} })`);
173
+ if (yAxis)
174
+ containerProps.push(`yAxis: new Axis<DataRecord>({ ${yAxis.filter(p => p.name !== 'type').map(p => `${p.name}: ${p.expr}`).join(', ')} })`);
175
+ }
176
+ else {
177
+ containerProps.push(`component: ${componentVars[0].varName}`);
178
+ }
179
+ containerProps.push(`height: ${spec.height}`);
180
+ const imports = ['Axis', containerName(spec), ...components.map(c => c.type), ...emit.enumImports]
181
+ .filter((name, i, all) => all.indexOf(name) === i && (name !== 'Axis' || xAxis || yAxis))
182
+ .sort();
183
+ const legend = spec.legend?.length
184
+ ? `\n// Legend (renders into its own element)\nconst legend = new BulletLegend(document.getElementById('legend') as HTMLElement, {\n items: ${json(spec.legend.map(item => ({ name: item.name })))},\n})\n`
185
+ : '';
186
+ if (spec.legend?.length)
187
+ imports.push('BulletLegend');
188
+ const content = `import { ${imports.sort().join(', ')} } from '@unovis/ts'
189
+
190
+ ${preamble(emit, `const data = ${dataLiteralFor(spec.data)}\n\ntype DataRecord = typeof data[number]`)}
191
+
192
+ ${componentVars.map(c => c.code).join('\n\n')}
193
+
194
+ const container = document.getElementById('chart') as HTMLElement
195
+ const chart = new ${containerName(spec)}<DataRecord>(container, {
196
+ ${containerProps.map(p => ` ${p},`).join('\n')}
197
+ }, data)
198
+ ${legend}`;
199
+ return { name: 'chart.ts', language: 'typescript', content };
200
+ }
201
+ /** JSX-based wrappers (React and Solid share their shape) */
202
+ function emitJsx(spec, emit, framework) {
203
+ const components = spec.components.map(c => ({ type: c.type, props: componentProps(c, emit) }));
204
+ const xAxis = axisProps(spec, 'x', emit);
205
+ const yAxis = axisProps(spec, 'y', emit);
206
+ const tag = (name) => `Vis${name}`;
207
+ const renderProps = (props) => props.map(p => p.expr.startsWith("'") ? ` ${p.name}=${p.expr.replace(/'/g, '"')}` : ` ${p.name}={${p.expr}}`).join('');
208
+ const children = [
209
+ ...components.map(c => `<${tag(c.type)} data={data}${renderProps(c.props)} />`),
210
+ ...(xAxis ? [`<${tag('Axis')}${renderProps(xAxis)} />`] : []),
211
+ ...(yAxis ? [`<${tag('Axis')}${renderProps(yAxis)} />`] : []),
212
+ ];
213
+ const used = [`Vis${containerName(spec)}`, ...components.map(c => tag(c.type)), ...(xAxis || yAxis ? ['VisAxis'] : [])];
214
+ const legendTag = spec.legend?.length ? `<VisBulletLegend items={${json(spec.legend.map(i => ({ name: i.name })), 0)}} />\n ` : '';
215
+ if (spec.legend?.length)
216
+ used.push('VisBulletLegend');
217
+ const pkg = framework === 'react' ? '@unovis/react' : '@unovis/solid';
218
+ const header = framework === 'react'
219
+ ? `import React from 'react'\nimport { ${[...new Set(used)].sort().join(', ')} } from '${pkg}'`
220
+ : `import type { JSX } from 'solid-js'\nimport { ${[...new Set(used)].sort().join(', ')} } from '${pkg}'`;
221
+ const signature = framework === 'react'
222
+ ? 'export default function Chart (): JSX.Element {'
223
+ : 'const Chart = (): JSX.Element => {';
224
+ const footer = framework === 'react' ? '}' : '}\n\nexport default Chart';
225
+ const content = `${header}
226
+
227
+ ${preamble(emit, `const data = ${dataLiteralFor(spec.data)}`, true)}
228
+
229
+ ${signature}
230
+ return (
231
+ <>
232
+ ${legendTag}<Vis${containerName(spec)} height={${spec.height}}>
233
+ ${indent(children.join('\n'), 8)}
234
+ </Vis${containerName(spec)}>
235
+ </>
236
+ )
237
+ ${footer}
238
+ `;
239
+ return { name: framework === 'react' ? 'Chart.tsx' : 'Chart.tsx', language: 'tsx', content };
240
+ }
241
+ /** Svelte and Vue: script block plus template */
242
+ function emitTemplate(spec, emit, framework) {
243
+ const components = spec.components.map(c => ({ type: c.type, props: componentProps(c, emit) }));
244
+ const xAxis = axisProps(spec, 'x', emit);
245
+ const yAxis = axisProps(spec, 'y', emit);
246
+ const tag = (name) => `Vis${name}`;
247
+ const bind = (p) => {
248
+ if (p.expr.startsWith("'"))
249
+ return ` ${p.name}=${p.expr.replace(/'/g, '"')}`;
250
+ return framework === 'svelte' ? ` ${p.name}={${p.expr}}` : ` :${p.name}="${p.expr.replace(/"/g, "'")}"`;
251
+ };
252
+ const dataBind = framework === 'svelte' ? ' {data}' : ' :data="data"';
253
+ const heightBind = framework === 'svelte' ? `height={${spec.height}}` : `:height="${spec.height}"`;
254
+ const children = [
255
+ ...components.map(c => `<${tag(c.type)}${dataBind}${c.props.map(bind).join('')} />`),
256
+ ...(xAxis ? [`<${tag('Axis')}${xAxis.map(bind).join('')} />`] : []),
257
+ ...(yAxis ? [`<${tag('Axis')}${yAxis.map(bind).join('')} />`] : []),
258
+ ];
259
+ const used = [`Vis${containerName(spec)}`, ...components.map(c => tag(c.type)), ...(xAxis || yAxis ? ['VisAxis'] : [])];
260
+ const pkg = framework === 'svelte' ? '@unovis/svelte' : '@unovis/vue';
261
+ const script = `import { ${[...new Set(used)].sort().join(', ')} } from '${pkg}'\n\n${preamble(emit, `const data = ${dataLiteralFor(spec.data)}`, true)}`;
262
+ if (framework === 'svelte') {
263
+ return {
264
+ name: 'Chart.svelte',
265
+ language: 'svelte',
266
+ content: `<script lang="ts">\n${indent(script, 2)}\n</script>\n\n<Vis${containerName(spec)} ${heightBind}>\n${indent(children.join('\n'), 2)}\n</Vis${containerName(spec)}>\n`,
267
+ };
268
+ }
269
+ return {
270
+ name: 'Chart.vue',
271
+ language: 'vue',
272
+ content: `<script setup lang="ts">\n${script}\n</script>\n\n<template>\n <Vis${containerName(spec)} ${heightBind}>\n${indent(children.join('\n'), 4)}\n </Vis${containerName(spec)}>\n</template>\n`,
273
+ };
274
+ }
275
+ /** Angular: a template plus the component class holding the accessors */
276
+ /** Add parameter types to accessor arrows: Angular class fields get no
277
+ * contextual typing, so bare `d => ...` would be an implicit any */
278
+ function annotateParams(expr) {
279
+ return expr
280
+ .replace(/^\(d, i\) =>/, '(d: DataRecord, i: number) =>')
281
+ .replace(/^d =>/, '(d: DataRecord) =>');
282
+ }
283
+ function emitAngular(spec, emit) {
284
+ const components = spec.components.map(c => ({ type: c.type, props: componentProps(c, emit) }));
285
+ const xAxis = axisProps(spec, 'x', emit);
286
+ const yAxis = axisProps(spec, 'y', emit);
287
+ // Angular templates can't hold arrow functions, so every non-literal prop
288
+ // becomes a class field the template binds to
289
+ let counter = 0;
290
+ const fields = [];
291
+ const bind = (componentType, p) => {
292
+ if (p.expr.startsWith("'"))
293
+ return ` ${p.name}=${p.expr.replace(/'/g, '"')}`;
294
+ if (/^[-\d.]+$|^(true|false)$/.test(p.expr))
295
+ return ` [${p.name}]="${p.expr}"`;
296
+ const fieldName = `${componentType.charAt(0).toLowerCase()}${componentType.slice(1)}${p.name.charAt(0).toUpperCase()}${p.name.slice(1)}${counter++}`;
297
+ fields.push({ name: fieldName, expr: annotateParams(p.expr) });
298
+ return ` [${p.name}]="${fieldName}"`;
299
+ };
300
+ const lines = [
301
+ ...components.map(c => {
302
+ const t = camelToKebab(c.type);
303
+ return `<vis-${t} [data]="data"${c.props.map(p => bind(c.type, p)).join('')}></vis-${t}>`;
304
+ }),
305
+ ...(xAxis ? [`<vis-axis${xAxis.map(p => bind('xAxis', p)).join('')}></vis-axis>`] : []),
306
+ ...(yAxis ? [`<vis-axis${yAxis.map(p => bind('yAxis', p)).join('')}></vis-axis>`] : []),
307
+ ];
308
+ const containerTag = camelToKebab(containerName(spec));
309
+ const template = `<vis-${containerTag} [height]="${spec.height}">\n${indent(lines.join('\n'), 2)}\n</vis-${containerTag}>\n`;
310
+ const klass = `import { Component } from '@angular/core'
311
+
312
+ ${preamble(emit, `export const data = ${dataLiteralFor(spec.data)}\n\nexport type DataRecord = typeof data[number]`, true)}
313
+
314
+ @Component({
315
+ selector: 'unovis-chart',
316
+ templateUrl: './chart.component.html',
317
+ })
318
+ export class ChartComponent {
319
+ data = data
320
+ ${fields.map(f => ` ${f.name} = ${f.expr}`).join('\n')}
321
+ }
322
+ `;
323
+ return [
324
+ { name: 'chart.component.html', language: 'html', content: template },
325
+ { name: 'chart.component.ts', language: 'typescript', content: klass },
326
+ ];
327
+ }
328
+ /** Generate source files for a spec. Angular returns two files. */
329
+ export function generateCode(spec, framework) {
330
+ const emit = { helpers: [], mapImports: new Set(), enumImports: new Set(), fields: [] };
331
+ switch (framework) {
332
+ case 'react': return [emitJsx(spec, emit, 'react')];
333
+ case 'solid': return [emitJsx(spec, emit, 'solid')];
334
+ case 'svelte': return [emitTemplate(spec, emit, 'svelte')];
335
+ case 'vue': return [emitTemplate(spec, emit, 'vue')];
336
+ case 'angular': return emitAngular(spec, emit);
337
+ default: return [emitTs(spec, emit)];
338
+ }
339
+ }
340
+ /** Render generated files as one markdown-ish block for a tool result */
341
+ export function formatGeneratedFiles(files) {
342
+ if (files.length === 1)
343
+ return `\`\`\`${files[0].language}\n${files[0].content}\`\`\``;
344
+ return files.map(file => `**${file.name}**\n\n\`\`\`${file.language}\n${file.content}\`\`\``).join('\n\n');
345
+ }
346
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { DOMWindow } from 'jsdom';
2
+ export interface Box {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ /** 2D affine matrix [a b c d e f] — same layout as SVG matrix() */
9
+ type Matrix = [number, number, number, number, number, number];
10
+ export declare function parseTransform(transform: string | null): Matrix;
11
+ export declare function computeBox(el: Element, document: Document): Box;
12
+ export declare function installBBoxPolyfills(window: DOMWindow): void;
13
+ export {};