diff --git a/.gitignore b/.gitignore index 901d6fe49478980b8c727902ae4b83157de87b48..63f557bc47d00602d242da63ada00b6dcfea3182 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ package-lock.json /src/packages/nutui.ts /src/packages/nutui.react.ts /src/packages/nutui.*.ts +/src/sites/doc/docs.ts /tsc/test diff --git a/package.json b/package.json index 934de102c2f4713173eff50d90e7336d27fc4b76..e7c5299cc1eadf8445218594faf568c8baf20a47 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,16 @@ { - "name": "nutui-react", - "version": "1.0.0", - "main": "dist/nutui.react.umd.js", - "module": "dist/nutui.react.es.js", + "name": "@nutui/nutui-react", + "version": "0.1.0", "style": "dist/style.css", - "typings": "dist/types/src/packages/nutui.react.d.ts", + "main": "dist/nutui.react.umd.js", + "module": "dist/esm/nutui-react.es.js", + "typings": "dist/esm/types/src/packages/nutui.react.d.ts", + "sideEffects": [ + "*.scss", + "dist/esm/**/style/*", + "dist/style.css" + ], + "description": "京东风格的轻量级移动端 React 组件库", "keywords": [ "nutui", "nutui2", @@ -18,6 +24,10 @@ ], "author": "jdcfe", "license": "MIT", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org/" + }, "files": [ "dist", "README.md", @@ -27,12 +37,20 @@ ], "scripts": { "add": "node scripts/createComponentMode.js", + "generate:types": "tsc && npm run replace:types", "generate:file": "node scripts/generate-nutui.js", + "generate:loader-style": "node scripts/generate-loader-style.js", + "replace:scss": "node scripts/replace-scss.js", + "replace:types": "node scripts/replace-types.js", "generate:themes": "node scripts/generate-themes.js", "checked": "npm run generate:file && tsc", "dev": "npm run checked && vite --open --force", - "build": "npm run checked && vite build --config vite.config.build.ts && tsc && npm run generate:themes", + "build:css": "npm run generate:themes && vite build --config vite.config.build.css.ts && npm run build:replace", + "build:replace": "npm run replace:scss", + "build:esm": "npx rollup -c rollup.config.es.js", + "build": "npm run checked && vite build --config vite.config.build.ts && npm run build:esm && npm run build:css && npm run generate:types && npm run generate:loader-style", "build:site": "npm run checked && vite build --config vite.config.build.site.ts", + "publish:beta": "npm publish --tag beta", "prepare": "husky install" }, "lint-staged": { @@ -42,27 +60,43 @@ "*.{js,css,md}": "prettier --write" }, "dependencies": { + "@babel/runtime": "^7.16.5", "@bem-react/classname": "^1.5.10", "@react-spring/web": "^9.3.2", "@use-gesture/react": "^10.2.4", - "classnames": "^2.3.1" + "classnames": "^2.3.1", + "react-router-dom": "^5.2.0", + "react-transition-group": "^4.4.2" }, "devDependencies": { - "@babel/preset-react": "^7.13.13", + "@babel/plugin-proposal-class-properties": "^7.16.5", + "@babel/plugin-proposal-object-rest-spread": "^7.16.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.16.5", + "@babel/preset-env": "^7.16.5", + "@babel/preset-react": "^7.16.5", + "@babel/preset-typescript": "^7.16.5", "@commitlint/cli": "^12.1.4", "@commitlint/config-conventional": "^12.1.4", "@loadable/component": "^5.15.0", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-node-resolve": "^13.1.1", + "@rollup/plugin-typescript": "^8.3.0", "@types/loadable__component": "^5.13.3", "@types/node": "^15.3.1", "@types/react": "^17.0.0", "@types/react-dom": "^17.0.0", "@types/react-router-dom": "^5.1.7", + "@types/react-syntax-highlighter": "^13.5.2", "@types/react-transition-group": "^4.4.4", "@typescript-eslint/eslint-plugin": "^4.24.0", "@typescript-eslint/parser": "^4.24.0", + "@vitejs/plugin-react": "^1.1.3", "@vitejs/plugin-react-refresh": "^1.3.1", "autoprefixer": "^10.4.0", "axios": "^0.21.1", + "babel-plugin-react-scoped-css": "^1.1.1", "eslint": "^7.26.0", "eslint-config-airbnb": "^18.2.1", "eslint-config-prettier": "^8.3.0", @@ -71,20 +105,26 @@ "eslint-plugin-react": "^7.23.2", "eslint-plugin-react-hooks": "^4.2.0", "fs-extra": "^10.0.0", + "glob": "^7.2.0", "husky": "^6.0.0", "inquirer": "^8.0.0", "lint-staged": "^11.0.0", + "map-stream": "0.0.7", "marked": "^2.0.3", + "postcss-import": "^14.0.2", + "postcss-modules": "^4.2.2", "prettier": "2.3.0", "react": "^17.0.0", "react-dom": "^17.0.0", - "react-router-dom": "^5.2.0", - "react-transition-group": "^4.4.2", - "sass": "^1.32.13", + "react-markdown": "^7.1.2", + "react-syntax-highlighter": "^15.4.5", + "remark-directive": "^2.0.1", + "remark-gfm": "^3.0.1", + "sass": "^1.45.0", "shelljs": "^0.8.4", "typescript": "^4.1.2", + "unist-util-visit": "^4.1.0", "vinyl-fs": "^3.0.3", - "vite": "^2.1.5", - "vite-plugin-markdown": "^2.0.2" + "vite": "^2.1.5" } } diff --git a/rollup.config.es.js b/rollup.config.es.js new file mode 100644 index 0000000000000000000000000000000000000000..e544edb924df9739896632b1e6d4d3cb765ae07d --- /dev/null +++ b/rollup.config.es.js @@ -0,0 +1,45 @@ +import commonjs from '@rollup/plugin-commonjs' +import typescript from '@rollup/plugin-typescript' +import { getBabelOutputPlugin } from '@rollup/plugin-babel' + +const path = require('path') +const config = require('./src/config.json') +const entries = { 'nutui-react.es': path.join(__dirname, `./src/packages/nutui.react.build.ts`) } +const outputEntries = {} + +config.nav.map((item) => { + item.packages.forEach((element) => { + let { name, show, type, exportEmpty } = element + if (show || exportEmpty) { + outputEntries[`./${name.toLowerCase()}`] = `./${name}` + entries[name] = path.join(__dirname, `./src/packages/${name.toLowerCase()}/index.ts`) + } + }) +}) + +export default { + input: entries, + external: (id, parent) => + /^react/.test(id) || /^react\-dom/.test(id) || (/^\@\/packages\/\w+$/.test(id) && !!parent), + output: { + format: 'esm', + dir: './dist/esm', + name: '[entryName].js', + paths: (id) => { + return /@\/packages/.test(id) ? outputEntries[id.replace('@/packages/', './')] + '.js' : id + }, + }, + plugins: [ + commonjs(), + typescript(), + getBabelOutputPlugin({ + presets: ['@babel/preset-env'], + plugins: [ + '@babel/plugin-transform-runtime', + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-syntax-dynamic-import', + ], + }), + ], +} diff --git a/scripts/generate-loader-style.js b/scripts/generate-loader-style.js new file mode 100644 index 0000000000000000000000000000000000000000..b45d0c8ffe848c9e8cc16c79317064bc6a140a4a --- /dev/null +++ b/scripts/generate-loader-style.js @@ -0,0 +1,15 @@ +const config = require('../src/config.json') +const path = require('path') +const fs = require('fs-extra') +let importScssStr = `\n` +config.nav.map((item) => { + item.packages.forEach((element) => { + let { name, show, exportEmpty } = element + const nameLowerCase = name.toLowerCase() + const file = path.resolve(process.cwd(), `dist/esm/${name}/style/index.js`) + if (show || exportEmpty) { + importScssStr = `import '../../../packages/${nameLowerCase}/${nameLowerCase}.scss'` + fs.outputFileSync(file, importScssStr) + } + }) +}) diff --git a/scripts/generate-nutui.js b/scripts/generate-nutui.js index efcee4bdc1a1948d3caf1d742876f27e6288db09..aa0642fa250ec63df96cbf4afa72f0c6ba4caa2c 100644 --- a/scripts/generate-nutui.js +++ b/scripts/generate-nutui.js @@ -1,22 +1,43 @@ -const package = require('../package.json') +// generate nutui.react.ts file for dev or build const config = require('../src/config.json') const path = require('path') const fs = require('fs-extra') let importStr = `` +let importMarkdownStr = `` +let importScssStr = `\n` const packages = [] +const mds = [] + config.nav.map((item) => { item.packages.forEach((element) => { - let { name, show, type } = element - if (show) { - importStr += `import ${name} from './${name.toLowerCase()}';\n` + let { name, show, type, exportEmpty } = element + if (show || exportEmpty) { + importStr += `import ${name} from '@/packages/${name.toLowerCase()}';\n` + importScssStr += `import '@/packages/${name.toLowerCase()}/${name.toLowerCase()}.scss';\n` packages.push(name) } + if (show) { + importMarkdownStr += `import ${name} from '@/packages/${name.toLowerCase()}/doc.md?raw';\n` + mds.push(name) + } }) }) -let fileStr = `${importStr} +let fileStrBuild = `${importStr} export { ${packages.join(',')} };` +fs.outputFile( + path.resolve(__dirname, '../src/packages/nutui.react.build.ts'), + fileStrBuild, + 'utf8', + (error) => { + if (error) throw error + } +) + +let fileStr = `${importStr} +${importScssStr} +export { ${packages.join(',')} };` fs.outputFile( path.resolve(__dirname, '../src/packages/nutui.react.ts'), fileStr, @@ -25,3 +46,12 @@ fs.outputFile( if (error) throw error } ) + +let mdFileStr = `${importMarkdownStr} +export const routers = [${mds.map((m) => `'${m}'`)}] +export const raws = {${mds.join(',')}} +` + +fs.outputFile(path.resolve(__dirname, '../src/sites/doc/docs.ts'), mdFileStr, 'utf8', (error) => { + if (error) throw error +}) diff --git a/scripts/generate-themes.js b/scripts/generate-themes.js index 1efb9d888649f063080c10770d1be599759089d7..0cae66d1de652a2d0fbb708f91fcf997f2a0a4d8 100644 --- a/scripts/generate-themes.js +++ b/scripts/generate-themes.js @@ -1,22 +1,40 @@ const config = require('../src/config.json') const path = require('path') const fs = require('fs-extra') -let fileStr = `@import '../variables.scss';\n` +const glob = require('glob') +const componetsScss = glob.sync('./src/packages/**/*.scss') let tasks = [] +componetsScss.map((cs) => { + console.log(cs) + if (cs.indexOf('demo.scss') > -1) return + tasks.push( + fs + .copy( + path.resolve(__dirname, `.${cs}`), + path.resolve(__dirname, `../dist`, `${cs.replace('./src/', '')}`) + ) + .catch((error) => {}) + ) +}) + +let fileStr = `@import '../variables.scss';\n` + config.nav.map((item) => { item.packages.forEach((element) => { let folderName = element.name.toLowerCase() - tasks.push( - fs - .copy( - path.resolve(__dirname, `../src/packages/${folderName}/${folderName}.scss`), - path.resolve(__dirname, `../dist/packages/${folderName}/index.scss`) - ) - .then((success) => { - fileStr += `@import '../../packages/${folderName}/index.scss';\n` - }) - .catch((error) => {}) - ) + fileStr += `@import '../../packages/${folderName}/${folderName}.scss';\n` + + // tasks.push( + // fs + // .copy( + // path.resolve(__dirname, `../src/packages/${folderName}/${folderName}.scss`), + // path.resolve(__dirname, `../dist/packages/${folderName}/${folderName}.scss`) + // ) + // .then((success) => { + // fileStr += `@import '@/packages/${folderName}/${folderName}.scss';\n` + // }) + // .catch((error) => {}) + // ) }) }) diff --git a/scripts/generate-types.js b/scripts/generate-types.js index 9bd0d5009ae1d50a9c40a317d3eeacd7a89ae7f8..932a530d30a20d93fc23e66bbd60c820f9e1c192 100644 --- a/scripts/generate-types.js +++ b/scripts/generate-types.js @@ -1,20 +1,20 @@ -const config = require('../src/config.json'); -const path = require('path'); -const fs = require('fs-extra'); +const config = require('../src/config.json') +const path = require('path') +const fs = require('fs-extra') let importStr = `import { App } from 'vue'; declare class UIComponent { static install(vue: App): void; -}\n`; -const packages = []; -config.nav.map(item => { - item.packages.forEach(element => { - let { name, show } = element; - if (show) { - importStr += `declare class ${name} extends UIComponent {}\n`; - packages.push(name); +}\n` +const packages = [] +config.nav.map((item) => { + item.packages.forEach((element) => { + let { name, show, exportEmpty, type } = element + if (show || exportEmpty) { + importStr += `declare class ${name} extends UIComponent {}\n` + packages.push(name) } - }); -}); + }) +}) let installFunction = ` export interface InstallationOptions { locale?: any; @@ -26,23 +26,18 @@ declare const _default: { install: typeof install; version: string; }; -export default _default;`; -let fileStr = importStr + installFunction; -fs.outputFile( - path.resolve(__dirname, '../dist/nutui.d.ts'), - fileStr, - 'utf8', - error => { - // logger.success(`${package_config_path} 文件写入成功`); - } -); +export default _default;` +let fileStr = importStr + installFunction +fs.outputFile(path.resolve(__dirname, '../dist/nutui.d.ts'), fileStr, 'utf8', (error) => { + // logger.success(`${package_config_path} 文件写入成功`); +}) fs.outputFile( path.resolve(__dirname, '../dist/index.d.ts'), `import * as NutUI from './nutui'; export default NutUI; export * from './nutui';`, 'utf8', - error => { + (error) => { // logger.success(`${package_config_path} 文件写入成功`); } -); +) diff --git a/scripts/replace-scss.js b/scripts/replace-scss.js new file mode 100644 index 0000000000000000000000000000000000000000..5d5baab89921c559852f284233406e9f958f4a23 --- /dev/null +++ b/scripts/replace-scss.js @@ -0,0 +1,19 @@ +// replace scss alias for build +const package = require('../package.json') +const vfs = require('vinyl-fs') +const map = require('map-stream') +const dest_docs = './dist/packages' + +const correctionImport = function (file, cb) { + const contents = file.contents + .toString() + .replaceAll('@/packages', `${package.name}/dist/packages`) + .replaceAll('@/styles', `${package.name}/dist/styles`) + file.contents = Buffer.from(contents, 'utf8') + cb(null, file) +} +vfs + .src(['./src/packages/**/*.scss', '!./src/packages/**/demo.scss']) + .pipe(map(correctionImport)) + .pipe(vfs.dest(dest_docs)) + .on('end', () => {}) diff --git a/scripts/replace-types.js b/scripts/replace-types.js new file mode 100644 index 0000000000000000000000000000000000000000..8b575120be29c4acf97456958c0778709e70c420 --- /dev/null +++ b/scripts/replace-types.js @@ -0,0 +1,31 @@ +// replace types alias for build +const vfs = require('vinyl-fs') +const map = require('map-stream') +const dest_docs = './dist/esm/types/src/packages' + +vfs + .src(['./dist/esm/types/src/packages/nutui.react.d.ts']) + .pipe( + map((file, cb) => { + const contents = file.contents + .toString() + .replaceAll('@/packages', `.`) + .replace(/import\s(.*)?\.scss\'\;[\t\n]/g, '') + file.contents = Buffer.from(contents, 'utf8') + cb(null, file) + }) + ) + .pipe(vfs.dest(dest_docs, { overwrite: true })) + .on('end', () => {}) + +vfs + .src(['./dist/esm/types/src/packages/**/*.d.ts', '!./dist/esm/types/src/packages/*.d.ts']) + .pipe( + map((file, cb) => { + const contents = file.contents.toString().replaceAll('@/packages', `..`) + file.contents = Buffer.from(contents, 'utf8') + cb(null, file) + }) + ) + .pipe(vfs.dest(dest_docs, { overwrite: true })) + .on('end', () => {}) diff --git a/scripts/sync-docs.js b/scripts/sync-docs.js index a4d36b2c518873b82efc51c51b7bf4a7b882163c..c619c503eef85c1a562a912cf246d73696fc2fe1 100644 --- a/scripts/sync-docs.js +++ b/scripts/sync-docs.js @@ -12,7 +12,7 @@ const tmp = '/tmp' const repo = 'nutui-docs' const base = process.cwd() const components = path.join(base, 'src/packages') -const dest_docs = path.join(tmp, `${repo}/src/doc_react/docs`) +const dest_docs = path.join(tmp, `${repo}/src/docs_react/docs`) async function sync_docs() { const rm_dest_result = await rm(path.join(tmp, repo), { diff --git a/scripts/vite-demo-plugin.ts b/scripts/vite-demo-plugin.ts new file mode 100644 index 0000000000000000000000000000000000000000..b564494e091f4c13e3c0316dc4d0ef27b5cd2b57 --- /dev/null +++ b/scripts/vite-demo-plugin.ts @@ -0,0 +1,24 @@ +const fileRegex = /demo\.tsx$/ + +export default function viteDemoPlugin() { + return { + name: 'viteDemoPlugin', + configureServer(server) { + server.middlewares.use((req, res, next) => { + // custom handle request... + if (req.url.indexOf('demo.scss') > -1) { + req.redirect(req.url.replace('demo.scss', 'demo.module.scss')) + } + next() + }) + }, + transform(src, id) { + if (fileRegex.test(id)) { + return { + code: src, + map: null, // 如果可行将提供 source map + } + } + }, + } +} diff --git a/src/config.json b/src/config.json index 8b42e7aea74ccdbc724880387cf05ff58650acfc..939965f8335db3f7d4527bc878359c483802da73 100644 --- a/src/config.json +++ b/src/config.json @@ -1,63 +1,19 @@ { - "versions": [ - { - "name": "1.x", - "link": "/1x/" - }, - { - "name": "2.x", - "link": "/" - }, - { - "name": "3.x", - "link": "/3x/" - }, - { - "name": "nutui-jdl", - "link": "/jdl/" - }, - { - "name": "nutui-react", - "link": "https://github.com/jdf2e/nutui/tree/nutui-react" - } - ], - "header": [ - { - "name": "guide", - "cName": "指南", - "path": "/intro" - }, - { - "name": "intro", - "cName": "组件", - "path": "/intro" - }, - { - "name": "example", - "cName": "示例", - "path": "/" - }, - { - "name": "resource", - "cName": "资源", - "path": "/resource" - } - ], "docs": { "name": "指南", "packages": [ { - "name": "intro", + "name": "intro-react", "cName": "介绍", "show": true }, { - "name": "start", + "name": "start-react", "cName": "快速上手", "show": true }, { - "name": "theme", + "name": "theme-react", "cName": "主题定制", "show": true }, @@ -72,7 +28,7 @@ "show": true }, { - "name": "https://github.com/jdf2e/nutui/releases", + "name": "https://github.com/jdf2e/nutui-react/releases", "cName": "更新日志", "show": true, "isLink": true @@ -84,7 +40,7 @@ "name": "基础组件", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "Avatar", "type": "component", "cName": "头像", @@ -94,7 +50,7 @@ "author": "junjun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Button", "type": "component", "cName": "按钮", @@ -104,27 +60,38 @@ "author": "" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Cell", "type": "component", - "cName": "列表组件", + "cName": "单元格", "desc": "列表项,可组成列表", "sort": 2, "show": true, "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", + "name": "CellGroup", + "type": "component", + "cName": "单元格", + "desc": "列表项,可组成列表", + "sort": 2, + "show": false, + "exportEmpty": true, + "author": "songsong" + }, + { + "version": "0.1.0", "name": "Icon", "type": "component", - "cName": "图标组件", - "desc": "图标", + "cName": "图标", + "desc": "基于 IconFont 字体的图标集", "sort": 1, "show": true, "author": "oasis-cloud" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Price", "type": "component", "cName": "价格", @@ -134,7 +101,7 @@ "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Overlay", "type": "component", "cName": "遮罩层", @@ -144,7 +111,7 @@ "author": "junjun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Divider", "type": "component", "cName": "分割线", @@ -159,7 +126,7 @@ "name": "布局组件", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "Layout", "type": "component", "cName": "布局", @@ -169,23 +136,25 @@ "author": "yushuang24" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Row", "type": "component", "cName": "行", "desc": "布局组件中的行", "sort": 2, - "show": true, + "show": false, + "exportEmpty": true, "author": "yushuang24" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Col", "type": "component", "cName": "列", "desc": "布局组件中的列", "sort": 3, - "show": true, + "show": false, + "exportEmpty": true, "author": "yushuang24" } ] @@ -194,7 +163,7 @@ "name": "操作反馈", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "Drag", "type": "component", "cName": "拖拽", @@ -204,7 +173,7 @@ "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Collapse", "type": "component", "cName": "折叠面板", @@ -214,7 +183,7 @@ "author": "zhenyulei" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Toast", "type": "component", "cName": "吐司", @@ -224,7 +193,7 @@ "author": "VickyYe" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "BackTop", "type": "component", "cName": "返回顶部", @@ -234,7 +203,7 @@ "author": "vickyYe" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Range", "type": "component", "cName": "区间选择器", @@ -244,7 +213,7 @@ "author": "vickyYe" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Infiniteloading", "type": "component", "cName": "滚动加载", @@ -254,7 +223,7 @@ "author": "swag~jun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Steps", "type": "component", "cName": "步骤条", @@ -264,17 +233,28 @@ "author": "swag~jun" }, { - "version": "1.0.0", + "version": "3.0.0", + "name": "Step", + "sort": 17, + "cName": "步骤条子组件", + "type": "component", + "show": false, + "exportEmpty": true, + "desc": "步骤条子组件", + "author": "swag~jun" + }, + { + "version": "0.1.0", "name": "CircleProgress", "type": "component", - "cName": "进度条", + "cName": "环形进度条", "desc": "展示操作或任务的当前进度。", "sort": 7, "show": true, "author": "swag~jun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Popup", "sort": 9, "cName": "弹出层", @@ -284,7 +264,7 @@ "author": "szg2008" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "ActionSheet", "type": "component", "cName": "动作面板", @@ -294,17 +274,17 @@ "author": "dsj" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "NoticeBar", "type": "component", - "cName": "通告栏", + "cName": "公告栏", "desc": "用于循环播放展示一组消息通知。", "sort": 11, "show": true, "author": "vickyYe" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Notify", "type": "component", "cName": "消息通知", @@ -314,17 +294,17 @@ "author": "vickyYE" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Dialog", "type": "component", "cName": "对话框", - "desc": "对话框", + "desc": "模态对话框", "sort": 12, "show": true, "author": "yangjinjun3" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Switch", "type": "component", "cName": "开关", @@ -334,14 +314,36 @@ "author": "dsj" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "CollapseItem", "type": "component", "cName": "折叠面板子组件", "desc": "折叠面板的子组件", "sort": 13, "show": false, + "exportEmpty": true, "author": "zhenyulei" + }, + { + "version": "1.0.0", + "name": "Swiper", + "type": "component", + "cName": "轮播", + "desc": "轮播组件", + "sort": 14, + "show": true, + "author": "liukun" + }, + { + "version": "1.0.0", + "name": "SwiperItem", + "type": "component", + "cName": "轮播子组件", + "desc": "轮播子组件", + "sort": 14, + "show": false, + "exportEmpty": true, + "author": "liukun" } ] }, @@ -349,27 +351,38 @@ "name": "导航组件", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "NavBar", "type": "component", - "cName": "导航组件", + "cName": "头部导航", "desc": "提供导航功能。", "sort": 1, "show": true, "author": "dsj" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Tabbar", "type": "component", - "cName": "标签栏组件", + "cName": "标签栏", "desc": "底部导航常用场景", "sort": 2, "show": true, "author": "dsj" }, { - "version": "1.0.0", + "version": "0.1.0", + "name": "TabbarItem", + "sort": 2, + "cName": "标签栏子组件", + "type": "component", + "show": false, + "exportEmpty": true, + "desc": "标签栏子组件", + "author": "dsj" + }, + { + "version": "0.1.0", "name": "InputNumber", "type": "component", "cName": "数字输入框", @@ -379,7 +392,7 @@ "author": "swag~jun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Elevator", "type": "component", "cName": "电梯楼层", @@ -389,7 +402,7 @@ "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "FixedNav", "type": "component", "cName": "悬浮导航", @@ -399,10 +412,10 @@ "author": "Ymm0008" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Pagination", "type": "component", - "cName": "分页组件", + "cName": "分页", "desc": "当数据量较多时,采用分页的形式分隔长列表。", "sort": 6, "show": true, @@ -414,7 +427,7 @@ "name": "数据录入", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "Rate", "type": "component", "cName": "评分", @@ -424,7 +437,7 @@ "author": "dsj" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Uploader", "type": "component", "cName": "上传", @@ -434,7 +447,7 @@ "author": "swag~jun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Input", "type": "component", "cName": "输入框", @@ -444,7 +457,7 @@ "author": "VickyYe" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "TextArea", "type": "component", "cName": "文本域", @@ -454,8 +467,8 @@ "author": "VickyYe" }, { - "version": "1.0.0", - "name": "CheckBox", + "version": "0.1.0", + "name": "Checkbox", "type": "component", "cName": "复选按钮", "desc": "多选按钮用于选择。", @@ -464,7 +477,18 @@ "author": "oasis" }, { - "version": "1.0.0", + "version": "0.1.0", + "name": "CheckboxGroup", + "type": "component", + "cName": "多选按钮组", + "desc": "多选按钮组", + "sort": 11, + "show": false, + "exportEmpty": true, + "author": "oasis" + }, + { + "version": "0.1.0", "name": "Tag", "type": "component", "cName": "标签", @@ -474,7 +498,17 @@ "author": "lzz" }, { - "version": "1.0.0", + "version": "0.1.0", + "name": "Popover", + "type": "component", + "cName": "气泡弹出框", + "desc": "气泡弹出框", + "sort": 19, + "show": true, + "author": "lzz" + }, + { + "version": "0.1.0", "name": "Badge", "type": "component", "cName": "徽标", @@ -484,7 +518,7 @@ "author": "lzz" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "AnimatingNumbers", "type": "component", "cName": "数字动画", @@ -494,7 +528,7 @@ "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Radio", "type": "component", "cName": "单选按钮", @@ -504,21 +538,22 @@ "author": "oasis" }, { - "version": "1.0.0", - "name": "Picker", + "version": "0.1.0", + "name": "RadioGroup", "type": "component", - "cName": "选择器", - "desc": "提供多个选项集合供用户选择其中一项。", + "cName": "单选按钮组", + "desc": "单选按钮组", "sort": 10, - "show": true, - "author": "dsj" + "exportEmpty": true, + "show": false, + "author": "oasis" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "ShortPassword", "type": "component", "cName": "短密码", - "desc": "", + "desc": "短密码输入框", "sort": 10, "show": true, "author": "Drjingfubo" @@ -531,6 +566,26 @@ "sort": 10, "show": true, "author": "szg2008" + }, + { + "name": "CalendarItem", + "type": "component", + "cName": "日历", + "desc": "日历,可平铺/弹窗展示", + "sort": 10, + "show": false, + "exportEmpty": true, + "author": "szg2008" + }, + { + "version": "1.0.0", + "name": "Picker", + "type": "component", + "cName": "选择器", + "desc": "提供多个选项集合供用户选择其中一项。", + "sort": 10, + "show": true, + "author": "dsj" } ] }, @@ -538,17 +593,17 @@ "name": "特色组件", "packages": [ { - "version": "1.0.0", + "version": "0.1.0", "name": "Signature", "type": "component", - "cName": "签字", + "cName": "签名", "desc": "基于Canvas的签名组件", "sort": 1, "show": true, "author": "songsong" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Barrage", "type": "component", "cName": "弹幕", @@ -558,10 +613,10 @@ "author": "swag~jun" }, { - "version": "1.0.0", + "version": "0.1.0", "name": "Address", "type": "component", - "cName": "地址组件", + "cName": "地址", "desc": "地址组件", "sort": 3, "show": true, diff --git a/src/packages/actionsheet/actionsheet.scss b/src/packages/actionsheet/actionsheet.scss index ad9a8f2ca7ca7dac61969071151463d9ac28802f..3d1fd51d0bac78868e424ba71c068dede6362800 100644 --- a/src/packages/actionsheet/actionsheet.scss +++ b/src/packages/actionsheet/actionsheet.scss @@ -1,3 +1,4 @@ +@import '../popup/popup.scss'; .nut-actionsheet { display: block; .nut-actionsheet__title { diff --git a/src/packages/actionsheet/actionsheet.tsx b/src/packages/actionsheet/actionsheet.tsx index 234cbe89ca0059f664000cae5fd49c1d04eebc4b..9b6b192249865351185e74a543ea56aac946b96a 100644 --- a/src/packages/actionsheet/actionsheet.tsx +++ b/src/packages/actionsheet/actionsheet.tsx @@ -1,6 +1,5 @@ import React, { FunctionComponent, useState, useEffect } from 'react' import Popup from '@/packages/popup' -import './actionsheet.scss' import bem from '@/utils/bem' export type ItemType = { [key: string]: T } diff --git a/src/packages/address/address.scss b/src/packages/address/address.scss index 57a725bfcc943dc7807a257bc52e3542110322c9..fe2ae0d935b73458afc8ab228f4098de73293914 100644 --- a/src/packages/address/address.scss +++ b/src/packages/address/address.scss @@ -1,3 +1,6 @@ +@import '../icon/icon.scss'; +@import '../popup/popup.scss'; +@import '../elevator/elevator.scss'; .nut-address { display: block; &__header { diff --git a/src/packages/address/address.tsx b/src/packages/address/address.tsx index e90727ad89305615f667be87ffded1fe11ea944f..c22ed4a9550fcdd5c0dbc5eaeb0c5bee4a204400 100644 --- a/src/packages/address/address.tsx +++ b/src/packages/address/address.tsx @@ -4,7 +4,6 @@ import Popup from '@/packages/popup' import bem from '@/utils/bem' import { ExistRender } from './existRender' import { CustomRender } from './customRender' -import './address.scss' export interface RegionData { name?: string diff --git a/src/packages/address/customRender.tsx b/src/packages/address/customRender.tsx index 09f4234b5fbc724d5acf084ef1b58f02949c0faf..bb65108a0c783c529e9dd05e1026e10e80a63a12 100644 --- a/src/packages/address/customRender.tsx +++ b/src/packages/address/customRender.tsx @@ -2,7 +2,6 @@ import React, { FunctionComponent, useEffect, useState, useRef } from 'react' import Icon from '@/packages/icon' import bem from '@/utils/bem' import Elevator from '@/packages/elevator' -import './address.scss' import { RegionData } from './address' interface CustomRegionData { diff --git a/src/packages/address/doc.md b/src/packages/address/doc.md index 1070fa418947f560ea904ce86239063cd84a414e..5a686e05f8f7c03480e5deefc00b528548ff415c 100644 --- a/src/packages/address/doc.md +++ b/src/packages/address/doc.md @@ -1,8 +1,9 @@ -# Address组件 +# Address 地址 ### 介绍 -按需加载请加载对应依赖组件 Icon Popup Elevator +地址选择 + ### 安装 ``` javascript diff --git a/src/packages/address/existRender.tsx b/src/packages/address/existRender.tsx index f357bcc68bc612215a91a3426e5a6638bf8a7a68..2a452e49e3b7053d8405166163f6bdaa0c38515f 100644 --- a/src/packages/address/existRender.tsx +++ b/src/packages/address/existRender.tsx @@ -1,7 +1,6 @@ import React, { FunctionComponent, useEffect, useState, useRef } from 'react' import Icon from '@/packages/icon' import bem from '@/utils/bem' -import './address.scss' import { AddressList } from './address' export interface ExistRenderProps { diff --git a/src/packages/animatingnumbers/animatingnumbers.scss b/src/packages/animatingnumbers/animatingnumbers.scss index cf8cf84eb5cf391a72bb842e6f2ad90b39ce65d5..f1ea139942be8d5cd87c49f65d9bfd0cfe42f679 100644 --- a/src/packages/animatingnumbers/animatingnumbers.scss +++ b/src/packages/animatingnumbers/animatingnumbers.scss @@ -1,2 +1,3 @@ +@import '@/packages/animatingnumbers/countup.scss'; .nut-animatingnumbers { } diff --git a/src/packages/animatingnumbers/animatingnumbers.tsx b/src/packages/animatingnumbers/animatingnumbers.tsx index 82962ad38e532bab00c113276bd510b07b00fc96..fda0248e3223d594b25a7b4fa79cea9b2d3a4400 100644 --- a/src/packages/animatingnumbers/animatingnumbers.tsx +++ b/src/packages/animatingnumbers/animatingnumbers.tsx @@ -1,5 +1,4 @@ import React, { FunctionComponent, Component } from 'react' -import './animatingnumbers.scss' import { CountUp } from './countup' diff --git a/src/packages/animatingnumbers/countup.tsx b/src/packages/animatingnumbers/countup.tsx index 0658fe2cd0f4747ba76b6c7dbbe0d86e5e2d6a15..8a101b019f07c56532d0149f09946c71b6902009 100644 --- a/src/packages/animatingnumbers/countup.tsx +++ b/src/packages/animatingnumbers/countup.tsx @@ -1,5 +1,5 @@ import React, { CSSProperties, FunctionComponent, useEffect, useRef, useState } from 'react' -import './countup.scss' + import bem from '@/utils/bem' export interface CountUpProps { diff --git a/src/packages/animatingnumbers/doc.md b/src/packages/animatingnumbers/doc.md index 7df386416b32a012c4fa05c136e7b5d778b59592..6e2700ee1bd5ecfadeb839ad7b489d2fbb5b06cd 100644 --- a/src/packages/animatingnumbers/doc.md +++ b/src/packages/animatingnumbers/doc.md @@ -1,4 +1,4 @@ -# AnimatingNumbers 组件 +# AnimatingNumbers 数字动画 ### 介绍 diff --git a/src/packages/avatar/avatar.tsx b/src/packages/avatar/avatar.tsx index 266818350d629c2d8a7ab1acd26a1c1219b1f0ed..fd25b020b3ffdfa03d0bfcb401811c59b2969360 100644 --- a/src/packages/avatar/avatar.tsx +++ b/src/packages/avatar/avatar.tsx @@ -1,7 +1,6 @@ import React, { FunctionComponent, MouseEventHandler } from 'react' import Icon from '@/packages/icon' import classNames from 'classnames' -import './avatar.scss' export interface AvatarProps { size: AvatarSize diff --git a/src/packages/backtop/backtop.scss b/src/packages/backtop/backtop.scss index 7b13a88f289a570235b306ba80e389703b4cf96a..590ea1e3945fec36db7992bb79ec24efd878caef 100644 --- a/src/packages/backtop/backtop.scss +++ b/src/packages/backtop/backtop.scss @@ -1,3 +1,4 @@ +@import '../icon/icon.scss'; .nut-backtop { display: none; position: fixed; diff --git a/src/packages/backtop/backtop.tsx b/src/packages/backtop/backtop.tsx index b7de190591da1faf38077b26b18daeeeca14f9d7..36cb2b0c6e431b458a06cd35f98d1a1cb6e1af7f 100644 --- a/src/packages/backtop/backtop.tsx +++ b/src/packages/backtop/backtop.tsx @@ -1,14 +1,6 @@ -import React, { - FunctionComponent, - useLayoutEffect, - useEffect, - useState, - useRef, - CSSProperties, -} from 'react' -import './backtop.scss' -import Icon from '../icon' -import classNames from 'classnames' +import React, { FunctionComponent, useEffect, useState, CSSProperties } from 'react' + +import Icon from '@/packages/icon' declare const window: any export interface BackTopProps { className?: string diff --git a/src/packages/backtop/doc.md b/src/packages/backtop/doc.md index 62301bf55f2e2004ba43eb98a57117b8f63a870b..73a2b86a1a35f1b81e7389fbf368b4c19d307f1a 100644 --- a/src/packages/backtop/doc.md +++ b/src/packages/backtop/doc.md @@ -1,4 +1,4 @@ -# BackTop 组件 +# BackTop 返回顶部 ### 介绍 diff --git a/src/packages/badge/badge.tsx b/src/packages/badge/badge.tsx index cf3817069ea650c1a905101e4c2b68d9689e57b3..e688c58f721b89dffc02dabe704008e441cbf864 100644 --- a/src/packages/badge/badge.tsx +++ b/src/packages/badge/badge.tsx @@ -5,7 +5,7 @@ import React, { useEffect, useState, } from 'react' -import './badge.scss' + import Icon from '@/packages/icon' export interface BadgeProps { value: any diff --git a/src/packages/barrage/barrage.tsx b/src/packages/barrage/barrage.tsx index e13c474e4348c7bb3df66741ea0326c06f78d777..d4e53d9d7afd77480c58bff78e3c31aad07831f4 100644 --- a/src/packages/barrage/barrage.tsx +++ b/src/packages/barrage/barrage.tsx @@ -1,7 +1,6 @@ import React, { ForwardRefRenderFunction, useEffect, useRef, useImperativeHandle } from 'react' import classNames from 'classnames' import bem from '@/utils/bem' -import './barrage.scss' export interface BarrageProps { className: string diff --git a/src/packages/barrage/demo.scss b/src/packages/barrage/demo.scss index 6a08e1e92cb0b33e9fb8e79489da4d88df129a6f..80f865475ce6a6ad5438f06c0219efad9407490a 100644 --- a/src/packages/barrage/demo.scss +++ b/src/packages/barrage/demo.scss @@ -1,5 +1,5 @@ -.nut-cell, -.nut-barrage { +.barrage-demo-wrap, +.barrage-demo { padding: 20px 0; height: 150px; } diff --git a/src/packages/barrage/demo.tsx b/src/packages/barrage/demo.tsx index fa63a221e7102008e7e09a05f0ce668602785384..6e05140d7e8828a31e5f4fe380259112cfeb1d14 100644 --- a/src/packages/barrage/demo.tsx +++ b/src/packages/barrage/demo.tsx @@ -2,7 +2,7 @@ import React, { useRef } from 'react' import Cell from '@/packages/cell' import { Barrage } from './barrage' import Button from '@/packages/button' -import './demo.scss' +import './demo.scss?module' interface barrageRefState { add: (word: string) => void @@ -21,8 +21,8 @@ const BarrageDemo = () => { <>

基础用法

- - + +