mozaic-mcp-server 2.1.1 → 2.3.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/README.md +15 -7
- package/SKILLS.md +75 -5
- package/bin/install-skills.js +2 -0
- package/data/mozaic.db +0 -0
- package/dist/__tests__/tools.integration.test.js +85 -0
- package/dist/__tests__/tools.integration.test.js.map +1 -1
- package/dist/index.js +115 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/freemarker-parser.d.ts +25 -0
- package/dist/parsers/freemarker-parser.d.ts.map +1 -0
- package/dist/parsers/freemarker-parser.js +299 -0
- package/dist/parsers/freemarker-parser.js.map +1 -0
- package/dist/parsers/web-components-parser.d.ts +3 -0
- package/dist/parsers/web-components-parser.d.ts.map +1 -0
- package/dist/parsers/web-components-parser.js +503 -0
- package/dist/parsers/web-components-parser.js.map +1 -0
- package/dist/tools/generate-freemarker.d.ts +32 -0
- package/dist/tools/generate-freemarker.d.ts.map +1 -0
- package/dist/tools/generate-freemarker.js +146 -0
- package/dist/tools/generate-freemarker.js.map +1 -0
- package/dist/tools/generate-webcomponent.d.ts +38 -0
- package/dist/tools/generate-webcomponent.d.ts.map +1 -0
- package/dist/tools/generate-webcomponent.js +83 -0
- package/dist/tools/generate-webcomponent.js.map +1 -0
- package/dist/tools/get-component-info.d.ts +1 -1
- package/dist/tools/get-component-info.d.ts.map +1 -1
- package/dist/tools/get-component-info.js +9 -1
- package/dist/tools/get-component-info.js.map +1 -1
- package/dist/tools/get-freemarker-info.d.ts +27 -0
- package/dist/tools/get-freemarker-info.d.ts.map +1 -0
- package/dist/tools/get-freemarker-info.js +161 -0
- package/dist/tools/get-freemarker-info.js.map +1 -0
- package/dist/tools/get-webcomponent-info.d.ts +52 -0
- package/dist/tools/get-webcomponent-info.d.ts.map +1 -0
- package/dist/tools/get-webcomponent-info.js +170 -0
- package/dist/tools/get-webcomponent-info.js.map +1 -0
- package/dist/tools/list-freemarker.d.ts +23 -0
- package/dist/tools/list-freemarker.d.ts.map +1 -0
- package/dist/tools/list-freemarker.js +97 -0
- package/dist/tools/list-freemarker.js.map +1 -0
- package/dist/tools/list-webcomponents.d.ts +32 -0
- package/dist/tools/list-webcomponents.d.ts.map +1 -0
- package/dist/tools/list-webcomponents.js +110 -0
- package/dist/tools/list-webcomponents.js.map +1 -0
- package/package.json +1 -1
- package/skills/mozaic-freemarker-builder/scripts/generate-component.sh +27 -0
- package/skills/mozaic-freemarker-builder/scripts/get-component.sh +28 -0
- package/skills/mozaic-freemarker-builder/scripts/list-components.sh +13 -0
- package/skills/mozaic-freemarker-builder/scripts/search-components.sh +14 -0
- package/skills/mozaic-freemarker-builder/skill.md +145 -0
- package/skills/mozaic-webcomponents-builder/scripts/generate-component.sh +67 -0
- package/skills/mozaic-webcomponents-builder/scripts/get-component.sh +105 -0
- package/skills/mozaic-webcomponents-builder/scripts/list-components.sh +42 -0
- package/skills/mozaic-webcomponents-builder/scripts/search-components.sh +34 -0
- package/skills/mozaic-webcomponents-builder/skill.md +292 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Generate Freemarker macro usage code
|
|
4
|
+
*
|
|
5
|
+
* This tool generates ready-to-use Freemarker template code with:
|
|
6
|
+
* - Import statement for the macro
|
|
7
|
+
* - Macro invocation with configuration object
|
|
8
|
+
* - Example configuration based on component props
|
|
9
|
+
*/
|
|
10
|
+
const _GenerateFreemarkerInputSchema = z.object({
|
|
11
|
+
component: z.string().describe("Component name (e.g., 'button', 'field', 'modal')"),
|
|
12
|
+
config: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Configuration object as JSON (e.g., {"color": "primary", "size": "m"})'),
|
|
16
|
+
content: z.string().optional().describe("Nested content for the macro (if applicable)"),
|
|
17
|
+
});
|
|
18
|
+
export function handleGenerateFreemarker(db, input) {
|
|
19
|
+
const componentSlug = input.component.toLowerCase().replace(/\s+/g, "-");
|
|
20
|
+
// Find component
|
|
21
|
+
const component = db
|
|
22
|
+
.prepare(`
|
|
23
|
+
SELECT id, name, slug, description
|
|
24
|
+
FROM components
|
|
25
|
+
WHERE frameworks LIKE '%freemarker%'
|
|
26
|
+
AND (LOWER(slug) LIKE ? OR LOWER(name) LIKE ?)
|
|
27
|
+
LIMIT 1
|
|
28
|
+
`)
|
|
29
|
+
.get(`%${componentSlug}%`, `%${componentSlug}%`);
|
|
30
|
+
if (!component) {
|
|
31
|
+
return {
|
|
32
|
+
content: [
|
|
33
|
+
{
|
|
34
|
+
type: "text",
|
|
35
|
+
text: `Component "${input.component}" not found in Freemarker components.\n\nTry listing available components first with list_freemarker_components.`,
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Get component props for configuration example
|
|
41
|
+
const props = db
|
|
42
|
+
.prepare(`
|
|
43
|
+
SELECT name, type, default_value, required, description
|
|
44
|
+
FROM component_props
|
|
45
|
+
WHERE component_id = ?
|
|
46
|
+
ORDER BY required DESC, name ASC
|
|
47
|
+
`)
|
|
48
|
+
.all(component.id);
|
|
49
|
+
// Generate macro file name (lowercase with underscores)
|
|
50
|
+
const macroFileName = component.slug.replace(/-/g, "");
|
|
51
|
+
// Parse user configuration or use example
|
|
52
|
+
let configObject = {};
|
|
53
|
+
if (input.config) {
|
|
54
|
+
try {
|
|
55
|
+
configObject = JSON.parse(input.config);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// If parsing fails, treat as simple key-value
|
|
59
|
+
configObject = {};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// Generate example configuration from props
|
|
64
|
+
props.slice(0, 3).forEach((prop) => {
|
|
65
|
+
if (prop.default_value) {
|
|
66
|
+
configObject[prop.name] = prop.default_value;
|
|
67
|
+
}
|
|
68
|
+
else if (prop.type === "boolean") {
|
|
69
|
+
configObject[prop.name] = false;
|
|
70
|
+
}
|
|
71
|
+
else if (prop.type === "string") {
|
|
72
|
+
configObject[prop.name] = `example_${prop.name}`;
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Format configuration as Freemarker assignment
|
|
77
|
+
const configLines = [];
|
|
78
|
+
Object.entries(configObject).forEach(([key, value]) => {
|
|
79
|
+
let formattedValue;
|
|
80
|
+
if (typeof value === "string") {
|
|
81
|
+
formattedValue = `"${value}"`;
|
|
82
|
+
}
|
|
83
|
+
else if (typeof value === "boolean") {
|
|
84
|
+
formattedValue = value.toString();
|
|
85
|
+
}
|
|
86
|
+
else if (typeof value === "object" && value !== null) {
|
|
87
|
+
formattedValue = JSON.stringify(value, null, 4).replace(/"(\w+)":/g, '"$1":');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
formattedValue = String(value);
|
|
91
|
+
}
|
|
92
|
+
configLines.push(` "${key}": ${formattedValue}`);
|
|
93
|
+
});
|
|
94
|
+
const configString = configLines.length > 0 ? `\n${configLines.join(",\n")}\n` : "";
|
|
95
|
+
// Generate nested content
|
|
96
|
+
const nestedContent = input.content || "Content goes here";
|
|
97
|
+
// Generate the complete Freemarker template code
|
|
98
|
+
const code = `<#import "mozaic/${macroFileName}.ftl" as ${macroFileName}>
|
|
99
|
+
|
|
100
|
+
<#-- Configuration for ${component.name} -->
|
|
101
|
+
<#assign config${component.name} = {${configString}}>
|
|
102
|
+
|
|
103
|
+
<#-- Render ${component.name} -->
|
|
104
|
+
<@${macroFileName}.${macroFileName} config=config${component.name}>
|
|
105
|
+
${nestedContent}
|
|
106
|
+
</@${macroFileName}.${macroFileName}>`;
|
|
107
|
+
// Build description
|
|
108
|
+
let description = `# Freemarker ${component.name}\n\n`;
|
|
109
|
+
description += `${component.description}\n\n`;
|
|
110
|
+
description += `## Generated Code\n\n\`\`\`ftl\n${code}\n\`\`\`\n\n`;
|
|
111
|
+
if (props.length > 0) {
|
|
112
|
+
description += `## Available Configuration Options\n\n`;
|
|
113
|
+
props.forEach((prop) => {
|
|
114
|
+
const required = prop.required ? " (required)" : "";
|
|
115
|
+
const defaultVal = prop.default_value ? ` [default: ${prop.default_value}]` : "";
|
|
116
|
+
description += `- **${prop.name}** (${prop.type})${required}${defaultVal}\n`;
|
|
117
|
+
if (prop.description) {
|
|
118
|
+
description += ` ${prop.description}\n`;
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
description += `\n`;
|
|
122
|
+
}
|
|
123
|
+
description += `## Usage Notes\n\n`;
|
|
124
|
+
description += `1. Import the macro at the top of your .ftl file\n`;
|
|
125
|
+
description += `2. Define configuration using <#assign config = {...}>\n`;
|
|
126
|
+
description += `3. Call the macro with <@${macroFileName}.${macroFileName} config=config>...</@>\n`;
|
|
127
|
+
description += `4. Nested content goes between opening and closing tags\n\n`;
|
|
128
|
+
description += `## Installation\n\n`;
|
|
129
|
+
description += `Add to your project's pom.xml:\n\n`;
|
|
130
|
+
description += `\`\`\`xml\n`;
|
|
131
|
+
description += `<dependency>\n`;
|
|
132
|
+
description += ` <groupId>com.adeo.mozaic</groupId>\n`;
|
|
133
|
+
description += ` <artifactId>mozaic-freemarker</artifactId>\n`;
|
|
134
|
+
description += ` <version>LATEST_VERSION</version>\n`;
|
|
135
|
+
description += `</dependency>\n`;
|
|
136
|
+
description += `\`\`\`\n`;
|
|
137
|
+
return {
|
|
138
|
+
content: [
|
|
139
|
+
{
|
|
140
|
+
type: "text",
|
|
141
|
+
text: description,
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=generate-freemarker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-freemarker.js","sourceRoot":"","sources":["../../src/tools/generate-freemarker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
export interface GenerateWebComponentInput {
|
|
3
|
+
component: string;
|
|
4
|
+
attributes?: Record<string, string>;
|
|
5
|
+
children?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function handleGenerateWebComponent(db: Database.Database, input: GenerateWebComponentInput): {
|
|
8
|
+
content: Array<{
|
|
9
|
+
type: "text";
|
|
10
|
+
text: string;
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
export declare const generateWebComponentTool: {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
inputSchema: {
|
|
17
|
+
type: "object";
|
|
18
|
+
properties: {
|
|
19
|
+
component: {
|
|
20
|
+
type: string;
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
attributes: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
additionalProperties: {
|
|
27
|
+
type: string;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
children: {
|
|
31
|
+
type: string;
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
required: string[];
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=generate-webcomponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-webcomponent.d.ts","sourceRoot":"","sources":["../../src/tools/generate-webcomponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,0BAA0B,CACxC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,yBAAyB,GAC/B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAwBpD;AAiDD,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;CA2BpC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { getComponentBySlug } from "../db/queries.js";
|
|
2
|
+
export function handleGenerateWebComponent(db, input) {
|
|
3
|
+
const { component, attributes = {}, children = "" } = input;
|
|
4
|
+
// Normalize component name to kebab-case slug
|
|
5
|
+
const slug = component.toLowerCase().replace(/^mozaic-/, "");
|
|
6
|
+
const componentData = getComponentBySlug(db, slug);
|
|
7
|
+
// Get tag name (should be kebab-case)
|
|
8
|
+
const tagName = componentData?.slug || `mozaic-${slug}`;
|
|
9
|
+
const code = generateWebComponent(tagName, attributes, children);
|
|
10
|
+
let output = `// Import web component\n`;
|
|
11
|
+
output += `import '@adeo/mozaic-web-components/${slug}.js';\n\n`;
|
|
12
|
+
output += `// Usage in HTML\n${code}`;
|
|
13
|
+
return {
|
|
14
|
+
content: [
|
|
15
|
+
{
|
|
16
|
+
type: "text",
|
|
17
|
+
text: output,
|
|
18
|
+
},
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function generateWebComponent(tagName, attributes, children) {
|
|
23
|
+
const attributesString = generateAttributesString(attributes);
|
|
24
|
+
if (children) {
|
|
25
|
+
return `<${tagName}${attributesString}>\n ${children}\n</${tagName}>`;
|
|
26
|
+
}
|
|
27
|
+
if (Object.keys(attributes).length === 0) {
|
|
28
|
+
return `<${tagName}></${tagName}>`;
|
|
29
|
+
}
|
|
30
|
+
return `<${tagName}${attributesString}></${tagName}>`;
|
|
31
|
+
}
|
|
32
|
+
function generateAttributesString(attributes) {
|
|
33
|
+
if (Object.keys(attributes).length === 0) {
|
|
34
|
+
return "";
|
|
35
|
+
}
|
|
36
|
+
const parts = [];
|
|
37
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
38
|
+
if (value === undefined || value === null) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Web component attributes are always strings
|
|
42
|
+
// Boolean attributes: if truthy, add attribute without value
|
|
43
|
+
if (value === "true" || value === "") {
|
|
44
|
+
parts.push(key);
|
|
45
|
+
}
|
|
46
|
+
else if (value === "false") {
|
|
47
|
+
// Skip false boolean attributes
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// All other values as string attributes
|
|
52
|
+
parts.push(`${key}="${value}"`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return parts.length > 0 ? "\n " + parts.join("\n ") : "";
|
|
56
|
+
}
|
|
57
|
+
// Tool definition for MCP
|
|
58
|
+
export const generateWebComponentTool = {
|
|
59
|
+
name: "generate_webcomponent",
|
|
60
|
+
description: "Generate Web Component code using Mozaic Design System (@adeo/mozaic-web-components). Returns ready-to-use HTML with import statement.",
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: "object",
|
|
63
|
+
properties: {
|
|
64
|
+
component: {
|
|
65
|
+
type: "string",
|
|
66
|
+
description: "Component type to generate (e.g., button, card, modal). Will be converted to kebab-case tag name (e.g., mozaic-button)",
|
|
67
|
+
},
|
|
68
|
+
attributes: {
|
|
69
|
+
type: "object",
|
|
70
|
+
description: "HTML attributes to apply to the component (all values as strings). Use 'true'/'false' for boolean attributes.",
|
|
71
|
+
additionalProperties: {
|
|
72
|
+
type: "string",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
children: {
|
|
76
|
+
type: "string",
|
|
77
|
+
description: "Inner HTML content / slot content to place inside the component",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
required: ["component"],
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=generate-webcomponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-webcomponent.js","sourceRoot":"","sources":["../../src/tools/generate-webcomponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from "better-sqlite3";
|
|
2
2
|
export interface GetComponentInfoInput {
|
|
3
3
|
component: string;
|
|
4
|
-
framework?: "vue" | "react" | "html";
|
|
4
|
+
framework?: "vue" | "react" | "html" | "webcomponents" | "freemarker";
|
|
5
5
|
}
|
|
6
6
|
export interface ComponentInfoOutput {
|
|
7
7
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-component-info.d.ts","sourceRoot":"","sources":["../../src/tools/get-component-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"get-component-info.d.ts","sourceRoot":"","sources":["../../src/tools/get-component-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,YAAY,CAAC;CACvE;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,qBAAqB,GAC3B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CA6DpD;AA6BD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CAoBhC,CAAC"}
|
|
@@ -62,6 +62,14 @@ function generateBasicExample(componentName, framework) {
|
|
|
62
62
|
return `<${tag}>Content</${tag}>`;
|
|
63
63
|
case "react":
|
|
64
64
|
return `<${tag}>Content</${tag}>`;
|
|
65
|
+
case "webcomponents": {
|
|
66
|
+
const tagName = componentName.replace(/^M/, "").toLowerCase();
|
|
67
|
+
return `<mozaic-${tagName}>Content</mozaic-${tagName}>`;
|
|
68
|
+
}
|
|
69
|
+
case "freemarker": {
|
|
70
|
+
const macroName = componentName.replace(/^M/, "").toLowerCase().replace(/-/g, "");
|
|
71
|
+
return `<#import "mozaic/${macroName}.ftl" as ${macroName}>\n<@${macroName}.${macroName} config={}>Content</@${macroName}.${macroName}>`;
|
|
72
|
+
}
|
|
65
73
|
case "html": {
|
|
66
74
|
const cssClass = `mc-${componentName.replace(/^M/, "").toLowerCase()}`;
|
|
67
75
|
return `<div class="${cssClass}">Content</div>`;
|
|
@@ -83,7 +91,7 @@ export const getComponentInfoTool = {
|
|
|
83
91
|
},
|
|
84
92
|
framework: {
|
|
85
93
|
type: "string",
|
|
86
|
-
enum: ["vue", "react", "html"],
|
|
94
|
+
enum: ["vue", "react", "html", "webcomponents", "freemarker"],
|
|
87
95
|
default: "vue",
|
|
88
96
|
description: "Framework for code examples",
|
|
89
97
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-component-info.js","sourceRoot":"","sources":["../../src/tools/get-component-info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-component-info.js","sourceRoot":"","sources":["../../src/tools/get-component-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
/**
|
|
4
|
+
* Get detailed information about a Freemarker component
|
|
5
|
+
*
|
|
6
|
+
* Returns:
|
|
7
|
+
* - Component metadata (name, description, category)
|
|
8
|
+
* - Configuration options (props)
|
|
9
|
+
* - CSS classes
|
|
10
|
+
* - Usage examples
|
|
11
|
+
*/
|
|
12
|
+
declare const _GetFreemarkerInfoInputSchema: z.ZodObject<{
|
|
13
|
+
component: z.ZodString;
|
|
14
|
+
}, "strip", z.ZodTypeAny, {
|
|
15
|
+
component: string;
|
|
16
|
+
}, {
|
|
17
|
+
component: string;
|
|
18
|
+
}>;
|
|
19
|
+
export type GetFreemarkerInfoInput = z.infer<typeof _GetFreemarkerInfoInputSchema>;
|
|
20
|
+
export declare function handleGetFreemarkerInfo(db: Database.Database, input: GetFreemarkerInfoInput): {
|
|
21
|
+
content: Array<{
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}>;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=get-freemarker-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-freemarker-info.d.ts","sourceRoot":"","sources":["../../src/tools/get-freemarker-info.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;GAQG;AAEH,QAAA,MAAM,6BAA6B;;;;;;EAEjC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEnF,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,sBAAsB,GAC5B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAkLpD"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Get detailed information about a Freemarker component
|
|
4
|
+
*
|
|
5
|
+
* Returns:
|
|
6
|
+
* - Component metadata (name, description, category)
|
|
7
|
+
* - Configuration options (props)
|
|
8
|
+
* - CSS classes
|
|
9
|
+
* - Usage examples
|
|
10
|
+
*/
|
|
11
|
+
const _GetFreemarkerInfoInputSchema = z.object({
|
|
12
|
+
component: z.string().describe("Component name (e.g., 'button', 'field', 'modal')"),
|
|
13
|
+
});
|
|
14
|
+
export function handleGetFreemarkerInfo(db, input) {
|
|
15
|
+
const componentSlug = input.component.toLowerCase().replace(/\s+/g, "-");
|
|
16
|
+
// Find component
|
|
17
|
+
const component = db
|
|
18
|
+
.prepare(`
|
|
19
|
+
SELECT id, name, slug, category, description
|
|
20
|
+
FROM components
|
|
21
|
+
WHERE frameworks LIKE '%freemarker%'
|
|
22
|
+
AND (LOWER(slug) LIKE ? OR LOWER(name) LIKE ?)
|
|
23
|
+
LIMIT 1
|
|
24
|
+
`)
|
|
25
|
+
.get(`%${componentSlug}%`, `%${componentSlug}%`);
|
|
26
|
+
if (!component) {
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: "text",
|
|
31
|
+
text: `Component "${input.component}" not found in Freemarker components.\n\nTry searching with list_freemarker_components.`,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Get configuration options (props)
|
|
37
|
+
const props = db
|
|
38
|
+
.prepare(`
|
|
39
|
+
SELECT name, type, default_value, required, description
|
|
40
|
+
FROM component_props
|
|
41
|
+
WHERE component_id = ?
|
|
42
|
+
ORDER BY required DESC, name ASC
|
|
43
|
+
`)
|
|
44
|
+
.all(component.id);
|
|
45
|
+
// Get CSS classes
|
|
46
|
+
const cssClasses = db
|
|
47
|
+
.prepare(`
|
|
48
|
+
SELECT class_name, description
|
|
49
|
+
FROM component_css_classes
|
|
50
|
+
WHERE component_id = ?
|
|
51
|
+
ORDER BY class_name ASC
|
|
52
|
+
`)
|
|
53
|
+
.all(component.id);
|
|
54
|
+
// Build markdown description
|
|
55
|
+
let output = `# ${component.name} (Freemarker)\n\n`;
|
|
56
|
+
output += `**Category:** ${component.category}\n\n`;
|
|
57
|
+
if (component.description) {
|
|
58
|
+
output += `## Description\n\n${component.description}\n\n`;
|
|
59
|
+
}
|
|
60
|
+
// Configuration options
|
|
61
|
+
output += `## Configuration Options\n\n`;
|
|
62
|
+
if (props.length > 0) {
|
|
63
|
+
output += `| Option | Type | Required | Default | Description |\n`;
|
|
64
|
+
output += `|--------|------|----------|---------|-------------|\n`;
|
|
65
|
+
props.forEach((prop) => {
|
|
66
|
+
const required = prop.required ? "✓" : "";
|
|
67
|
+
const defaultVal = prop.default_value || "-";
|
|
68
|
+
const desc = prop.description || "-";
|
|
69
|
+
output += `| \`${prop.name}\` | ${prop.type} | ${required} | ${defaultVal} | ${desc} |\n`;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
output += `No configuration options documented.\n`;
|
|
74
|
+
}
|
|
75
|
+
output += `\n`;
|
|
76
|
+
// CSS Classes
|
|
77
|
+
if (cssClasses.length > 0) {
|
|
78
|
+
output += `## CSS Classes\n\n`;
|
|
79
|
+
cssClasses.forEach((cls) => {
|
|
80
|
+
output += `- \`${cls.class_name}\``;
|
|
81
|
+
if (cls.description) {
|
|
82
|
+
output += ` - ${cls.description}`;
|
|
83
|
+
}
|
|
84
|
+
output += `\n`;
|
|
85
|
+
});
|
|
86
|
+
output += `\n`;
|
|
87
|
+
}
|
|
88
|
+
// Usage example
|
|
89
|
+
const macroFileName = component.slug.replace(/-/g, "");
|
|
90
|
+
output += `## Usage Example\n\n`;
|
|
91
|
+
output += `\`\`\`ftl\n`;
|
|
92
|
+
output += `<#import "mozaic/${macroFileName}.ftl" as ${macroFileName}>\n\n`;
|
|
93
|
+
output += `<#assign config = {\n`;
|
|
94
|
+
// Add example configuration
|
|
95
|
+
const exampleProps = props.slice(0, 3);
|
|
96
|
+
if (exampleProps.length > 0) {
|
|
97
|
+
exampleProps.forEach((prop, index) => {
|
|
98
|
+
let exampleValue;
|
|
99
|
+
if (prop.default_value) {
|
|
100
|
+
exampleValue = prop.type === "string" ? `"${prop.default_value}"` : prop.default_value;
|
|
101
|
+
}
|
|
102
|
+
else if (prop.type === "boolean") {
|
|
103
|
+
exampleValue = "false";
|
|
104
|
+
}
|
|
105
|
+
else if (prop.type === "string") {
|
|
106
|
+
exampleValue = `"example"`;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
exampleValue = '""';
|
|
110
|
+
}
|
|
111
|
+
const comma = index < exampleProps.length - 1 ? "," : "";
|
|
112
|
+
output += ` "${prop.name}": ${exampleValue}${comma}\n`;
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
output += `}>\n\n`;
|
|
116
|
+
output += `<@${macroFileName}.${macroFileName} config=config>\n`;
|
|
117
|
+
output += ` Content goes here\n`;
|
|
118
|
+
output += `</@${macroFileName}.${macroFileName}>\n`;
|
|
119
|
+
output += `\`\`\`\n\n`;
|
|
120
|
+
// Installation
|
|
121
|
+
output += `## Installation\n\n`;
|
|
122
|
+
output += `Add to your project's \`pom.xml\`:\n\n`;
|
|
123
|
+
output += `\`\`\`xml\n`;
|
|
124
|
+
output += `<dependency>\n`;
|
|
125
|
+
output += ` <groupId>com.adeo.mozaic</groupId>\n`;
|
|
126
|
+
output += ` <artifactId>mozaic-freemarker</artifactId>\n`;
|
|
127
|
+
output += ` <version>LATEST_VERSION</version>\n`;
|
|
128
|
+
output += `</dependency>\n`;
|
|
129
|
+
output += `\`\`\`\n\n`;
|
|
130
|
+
// Documentation link
|
|
131
|
+
output += `## Documentation\n\n`;
|
|
132
|
+
output += `For more information, visit the [Mozaic Freemarker repository](https://github.com/adeo/mozaic-freemarker).\n`;
|
|
133
|
+
// JSON metadata for programmatic access
|
|
134
|
+
const jsonData = {
|
|
135
|
+
name: component.name,
|
|
136
|
+
slug: component.slug,
|
|
137
|
+
category: component.category,
|
|
138
|
+
description: component.description,
|
|
139
|
+
framework: "freemarker",
|
|
140
|
+
props: props.map((p) => ({
|
|
141
|
+
name: p.name,
|
|
142
|
+
type: p.type,
|
|
143
|
+
required: p.required,
|
|
144
|
+
default: p.default_value,
|
|
145
|
+
description: p.description,
|
|
146
|
+
})),
|
|
147
|
+
cssClasses: cssClasses.map((c) => c.class_name),
|
|
148
|
+
};
|
|
149
|
+
output += `\n---\n\n`;
|
|
150
|
+
output += `### Component Data (JSON)\n\n`;
|
|
151
|
+
output += `\`\`\`json\n${JSON.stringify(jsonData, null, 2)}\n\`\`\`\n`;
|
|
152
|
+
return {
|
|
153
|
+
content: [
|
|
154
|
+
{
|
|
155
|
+
type: "text",
|
|
156
|
+
text: output,
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=get-freemarker-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-freemarker-info.js","sourceRoot":"","sources":["../../src/tools/get-freemarker-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
export interface GetWebComponentInfoInput {
|
|
3
|
+
component: string;
|
|
4
|
+
}
|
|
5
|
+
export interface WebComponentInfoOutput {
|
|
6
|
+
name: string;
|
|
7
|
+
tagName: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
attributes: Array<{
|
|
10
|
+
name: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
default?: string;
|
|
13
|
+
required: boolean;
|
|
14
|
+
options?: string[];
|
|
15
|
+
description?: string;
|
|
16
|
+
}>;
|
|
17
|
+
slots: Array<{
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
}>;
|
|
21
|
+
events: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
payload?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
}>;
|
|
26
|
+
cssProperties: string[];
|
|
27
|
+
examples: Array<{
|
|
28
|
+
title?: string;
|
|
29
|
+
code: string;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
export declare function handleGetWebComponentInfo(db: Database.Database, input: GetWebComponentInfoInput): {
|
|
33
|
+
content: Array<{
|
|
34
|
+
type: "text";
|
|
35
|
+
text: string;
|
|
36
|
+
}>;
|
|
37
|
+
};
|
|
38
|
+
export declare const getWebComponentInfoTool: {
|
|
39
|
+
name: string;
|
|
40
|
+
description: string;
|
|
41
|
+
inputSchema: {
|
|
42
|
+
type: "object";
|
|
43
|
+
properties: {
|
|
44
|
+
component: {
|
|
45
|
+
type: string;
|
|
46
|
+
description: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
required: string[];
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=get-webcomponent-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-webcomponent-info.d.ts","sourceRoot":"","sources":["../../src/tools/get-webcomponent-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;CACJ;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,wBAAwB,GAC9B;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CA8JpD;AAQD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;CAenC,CAAC"}
|