@memberjunction/core-actions 2.106.0 → 2.108.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/dist/config.d.ts +112 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +34 -2
- package/dist/config.js.map +1 -1
- package/dist/custom/ai/find-best-agent.action.d.ts +53 -0
- package/dist/custom/ai/find-best-agent.action.d.ts.map +1 -0
- package/dist/custom/ai/find-best-agent.action.js +194 -0
- package/dist/custom/ai/find-best-agent.action.js.map +1 -0
- package/dist/custom/ai/summarize-content.action.d.ts +72 -0
- package/dist/custom/ai/summarize-content.action.d.ts.map +1 -0
- package/dist/custom/ai/summarize-content.action.js +296 -0
- package/dist/custom/ai/summarize-content.action.js.map +1 -0
- package/dist/custom/code-execution/execute-code.action.d.ts +61 -0
- package/dist/custom/code-execution/execute-code.action.d.ts.map +1 -0
- package/dist/custom/code-execution/execute-code.action.js +172 -0
- package/dist/custom/code-execution/execute-code.action.js.map +1 -0
- package/dist/custom/data/csv-parser.action.js +1 -1
- package/dist/custom/data/csv-parser.action.js.map +1 -1
- package/dist/custom/data/execute-research-query.action.d.ts +114 -0
- package/dist/custom/data/execute-research-query.action.d.ts.map +1 -0
- package/dist/custom/data/execute-research-query.action.js +520 -0
- package/dist/custom/data/execute-research-query.action.js.map +1 -0
- package/dist/custom/data/explore-database-schema.action.d.ts +95 -0
- package/dist/custom/data/explore-database-schema.action.d.ts.map +1 -0
- package/dist/custom/data/explore-database-schema.action.js +499 -0
- package/dist/custom/data/explore-database-schema.action.js.map +1 -0
- package/dist/custom/data/get-entity-details.action.d.ts +63 -0
- package/dist/custom/data/get-entity-details.action.d.ts.map +1 -0
- package/dist/custom/data/get-entity-details.action.js +284 -0
- package/dist/custom/data/get-entity-details.action.js.map +1 -0
- package/dist/custom/data/get-entity-list.action.d.ts +57 -0
- package/dist/custom/data/get-entity-list.action.d.ts.map +1 -0
- package/dist/custom/data/get-entity-list.action.js +177 -0
- package/dist/custom/data/get-entity-list.action.js.map +1 -0
- package/dist/custom/files/index.d.ts +2 -0
- package/dist/custom/files/index.d.ts.map +1 -1
- package/dist/custom/files/index.js +5 -1
- package/dist/custom/files/index.js.map +1 -1
- package/dist/custom/files/list-storage-providers.action.d.ts +52 -0
- package/dist/custom/files/list-storage-providers.action.d.ts.map +1 -0
- package/dist/custom/files/list-storage-providers.action.js +175 -0
- package/dist/custom/files/list-storage-providers.action.js.map +1 -0
- package/dist/custom/files/search-storage-files.action.d.ts +61 -0
- package/dist/custom/files/search-storage-files.action.d.ts.map +1 -0
- package/dist/custom/files/search-storage-files.action.js +183 -0
- package/dist/custom/files/search-storage-files.action.js.map +1 -0
- package/dist/custom/visualization/create-svg-chart.action.d.ts +97 -0
- package/dist/custom/visualization/create-svg-chart.action.d.ts.map +1 -0
- package/dist/custom/visualization/create-svg-chart.action.js +290 -0
- package/dist/custom/visualization/create-svg-chart.action.js.map +1 -0
- package/dist/custom/visualization/create-svg-diagram.action.d.ts +151 -0
- package/dist/custom/visualization/create-svg-diagram.action.d.ts.map +1 -0
- package/dist/custom/visualization/create-svg-diagram.action.js +764 -0
- package/dist/custom/visualization/create-svg-diagram.action.js.map +1 -0
- package/dist/custom/visualization/create-svg-infographic.action.d.ts +72 -0
- package/dist/custom/visualization/create-svg-infographic.action.d.ts.map +1 -0
- package/dist/custom/visualization/create-svg-infographic.action.js +343 -0
- package/dist/custom/visualization/create-svg-infographic.action.js.map +1 -0
- package/dist/custom/visualization/create-svg-network.action.d.ts +106 -0
- package/dist/custom/visualization/create-svg-network.action.d.ts.map +1 -0
- package/dist/custom/visualization/create-svg-network.action.js +651 -0
- package/dist/custom/visualization/create-svg-network.action.js.map +1 -0
- package/dist/custom/visualization/create-svg-word-cloud.action.d.ts +94 -0
- package/dist/custom/visualization/create-svg-word-cloud.action.d.ts.map +1 -0
- package/dist/custom/visualization/create-svg-word-cloud.action.js +422 -0
- package/dist/custom/visualization/create-svg-word-cloud.action.js.map +1 -0
- package/dist/custom/visualization/shared/svg-theming.d.ts +91 -0
- package/dist/custom/visualization/shared/svg-theming.d.ts.map +1 -0
- package/dist/custom/visualization/shared/svg-theming.js +235 -0
- package/dist/custom/visualization/shared/svg-theming.js.map +1 -0
- package/dist/custom/visualization/shared/svg-types.d.ts +338 -0
- package/dist/custom/visualization/shared/svg-types.d.ts.map +1 -0
- package/dist/custom/visualization/shared/svg-types.js +11 -0
- package/dist/custom/visualization/shared/svg-types.js.map +1 -0
- package/dist/custom/visualization/shared/svg-utils.d.ts +129 -0
- package/dist/custom/visualization/shared/svg-utils.d.ts.map +1 -0
- package/dist/custom/visualization/shared/svg-utils.js +287 -0
- package/dist/custom/visualization/shared/svg-utils.js.map +1 -0
- package/dist/custom/web/google-custom-search.action.d.ts +60 -0
- package/dist/custom/web/google-custom-search.action.d.ts.map +1 -0
- package/dist/custom/web/google-custom-search.action.js +378 -0
- package/dist/custom/web/google-custom-search.action.js.map +1 -0
- package/dist/custom/web/web-page-content.action.d.ts +24 -0
- package/dist/custom/web/web-page-content.action.d.ts.map +1 -1
- package/dist/custom/web/web-page-content.action.js +90 -9
- package/dist/custom/web/web-page-content.action.js.map +1 -1
- package/dist/generated/action_subclasses.d.ts +51 -3
- package/dist/generated/action_subclasses.d.ts.map +1 -1
- package/dist/generated/action_subclasses.js +174 -90
- package/dist/generated/action_subclasses.js.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -1
- package/package.json +30 -11
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
25
|
+
if (mod && mod.__esModule) return mod;
|
|
26
|
+
var result = {};
|
|
27
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
28
|
+
__setModuleDefault(result, mod);
|
|
29
|
+
return result;
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.LoadCreateSVGChartAction = exports.CreateSVGChartAction = void 0;
|
|
33
|
+
const actions_1 = require("@memberjunction/actions");
|
|
34
|
+
const global_1 = require("@memberjunction/global");
|
|
35
|
+
const vega = __importStar(require("vega"));
|
|
36
|
+
const vegaLite = __importStar(require("vega-lite"));
|
|
37
|
+
/**
|
|
38
|
+
* Action that generates SVG charts from data using Vega-Lite.
|
|
39
|
+
* Supports various chart types including bar, line, pie, scatter, area, and more.
|
|
40
|
+
*
|
|
41
|
+
* This action is designed for AI agents and workflows to create publication-quality
|
|
42
|
+
* visualizations from structured data without writing visualization code.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* // Simple bar chart
|
|
47
|
+
* await runAction({
|
|
48
|
+
* ActionName: 'Create SVG Chart',
|
|
49
|
+
* Params: [
|
|
50
|
+
* { Name: 'ChartType', Value: 'bar' },
|
|
51
|
+
* { Name: 'Data', Value: JSON.stringify([
|
|
52
|
+
* { category: 'A', value: 28 },
|
|
53
|
+
* { category: 'B', value: 55 },
|
|
54
|
+
* { category: 'C', value: 43 }
|
|
55
|
+
* ]) },
|
|
56
|
+
* { Name: 'XField', Value: 'category' },
|
|
57
|
+
* { Name: 'YField', Value: 'value' },
|
|
58
|
+
* { Name: 'Title', Value: 'Sample Bar Chart' }
|
|
59
|
+
* ]
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // Pie chart
|
|
63
|
+
* await runAction({
|
|
64
|
+
* ActionName: 'Create SVG Chart',
|
|
65
|
+
* Params: [
|
|
66
|
+
* { Name: 'ChartType', Value: 'pie' },
|
|
67
|
+
* { Name: 'Data', Value: JSON.stringify([
|
|
68
|
+
* { category: 'LLM', count: 67 },
|
|
69
|
+
* { category: 'Embeddings', count: 10 }
|
|
70
|
+
* ]) },
|
|
71
|
+
* { Name: 'ThetaField', Value: 'count' },
|
|
72
|
+
* { Name: 'ColorField', Value: 'category' },
|
|
73
|
+
* { Name: 'Width', Value: '400' },
|
|
74
|
+
* { Name: 'Height', Value: '300' }
|
|
75
|
+
* ]
|
|
76
|
+
* });
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
let CreateSVGChartAction = class CreateSVGChartAction extends actions_1.BaseAction {
|
|
80
|
+
/**
|
|
81
|
+
* Generates an SVG chart from the provided data and configuration
|
|
82
|
+
*
|
|
83
|
+
* @param params - The action parameters containing:
|
|
84
|
+
* - ChartType: Type of chart (bar, line, pie, scatter, area, etc.)
|
|
85
|
+
* - Data: JSON array of data objects
|
|
86
|
+
* - XField: Field name for X axis (for bar, line, scatter, area)
|
|
87
|
+
* - YField: Field name for Y axis (for bar, line, scatter, area)
|
|
88
|
+
* - ThetaField: Field name for pie slice size (for pie charts)
|
|
89
|
+
* - ColorField: Field name for color encoding (optional)
|
|
90
|
+
* - Title: Chart title (optional)
|
|
91
|
+
* - Width: Chart width in pixels (optional, default: 400)
|
|
92
|
+
* - Height: Chart height in pixels (optional, default: 300)
|
|
93
|
+
* - VegaLiteSpec: Full Vega-Lite JSON spec (optional, overrides other params)
|
|
94
|
+
*
|
|
95
|
+
* @returns A promise resolving to an ActionResultSimple with:
|
|
96
|
+
* - Success: true if chart was generated successfully
|
|
97
|
+
* - ResultCode: "SUCCESS" or error code
|
|
98
|
+
* - Message: The SVG string or error message
|
|
99
|
+
*/
|
|
100
|
+
async InternalRunAction(params) {
|
|
101
|
+
try {
|
|
102
|
+
// Check if a full Vega-Lite spec was provided
|
|
103
|
+
const specParam = this.getParamValue(params, 'VegaLiteSpec');
|
|
104
|
+
let vlSpec;
|
|
105
|
+
if (specParam) {
|
|
106
|
+
// Use the provided spec directly
|
|
107
|
+
vlSpec = this.parseJSON(specParam, 'VegaLiteSpec');
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Build spec from individual parameters
|
|
111
|
+
const chartType = this.getParamValue(params, 'ChartType');
|
|
112
|
+
const dataParam = this.getParamValue(params, 'Data');
|
|
113
|
+
if (!chartType) {
|
|
114
|
+
return {
|
|
115
|
+
Success: false,
|
|
116
|
+
Message: "ChartType parameter is required (or provide VegaLiteSpec)",
|
|
117
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
if (!dataParam) {
|
|
121
|
+
return {
|
|
122
|
+
Success: false,
|
|
123
|
+
Message: "Data parameter is required (or provide VegaLiteSpec)",
|
|
124
|
+
ResultCode: "MISSING_PARAMETERS"
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const data = this.parseJSON(dataParam, 'Data');
|
|
128
|
+
if (!Array.isArray(data)) {
|
|
129
|
+
return {
|
|
130
|
+
Success: false,
|
|
131
|
+
Message: "Data parameter must be a JSON array",
|
|
132
|
+
ResultCode: "INVALID_DATA"
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
// Build the Vega-Lite spec
|
|
136
|
+
vlSpec = this.buildVegaLiteSpec(params, chartType.toLowerCase(), data);
|
|
137
|
+
}
|
|
138
|
+
// Compile Vega-Lite to Vega
|
|
139
|
+
const vegaSpec = vegaLite.compile(vlSpec).spec;
|
|
140
|
+
// Create a headless view and render to SVG
|
|
141
|
+
const view = new vega.View(vega.parse(vegaSpec), { renderer: 'none' });
|
|
142
|
+
const svg = await view.toSVG();
|
|
143
|
+
return {
|
|
144
|
+
Success: true,
|
|
145
|
+
ResultCode: "SUCCESS",
|
|
146
|
+
Message: svg
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
return {
|
|
151
|
+
Success: false,
|
|
152
|
+
Message: `Failed to generate chart: ${error instanceof Error ? error.message : String(error)}`,
|
|
153
|
+
ResultCode: "CHART_GENERATION_FAILED"
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Builds a Vega-Lite specification from action parameters
|
|
159
|
+
*/
|
|
160
|
+
buildVegaLiteSpec(params, chartType, data) {
|
|
161
|
+
const title = this.getParamValue(params, 'Title');
|
|
162
|
+
const width = parseInt(this.getParamValue(params, 'Width') || '400');
|
|
163
|
+
const height = parseInt(this.getParamValue(params, 'Height') || '300');
|
|
164
|
+
const baseSpec = {
|
|
165
|
+
$schema: "https://vega.github.io/schema/vega-lite/v5.json",
|
|
166
|
+
width,
|
|
167
|
+
height,
|
|
168
|
+
data: { values: data }
|
|
169
|
+
};
|
|
170
|
+
if (title) {
|
|
171
|
+
baseSpec.title = title;
|
|
172
|
+
}
|
|
173
|
+
// Build encoding based on chart type
|
|
174
|
+
switch (chartType) {
|
|
175
|
+
case 'bar':
|
|
176
|
+
case 'line':
|
|
177
|
+
case 'area':
|
|
178
|
+
case 'point':
|
|
179
|
+
case 'scatter':
|
|
180
|
+
baseSpec.mark = chartType === 'scatter' ? 'point' : chartType;
|
|
181
|
+
baseSpec.encoding = this.buildCartesianEncoding(params);
|
|
182
|
+
break;
|
|
183
|
+
case 'pie':
|
|
184
|
+
case 'arc':
|
|
185
|
+
baseSpec.mark = 'arc';
|
|
186
|
+
baseSpec.encoding = this.buildPieEncoding(params);
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
throw new Error(`Unsupported chart type: ${chartType}. Supported types: bar, line, area, point, scatter, pie`);
|
|
190
|
+
}
|
|
191
|
+
return baseSpec;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Builds encoding for Cartesian charts (bar, line, scatter, area)
|
|
195
|
+
*/
|
|
196
|
+
buildCartesianEncoding(params) {
|
|
197
|
+
const xField = this.getParamValue(params, 'XField');
|
|
198
|
+
const yField = this.getParamValue(params, 'YField');
|
|
199
|
+
const colorField = this.getParamValue(params, 'ColorField');
|
|
200
|
+
if (!xField || !yField) {
|
|
201
|
+
throw new Error("XField and YField are required for this chart type");
|
|
202
|
+
}
|
|
203
|
+
const encoding = {
|
|
204
|
+
x: { field: xField, type: this.inferFieldType(xField) },
|
|
205
|
+
y: { field: yField, type: 'quantitative' }
|
|
206
|
+
};
|
|
207
|
+
if (colorField) {
|
|
208
|
+
encoding.color = { field: colorField, type: 'nominal' };
|
|
209
|
+
}
|
|
210
|
+
return encoding;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Builds encoding for pie/arc charts
|
|
214
|
+
*/
|
|
215
|
+
buildPieEncoding(params) {
|
|
216
|
+
const thetaField = this.getParamValue(params, 'ThetaField');
|
|
217
|
+
const colorField = this.getParamValue(params, 'ColorField');
|
|
218
|
+
if (!thetaField) {
|
|
219
|
+
throw new Error("ThetaField is required for pie charts");
|
|
220
|
+
}
|
|
221
|
+
const encoding = {
|
|
222
|
+
theta: { field: thetaField, type: 'quantitative' }
|
|
223
|
+
};
|
|
224
|
+
if (colorField) {
|
|
225
|
+
encoding.color = { field: colorField, type: 'nominal' };
|
|
226
|
+
}
|
|
227
|
+
return encoding;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Infers the Vega-Lite field type from field name
|
|
231
|
+
*/
|
|
232
|
+
inferFieldType(fieldName) {
|
|
233
|
+
const lowerName = fieldName.toLowerCase();
|
|
234
|
+
// Temporal hints
|
|
235
|
+
if (lowerName.includes('date') || lowerName.includes('time') || lowerName.includes('year') || lowerName.includes('month')) {
|
|
236
|
+
return 'temporal';
|
|
237
|
+
}
|
|
238
|
+
// Quantitative hints
|
|
239
|
+
if (lowerName.includes('count') || lowerName.includes('value') || lowerName.includes('amount') || lowerName.includes('total')) {
|
|
240
|
+
return 'quantitative';
|
|
241
|
+
}
|
|
242
|
+
// Default to nominal for categorical data
|
|
243
|
+
return 'nominal';
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Helper to safely parse JSON that might already be an object
|
|
247
|
+
*/
|
|
248
|
+
parseJSON(value, paramName) {
|
|
249
|
+
// If it's already an object/array, return it
|
|
250
|
+
if (typeof value === 'object' && value !== null) {
|
|
251
|
+
return value;
|
|
252
|
+
}
|
|
253
|
+
// If it's a string, parse it
|
|
254
|
+
if (typeof value === 'string') {
|
|
255
|
+
try {
|
|
256
|
+
return JSON.parse(value);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
throw new Error(`Parameter '${paramName}' contains invalid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// For other types, error
|
|
263
|
+
throw new Error(`Parameter '${paramName}' must be a JSON string or object. Received ${typeof value}.`);
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Helper to get parameter value by name (case-insensitive)
|
|
267
|
+
*/
|
|
268
|
+
getParamValue(params, paramName) {
|
|
269
|
+
const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
|
|
270
|
+
if (param?.Value && typeof param.Value === 'string') {
|
|
271
|
+
return param?.Value?.trim() || null;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
return param?.Value || null;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
exports.CreateSVGChartAction = CreateSVGChartAction;
|
|
279
|
+
exports.CreateSVGChartAction = CreateSVGChartAction = __decorate([
|
|
280
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "__CreateSVGChart")
|
|
281
|
+
], CreateSVGChartAction);
|
|
282
|
+
/**
|
|
283
|
+
* Loader function to ensure the CreateSVGChartAction class is included in the bundle.
|
|
284
|
+
* This prevents tree-shaking from removing the class during the build process.
|
|
285
|
+
*/
|
|
286
|
+
function LoadCreateSVGChartAction() {
|
|
287
|
+
// this function is a stub that is used to force the bundler to include the above class in the final bundle and not tree shake them out
|
|
288
|
+
}
|
|
289
|
+
exports.LoadCreateSVGChartAction = LoadCreateSVGChartAction;
|
|
290
|
+
//# sourceMappingURL=create-svg-chart.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-svg-chart.action.js","sourceRoot":"","sources":["../../../src/custom/visualization/create-svg-chart.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { RunActionParams } from '@memberjunction/actions-base';
|
|
2
|
+
import { BaseAction } from '@memberjunction/actions';
|
|
3
|
+
import { SVGActionResult } from './shared/svg-types';
|
|
4
|
+
/**
|
|
5
|
+
* Action that generates SVG diagrams including flowcharts, org charts, and ER diagrams.
|
|
6
|
+
*
|
|
7
|
+
* This action provides server-side SVG generation for structured diagrams, designed for
|
|
8
|
+
* AI agents and workflows to create publication-quality visualizations from structured data.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // Flowchart example
|
|
13
|
+
* await runAction({
|
|
14
|
+
* ActionName: 'Create SVG Diagram',
|
|
15
|
+
* Params: [
|
|
16
|
+
* { Name: 'DiagramType', Value: 'flow' },
|
|
17
|
+
* { Name: 'Nodes', Value: JSON.stringify([
|
|
18
|
+
* { id: '1', kind: 'start', label: 'Start' },
|
|
19
|
+
* { id: '2', kind: 'process', label: 'Process Data' },
|
|
20
|
+
* { id: '3', kind: 'end', label: 'End' }
|
|
21
|
+
* ]) },
|
|
22
|
+
* { Name: 'Edges', Value: JSON.stringify([
|
|
23
|
+
* { from: '1', to: '2', label: 'Begin' },
|
|
24
|
+
* { from: '2', to: '3' }
|
|
25
|
+
* ]) },
|
|
26
|
+
* { Name: 'Direction', Value: 'TB' },
|
|
27
|
+
* { Name: 'Width', Value: '800' },
|
|
28
|
+
* { Name: 'Height', Value: '600' }
|
|
29
|
+
* ]
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Org chart example
|
|
33
|
+
* await runAction({
|
|
34
|
+
* ActionName: 'Create SVG Diagram',
|
|
35
|
+
* Params: [
|
|
36
|
+
* { Name: 'DiagramType', Value: 'org' },
|
|
37
|
+
* { Name: 'Nodes', Value: JSON.stringify({
|
|
38
|
+
* id: '1',
|
|
39
|
+
* label: 'CEO',
|
|
40
|
+
* role: 'Chief Executive Officer',
|
|
41
|
+
* children: [
|
|
42
|
+
* { id: '2', label: 'CTO', role: 'Technology' },
|
|
43
|
+
* { id: '3', label: 'CFO', role: 'Finance' }
|
|
44
|
+
* ]
|
|
45
|
+
* }) }
|
|
46
|
+
* ]
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class CreateSVGDiagramAction extends BaseAction {
|
|
51
|
+
/**
|
|
52
|
+
* Generates an SVG diagram from the provided data and configuration
|
|
53
|
+
*
|
|
54
|
+
* @param params - The action parameters containing:
|
|
55
|
+
* - DiagramType: Type of diagram ('flow' | 'org' | 'er')
|
|
56
|
+
* - Nodes: JSON array or object of nodes
|
|
57
|
+
* - Edges: JSON array of edges (for flow and ER diagrams)
|
|
58
|
+
* - Direction: Layout direction ('TB' | 'LR' | 'RL' | 'BT') for flow diagrams
|
|
59
|
+
* - Width: Diagram width in pixels (optional, default: 800)
|
|
60
|
+
* - Height: Diagram height in pixels (optional, default: 600)
|
|
61
|
+
* - Title: Diagram title (optional)
|
|
62
|
+
* - Palette: Color palette ('mjDefault' | 'gray' | 'pastel' | 'highContrast')
|
|
63
|
+
* - Seed: Random seed for deterministic layouts (optional)
|
|
64
|
+
*
|
|
65
|
+
* @returns A promise resolving to an SVGActionResult with:
|
|
66
|
+
* - Success: true if diagram was generated successfully
|
|
67
|
+
* - ResultCode: "SUCCESS" or error code
|
|
68
|
+
* - Message: The SVG string or error message
|
|
69
|
+
* - svg: The SVG XML string
|
|
70
|
+
* - width: Diagram width in pixels
|
|
71
|
+
* - height: Diagram height in pixels
|
|
72
|
+
*/
|
|
73
|
+
protected InternalRunAction(params: RunActionParams): Promise<SVGActionResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Renders a flowchart using dagre layout
|
|
76
|
+
*/
|
|
77
|
+
private renderFlowDiagram;
|
|
78
|
+
/**
|
|
79
|
+
* Gets dimensions for flow node based on kind
|
|
80
|
+
*/
|
|
81
|
+
private getNodeDimensions;
|
|
82
|
+
/**
|
|
83
|
+
* Renders a single flow node
|
|
84
|
+
*/
|
|
85
|
+
private renderFlowNode;
|
|
86
|
+
/**
|
|
87
|
+
* Gets color index for node kind
|
|
88
|
+
*/
|
|
89
|
+
private getNodeColorIndex;
|
|
90
|
+
/**
|
|
91
|
+
* Renders an ellipse shape
|
|
92
|
+
*/
|
|
93
|
+
private renderEllipse;
|
|
94
|
+
/**
|
|
95
|
+
* Renders a diamond shape
|
|
96
|
+
*/
|
|
97
|
+
private renderDiamond;
|
|
98
|
+
/**
|
|
99
|
+
* Renders a rounded rectangle
|
|
100
|
+
*/
|
|
101
|
+
private renderRoundedRect;
|
|
102
|
+
/**
|
|
103
|
+
* Renders a flow edge
|
|
104
|
+
*/
|
|
105
|
+
private renderFlowEdge;
|
|
106
|
+
/**
|
|
107
|
+
* Renders an org chart using d3-hierarchy
|
|
108
|
+
*/
|
|
109
|
+
private renderOrgChart;
|
|
110
|
+
/**
|
|
111
|
+
* Renders an org chart link
|
|
112
|
+
*/
|
|
113
|
+
private renderOrgLink;
|
|
114
|
+
/**
|
|
115
|
+
* Renders an org chart node
|
|
116
|
+
*/
|
|
117
|
+
private renderOrgNode;
|
|
118
|
+
/**
|
|
119
|
+
* Renders an ER diagram using dagre layout
|
|
120
|
+
*/
|
|
121
|
+
private renderERDiagram;
|
|
122
|
+
/**
|
|
123
|
+
* Renders an ER table
|
|
124
|
+
*/
|
|
125
|
+
private renderERTable;
|
|
126
|
+
/**
|
|
127
|
+
* Renders an ER relation
|
|
128
|
+
*/
|
|
129
|
+
private renderERRelation;
|
|
130
|
+
/**
|
|
131
|
+
* Adds a title to the SVG
|
|
132
|
+
*/
|
|
133
|
+
private addTitle;
|
|
134
|
+
/**
|
|
135
|
+
* Helper to safely parse JSON that might already be an object
|
|
136
|
+
*/
|
|
137
|
+
private parseJSON;
|
|
138
|
+
/**
|
|
139
|
+
* Helper to ensure a parameter value is a string, with type conversion and validation
|
|
140
|
+
*/
|
|
141
|
+
private ensureString;
|
|
142
|
+
/**
|
|
143
|
+
* Helper to get parameter value by name (case-insensitive)
|
|
144
|
+
*/
|
|
145
|
+
private getParamValue;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Loader function to ensure the CreateSVGDiagramAction class is included in the bundle.
|
|
149
|
+
*/
|
|
150
|
+
export declare function LoadCreateSVGDiagramAction(): void;
|
|
151
|
+
//# sourceMappingURL=create-svg-diagram.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-svg-diagram.action.d.ts","sourceRoot":"","sources":["../../../src/custom/visualization/create-svg-diagram.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKrD,OAAO,EAOH,eAAe,EAIlB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,sBAAuB,SAAQ,UAAU;IAClD;;;;;;;;;;;;;;;;;;;;;OAqBG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAsEpF;;OAEG;YACW,iBAAiB;IA0F/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgDtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuCtB;;OAEG;YACW,cAAc;IA+D5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAwBrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAuErB;;OAEG;YACW,eAAe;IA2F7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgFrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmCxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAahB;;OAEG;IACH,OAAO,CAAC,SAAS;IAuBjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,aAAa;CAQxB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,SAEzC"}
|