UNPKG

ivue-material-plus

Version:

A high quality UI components Library with Vue.js

218 lines (214 loc) • 5.18 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function kebabCase(key) { const result = key.replace(/([A-Z])/g, " $1").trim(); return result.split(" ").join("-").toLowerCase(); } const pakPath = "ivue-material-plus/dist/unplugin-vue-components"; const basePath = "ivue-material-plus/dist/styles/base.css"; const animationPath = "ivue-material-plus/dist/styles/animation.css"; const noStylesComponents = [ "ivue-content", "ivue-carousel-item", "ivue-bottom-nav-item", "ivue-breadcrumb-item", "ivue-checkbox-group", "ivue-collapse-panel", "ivue-count-down", "ivue-count-up", "ivue-radio-group", "ivue-option", "ivue-option-group", "ivue-image-preview", "ivue-relative-time", "ivue-submenu", "ivue-menu-group", "ivue-menu-item", "ivue-form-item", "ivue-skeleton-item" ]; const useDependentComponents = [ { name: "ivue-table", dependent: ["IvueTableColumn"] }, { name: "ivue-tabs", dependent: ["IvueTabItem", "IvueTab"] }, { name: "ivue-form", dependent: ["IvueFormItem"] }, { name: "ivue-select", dependent: ["IvueOption", "IvueOptionGroup"] }, { name: "ivue-steps", dependent: ["IvueStep"] }, { name: "ivue-skeleton", dependent: ["IvueSkeletonItem"] } ]; const sideEffects = [ { name: "ivue-page", sideEffects: ["ivue-select"] }, { name: "ivue-modal", sideEffects: ["ivue-button", "ivue-spin"] }, { name: "ivue-cascader", sideEffects: ["ivue-input", "ivue-select", "ivue-loading"] }, { name: "ivue-auto-complete", sideEffects: ["ivue-loading", "ivue-input", "ivue-select"] }, { name: "ivue-button", sideEffects: ["ivue-ripple"] }, { name: "ivue-switch", sideEffects: ["ivue-ripple"] }, { name: "ivue-table", sideEffects: ["ivue-tooltip", "ivue-checkbox", "ivue-scrollbar"] } ]; function getSideEffects(componentsName, options) { if (!options.importStyle) { return; } if (options.singleFile) { return [`${pakPath}/styles/${componentsName}.css`]; } let list = [ `${pakPath}/styles/reset.css`, `${pakPath}/styles/ivue-icon.css`, `${basePath}`, `${animationPath}`, `${pakPath}/styles/${componentsName}.css` ]; sideEffects.forEach((item) => { if (item.name === componentsName) { item.sideEffects.forEach((sideEffectsItem) => { list.push(`${pakPath}/styles/${sideEffectsItem}.css`); }); } }); return list; } const resolveComponent = (componentsName, options) => { let useDependentComponentsData = null; useDependentComponents.forEach((item) => { item.dependent.forEach((dependent) => { const _kebabCase = kebabCase(dependent); if (_kebabCase === componentsName) { useDependentComponentsData = { name: dependent, from: `${pakPath}/${options.ssr ? "lib" : "es"}` }; } }); }); if (useDependentComponentsData) { return useDependentComponentsData; } return { name: options.name, from: `${pakPath}/${options.ssr ? "lib" : "es"}`, sideEffects: getSideEffects(componentsName, options) }; }; const resolveDirective = (name, options) => { const directives = { Loading: { name: "IvueLoading", importName: "ivue-loading", styleName: "ivue-loading", importStyle: true }, Ripple: { name: "Ripple", importName: "ivue-ripple", styleName: "ivue-ripple", importStyle: true }, ClickOutside: { name: "ClickOutside", importName: "ivue-click-outside", styleName: "ivue-click-outside", importStyle: false }, Touch: { name: "Touch", importName: "ivue-touch", styleName: "ivue-touch", importStyle: false }, LineClamp: { name: "LineClamp", importName: "ivue-line-clamp", styleName: "ivue-line-clamp", importStyle: true, singleFile: true } }; const directive = directives[name]; if (!directive) { return; } return { name: directive.name, from: `${pakPath}/${options.ssr ? "lib" : "es"}`, sideEffects: getSideEffects(directive.styleName, { importStyle: directive.importStyle, singleFile: directive.singleFile }) }; }; function IvueMaterialPlusResolver(options) { let optionsResolved = { ssr: false, ...options }; return [ { type: "component", resolve: (name) => { if (!name.match(/^Ivue[A-Z]/)) { return; } const _kebabCase = kebabCase(name); if ([...noStylesComponents].includes(_kebabCase)) { return resolveComponent(_kebabCase, { name, importStyle: false, ...optionsResolved }); } return resolveComponent(_kebabCase, { name, importStyle: true, ...optionsResolved }); } }, { type: "directive", resolve: (name) => { return resolveDirective(name, optionsResolved); } } ]; } exports.IvueMaterialPlusResolver = IvueMaterialPlusResolver; //# sourceMappingURL=ivue-material-plus.js.map