@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.
- package/LICENSE +193 -0
- package/README.md +154 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +109 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/index.d.ts +14 -0
- package/dist/codegen/index.js +346 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/env/bbox.d.ts +13 -0
- package/dist/env/bbox.js +335 -0
- package/dist/env/bbox.js.map +1 -0
- package/dist/env/canvas.d.ts +9 -0
- package/dist/env/canvas.js +55 -0
- package/dist/env/canvas.js.map +1 -0
- package/dist/env/computed-style.d.ts +38 -0
- package/dist/env/computed-style.js +186 -0
- package/dist/env/computed-style.js.map +1 -0
- package/dist/env/fonts.d.ts +3 -0
- package/dist/env/fonts.js +103 -0
- package/dist/env/fonts.js.map +1 -0
- package/dist/env/index.d.ts +13 -0
- package/dist/env/index.js +121 -0
- package/dist/env/index.js.map +1 -0
- package/dist/env/raf-queue.d.ts +23 -0
- package/dist/env/raf-queue.js +51 -0
- package/dist/env/raf-queue.js.map +1 -0
- package/dist/env/size.d.ts +9 -0
- package/dist/env/size.js +30 -0
- package/dist/env/size.js.map +1 -0
- package/dist/html/document.d.ts +16 -0
- package/dist/html/document.js +95 -0
- package/dist/html/document.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/recipes/area.d.ts +66 -0
- package/dist/recipes/area.js +76 -0
- package/dist/recipes/area.js.map +1 -0
- package/dist/recipes/bar.d.ts +67 -0
- package/dist/recipes/bar.js +69 -0
- package/dist/recipes/bar.js.map +1 -0
- package/dist/recipes/boxplot.d.ts +64 -0
- package/dist/recipes/boxplot.js +89 -0
- package/dist/recipes/boxplot.js.map +1 -0
- package/dist/recipes/chord.d.ts +41 -0
- package/dist/recipes/chord.js +72 -0
- package/dist/recipes/chord.js.map +1 -0
- package/dist/recipes/choropleth-regions.d.ts +49 -0
- package/dist/recipes/choropleth-regions.js +521 -0
- package/dist/recipes/choropleth-regions.js.map +1 -0
- package/dist/recipes/choropleth.d.ts +27 -0
- package/dist/recipes/choropleth.js +86 -0
- package/dist/recipes/choropleth.js.map +1 -0
- package/dist/recipes/donut.d.ts +25 -0
- package/dist/recipes/donut.js +51 -0
- package/dist/recipes/donut.js.map +1 -0
- package/dist/recipes/graph.d.ts +55 -0
- package/dist/recipes/graph.js +132 -0
- package/dist/recipes/graph.js.map +1 -0
- package/dist/recipes/heatmap.d.ts +21 -0
- package/dist/recipes/heatmap.js +79 -0
- package/dist/recipes/heatmap.js.map +1 -0
- package/dist/recipes/index.d.ts +5 -0
- package/dist/recipes/index.js +35 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/line.d.ts +69 -0
- package/dist/recipes/line.js +64 -0
- package/dist/recipes/line.js.map +1 -0
- package/dist/recipes/nested-donut.d.ts +22 -0
- package/dist/recipes/nested-donut.js +47 -0
- package/dist/recipes/nested-donut.js.map +1 -0
- package/dist/recipes/radial-bar.d.ts +25 -0
- package/dist/recipes/radial-bar.js +53 -0
- package/dist/recipes/radial-bar.js.map +1 -0
- package/dist/recipes/sankey.d.ts +41 -0
- package/dist/recipes/sankey.js +61 -0
- package/dist/recipes/sankey.js.map +1 -0
- package/dist/recipes/scatter.d.ts +68 -0
- package/dist/recipes/scatter.js +75 -0
- package/dist/recipes/scatter.js.map +1 -0
- package/dist/recipes/shared.d.ts +144 -0
- package/dist/recipes/shared.js +212 -0
- package/dist/recipes/shared.js.map +1 -0
- package/dist/recipes/timeline.d.ts +31 -0
- package/dist/recipes/timeline.js +123 -0
- package/dist/recipes/timeline.js.map +1 -0
- package/dist/recipes/treemap.d.ts +19 -0
- package/dist/recipes/treemap.js +43 -0
- package/dist/recipes/treemap.js.map +1 -0
- package/dist/recipes/types.d.ts +16 -0
- package/dist/recipes/types.js +2 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/render/headless.d.ts +62 -0
- package/dist/render/headless.js +158 -0
- package/dist/render/headless.js.map +1 -0
- package/dist/render/materialize.d.ts +35 -0
- package/dist/render/materialize.js +160 -0
- package/dist/render/materialize.js.map +1 -0
- package/dist/render/mutex.d.ts +9 -0
- package/dist/render/mutex.js +14 -0
- package/dist/render/mutex.js.map +1 -0
- package/dist/render/rasterize.d.ts +10 -0
- package/dist/render/rasterize.js +29 -0
- package/dist/render/rasterize.js.map +1 -0
- package/dist/render/renderer.d.ts +21 -0
- package/dist/render/renderer.js +66 -0
- package/dist/render/renderer.js.map +1 -0
- package/dist/render/spec.d.ts +95 -0
- package/dist/render/spec.js +15 -0
- package/dist/render/spec.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.js +44 -0
- package/dist/server.js.map +1 -0
- package/dist/svg/collect-css.d.ts +14 -0
- package/dist/svg/collect-css.js +53 -0
- package/dist/svg/collect-css.js.map +1 -0
- package/dist/svg/css-vars.d.ts +17 -0
- package/dist/svg/css-vars.js +64 -0
- package/dist/svg/css-vars.js.map +1 -0
- package/dist/svg/header.d.ts +8 -0
- package/dist/svg/header.js +81 -0
- package/dist/svg/header.js.map +1 -0
- package/dist/svg/ids.d.ts +12 -0
- package/dist/svg/ids.js +94 -0
- package/dist/svg/ids.js.map +1 -0
- package/dist/svg/postprocess.d.ts +41 -0
- package/dist/svg/postprocess.js +135 -0
- package/dist/svg/postprocess.js.map +1 -0
- package/dist/tools/register.d.ts +12 -0
- package/dist/tools/register.js +127 -0
- package/dist/tools/register.js.map +1 -0
- package/dist/widget/bundle.js +1777 -0
- package/dist/widget/bundle.meta.json +3 -0
- package/dist/widget/entry.d.ts +34 -0
- package/dist/widget/entry.js +118 -0
- package/dist/widget/entry.js.map +1 -0
- package/dist/widget/interactions.d.ts +14 -0
- package/dist/widget/interactions.js +151 -0
- package/dist/widget/interactions.js.map +1 -0
- package/dist/widget/unovis-slim.d.ts +33 -0
- package/dist/widget/unovis-slim.js +34 -0
- package/dist/widget/unovis-slim.js.map +1 -0
- package/docs/README.md +56 -0
- package/docs/architecture.md +158 -0
- package/docs/chart-spec.md +148 -0
- package/docs/getting-started.md +175 -0
- package/docs/interactive.md +125 -0
- package/docs/output-types.md +170 -0
- package/docs/programmatic.md +234 -0
- package/docs/tools.md +273 -0
- package/docs/troubleshooting.md +140 -0
- package/fonts/README.md +19 -0
- 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 {};
|