Add Zod v4 and ComponentMeta type

This commit is contained in:
Mats Bosson 2026-03-29 20:32:18 +07:00
parent 8dc5ab32ce
commit f197c58296
4 changed files with 181 additions and 35 deletions

View File

@ -39,39 +39,171 @@
"import": "./dist/utilities/visually-hidden/index.js", "import": "./dist/utilities/visually-hidden/index.js",
"require": "./dist/utilities/visually-hidden/index.cjs" "require": "./dist/utilities/visually-hidden/index.cjs"
}, },
"./separator": { "solid": "./src/components/separator/index.ts", "import": "./dist/components/separator/index.js", "require": "./dist/components/separator/index.cjs" }, "./separator": {
"./toggle": { "solid": "./src/components/toggle/index.ts", "import": "./dist/components/toggle/index.js", "require": "./dist/components/toggle/index.cjs" }, "solid": "./src/components/separator/index.ts",
"./switch": { "solid": "./src/components/switch/index.ts", "import": "./dist/components/switch/index.js", "require": "./dist/components/switch/index.cjs" }, "import": "./dist/components/separator/index.js",
"./checkbox": { "solid": "./src/components/checkbox/index.ts", "import": "./dist/components/checkbox/index.js", "require": "./dist/components/checkbox/index.cjs" }, "require": "./dist/components/separator/index.cjs"
"./progress": { "solid": "./src/components/progress/index.ts", "import": "./dist/components/progress/index.js", "require": "./dist/components/progress/index.cjs" }, },
"./text-field": { "solid": "./src/components/text-field/index.ts", "import": "./dist/components/text-field/index.js", "require": "./dist/components/text-field/index.cjs" }, "./toggle": {
"./radio-group": { "solid": "./src/components/radio-group/index.ts", "import": "./dist/components/radio-group/index.js", "require": "./dist/components/radio-group/index.cjs" }, "solid": "./src/components/toggle/index.ts",
"./toggle-group": { "solid": "./src/components/toggle-group/index.ts", "import": "./dist/components/toggle-group/index.js", "require": "./dist/components/toggle-group/index.cjs" }, "import": "./dist/components/toggle/index.js",
"./collapsible": { "solid": "./src/components/collapsible/index.ts", "import": "./dist/components/collapsible/index.js", "require": "./dist/components/collapsible/index.cjs" }, "require": "./dist/components/toggle/index.cjs"
"./accordion": { "solid": "./src/components/accordion/index.ts", "import": "./dist/components/accordion/index.js", "require": "./dist/components/accordion/index.cjs" }, },
"./alert-dialog": { "solid": "./src/components/alert-dialog/index.ts", "import": "./dist/components/alert-dialog/index.js", "require": "./dist/components/alert-dialog/index.cjs" }, "./switch": {
"./tabs": { "solid": "./src/components/tabs/index.ts", "import": "./dist/components/tabs/index.js", "require": "./dist/components/tabs/index.cjs" }, "solid": "./src/components/switch/index.ts",
"./slider": { "solid": "./src/components/slider/index.ts", "import": "./dist/components/slider/index.js", "require": "./dist/components/slider/index.cjs" }, "import": "./dist/components/switch/index.js",
"./pagination": { "solid": "./src/components/pagination/index.ts", "import": "./dist/components/pagination/index.js", "require": "./dist/components/pagination/index.cjs" }, "require": "./dist/components/switch/index.cjs"
"./drawer": { "solid": "./src/components/drawer/index.ts", "import": "./dist/components/drawer/index.js", "require": "./dist/components/drawer/index.cjs" }, },
"./select": { "solid": "./src/components/select/index.ts", "import": "./dist/components/select/index.js", "require": "./dist/components/select/index.cjs" }, "./checkbox": {
"./combobox": { "solid": "./src/components/combobox/index.ts", "import": "./dist/components/combobox/index.js", "require": "./dist/components/combobox/index.cjs" }, "solid": "./src/components/checkbox/index.ts",
"./listbox": { "solid": "./src/components/listbox/index.ts", "import": "./dist/components/listbox/index.js", "require": "./dist/components/listbox/index.cjs" }, "import": "./dist/components/checkbox/index.js",
"./dropdown-menu": { "solid": "./src/components/dropdown-menu/index.ts", "import": "./dist/components/dropdown-menu/index.js", "require": "./dist/components/dropdown-menu/index.cjs" }, "require": "./dist/components/checkbox/index.cjs"
"./context-menu": { "solid": "./src/components/context-menu/index.ts", "import": "./dist/components/context-menu/index.js", "require": "./dist/components/context-menu/index.cjs" }, },
"./toast": { "solid": "./src/components/toast/index.ts", "import": "./dist/components/toast/index.js", "require": "./dist/components/toast/index.cjs" }, "./progress": {
"./tooltip": { "solid": "./src/components/tooltip/index.ts", "import": "./dist/components/tooltip/index.js", "require": "./dist/components/tooltip/index.cjs" }, "solid": "./src/components/progress/index.ts",
"./alert": { "solid": "./src/components/alert/index.ts", "import": "./dist/components/alert/index.js", "require": "./dist/components/alert/index.cjs" }, "import": "./dist/components/progress/index.js",
"./badge": { "solid": "./src/components/badge/index.ts", "import": "./dist/components/badge/index.js", "require": "./dist/components/badge/index.cjs" }, "require": "./dist/components/progress/index.cjs"
"./skeleton": { "solid": "./src/components/skeleton/index.ts", "import": "./dist/components/skeleton/index.js", "require": "./dist/components/skeleton/index.cjs" }, },
"./popover": { "solid": "./src/components/popover/index.ts", "import": "./dist/components/popover/index.js", "require": "./dist/components/popover/index.cjs" }, "./text-field": {
"./breadcrumbs": { "solid": "./src/components/breadcrumbs/index.ts", "import": "./dist/components/breadcrumbs/index.js", "require": "./dist/components/breadcrumbs/index.cjs" }, "solid": "./src/components/text-field/index.ts",
"./link": { "solid": "./src/components/link/index.ts", "import": "./dist/components/link/index.js", "require": "./dist/components/link/index.cjs" }, "import": "./dist/components/text-field/index.js",
"./button": { "solid": "./src/components/button/index.ts", "import": "./dist/components/button/index.js", "require": "./dist/components/button/index.cjs" }, "require": "./dist/components/text-field/index.cjs"
"./hover-card": { "solid": "./src/components/hover-card/index.ts", "import": "./dist/components/hover-card/index.js", "require": "./dist/components/hover-card/index.cjs" }, },
"./image": { "solid": "./src/components/image/index.ts", "import": "./dist/components/image/index.js", "require": "./dist/components/image/index.cjs" }, "./radio-group": {
"./meter": { "solid": "./src/components/meter/index.ts", "import": "./dist/components/meter/index.js", "require": "./dist/components/meter/index.cjs" }, "solid": "./src/components/radio-group/index.ts",
"./number-field": { "solid": "./src/components/number-field/index.ts", "import": "./dist/components/number-field/index.js", "require": "./dist/components/number-field/index.cjs" } "import": "./dist/components/radio-group/index.js",
"require": "./dist/components/radio-group/index.cjs"
},
"./toggle-group": {
"solid": "./src/components/toggle-group/index.ts",
"import": "./dist/components/toggle-group/index.js",
"require": "./dist/components/toggle-group/index.cjs"
},
"./collapsible": {
"solid": "./src/components/collapsible/index.ts",
"import": "./dist/components/collapsible/index.js",
"require": "./dist/components/collapsible/index.cjs"
},
"./accordion": {
"solid": "./src/components/accordion/index.ts",
"import": "./dist/components/accordion/index.js",
"require": "./dist/components/accordion/index.cjs"
},
"./alert-dialog": {
"solid": "./src/components/alert-dialog/index.ts",
"import": "./dist/components/alert-dialog/index.js",
"require": "./dist/components/alert-dialog/index.cjs"
},
"./tabs": {
"solid": "./src/components/tabs/index.ts",
"import": "./dist/components/tabs/index.js",
"require": "./dist/components/tabs/index.cjs"
},
"./slider": {
"solid": "./src/components/slider/index.ts",
"import": "./dist/components/slider/index.js",
"require": "./dist/components/slider/index.cjs"
},
"./pagination": {
"solid": "./src/components/pagination/index.ts",
"import": "./dist/components/pagination/index.js",
"require": "./dist/components/pagination/index.cjs"
},
"./drawer": {
"solid": "./src/components/drawer/index.ts",
"import": "./dist/components/drawer/index.js",
"require": "./dist/components/drawer/index.cjs"
},
"./select": {
"solid": "./src/components/select/index.ts",
"import": "./dist/components/select/index.js",
"require": "./dist/components/select/index.cjs"
},
"./combobox": {
"solid": "./src/components/combobox/index.ts",
"import": "./dist/components/combobox/index.js",
"require": "./dist/components/combobox/index.cjs"
},
"./listbox": {
"solid": "./src/components/listbox/index.ts",
"import": "./dist/components/listbox/index.js",
"require": "./dist/components/listbox/index.cjs"
},
"./dropdown-menu": {
"solid": "./src/components/dropdown-menu/index.ts",
"import": "./dist/components/dropdown-menu/index.js",
"require": "./dist/components/dropdown-menu/index.cjs"
},
"./context-menu": {
"solid": "./src/components/context-menu/index.ts",
"import": "./dist/components/context-menu/index.js",
"require": "./dist/components/context-menu/index.cjs"
},
"./toast": {
"solid": "./src/components/toast/index.ts",
"import": "./dist/components/toast/index.js",
"require": "./dist/components/toast/index.cjs"
},
"./tooltip": {
"solid": "./src/components/tooltip/index.ts",
"import": "./dist/components/tooltip/index.js",
"require": "./dist/components/tooltip/index.cjs"
},
"./alert": {
"solid": "./src/components/alert/index.ts",
"import": "./dist/components/alert/index.js",
"require": "./dist/components/alert/index.cjs"
},
"./badge": {
"solid": "./src/components/badge/index.ts",
"import": "./dist/components/badge/index.js",
"require": "./dist/components/badge/index.cjs"
},
"./skeleton": {
"solid": "./src/components/skeleton/index.ts",
"import": "./dist/components/skeleton/index.js",
"require": "./dist/components/skeleton/index.cjs"
},
"./popover": {
"solid": "./src/components/popover/index.ts",
"import": "./dist/components/popover/index.js",
"require": "./dist/components/popover/index.cjs"
},
"./breadcrumbs": {
"solid": "./src/components/breadcrumbs/index.ts",
"import": "./dist/components/breadcrumbs/index.js",
"require": "./dist/components/breadcrumbs/index.cjs"
},
"./link": {
"solid": "./src/components/link/index.ts",
"import": "./dist/components/link/index.js",
"require": "./dist/components/link/index.cjs"
},
"./button": {
"solid": "./src/components/button/index.ts",
"import": "./dist/components/button/index.js",
"require": "./dist/components/button/index.cjs"
},
"./hover-card": {
"solid": "./src/components/hover-card/index.ts",
"import": "./dist/components/hover-card/index.js",
"require": "./dist/components/hover-card/index.cjs"
},
"./image": {
"solid": "./src/components/image/index.ts",
"import": "./dist/components/image/index.js",
"require": "./dist/components/image/index.cjs"
},
"./meter": {
"solid": "./src/components/meter/index.ts",
"import": "./dist/components/meter/index.js",
"require": "./dist/components/meter/index.cjs"
},
"./number-field": {
"solid": "./src/components/number-field/index.ts",
"import": "./dist/components/number-field/index.js",
"require": "./dist/components/number-field/index.cjs"
}
}, },
"scripts": { "scripts": {
"build": "tsdown", "build": "tsdown",
@ -83,7 +215,8 @@
"solid-js": "^1.9.0" "solid-js": "^1.9.0"
}, },
"dependencies": { "dependencies": {
"@floating-ui/dom": "^1.7.6" "@floating-ui/dom": "^1.7.6",
"zod": "^4.3.6"
}, },
"devDependencies": { "devDependencies": {
"@solidjs/testing-library": "^0.8.10", "@solidjs/testing-library": "^0.8.10",

10
packages/core/src/meta.ts Normal file
View File

@ -0,0 +1,10 @@
/**
* Metadata for MCP component discovery.
* Every component exports a Meta object conforming to this shape.
*/
export interface ComponentMeta {
readonly name: string;
readonly description: string;
readonly parts: readonly string[];
readonly requiredParts: readonly string[];
}

View File

@ -19,5 +19,5 @@ export default defineConfig({
dts: true, dts: true,
clean: true, clean: true,
sourcemap: true, sourcemap: true,
external: ["solid-js", "solid-js/web", "solid-js/store"], external: ["solid-js", "solid-js/web", "solid-js/store", "zod", "zod/v4"],
}); });

3
pnpm-lock.yaml generated
View File

@ -32,6 +32,9 @@ importers:
'@floating-ui/dom': '@floating-ui/dom':
specifier: ^1.7.6 specifier: ^1.7.6
version: 1.7.6 version: 1.7.6
zod:
specifier: ^4.3.6
version: 4.3.6
devDependencies: devDependencies:
'@solidjs/testing-library': '@solidjs/testing-library':
specifier: ^0.8.10 specifier: ^0.8.10