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.
Files changed (55) hide show
  1. package/README.md +15 -7
  2. package/SKILLS.md +75 -5
  3. package/bin/install-skills.js +2 -0
  4. package/data/mozaic.db +0 -0
  5. package/dist/__tests__/tools.integration.test.js +85 -0
  6. package/dist/__tests__/tools.integration.test.js.map +1 -1
  7. package/dist/index.js +115 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/parsers/freemarker-parser.d.ts +25 -0
  10. package/dist/parsers/freemarker-parser.d.ts.map +1 -0
  11. package/dist/parsers/freemarker-parser.js +299 -0
  12. package/dist/parsers/freemarker-parser.js.map +1 -0
  13. package/dist/parsers/web-components-parser.d.ts +3 -0
  14. package/dist/parsers/web-components-parser.d.ts.map +1 -0
  15. package/dist/parsers/web-components-parser.js +503 -0
  16. package/dist/parsers/web-components-parser.js.map +1 -0
  17. package/dist/tools/generate-freemarker.d.ts +32 -0
  18. package/dist/tools/generate-freemarker.d.ts.map +1 -0
  19. package/dist/tools/generate-freemarker.js +146 -0
  20. package/dist/tools/generate-freemarker.js.map +1 -0
  21. package/dist/tools/generate-webcomponent.d.ts +38 -0
  22. package/dist/tools/generate-webcomponent.d.ts.map +1 -0
  23. package/dist/tools/generate-webcomponent.js +83 -0
  24. package/dist/tools/generate-webcomponent.js.map +1 -0
  25. package/dist/tools/get-component-info.d.ts +1 -1
  26. package/dist/tools/get-component-info.d.ts.map +1 -1
  27. package/dist/tools/get-component-info.js +9 -1
  28. package/dist/tools/get-component-info.js.map +1 -1
  29. package/dist/tools/get-freemarker-info.d.ts +27 -0
  30. package/dist/tools/get-freemarker-info.d.ts.map +1 -0
  31. package/dist/tools/get-freemarker-info.js +161 -0
  32. package/dist/tools/get-freemarker-info.js.map +1 -0
  33. package/dist/tools/get-webcomponent-info.d.ts +52 -0
  34. package/dist/tools/get-webcomponent-info.d.ts.map +1 -0
  35. package/dist/tools/get-webcomponent-info.js +170 -0
  36. package/dist/tools/get-webcomponent-info.js.map +1 -0
  37. package/dist/tools/list-freemarker.d.ts +23 -0
  38. package/dist/tools/list-freemarker.d.ts.map +1 -0
  39. package/dist/tools/list-freemarker.js +97 -0
  40. package/dist/tools/list-freemarker.js.map +1 -0
  41. package/dist/tools/list-webcomponents.d.ts +32 -0
  42. package/dist/tools/list-webcomponents.d.ts.map +1 -0
  43. package/dist/tools/list-webcomponents.js +110 -0
  44. package/dist/tools/list-webcomponents.js.map +1 -0
  45. package/package.json +1 -1
  46. package/skills/mozaic-freemarker-builder/scripts/generate-component.sh +27 -0
  47. package/skills/mozaic-freemarker-builder/scripts/get-component.sh +28 -0
  48. package/skills/mozaic-freemarker-builder/scripts/list-components.sh +13 -0
  49. package/skills/mozaic-freemarker-builder/scripts/search-components.sh +14 -0
  50. package/skills/mozaic-freemarker-builder/skill.md +145 -0
  51. package/skills/mozaic-webcomponents-builder/scripts/generate-component.sh +67 -0
  52. package/skills/mozaic-webcomponents-builder/scripts/get-component.sh +105 -0
  53. package/skills/mozaic-webcomponents-builder/scripts/list-components.sh +42 -0
  54. package/skills/mozaic-webcomponents-builder/scripts/search-components.sh +34 -0
  55. 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;CACtC;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;AAqBD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;CAoBhC,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"}