wavemaker-dev-mcp 0.1.1 → 1.0.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 +75 -51
- package/dist/index.js +131 -180
- package/dist/index.js.map +1 -1
- package/dist/layout-tools.d.ts +27 -3
- package/dist/layout-tools.d.ts.map +1 -1
- package/dist/layout-tools.js +85 -32
- package/dist/layout-tools.js.map +1 -1
- package/dist/skills/loader.d.ts +36 -0
- package/dist/skills/loader.d.ts.map +1 -0
- package/dist/skills/loader.js +107 -0
- package/dist/skills/loader.js.map +1 -0
- package/package.json +8 -4
- package/skills/components/wm-accordion-pane.md +44 -0
- package/skills/components/wm-accordion.md +43 -0
- package/skills/components/wm-alert-dialog.md +42 -0
- package/skills/components/wm-anchor.md +51 -0
- package/skills/components/wm-audio.md +41 -0
- package/skills/components/wm-button-group.md +36 -0
- package/skills/components/wm-button.md +114 -0
- package/skills/components/wm-calendar.md +54 -0
- package/skills/components/wm-card.md +60 -0
- package/skills/components/wm-carousel.md +43 -0
- package/skills/components/wm-chart.md +104 -0
- package/skills/components/wm-checkbox.md +52 -0
- package/skills/components/wm-checkboxset.md +75 -0
- package/skills/components/wm-chips.md +78 -0
- package/skills/components/wm-composite.md +30 -0
- package/skills/components/wm-confirm-dialog.md +43 -0
- package/skills/components/wm-container.md +100 -0
- package/skills/components/wm-currency.md +69 -0
- package/skills/components/wm-datatable.md +146 -0
- package/skills/components/wm-date-time.md +80 -0
- package/skills/components/wm-date.md +78 -0
- package/skills/components/wm-dialog-body.md +28 -0
- package/skills/components/wm-dialog-container.md +48 -0
- package/skills/components/wm-dialog-content.md +31 -0
- package/skills/components/wm-dialog-footer.md +28 -0
- package/skills/components/wm-dialog-header.md +43 -0
- package/skills/components/wm-dialog.md +40 -0
- package/skills/components/wm-file-upload.md +58 -0
- package/skills/components/wm-footer.md +31 -0
- package/skills/components/wm-form-field.md +81 -0
- package/skills/components/wm-form.md +58 -0
- package/skills/components/wm-grid-column.md +30 -0
- package/skills/components/wm-header.md +31 -0
- package/skills/components/wm-html.md +31 -0
- package/skills/components/wm-icon.md +40 -0
- package/skills/components/wm-iframe-dialog.md +52 -0
- package/skills/components/wm-iframe.md +35 -0
- package/skills/components/wm-label.md +45 -0
- package/skills/components/wm-left-nav.md +35 -0
- package/skills/components/wm-linear-layout-item.md +28 -0
- package/skills/components/wm-linear-layout.md +92 -0
- package/skills/components/wm-list.md +92 -0
- package/skills/components/wm-live-filter.md +50 -0
- package/skills/components/wm-live-form.md +35 -0
- package/skills/components/wm-login-dialog.md +50 -0
- package/skills/components/wm-login.md +39 -0
- package/skills/components/wm-marquee.md +31 -0
- package/skills/components/wm-menu.md +71 -0
- package/skills/components/wm-message.md +41 -0
- package/skills/components/wm-nav-item.md +28 -0
- package/skills/components/wm-nav.md +61 -0
- package/skills/components/wm-number.md +62 -0
- package/skills/components/wm-page-content.md +34 -0
- package/skills/components/wm-page-dialog.md +45 -0
- package/skills/components/wm-page-toast.md +34 -0
- package/skills/components/wm-page.md +34 -0
- package/skills/components/wm-pagination.md +62 -0
- package/skills/components/wm-panel.md +69 -0
- package/skills/components/wm-partial-container.md +32 -0
- package/skills/components/wm-picture.md +46 -0
- package/skills/components/wm-popover.md +51 -0
- package/skills/components/wm-prefab-container.md +29 -0
- package/skills/components/wm-prefab.md +35 -0
- package/skills/components/wm-progress-bar.md +42 -0
- package/skills/components/wm-progress-circle.md +45 -0
- package/skills/components/wm-radioset.md +66 -0
- package/skills/components/wm-rating.md +76 -0
- package/skills/components/wm-rich-text-editor.md +36 -0
- package/skills/components/wm-right-nav.md +32 -0
- package/skills/components/wm-search.md +66 -0
- package/skills/components/wm-select.md +129 -0
- package/skills/components/wm-slider.md +53 -0
- package/skills/components/wm-spinner.md +43 -0
- package/skills/components/wm-tab-pane.md +45 -0
- package/skills/components/wm-table.md +113 -0
- package/skills/components/wm-tabs.md +48 -0
- package/skills/components/wm-text.md +65 -0
- package/skills/components/wm-textarea.md +47 -0
- package/skills/components/wm-tile.md +34 -0
- package/skills/components/wm-time.md +63 -0
- package/skills/components/wm-top-nav.md +31 -0
- package/skills/components/wm-tree.md +41 -0
- package/skills/components/wm-upload.md +42 -0
- package/skills/components/wm-video.md +48 -0
- package/skills/components/wm-wizard.md +59 -0
- package/skills/index.json +1151 -0
- package/skills/tokens/border.md +85 -0
- package/skills/tokens/colors.md +97 -0
- package/skills/tokens/elevation.md +73 -0
- package/skills/tokens/spacing.md +89 -0
- package/skills/tokens/typography.md +88 -0
- package/dist/components.d.ts +0 -17
- package/dist/components.d.ts.map +0 -1
- package/dist/components.js +0 -67
- package/dist/components.js.map +0 -1
- package/dist/paths.d.ts +0 -43
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js +0 -103
- package/dist/paths.js.map +0 -1
- package/dist/search.d.ts +0 -15
- package/dist/search.d.ts.map +0 -1
- package/dist/search.js +0 -130
- package/dist/search.js.map +0 -1
package/dist/layout-tools.d.ts
CHANGED
|
@@ -7,10 +7,13 @@ export interface SuggestComponentInput {
|
|
|
7
7
|
export declare function suggestComponent(input: SuggestComponentInput): {
|
|
8
8
|
component: string;
|
|
9
9
|
reason: string;
|
|
10
|
+
importPath: string;
|
|
10
11
|
};
|
|
11
12
|
export declare function mapSpacing(px: number): {
|
|
12
13
|
token: string;
|
|
13
|
-
|
|
14
|
+
px: number;
|
|
15
|
+
linearLayoutSpacing: number;
|
|
16
|
+
containerGap: number;
|
|
14
17
|
};
|
|
15
18
|
export interface ValidateLayoutInput {
|
|
16
19
|
layout: string;
|
|
@@ -23,10 +26,17 @@ export interface EnforceSpacingInput {
|
|
|
23
26
|
type?: string;
|
|
24
27
|
layout?: string;
|
|
25
28
|
}
|
|
26
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* Returns recommended spacing values for WmLinearLayout and WmContainer.
|
|
31
|
+
* - linearLayoutSpacing: pass as spacing={N} on WmLinearLayout
|
|
32
|
+
* - containerGap: pass as gap={N} on WmContainer (pixels)
|
|
33
|
+
* - padding: use in styles={{ padding }} on any container
|
|
34
|
+
*/
|
|
27
35
|
export declare function enforceSpacing(input: EnforceSpacingInput): {
|
|
28
|
-
|
|
36
|
+
linearLayoutSpacing: number;
|
|
37
|
+
containerGap: number;
|
|
29
38
|
padding: string;
|
|
39
|
+
token: string;
|
|
30
40
|
};
|
|
31
41
|
/** Placeholder until Playwright-based DOM analysis is wired. */
|
|
32
42
|
export declare function analyzeDomMock(): {
|
|
@@ -34,4 +44,18 @@ export declare function analyzeDomMock(): {
|
|
|
34
44
|
spacing: number;
|
|
35
45
|
alignment: string;
|
|
36
46
|
};
|
|
47
|
+
export interface FixLayoutSpacingInput {
|
|
48
|
+
siblingsCount?: number;
|
|
49
|
+
}
|
|
50
|
+
export type FixLayoutSpacingResult = {
|
|
51
|
+
wrapper: "WmLinearLayout";
|
|
52
|
+
itemWrapper: "WmLinearLayoutItem";
|
|
53
|
+
direction: "row";
|
|
54
|
+
spacing: number;
|
|
55
|
+
note: string;
|
|
56
|
+
} | {
|
|
57
|
+
wrapper: null;
|
|
58
|
+
};
|
|
59
|
+
/** Recommend wrapping multiple siblings in WmLinearLayout autolayout. */
|
|
60
|
+
export declare function fixLayoutSpacing(input: FixLayoutSpacingInput): FixLayoutSpacingResult;
|
|
37
61
|
//# sourceMappingURL=layout-tools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-tools.d.ts","sourceRoot":"","sources":["../src/layout-tools.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"layout-tools.d.ts","sourceRoot":"","sources":["../src/layout-tools.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAEnD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAmCxH;AAQD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CAavH;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsB/E;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG;IAC1D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAmBA;AAED,gEAAgE;AAChE,wBAAgB,cAAc,IAAI;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAM9F;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IACE,OAAO,EAAE,gBAAgB,CAAC;IAC1B,WAAW,EAAE,oBAAoB,CAAC;IAClC,SAAS,EAAE,KAAK,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC;AAEtB,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,sBAAsB,CAYrF"}
|
package/dist/layout-tools.js
CHANGED
|
@@ -6,64 +6,103 @@ exports.mapSpacing = mapSpacing;
|
|
|
6
6
|
exports.validateLayout = validateLayout;
|
|
7
7
|
exports.enforceSpacing = enforceSpacing;
|
|
8
8
|
exports.analyzeDomMock = analyzeDomMock;
|
|
9
|
+
exports.fixLayoutSpacing = fixLayoutSpacing;
|
|
9
10
|
function suggestComponent(input) {
|
|
10
11
|
const { layout, repeat, grouped } = input;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
if (layout === "grid") {
|
|
13
|
+
return {
|
|
14
|
+
component: "WmLayoutGrid",
|
|
15
|
+
reason: "12-column grid layout. Pair with WmGridRow and WmGridColumn.",
|
|
16
|
+
importPath: "@wavemaker/react-runtime/components/container/layout-grid",
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (repeat) {
|
|
20
|
+
return {
|
|
21
|
+
component: "WmList",
|
|
22
|
+
reason: "Repeating items from a data source.",
|
|
23
|
+
importPath: "@wavemaker/react-runtime/components/data/list",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (grouped) {
|
|
27
|
+
return {
|
|
28
|
+
component: "WmCard",
|
|
29
|
+
reason: "Grouped content in a card surface.",
|
|
30
|
+
importPath: "@wavemaker/react-runtime/components/data/card",
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// horizontal, vertical, or unspecified → autolayout
|
|
22
34
|
return {
|
|
23
|
-
component,
|
|
24
|
-
reason:
|
|
35
|
+
component: "WmLinearLayout",
|
|
36
|
+
reason: layout === "horizontal"
|
|
37
|
+
? "Row autolayout. Wrap each child in WmLinearLayoutItem. Use spacing={N} for gap between items."
|
|
38
|
+
: layout === "vertical"
|
|
39
|
+
? "Column autolayout. Wrap each child in WmLinearLayoutItem. Use spacing={N} for gap between items."
|
|
40
|
+
: "Default autolayout. Wrap each child in WmLinearLayoutItem. Use spacing={N} for gap between items.",
|
|
41
|
+
importPath: "@wavemaker/react-runtime/components/container/linear-layout",
|
|
25
42
|
};
|
|
26
43
|
}
|
|
27
|
-
|
|
44
|
+
// Spacing token pixel values (4px grid)
|
|
45
|
+
const TOKEN_PX = [4, 8, 16, 24, 32];
|
|
28
46
|
const TOKEN_NAMES = ["xs", "sm", "md", "lg", "xl"];
|
|
47
|
+
// WmLinearLayout spacing values (pt-based, matching foundation CSS classes)
|
|
48
|
+
const LINEAR_LAYOUT_SPACING = [3, 6, 12, 18, 24];
|
|
29
49
|
function mapSpacing(px) {
|
|
30
|
-
let
|
|
31
|
-
for (
|
|
32
|
-
if (Math.abs(
|
|
33
|
-
|
|
50
|
+
let closestIndex = 0;
|
|
51
|
+
for (let i = 1; i < TOKEN_PX.length; i++) {
|
|
52
|
+
if (Math.abs(TOKEN_PX[i] - px) < Math.abs(TOKEN_PX[closestIndex] - px)) {
|
|
53
|
+
closestIndex = i;
|
|
34
54
|
}
|
|
35
55
|
}
|
|
36
|
-
const index = TOKENS.indexOf(closest);
|
|
37
56
|
return {
|
|
38
|
-
token: TOKEN_NAMES[
|
|
39
|
-
|
|
57
|
+
token: TOKEN_NAMES[closestIndex],
|
|
58
|
+
px: TOKEN_PX[closestIndex],
|
|
59
|
+
linearLayoutSpacing: LINEAR_LAYOUT_SPACING[closestIndex],
|
|
60
|
+
containerGap: TOKEN_PX[closestIndex],
|
|
40
61
|
};
|
|
41
62
|
}
|
|
42
63
|
function validateLayout(input) {
|
|
43
64
|
const { layout, code } = input;
|
|
44
65
|
const errors = [];
|
|
45
|
-
if (layout.includes("row")
|
|
46
|
-
|
|
66
|
+
if (layout.includes("row")) {
|
|
67
|
+
const hasRowContainer = code.includes('direction="row"') || // WmContainer / WmLinearLayout
|
|
68
|
+
code.includes("direction='row'");
|
|
69
|
+
if (!hasRowContainer) {
|
|
70
|
+
errors.push('Missing row direction — add direction="row" to WmLinearLayout or WmContainer');
|
|
71
|
+
}
|
|
47
72
|
}
|
|
48
73
|
if (!code.includes("Wm")) {
|
|
49
|
-
errors.push("Non-WaveMaker components used");
|
|
74
|
+
errors.push("Non-WaveMaker components used — replace with Wm* components");
|
|
75
|
+
}
|
|
76
|
+
if (code.includes("WmFlex") || code.includes("WmGrid>") || code.includes("WmGrid ")) {
|
|
77
|
+
errors.push("WmFlex and WmGrid do not exist — use WmLinearLayout (autolayout) or WmContainer for flex, WmLayoutGrid for grid");
|
|
50
78
|
}
|
|
51
79
|
return { errors };
|
|
52
80
|
}
|
|
53
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Returns recommended spacing values for WmLinearLayout and WmContainer.
|
|
83
|
+
* - linearLayoutSpacing: pass as spacing={N} on WmLinearLayout
|
|
84
|
+
* - containerGap: pass as gap={N} on WmContainer (pixels)
|
|
85
|
+
* - padding: use in styles={{ padding }} on any container
|
|
86
|
+
*/
|
|
54
87
|
function enforceSpacing(input) {
|
|
55
88
|
const { type, layout } = input;
|
|
56
|
-
|
|
57
|
-
let
|
|
89
|
+
// Default: md
|
|
90
|
+
let index = 2; // md
|
|
58
91
|
if (type === "card-group")
|
|
59
|
-
|
|
92
|
+
index = 3; // lg
|
|
60
93
|
if (type === "section")
|
|
61
|
-
|
|
94
|
+
index = 4; // xl
|
|
95
|
+
// layout overrides type
|
|
62
96
|
if (layout === "row")
|
|
63
|
-
|
|
97
|
+
index = 3; // lg
|
|
64
98
|
if (layout === "column")
|
|
65
|
-
|
|
66
|
-
return {
|
|
99
|
+
index = 2; // md
|
|
100
|
+
return {
|
|
101
|
+
linearLayoutSpacing: LINEAR_LAYOUT_SPACING[index],
|
|
102
|
+
containerGap: TOKEN_PX[index],
|
|
103
|
+
padding: `var(--wm-space-${index + 1})`,
|
|
104
|
+
token: TOKEN_NAMES[index],
|
|
105
|
+
};
|
|
67
106
|
}
|
|
68
107
|
/** Placeholder until Playwright-based DOM analysis is wired. */
|
|
69
108
|
function analyzeDomMock() {
|
|
@@ -73,4 +112,18 @@ function analyzeDomMock() {
|
|
|
73
112
|
alignment: "left",
|
|
74
113
|
};
|
|
75
114
|
}
|
|
115
|
+
/** Recommend wrapping multiple siblings in WmLinearLayout autolayout. */
|
|
116
|
+
function fixLayoutSpacing(input) {
|
|
117
|
+
const { siblingsCount } = input;
|
|
118
|
+
if (siblingsCount != null && siblingsCount > 1) {
|
|
119
|
+
return {
|
|
120
|
+
wrapper: "WmLinearLayout",
|
|
121
|
+
itemWrapper: "WmLinearLayoutItem",
|
|
122
|
+
direction: "row",
|
|
123
|
+
spacing: 18,
|
|
124
|
+
note: "Wrap each sibling in a WmLinearLayoutItem child. Use flexgrow={1} for equal-width items.",
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return { wrapper: null };
|
|
128
|
+
}
|
|
76
129
|
//# sourceMappingURL=layout-tools.js.map
|
package/dist/layout-tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout-tools.js","sourceRoot":"","sources":["../src/layout-tools.ts"],"names":[],"mappings":";AAAA,mDAAmD;;AAQnD,
|
|
1
|
+
{"version":3,"file":"layout-tools.js","sourceRoot":"","sources":["../src/layout-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export interface SkillEntry {
|
|
2
|
+
name: string;
|
|
3
|
+
file: string;
|
|
4
|
+
category?: string;
|
|
5
|
+
summary: string;
|
|
6
|
+
tags: string[];
|
|
7
|
+
}
|
|
8
|
+
export interface TokenEntry {
|
|
9
|
+
name: string;
|
|
10
|
+
file: string;
|
|
11
|
+
summary: string;
|
|
12
|
+
tags: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface SkillIndex {
|
|
15
|
+
version: string;
|
|
16
|
+
generated: string;
|
|
17
|
+
sources?: {
|
|
18
|
+
runtimeCommit?: string;
|
|
19
|
+
cssCommit?: string;
|
|
20
|
+
};
|
|
21
|
+
components: SkillEntry[];
|
|
22
|
+
tokens: TokenEntry[];
|
|
23
|
+
}
|
|
24
|
+
export declare function loadIndex(): SkillIndex;
|
|
25
|
+
export declare function readSkillFile(relativePath: string): string;
|
|
26
|
+
/** Find a component skill by name (case-insensitive, strips "Wm" prefix for matching). */
|
|
27
|
+
export declare function findComponentSkill(query: string): SkillEntry | undefined;
|
|
28
|
+
/** Find a token skill by name. */
|
|
29
|
+
export declare function findTokenSkill(query: string): TokenEntry | undefined;
|
|
30
|
+
/** Search components and tokens by free-text query. Returns top matches. */
|
|
31
|
+
export declare function searchSkills(query: string, topN?: number): Array<{
|
|
32
|
+
type: "component" | "token";
|
|
33
|
+
entry: SkillEntry | TokenEntry;
|
|
34
|
+
score: number;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QACR,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,MAAM,EAAE,UAAU,EAAE,CAAC;CACtB;AAYD,wBAAgB,SAAS,IAAI,UAAU,CAMtC;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAW1D;AAED,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CASxE;AAED,kCAAkC;AAClC,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAIpE;AAiBD,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB3I"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadIndex = loadIndex;
|
|
7
|
+
exports.readSkillFile = readSkillFile;
|
|
8
|
+
exports.findComponentSkill = findComponentSkill;
|
|
9
|
+
exports.findTokenSkill = findTokenSkill;
|
|
10
|
+
exports.searchSkills = searchSkills;
|
|
11
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
12
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
13
|
+
// Walk up from dist/skills/loader.js to find the skills/ directory at the package root
|
|
14
|
+
function findSkillsRoot() {
|
|
15
|
+
// dist/skills/loader.js → resolve ../../skills → <package-root>/skills
|
|
16
|
+
const candidates = [
|
|
17
|
+
node_path_1.default.resolve(__dirname, "../../skills"),
|
|
18
|
+
node_path_1.default.resolve(__dirname, "../../../skills"),
|
|
19
|
+
];
|
|
20
|
+
for (const candidate of candidates) {
|
|
21
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(candidate, "index.json"))) {
|
|
22
|
+
return candidate;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
throw new Error(`skills/index.json not found. Searched: ${candidates.join(", ")}`);
|
|
26
|
+
}
|
|
27
|
+
let _index = null;
|
|
28
|
+
let _skillsRoot = null;
|
|
29
|
+
function getSkillsRoot() {
|
|
30
|
+
if (!_skillsRoot) {
|
|
31
|
+
_skillsRoot = findSkillsRoot();
|
|
32
|
+
}
|
|
33
|
+
return _skillsRoot;
|
|
34
|
+
}
|
|
35
|
+
function loadIndex() {
|
|
36
|
+
if (_index)
|
|
37
|
+
return _index;
|
|
38
|
+
const root = getSkillsRoot();
|
|
39
|
+
const raw = node_fs_1.default.readFileSync(node_path_1.default.join(root, "index.json"), "utf8");
|
|
40
|
+
_index = JSON.parse(raw);
|
|
41
|
+
return _index;
|
|
42
|
+
}
|
|
43
|
+
function readSkillFile(relativePath) {
|
|
44
|
+
const root = getSkillsRoot();
|
|
45
|
+
const absolute = node_path_1.default.resolve(root, relativePath);
|
|
46
|
+
// Prevent directory traversal
|
|
47
|
+
if (!absolute.startsWith(root + node_path_1.default.sep) && absolute !== root) {
|
|
48
|
+
throw new Error(`Invalid skill path: ${relativePath}`);
|
|
49
|
+
}
|
|
50
|
+
if (!node_fs_1.default.existsSync(absolute)) {
|
|
51
|
+
throw new Error(`Skill file not found: ${relativePath}`);
|
|
52
|
+
}
|
|
53
|
+
return node_fs_1.default.readFileSync(absolute, "utf8");
|
|
54
|
+
}
|
|
55
|
+
/** Find a component skill by name (case-insensitive, strips "Wm" prefix for matching). */
|
|
56
|
+
function findComponentSkill(query) {
|
|
57
|
+
const index = loadIndex();
|
|
58
|
+
const normalised = query.toLowerCase().replace(/^wm/, "");
|
|
59
|
+
return index.components.find((c) => c.name.toLowerCase() === query.toLowerCase() ||
|
|
60
|
+
c.name.toLowerCase().replace(/^wm/, "") === normalised ||
|
|
61
|
+
c.file.toLowerCase().includes(normalised));
|
|
62
|
+
}
|
|
63
|
+
/** Find a token skill by name. */
|
|
64
|
+
function findTokenSkill(query) {
|
|
65
|
+
const index = loadIndex();
|
|
66
|
+
const q = query.toLowerCase();
|
|
67
|
+
return index.tokens.find((t) => t.name.toLowerCase() === q || t.tags.includes(q));
|
|
68
|
+
}
|
|
69
|
+
/** Score a skill entry against a free-text query. Returns 0 if no match. */
|
|
70
|
+
function scoreEntry(entry, terms) {
|
|
71
|
+
const name = ("name" in entry ? entry.name : "").toLowerCase();
|
|
72
|
+
const summary = entry.summary.toLowerCase();
|
|
73
|
+
const tags = entry.tags.map((t) => t.toLowerCase());
|
|
74
|
+
let score = 0;
|
|
75
|
+
for (const term of terms) {
|
|
76
|
+
if (name.includes(term))
|
|
77
|
+
score += 3;
|
|
78
|
+
if (tags.some((t) => t === term))
|
|
79
|
+
score += 2;
|
|
80
|
+
if (tags.some((t) => t.includes(term)))
|
|
81
|
+
score += 1;
|
|
82
|
+
if (summary.includes(term))
|
|
83
|
+
score += 1;
|
|
84
|
+
}
|
|
85
|
+
return score;
|
|
86
|
+
}
|
|
87
|
+
/** Search components and tokens by free-text query. Returns top matches. */
|
|
88
|
+
function searchSkills(query, topN = 5) {
|
|
89
|
+
const index = loadIndex();
|
|
90
|
+
const terms = query
|
|
91
|
+
.toLowerCase()
|
|
92
|
+
.split(/\s+/)
|
|
93
|
+
.filter((t) => t.length > 1);
|
|
94
|
+
const results = [];
|
|
95
|
+
for (const c of index.components) {
|
|
96
|
+
const score = scoreEntry(c, terms);
|
|
97
|
+
if (score > 0)
|
|
98
|
+
results.push({ type: "component", entry: c, score });
|
|
99
|
+
}
|
|
100
|
+
for (const t of index.tokens) {
|
|
101
|
+
const score = scoreEntry(t, terms);
|
|
102
|
+
if (score > 0)
|
|
103
|
+
results.push({ type: "token", entry: t, score });
|
|
104
|
+
}
|
|
105
|
+
return results.sort((a, b) => b.score - a.score).slice(0, topN);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wavemaker-dev-mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for WaveMaker React
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for WaveMaker React — pre-built component and token skill docs for AI-assisted code generation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
7
7
|
"wavemaker",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
24
|
"dist",
|
|
25
|
+
"skills",
|
|
25
26
|
"README.md",
|
|
26
27
|
"LICENSE"
|
|
27
28
|
],
|
|
@@ -29,20 +30,23 @@
|
|
|
29
30
|
"node": ">=18"
|
|
30
31
|
},
|
|
31
32
|
"scripts": {
|
|
32
|
-
"build": "tsc",
|
|
33
|
+
"build": "rm -rf dist && tsc",
|
|
33
34
|
"postbuild": "chmod +x dist/index.js",
|
|
34
35
|
"start": "node dist/index.js",
|
|
35
36
|
"test": "playwright test",
|
|
37
|
+
"generate-skills": "tsx scripts/generate-skills.ts",
|
|
36
38
|
"prepublishOnly": "npm run build"
|
|
37
39
|
},
|
|
38
40
|
"dependencies": {
|
|
39
41
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
40
|
-
"fast-glob": "^3.3.3",
|
|
41
42
|
"zod": "^4.3.6"
|
|
42
43
|
},
|
|
43
44
|
"devDependencies": {
|
|
44
45
|
"@playwright/test": "^1.59.0",
|
|
45
46
|
"@types/node": "^25.5.0",
|
|
47
|
+
"fast-glob": "^3.3.3",
|
|
48
|
+
"ts-morph": "^27.0.2",
|
|
49
|
+
"tsx": "^4.21.0",
|
|
46
50
|
"typescript": "^6.0.2"
|
|
47
51
|
}
|
|
48
52
|
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: WmAccordionPane
|
|
3
|
+
category: container
|
|
4
|
+
import: components/container/accordion/accordion-pane
|
|
5
|
+
tags: [container, accordion, pane, icon, panel, badge]
|
|
6
|
+
summary: Accordion Pane layout container.
|
|
7
|
+
generated: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WmAccordionPane
|
|
11
|
+
|
|
12
|
+
Accordion Pane layout container.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```jsx
|
|
17
|
+
<WmAccordionPane
|
|
18
|
+
name="accordionPane"
|
|
19
|
+
title="My Panel"
|
|
20
|
+
/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Props
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Req | Default | Description |
|
|
26
|
+
|------|------|-----|---------|-------------|
|
|
27
|
+
| title | `string` | No | `"Title"` | Pane header title. |
|
|
28
|
+
| subheading | `string` | No | — | Optional subheading below the title. |
|
|
29
|
+
| iconclass | `string` | No | — | Icon class for the pane header (e.g., "wi wi-home"). |
|
|
30
|
+
| badgevalue | `string \| number` | No | — | Badge value displayed in the header. |
|
|
31
|
+
| badgetype | `AccordionPaneBadgeType` | No | `"default"` | Badge style variant. |
|
|
32
|
+
| isdefaultpane | `boolean` | No | — | Whether this pane is the default expanded pane. |
|
|
33
|
+
| active | `boolean` | Yes | — | Whether the pane is currently expanded. Injected by parent. |
|
|
34
|
+
| smoothscroll | `boolean` | No | `false` | Enable smooth scroll when expanding. |
|
|
35
|
+
| onExpand | `(event?: Event, props?: WmAccordionPaneProps) => void` | No | — | Called when pane expands. Injected by parent. |
|
|
36
|
+
| onCollapse | `(event?: Event, props?: WmAccordionPaneProps) => void` | No | — | Called when pane collapses. Injected by parent. |
|
|
37
|
+
| toggle | `(event?: Event, name?: string) => void` | No | — | Toggle function. Injected by parent. |
|
|
38
|
+
| expand | `(event?: Event, name?: string) => void` | No | — | Expand function. Injected by parent. |
|
|
39
|
+
| collapse | `(event?: Event, name?: string) => void` | No | — | Collapse function. Injected by parent. |
|
|
40
|
+
| onLoad | `(props: WmAccordionPaneProps, onLoadCallback?: () => void) => void` | No | — | Called when pane loads. |
|
|
41
|
+
| render | `(props: WmAccordionPaneProps, onLoadCallback?: () => void) => ReactNode` | No | — | Custom render function for pane content. Receives props and onLoad callback. |
|
|
42
|
+
| tabindex | `number` | No | — | Tab index for keyboard navigation. |
|
|
43
|
+
|
|
44
|
+
*Inherits BaseProps: `name`, `show`, `className`, `width`, `height`, `padding`, `margin`, `onClick`, and more.*
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: WmAccordion
|
|
3
|
+
category: container
|
|
4
|
+
import: components/container/accordion
|
|
5
|
+
tags: [container, accordion, data-binding, input]
|
|
6
|
+
summary: Accordion layout container.
|
|
7
|
+
generated: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WmAccordion
|
|
11
|
+
|
|
12
|
+
Accordion layout container.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```jsx
|
|
17
|
+
<WmAccordion
|
|
18
|
+
name="accordion"
|
|
19
|
+
dataset={items}
|
|
20
|
+
/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Props
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Req | Default | Description |
|
|
26
|
+
|------|------|-----|---------|-------------|
|
|
27
|
+
| closeothers | `boolean` | No | `true` | When true, expanding a pane collapses all other panes. |
|
|
28
|
+
| defaultpaneindex | `number` | No | `0` | Index of the pane to show by default (0-based). |
|
|
29
|
+
| statehandler | `StateHandler` | No | `"none"` | Where to persist accordion state (active pane index). |
|
|
30
|
+
| dataset | `Record<string, unknown>[]` | No | — | Data source for dynamic accordion. Each item renders a pane. |
|
|
31
|
+
| nodatamessage | `string` | No | `"No Data Found"` | Message shown when dataset is empty in dynamic mode. |
|
|
32
|
+
| type | `"static" \| "dynamic"` | No | `"static"` | Accordion type: static (children) or dynamic (dataset). |
|
|
33
|
+
| onChange | `(event: { newPaneIndex: number; oldPaneIndex: number }) => void` | No | — | Called when the active pane changes. |
|
|
34
|
+
| onLoad | `(props: WmAccordionProps, onLoadCallback?: () => void) => void` | No | — | Called when accordion loads. Receives props and optional callback. |
|
|
35
|
+
| render | `( item: Record<string, unknown>, index: number, dataset: Record<string, unkno...` | No | — | Render function for dynamic accordion. Receives item, index, and full dataset. |
|
|
36
|
+
|
|
37
|
+
*Inherits BaseProps: `name`, `show`, `className`, `width`, `height`, `padding`, `margin`, `onClick`, and more.*
|
|
38
|
+
|
|
39
|
+
## CSS Tokens
|
|
40
|
+
|
|
41
|
+
Component-specific CSS variables: `--wm-accordion-*`
|
|
42
|
+
|
|
43
|
+
See foundation-css: `src/tokens/web/components/accordion/accordion.json`
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: WmAlertDialog
|
|
3
|
+
category: dialogs
|
|
4
|
+
import: components/dialogs/alert-dialog
|
|
5
|
+
tags: [dialogs, alert, dialog, icon]
|
|
6
|
+
summary: Alert Dialog — modal dialog.
|
|
7
|
+
generated: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WmAlertDialog
|
|
11
|
+
|
|
12
|
+
Alert Dialog — modal dialog.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```jsx
|
|
17
|
+
<WmAlertDialog
|
|
18
|
+
name="alertDialog"
|
|
19
|
+
title="My Panel"
|
|
20
|
+
/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Props
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Req | Default | Description |
|
|
26
|
+
|------|------|-----|---------|-------------|
|
|
27
|
+
| oktext | `string` | No | — | Text for the OK button. |
|
|
28
|
+
| title | `string` | No | — | Title text for the alert dialog. |
|
|
29
|
+
| alerttype | `string` | No | — | The type of alert (e.g. "error", "info"). |
|
|
30
|
+
| iconclass | `string` | No | — | CSS class for the icon. |
|
|
31
|
+
| text | `string` | No | — | Message text content for the alert. |
|
|
32
|
+
| message | `string \| ReactNode` | No | — | Message content for the alert (can be React node). |
|
|
33
|
+
| onOk | `() => void` | No | — | Callback fired when the OK button is clicked. |
|
|
34
|
+
| onClose | `(event?: SyntheticEvent) => void` | No | — | Callback fired when the dialog requests to be closed. |
|
|
35
|
+
|
|
36
|
+
*Inherits BaseProps: `name`, `show`, `className`, `width`, `height`, `padding`, `margin`, `onClick`, and more.*
|
|
37
|
+
|
|
38
|
+
## CSS Tokens
|
|
39
|
+
|
|
40
|
+
Component-specific CSS variables: `--wm-alert-dialog-*`
|
|
41
|
+
|
|
42
|
+
See foundation-css: `src/tokens/web/components/modal-dialog/modal-dialog.json`
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
component: WmAnchor
|
|
3
|
+
category: basic
|
|
4
|
+
import: components/basic/anchor
|
|
5
|
+
tags: [basic, anchor, caption, icon, badge]
|
|
6
|
+
summary: Anchor display widget.
|
|
7
|
+
generated: true
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# WmAnchor
|
|
11
|
+
|
|
12
|
+
Anchor display widget.
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```jsx
|
|
17
|
+
<WmAnchor
|
|
18
|
+
name="anchor"
|
|
19
|
+
caption="My Anchor"
|
|
20
|
+
/>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Props
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Req | Default | Description |
|
|
26
|
+
|------|------|-----|---------|-------------|
|
|
27
|
+
| caption | `string` | Yes | `"Link"` | The text to be displayed as the anchor caption. |
|
|
28
|
+
| iconclass | `string` | No | — | The CSS class for the icon to be displayed. |
|
|
29
|
+
| encodeurl | `string` | No | — | If true, the hyperlink URL will be encoded. |
|
|
30
|
+
| hyperlink | `string` | No | — | The URL to navigate to when the anchor is clicked. |
|
|
31
|
+
| iconheight | `string` | No | — | The height of the icon. |
|
|
32
|
+
| iconwidth | `string` | No | — | The width of the icon. |
|
|
33
|
+
| iconurl | `string` | No | — | The URL of the icon image. |
|
|
34
|
+
| iconmargin | `string` | No | `"0 4"` | The margin around the icon. |
|
|
35
|
+
| iconposition | `IconPositionType` | No | `"left"` | The position of the icon relative to the caption. |
|
|
36
|
+
| badgevalue | `string \| number` | No | — | The value to be displayed in a badge next to the anchor. |
|
|
37
|
+
| shortcutkey | `string` | No | — | The keyboard shortcut for the anchor. |
|
|
38
|
+
| target | `string` | No | — | The target attribute for the anchor (e.g., '_blank', '_self'). |
|
|
39
|
+
| id | `string` | No | — | — |
|
|
40
|
+
| itemLink | `string` | No | — | Internal prop for linked items in lists. |
|
|
41
|
+
| href | `string` | No | — | Prop to allow overriding the href, though it's typically computed internally. |
|
|
42
|
+
| variant | `"standard"` | No | — | — |
|
|
43
|
+
| action | `string` | No | — | — |
|
|
44
|
+
|
|
45
|
+
*Inherits BaseProps: `name`, `show`, `className`, `width`, `height`, `padding`, `margin`, `onClick`, and more.*
|
|
46
|
+
|
|
47
|
+
## CSS Tokens
|
|
48
|
+
|
|
49
|
+
Component-specific CSS variables: `--wm-anchor-*`
|
|
50
|
+
|
|
51
|
+
See foundation-css: `src/tokens/web/components/anchor/anchor.json`
|