diff --git a/README.md b/README.md index c9c491ee..528587df 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,7 @@ Supported Resolvers: - [Ant Design Vue](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/antdv.ts) - [Element Plus](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/element-plus.ts) - [Headless UI](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/headless-ui.ts) +- [IDux](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/idux.ts) - [Naive UI](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/naive-ui.ts) - [Prime Vue](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/prime-vue.ts) - [Vant](https://github.com/antfu/vite-plugin-components/blob/master/src/resolvers/vant.ts) diff --git a/src/resolvers/idux.ts b/src/resolvers/idux.ts new file mode 100644 index 00000000..04621d28 --- /dev/null +++ b/src/resolvers/idux.ts @@ -0,0 +1,55 @@ +import { ComponentResolver } from "../types" +import { kebabCase } from "../utils" + +export interface IduxResolverOptions { + /** + * import style along with components + */ + importStyle?: 'css' | 'less' +} + +/** + * Resolver for `@idux/cdk` and `@idux/components` + * + * @link https://idux.site + */ +export function IduxResolver(options: IduxResolverOptions = {}): ComponentResolver { + return (name: string) => { + if (name.match(/^Ix[A-Z]/)) { + const { importStyle } = options + const compName = name.slice(2) + const kebabCaseName = kebabCase(compName) + const isCdk = cdkNames.includes(kebabCaseName) + const packageName = isCdk ? 'cdk' : 'components' + const dirname = getDirname(kebabCaseName) + const path = `@idux/${packageName}/${dirname}` + const sideEffects = isCdk || !importStyle ? undefined : `${path}/style/${importStyle === 'css' ? 'css' : 'index'}` + + return { importName: name, path, sideEffects } + } + } +} + +const cdkNames = ['portal', 'resizable', 'virtual-list'] +const kebabCaseDirnames = [ + 'virtual-list', + 'auto-complete', + 'back-top', + 'date-picker', + 'input-number', + 'time-picker', + 'tree-select', +] + +function getDirname(compName: string): string { + const dirname = kebabCaseDirnames.find(name => compName.startsWith(name)) + if (dirname) { + return dirname + } + + const [first] = compName.split('-') + if (first === 'row' || first === 'col') { + return 'grid' + } + return first +} diff --git a/src/resolvers/index.ts b/src/resolvers/index.ts index d541d96b..3a1b2562 100644 --- a/src/resolvers/index.ts +++ b/src/resolvers/index.ts @@ -2,6 +2,7 @@ export * from './antdv' export * from './element-plus' export * from './element-ui' export * from './headless-ui' +export * from './idux' export * from './naive-ui' export * from './prime-vue' export * from './vant'