From 9706d4aab9b71761732c4a45777601055d724e10 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Fri, 17 Jan 2025 18:51:06 +0800 Subject: [PATCH 01/14] feat: save my migrate progress --- src/sites/assets/styles/reset.scss | 14 +- src/sites/config/baseConfig.ts | 911 ++++++++++++++++++++ src/sites/config/env.ts | 32 +- src/sites/config/index.ts | 334 +++++++ src/sites/doc/components/header/header.scss | 660 ++++++++++++-- src/sites/doc/components/header/header.tsx | 210 ++++- src/sites/doc/components/nav/nav.scss | 42 +- src/sites/doc/components/nav/nav.tsx | 20 +- 8 files changed, 2104 insertions(+), 119 deletions(-) create mode 100644 src/sites/config/baseConfig.ts create mode 100644 src/sites/config/index.ts diff --git a/src/sites/assets/styles/reset.scss b/src/sites/assets/styles/reset.scss index 27725be407..ab756a77e4 100644 --- a/src/sites/assets/styles/reset.scss +++ b/src/sites/assets/styles/reset.scss @@ -54,7 +54,12 @@ video { margin: 0; padding: 0; border: 0; - font-family: PingFang SC, Microsoft YaHei, Helvetica, Hiragino Sans GB, SimSun, + font-family: + PingFang SC, + Microsoft YaHei, + Helvetica, + Hiragino Sans GB, + SimSun, sans-serif; -webkit-overflow-scrolling: touch; } @@ -94,6 +99,9 @@ table { -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; + &::-webkit-scrollbar { + display: none; + } } html, @@ -118,5 +126,7 @@ html, body { height: 100%; width: 100%; - background: #fff; +} +#doc { + overflow-x: hidden; } diff --git a/src/sites/config/baseConfig.ts b/src/sites/config/baseConfig.ts new file mode 100644 index 0000000000..049d954e10 --- /dev/null +++ b/src/sites/config/baseConfig.ts @@ -0,0 +1,911 @@ +// 抽象配置中心 + +import homefeatures1 from '../assets/images/img-home-features1.png'; +import homefeatures2 from '../assets/images/img-home-features2.png'; +import homefeatures3 from '../assets/images/img-home-features3.png'; +import homefeatures4 from '../assets/images/img-home-features4.png'; +import homefeatures5 from '../assets/images/img-home-features5.png'; + +// React 官网配置 +export const SiteReact = { + repository: { + git: 'https://github.com/jdf2e/nutui-react', + gitee: 'https://gitee.com/jd-platform-opensource/nutui-react', + releases: 'https://github.com/jdf2e/nutui-react/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui-react/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: '1.x', + link: '/' + }, + { + name: 'nutui-vue', + link: 'https://nutui.jd.com/' + } + ], + newHeader: [], + header: [ + { + name: 'intro-react,theme-react,start-react,international-react,contributing-react', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro-react', + pathName: 'intro-react' + }, + { + name: 'component', + cName: '组件', + eName: 'Components', + path: '/zh-CN/component/button', + pathName: '/zh-CN/component/button' + } + // { + // name: 'example', + // cName: '示例', + // path: 'demo.html' + // }, + // { + // name: '/zh-CN/case', + // cName: '案例', + // eName: 'Cases', + // path: '/zh-CN/case', + // pathName: 'case' + // }, + // { + // name: 'resource', + // cName: '资源', + // path: '/zh-CN/resource', + // pathName: '/zh-CN/resource' + // }, + // { + // name: 'notice', + // cName: '通知', + // path: '/zh-CN/notice', + // pathName: '/zh-CN/notice' + // }, + // { + // name: 'joinus', + // cName: '加入我们', + // path: '/zh-CN/guide/joinus', + // pathName: '/zh-CN/guide/joinus' + // } + ], + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui-react&type=star&count=true&size=large', + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'React Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '60+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + // { + // title: '贴心通道', + // desc: '社区维护 高效服务
技术支持 经验沉淀', + // url: homefeatures4 + // } + ], + // 是否展示taro楼层 + taroShow: true, + bizComponent: [], + cases: { + show: false + }, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'react' +}; +// React Taro 官网配置 +export const SiteReactTaro = { + repository: { + git: 'https://github.com/jdf2e/nutui-react', + gitee: '', + releases: 'https://github.com/jdf2e/nutui-react/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui-react/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: '1.x', + link: '/' + }, + { + name: 'nutui-vue', + link: 'https://nutui.jd.com/' + } + ], + newHeader: [], + header: [ + { + name: 'intro-react,theme-react,starttaro-react,international-react,contributing-react', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro-react', + pathName: 'intro-react' + }, + { + name: 'component', + cName: '组件', + eName: 'Components', + path: '/zh-CN/component/button', + pathName: '/zh-CN/component/button' + } + // { + // name: 'example', + // cName: '示例', + // path: 'demo.html' + // }, + // { + // name: '/zh-CN/case', + // cName: '案例', + // eName: 'Cases', + // path: '/zh-CN/case', + // pathName: 'case' + // }, + // { + // name: 'resource', + // cName: '资源', + // path: '/zh-CN/resource', + // pathName: '/zh-CN/resource' + // }, + // { + // name: 'notice', + // cName: '通知', + // path: '/zh-CN/notice', + // pathName: '/zh-CN/notice' + // }, + // { + // name: 'joinus', + // cName: '加入我们', + // path: '/zh-CN/guide/joinus', + // pathName: '/zh-CN/guide/joinus' + // } + ], + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui-react&type=star&count=true&size=large', + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'React Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '60+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + // { + // title: '贴心通道', + // desc: '社区维护 高效服务
技术支持 经验沉淀', + // url: homefeatures4 + // } + ], + // 是否展示taro楼层 + taroShow: true, + bizComponent: [], + cases: { + show: false + }, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'react' +}; +// React 官网配置 +export const SiteReactNative = { + repository: { + git: 'https://github.com/jdf2e/nutui-react-native', + gitee: 'https://gitee.com/jd-platform-opensource/nutui-react-native', + releases: 'https://github.com/jdf2e/nutui-react-native/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react-native&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui-react-native/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: 'nutui-react-native', + link: '/' + } + ], + newHeader: [], + header: [ + { + name: 'intro,theme,start,international,contributing', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro', + pathName: 'intro' + }, + { + name: 'component', + cName: '组件', + eName: 'Components', + path: '/zh-CN/component/button', + pathName: '/zh-CN/component/button' + } + ], + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui-react-native&type=star&count=true&size=large', + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'React Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '60+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + ], + // 是否展示taro楼层 + taroShow: true, + bizComponent: [], + cases: { + show: false + }, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'react' +}; + +// Vue 官网配置 +export const SiteVue = { + repository: { + git: 'https://github.com/jdf2e/nutui', + gitee: 'https://gitee.com/jd-platform-opensource/nutui', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + // 本地跑 dev:jdt 报错了,我先注释掉了,😂 + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: '1.x', + link: '/1x/' + }, + { + name: '2.x', + link: '/2x/' + }, + { + name: '3.x', + link: '/' + }, + { + name: 'nutui-jdl', + link: '/jdl/' + }, + { + name: 'nutui-react', + link: 'https://nutui.jd.com/react' + }, + { + name: 'nutui-jdt', + link: 'https://nutui.jd.com/jdt/' + } + ], + header: [ + { + name: 'intro-jdt,intro,theme,start,start-jdt,starttaro,international,ide,contributing,en-intro,en-start,en-starttaro,en-theme,en-international,en-ide,en-contributing,official-theme,migrate-from-v3', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro', + pathName: 'intro' + }, + { + name: 'component', + cName: '组件', + eName: 'Components', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + } + // { + // name: 'example', + // cName: '示例', + // path: 'demo.html' + // }, + // { + // name: '/zh-CN/case', + // cName: '案例', + // eName: 'Cases', + // path: '/zh-CN/case', + // pathName: 'case' + // }, + // { + // name: 'resource', + // cName: '资源', + // eName: 'Resource', + // path: '/zh-CN/resource', + // pathName: '/zh-CN/resource' + // }, + // { + // name: 'notice', + // cName: '通知', + // eName: 'Notice', + // path: '/zh-CN/notice', + // pathName: '/zh-CN/notice' + // }, + // { + // name: 'joinus', + // cName: '加入我们', + // eName: 'Join us', + // path: '/zh-CN/guide/joinus', + // pathName: '/zh-CN/guide/joinus' + // } + ], + + newHeader: [ + { + name: 'component', + cName: '基础组件', + eName: 'Components', + key: '1', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + }, + { + name: 'component', + cName: '高级组件', + eName: 'Components', + key: '2', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + }, + { + name: 'intro-jdt,intro,theme,start,start-jdt,starttaro,international,ide,contributing,en-intro,en-start,en-starttaro,en-theme,en-international,en-ide,en-contributing', + cName: '资源', + eName: 'Guide', + key: '3', + path: '/zh-CN/resource', + pathName: '/zh-CN/resource', + url: '#/resource' + }, + // { + // name: 'joinus', + // cName: '贡献指南', + // eName: 'Contribution Guidelines', + // key: '4', + // path: '/zh-CN/joinus', + // pathName: '/zh-CN/joinus', + // url: 'https://nutui.jd.com/#/zh-CN/guide/contributing' + // }, + { + name: 'joinus', + cName: '加入我们', + eName: 'Join us', + key: '5', + path: '/zh-CN/joinus', + pathName: '/zh-CN/joinus', + url: '#/joinus' + } + ], + // 官网 首页 + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui&type=star&count=true&size=large', + // 平台资源楼层 + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'Vue3 Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '70+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + // { + // title: '贴心通道', + // desc: '社区维护 高效服务
技术支持 经验沉淀', + // url: homefeatures4, + // }, + ], + // 是否展示taro楼层 + taroShow: true, + // 是否展示 业务组件 + bizComponent: [ + { + title: 'cat', + desc: '基于 NutUI 的大促组件', + release: true + }, + { + title: 'bingo', + desc: '基于 NutUI 的抽奖组件', + release: false + } + ], + // 应用案例 + cases: { + show: true, + moreRouter: '#/zh-CN/case' + }, + //是否展示二维码 + qrcodeShow: true, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'vue' +}; +export const SiteVueTaro = { + repository: { + git: 'https://github.com/jdf2e/nutui', + gitee: 'https://gitee.com/jd-platform-opensource/nutui', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + // 本地跑 dev:jdt 报错了,我先注释掉了,😂 + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: '1.x', + link: '/1x/' + }, + { + name: '2.x', + link: '/2x/' + }, + { + name: '3.x', + link: '/' + }, + { + name: 'nutui-jdl', + link: '/jdl/' + }, + { + name: 'nutui-react', + link: 'https://nutui.jd.com/react' + }, + { + name: 'nutui-jdt', + link: 'https://nutui.jd.com/jdt/' + } + ], + header: [ + { + name: 'intro-jdt,intro,theme,start,start-jdt,starttaro,international,ide,contributing,en-intro,en-start,en-starttaro,en-theme,en-international,en-ide,en-contributing,,official-theme,migrate-from-v3', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro', + pathName: 'intro' + }, + { + name: 'component', + cName: '组件', + eName: 'Component', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + } + // { + // name: 'example', + // cName: '示例', + // path: 'demo.html' + // }, + // { + // name: '/zh-CN/case', + // cName: '案例', + // eName: 'Cases', + // path: '/zh-CN/case', + // pathName: 'case' + // }, + // { + // name: 'resource', + // cName: '资源', + // eName: 'Resource', + // path: '/zh-CN/resource', + // pathName: '/zh-CN/resource' + // }, + // { + // name: 'notice', + // cName: '通知', + // eName: 'Notice', + // path: '/zh-CN/notice', + // pathName: '/zh-CN/notice' + // }, + // { + // name: 'joinus', + // cName: '加入我们', + // eName: 'Join us', + // path: '/zh-CN/guide/joinus', + // pathName: '/zh-CN/guide/joinus' + // } + ], + + newHeader: [ + { + name: 'component', + cName: '生态产品', + eName: 'Components', + key: '1', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + }, + { + name: 'intro-jdt,intro,theme,start,start-jdt,starttaro,international,ide,contributing,en-intro,en-start,en-starttaro,en-theme,en-international,en-ide,en-contributing', + cName: '资源', + eName: 'Guide', + key: '2', + path: '/zh-CN/guide/intro', + pathName: 'intro', + url: 'https://nutui.jd.com/#/zh-CN/resource' + }, + { + name: '/zh-CN/case', + cName: '案例', + eName: 'Cases', + path: '/zh-CN/case', + pathName: 'case', + key: '3', + url: '/h5/vue/4x/#/zh-CN/case' + }, + { + name: 'joinus', + cName: '加入我们', + eName: 'Join us', + key: '4', + path: '/zh-CN/guide/joinus', + pathName: '/zh-CN/guide/joinus', + url: 'https://nutui.jd.com/#/zh-CN/guide/joinus' + } + ], + // 官网 首页 + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui&type=star&count=true&size=large', + // 平台资源楼层 + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'Vue3 Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '70+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + // { + // title: '贴心通道', + // desc: '社区维护 高效服务
技术支持 经验沉淀', + // url: homefeatures4, + // }, + ], + // 是否展示taro楼层 + taroShow: true, + // 是否展示 业务组件 + bizComponent: [ + { + title: 'cat', + desc: '基于 NutUI 的大促组件', + release: true + }, + { + title: 'bingo', + desc: '基于 NutUI 的抽奖组件', + release: false + } + ], + // 应用案例 + cases: { + show: true, + moreRouter: '#/zh-CN/case' + }, + //是否展示二维码 + qrcodeShow: true, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'vue' +}; + +// Vue JDT 官网配置 +export const SiteJDT = { + repository: { + git: 'https://github.com/jdf2e/nutui', + gitee: 'https://gitee.com/jd-platform-opensource/nutui', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + newRepository: { + git: 'https://github.com/jdf2e', + gitee: 'https://gitee.com/jd-platform-opensource', + releases: 'https://github.com/jdf2e/nutui/releases', // git 更新日志 + issues: 'https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui&lang=zh-cn', + discussions: 'https://github.com/jdf2e/nutui/discussions', + plan: 'https://github.com/jdf2e/nutui/projects/1' + }, + versions: [ + { + name: '1.x', + link: '/1x/' + }, + { + name: '2.x', + link: '/2x/' + }, + { + name: '3.x', + link: '/' + }, + { + name: 'nutui-jdl', + link: '/jdl/' + }, + { + name: 'nutui-react', + link: 'https://nutui.jd.com/react' + }, + { + name: 'nutui-jdt', + link: 'https://nutui.jd.com/jdt/' + } + ], + + docs: { + name: '指南', + packages: [ + { + name: 'intro-jdt', + cName: '介绍', + eName: 'Introduction', + show: true + }, + { + name: 'start-jdt', + cName: '快速上手', + eName: 'Quickstart', + show: true + }, + { + name: 'starttaro-jdt', + cName: '小程序开发', + eName: 'WeChat', + show: true + }, + { + name: 'theme', + cName: '主题定制', + eName: 'Customize Theme', + show: true + }, + { + name: 'international', + cName: '国际化', + eName: 'Internationalization', + show: true + }, + { + name: 'ide', + cName: '开发工具支持', + eName: 'IDE tool support', + show: true + }, + { + name: 'contributing', + cName: '贡献指南', + eName: 'Contributing', + path: '#/contributing', + show: true + }, + { + name: 'https://github.com/jdf2e/nutui/releases', + cName: '更新日志', + eName: 'Changelog', + show: true, + isLink: true + } + ] + }, + newHeader: [], + header: [ + { + name: 'intro-jdt,intro,theme,start,start-jdt,starttaro,international,ide,contributing', + cName: '指南', + eName: 'Guide', + path: '/zh-CN/guide/intro-jdt', + pathName: 'intro-jdt' + }, + { + name: 'component', + cName: '组件', + eName: 'Components', + path: '/zh-CN/component/button', + pathName: 'zh-CN/component/button' + }, + { + name: '/zh-CN/case', + cName: '案例', + eName: 'Cases', + path: '/zh-CN/case', + pathName: 'case' + }, + { + name: 'resource', + cName: '资源', + eName: 'Resource', + path: '/zh-CN/resource', + pathName: '/zh-CN/resource' + } + ], + // 官网 首页 + homePage: { + gitstar: 'https://ghbtns.com/github-btn.html?user=jdf2e&repo=nutui&type=star&count=true&size=large', + // 平台资源楼层 + platform: [ + { + title: '京东风格', + desc: '遵循京东 App 10.0 设计规范', + url: homefeatures1 + }, + { + title: '前沿技术', + desc: 'Vue3 Vite 2.x TypeScript', + url: homefeatures3 + }, + { + title: '适配多端', + desc: '基于 Taro 轻松开发多端小程序', + url: homefeatures5 + }, + { + title: '组件丰富', + desc: '70+ 组件,覆盖多数业务场景', + url: homefeatures2 + } + ], + // 是否展示taro楼层 + taroShow: true, + // 是否展示 业务组件 + bizComponent: [ + { + title: 'cat', + desc: '基于 NutUI 的大促组件', + release: true + }, + { + title: 'bingo', + desc: '基于 NutUI 的抽奖组件', + release: false + } + ], + // 应用案例 + cases: { + show: true, + moreRouter: '#/zh-CN/case' + }, + //是否展示二维码 + qrcodeShow: true, + // 学习资源 + article: { + show: true, + moreRouter: '#/zh-CN/resource' + } + }, + language: 'vue', + demoUrl: 'https://nutui.jd.com/jdt/demo.html#' +}; + +// Vue JDB 官网配置 +export const SiteJDB = SiteVue; +// Vue JDDKH 官网配置 +export const SiteJDDKH = SiteVue; diff --git a/src/sites/config/env.ts b/src/sites/config/env.ts index e2d86f54d4..930aa30c2c 100644 --- a/src/sites/config/env.ts +++ b/src/sites/config/env.ts @@ -1,9 +1,7 @@ type EnvConfig = { - baseUrl: string - themeUrl: string - isPrd: boolean - locales: string[] -} + baseUrl: string; + isPrd: boolean; +}; /** * 配置编译环境和线上环境之间的切换 @@ -14,26 +12,22 @@ type EnvConfig = { const config: EnvConfig = { baseUrl: '', - themeUrl: '', - isPrd: true, // 是否为线上 - locales: ['zh-CN', 'zh-TW', 'en-US', 'th'], -} -switch (import.meta.env.MODE) { + isPrd: true // 是否为线上 +}; +switch ((import.meta as any).env.MODE) { case 'development': /* * 开发环境 => npm run dev */ - config.isPrd = false - config.baseUrl = '/devServer' - config.themeUrl = '/theme-react/dist/theme-react/source' - break + config.isPrd = false; + config.baseUrl = '/devServer'; + break; case 'production': /* * 线上环境 => npm run build */ - config.isPrd = true - config.baseUrl = 'https://nutui.jd.com' - config.themeUrl = './source' - break + config.isPrd = true; + config.baseUrl = 'https://nutui.jd.com'; + break; } -export default config +export default config; diff --git a/src/sites/config/index.ts b/src/sites/config/index.ts new file mode 100644 index 0000000000..081515718c --- /dev/null +++ b/src/sites/config/index.ts @@ -0,0 +1,334 @@ +import reactConfig from '../../config.json'; +import { + SiteReact, + SiteReactTaro, + SiteVue, + SiteVueTaro, + SiteJDB, + SiteJDT, + SiteJDDKH, + SiteReactNative +} from './baseConfig'; +import ReactConfig from '../../config.json'; + +let config: any = {}; + +const guide = [ + { + type: 'Vue', + icon: 'https://img11.360buyimg.com/imagetools/jfs/t1/221256/40/8490/1929/61d64810Ec6a88d27/99270cce560545d5.png', + data: [ + { + link: '/h5/vue/4x/', + language: ['Vue3'], + app: 'App 10.0' + }, + { + name: '3.x', + link: '/3x/', + language: ['Vue3'], + app: 'App 10.0' + } + ] + } + + // { + // type: 'React', + // icon: 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + // data: [ + // { + // name: '1.x', + // link: 'https://nutui.jd.com/react', + // language: ['React18'], + // app: 'App 10.0' + // } + // ] + // } +]; + + +const moreGuide = [ + { + type: { + cName: '基础组件', + eName: 'Basic Component' + }, + icon: '', + datas: [ + { + plat: { + cName: 'H5', + eName: 'H5' + }, + data: [ + { + name: 'NutUI-Vue', + link: '/h5/vue/4x/#/zh-CN/guide/intro', + language: ['Vue3'], + app: 'App 10.0' + }, + { + name: 'NutUI-React', + link: '/h5/react/2x/#/zh-CN/guide/intro-react', + language: ['React18'], + app: 'App 10.0' + } + ] + }, + { + plat: { + cName: '小程序', + eName: 'Applets' + }, + data: [ + { + name: 'NutUI-Vue', + link: '/taro/vue/4x/#/zh-CN/guide/intro', + language: ['Vue3', 'Taro'], + app: 'App 10.0' + }, + { + name: 'NutUI-React', + link: '/taro/react/2x/#/zh-CN/guide/intro-react', + language: ['React18', 'Taro'], + app: 'App 10.0' + }, + { + name: 'NutUI-Uni', + link: 'https://ext.dcloud.net.cn/search?q=nutui', + language: ['Vue3', 'uni-app'], + app: 'App 10.0' + } + ] + } + ] + }, + { + type: { + cName: '高级组件', + eName: 'Advanced Component' + }, + icon: '', + datas: [ + { + data: [ + { + name: 'NutUI-Biz', + link: '/biz/h5/react/1x/#/zh-CN/guide/intro', + language: ['React'], + app: 'App 10.0' + }, + { + name: 'NutUI-Bingo', + link: '/bingo/index.html#/', + language: ['Vue3', 'Taro'], + app: 'App 10.0' + }, + { + name: 'NutUI-Cat', + link: '/cat/index.html#/', + language: ['Vue2'], + app: 'App 10.0' + } + ] + } + ] + } +]; + +const reactGuide = [ + { + type: 'React', + icon: 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + data: [ + { + name: '3x', + link: '/h5/react/3x/', + language: ['React18'], + app: 'App 10.0' + }, + { + name: '2x', + link: '/h5/react/2x/', + language: ['React18'], + app: 'App 10.0' + }, + { + name: '1.x', + link: '/h5/react/1x/', + language: ['React18'], + app: 'App 10.0' + } + ] + } +]; + +const reactTaroGuide = [ + { + type: 'React', + icon: 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + data: [ + { + name: ReactConfig.version, + link: '/taro/react/3x/', + language: ['React18', 'Taro'], + app: 'App 10.0' + }, + { + name: '2x', + link: '/taro/react/2x/', + language: ['React18', 'Taro'], + app: 'App 10.0' + }, + { + name: '1.x', + link: '/taro/react/1x/', + language: ['React18', 'Taro'], + app: 'App 10.0' + } + ] + } +]; + +const reactNativeGuide = [ + { + type: 'React Native', + icon: 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + data: [ + { + name: '0.x', + link: '/react-native/', + language: ['React18'], + app: 'App 10.0' + } + ] + } +]; + +const businessGuide = [ + { + data: [ + { + name: 'NutUI-Biz', + link: '/biz/h5/react/1x/#/zh-CN/guide/intro', + language: ['React'] + }, + { + name: 'NutUI-Bingo', + link: '/bingo/index.html#/', + language: ['Vue3', 'Taro'] + }, + { + name: 'NutUI-Cat', + link: '/cat/index.html#/', + language: ['Vue2'] + } + ] + } + + // { + // type: 'React', + // icon: 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + // data: [ + // { + // name: '1.x', + // link: 'https://nutui.jd.com/react', + // language: ['React18'], + // app: 'App 10.0' + // } + // ] + // } +]; + +const products = [ + { + type: 'React', + data: [ + { + name: 'NutUI React', + icon: + 'https://img12.360buyimg.com/imagetools/jfs/t1/192500/27/37524/4524/649d5065F7e5fbef6/afe567692acba3b0.png', + status: 1, + link: '/h5/react/3x/#/zh-CN/guide/intro-react' + }, + { + name: 'NutUI React Taro', + icon: + 'https://img13.360buyimg.com/imagetools/jfs/t1/169186/5/33010/1762/639703a1E898bcb96/6c372c661c6dddfe.png', + status: 1, + link: '/taro/react/3x/#/zh-CN/guide/intro-react' + }, + { + name: 'NutUI React Native', + icon: + 'https://img10.360buyimg.com/imagetools/jfs/t1/93992/33/35657/10303/63c0fddbFa8977e27/8d099681ad788fc8.png', + status: 1, + link: 'https://nutui.jd.com/react-native/#/zh-CN/guide/intro' + } + ] + }, + { + type: 'Vue', + data: [ + { + name: 'NutUI Vue', + icon: + 'https://img12.360buyimg.com/imagetools/jfs/t1/192500/27/37524/4524/649d5065F7e5fbef6/afe567692acba3b0.png', + status: 1, + link: '/h5/vue/4x/#/zh-CN/guide/intro' + }, + { + name: 'NutUI Vue Taro', + icon: + 'https://img13.360buyimg.com/imagetools/jfs/t1/169186/5/33010/1762/639703a1E898bcb96/6c372c661c6dddfe.png', + status: 1, + link: '/taro/vue/4x/#/zh-CN/guide/intro' + }, + { + name: 'NutUI uniapp', + icon: 'https://img13.360buyimg.com/imagetools/jfs/t1/113716/40/39920/321/64c3764dF986d8400/f4474acb3a73c055.png', + status: 1, + link: 'https://ext.dcloud.net.cn/search?q=nutui' + } + ] + } +]; +if ((import.meta as any).env.BASE_URL.includes('react')) { + config = { + ...reactConfig, + ...SiteReact + }; +} else { + let siteconfig = SiteVue; + + + config = { + ...siteconfig + }; +} + +export const { + nav, + docs, + version, + demoUrl, + homePage, + versions, + newHeader, + header, + language, + repository, + newRepository +} = config; +export { + guide, + moreGuide, + reactGuide, + reactTaroGuide, + reactNativeGuide, + businessGuide, + products, + SiteVueTaro, + SiteReactTaro, + SiteReactNative, +}; diff --git a/src/sites/doc/components/header/header.scss b/src/sites/doc/components/header/header.scss index b0cb6f2c24..03e7d7624f 100644 --- a/src/sites/doc/components/header/header.scss +++ b/src/sites/doc/components/header/header.scss @@ -1,7 +1,29 @@ +.v3-banner { + position: fixed; + top: 0; + transition: all 0.3s; + > a { + color: #fff; + font-weight: bold; + } + font-size: 14px; + width: 100%; + z-index: 999; + text-align: center; + padding: 10px 60px; + color: #fff; + background: linear-gradient( + 135deg, + rgba(242, 20, 12, 1) 0%, + rgba(232, 34, 14, 1) 69.83950099728881%, + rgba(242, 77, 12, 1) 100% + ); +} .doc { &-header { - z-index: 2; - top: 0; + // position: fixed; + z-index: 9999; + top: 0px; left: 0; right: 0; min-width: 1300px; @@ -21,26 +43,49 @@ display: inline-block; width: 240px; height: 64px; + margin-left: -30px; .logo-link { - width: 120px; + width: 110px !important; height: 46px; vertical-align: middle; position: absolute; top: 50%; margin-top: -23px; + cursor: pointer; + + &.react { + width: 160px !important; + } + &.jdb, + &.jddkh { + width: 180px; + } } .logo-border { width: 1px; height: 26px; position: absolute; - right: 0; + right: -30px !important; top: 50%; margin-top: -13px; } .version { position: absolute; - right: 70px; - font-size: 14px; + right: 40px; + font-size: 16px !important; + color: #fa2c19; + + &.taro { + right: 30px; + } + + &.react { + right: 20px; + + &.taro { + right: 5px; + } + } } } &-nav { @@ -50,18 +95,15 @@ float: right; width: calc(100% - 240px); min-width: 900px; - padding: 0 40px; - > a { - color: #fff; - } + padding-left: 40px; .nav-box { - margin-right: 140px; .nav-list { + position: relative; min-width: 490px; display: flex; list-style: none; align-items: center; - justify-content: space-around; + justify-content: flex-end; } .nav-item { position: relative; @@ -76,6 +118,7 @@ display: inline-block; line-height: 64px; } + // overflow: hidden; &.active { font-weight: bold; &:after { @@ -87,7 +130,7 @@ bottom: 3px; left: 50%; margin-left: -17.5px; - background: url('../../assets/images/item-active.png'); + background: url('@/assets/images/item-active.png'); } } &:last-of-type { @@ -100,12 +143,12 @@ height: 26px; vertical-align: middle; background-repeat: no-repeat; - background-image: url('../../assets/images/icon-user.png'); + background-image: url('../../../assets/images/icon-user.png'); background-size: 26px; &.gitee { margin-left: 8px; - background-image: url('../../assets/images/icon-gitee.png'); + background-image: url('../../../assets/images/icon-gitee.png'); } } } @@ -154,14 +197,32 @@ } // 颜色 .doc-header { + .link-title:hover { + cursor: pointer; + } + // 红色 &-red { background-image: $theme-red-header-bg; color: $theme-red-word; .header { &-logo { .logo-link { - background: url('../../../assets/images/logo-header-white.png') - no-repeat center/100%; + background: url('@/assets/images/logo-header-white.png') no-repeat + center/100%; + &.react { + background: url('@/assets/images/logo-header-white-react.png') + no-repeat center/100%; + } + &.jdb { + background: url('https://img10.360buyimg.com/imagetools/jfs/t1/23011/31/12900/11114/64257a3cF018c7f3b/3574c5a9ae4d1040.png') + no-repeat center/100%; + width: 180px !important; + } + &.jddkh { + background: url('https://img14.360buyimg.com/imagetools/jfs/t1/132257/25/35572/4472/64257a3cFff3e161d/7010593eb1334f46.png') + no-repeat center/100%; + width: 180px !important; + } } .logo-border { background: $theme-red-border; @@ -195,20 +256,133 @@ } .user-link { background-position: 0 0; + // &:hover { + // background-position: -26px 0; + // } } } } } .header-select { &-box { + position: relative; &.select-down { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-down.png'); + background-image: url('@/assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-up.png'); + background-image: url('@/assets/images/icon-select-white-up.png'); + } + } + .guild-line { + position: absolute; + height: 20px; + width: 77px; + right: 0%; + background: transparent; + } + .guid-data { + position: absolute; + top: 40px; + right: 0%; + margin-left: -60px; + border-radius: 3px; + overflow: hidden; + padding-left: 29px; + padding-right: 29px; + width: 336px; + background: #2c2c2c; + border: 1px solid #5e5e5e; + border-radius: 12px; + z-index: 3; + .info { + padding-top: 16px; + padding-bottom: 22px; + &:first-child { + border-bottom: 1px solid #5e5e5e; + padding-bottom: 10px; + } + .header { + display: flex; + align-items: center; + justify-content: flex-start; + line-height: 24px; + .icon { + width: 22px; + height: 19px; + margin-right: 9px; + } + } + .content { + padding-top: 6px; + padding-bottom: 6px; + display: flex; + align-items: center; + justify-content: space-between; + line-height: 24px; + margin-top: 2px; + margin-bottom: 2px; + border-radius: 4px; + &.active { + background-color: rgba(255, 255, 255, 0.2); + } + &:hover { + background-color: rgba(255, 255, 255, 0.06); + } + .version { + width: 91px; + text-align: center; + } + .list { + width: 95px; + height: 24px; + align-items: center; + justify-content: flex-start; + display: flex; + .lang { + height: 24px; + background: rgba(65, 184, 131, 0.16); + border-radius: 4px; + margin-right: 4px; + &:nth-child(2) { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + .name { + padding-left: 6px; + padding-right: 6px; + font-size: 14px; + font-family: PingFangSC; + font-weight: normal; + color: #41b883; + } + } + } + .app { + display: flex; + justify-content: flex-start; + width: 64px; + margin-left: 18px; + margin-right: 19px; + } + } + } + .contentKey { + @extend .info; + .content { + .list { + .lang { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + } + } } } } @@ -228,6 +402,7 @@ } } } + // 白色 &-white { background: $white; color: $theme-white-word; @@ -235,8 +410,22 @@ .header { &-logo { .logo-link { - background: url('../../assets/images/logo-header-red.png') no-repeat + background: url('@/assets/images/logo-header-red.png') no-repeat center/100%; + &.react { + background: url('https://img14.360buyimg.com/imagetools/jfs/t1/124864/1/33144/4732/63a97786F51517a97/a9ca3c1e043ceeb4.png') + no-repeat center/100%; + } + &.jdb { + background: url('https://img10.360buyimg.com/imagetools/jfs/t1/23011/31/12900/11114/64257a3cF018c7f3b/3574c5a9ae4d1040.png') + no-repeat center/100%; + width: 180px !important; + } + &.jddkh { + background: url('https://img14.360buyimg.com/imagetools/jfs/t1/132257/25/35572/4472/64257a3cFff3e161d/7010593eb1334f46.png') + no-repeat center/100%; + width: 180px !important; + } } .logo-border { background: $theme-white-border; @@ -270,20 +459,133 @@ } .user-link { background-position: 0 -25px; + // &:hover { + // background-position: -26px -25px; + // } } } } } .header-select { &-box { + position: relative; &.select-down { .header-select-hd { - background-image: url('../../assets/images/icon-select-gray-down.png'); + background-image: url('@/assets/images/icon-select-gray-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../assets/images/icon-select-gray-up.png'); + background-image: url('@/assets/images/icon-select-gray-up.png'); + } + } + .guild-line { + position: absolute; + right: 0%; + height: 20px; + width: 77px; + background: transparent; + } + .guid-data { + position: absolute; + top: 40px; + right: 0%; + margin-left: -60px; + border-radius: 3px; + overflow: hidden; + padding-left: 29px; + padding-right: 29px; + width: 336px; + background: $theme-white; + border: 1px solid $theme-white-select-border; + border-radius: 12px; + z-index: 3; + .info { + padding-top: 16px; + padding-bottom: 22px; + &:first-child { + border-bottom: 1px solid #5e5e5e; + padding-bottom: 10px; + } + .header { + display: flex; + align-items: center; + justify-content: flex-start; + line-height: 24px; + .icon { + width: 22px; + height: 19px; + margin-right: 9px; + } + } + .content { + padding-top: 6px; + padding-bottom: 6px; + display: flex; + align-items: center; + justify-content: space-between; + line-height: 24px; + margin-top: 2px; + margin-bottom: 2px; + border-radius: 4px; + &.active { + background-color: rgba(0, 0, 0, 0.06); + } + &:hover { + background-color: rgba(0, 0, 0, 0.02); + } + .version { + width: 91px; + text-align: center; + } + .list { + width: 95px; + height: 24px; + align-items: center; + justify-content: flex-start; + display: flex; + .lang { + height: 24px; + background: rgba(65, 184, 131, 0.16); + border-radius: 4px; + margin-right: 4px; + &:nth-child(2) { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + .name { + padding-left: 6px; + padding-right: 6px; + font-size: 14px; + font-family: PingFangSC; + font-weight: normal; + color: #41b883; + } + } + } + .app { + display: flex; + justify-content: flex-start; + width: 64px; + margin-left: 18px; + margin-right: 19px; + } + } + } + .contentKey { + @extend .info; + .content { + .list { + .lang { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + } + } } } } @@ -303,6 +605,7 @@ } } } + // 黑色 &-black { background: $black; color: $theme-black-word; @@ -310,8 +613,22 @@ .header { &-logo { .logo-link { - background: url('../../assets/images/logo-header-red.png') no-repeat + background: url('@/assets/images/logo-header-red.png') no-repeat center/100%; + &.react { + background: url('https://img14.360buyimg.com/imagetools/jfs/t1/124864/1/33144/4732/63a97786F51517a97/a9ca3c1e043ceeb4.png') + no-repeat center/100%; + } + &.jdb { + background: url('https://img10.360buyimg.com/imagetools/jfs/t1/23011/31/12900/11114/64257a3cF018c7f3b/3574c5a9ae4d1040.png') + no-repeat center/100%; + width: 180px !important; + } + &.jddkh { + background: url('https://img14.360buyimg.com/imagetools/jfs/t1/132257/25/35572/4472/64257a3cFff3e161d/7010593eb1334f46.png') + no-repeat center/100%; + width: 180px !important; + } } .logo-border { background: $theme-black-border; @@ -345,6 +662,9 @@ } .user-link { background-position: 0 -51px; + // &:hover { + // background-position: -26px -51px; + // } } } } @@ -353,12 +673,121 @@ &-box { &.select-down { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-down.png'); + background-image: url('@/assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-up.png'); + background-image: url('@/assets/images/icon-select-white-up.png'); + } + } + .guild-line { + position: absolute; + height: 20px; + right: 0%; + width: 77px; + background: transparent; + } + .guid-data { + position: absolute; + top: 40px; + right: 0%; + margin-left: -60px; + border-radius: 3px; + overflow: hidden; + padding-left: 29px; + padding-right: 29px; + width: 336px; + background: #2c2c2c; + border: 1px solid #5e5e5e; + border-radius: 12px; + z-index: 3; + .info { + padding-top: 16px; + padding-bottom: 22px; + &:first-child { + border-bottom: 1px solid #5e5e5e; + padding-bottom: 10px; + } + .header { + display: flex; + align-items: center; + justify-content: flex-start; + line-height: 24px; + .icon { + width: 22px; + height: 19px; + margin-right: 9px; + } + } + .content { + padding-top: 6px; + padding-bottom: 6px; + display: flex; + align-items: center; + justify-content: space-between; + line-height: 24px; + margin-top: 2px; + margin-bottom: 2px; + border-radius: 4px; + &.active { + background-color: rgba(255, 255, 255, 0.2); + } + &:hover { + background-color: rgba(255, 255, 255, 0.06); + } + .version { + width: 91px; + text-align: center; + } + .list { + width: 95px; + height: 24px; + align-items: center; + justify-content: flex-start; + display: flex; + .lang { + height: 24px; + background: rgba(65, 184, 131, 0.16); + border-radius: 4px; + margin-right: 4px; + &:nth-child(2) { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + .name { + padding-left: 6px; + padding-right: 6px; + font-size: 14px; + font-family: PingFangSC; + font-weight: normal; + color: #41b883; + } + } + } + .app { + display: flex; + justify-content: flex-start; + width: 64px; + margin-left: 18px; + margin-right: 19px; + } + } + } + .contentKey { + @extend .info; + .content { + .list { + .lang { + background: rgba(116, 201, 255, 0.16); + .name { + color: #74c9ff; + } + } + } + } } } } @@ -381,40 +810,167 @@ } } } -.nut-popover { - height: 100%; - position: relative; +// 下拉列表选择动画效果 +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.5s; } -.curr-lang { - display: block; - font-size: 12px; +.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { + opacity: 0; } -.switch { - position: absolute; - right: 60px; - top: 0; - height: 100%; - width: 150px; - cursor: pointer; - .nut-popover--dark { +.site-guid-data { + // display: block !important; + line-height: normal; + position: absolute; + z-index: 10; + top: 60px; + left: -180px; + padding: 20px; + width: 450px; + background: #2c2c2c; + border: 1px solid #5e5e5e; + border-radius: 12px; + font-size: 14px; + color: #fff; + .site-guid-data-arrow { + position: absolute; + width: 100px; + height: 30px; + top: -26px; + left: 37%; + cursor: pointer; + } + .info { + // &:first-child { + // border-bottom: 1px solid #5e5e5e; + // } + .header { + line-height: 24px; + border-bottom: 1px solid #514c4c; + .type { + padding: 10px; + } + } + } + .product-type { + overflow: hidden; width: 100%; - margin-right: 0; - background: transparent; - text-align: center; + display: flex; + justify-content: flex-start; + flex-wrap: wrap; } - .title-item { - height: 30px; + .content-disabled { + &:hover { + cursor: not-allowed !important; + } + } + .content { + width: 200px; + display: flex; + align-items: center; + padding: 15px 10px; + transition: all linear 0.2s; + &:hover { + background-color: rgba(88, 88, 88, 0.8); + cursor: pointer; + } + .item-logo { + width: 30px; + height: 30px; + margin-right: 10px; + img { + width: 100%; + height: 100%; + } + } + .name { + color: #fff; + } + .status { + display: inline-block; + font-size: 12px; + padding: 3px 6px; + color: #fff; + background: linear-gradient(119deg, #00b2bd 11%, #2ceb85 55%); + transform: scale(0.8); + border-radius: 10px; + } + .infor-disabled { + background: gray; + cursor: not-allowed; + } + .infor-goline { + background: linear-gradient(315deg, #6772ff 0, #00f9e5 100%); + } + .infor-child-name { + display: inline-block; + padding: 3px 6px; + margin-left: 2px; + font-size: 12px; + color: #00b2bd; + border: 1px solid #00b2bd; + border-radius: 10px; + transform: scale(0.8); + + &:hover { + color: #2ceb85; + border-color: #2ceb85; + background-color: rgba(0, 178, 189, 0.5); + cursor: pointer; + } + } + .version { + margin-top: 6px; + font-size: 12px; + } } + // .child-content { + // width: 100%; + // } } -.switch-content { - position: relative; +.guid-data-business { + top: 60px !important; + left: -80px !important; + + .content.disabled { + opacity: 0.5; + cursor: not-allowed; + } } -// 下拉列表选择动画效果 -.fade-enter-active, -.fade-leave-active { - transition: opacity 0.5s; +.nav-item-title { + display: flex !important; + align-items: center; + .hover-arrow { + width: 10px; + height: 8px; + transition: all linear 0.2s; + margin-left: 5px; + } } -.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { - opacity: 0; +.header { + font-weight: bold; + font-size: 16px; +} +.plat { + text-align: left; + line-height: normal; + font-weight: bold; + margin-top: 5px; + margin-left: 10px; +} +.list { + width: 120px; + + .lang .name { + font-size: 12px !important; + } +} +.content { + font-size: 12px; + + .version { + margin-left: 20px; + text-align: left !important; + } } diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 38aaf7af8b..10ae97f43c 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -1,15 +1,28 @@ import React, { useEffect, useState } from 'react' -import { nav } from '@/config.json' // @ts-ignore import { version } from '/package.json' -import config from '@/sites/config/env' +import config from '../../../config/env' import './header.scss' import { useNavigate, useLocation } from 'react-router-dom' - +import { + SiteVueTaro, + SiteReactTaro, + header, + versions, + nav, + repository, + language, + guide as vueGuide, + reactGuide, + reactTaroGuide, + moreGuide, + businessGuide, + products, +} from '../../../config/index' const Header = () => { const navigate = useNavigate() const location = useLocation() - const [currLang, setCurrLang] = useState({}) + const [currLang, setCurrLang] = useState({}) const toHome = () => { navigate('/') @@ -27,15 +40,15 @@ const Header = () => { (l) => location.pathname.indexOf(l.locale) > -1 )[0] setCurrLang(lang) + console.log(lang) }, [location]) const langs = [ { name: '中文', locale: 'zh-CN' }, - { name: '中文(繁体)', locale: 'zh-TW' }, { name: 'English', locale: 'en-US' }, - { name: 'Thai', locale: 'th' }, ] - + const isZh = currLang.locale == 'zh-CN' + const toLink = (item: any) => {} const [visible, setVisible] = useState(false) const handleSwitchLocale = (e: any) => { const classList: string[] = [].slice.call(e.target.classList) @@ -54,19 +67,188 @@ const Header = () => { } window.location.href = link } + const isReactTaro = location.pathname.includes('taro/react') + const headerBck = SiteReactTaro.header + const [isShowGuid, setIsShowGuid] = useState(false) + const [selectedVersion, setSelectedVersion] = useState('3x') + const [selectedLanguage, setSelectedLanguage] = useState('') + const handleMouseHover = (isHovered) => { + setIsShowGuid(isHovered) + } + + const handleClick = () => { + setIsShowGuid(!isShowGuid) + } + const handleVersionSelect = (version) => { + setSelectedVersion(version) + } + + const handleLanguageSelect = (language) => { + setSelectedLanguage(language) + } + const onMouseHover4 = (isHovered) => { + // setIsShowGuid(isHovered) + } + console.log(headerBck) return ( -
+
- + - {version} + + + {isReactTaro ? '小程序' : 'H5'} + +
- - 当前环境:development ,代码 PR 合并后,文档会自动同步至 - https://github.com/jdf2e/nutui-docs - + {/* // Search */} +
+
    + {headerBck.map((item) => ( +
  • + toLink(item)}> + {isZh ? item.cName : item.eName} + +
  • + ))} +
  • +
    handleMouseHover(true)} + onMouseLeave={() => handleMouseHover(false)} + // tabIndex="0" + className="header-select-box" + // className={isShowGuid ? 'select-up' : 'select-down'} + onClick={handleClick} + > +
    + {selectedVersion} + +
    +
    +
    + {reactGuide.map((item, indexKey) => ( +
    +
    + +
    {item.type}
    +
    +
    + {item.data.map((info, index) => ( +
    +
    {info.name}
    +
    + {info.language.map((lang, index) => ( +
    +
    {lang}
    +
    + ))} +
    +
    {info.app}
    +
    + ))} +
    +
    + ))} +
    +
    +
  • +
  • +
    onMouseHover4(true)} + onMouseLeave={() => onMouseHover4(false)} + className="header-select-box" + > +
    + {isZh ? '更多' : 'More'} + +
    +
    +
    + {moreGuide.map((item, indexKey) => ( +
    +
    + {item.icon && } +
    + {' '} + {isZh ? item.type.cName : item.type.eName} +
    +
    + {item.datas.map((info, index) => ( +
    + {info.plat && ( +
    + {isZh ? info.plat.cName : info.plat.eName} +
    + )} + {info.data.map((info2, index2) => ( +
    handleVersionSelect(info2.name)} + > +
    {info2.name}
    +
    + {info2.language.map((lang, index2) => ( +
    +
    handleLanguageSelect(lang)} + > + {lang} +
    +
    + ))} +
    + {/*
    {info2.app}
    */} +
    + ))} +
    + ))} +
    + ))} +
    +
    +
  • + {!isReactTaro && ( +
  • {}}> + En/中 +
  • + )} +
  • + {repository.git && ( + + )} + {repository.gitee && ( + + )} +
  • +
+
) diff --git a/src/sites/doc/components/nav/nav.scss b/src/sites/doc/components/nav/nav.scss index 0779dac2a5..7d4ce25755 100644 --- a/src/sites/doc/components/nav/nav.scss +++ b/src/sites/doc/components/nav/nav.scss @@ -11,10 +11,12 @@ border-right: 1px solid #eee; overflow: auto; padding-left: 35px; + padding-top: 35px; &.fixed { position: fixed; top: 0; + padding-top: 15px; } ol { @@ -35,10 +37,13 @@ line-height: 48px; font-size: 14px; color: $doc-default-nav-color; - font-weight: bold; position: relative; + font-weight: bold; &.active { + font-weight: bold; + color: $doc-default-color; + &::before { position: absolute; content: ''; @@ -48,8 +53,7 @@ margin-top: -5px; height: 10px; transform: rotate(90deg); - background: url(https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png) - no-repeat; + background: url('https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png'); background-size: 100% 100%; } } @@ -59,15 +63,19 @@ li { padding-left: 29px; cursor: pointer; + height: 100%; + font-weight: bold; &:hover { - a { + &:visited { color: $doc-default-color; } } a { - height: 100%; + &:hover { + color: $doc-default-color !important; + } &.router-link-active, &.active { @@ -76,15 +84,7 @@ &:link, &:visited { - color: $color-title; - } - - &:hover { - color: $doc-default-color; - - &:visited { - color: $doc-default-color; - } + color: #1a1a1a; } b { @@ -92,15 +92,13 @@ font-size: 12px; } } - } - } - } - - .selected { - color: #ff0f23 !important; - li { - color: #ff0f23 !important; + div { + &:hover { + color: $doc-default-color !important; + } + } + } } } } diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 297e6b73c6..4b2554a4df 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -32,14 +32,14 @@ const Nav = () => { {cn.packages.map((cp: any) => { if (!cp.show) return null return ( - - isPending ? '' : isActive ? 'selected' : '' - } - to={`${lang ? `/${lang}` : ''}/component/${cp.name}`} - > -
  • +
  • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/component/${cp.name}`} + > {cp.name}   {lang === 'zh-CN' && cp.cName} {cp.version !== '2.0.0' ? ( @@ -58,8 +58,8 @@ const Nav = () => { 🛠 ) : null} -
  • -
    + + ) })} From 6a70c8a433940d67dec256fb1dc8d8c4a62187c4 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Mon, 20 Jan 2025 11:22:56 +0800 Subject: [PATCH 02/14] feat: css transition add list --- src/sites/doc/components/header/header.scss | 48 +++++--- src/sites/doc/components/header/header.tsx | 128 ++++++++++++-------- 2 files changed, 110 insertions(+), 66 deletions(-) diff --git a/src/sites/doc/components/header/header.scss b/src/sites/doc/components/header/header.scss index 03e7d7624f..e118ab2796 100644 --- a/src/sites/doc/components/header/header.scss +++ b/src/sites/doc/components/header/header.scss @@ -130,7 +130,7 @@ bottom: 3px; left: 50%; margin-left: -17.5px; - background: url('@/assets/images/item-active.png'); + background: url('../../../assets/images/item-active.png'); } } &:last-of-type { @@ -207,10 +207,10 @@ .header { &-logo { .logo-link { - background: url('@/assets/images/logo-header-white.png') no-repeat - center/100%; + background: url('../../../assets/images/logo-header-white.png') + no-repeat center/100%; &.react { - background: url('@/assets/images/logo-header-white-react.png') + background: url('../../../assets/images/logo-header-white-react.png') no-repeat center/100%; } &.jdb { @@ -268,12 +268,12 @@ position: relative; &.select-down { .header-select-hd { - background-image: url('@/assets/images/icon-select-white-down.png'); + background-image: url('../../../assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('@/assets/images/icon-select-white-up.png'); + background-image: url('../../../assets/images/icon-select-white-up.png'); } } .guild-line { @@ -410,8 +410,8 @@ .header { &-logo { .logo-link { - background: url('@/assets/images/logo-header-red.png') no-repeat - center/100%; + background: url('../../../assets/images/logo-header-red.png') + no-repeat center/100%; &.react { background: url('https://img14.360buyimg.com/imagetools/jfs/t1/124864/1/33144/4732/63a97786F51517a97/a9ca3c1e043ceeb4.png') no-repeat center/100%; @@ -471,12 +471,12 @@ position: relative; &.select-down { .header-select-hd { - background-image: url('@/assets/images/icon-select-gray-down.png'); + background-image: url('../../../assets/images/icon-select-gray-down.png'); } } &.select-up { .header-select-hd { - background-image: url('@/assets/images/icon-select-gray-up.png'); + background-image: url('../../../assets/images/icon-select-gray-up.png'); } } .guild-line { @@ -613,8 +613,8 @@ .header { &-logo { .logo-link { - background: url('@/assets/images/logo-header-red.png') no-repeat - center/100%; + background: url('../../../assets/images/logo-header-red.png') + no-repeat center/100%; &.react { background: url('https://img14.360buyimg.com/imagetools/jfs/t1/124864/1/33144/4732/63a97786F51517a97/a9ca3c1e043ceeb4.png') no-repeat center/100%; @@ -673,12 +673,12 @@ &-box { &.select-down { .header-select-hd { - background-image: url('@/assets/images/icon-select-white-down.png'); + background-image: url('../../../assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('@/assets/images/icon-select-white-up.png'); + background-image: url('../../../assets/images/icon-select-white-up.png'); } } .guild-line { @@ -818,7 +818,27 @@ .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ { opacity: 0; } +.fade-enter { + opacity: 0; +} +.fade-enter-active { + opacity: 1; + transition: opacity 0.3s; +} +.fade-exit { + opacity: 1; +} +.fade-exit-active { + opacity: 0; + transition: opacity 0.3s; +} +.fade-content { + background-color: #f9f9f9; + padding: 20px; + border: 1px solid #ddd; + margin-top: 10px; +} .site-guid-data { // display: block !important; line-height: normal; diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 10ae97f43c..3893d9d409 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -4,6 +4,7 @@ import { version } from '/package.json' import config from '../../../config/env' import './header.scss' import { useNavigate, useLocation } from 'react-router-dom' +import { CSSTransition } from 'react-transition-group' import { SiteVueTaro, SiteReactTaro, @@ -22,7 +23,7 @@ import { const Header = () => { const navigate = useNavigate() const location = useLocation() - const [currLang, setCurrLang] = useState({}) + const [currLang, setCurrLang] = useState({ locale: '' }) const toHome = () => { navigate('/') @@ -47,29 +48,29 @@ const Header = () => { { name: '中文', locale: 'zh-CN' }, { name: 'English', locale: 'en-US' }, ] - const isZh = currLang.locale == 'zh-CN' + const isZh = true const toLink = (item: any) => {} const [visible, setVisible] = useState(false) const handleSwitchLocale = (e: any) => { - const classList: string[] = [].slice.call(e.target.classList) - if (classList.indexOf('curr-lang') > -1) { - return setVisible(!visible) - } - const name = e.target.innerText - setVisible(!visible) - const [{ locale }] = langs.filter((l) => name == l.name) - - let link = '' - if (config.locales.some((l) => window.location.href.indexOf(l) > -1)) { - link = window.location.href.replace(/\#\/([a-z-]+)/gi, `#/${locale}`) - } else { - link = window.location.href.replace(/\#\//gi, `#/${locale}/`) - } - window.location.href = link + // const classList: string[] = [].slice.call(e.target.classList) + // if (classList.indexOf('curr-lang') > -1) { + // return setVisible(!visible) + // } + // const name = e.target.innerText + // setVisible(!visible) + // const [{ locale }] = langs.filter((l) => name == l.name) + // let link = '' + // if (config.locales.some((l) => window.location.href.indexOf(l) > -1)) { + // link = window.location.href.replace(/\#\/([a-z-]+)/gi, `#/${locale}`) + // } else { + // link = window.location.href.replace(/\#\//gi, `#/${locale}/`) + // } + // window.location.href = link } const isReactTaro = location.pathname.includes('taro/react') const headerBck = SiteReactTaro.header const [isShowGuid, setIsShowGuid] = useState(false) + const [isShowGuid4, setIsShowGuid4] = useState(false) const [selectedVersion, setSelectedVersion] = useState('3x') const [selectedLanguage, setSelectedLanguage] = useState('') const handleMouseHover = (isHovered) => { @@ -88,7 +89,7 @@ const Header = () => { setSelectedLanguage(language) } const onMouseHover4 = (isHovered) => { - // setIsShowGuid(isHovered) + setIsShowGuid4(isHovered) } console.log(headerBck) return ( @@ -122,8 +123,11 @@ const Header = () => { onMouseEnter={() => handleMouseHover(true)} onMouseLeave={() => handleMouseHover(false)} // tabIndex="0" - className="header-select-box" - // className={isShowGuid ? 'select-up' : 'select-down'} + className={ + isShowGuid + ? 'header-select-box select-up' + : 'header-select-box select-down' + } onClick={handleClick} >
    @@ -131,51 +135,64 @@ const Header = () => {
    -
    - {reactGuide.map((item, indexKey) => ( + +
    -
    - -
    {item.type}
    -
    -
    - {item.data.map((info, index) => ( -
    -
    {info.name}
    -
    - {info.language.map((lang, index) => ( -
    -
    {lang}
    + {reactGuide.map((item, indexKey) => ( +
    +
    + +
    {item.type}
    +
    +
    + {item.data.map((info, index) => ( +
    +
    {info.name}
    +
    + {info.language.map((lang, index) => ( +
    +
    {lang}
    +
    + ))}
    - ))} -
    -
    {info.app}
    +
    {info.app}
    +
    + ))}
    - ))} -
    +
    + ))}
    - ))} -
    +
  • onMouseHover4(true)} onMouseLeave={() => onMouseHover4(false)} - className="header-select-box" + // className="header-select-box" + className={ + isShowGuid4 + ? 'header-select-box select-up' + : 'header-select-box select-down' + } + onClick={() => { + setIsShowGuid4(!isShowGuid4) + }} >
    {isZh ? '更多' : 'More'}
    -
    {moreGuide.map((item, indexKey) => ( @@ -184,7 +201,9 @@ const Header = () => { key={indexKey} >
    - {item.icon && } + {item.icon && ( + + )}
    {' '} {isZh ? item.type.cName : item.type.eName} @@ -204,12 +223,17 @@ const Header = () => { onClick={() => handleVersionSelect(info2.name)} >
    {info2.name}
    -
    +
    {info2.language.map((lang, index2) => (
    handleLanguageSelect(lang)} + onClick={() => + handleLanguageSelect(lang) + } > {lang}
    @@ -223,7 +247,7 @@ const Header = () => { ))}
    ))} -
    +
  • {!isReactTaro && ( From a5eb55b7f5df351287dcf93518dbbb035c7b7ee5 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Mon, 20 Jan 2025 15:39:43 +0800 Subject: [PATCH 03/14] feat: save search component progress --- src/sites/doc/components/header/header.tsx | 190 +++++++++++--------- src/sites/doc/components/search/search.scss | 69 +++++++ src/sites/doc/components/search/search.tsx | 96 ++++++++++ 3 files changed, 270 insertions(+), 85 deletions(-) create mode 100644 src/sites/doc/components/search/search.scss create mode 100644 src/sites/doc/components/search/search.tsx diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 3893d9d409..bc68705041 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -5,6 +5,7 @@ import config from '../../../config/env' import './header.scss' import { useNavigate, useLocation } from 'react-router-dom' import { CSSTransition } from 'react-transition-group' +import Search from '../search/search' import { SiteVueTaro, SiteReactTaro, @@ -51,6 +52,7 @@ const Header = () => { const isZh = true const toLink = (item: any) => {} const [visible, setVisible] = useState(false) + const [activeLink, setActiveLink] = useState('指南') const handleSwitchLocale = (e: any) => { // const classList: string[] = [].slice.call(e.target.classList) // if (classList.indexOf('curr-lang') > -1) { @@ -71,7 +73,7 @@ const Header = () => { const headerBck = SiteReactTaro.header const [isShowGuid, setIsShowGuid] = useState(false) const [isShowGuid4, setIsShowGuid4] = useState(false) - const [selectedVersion, setSelectedVersion] = useState('3x') + const [selectedVersion, setSelectedVersion] = useState('3.0.0-beta.11') const [selectedLanguage, setSelectedLanguage] = useState('') const handleMouseHover = (isHovered) => { setIsShowGuid(isHovered) @@ -107,12 +109,20 @@ const Header = () => {
    +
    - {/* // Search */} + +
    - -
    - {reactGuide.map((item, indexKey) => ( -
    -
    - -
    {item.type}
    -
    -
    - {item.data.map((info, index) => ( -
    -
    {info.name}
    -
    - {info.language.map((lang, index) => ( -
    -
    {lang}
    -
    - ))} -
    -
    {info.app}
    + +
    + {reactGuide.map((item, indexKey) => ( +
    +
    + +
    {item.type}
    +
    +
    + {item.data.map((info, index) => ( +
    +
    {info.name}
    +
    + {info.language.map((lang, index) => ( +
    +
    {lang}
    +
    + ))}
    - ))} -
    +
    {info.app}
    +
    + ))}
    - ))} -
    -
    +
    + ))} +
    +
  • @@ -191,63 +205,69 @@ const Header = () => {
  • - {moreGuide.map((item, indexKey) => ( -
    -
    - {item.icon && ( - - )} -
    - {' '} - {isZh ? item.type.cName : item.type.eName} -
    -
    - {item.datas.map((info, index) => ( -
    - {info.plat && ( -
    - {isZh ? info.plat.cName : info.plat.eName} -
    +
    + {moreGuide.map((item, indexKey) => ( +
    +
    + {item.icon && ( + )} - {info.data.map((info2, index2) => ( -
    handleVersionSelect(info2.name)} - > -
    {info2.name}
    +
    + {' '} + {isZh ? item.type.cName : item.type.eName} +
    +
    + {item.datas.map((info, index) => ( +
    + {info.plat && ( +
    + {isZh ? info.plat.cName : info.plat.eName} +
    + )} + {info.data.map((info2, index2) => (
    handleVersionSelect(info2.name)} > - {info2.language.map((lang, index2) => ( -
    -
    - handleLanguageSelect(lang) - } - > - {lang} +
    {info2.name}
    +
    + {info2.language.map((lang, index2) => ( +
    +
    + handleLanguageSelect(lang) + } + > + {lang} +
    -
    - ))} + ))} +
    + {/*
    {info2.app}
    */}
    - {/*
    {info2.app}
    */} -
    - ))} -
    - ))} -
    - ))} -
    + ))} +
    + ))} +
    + ))} +
    +
    {!isReactTaro && ( diff --git a/src/sites/doc/components/search/search.scss b/src/sites/doc/components/search/search.scss new file mode 100644 index 0000000000..dc27b2f741 --- /dev/null +++ b/src/sites/doc/components/search/search.scss @@ -0,0 +1,69 @@ +.search-box { + position: relative; + min-width: 300px; + height: 22px; + line-height: 22px; + .search-input { + height: 22px; + padding-left: 42px; + font-size: 14px; + vertical-align: middle; + background-color: transparent; + background-image: url('../../../assets/images/input-search.png'); + background-repeat: no-repeat; + font-size: 14px; + color: #fff; + &:focus { + outline: none; + } + } + .search-input::placeholder { + color: #888 !important; + // font-style: italic; + // opacity: 1; /* 确保不被透明度影响 */ + } +} +.search-list { + background: #fff; + position: absolute; + width: 300px; + list-style: none; + border: 1px solid #f2f2f2; + z-index: 99999; + top: 27px; + padding: 0; + li { + height: 40px; + line-height: 40px; + font-size: 12px; + a { + display: inline-block; + box-sizing: border-box; + width: 100%; + padding-left: 40px; + text-decoration: none; + color: #666; + } + &:hover { + // background: #6096ff; + color: $doc-default-color; + a { + color: $doc-default-color; + } + } + } + .cur { + background: $doc-default-color; + color: #fff; + &:hover { + color: #fff; + font-weight: bold; + a { + color: #fff; + } + } + a { + color: #fff; + } + } +} diff --git a/src/sites/doc/components/search/search.tsx b/src/sites/doc/components/search/search.tsx new file mode 100644 index 0000000000..4291bac671 --- /dev/null +++ b/src/sites/doc/components/search/search.tsx @@ -0,0 +1,96 @@ +import React, { useEffect, useState } from 'react' +import './search.scss' +import { Link, useNavigate } from 'react-router-dom' +import { nav } from '../../../config' +export default function Search() { + const navList = nav.flatMap((item) => item.packages).filter((i) => i.show) + const [searchVal, setSearchVal] = useState('') + const [searchList, setSearchList] = useState([]) + const [searchCurName, setSearchCurName] = useState('') + const [searchIndex, setSearchIndex] = useState(0) + const navigate = useNavigate() + const onfocus = () => { + // 处理聚焦事件 + } + + const onblur = () => { + // 处理失焦事件 + } + + const choseList = (e) => { + let index = searchIndex; + if (e.keyCode == 40) { + index++; + } + if (e.keyCode == 38) { + index--; + } + if (searchIndex < 0) { + index = 0; + } + if (searchList.length > 0) { + const cName = searchList[index] && searchList[index].name; + if (cName) { + setSearchCurName(cName); + setSearchIndex(index); + if (e.keyCode == 13) { + navigate(`/zh-CN/component/${(searchList[index].name || '').toLowerCase()}`); + setSearchCurName('') + setSearchIndex(0) + setSearchVal('') + } + } + } + }; + + const checklist = () => { + setSearchCurName('') + setSearchIndex(0) + setSearchVal('') + }; + const onChange = (e) => { + const val = e.target.value + setSearchVal(val) + const list = navList.filter( + (i) => + i.cName.includes(val) || + i.name.toLowerCase().includes(val.toLowerCase()) + ) + setSearchList(list) + } + useEffect(() => { + if (searchVal === '') { + setSearchList([]) + } + }, [searchVal]) + return ( +
    + +
      0 ? 'block' : 'none' }} + > + {searchList.map((item: any, index) => { + console.log(item) + return ( +
    • checklist()}> + + {item.name} + {item.cName} + +
    • + ) + })} +
    +
    + ) +} From 004249edd4582997c7b6d47b8208dc9b73b20dc1 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Mon, 20 Jan 2025 17:39:54 +0800 Subject: [PATCH 04/14] feat: save search component progress --- src/sites/assets/styles/highlight.scss | 6 +- src/sites/assets/styles/md-style.scss | 98 ++++++- src/sites/doc/App.scss | 247 ++++++++++++++---- src/sites/doc/App.tsx | 74 ++++-- .../doc/components/demoblock/demoblock.tsx | 2 +- src/sites/doc/components/issue/issue.scss | 25 +- src/sites/doc/components/issue/issue.tsx | 4 +- 7 files changed, 356 insertions(+), 100 deletions(-) diff --git a/src/sites/assets/styles/highlight.scss b/src/sites/assets/styles/highlight.scss index 3a8f61f0e4..5e0f85c795 100644 --- a/src/sites/assets/styles/highlight.scss +++ b/src/sites/assets/styles/highlight.scss @@ -13,10 +13,10 @@ code { -webkit-font-smoothing: auto; background-color: #fafafa; border-radius: 16px; -} -code span { - font-family: $nutui-doc-code-font-family; + span { + font-family: $nutui-doc-code-font-family; + } } pre { diff --git a/src/sites/assets/styles/md-style.scss b/src/sites/assets/styles/md-style.scss index e60139037a..2578487490 100644 --- a/src/sites/assets/styles/md-style.scss +++ b/src/sites/assets/styles/md-style.scss @@ -1,12 +1,19 @@ @import 'highlight.scss'; +$doc-smile-curve: url('https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png') !default; .doc-content-document { position: relative; + min-width: 1000px; background: #fff; padding-top: 40px; padding-bottom: 40px; padding-left: 40px; padding-right: 445px; + + &.full { + padding-right: 100px; + } + .card { margin-bottom: 24px; padding: 24px; @@ -21,11 +28,11 @@ -webkit-font-smoothing: auto; &:hover { - color: mix(black, $nutui-doc-blue, 10%); + color: darken($nutui-doc-blue, 10%); } &:active { - color: mix(black, $nutui-doc-blue, 20%); + color: darken($nutui-doc-blue, 20%); } } @@ -38,13 +45,11 @@ color: $nutui-doc-black; font-weight: bold; line-height: 1.5; - - &[id] { - cursor: pointer; - } } &.isComponent { + padding-top: 0; + h1 { display: none; } @@ -65,20 +70,20 @@ left: 16px; width: 44px; height: 17px; - background: url('https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png'); + background: $doc-smile-curve; background-size: 100% 100%; } } h2 { - margin: 45px 0 20px; - font-size: 24px; + margin: 16px 0; + font-size: 20px; } h3 { margin: 16px 0px; - font-weight: 600; - font-size: 20px; + font-weight: 400; + font-size: 18px; } h4 { @@ -98,12 +103,14 @@ font-size: 14px; line-height: 22px; } + strong { margin: 24px 0 12px; font-weight: bold; font-size: 14px; color: #333; } + table { width: 100%; margin-top: 12px; @@ -112,12 +119,16 @@ line-height: 1.5; border-collapse: collapse; border: 1px solid #eee; + th { padding: 8px 20px; font-weight: 600; text-align: left; border-left: 1px solid #e9e9e9; background-color: #f7f8fa; + // &:first-child { + // padding-left: 0; + // } &:last-child { padding-right: 0; @@ -128,6 +139,7 @@ padding: 8px 20px; border-top: 1px solid $nutui-doc-code-background-color; border-left: 1px solid #e9e9e9; + &:first-child { // padding-left: 0; border-left: 0px; @@ -157,6 +169,11 @@ } } + ul, + ol { + margin: 16px 0; + } + ul li, ol li { position: relative; @@ -212,14 +229,21 @@ blockquote { margin: 16px 0px; padding: 16px; - background-color: #fff4f0; - border-left: 6px solid #fa192c; + background-color: rgba($doc-default-color, 0.06); + border-left: 6px solid $doc-default-color; border-radius: 3px; + p { color: #1a1a1a; } } + img { + max-width: 100%; + // margin: 16px 0; + // border-radius: $nutui-doc-border-radius; + } + &--changelog, &--changelog-v3 { strong { @@ -240,21 +264,69 @@ } } } + .handle-part { height: 50px; display: flex; justify-content: flex-end; align-items: center; + .online-btn { display: block; color: #5555e2; background-color: #fff; font-size: 14px; cursor: pointer; + &:hover { color: blue; text-decoration: underline; } } } + + .contributor { + display: table; + width: 1120px; + margin-top: 12px; + color: #666; + font-size: 14px; + line-height: 1.5; + border-collapse: collapse; + border: 0; + table-layout: fixed; + + .contributor-head { + display: table-row; + + .contributor-head-item { + display: table-cell; + padding: 10px 15px; + font-weight: 600; + text-align: center; + background-color: transparent; + border: 0; + + a { + img { + width: 60px; + height: 60px; + } + } + } + } + + .contributor-body { + display: table-row; + border-top: 1px solid #eee; + padding-top: 15px; + + .contributor-body-item { + display: table-cell; + padding: 10px 15px; + border: 0; + text-align: center; + } + } + } } diff --git a/src/sites/doc/App.scss b/src/sites/doc/App.scss index 13ed9d9c69..18bec29eb8 100644 --- a/src/sites/doc/App.scss +++ b/src/sites/doc/App.scss @@ -1,62 +1,19 @@ -::selection { - background: $doc-default-color; - color: #fff; -} - $doc-title-height: 137px; -#doc { - background: #fff; - height: 100%; - width: 100%; - display: flex; - flex-direction: column; -} - .doc { - &-title { - width: 100%; - height: $doc-title-height; - z-index: 2; - &-position { - top: 0px; - display: flex; - align-items: center; - justify-content: space-between; - padding: 40px; - border-bottom: 1px solid #eee; - background: #fff; - visibility: visible; - opacity: 1; - transition: opacity 0.8s; - &.fixed { - width: calc(100% - 290px); - position: fixed; - padding: 24px 48px; - .title { - font-size: 24px; - font-weight: bold; - } - } - &.hidden { - visibility: hidden; - opacity: 0; - } - .title { - font-size: 40px; - font-weight: bold; - } - } - } &-content { margin-left: 290px; display: flex; flex-direction: column; - + background: #fff; &-document { min-height: 800px; - min-width: 1000px; + + .markdown-body { + min-height: 600px; + } } + &-tabs { position: absolute; right: 475px; @@ -72,6 +29,7 @@ $doc-title-height: 137px; border-radius: 2px; background: #eee; box-shadow: rgb(0 0 0 / 15%) 0px 2px 4px; + &.single { padding: 0; @@ -80,6 +38,7 @@ $doc-title-height: 137px; cursor: auto; } } + .tab-item { position: relative; padding: 0 10px; @@ -90,21 +49,201 @@ $doc-title-height: 137px; text-align: center; border-radius: 2px; background: #eee; + &.cur { font-weight: bold; color: #323232; background: #fff; } } + + &.hidden { + visibility: hidden; + opacity: 0; + } + } + + &-contributors { + margin: 40px 0; + + a { + position: relative; + } + + img { + height: 26px; + height: 26px; + border-radius: 50%; + margin-left: 8px; + } + + .contributors-hover { + display: none; + padding: 5px 10px; + color: #fff; + font-size: 12px; + background-color: #000; + border-radius: 5px; + position: absolute; + /* min-width:150px; */ + white-space: nowrap; + top: -200%; + transform: translateX(-55%); + } + + a:hover { + .contributors-hover { + display: inline-block; + } + } + } + + &-contributors-gap { + padding-top: 20px; + border-top: 1px solid #eeeaea; + } + + &-faq { + &-title { + margin: 38px 0 20px; + font-size: 24px; + font-weight: bold; + } + + &-item { + margin: 0 8px 28px; + } + + &-que { + font-size: 18px; + line-height: 30px; + color: #323232; + font-weight: 600; + } + + &-aws { + margin-top: 8px; + color: #34495e; + font-size: 14px; + line-height: 26px; + } + } + } + + &-title { + width: 100%; + height: $doc-title-height; + z-index: 2; + + &-content { + display: flex; + justify-content: space-between; + flex-direction: column; + align-items: flex-start; + width: calc(100% - 408px); + + .npm-package { + img { + margin-right: 5px; + } + } + } + + &-position { + top: 0px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 24px 40px; + // line-height: 56px; + border-bottom: 1px solid #eee; + background: #fff; + visibility: visible; + opacity: 1; + // transition: opacity 0.8s linear, visibility 0.8s linear; + transition: opacity 0.8s; + + &.fixed { + width: calc(100% - 290px); + position: fixed; + padding: 24px 48px; + z-index: 999; + .title { + font-size: 24px; + font-weight: bold; + } + + .doc-content-tabs { + position: revert; + } + } + + &.hidden { + visibility: hidden; + opacity: 0; + } + + .title { + font-size: 32px; + font-weight: bold; + } } } } -.nutui-react--demo-button { - display: none; -} -.nutui-react--demo-wrapper { - .nutui-react--demo-button { +::v-deep(.contributors-banner) { + display: flex; + width: 800px; + + .banner-link { + position: relative; + flex: 1; + margin-right: 20px; + + .shadow { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); + opacity: 0; + transition: all linear 0.2s; + } + + &:hover { + .shadow { + opacity: 1; + } + + .img-icon { + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + } + + img { display: block; + width: 100%; + height: 200px; + } + + .img-icon { + position: absolute; + z-index: 999; + bottom: -10px; + right: 0; + width: 80px; + height: 70px; + transition: all linear 0.2s; + } + + .img-icon-book { + width: 50px; + height: 50px; + bottom: 0; + right: 10px; } } diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index dbce12d5ae..7a44b5cb55 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -11,7 +11,7 @@ import { getComponentName } from '@/sites/assets/util' import routers from './router' import loadable from '@loadable/component' import CodeBlock from './components/demoblock/codeblock' - +import { BackTop } from '../../packages/backtop/backtop' const Title = () => { let location = useLocation() const s = window.location.hash.split('/') @@ -21,8 +21,23 @@ const Title = () => { }, [location]) const [componentName, setComponentName] = useState({ name: '', cName: '' }) return ( -
    - {componentName.name} {s[1] === 'zh-CN' && componentName.cName} +
    +
    + {componentName.name} {s[1] === 'zh-CN' && componentName.cName} +
    +
    + + @nutui/nutui-react + + +
    ) } @@ -68,33 +83,42 @@ const App = () => {
    +
    - - {routers.map((ru, k) => { - const path = ru.component.name?.substring( - 0, - ru.component.name.lastIndexOf('/') - ) - const C = useMemo(() => loadable(ru.component), [ru.component]) - return ( - - - - - - } - > - ) - })} - +
    +
    + + {routers.map((ru, k) => { + const path = ru.component.name?.substring( + 0, + ru.component.name.lastIndexOf('/') + ) + const C = useMemo( + () => loadable(ru.component), + [ru.component] + ) + return ( + + + + + + } + > + ) + })} + +
    +
    + ) } diff --git a/src/sites/doc/components/demoblock/demoblock.tsx b/src/sites/doc/components/demoblock/demoblock.tsx index b8ba1bd841..45bb6fef23 100644 --- a/src/sites/doc/components/demoblock/demoblock.tsx +++ b/src/sites/doc/components/demoblock/demoblock.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react' import { compressText, copyCodeHtml } from './basedUtil' - +import './demoblock.scss' interface A { text: string scss: string diff --git a/src/sites/doc/components/issue/issue.scss b/src/sites/doc/components/issue/issue.scss index 39180f47d5..010495e73f 100644 --- a/src/sites/doc/components/issue/issue.scss +++ b/src/sites/doc/components/issue/issue.scss @@ -1,9 +1,13 @@ .doc-content-issue { + // position: absolute; + // right: 605px; + // top: 51px; display: flex; align-items: center; z-index: 1; padding: 4px; height: 40px; + // background: var(--bg-color-component-transparent); border-radius: 6px; align-items: center; background: #fff; @@ -15,13 +19,30 @@ transition: all 0.2s ease 0s; display: flex; align-items: center; - padding: 5px 8px; + padding: 5px 9px; line-height: 22px; - font-size: 16px; + font-size: 14px; color: #333; cursor: pointer; text-decoration: none; border-radius: 2px; + .icon { + display: inline-block; + width: 16px; + height: 16px; + margin-right: 5px; + background-size: 100% 100%; + background-repeat: no-repeat; + &.issue { + background-image: url('../assets/images/icon-add.svg'); + } + &.open { + background-image: url('../assets/images/icon-open.svg'); + } + &.closed { + background-image: url('../assets/images/icon-closed.svg'); + } + } .nut-icon { font-size: 12px; margin-right: 5px; diff --git a/src/sites/doc/components/issue/issue.tsx b/src/sites/doc/components/issue/issue.tsx index da86cbe063..8ea3022583 100644 --- a/src/sites/doc/components/issue/issue.tsx +++ b/src/sites/doc/components/issue/issue.tsx @@ -1,6 +1,6 @@ import './issue.scss' import React, { useEffect, useState } from 'react' -import { Tips, Check, Add } from '@nutui/icons-react' +import { Tips, Check, Add, Plus } from '@nutui/icons-react' import { useLocation } from 'react-router-dom' import { getComponentName } from '@/sites/assets/util' @@ -20,7 +20,7 @@ export function Issue() { href="https://github.com/jdf2e/nutui-react/issues" target="_blank" > - + Issue Date: Mon, 20 Jan 2025 20:13:37 +0800 Subject: [PATCH 05/14] feat: save taro some logics --- src/sites/assets/util/index.ts | 2 +- src/sites/doc/App.tsx | 40 ++++++++++++++----- .../doc/components/demoblock/codeblock.tsx | 2 +- src/sites/doc/components/header/header.tsx | 15 ++++--- src/sites/doc/components/nav/nav.tsx | 6 ++- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/sites/assets/util/index.ts b/src/sites/assets/util/index.ts index 7a5ac8e292..1872f4a2c9 100644 --- a/src/sites/assets/util/index.ts +++ b/src/sites/assets/util/index.ts @@ -5,7 +5,7 @@ const isMobile = /ios|iphone|ipod|ipad|android/.test(ua) const getComponentName = () => { const s = window.location.hash.split('/') - const cname = s[s.length - 1].toLowerCase() + const cname = s[s.length - 1].toLowerCase().replace('-taro', '') const component: any = {} nav.forEach((item: any) => { item.packages.forEach((sItem: any) => { diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index 7a44b5cb55..dd5ebde359 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -14,9 +14,11 @@ import CodeBlock from './components/demoblock/codeblock' import { BackTop } from '../../packages/backtop/backtop' const Title = () => { let location = useLocation() + const isTaro = location.pathname.includes('-taro') const s = window.location.hash.split('/') useEffect(() => { const componentName = getComponentName() + console.log(componentName) setComponentName(componentName) }, [location]) const [componentName, setComponentName] = useState({ name: '', cName: '' }) @@ -25,19 +27,35 @@ const Title = () => {
    {componentName.name} {s[1] === 'zh-CN' && componentName.cName}
    -
    - + {isTaro ? ( + +
    + ) : ( +
    + + @nutui/nutui-react + + +
    + )} ) } diff --git a/src/sites/doc/components/demoblock/codeblock.tsx b/src/sites/doc/components/demoblock/codeblock.tsx index 541813b962..6623682941 100644 --- a/src/sites/doc/components/demoblock/codeblock.tsx +++ b/src/sites/doc/components/demoblock/codeblock.tsx @@ -4,7 +4,7 @@ import APPContext from '../../context' import DemoBlock from './demoblock' import './demoblock.scss' -const modules = import.meta.glob(`@/packages/**/demos/h5/*.tsx`, { +const modules = import.meta.glob(`@/packages/**/demos/**/*.tsx`, { query: '?raw', import: 'default', eager: true, diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index bc68705041..4b577b3bf9 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -42,7 +42,6 @@ const Header = () => { (l) => location.pathname.indexOf(l.locale) > -1 )[0] setCurrLang(lang) - console.log(lang) }, [location]) const langs = [ @@ -69,7 +68,7 @@ const Header = () => { // } // window.location.href = link } - const isReactTaro = location.pathname.includes('taro/react') + const isReactTaro = location.pathname.includes('-taro') const headerBck = SiteReactTaro.header const [isShowGuid, setIsShowGuid] = useState(false) const [isShowGuid4, setIsShowGuid4] = useState(false) @@ -78,6 +77,13 @@ const Header = () => { const handleMouseHover = (isHovered) => { setIsShowGuid(isHovered) } + const toAnother = () => { + if (!location.pathname.includes('taro')) { + navigate(location.pathname + '-taro'); + } else{ + navigate(location.pathname.replace('-taro', '')); + } + }; const handleClick = () => { setIsShowGuid(!isShowGuid) @@ -93,7 +99,6 @@ const Header = () => { const onMouseHover4 = (isHovered) => { setIsShowGuid4(isHovered) } - console.log(headerBck) return (
    @@ -101,8 +106,8 @@ const Header = () => { {isReactTaro ? '小程序' : 'H5'} diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 4b2554a4df..77091deeda 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -1,6 +1,6 @@ import React, { Fragment, useEffect, useState } from 'react' import { nav } from '@/config.json' -import { NavLink } from 'react-router-dom' +import { NavLink, useLocation } from 'react-router-dom' import './nav.scss' import useLocale from '@/sites/assets/locale/uselocale' @@ -19,6 +19,8 @@ const Nav = () => { useEffect(() => { document.addEventListener('scroll', scrollNav) }, []) + const location = useLocation() + const isTaro = location.pathname.includes('-taro') return (
      @@ -38,7 +40,7 @@ const Nav = () => { className={({ isActive, isPending }) => isPending ? '' : isActive ? 'active' : '' } - to={`${lang ? `/${lang}` : ''}/component/${cp.name}`} + to={`${lang ? `/${lang}` : ''}/component/${cp.name}${isTaro? '-taro' : ''}`} > {cp.name}   {lang === 'zh-CN' && cp.cName} From a8455b52d4fd51ca964ca4dd8db35fe7ca57eca7 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Tue, 21 Jan 2025 11:19:46 +0800 Subject: [PATCH 06/14] feat: save lang switch --- src/sites/assets/images/icon-add.svg | 3 + src/sites/doc/components/header/header.tsx | 120 +++++++++++++++------ src/sites/doc/components/issue/issue.scss | 6 +- src/sites/doc/components/nav/nav.tsx | 2 +- src/sites/doc/main.tsx | 2 +- src/sites/doc/router.ts | 6 ++ 6 files changed, 100 insertions(+), 39 deletions(-) create mode 100644 src/sites/assets/images/icon-add.svg diff --git a/src/sites/assets/images/icon-add.svg b/src/sites/assets/images/icon-add.svg new file mode 100644 index 0000000000..313565f560 --- /dev/null +++ b/src/sites/assets/images/icon-add.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 4b577b3bf9..6f81b823f5 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -24,7 +24,7 @@ import { const Header = () => { const navigate = useNavigate() const location = useLocation() - const [currLang, setCurrLang] = useState({ locale: '' }) + const [currLang, setCurrLang] = useState({}) const toHome = () => { navigate('/') @@ -48,26 +48,44 @@ const Header = () => { { name: '中文', locale: 'zh-CN' }, { name: 'English', locale: 'en-US' }, ] - const isZh = true - const toLink = (item: any) => {} + const isZh = currLang?.locale === 'zh-CN' + const toLink = (item: any) => { + if (item) { + if (isZh) { + item.path = item.path.replace('en-US', 'zh-CN') + } else { + item.path = item.path.replace('zh-CN', 'en-US') + } + navigate(item.path) + } else { + navigate('/') + } + } + useEffect(() => { + const lang = langs.filter( + (l) => location.pathname.indexOf(l.locale) > -1 + )[0] + setCurrLang(lang) + console.log(lang) + }, [location]) const [visible, setVisible] = useState(false) const [activeLink, setActiveLink] = useState('指南') - const handleSwitchLocale = (e: any) => { - // const classList: string[] = [].slice.call(e.target.classList) - // if (classList.indexOf('curr-lang') > -1) { - // return setVisible(!visible) - // } - // const name = e.target.innerText - // setVisible(!visible) - // const [{ locale }] = langs.filter((l) => name == l.name) - // let link = '' - // if (config.locales.some((l) => window.location.href.indexOf(l) > -1)) { - // link = window.location.href.replace(/\#\/([a-z-]+)/gi, `#/${locale}`) - // } else { - // link = window.location.href.replace(/\#\//gi, `#/${locale}/`) - // } - // window.location.href = link - } + // const handleSwitchLocale = (e: any) => { + // const classList: string[] = [].slice.call(e.target.classList) + // if (classList.indexOf('curr-lang') > -1) { + // return setVisible(!visible) + // } + // const name = e.target.innerText + // setVisible(!visible) + // const [{ locale }] = langs.filter((l) => name == l.name) + // let link = '' + // if (config.locales.some((l) => window.location.href.indexOf(l) > -1)) { + // link = window.location.href.replace(/\#\/([a-z-]+)/gi, `#/${locale}`) + // } else { + // link = window.location.href.replace(/\#\//gi, `#/${locale}/`) + // } + // window.location.href = link + // } const isReactTaro = location.pathname.includes('-taro') const headerBck = SiteReactTaro.header const [isShowGuid, setIsShowGuid] = useState(false) @@ -79,20 +97,25 @@ const Header = () => { } const toAnother = () => { if (!location.pathname.includes('taro')) { - navigate(location.pathname + '-taro'); - } else{ - navigate(location.pathname.replace('-taro', '')); + navigate(location.pathname + '-taro') + } else { + navigate(location.pathname.replace('-taro', '')) } - }; - + } + const checkGuidTheme = (item: any, type: string) => { + setIsShowGuid(false) + window.open(item.link) + } + const checkGuidTheme2 = (item: any, type: string) => { + if (item.link) { + setIsShowGuid(false) + window.open(item.link) + } + } const handleClick = () => { setIsShowGuid(!isShowGuid) } - const handleVersionSelect = (version) => { - setSelectedVersion(version) - } - const handleLanguageSelect = (language) => { setSelectedLanguage(language) } @@ -107,7 +130,7 @@ const Header = () => { {isReactTaro ? '小程序' : 'H5'} @@ -128,7 +151,12 @@ const Header = () => { setActiveLink(item.cName) }} > - toLink(item)}> + { + console.log(item) + toLink(item) + }} + > {isZh ? item.cName : item.eName} @@ -171,11 +199,15 @@ const Header = () => {
    {item.data.map((info, index) => ( -
    +
    checkGuidTheme(info, 'Basis')} + key={info.link} + >
    {info.name}
    {info.language.map((lang, index) => ( -
    +
    {lang}
    ))} @@ -244,7 +276,9 @@ const Header = () => {
    handleVersionSelect(info2.name)} + onClick={() => + checkGuidTheme(info2, 'Advanced') + } >
    {info2.name}
    {
    {!isReactTaro && ( -
  • {}}> +
  • { + let location = window.location + if (currLang.locale == 'zh-CN') { + location.href = location.href.replace('zh-CN', 'en-US') + setCurrLang({ + name: 'English', + locale: 'en-US', + }) + } else { + location.href = location.href.replace('en-US', 'zh-CN') + setCurrLang({ + name: '中文', + locale: 'zh-CN', + }) + } + }} + > En/中
  • )} diff --git a/src/sites/doc/components/issue/issue.scss b/src/sites/doc/components/issue/issue.scss index 010495e73f..1379b84a65 100644 --- a/src/sites/doc/components/issue/issue.scss +++ b/src/sites/doc/components/issue/issue.scss @@ -34,13 +34,13 @@ background-size: 100% 100%; background-repeat: no-repeat; &.issue { - background-image: url('../assets/images/icon-add.svg'); + background-image: url('../../../assets/images/icon-add.svg'); } &.open { - background-image: url('../assets/images/icon-open.svg'); + background-image: url('../../../assets/images/icon-open.svg'); } &.closed { - background-image: url('../assets/images/icon-closed.svg'); + background-image: url('../../../assets/images/icon-closed.svg'); } } .nut-icon { diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 77091deeda..d6d0003761 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -34,7 +34,7 @@ const Nav = () => { {cn.packages.map((cp: any) => { if (!cp.show) return null return ( -
  • +
  • diff --git a/src/sites/doc/main.tsx b/src/sites/doc/main.tsx index 2345d6fed1..611a579cef 100644 --- a/src/sites/doc/main.tsx +++ b/src/sites/doc/main.tsx @@ -7,7 +7,7 @@ import App from './App' if (isMobile) { location.replace('demo.html') -} +} const rootElement = document.querySelector('#doc') diff --git a/src/sites/doc/router.ts b/src/sites/doc/router.ts index d88f36dc8b..5a91667608 100644 --- a/src/sites/doc/router.ts +++ b/src/sites/doc/router.ts @@ -1,3 +1,4 @@ +import { Divider } from '@nutui/nutui-react-taro'; // const modulesPage = import.meta.globEager('/src/packages/**/doc.md', { // as: 'raw', // }) @@ -43,4 +44,9 @@ for (const path in modulesTaroPage) { }) } +// routes.push({ +// path: '/zh-CN/guide/intro-react', +// name: 'intro-react-zh-CN', +// component: () => Divider +// }) export default routes From cddaaa4b04d28a1a847b758f7a06c9f027411e31 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Tue, 21 Jan 2025 18:57:32 +0800 Subject: [PATCH 07/14] feat: save some guide and routes logics --- src/sites/doc/App.tsx | 115 ++- src/sites/doc/components/header/header.tsx | 5 + src/sites/doc/components/nav/nav.tsx | 141 ++- .../docs/react/contributing-react.en-US.md | 129 +++ .../doc/docs/react/contributing-react.md | 121 +++ .../docs/react/international-react.en-US.md | 42 + .../doc/docs/react/international-react.md | 43 + src/sites/doc/docs/react/intro-react.en-US.md | 42 + src/sites/doc/docs/react/intro-react.md | 42 + .../sites/doc/docs/react/migrate-from-v1.md | 0 .../sites/doc/docs/react/migrate-from-v2.md | 0 .../docs/react/official-theme-react.en-US.md | 65 ++ .../doc/docs/react/official-theme-react.md | 65 ++ src/sites/doc/docs/react/start-react.en-US.md | 190 ++++ src/sites/doc/docs/react/start-react.md | 190 ++++ src/sites/doc/docs/react/theme-react.en-US.md | 68 ++ src/sites/doc/docs/react/theme-react.md | 65 ++ .../doc/docs/taro/contributing-react.en-US.md | 127 +++ src/sites/doc/docs/taro/contributing-react.md | 121 +++ .../docs/taro/international-react.en-US.md | 42 + .../doc/docs/taro/international-react.md | 43 + src/sites/doc/docs/taro/intro-react.en-US.md | 39 + src/sites/doc/docs/taro/intro-react.md | 39 + src/sites/doc/docs/taro/migrate-from-v1.md | 888 ++++++++++++++++++ src/sites/doc/docs/taro/migrate-from-v2.md | 888 ++++++++++++++++++ .../docs/taro/official-theme-react.en-US.md | 65 ++ .../doc/docs/taro/official-theme-react.md | 86 ++ src/sites/doc/docs/taro/start-react.en-US.md | 185 ++++ src/sites/doc/docs/taro/start-react.md | 191 ++++ src/sites/doc/docs/taro/theme-react.en-US.md | 58 ++ src/sites/doc/docs/taro/theme-react.md | 53 ++ src/sites/doc/router.ts | 49 +- 32 files changed, 4083 insertions(+), 114 deletions(-) create mode 100644 src/sites/doc/docs/react/contributing-react.en-US.md create mode 100644 src/sites/doc/docs/react/contributing-react.md create mode 100644 src/sites/doc/docs/react/international-react.en-US.md create mode 100644 src/sites/doc/docs/react/international-react.md create mode 100644 src/sites/doc/docs/react/intro-react.en-US.md create mode 100644 src/sites/doc/docs/react/intro-react.md rename migrate-from-v1.md => src/sites/doc/docs/react/migrate-from-v1.md (100%) rename migrate-from-v2.md => src/sites/doc/docs/react/migrate-from-v2.md (100%) create mode 100644 src/sites/doc/docs/react/official-theme-react.en-US.md create mode 100644 src/sites/doc/docs/react/official-theme-react.md create mode 100644 src/sites/doc/docs/react/start-react.en-US.md create mode 100644 src/sites/doc/docs/react/start-react.md create mode 100644 src/sites/doc/docs/react/theme-react.en-US.md create mode 100644 src/sites/doc/docs/react/theme-react.md create mode 100644 src/sites/doc/docs/taro/contributing-react.en-US.md create mode 100644 src/sites/doc/docs/taro/contributing-react.md create mode 100644 src/sites/doc/docs/taro/international-react.en-US.md create mode 100644 src/sites/doc/docs/taro/international-react.md create mode 100644 src/sites/doc/docs/taro/intro-react.en-US.md create mode 100644 src/sites/doc/docs/taro/intro-react.md create mode 100644 src/sites/doc/docs/taro/migrate-from-v1.md create mode 100644 src/sites/doc/docs/taro/migrate-from-v2.md create mode 100644 src/sites/doc/docs/taro/official-theme-react.en-US.md create mode 100644 src/sites/doc/docs/taro/official-theme-react.md create mode 100644 src/sites/doc/docs/taro/start-react.en-US.md create mode 100644 src/sites/doc/docs/taro/start-react.md create mode 100644 src/sites/doc/docs/taro/theme-react.en-US.md create mode 100644 src/sites/doc/docs/taro/theme-react.md diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index dd5ebde359..cf70257b2a 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -8,17 +8,23 @@ import Header from '@/sites/doc/components/header' import DemoPreview from '@/sites/doc/components/demo-preview' import Issue from '@/sites/doc/components/issue' import { getComponentName } from '@/sites/assets/util' -import routers from './router' +import { + routes as routers, + guideEnRoutes, + guideRoutes, + guideEnTaroRoutes, + guideTaroRoutes, +} from './router' import loadable from '@loadable/component' import CodeBlock from './components/demoblock/codeblock' import { BackTop } from '../../packages/backtop/backtop' + const Title = () => { let location = useLocation() const isTaro = location.pathname.includes('-taro') const s = window.location.hash.split('/') useEffect(() => { const componentName = getComponentName() - console.log(componentName) setComponentName(componentName) }, [location]) const [componentName, setComponentName] = useState({ name: '', cName: '' }) @@ -59,85 +65,76 @@ const Title = () => {
  • ) } + const components = { CodeBlock, } -const App = () => { - const [fixed, setFixed] = useState(false) - const [hidden, setHidden] = useState(false) +const Content = () => { + const [fixed, setFixed] = useState(false) + const location = useLocation() const scrollTitle = () => { let top = document.documentElement.scrollTop if (top > 127) { setFixed(true) - if (top < 142) { - setHidden(true) - } else { - setHidden(false) - } } else { setFixed(false) - setHidden(false) } } - + const isGuide = location.pathname.includes('/guide') useEffect(() => { document.addEventListener('scroll', scrollTitle) }, []) + return ( +
    +
    +
    + + </div> + </div> + <div + className={`doc-content-document ${isGuide ? 'full' : 'isComponent'}`} + > + <Routes> + {[...routers, ...guideRoutes].map((ru, k) => { + const path = ru.component.name?.substring( + 0, + ru.component.name.lastIndexOf('/') + ) + const C = useMemo(() => loadable(ru.component), [ru.component]) + return ( + <Route + key={k} + path={ru.path} + element={ + <APPContext.Provider value={{ path }}> + <MDXProvider components={components}> + <C /> + </MDXProvider> + </APPContext.Provider> + } + ></Route> + ) + })} + </Routes> + </div> + <DemoPreview className={`${fixed ? 'fixed' : ''}`}></DemoPreview> + </div> + ) +} + +const App = () => { return ( <div> <HashRouter> - <Header></Header> - <Nav></Nav> - <div className="doc-content"> - <div className="doc-title"> - <div - className={`doc-title-position ${fixed ? 'fixed' : ''} ${ - hidden ? 'hidden' : '' - }`} - > - <Title> - -
    -
    - -
    -
    -
    - - {routers.map((ru, k) => { - const path = ru.component.name?.substring( - 0, - ru.component.name.lastIndexOf('/') - ) - const C = useMemo( - () => loadable(ru.component), - [ru.component] - ) - return ( - - - - - - } - > - ) - })} - -
    -
    -
    - -
    +
    +
    ) } + export default App diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 6f81b823f5..41e0116504 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -95,6 +95,11 @@ const Header = () => { const handleMouseHover = (isHovered) => { setIsShowGuid(isHovered) } + useEffect(() => { + if(location.pathname.includes('/component')) { + setActiveLink('组件') + } + }, [location]) const toAnother = () => { if (!location.pathname.includes('taro')) { navigate(location.pathname + '-taro') diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index d6d0003761..626a8ea0b6 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -1,6 +1,6 @@ import React, { Fragment, useEffect, useState } from 'react' -import { nav } from '@/config.json' -import { NavLink, useLocation } from 'react-router-dom' +import { nav, docs } from '@/config.json' +import { NavLink, useLocation, useNavigate } from 'react-router-dom' import './nav.scss' import useLocale from '@/sites/assets/locale/uselocale' @@ -8,6 +8,8 @@ const Nav = () => { const [cNav] = useState(nav) const [lang] = useLocale() const [fixed, setFixed] = useState(false) + const [isGuide, setIsGuide] = useState(false) + const [activeName, setActiveName] = useState('intro-react') const scrollNav = () => { let top = document.documentElement.scrollTop if (top > 64) { @@ -19,56 +21,99 @@ const Nav = () => { useEffect(() => { document.addEventListener('scroll', scrollNav) }, []) + const location = useLocation() + const navigate = useNavigate() + + useEffect(() => { + if (location.pathname.includes('/guide')) { + setIsGuide(true) + } else { + setIsGuide(false) + } + }, [location]) + const changeNav = (_nav: any) => { + setActiveName(_nav.name) + + navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide/` + _nav.name.toLowerCase()) + } const isTaro = location.pathname.includes('-taro') + const isZh = lang === 'zh-CN' return (
    -
      - {cNav.map((cn: any) => { - return ( - - {cn.enName === 'dataentry' ? null : ( -
    1. {lang === 'zh-CN' ? cn.name : cn.enName}
    2. - )} -
        - {cn.packages.map((cp: any) => { - if (!cp.show) return null - return ( -
      • - - isPending ? '' : isActive ? 'active' : '' - } - to={`${lang ? `/${lang}` : ''}/component/${cp.name}${isTaro? '-taro' : ''}`} - > - {cp.name}   - {lang === 'zh-CN' && cp.cName} - {cp.version !== '2.0.0' ? ( - - 🛠 - - ) : null} - -
      • - ) - })} -
      -
      - ) - })} -
    + {isGuide ? ( +
      +
        + {docs.packages.map((_package) => ( +
      • + {_package.show && ( + <> + {_package.isLink ? ( + + {isZh ? _package.cName : _package.eName} + + ) : ( +
        changeNav(_package)}> + {isZh ? _package.cName : _package.eName} +
        + )} + + )} +
      • + ))} +
      +
    + ) : ( +
      + {cNav.map((cn: any) => { + return ( + + {cn.enName === 'dataentry' ? null : ( +
    1. {lang === 'zh-CN' ? cn.name : cn.enName}
    2. + )} +
        + {cn.packages.map((cp: any) => { + if (!cp.show) return null + return ( +
      • + + isPending ? '' : isActive ? 'active' : '' + } + to={`${lang ? `/${lang}` : ''}/component/${cp.name}${isTaro ? '-taro' : ''}`} + > + {cp.name}   + {lang === 'zh-CN' && cp.cName} + {cp.version !== '2.0.0' ? ( + + 🛠 + + ) : null} + +
      • + ) + })} +
      +
      + ) + })} +
    + )}
    ) } diff --git a/src/sites/doc/docs/react/contributing-react.en-US.md b/src/sites/doc/docs/react/contributing-react.en-US.md new file mode 100644 index 0000000000..fa3d85d360 --- /dev/null +++ b/src/sites/doc/docs/react/contributing-react.en-US.md @@ -0,0 +1,129 @@ +

    Contribution Guidelines

    + +You can contribute to the NutUI community according to the co-construction direction in 《[NutUI invites you to build, Hello Contributor](https://jelly.jd.com/article/6320528b92d94a0068685525)》. + +  + +This guide will guide you on how to contribute to NutUI. Please take a few minutes to read this guide before you file an issue or pull request to ensure that the contribution is compliant and can help the community. + +## code of conduct + +In order to ensure a good network environment and create a comfortable development atmosphere, I hope all contributors can abide by this [Code of Conduct](https://www.contributor-covenant.org/zh-cn/version/2/1/code_of_conduct/), and please take the time to read the full text to clarify what is prohibited and what is allowed. + +## Branch management + +The main branch is currently maintained on github. If you want to fix a bug or add a feature, send a pull request to the main branch. + +  + +The official website will update [NutUI - React release cycle] (https://github.com/jdf2e/nutui-react/releases), at the same time every day developers review submitted code in the making. The release cycle is once a week, usually incorporating new code or features in advance and releasing formal packages; In case of emergency, beta versions can be released based on the specified branch. + +## Issue + +If submit Bug reports, please be sure to comply with the [` Bug report `] (https://github.com/jdf2e/nutui/blob/next/.github/ISSUE_TEMPLATE/bug_report.md) template. + +## Bugs + +We use [issue - helper] (https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) for bug tracking. We hope you can submit feedback through the issue assistant we provide, and provide all the development information as much as possible, because the more comprehensive the information, the faster the development response, and the bugs you find will be solved quickly. + +  + +Before you commit a bug, Please ensure that the search had existing [issue] (https://github.com/jdf2e/nutui-react/issues) and read our [FAQ] (https://nutui.jd.com/#/zh-CN/notice). + +## new features + +If you have a better idea of an existing component function or API, We also recommend that you use our provided [issue - helper] (https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) to submit a issue of adding new features. + +  + +If you want to help develop new features and components, Can scan [qr code] (HTTP: / / https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911 .png) join our community co-building group. + +## Participate in contribution + +If you are not familiar with the PR process of github, you can read the following two articles to learn: + +  + +[NutUI Contribution Guidelines](https://github.com/jdf2e/nutui-react/discussions/348) + +[github repository code synchronization](https://github.com/jdf2e/nutui/discussions/687) + +## Pull Request Specification + +1. Each PR addresses a single issue or adds a single feature + +2. When adding components or modifying existing components, synchronously change the corresponding unit tests and documents to ensure the stability of the code + +3. Please follow the [Angular Style Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) specification for the commit message + +4. The PR information should include which component has been modified, which problem has been solved, and associated the corresponding issue link on github + +## Pull Request Process + +1. Fork the main repository and synchronize the latest code of the main repository + +  + +2. Download the project locally, run npm install in the project root directory, and access it locally + +``` +git clone https://github.com/{github username}/nutui-react.git +npm install +cd src/sites/mobile-taro && npm install +cd - +npm run dev:taro:weapp +``` + +3. Create a new branch or develop on the corresponding branch + +``` +git checkout -b username/xxxx +git checkout {current branch} +``` + +4. If the development involves new components or new features of components, it is necessary to improve the Chinese and English documentation of the components, the unit testing of the components, and use [nutui-demo](https://github.com/jdf2e/nutui-demo) to Component testing is used. + +  + +5、Ensure that the compilation function is used normally + +``` +npm run test +// node v17 +// @nutui/nutui-react +npm run build +// @nutui/nutui-react-taro +npm run build:taro +``` + +6、After the development is completed, submit it to the corresponding branch of the warehouse. After the review is passed, the PR will be merged into the main warehouse, and then wait for NutUI-React to release a new version(Once a week)。 + +  + +### Knowledge sharing + +1. Project Use Cases + +     Share the [use case](https://nutui.jd.com/#/zh-CN/case) of NutUI, we will recommend it on the official website, prepare the name of the project, Project entry (QR code\link), logo, sample image, delivery platform (H5\mini program\APP, etc.), nutui version and other information should be submitted to **nutui@jd.com** by email. + +  + +2. Article video submission + +     Share your experiences (tutorials, articles, videos, etc.) by contributing to **nutui@jd.com**. After passing the review, collect it in the [official website resource](https://nutui.jd.com/#/zh-CN/resource), and pass your knowledge and ideas to NutUI friends. + +  + +3. Co-construction and sharing + +     Based on NutUI, design or develop new tools, such as adapting to uni-app, developing plug-ins to improve efficiency, etc. If you are interested, welcome to join our [Community Development Group](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png) to communicate and discuss. + +  + +### Credits + +Thanks to all the developers below who have contributed code to NutUI. + + + contributors + diff --git a/src/sites/doc/docs/react/contributing-react.md b/src/sites/doc/docs/react/contributing-react.md new file mode 100644 index 0000000000..21ad78757a --- /dev/null +++ b/src/sites/doc/docs/react/contributing-react.md @@ -0,0 +1,121 @@ +## 贡献指南 + +您可根据《[NutUI 邀您共建,Contributor 您好](https://jelly.jd.com/article/6320528b92d94a0068685525)》中的共建方向为 NutUI 社区做出贡献。 + +  + +本篇指南会指导你如何为 NutUI 贡献一份自己的力量,请在您要提 issue 或者 pull request 之前花几分钟来阅读一遍这篇指南,保证贡献是符合规范并且能帮助到社区。 + +## 行为准则 + +为保证良好的网络环境,营造舒适的开发氛围,希望所有的贡献者都能遵守这份[行为准则](https://www.contributor-covenant.org/zh-cn/version/2/1/code_of_conduct/),也请花时间阅读一遍全文明确哪些行为是禁止的,哪些行为是可行的。 + +## 分支管理 + +目前 github 上长期维护分支 main。如果您要修一个 bug 或新增功能,请发 pull request 到 main 分支。 + +  + +官网会同步更新 [NutUI-React 的发布周期](https://github.com/jdf2e/nutui-react/releases),同时每天都会有开发者 review github 中提交的代码。发版周期是每 1 周/次,通常会提前合并新的代码或功能,发布正式包;期间如遇紧急需求,可基于指定分支发布 beta 版本。 + +## Issue 报告指南 + +如果提交的是 Bug 报告,请务必遵守 [Bug report](https://github.com/jdf2e/nutui/blob/next/.github/ISSUE_TEMPLATE/bug_report.md) 模板。 + +## Bugs + +我们使用 [issue-helper](https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) 来做 bug 追踪。希望大家通过我们提供的 issue 小助手来提交反馈,并尽可能提供一切开发信息,因为信息越全面,开发响应速度越快,您发现的 bug 会被快速解决。 + +  + +提交 bug 之前,请先确保搜索过已有的 [issue](https://github.com/jdf2e/nutui-react/issues) 和阅读了我们的[常见问题](https://nutui.jd.com/#/zh-CN/notice)。 + +## 功能新增 + +如果您对现有的组件功能或者 API 有更好的想法,我们同样推荐你使用我们提供的 [issue-helper](https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) 提交一个添加新功能的 issue。 + +  + +如果你希望协助开发新功能新组件,可扫描[二维码](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png)加入我们的社区共建群。 + +## 参与贡献 + +如果你对 github 的 PR 流程还不熟悉,可以阅读下面这 2 篇文章来学习: + +  + +[NutUI 贡献指南](https://github.com/jdf2e/nutui-react/discussions/348) + +[github 仓库代码同步](https://github.com/jdf2e/nutui/discussions/687) + +## Pull Request 规范 + +1. 每个 PR 只解决单个问题或者新增单个功能 + +2. 当新增组件或修改原有组件时,同步更改对应的单元测试和文档,保证代码的稳定 + +3. commit message 请遵循 [Angular Style Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 规范 + +4. PR 信息中最好包括修改了哪个组件,解决了哪个问题,并关联 github 上对应的 issue 链接 + +## Pull Request 流程 + +1、fork 主仓库,并同步主仓库的最新代码 + +2、将项目下载到本地,在项目根目录下运行 npm install,并在本地能正常访问 + +``` +git clone https://github.com/{github username}/nutui-react.git +npm install +npm run dev +``` + +3、创建一个新的分支或在对应分支上进行开发 + +``` +git checkout -b username/xxxx +git checkout {现有分支名称} +``` + +4、如开发涉及新组件或组件的新特性,需要完善组件的中英文文档、组件的单元测试,同时要使用 [nutui-demo](https://github.com/jdf2e/nutui-demo) 对组件测试使用。 + +5、保证编译功能正常使用 + +``` +npm run test +// build 使用 node 17 版本 +// 构建 @nutui/nutui-react +npm run build +// 构建 @nutui/nutui-react-taro +npm run build:taro +``` + +6、开发完成后提交到仓库的对应分支上,PR 会在 Review 通过后被合并到主仓库,然后等待 NutUI-React 发布新版本(每周一次)。 + +### 知识分享 + +1. 项目使用案例 + +     分享 NutUI 的[使用案例](https://nutui.jd.com/next/#/case),我们会在官网进行推荐展示,准备项目的名称、项目入口(二维码\链接)、logo、示例图、投放平台(H5\小程序\APP等)、nutui 版本等信息,以邮箱的形式提交到 **nutui@jd.com**。 + +  + +2. 文章视频投稿 + +     分享你的经验(教程、文章、视频等),可以给 **nutui@jd.com** 投稿。在审核通过后,收藏到[官网资源](https://nutui.jd.com/next/#/resource)中,将你的知识与思想传递给 NutUI 的小伙伴们。 + +  + +3. 共建分享征集 + +     以 NutUI-React 为基础,设计或开发新的工具,开发提效的插件等。有兴趣欢迎加入我们的[社区开发群](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png)交流讨论。 + +  + +### Credits + +感谢以下所有给 NutUI 贡献过代码的开发者。 +  + +contributors + diff --git a/src/sites/doc/docs/react/international-react.en-US.md b/src/sites/doc/docs/react/international-react.en-US.md new file mode 100644 index 0000000000..30f695393b --- /dev/null +++ b/src/sites/doc/docs/react/international-react.en-US.md @@ -0,0 +1,42 @@ +# Internationalization + +NutUI-React support multiple languages. NutUI uses Chinese as the default language. Use as follows: + +## Usage + +### Switch languages + +:::demo + +```javascript +import { ConfigProvider } from '@nutui/nutui-react' +import en from '@nutui/nutui-react/dist/locales/en-US' + +ReactDOM.render( + + + , + document.querySelector('#root') +) +``` + +::: + +## Current supported languages: + +| Language | Filename | Version | +| --- | --- | --- | +| English | en-US | `v1.0.0` | +| Chinese | zh-CN | `v1.0.0` | +| Uygur | zh-UG | `v1.3.15` | +| Traditional Chinese | zh-TW | `v1.0.0` | +| Indonesian | id-ID | `v1.3.2` | +| Thai | th-TH | PR | + +> View all language configs [Here](https://github.com/jdf2e/nutui-react/tree/main/src/locales). + +## Common Questions + +### Missing language pack? + +Welcome to commit PR If you need new language pack. Changes refer to [language pack](https://github.com/jdf2e/nutui-react/tree/main/src/locales). diff --git a/src/sites/doc/docs/react/international-react.md b/src/sites/doc/docs/react/international-react.md new file mode 100644 index 0000000000..be7ed2c381 --- /dev/null +++ b/src/sites/doc/docs/react/international-react.md @@ -0,0 +1,43 @@ +# 国际化 + +NutUI-React 1.0 以上版本支持多语言。组件默认使用中文。 + +## 使用方法 + +### 多语言切换 + +:::demo + +```javascript +// 多语言版本 +import { ConfigProvider } from '@nutui/nutui-react' +import en from '@nutui/nutui-react/dist/locales/en-US' + +ReactDOM.render( + + + , + document.querySelector('#root') +) +``` + +::: + +## 目前支持的语言: + +| 语言 | 文件名 | 版本 | +| --- | --- | --- | +| 英语 | en-US | `v1.0.0` | +| 简体中文 | zh-CN | `v1.0.0` | +| 维吾尔语 | zh-UG | `v1.3.15` | +| 繁體中文 | zh-TW | `v1.0.0` | +| 印度尼西亚语 | id-ID | `v1.3.2` | +| 泰语 | th-TH | 等待 PR | + +> 在 [这里](https://github.com/jdf2e/nutui-react/tree/main/src/locales) 查看所有的语言包源文件。 + +## 常见问题 + +### 找不到所需的语言包? + +如果上方列表中没有你需要的语言,欢迎给我们提 Pull Request 来增加新的语言包。改动内容可以参考 [语言包](https://github.com/jdf2e/nutui-react/tree/main/src/locales) 的 PR diff --git a/src/sites/doc/docs/react/intro-react.en-US.md b/src/sites/doc/docs/react/intro-react.en-US.md new file mode 100644 index 0000000000..9bcccc2eae --- /dev/null +++ b/src/sites/doc/docs/react/intro-react.en-US.md @@ -0,0 +1,42 @@ +# NutUI-React + +The NutUI-React component library is suitable for H5 applications of the React technology stack. It can be used out of the box to help developers quickly develop user interfaces, improve development efficiency, and improve development experience. + +## Features + +- 🚀 70+ high-quality components covering mainstream mobile scenarios +- 📖 Based on JD APP 10.0 visual specification +- 🍭 Support on-demand reference +- 📖 Detailed documentation and examples +- 💪 Supports TypeScript +- 💪 Support for server-side rendering (Next.js) +- 🍭 Support custom themes +- 🌍 Internationalization support +- 🍭 Unit test coverage exceeds 80% to ensure stability +- 📖 Sketch design resources are available + +## Examples + +NutUI-React + +## Compatibility Environment + +| Version | Supported Frameworks | Visual Specifications | Compatibility | +| --- | --- | --- | --- | +| @nutui/nutui-react | React 17\18 | Jingdong [APP 10.0](#/resource) | Modern browsers start with Chrome >= 51、iOS >= 10.0 | + +For some older versions of browsers, corresponding polyfills are needed. It is recommended to use @babel/preset-env to address browser compatibility issues. The package provided by NutUI-React has not undergone extensive syntax transformation, so it is necessary to include the NutUI-React package in the compilation phase. + +For browsers that do not support CSS variables, it is recommended to use [postcss-var-replace](https://www.npmjs.com/package/postcss-var-replace) to resolve compatibility issues. + +## All Contributors + +Thanks to the following friends for their contributions to NutUI-React: + + + contributors + + +## LICENSE + +[MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) diff --git a/src/sites/doc/docs/react/intro-react.md b/src/sites/doc/docs/react/intro-react.md new file mode 100644 index 0000000000..eea1cf0f3a --- /dev/null +++ b/src/sites/doc/docs/react/intro-react.md @@ -0,0 +1,42 @@ +# NutUI-React + +NutUI-React 组件库,适用于 React 技术栈的 H5 应用,开箱即用,帮助研发快速开发用户界面,提升开发效率,改善开发体验。 + +## 特性 + +- 🚀 70+ 高质量组件,覆盖移动端主流场景 +- 📖 基于京东APP 10.0 视觉规范 +- 🍭 支持按需引用 +- 📖 详尽的文档和示例 +- 💪 支持 TypeScript +- 💪 支持服务端渲染(Next.js) +- 🍭 支持定制主题 +- 🌍 国际化支持 +- 🍭 单元测试覆盖率超过 80%,保障稳定性 +- 📖 提供 Sketch 设计资源 + +## 扫码体验 + +NutUI-React + +## 兼容情况 + +| 版本 | 支持的框架 | 视觉规范 | 兼容 | +| --- | --- | --- | --- | +| @nutui/nutui-react | React 17\18 | 京东 [APP 10.0](#/resource) 规范 | 现代浏览器以 Chrome >= 51、iOS >= 10.0 | + +对于一些低版本的浏览器,需要相应的 Ployfill,建议使用 @babel/preset-environment 来解决浏览器兼容问题。NutUI-React 提供的包并未进行过多的语法转换,所以需要将 NutUI-React 包含到编译阶段。 + +对于不支持 CSS 变量的浏览器,建议使用 [postcss-var-replace](https://www.npmjs.com/package/postcss-var-replace) 来解决兼容问题。 + +## 贡献者们 + +感谢以下小伙伴们为 NutUI-React 发展做出的贡献: + + + contributors + + +## 开源协议 + +本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议 diff --git a/migrate-from-v1.md b/src/sites/doc/docs/react/migrate-from-v1.md similarity index 100% rename from migrate-from-v1.md rename to src/sites/doc/docs/react/migrate-from-v1.md diff --git a/migrate-from-v2.md b/src/sites/doc/docs/react/migrate-from-v2.md similarity index 100% rename from migrate-from-v2.md rename to src/sites/doc/docs/react/migrate-from-v2.md diff --git a/src/sites/doc/docs/react/official-theme-react.en-US.md b/src/sites/doc/docs/react/official-theme-react.en-US.md new file mode 100644 index 0000000000..a5abda8b81 --- /dev/null +++ b/src/sites/doc/docs/react/official-theme-react.en-US.md @@ -0,0 +1,65 @@ +# Official theme + +## introduce + +NutUI provides multiple sets of official `UI` themes by default, while allowing new themes to be customized to a certain extent to meet the diverse visual needs of the business. + +#### + +| theme description | scss file name | +| --- | --- | +| Jingdong APP 10.0 theme (default) | `variables.scss` | +| Jingdong B Mall Theme Preview | `variables-jdb.scss ` | + +NutUI theme customization + +## How to use + +### Modify the configuration file of the local project vite or webpack + +Modify the **sass-loader** configuration in the vite or webpack configuration file. The following example + +#### vite configuration example + +:::demo + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + // Default Jingdong APP 10.0 theme > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // Jingdong B Mall theme > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + }, + }, + }, +}) +``` + +::: + +#### webpack configuration example + +:::demo + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // Default Jingdong APP theme > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // Jingdong B Mall theme > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + // Note: In different versions of sass-loader, the name of this option is different. For details, please refer to the version documentation corresponding to sass-loader + data: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + } + } + ] +} +``` + +::: diff --git a/src/sites/doc/docs/react/official-theme-react.md b/src/sites/doc/docs/react/official-theme-react.md new file mode 100644 index 0000000000..777b004251 --- /dev/null +++ b/src/sites/doc/docs/react/official-theme-react.md @@ -0,0 +1,65 @@ +# 官方主题 + +## 介绍 + +NutUI 默认提供多套官方`UI`主题,同时允许在一定程度上定制新主题,以满足业务的多样化视觉需求。 + +#### + +| 主题说明 | scss 文件名称 | +| --- | --- | +| 京东 APP 主题(默认) | `variables.scss` | +| 京东B商城主题预览 | `variables-jdb.scss` | + +NutUI 主题定制 + +## 使用方式 + +### 修改本地项目 vite 或者 webpack 的配置文件 + +修改 vite 或者 webpack 配置文件中 **sass-loader** 的配置。如下示例 + +#### vite 配置示例 + +:::demo + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + // 默认京东 APP 主题 > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // 京东B商城主题 > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + }, + }, + }, +}) +``` + +::: + +#### webpack 配置示例 + +:::demo + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // 默认京东 APP 主题 > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // 京东B商城主题 > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + // 注意:在 sass-loader 不同版本,这个选项名是 是不一样的,具体可参考 sass-loader对应的版本文档 + data: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + } + } + ] +} +``` + +::: diff --git a/src/sites/doc/docs/react/start-react.en-US.md b/src/sites/doc/docs/react/start-react.en-US.md new file mode 100644 index 0000000000..753a4772ac --- /dev/null +++ b/src/sites/doc/docs/react/start-react.en-US.md @@ -0,0 +1,190 @@ +# Quick Start + +## Intro + +Through this article, you can master the installation and use of NutUI React. The operation is simple and easy to use, and the development is simple and fast. + +## Install + +#### 1. Install via NPM + +```sh +#pnpm +pnpm add @nutui/nutui-react +#yarn +yarn add @nutui/nutui-react +# npm +npm install @nutui/nutui-react +``` + +#### 2. Install and use via CDN + +> NutUI is available on public CDNs like **jsdelivr** and **unpkg**. +> It is not recommended to use the component library CDN in the production environment. If this method is required, it is recommended to download the specific version of the CDN file to the local project directory for use. + +:::demo + +```html + + + + + + + + + + + + + + +
    + + + +``` + +::: + +## Component usage + +> NutUI React supports Tree Shaking by default, and supports on-demand import of component JS files without any plug-in configuration. However, css style files cannot be implemented in this way, so from the perspective of style, it can be divided into the following two usage methods: + +#### Method 1, Conventional usage: Full import of styles + +:::demo + +```js +import * as React from 'react' +import * as ReactDOM from 'react-dom' +import '@nutui/nutui-react/dist/style.css' +import { Button } from '@nutui/nutui-react' + +ReactDOM.render( +
    + +
    , + document.getElementById('app') +) +``` + +::: + +#### Method 2, import styles on demand + +
    +vite + +Install the `vite-plugin-imp` plugin and configure it. + +```sh +#pnpm +pnpm add vite-plugin-imp -D +#yarn +yarn add vite-plugin-imp -D +# npm +npm install vite-plugin-imp -D +``` + +:::demo + +```js +// vite.config.js +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import vitePluginImp from 'vite-plugin-imp' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + vitePluginImp({ + libList: [ + { + libName: '@nutui/nutui-react', + style: (name) => { + return `@nutui/nutui-react/dist/esm/${name}/style/css` + }, + replaceOldImport: false, + camel2DashComponentName: false, + }, + ], + }), + ], +}) +``` + +::: + +

    + +
    +webpack + +Install the `babel-plugin-import` plugin and configure it. + +```sh +#pnpm +pnpm add babel-plugin-import -D +#yarn +yarn add babel-plugin-import -D +# npm +npm install babel-plugin-import -D +``` + +Babel configuration: + +:::demo + +```js +{ + //... + plugins: [ + [ + 'import', + { + libraryName: '@nutui/nutui-react', + libraryDirectory: 'dist/esm', + style: 'css', + camel2DashComponentName: false, + }, + 'nutui-react', + ], + ] +} +``` + +::: + +

    + +## Precautions for use + +- NutUI-React is built on [react@^18.0.0](https://www.npmjs.com/package/react) +- The component CSS unit uses **px**, if you need **rem** unit in your project, you can convert it with some tools, such as [px2rem-loader](https://www.npmjs.com/package/px2rem-loader) of [webpack](https://www.webpackjs.com/), [postcss] of [postcss](https://github.com/postcss/postcss) -plugin-px2rem](https://www.npmjs.com/package/postcss-plugin-px2rem) plugin etc. + +## Examples + +Source code for all the examples can be found in the [packages/templates](https://github.com/jdf2e/nutui-react/tree/next/packages/nutui-templates) directory. + + diff --git a/src/sites/doc/docs/react/start-react.md b/src/sites/doc/docs/react/start-react.md new file mode 100644 index 0000000000..deb0328ec8 --- /dev/null +++ b/src/sites/doc/docs/react/start-react.md @@ -0,0 +1,190 @@ +# 快速上手 + +## 介绍 + +通过本文你可以掌握 NutUI React 的安装和使用方法,操作简单易上手,开发简洁快速。 + +## 安装 + +#### 1. 通过 NPM 安装 + +```sh +# pnpm +pnpm add @nutui/nutui-react +# yarn +yarn add @nutui/nutui-react +# npm +npm install @nutui/nutui-react +``` + +#### 2. 通过 CDN 安装及使用 + +> 可以在 **jsdelivr** 和 **unpkg** 等公共 CDN 上获取到 NutUI。 +> 不推荐在生产环境使用组件库 CDN,如果需要这种使用方式,建议将特定版本的 CDN 文件下载至本地项目目录中使用。 + +:::demo + +```html + + + + + + + + + + + + + + +
    + + + +``` + +::: + +## 组件使用 + +> NutUI React 默认支持 Tree Shaking,在无任何插件配置的情况下支持组件 JS 文件的按需引入。但 css 样式文件无法通过这种方式实现,因此从样式的角度可以分为以下两种使用方法: + +#### 方法一、常规用法:全量引入样式 + +:::demo + +```js +import * as React from 'react' +import * as ReactDOM from 'react-dom' +import '@nutui/nutui-react/dist/style.css' +import { Button } from '@nutui/nutui-react' + +ReactDOM.render( +
    + +
    , + document.getElementById('app') +) +``` + +::: + +#### 方法二、按需引入样式 + +
    +vite + +安装 `vite-plugin-imp` 插件并配置。 + +```sh +# pnpm +pnpm add vite-plugin-imp -D +# yarn +yarn add vite-plugin-imp -D +# npm +npm install vite-plugin-imp -D +``` + +:::demo + +```js +// vite.config.js +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import vitePluginImp from 'vite-plugin-imp' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + react(), + vitePluginImp({ + libList: [ + { + libName: '@nutui/nutui-react', + style: (name) => { + return `@nutui/nutui-react/dist/esm/${name}/style/css` + }, + replaceOldImport: false, + camel2DashComponentName: false, + }, + ], + }), + ], +}) +``` + +::: + +

    + +
    +webpack + +安装 `babel-plugin-import` 插件并配置。 + +```sh +# pnpm +pnpm add babel-plugin-import -D +# yarn +yarn add babel-plugin-import -D +# npm +npm install babel-plugin-import -D +``` + +babel 配置: + +:::demo + +```js +{ + // ... + plugins: [ + [ + 'import', + { + libraryName: '@nutui/nutui-react', + libraryDirectory: 'dist/esm', + style: 'css', + camel2DashComponentName: false, + }, + 'nutui-react', + ], + ] +} +``` + +::: + +

    + +## 使用注意事项 + +- NutUI-React 基于 [react@^18.0.0](https://www.npmjs.com/package/react) 构建 +- 组件 CSS 单位使用的是 **px**,如果你的项目中需要 **rem** 单位,可借助一些工具进行转换,比如 [webpack](https://www.webpackjs.com/) 的 [px2rem-loader](https://www.npmjs.com/package/px2rem-loader)、[postcss](https://github.com/postcss/postcss) 的 [postcss-plugin-px2rem](https://www.npmjs.com/package/postcss-plugin-px2rem) 插件等 + +## 示例 + +示例代码可以再 [packages/templates](https://github.com/jdf2e/nutui-react/tree/next/packages/nutui-templates) 下查看 + + diff --git a/src/sites/doc/docs/react/theme-react.en-US.md b/src/sites/doc/docs/react/theme-react.en-US.md new file mode 100644 index 0000000000..062a297deb --- /dev/null +++ b/src/sites/doc/docs/react/theme-react.en-US.md @@ -0,0 +1,68 @@ +# Customize Theme + +## Introduce + +NutUI-React supports flexible style customization to meet multiple visual business and brand needs, including but not limited to support for global master tone and component-specific visual customization. +
    +
    +In NutUI-React version 2.0, the Sass theme customization function of 1.x can still be used. We added CSS variables to the original theme customization function, so that the new theme customization function can be used without introducing additional SCSS style files. + +## Method 1: Use CSS Variables to configure topics + +`NutUI - React` can [CSS Vars] (https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) to organize the pattern, By overwriting these 'CSS' variables, you can achieve custom theme, dynamic switching theme and other functions. +
    +
    +You can play with the [ConfigProvider](#/zh-CN/component/configprovider) component. +
    +
    +We recommend replacing [CSS Vars] (https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) for the theme of personalized configuration. + +## Method 2: Use Sass variable for topic configuration + +#### Step 1: Create a custom variable SCSS file + +Create a new 'SCSS' file 'custom_theme.scss' in your local project. + +```scss +// Dominant tone +$color-primary: #fa2c19; +$color-primary-end: #fa6419; +... +``` + +#### Step 2: Modify the configuration file of the local project webpack or vite + +Modify the ** ass-loader** configuration in the 'vite' or 'webpack' configuration file. The following example + +#### vite + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";@import "./your/custom_theme.scss";`, + }, + }, + }, +}) +``` + +#### webpack + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // Note: The option name is different for different versions of ass-loader. For details, see the corresponding version document of ass-loader + data: `@import "./assets/custom_theme.scss";@import "@nutui/nutui/dist/styles/variables.scss";`, + } + } + ] +} +``` diff --git a/src/sites/doc/docs/react/theme-react.md b/src/sites/doc/docs/react/theme-react.md new file mode 100644 index 0000000000..cc180538e2 --- /dev/null +++ b/src/sites/doc/docs/react/theme-react.md @@ -0,0 +1,65 @@ +# 主题定制 + +## 介绍 + +NutUI-React 支持灵活的样式定制,满足多种视觉业务和品牌需求,包括但不限于全局主色调和特定组件视觉定制的支持。 +
    +
    +在 NutUI-React 的 2.0 版本中,依然可以使用 1.x 的 Sass 定制主题功能,我们在原有的主题定制功能上新增了 CSS 变量, 无需引入额外的 SCSS 样式文件,就可以使用到新的主题定制功能。 + +## 方式一 使用 CSS Variables 进行主题配置 + +`NutUI-React` 组件可以通过 [CSS Vars](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) 来组织样式,通过覆盖这些 `CSS` 变量,可以实现定制主题、动态切换主题等功能。 +
    +
    +您可在 [ConfigProvider 组件](#/zh-CN/component/configprovider) 进行体验。我们更推荐使用替换 [CSS Vars](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) 的方式来进行个性化的主题配置。 + +## 方式二 使用 Sass 变量 进行主题配置 + +### 第一步 新建自定义变量 SCSS 文件 + +在本地项目中新建一个 `SCSS` 文件 `custom_theme.scss` 进行自定义。 + +```scss +// 主色调 +$color-primary: #fa2c19; +$color-primary-end: #fa6419; +... +``` + +### 第二步 修改本地项目 Webpack 或者 Vite 的配置文件 + +修改 `vite` 或者 `webpack` 配置文件中 **sass-loader** 的配置。如下示例: + +#### Vite 方式 + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";@import "./your/custom_theme.scss";`, + }, + }, + }, +}) +``` + +#### Webpack 方式 + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // 注意:在 sass-loader 不同版本,这个选项名是 是不一样的,具体可参考 sass-loader对应的版本文档 + data: `@import "./assets/custom_theme.scss";@import "@nutui/nutui/dist/styles/variables.scss";`, + } + } + ] +} +``` diff --git a/src/sites/doc/docs/taro/contributing-react.en-US.md b/src/sites/doc/docs/taro/contributing-react.en-US.md new file mode 100644 index 0000000000..e15ca4a49c --- /dev/null +++ b/src/sites/doc/docs/taro/contributing-react.en-US.md @@ -0,0 +1,127 @@ +

    Contribution Guidelines

    + +You can contribute to the NutUI community according to the co-construction direction in 《[NutUI invites you to build, Hello Contributor](https://jelly.jd.com/article/6320528b92d94a0068685525)》. + +  + +This guide will guide you on how to contribute to NutUI. Please take a few minutes to read this guide before you file an issue or pull request to ensure that the contribution is compliant and can help the community. + +## code of conduct + +In order to ensure a good network environment and create a comfortable development atmosphere, I hope all contributors can abide by this [Code of Conduct](https://www.contributor-covenant.org/zh-cn/version/2/1/code_of_conduct/), and please take the time to read the full text to clarify what is prohibited and what is allowed. + +## Branch management + +The main branch is currently maintained on github. If you want to fix a bug or add a feature, send a pull request to the main branch. + +  + +The official website will update [NutUI - React release cycle] (https://github.com/jdf2e/nutui-react/releases), at the same time every day developers review submitted code in the making. The release cycle is once a week, usually incorporating new code or features in advance and releasing formal packages; In case of emergency, beta versions can be released based on the specified branch. + +## Issue + +If submit Bug reports, please be sure to comply with the [` Bug report `] (https://github.com/jdf2e/nutui/blob/next/.github/ISSUE_TEMPLATE/bug_report.md) template. + +## Bugs + +We use [issue - helper] (https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) for bug tracking. We hope you can submit feedback through the issue assistant we provide, and provide all the development information as much as possible, because the more comprehensive the information, the faster the development response, and the bugs you find will be solved quickly. + +  + +Before you commit a bug, Please ensure that the search had existing [issue] (https://github.com/jdf2e/nutui-react/issues) and read our [FAQ] (https://nutui.jd.com/#/zh-CN/notice). + +## new features + +If you have a better idea of an existing component function or API, We also recommend that you use our provided [issue - helper] (https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) to submit a issue of adding new features. + +  + +If you want to help develop new features and components, Can scan [qr code] (HTTP: / / https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911 .png) join our community co-building group. + +## Participate in contribution + +If you are not familiar with the PR process of github, you can read the following two articles to learn: + +  + +[NutUI Contribution Guidelines](https://github.com/jdf2e/nutui-react/discussions/348) + +[github repository code synchronization](https://github.com/jdf2e/nutui/discussions/687) + +## Pull Request Specification + +1. Each PR addresses a single issue or adds a single feature + +2. When adding components or modifying existing components, synchronously change the corresponding unit tests and documents to ensure the stability of the code + +3. Please follow the [Angular Style Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) specification for the commit message + +4. The PR information should include which component has been modified, which problem has been solved, and associated the corresponding issue link on github + +## Pull Request Process + +1. Fork the main repository and synchronize the latest code of the main repository + +  + +2. Download the project locally, run npm install in the project root directory, and access it locally + +``` +git clone https://github.com/{github username}/nutui-react.git +npm install +npm run dev +``` + +3. Create a new branch or develop on the corresponding branch + +``` +git checkout -b username/xxxx +git checkout {current branch} +``` + +4. If the development involves new components or new features of components, it is necessary to improve the Chinese and English documentation of the components, the unit testing of the components, and use [nutui-demo](https://github.com/jdf2e/nutui-demo) to Component testing is used. + +  + +5、Ensure that the compilation function is used normally + +``` +npm run test +// node v17 +// @nutui/nutui-react +npm run build +// @nutui/nutui-react-taro +npm run build:taro +``` + +6、After the development is completed, submit it to the corresponding branch of the warehouse. After the review is passed, the PR will be merged into the main warehouse, and then wait for NutUI-React to release a new version(Once a week)。 + +  + +### Knowledge sharing + +1. Project Use Cases + +     Share the [use case](https://nutui.jd.com/#/zh-CN/case) of NutUI, we will recommend it on the official website, prepare the name of the project, Project entry (QR code\link), logo, sample image, delivery platform (H5\mini program\APP, etc.), nutui version and other information should be submitted to **nutui@jd.com** by email. + +  + +2. Article video submission + +     Share your experiences (tutorials, articles, videos, etc.) by contributing to **nutui@jd.com**. After passing the review, collect it in the [official website resource](https://nutui.jd.com/#/zh-CN/resource), and pass your knowledge and ideas to NutUI friends. + +  + +3. Co-construction and sharing + +     Based on NutUI, design or develop new tools, such as adapting to uni-app, developing plug-ins to improve efficiency, etc. If you are interested, welcome to join our [Community Development Group](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png) to communicate and discuss. + +  + +### Credits + +Thanks to all the developers below who have contributed code to NutUI. + + + contributors + diff --git a/src/sites/doc/docs/taro/contributing-react.md b/src/sites/doc/docs/taro/contributing-react.md new file mode 100644 index 0000000000..b851b28543 --- /dev/null +++ b/src/sites/doc/docs/taro/contributing-react.md @@ -0,0 +1,121 @@ +

    贡献指南

    + +您可根据《[NutUI 邀您共建,Contributor 您好](https://jelly.jd.com/article/6320528b92d94a0068685525)》中的共建方向为 NutUI 社区做出贡献。 + +  + +本篇指南会指导你如何为 NutUI 贡献一份自己的力量,请在您要提 issue 或者 pull request 之前花几分钟来阅读一遍这篇指南,保证贡献是符合规范并且能帮助到社区。 + +## 行为准则 + +为保证良好的网络环境,营造舒适的开发氛围,希望所有的贡献者都能遵守这份[行为准则](https://www.contributor-covenant.org/zh-cn/version/2/1/code_of_conduct/),也请花时间阅读一遍全文明确哪些行为是禁止的,哪些行为是可行的。 + +## 分支管理 + +目前 github 上长期维护分支 main。如果您要修一个 bug 或新增功能,请发 pull request 到 main 分支。 + +  + +官网会同步更新 [NutUI-React 的发布周期](https://github.com/jdf2e/nutui-react/releases),同时每天都会有开发者 review github 中提交的代码。发版周期是每 1 周/次,通常会提前合并新的代码或功能,发布正式包;期间如遇紧急需求,可基于指定分支发布 beta 版本。 + +## Issue 报告指南 + +如果提交的是 Bug 报告,请务必遵守 [Bug report](https://github.com/jdf2e/nutui/blob/next/.github/ISSUE_TEMPLATE/bug_report.md) 模板。 + +## Bugs + +我们使用 [issue-helper](https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) 来做 bug 追踪。希望大家通过我们提供的 issue 小助手来提交反馈,并尽可能提供一切开发信息,因为信息越全面,开发响应速度越快,您发现的 bug 会被快速解决。 + +  + +提交 bug 之前,请先确保搜索过已有的 [issue](https://github.com/jdf2e/nutui-react/issues) 和阅读了我们的[常见问题](https://nutui.jd.com/#/zh-CN/notice)。 + +## 功能新增 + +如果您对现有的组件功能或者 API 有更好的想法,我们同样推荐你使用我们提供的 [issue-helper](https://nutui.jd.com/nutui-issue-helper/?repo=jdf2e/nutui-react) 提交一个添加新功能的 issue。 + +  + +如果你希望协助开发新功能新组件,可扫描[二维码](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png)加入我们的社区共建群。 + +## 参与贡献 + +如果你对 github 的 PR 流程还不熟悉,可以阅读下面这 2 篇文章来学习: + +  + +[NutUI 贡献指南](https://github.com/jdf2e/nutui-react/discussions/348) + +[github 仓库代码同步](https://github.com/jdf2e/nutui/discussions/687) + +## Pull Request 规范 + +1. 每个 PR 只解决单个问题或者新增单个功能 + +2. 当新增组件或修改原有组件时,同步更改对应的单元测试和文档,保证代码的稳定 + +3. commit message 请遵循 [Angular Style Commit Message Conventions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153) 规范 + +4. PR 信息中最好包括修改了哪个组件,解决了哪个问题,并关联 github 上对应的 issue 链接 + +## Pull Request 流程 + +1、fork 主仓库,并同步主仓库的最新代码 + +2、将项目下载到本地,在项目根目录下运行 npm install,并在本地能正常访问 + +``` +git clone https://github.com/{github username}/nutui-react.git +npm install +npm run dev +``` + +3、创建一个新的分支或在对应分支上进行开发 + +``` +git checkout -b username/xxxx +git checkout {现有分支名称} +``` + +4、如开发涉及新组件或组件的新特性,需要完善组件的中英文文档、组件的单元测试,同时要使用 [nutui-demo](https://github.com/jdf2e/nutui-demo) 对组件测试使用。 + +5、保证编译功能正常使用 + +``` +npm run test +// build 使用 node 17 版本 +// 构建 @nutui/nutui-react +npm run build +// 构建 @nutui/nutui-react-taro +npm run build:taro +``` + +6、开发完成后提交到仓库的对应分支上,PR 会在 Review 通过后被合并到主仓库,然后等待 NutUI-React 发布新版本(每周一次)。 + +### 知识分享 + +1. 项目使用案例 + +     分享 NutUI 的[使用案例](https://nutui.jd.com/next/#/case),我们会在官网进行推荐展示,准备项目的名称、项目入口(二维码\链接)、logo、示例图、投放平台(H5\小程序\APP等)、nutui 版本等信息,以邮箱的形式提交到 **nutui@jd.com**。 + +  + +2. 文章视频投稿 + +     分享你的经验(教程、文章、视频等),可以给 **nutui@jd.com** 投稿。在审核通过后,收藏到[官网资源](https://nutui.jd.com/next/#/resource)中,将你的知识与思想传递给 NutUI 的小伙伴们。 + +  + +3. 共建分享征集 + +     以 NutUI-React 为基础,设计或开发新的工具,开发提效的插件等。有兴趣欢迎加入我们的[社区开发群](https://img13.360buyimg.com/imagetools/s300x300_jfs/t1/187308/9/29678/349561/634fa983E93012590/a641089fdfed5911.png)交流讨论。 + +  + +### Credits + +感谢以下所有给 NutUI 贡献过代码的开发者。 +  + +contributors + diff --git a/src/sites/doc/docs/taro/international-react.en-US.md b/src/sites/doc/docs/taro/international-react.en-US.md new file mode 100644 index 0000000000..a0bbe071cb --- /dev/null +++ b/src/sites/doc/docs/taro/international-react.en-US.md @@ -0,0 +1,42 @@ +# Internationalization + +NutUI-React support multiple languages. NutUI uses Chinese as the default language. Use as follows: + +## Usage + +### Switch languages + +:::demo + +```javascript +import { ConfigProvider } from '@nutui/nutui-react-taro' +import en from '@nutui/nutui-react-taro/dist/locales/en-US' + +ReactDOM.render( + + + , + document.querySelector('#root') +) +``` + +::: + +## Current supported languages: + +| Language | Filename | Version | +| --- | --- | --- | +| English | en-US | `v1.0.0` | +| Chinese | zh-CN | `v1.0.0` | +| Uygur | zh-UG | `v1.3.15` | +| Traditional Chinese | zh-TW | `v1.0.0` | +| Indonesian | id-ID | `v1.3.2` | +| Thai | th-TH | PR | + +> View all language configs [Here](https://github.com/jdf2e/nutui-react/tree/main/src/locales). + +## Common Questions + +### Missing language pack? + +Welcome to commit PR If you need new language pack. Changes refer to [language pack](https://github.com/jdf2e/nutui-react/tree/main/src/locales). diff --git a/src/sites/doc/docs/taro/international-react.md b/src/sites/doc/docs/taro/international-react.md new file mode 100644 index 0000000000..19f3c6b717 --- /dev/null +++ b/src/sites/doc/docs/taro/international-react.md @@ -0,0 +1,43 @@ +# 国际化 + +NutUI-React 1.0 以上版本支持多语言。组件默认使用中文。 + +## 使用方法 + +### 多语言切换 + +:::demo + +```javascript +// 多语言版本 +import { ConfigProvider } from '@nutui/nutui-react-taro' +import en from '@nutui/nutui-react-taro/dist/locales/en-US' + +ReactDOM.render( + + + , + document.querySelector('#root') +) +``` + +::: + +## 目前支持的语言: + +| 语言 | 文件名 | 版本 | +| --- | --- | --- | +| 英语 | en-US | `v1.0.0` | +| 简体中文 | zh-CN | `v1.0.0` | +| 维吾尔语 | zh-UG | `v1.3.15` | +| 繁體中文 | zh-TW | `v1.0.0` | +| 印度尼西亚语 | id-ID | `v1.3.2` | +| 泰语 | th-TH | 等待 PR | + +> 在 [这里](https://github.com/jdf2e/nutui-react/tree/main/src/locales) 查看所有的语言包源文件。 + +## 常见问题 + +### 找不到所需的语言包? + +如果上方列表中没有你需要的语言,欢迎给我们提 Pull Request 来增加新的语言包。改动内容可以参考 [语言包](https://github.com/jdf2e/nutui-react/tree/main/src/locales) 的 PR diff --git a/src/sites/doc/docs/taro/intro-react.en-US.md b/src/sites/doc/docs/taro/intro-react.en-US.md new file mode 100644 index 0000000000..adfc592745 --- /dev/null +++ b/src/sites/doc/docs/taro/intro-react.en-US.md @@ -0,0 +1,39 @@ +# NutUI-React + +NutUI-React component library, based on Taro, uses React technology stack to develop applet applications, out of the box, helps R&D to quickly develop user interface, improve development efficiency, and improve development experience. + +## Features + +- 🚀 70+ high-quality components covering mainstream mobile scenarios +- 💪 Supports a set of code to develop multi-terminal Mini Programs +H5 at the same time +- 📖 Based on JD APP 10.0 visual specification +- 🍭 Support on-demand reference +- 📖 Detailed documentation and examples +- 💪 Supports TypeScript +- 💪 Support for server-side rendering (test phase) +- 🍭 Support custom themes +- 🌍 Internationalization support +- 🍭 Unit test coverage exceeds 80% to ensure stability +- 📖 Sketch design resources are available + +## Examples + +NutUI-React + +## Version + +| Version | Supported Frameworks | Visual Specifications | Compatibility | +| --- | --- | --- | --- | +| @nutui/nutui-react-taro | React 17\18 | Jingdong [APP 10.0](/next#/resource) | Modern browsers start with Chrome >= 51、iOS >= 10.0、Android >= 6 | + +## All Contributors + +Thanks to the following friends for their contributions to NutUI-React: + + + contributors + + +## LICENSE + +[MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) diff --git a/src/sites/doc/docs/taro/intro-react.md b/src/sites/doc/docs/taro/intro-react.md new file mode 100644 index 0000000000..f862e45e9a --- /dev/null +++ b/src/sites/doc/docs/taro/intro-react.md @@ -0,0 +1,39 @@ +# NutUI-React + +NutUI-React 组件库,基于 Taro,使用 React 技术栈开发小程序应用,开箱即用,帮助研发快速开发用户界面,提升开发效率,改善开发体验。 + +## 特性 + +- 🚀 70+ 高质量组件,覆盖移动端主流场景 +- 💪 支持一套代码同时开发多端小程序+H5 +- 📖 基于京东APP 10.0 视觉规范 +- 🍭 支持按需引用 +- 📖 详尽的文档和示例 +- 💪 支持 TypeScript +- 💪 支持服务端渲染(测试阶段) +- 🍭 支持定制主题 +- 🌍 国际化支持 +- 🍭 单元测试覆盖率超过 80%,保障稳定性 +- 📖 提供 Sketch 设计资源 + +## 扫码体验 + +NutUI-React + +## 版本说明 + +| 版本 | 支持的框架 | 视觉规范 | 兼容 | +| --- | --- | --- | --- | +| @nutui/nutui-react | React 17\18 | 京东 [APP 10.0](/next#/resource) 规范 | 现代浏览器以 Chrome >= 51、iOS >= 10.0、Android >= 6 | + +## 贡献者们 + +感谢以下小伙伴们为 NutUI-React 发展做出的贡献: + + + contributors + + +## 开源协议 + +本项目基于 [MIT](https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89) 协议 diff --git a/src/sites/doc/docs/taro/migrate-from-v1.md b/src/sites/doc/docs/taro/migrate-from-v1.md new file mode 100644 index 0000000000..97ec2f56e0 --- /dev/null +++ b/src/sites/doc/docs/taro/migrate-from-v1.md @@ -0,0 +1,888 @@ +# 从 v1 升级到 v2 + +本文档将帮助您从 NutUI React `1.x` 升级到 NutUI React `2.x` 版本。 + +## 升级步骤 + +1. H5 安装 NutUI React 2.x 版本 + +```shell +npm install @nutui/nutui-react +``` + +2. Taro 安装 NutUI React 2.x 版本 + +```shell +npm install @nutui/nutui-react-taro +``` + +3. 处理不兼容更新 + +从 NutUI React 1.x 到 NutUI React 2.x 存在一些不兼容更新,需要仔细阅读不兼容更新内容,并依次处理。 + +你可以手动对照下面的列表逐条检查代码进行修改,另外,我们也提供了一个 codemod cli 工具 @nutui/nutui-react-codemod 以帮助你快速升级到 v2 版本。在运行 codemod cli 前,请先提交你的本地代码修改。 + +4. 主题变量更名: + 如,primary-color 更名为 color-primary;注意在使用自定义主题,特别是使用 ConfigProvider 组件的情况下,有没有使用 `nutuiBrandColor`,这时记得更名为 `nutuiColorPrimary` + +## 兼容更新 + +1. 组件样式处理 + +新增了按需引入 css 文件的支持,同时保留了按需引入 scss 文件的能力。可通过 babel-import-plugin 插件实现按需引入 css: + +H5配置如下: + +```json +// Webpack .babelrc 或 babel.config.js中配置 +plugins: [ + [ + "import", + { + libraryName: "@nutui/nutui-react", + libraryDirectory: "dist/esm", + style: 'css', + camel2DashComponentName: false, + }, + "nutui-react", + ] +] +``` + +Taro配置如下: + +```json +// Webpack .babelrc 或 babel.config.js中配置 +plugins: [ + [ + "import", + { + libraryName: "@nutui/nutui-react-taro", + libraryDirectory: "dist/esm", + style: 'css', + camel2DashComponentName: false, + }, + "nutui-react-taro", + ] +] +``` + +2. 更完善的类型导出以及对类型增加 `JSDoc` 注释 +3. 组件分类的调整 + 在组件分类上,我们从交互维度上,和交互设计侧共同对 1.x 分类进行了基于信息结构的评审,并进行了子类梳理,完成重新分类,目标是更贴合交互场景的分布,易于查找组件。主要分布在: + +- 基础组件,将 `Popup` 组件移除,将 `Popup` 细分到操作反馈-引导提示部分; +- 布局组件,保持不变; +- 导航组件:将分页相关组件 `Pagination`、`Indicator` 移动到展示组件(考虑移动端的分页轻操作);`Menu` 菜单移动到数据录入类-选择器子类(考虑 `Menu` 主要是作为筛选器);将 `BackTop` 移至导航组件,作为锚点组件的一部分; +- 展示组件:将 `Badge`、`NoticeBar`、`Popover` 移至操作反馈-引导提示类,`Empty`、`Skeleton` 移至操作反馈-加载状态结果反馈中;`WaterMark`、`TrendArrow` 作为特性增强类组件放在特色组件中,待由该类组件的使用场景和范围确认是否变更分类;同时新增 `Audio`,将其同 `Video`、`ImagePreview`、`Swiper` 一同归为展示-多媒体类; +- 操作反馈类,新增 `Skeleton`、`Empty`(加载结果反馈类),`Popover`、`Notify`、`NoticeBar`、`Popup` (引导提示类)6个组件;同时去除 `BackTop`(导航组件-锚点类)、`Switch`(数据录入-选择器)、`Audio``(展示-多媒体);在此基础上,未来会考虑增加 ResultPage`,整合错误状态、空状态等反馈状态,该组件在考虑中;同时考虑增加加载状态 `Loading` 组件。版本待定。 +- 数据录入类,主要分为两大类-输入及选择器。在输入中增加 `Signature`,该组件在 `Form` 表单中的应用范围日渐广泛,从特色组件中移入到数据录入部分;选择器中增加 `Switch`、`Menu`,及 `Address`。其中 `Signature` 和 `Address` 都是考虑其常用性,从特色中迁移到数据录入部分。 +- 特色组件,保留 `Barrage`、`Card`、`TimeSelect`,新增 `WaterMark`、`TrendArrow`。 + +## 不兼容更新 + +## NutUI Icons 调整 + +1.x 版本我们在实际开发过程中会发现 `Button` 只是引用了一个很小的 Loading Icon,但是全量引用了 IconFont 字体 ,会导致开发者的项目文件增大。我们在 NutUI React 2.x 中为解决此问题,重新定义了 Icon 组件,将所有的 Icons 抽离成单独的图标组件库 @nutui/icons-react(Taro 适配下为 @nutui/icons-react-taro) ,使其可以进行按需加载使用。 因此一些组件之前关于 Icon 的相关 Props 将被移除,需要使用插槽或者传递一个 Component 组件的 Props 进行使用。 受影响的组件如下: + +- Avatar +- Button +- ImagePreview +- Collapse +- InfiniteLoading +- Popup +- Steps +- Switch +- Toast +- Progress +- NoticeBar +- SearchBar +- Navbar +- Menu +- Tabbar +- Checkbox +- InputNumber +- Input +- Radio +- Rate +- Uploader +- Popover +- Grid +- TrendArrow + +如果你的项目中使用了这些组件,请仔细阅读文档并进行升级。 + +## 组件名称调整 + +- GridItem -> Grid.Item +- TabbarItem -> Tabbar.Item +- CollapseItem -> Collapse.Item +- SwiperItem -> Swiper.Item +- CellGroup -> Cell.Group +- MenuItem -> Menu.Item +- Infiniteloading -> InfiniteLoading + +## 组件 API 调整 + +在 2.0 版本中,我们重点对组件 API 进行了评审和修订,使属性和方法命名更贴合常用的命名习惯及 React 语言规范,目标希望开发者在使用组件时得心应手。我们的思路大体如下: + +### 属性定义 + +本次升级重点关注属性的命名方面,从 1.x 的 610 个属性精简为 410 个,更精简、更规范;同时增强属性的类型范围,提升自定义能力。 + +- 对同一属性进行统一描述,比如: + - 缩写类会改为全拼,如 `desc`、`descSlot`、`description` 统一为 `description` + - 能使用名词或形容词的优先使用该类词性,一个词能说明白的不用两个词。 + - 如 `wrap`、`wrapable` 统一为 `wrap` + - 如将 `isXxx` 统一为 `xxx`,如 `isVisible`、`isDeletable` 等,可直接使用 `visible`、`deletable` 等,形容词化 + - 如`showXxx` 尽量统一为 `xxx`,名词化。【部分属性待优化。】 + - 如 `roundRadius` 改为 `radius` ,`columnNum` 改为 `columns`等 + - `onClickXxx` 统一为 `onXxxClick` + - `modelValue` 统一为 `value`,并增加支持 `defaultValue`,支持受控与非受控模式 + - 对于标识位置、对齐等类的属性,将属性名变更为其上一层的属性定义,如 `center`会改为 `align`、`vertical`,改为 `direction`,像标记距离的,如 `top`、`bottom`、`distance` 等,会改为 `threshold` + - 不规范的定义如 `okBtn`、`okText` 这种,会改为 `confirmXxx` +- 扩充属性的类型。如 `title` 的类型从 `string` 扩充为 `React.ReactNode`,增强自定义内容;其中有涉及合并属性的,统一用最简命名来定义属性;如 `title`、`titleSlot` 合并为 `title`,再扩充属性类型。 +- 对于 `xxClass`、`xxStyle`类的属性,移除,可使用 `className` 、`style` 来实现。 +- 移除与样式有关的属性,除基础组件的样式属性及部分实现起来较为复杂的样式属性外,大多数样式属性被移除,可通过样式变量来实现。 +- 将普遍认同可内置的属性或不怎么使用的属性,直接内置,去掉属性设置。 + +### 组件实现 + +### 基础组件 + +#### Button + +- 移除 `plain`,通过 `fill="outline"` 实现 +- 增加 `ref`,对外暴露组件内 `button` 元素 +- CSS 变量中,对 `type` 类型对应的色值的定义,不在暴露到文档中,建议使用默认值,或修改主题变量 +- 增加 `fill` 模式类型,`dashed`,修改 `fill` 默认值为 `outline`。 +- 增加 `rightIcon`,可满足同时设置左右两个icon的情况。 +- 修改 `size` 为 `large` 时的默认 `width` 为 `100%` 的值,如果使用通栏的 `button`,可搭配 `block` 来使用。 + +#### Cell + +- `subTitle` 重命名为 `description`,类型修改为 `React.Node` +- `desc` 重命名为 `extra`,类型修改为 `React.Node` +- `roundRadius` 重命名为 `radius` +- `center` 重命名为 `align`,默认值修改为`flex-start`,可选值为 `flex-start`、`center`、`flex-end` +- 移除 `icon`、 `isLink`、`url`、`linkSlot`、`replace`、`descTextAlign`,通过用户自定义节点实现,参考文档demo示例 + +#### CellGroup + +- 新增 `divider`,单元格之间是否有分割线 +- `desc` 重命名为 `description` +- `title`、`description` 类型修改为 `React.Node` +- 移除 `titleSlot` 和 `descSlot`,通过 `title`、`description` 实现 +- + +#### ConfigProvider + +#### Icon + +#### Image + +- 移除 `round`,通过 `radius` 实现圆或圆角 +- 移除 `loadingImg` 和 `slotLoading`,通过 `loading` 属性实现,当 `loading` 属性设置为 `ReactNode` 或 `true` 时,表示展示 `loading` 状态 +- 移除 `showError` 和 `slotError`,通过 `error` 属性实现,当 `error` 属性设置为 `ReactNode` 或 `true` 时,表示展示 `error` 状态 +- 移除 `loadingImg`,可通过 `loading` 设置 `ReactNode` +- 移除 `errorImg`,可通过 `error` 设置 `ReactNode` +- `showError` 重命名为 `error`,类型修改为 `boolean|ReactNode` +- `showLoading` 重命名为 `loading`,类型修改为 `boolean|ReactNode` + +#### Overlay + +- `overlayClass` 重命名为 `className` +- `overlayStyle` 重命名为 `style` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- 更改 `lockScroll` 默认值为 `true` +- 新增 `afterClose` 和 `afterShow`,用于完全关闭后触发的回调和完全展示后触发的回调 + +#### Popup + +- `popClass` 重命名为 `className`,统一将组件的样式类名使用 `className`,不再指定特殊名字,减轻用户使用的记忆成本 +- `overlayClass` 重命名为 `overlayClassName`,继承自`Overlay` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- `onOpened` 和 `onClosed` 重命名为 `afterShow` 和 `afterClose`,继承自`Overlay`,用于完全关闭后触发的回调和完全展示后触发的回调 +- `destroyOnClose` 的描述进行了修订,改为:“组件不可见时,卸载内容”,并把其默认值改为了`false` +- `onClickCloseIcon` 和 `onClickOverlay` 两个方法,增加布尔判断,如返回false 或 未定义返回值时,将不再关闭 Popup;默认值为 `true`;在demo中已增加相应示例;同时,两者的名字变更为 `onCloseIconClick`、`onOverlayClick` +- `closeIcon` 类型从 `string` 改为 `ReactNode`,以前的 `closeIcon='mask-close'` 需改为 `closeIcon={}` +- `onOverlayClick` 和 `onCloseIconClick` 不会自动触发 `onClose` 了,如需触发关闭事件,需主动调用 `onClose` 回调函数 +- 新增 `description` 属性,支持标题下展示描述内容。 +- 调整 `position` 为 `bottom` 时的默认样式,默认支持圆角,此刻不需要再设置 `round` 属性。 + +### 布局组件 + +#### Divider + +- 移除 `dashed`, 通过 `style` 属性实现 +- 移除 `hairline`, 默认为 `true` +- CSS 变量调整:`$divider-before-margin-right`、`$divider-after-margin-left` 统一为 `$divider-spacing`,`$divider-vertical-border-left` 变更为 `$divider-border-color`,增加 `$divider-side-width`。 + +#### Grid + +- 移除 `fontSize`,可自行控制传入的组件字体大小 +- 移除 `border`,作为默认样式 +- `columnNum` 重命名为 `columns` +- `GridItem` 使用方式修改为 `Grid.Item` + +#### Layout + +#### Sticky + +- 移除 `top` 和 `bottom`, 重命名为 `threshold` + +### 导航组件 + +#### Elevator + +- `acceptKey` 重命名为 `floorKey` +- `indexList` 重命名为 `list` +- `isSticky` 重命名为 `sticky` +- `onClickIndex` 重命名为 `onIndexClick` +- `onClickItem` 重命名为 `onItemClick` +- 新增`showKeys`,是否展示右侧导航 +- CSS 变量部分,对命名做了简化。 + +#### FixedNav + +- `unActiveText` 重命名为 `inactiveText` +- `navList` 重命名为 `list` +- `slotBtn` 重命名为 `content` +- `onSelected` 重命名为 `onSelect` +- 移除 `fixednavClass`,通过 `className` 实现 +- 移除 `slotList`,通过 `children` 实现 +- 该组件已废弃 `BEM` 规范,记得把 `__` 改为 `-` + +#### Indicator + +- 移除 `block`,暴露自定义节点 +- 移除 `align`,暴露自定义节点 +- `vertical` 重命名为`direction`,默认值为 `horizontal`,可选 `vertical` +- 移除 `fillZero`,暴露自定义节点 +- `size` 重命名为 `total` +- 增加非数字展示,并设置为默认状态 + +#### Menu + +- 移除 `fontClassName` +- 移除 `iconClassPrefix` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- `titleIcon` 重命名为 `icon` +- `optionsIcon` 重命名为 `icon` +- 增加 `closeOnClickAway` + +#### NavBar + +- `desc` 重命名为 `right`,类型修改为 `React.Node` +- 新增 `left`,左侧内容,渲染在返回区域的右侧 +- 新增 `back`,返回区域内容 +- `onClickBack` 重命名为 `onBackClick` +- 移除 `title`,通过 `children` 实现 +- 移除 `leftText` `leftShow`,通过 `back`、`left`实现 +- `safeAreaInsetTop` 重命名为 `safeArea` +- `border` 废弃 +- 移除 `onClickTitle` `onClickRight` `onClickIcon`,通过在`left`、`title`、`right`自定义事件实现,参考文档demo示例 +- + +#### Pagination + +- 新增 `lite` 模式,只展示页码,不支持事件交互 +- 新增 `defaultValue` 非受控值 +- `modelValue` 重命名为 `value`,受控值 +- `prevText` 重命名为 `prev`,类型修改为 `ReactNode` +- `nextText` 重命名为 `next`,类型修改为 `ReactNode` +- `forceEllipses` 重命令为 `ellipse` +- `showPageSize` 重命名为 `itemSize` +- `itemsPerpage` 重命名为 `pageSize` +- `totalitems` 重命名为 `total` +- `pageNodeRender` 重命名为 `itemRender` +- 移除 `pageCount`,通过 `total` 与 `pageSize` 组合实现 + +#### SideNavBar + +- `offset` 重命名为 `indent` + +#### Tabbar + +- `unactiveColor` 重命名为 `inactiveColor` +- `tabTitle` 重命名为 `title`,类型修改为 `ReactNode` +- `bottom` 重命名为 `fixed` +- `safeAreaInsetBottom` 重命名为 `safeArea` +- `visible` 重命名为 `defaultValue`,非受控 +- `activeVisible` 重命名为 `value`,受控 + +#### TabbarItem + +- 使用方式修改为 `Tabbar.Item` +- `icon` 类型改为 `ReactNode`,移除其他 `icon` 关联属性 +- 移除 `href`,通过 `onSwitch` 事件控制链接与路由跳转 +- 移除 `num`,支持传入所有 `Badge` Props +- 移除 `color`,使用父元素的 `activeColor`,保持同样的 `active` 状态 + +#### Tabs + +- 增加 `lite`、`card`、`button`、`divider` 模式。 +- 移除 `background`,通过 `className` 或 `style` 控制 +- 移除 `titleScroll`, 默认支持滚动 +- 移除 `ellipsis`,默认 `flex:1` +- 移除 `size`,通过 css 变量 `--nutui-tabs-titles-item-font-size` 实现 +- `animatedTime` 重命名为 `duration` +- `titleGutter` 重命名为 css 样式变量实现 +- `titleNode` 重命名为 `title` +- `color` 重命名为 `activeColor` +- `type` 重命名为 `activeType` +- `leftAlign` 重命名为 `align` +- `onClick` 类型改为 `(index: string | number) => void` +- `onChange` 类型改为 `(index: string | number) => void` +- 增加 defaultValue +- 增加 `activeType` 类型 `simple`,实现选项卡的简约选择,只修改字号和字重,不处理字色。 + +#### Tabs.Tabpane + +- `paneKey` 重命名为 `value` + +### 数据录入 + +#### Calendar + +- `poppable` 重命名为 `popup` +- `isAutoBackFill` 重命名为 `autoBackfill` +- `toDateAnimation` 重命名为 `scrollAnimation` +- `startText` 类型改为 `ReactNode` +- `endText` 类型改为 `ReactNode` +- `confirmText` 类型改为 `ReactNode` +- `onBtn` 重命名为 `renderHeaderButtons` +- `onDay` 重命名为 `renderDay` +- `onTopInfo` 重命名为 `renderDayTop` +- `onBottomInfo` 重命名为 `renderDayBottom` +- `onSelected` 重命名为 `onDayClick` +- `onChoose` 重命名为 `onConfirm` +- `onYearMonthChange` 重命名为 `onPageChange` +- 新增 `firstDayOfWeek`,支持按照周进行选择,指定周起止日,如0-6 + +#### Cascader + +- 新增 `defaultValue`,其中 `defaultValue` 用于非受控,原 `value` 用于受控。两者的类型都改为 `(number | string | undefined)[]` +- `checkedIcon` 重命名为 `activeIcon` +- `poppable` 重命名为 `popup` +- `lazyLoad` 重命名为 `onLoad`,当启动懒加载 `lazy` 时,动态加载数据 +- `convertConfig` 重命名为 `format`,配置转换规则 +- 合并 `textKey` `valueKey` `childrenKey` 三个属性为对象属性 `optionKey` +- 移除 `tabsColor`, 该属性为设置 `Tabs` 当前选中的 `tab` 的下划线色值,但该值最好与文字部分搭配使用,统一处理 CSS 变量。 + +#### Checkbox + +- 新增 `defaultChecked`,用于非受控,`checked` 用于受控 +- 新增 `value`,用于 group 模式 +- `textPosition` 重命名为 `labelPosition` +- `iconName` 重命名为 `icon`,类型为 `ReactNode` +- `iconAcitveName` 重命名为 `activeIcon` +- `iconIndeterminateName` 重命名为 `iconIndeterminateIcon` +- 移除 `iconSize` +- 部分 className 命名变更,废弃 `nutui-checkbox__xx` 命名方式,直接使用 `nutui-checkbox-xx`,并对选中状态命名修订为 `nutui-checkbox-icon-checked` +- 增加半选的禁用状态 + +#### Checkbox.Group + +- 新增 `defaultValue`,用于非受控,`value` 用于受控 +- `textPosition` 重命名为 `labelPosition` +- `toggleAll` 重命名为 `toggle` +- `toggleReverse` 重命名为 `reverse` +- 部分 className 命名变更,废弃 `nutui-checkbox__xx` 命名方式,直接使用 `nutui-checkbox-xx`,并对选中状态命名修订为 `nutui-checkbox-icon-checked` + +#### DatePicker + +- `modelValue` 重命名为 `value`,并增加 `defaultValue` +- `isShowChinese` 重命名为 `showChinese` +- `minDate` 重命名为 `startDate` +- `maxDate` 重命名为 `endDate` +- `onConfirmDatePicker` 重命名为 `onConfirm` +- `onCloseDatePicker` 重命名为 `onClose` +- 因为依赖组件`Picker`的变更,方法 `onConfirmDatePicker`、`onChange`的参数进行了调整,从`(selectedValue, selectedOptions)` 改为 `(selectedOptions, selectedValue)`。 + +#### Form + +- 增加 `footer`,类型为 `ReactNode`,用于表单底部区域,通常用于设置提交、重置按钮 +- 增加 `initialValues`,用于设置表单初始值,同时用于表单的重置 +- 增加 `name` 属性 + +#### Form.Item + +- 移除 `labelWidth`, 通过 `--nutui-form-item-label-width` 控制宽度 +- 增加 `required`,用于必选样式控制 +- 增加 `trigger`,用于设置数据更新的时机 +- 增加 `valuePropName`,用于收集子组件受控的属性映射 +- 增加 `getValueFromEvent`,用于在收集数据中进行数据转换 +- 增加 `onclick` 用于收集子组件的 `ref` + +#### Input + +#### InputNumber + +- 增加 `allowEmpty`, 用于允许内容是否为空 +- 新增 `defaultValue`,用于非受控,`value` 用于受控 +- `decimalPlaces` 重命名为 `digits` +- `isAsync` 重命名为 `async` +- 移除 `inputWidth`, 通过`--nutui-inputnumber-input-width`控制输入框的宽度 +- 移除 `buttonSize`, 通过`–nutui-inputnumber-button-width` 和 `–nutui-inputnumber-button-height`控制按钮的宽度和高度 +- taro 新增 `formatter` 属性, 用于指定输入框展示值的格式 +- 移除 `errorMessage` +- 移除 `showWordLimit` +- `autofocus` 重命名为 `autoFocus` +- `type="textarea"` 建议改为使用 `TextArea` 组件实现 + +#### NumberKeyboard + +- `randomKeys` 重命名为 `random` +- `customKey` 重命名为 `custom` +- `title` 类型变更为 `ReactNode` +- 新增 `onConfirm` 事件 +- 移除 `popClass` 定义,默认支持透传 `Popup` 属性 + +#### Picker + +- `isVisible` 重命名为 `visible` +- `listData` 重命名为 `options` +- `defaultValueData` 重命名为 `defaultValue` +- 增加受控 `value` +- `swipeDuration` 重命名为 `duration` +- `onCloseUpdate` 重命名为 `afterClose` +- 方法 `onConfirm`、`onClose`、`afterClose`、`onChange`的参数进行了调整,从`(selectedValue, selectedOptions)` 改为 `(selectedOptions, selectedValue)`。 + +#### Radio + +- 移除 `iconSize`,可通过 Icon 的 css 变量设置 +- `iconName` 重命名为 `icon`,类型修改为 `ReactNode` +- 增加 `labelPosition`,用于设置 `label` 的位置 +- 增加 `checked` 和 `defaultChecked` ,用于受控和非受控 +- `onChange` 类型修改为 `(checked: boolean) => void` +- 部分 className 命名变更,废弃 `nutui-radio__xx` 命名方式,直接使用 `nutui-radio-xx`,并对选中状态命名修订为 `nutui-radio-icon-checked` + +### Radio.Group + +- `textPosition` 重命名为 `labelPosition` +- 增加 `defaultValue` ,用于非受控 +- `onChange` 类型修改为 `(value: string| number) => void` +- 部分 className 命名变更,废弃 `nutui-radio__xx` 命名方式,直接使用 `nutui-radio-xx`,并对选中状态命名修订为 `nutui-radio-icon-checked` + +#### Range + +- `maxDesc` 重命名为 `maxDescription`,类型改为 `ReactNode` +- `minDesc` 重命名为 `minDescription`,类型改为 `ReactNode` +- `curValueDesc` 重命名为 `currentDescription`,类型改为 `(value) => ReactNode` +- 移除 `hiddenRange`,通过 `max/minDescription` 传 `null` 实现 +- 移除 `hiddenTag`,通过 `currentDescription` 传 `null` 实现 +- 移除 `activeColor`、`inactiveColor`、`buttonColor`,通过 `css` 变量实现 +- `onDragStart` 重命名为 `onStart` +- `onDragEnd` 重命名为 `onEnd` +- `modelValue` 重命为 `value`,增加 `defaultValue` 非受控方式 + +#### Rate + +- `minimizeValue` 重命名为 `min` +- `readonly` 重命名为 `readOnly` +- 移除 `spacing`,通过 css 样式变量实现 +- 移除 `activeColor`、`voidColor`、`iconSize`,通过 `checkedIcon`、`uncheckedIcon` 实现 +- 增加受控 `value` 与非受控 `defaultValue`,移除 `modelValue` + +#### SearchBar + +- `onClickInput` 重命名为 `onInputClick` +- 移除 `clearSize`,样式默认 +- 移除 `background`,使用 CSS 变量 `--nutui-searchbar-background` 实现 +- 移除 `inputBackground`,使用 CSS 变量 `--nutui-searchbar-input-background` 实现 +- 移除 `align`,使用 CSS 变量 `--nutui-searchbar-input-text-align` +- 新增 `left` 和 `right`,为 `ReactNode` 节点,可自定义内容 +- 移除 `leftoutIcon` 和 `label`,使用 `left` 实现 +- 移除 `rightoutIcon` 和 `actionText`,使用 `right` 实现 +- 移除 `leftinIcon`,使用 `leftIn` 实现 +- 移除 `rightinIcon`,使用 `rightIn` 实现,同时兼顾和 clearIcon 的交互,当设置rightIn时,默认展示 rightIn,当触发输入后,展示 clearIcon。同时增加 `backable` 来标记是否展示左侧返回Icon +- 移除 `onCancel`,使用 `right` 来实现事件处理 +- 移除 `onClickLeftinIcon`,用户可使用 `left` 来实现事件处理 +- 移除 `onClickLeftoutIcon`,用户可使用 `left` 来实现事件处理 +- 移除 `onClickRightinIcon`,用户可使用 `right` 来实现事件处理 +- 移除 `onClickRightoutIcon`,用户可使用 `right` 来实现事件处理 + +#### ShortPassword + +- `desc` 重命名为 `description` +- `noButton` 重命名为 `hideFooter` +- `onOk` 重命名为 `onConfirm` +- `errorMsg` 重命名为 `error` +- 移除 `closeOnClickOverlay`,默认支持透传 Popup 属性 +- `title`、`description`、`tips`、`error` 类型修改为 `ReactNode` +- `modelValue` 重命名为 `value`,受控模式 +- 新增 `onFoucs` 事件 + +#### TextArea + +- `maxlength` 重命名为 `maxLength` +- `readonly` 重命名为 `readOnly` +- `limitShow` 重命名为 `showCount` +- `autosize` 重命名为 `autoSize` +- 移除 `textAlign`,可通过 `style` 传入 +- `defaultValue` 改为非受控,增加受控值 `value` + +#### Uploader + +- `maximize` 重命名为 `maxFileSize` +- `maximum` 重命名为 `maxCount` +- `listType ` 重命名为 `previewType` +- `isDeletable ` 重命名为 `deletable` +- `isPreview` 重命名为 ` preview` +- `defaultImg` 重命名为 ` previewUrl` +- `defaultFileList` 重命名为 ` defaultValue` +- `uploadIconTip` 重命名为 `uploadLabel`,类型变更为 `ReactNode` +- `onBeforeUpload` 重命名为 `beforeUpload` +- `onBeforeXhrUpload` 重命名为 `beforeXhrUpload` +- `onBeforeDelete` 重命名为 `beforeDelete` +- `onRemove` 重命名为 `onDelete` +- 增加 `fit`,用于图片填充模式 +- 增加 `value`,用于受控传值 +- 移除 `uploadIconSize`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 +- `uploadIcon` 类型从 `string` 调整为 `ReactNode` +- `onChange` 参数类型从 `{fileList: FileItem[], event: any}` 调整为 `FileItem[]` + +### 操作反馈 + +#### ActionSheet + +- `title`,类型变更为 `ReactNode` +- `description`,类型变更为 `ReactNode` +- `cancelTxt`,重命名为 `cancelText`,类型变更为 `ReactNode` +- `menuItems` 重命名为 `options` +- `chooseTagValue` 重命名为 `value` +- `onChoose` 重命名为 `onSelect` +- 增加 `options` 的定义 + - `color` 重命名为 `danger` + - `name`,列表项的标题key + - `description`,列表项的描述key + - `danger`,列表项中提醒用户重点关注的操作 + - `disabled`,列表项中禁用项 + +#### BackTop + +- `elId` 重命名为 `target` +- 移除 `right`、`bottom`,通过 style 传入,增加支持 `left`、`top` +- `distance` 重命名为 `threshold` +- 移除 `isAnimation`,通过 `duration` 设置 0 实现无动画效果 + +#### Dialog + +- `okText` 重命名为 `confirmText`,规范命名。 +- `mask` 重命名为 `overlay`,组件库中统一使用 Overlay 组件作为遮罩层,并使用 overlay 作为是否展示遮罩层的属性值。 +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick`,组件库统一到该属性。 +- `noOkBtn` 重命名为 `hideConfirmButton`,初始值不变,依然表示是否隐藏确认按钮,主要是为了语义化更强。 +- `noCancelBtn` 重命名为 `hideCancelButton`,初始值不变,依然表示是否隐藏取消按钮,主要是为了语义化更强。 +- `okBtnDisabled` 重命名为 `disableConfirmButton`,初始值不变,依然表示是否禁用确认按钮,主要是为了语义化更强。 +- 移除 `noFooter`,使用 footer 统一处理,当 footer 为空时,及可替代该值。目前 noFooter 也需要手动声明是否为 noFooter;修改后需手动指出 footer={null} +- 移除 `textAlign`,改用样式变量 `--nutui-dialog-content-text-align` 或 SCSS 变量 `$dialog-content-text-align` 控制,默认值为 center。 +- 移除 `cancelAutoClose`,改为 `beforeCancel` 和 `beforeClose` 来实现,在点击关闭或取消时,可先触发这两个方法,以确定是否要关闭弹框,如返回true,则关闭;否则不关闭。 +- `onOk` 重命名为 `onConfirm`,规范命名。 +- `onClosed` 重命名为 `onClose`,规范命名,关闭时触发。 +- `onClickSelf` 重命名为 `onClick`,语义不变,仍表示点击弹框自身时触发事件。 +- 增加 `overlayStyle` 和 `overlayClassName`,用来配置 Overlay 组件样式。 +- 增加 `onOverlayClick`,支持点击overlay时,触发事件。 +- `onCancel` 回调不会自动关闭弹层,需主动调用 `Dialog.close(xx)` + +#### Drag + +#### InfiniteLoading + +- `useCapture` 重命名为 `capture` +- `onScrollChange` 重命名为 `onScroll` +- `isOpenRefresh` 重命名为 `pullRefresh` +- `pullTxt` 重命名为 `pullingText`,类型变更为 `ReactNode` +- `loadTxt` 重命名为 `loadingText`,类型变更为 `ReactNode` +- `containerId` 重命名为 `target` +- 修订类名如 `top-box`、`bottom-box` 为 `nut-infinite-top-tips`、`nut-infinite-bottom-tips` + +#### Notify + +- 移除 `color` ,通过css变量`--nutui-notify-text-color`实现 +- 移除`background`,通过css变量`--nutui-notify-base-background-color`实现 +- `onClosed` 重命名为 `onClose` + +#### PullToRefresh + +#### Swipe + +- 移除 `leftWidth` ,通过 `leftAction` 实现 +- 移除 `rightWidth` ,通过 `rightAction` 实现 + +#### Switch + +- 新增 `defaultChecked`,用于非受控,`checked` 用于受控 +- 移除 `isAsync`,通过 `checked`实现 +- 移除 `activeColor` ,通过css变量`--nutui-switch-open-background-color`实现 +- 移除 `inactiveColor`,通过css变量`--nutui-switch-close-background-color`实现 + +#### Toast + +- 移除H5版本 `id` +- 移除 `center`和 `bottom`,通过 `position` 实现 +- 移除 `bgColor`,通过 css 变量实现 +- 移除 `customClass`,通过 `className` 实现 +- 移除 `cover` 和 `coverColor` ,通过css变量实现 +- 移除 `loadingRotate`,旋转状态通过 `iconFont`实现 +- 移除 `textAlignCenter`,通过css变量实现 +- 修改 `closeOnClickOverlay` 为 `closeOnOverlayClick` ,语义不变,是否在点击遮罩层后关闭提示 +- 新增 `lockScroll` ,用于背景是否锁定,默认值为 `false` + +### 展示组件 + +#### Animate + +- `type` 属性类型更改为 `AnimateType` ,具体值详见文档 +- `action` 属性类型更改为 `initial \| click` + +#### AnimatingNumbers + +- `maxLen` 重命名为 `length` +- `endNumber` 重命名为 `value`,类型修改为 `string|number` +- `delaySpeed` 重命名为 `delay` +- `easeSpeed` 重命名为 `duration` + +#### Audio + +- `url` 重命名为 `src` +- `autoplay` 重命名为 `autoPlay` +- `onFastBack` 重命名为 `onBack` +- `onPlayEnd` 重命名为 `onEnd` + +#### Avatar + +- `url` 重命名为 `src` +- `onActiveAvatar` 重命名为 `onClick` +- 新增 `fit` 属性,用于图片填充模式 +- 移除 `iconSize`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 + +#### AvatarGroup + +- AvatarGroup `maxCount` 重命名为 `max` +- AvatarGroup `span` 重命名为 `gap` +- AvatarGroup `zIndex` 重命名为 `level` + +#### Badge + +- 移除 `zIndex`,目前没有用到,也不生效,直接去掉。 +- 移除 `icon`,自定义 `icon` 可放在 `value` 中实现,扩充了 `value` 的类型。 +- 修改 `max` 的最大值为99(之前为10000),比较贴合实际场景。 +- 主题定制的 `css` 变量中,去掉和 `dot` 有关的其他值,只保留 `width`。其他值由 `width` 计算而来. +- 主题定制,增加包含 icon 情况下的样式变量。 + +#### CircleProgress + +- `progress` 重命名为 `percent` +- `circleColor` 重命名为 `color` +- `pathColor` 重命名为 `background` + +#### Collapse + +- 新增 `defaultActiveName` 非受控 +- `activeName` 改为受控方式 +- `icon` 重命名为 `expandIcon`,类型修改为 `ReactNode` +- `onChange` 参数变更为 `activeName, name, status` +- 新增一种样式,尝试修改 `--nutui-collapse-item-border-bottom` 和 `-nutui-collapse-item-header-border-bottom`,可查看 + +#### CollapseItem + +- 使用方式调整为 `Collapse.Item` +- subTitle 重命名为 extra,类型修改为 `ReactNode` +- 新增 `expnandIcon`,优先级高于父组件对应值 +- 新增 `rotate`,优先级高于父组件对应值 + +#### CountDown + +- 新增 `remainingTime`,支持剩余毫秒时间倒计时。 + +#### Ellipsis + +- 新增 `className` 和 `style` 属性的支持 +- 优化 H5 的代码,去掉 `useEffect` 渲染改用 `useLayoutEffect` + +#### Empty + +- 新增 `status` 属性,用于默认图片错误类型 +- 新增 `size` 属性,用于区分全屏与半屏状态下图片的不同大小 +- 新增 `title` 属性,用于展示提示的标题部分 +- 新增 `actions` 属性,用于展示提示的操作部分,支持1个或2个操作 +- `image` 属性类型更改为 `ReactNode` +- 新增 `title`、`size`、`actions` 属性,支持标题的设置、图片大小的设置、可能的操作设置,操作设置默认以`Button`实现。 + +#### ImagePreview + +- `show` 重命名为 `visible` +- `autoplay` 重命名为 `autoPlay` +- `initNo` 重命名为 `defaultValue`,同时增加 `value`,为受控 +- `paginationVisible` 重命名为 `indicator` +- `paginationColor` 重命名为 `indicatorColor` +- `contentClose` 重命名为 `closeOnContentClick` +- 在 `Taro` 下支持视频 + +#### NoticeBar + +- `direction` 的可选值从 `across` 重命名为 `horizontal` +- `text` 重命名为 `content` +- `closeMode` 重命名为 `closeable` +- `leftIcon` 类型扩充,支持 `ReactNode` +- `rightIcon` 类型扩充,支持 `ReactNode` +- `color` 移除,使用 CSS 变量,之前已支持 +- `background` 移除,使用 CSS 变量,之前已支持 +- `wrapable` 重命名为 `wrap` +- `standTime` 重命名为 `duration` +- `onClickItem` 重命名为 `onItemClick` +- `complexAm` 废弃 + +#### Popover + +- 移除 `theme` 属性,可以通过css变量 `--nutui-brand-color` 控制暗黑模式 +- 新增 `showArrow` 属性,用于是否显示小箭头 +- 新增 `closeOnActionClick` 属性,用于是否在点击选项后关闭 +- 新增 `closeOnOutsideClick` 属性,用于是否在点击外部元素后关闭菜单 +- 新增 `targetId` 属性,用于自定义目标元素 id +- 新增 `onOpen` 属性,用于点击菜单时触发 +- 新增 `onClose` 属性,用于关闭菜单时触发 +- 新增 `action` 属性,用于为对应的选项添加方法 +- `onChoose` 重命名为 `onSelect` +- 继承Popup组件的 `overlayStyle` 、`overlayClassName` 、`overlay` 、`closeOnOverlayClick` 属性。 + +#### Price + +- `decimalDigits` 重命名为 `digits` +- 移除 `needSymbol`,通过 `symbol` 判断是否需要加上 symbol 符号 +- 新增 `line`,是否展示划线价 + +#### Progress + +- `percentage` 重命名为 `percent`,受控 +- 移除 `isShowPercentage`,可以自定义传入文案 +- 移除 `textWidth`,可以自定义传入内容的宽度 +- `strokeColor` 重命名为 `color` +- `fillColor` 重命名为 `background` +- 移除 `size`,通过 `strokeWidth`、`progress-height` css 变量实现尺寸自定义 +- `status` 重命名为 `animated`,表示是否展示动画效果 +- 移除 `textBackground`,通过 css 实现 +- 移除 `textColor`,通过 css 实现 +- 移除 `textInside`,仅保留内显功能 +- 移除 `textType、icon`,通过 `children` 传入自定义 `ReactNode`,不再区分类型 +- 新增 `lazy` 属性,支持每次进入可视区时展示进度条动画 +- 新增 `delay` 属性,表示延迟数据加载时长 + +#### Skeleton + +- `loading` 重命名为 `visible` +- `row` 重命名为 `rows` +- 移除 `width`,通过 css 变量 `skeleton-line-width` 实现 +- 移除 `height`,通过 css 变量 `skeleton-line-height` 实现 +- 移除 `round`,通过 css 变量 `skeleton-line-border-radius` 实现 + +#### Steps + +- `current` 重命名为 `value` +- `onClickStep` 重命名为 `onStepClick` +- `progressDot` 重命名为 `dot` + +#### Step + +- 移除 `iconColor`,可通过 `icon` 属性传入自定义 icon 或借助 CSS Variables 修改 icon 颜色 +- 移除 `size`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 +- 移除 `renderContent` ,可通过 `description` 实现 +- `title` 类型修改为 `ReactNode` +- `content` 重命名为 `description`,类型改为 `ReactNode` +- `icon` 类型修改为 `ReactNode` +- `activeIndex` 重命名为 `value` + +#### Swiper + +- h5 + - 移除 `paginationColor`,通过 `indicator` 的 CSS 变量控制 + - 移除 `paginationBgColor`,通过 `indicator` 的 CSS 变量控制 + - 移除 `pageContent`,通过 indicator 实现 + - `autoplay` 重命名为 `autoplay` + - `initPage` 重命名为 `defaultValue` + - `paginationVisible` 重命名为 `indicator`,类型改为` ReactNode` + - `isPreventDefault` 重命名为 `preventDefault` + - `isStopPropagation` 重命名为 `stopPropagation` + - `isCenter` 重命名为 `center` +- taro + - 通过封装 Taro 的 `Swiper` 和 `SwiperItem` 实现,支持的属性可参考 Taro Swiper 文档。 + +#### Table + +- `onSorter` 重命名为 `onSort` +- 合并 `summary` 与 `noData` 的样式处理 + +#### Tag + +- `color` 重命名为 `background` +- `textColor` 重命名为 `color` + +#### TrendArrow + +- `rate` 重命名为 `value` +- `showSign` 重命名为 `symbol` +- `showZero` 重命名为 `zero` +- `arrowLeft` 重命名为 `left` +- `syncTextColor` 重命名为 `sync` +- `textColor` 重命名为 `color` +- `upIconName` 重命名为 `riseIcon`,类型修改为 `React.Node` +- `downIconName` 重命名为 `dropIcon`,类型修改为 `React.Node` +- 移除 `iconSize`,通过`riseIcon`、`dropIcon`自定义传入icon大小 + +#### Video + +- 在 `Taro` 下新增video的适配 + +#### VirtualList + +- `sourceData` 重命名为 `list` +- `conatinerSize` 重命名为 `containerHeight` +- `itemSize` 重命名为 `itemHeight` +- `itemEqualSize` 重命名为 `itemEqual` +- `horizontal` 修改为 `direction`,默认值 `vertical`,可选值 `horizontal` + +#### WaterMark + +- `fontColor` 重命名为 `color` + +### 特色组件 + +#### Address + +- 该组件的 `custom` 改用 `Cascader` 组件重写;`custom2`也将使用 `Cascader` 完成,在 `Cascader` 中支持 `Elevator`,开发中。所以会废弃 `province`、`city`、`country`、`town` 这些属性,同时支持 `Cascader` 的属性。 +- `modelValue` 重命名为 `visible` +- `modelSelect` 重命名为 `defaultValue` +- `onSelected` 重命名为 `onSelect` +- `existAddress` 重命名为 `existList` +- `selectedIcon` 重命名为 `selectIcon` +- `closeBtnIcon` 重命名为 `closeIcon` +- `backBtnIcon` 重命名为 `backIcon` +- `isShowCustomAddress` 重命名为 `custom`,用于已有地址列表与自定义列表的切换,修改默认为值 `false` +- `customAndExistTitle` 废弃,与 `custom` 合并,当 `custom` 为 true 时,为默认文案,设置为某字符串时,展示字符串。 +- `customAddressTitle`、`existAddressTitle` 重命名为 `title`,不再区分状态,可通过onSwitch修改title +- 精简布局和样式 + +#### Barrage + +- `barrageList` 重命名为 `list` +- `frequency` 重命名为 `interval` +- `speeds` 重命名为 `duration` +- `top` 重命名为 `gapY` + +#### Card + +#### Signature + +- `type` 类型修改为 `png|jpg` +- `unSupportTpl` 重命名为 `unsupported`,类型修改为 `ReactNode` +- 新增 `confirm`和`clear` ref 的方法,移除组件内部 `button`元素,通过自定义按钮元素,设置元素点击事件结合ref实现,参考文档demo示例 + +#### TimeSelect + +- 移除 `height`,通过 `style` 设置高度 +- `title` 类型修改为 `ReactNode` +- `onPannelChange` 重命名为 `onDateChange` +- 移除 `dates`、`times`,合并为 `options`,重新设计了数据结构 +- 增加 `optionKey` 用于自定义数据中的关键字 +- 移除 `currentKey`,新增 `defaultValue` 用于设置默认选项,支持时间选择 diff --git a/src/sites/doc/docs/taro/migrate-from-v2.md b/src/sites/doc/docs/taro/migrate-from-v2.md new file mode 100644 index 0000000000..5bd3f8ec5e --- /dev/null +++ b/src/sites/doc/docs/taro/migrate-from-v2.md @@ -0,0 +1,888 @@ +# 从 v2 升级到 v3 + +本文档将帮助您从 NutUI React `2.x` 升级到 NutUI React `3.x` 版本。 + +## 升级步骤 + +1. H5 安装 NutUI React 3.x 版本 + +```shell +npm install @nutui/nutui-react +``` + +2. Taro 安装 NutUI React 3.x 版本 + +```shell +npm install @nutui/nutui-react-taro +``` + +3. 处理不兼容更新 + +从 NutUI React 1.x 到 NutUI React 2.x 存在一些不兼容更新,需要仔细阅读不兼容更新内容,并依次处理。 + +你可以手动对照下面的列表逐条检查代码进行修改,另外,我们也提供了一个 codemod cli 工具 @nutui/nutui-react-codemod 以帮助你快速升级到 v2 版本。在运行 codemod cli 前,请先提交你的本地代码修改。 + +4. 主题变量更名: + 如,primary-color 更名为 color-primary;注意在使用自定义主题,特别是使用 ConfigProvider 组件的情况下,有没有使用 `nutuiBrandColor`,这时记得更名为 `nutuiColorPrimary` + +## 兼容更新 + +1. 组件样式处理 + +新增了按需引入 css 文件的支持,同时保留了按需引入 scss 文件的能力。可通过 babel-import-plugin 插件实现按需引入 css: + +H5配置如下: + +```json +// Webpack .babelrc 或 babel.config.js中配置 +plugins: [ + [ + "import", + { + libraryName: "@nutui/nutui-react", + libraryDirectory: "dist/esm", + style: 'css', + camel2DashComponentName: false, + }, + "nutui-react", + ] +] +``` + +Taro配置如下: + +```json +// Webpack .babelrc 或 babel.config.js中配置 +plugins: [ + [ + "import", + { + libraryName: "@nutui/nutui-react-taro", + libraryDirectory: "dist/esm", + style: 'css', + camel2DashComponentName: false, + }, + "nutui-react-taro", + ] +] +``` + +2. 更完善的类型导出以及对类型增加 `JSDoc` 注释 +3. 组件分类的调整 + 在组件分类上,我们从交互维度上,和交互设计侧共同对 1.x 分类进行了基于信息结构的评审,并进行了子类梳理,完成重新分类,目标是更贴合交互场景的分布,易于查找组件。主要分布在: + +- 基础组件,将 `Popup` 组件移除,将 `Popup` 细分到操作反馈-引导提示部分; +- 布局组件,保持不变; +- 导航组件:将分页相关组件 `Pagination`、`Indicator` 移动到展示组件(考虑移动端的分页轻操作);`Menu` 菜单移动到数据录入类-选择器子类(考虑 `Menu` 主要是作为筛选器);将 `BackTop` 移至导航组件,作为锚点组件的一部分; +- 展示组件:将 `Badge`、`NoticeBar`、`Popover` 移至操作反馈-引导提示类,`Empty`、`Skeleton` 移至操作反馈-加载状态结果反馈中;`WaterMark`、`TrendArrow` 作为特性增强类组件放在特色组件中,待由该类组件的使用场景和范围确认是否变更分类;同时新增 `Audio`,将其同 `Video`、`ImagePreview`、`Swiper` 一同归为展示-多媒体类; +- 操作反馈类,新增 `Skeleton`、`Empty`(加载结果反馈类),`Popover`、`Notify`、`NoticeBar`、`Popup` (引导提示类)6个组件;同时去除 `BackTop`(导航组件-锚点类)、`Switch`(数据录入-选择器)、`Audio``(展示-多媒体);在此基础上,未来会考虑增加 ResultPage`,整合错误状态、空状态等反馈状态,该组件在考虑中;同时考虑增加加载状态 `Loading` 组件。版本待定。 +- 数据录入类,主要分为两大类-输入及选择器。在输入中增加 `Signature`,该组件在 `Form` 表单中的应用范围日渐广泛,从特色组件中移入到数据录入部分;选择器中增加 `Switch`、`Menu`,及 `Address`。其中 `Signature` 和 `Address` 都是考虑其常用性,从特色中迁移到数据录入部分。 +- 特色组件,保留 `Barrage`、`Card`、`TimeSelect`,新增 `WaterMark`、`TrendArrow`。 + +## 不兼容更新 + +## NutUI Icons 调整 + +1.x 版本我们在实际开发过程中会发现 `Button` 只是引用了一个很小的 Loading Icon,但是全量引用了 IconFont 字体 ,会导致开发者的项目文件增大。我们在 NutUI React 2.x 中为解决此问题,重新定义了 Icon 组件,将所有的 Icons 抽离成单独的图标组件库 @nutui/icons-react(Taro 适配下为 @nutui/icons-react-taro) ,使其可以进行按需加载使用。 因此一些组件之前关于 Icon 的相关 Props 将被移除,需要使用插槽或者传递一个 Component 组件的 Props 进行使用。 受影响的组件如下: + +- Avatar +- Button +- ImagePreview +- Collapse +- InfiniteLoading +- Popup +- Steps +- Switch +- Toast +- Progress +- NoticeBar +- SearchBar +- Navbar +- Menu +- Tabbar +- Checkbox +- InputNumber +- Input +- Radio +- Rate +- Uploader +- Popover +- Grid +- TrendArrow + +如果你的项目中使用了这些组件,请仔细阅读文档并进行升级。 + +## 组件名称调整 + +- GridItem -> Grid.Item +- TabbarItem -> Tabbar.Item +- CollapseItem -> Collapse.Item +- SwiperItem -> Swiper.Item +- CellGroup -> Cell.Group +- MenuItem -> Menu.Item +- Infiniteloading -> InfiniteLoading + +## 组件 API 调整 + +在 2.0 版本中,我们重点对组件 API 进行了评审和修订,使属性和方法命名更贴合常用的命名习惯及 React 语言规范,目标希望开发者在使用组件时得心应手。我们的思路大体如下: + +### 属性定义 + +本次升级重点关注属性的命名方面,从 1.x 的 610 个属性精简为 410 个,更精简、更规范;同时增强属性的类型范围,提升自定义能力。 + +- 对同一属性进行统一描述,比如: + - 缩写类会改为全拼,如 `desc`、`descSlot`、`description` 统一为 `description` + - 能使用名词或形容词的优先使用该类词性,一个词能说明白的不用两个词。 + - 如 `wrap`、`wrapable` 统一为 `wrap` + - 如将 `isXxx` 统一为 `xxx`,如 `isVisible`、`isDeletable` 等,可直接使用 `visible`、`deletable` 等,形容词化 + - 如`showXxx` 尽量统一为 `xxx`,名词化。【部分属性待优化。】 + - 如 `roundRadius` 改为 `radius` ,`columnNum` 改为 `columns`等 + - `onClickXxx` 统一为 `onXxxClick` + - `modelValue` 统一为 `value`,并增加支持 `defaultValue`,支持受控与非受控模式 + - 对于标识位置、对齐等类的属性,将属性名变更为其上一层的属性定义,如 `center`会改为 `align`、`vertical`,改为 `direction`,像标记距离的,如 `top`、`bottom`、`distance` 等,会改为 `threshold` + - 不规范的定义如 `okBtn`、`okText` 这种,会改为 `confirmXxx` +- 扩充属性的类型。如 `title` 的类型从 `string` 扩充为 `React.ReactNode`,增强自定义内容;其中有涉及合并属性的,统一用最简命名来定义属性;如 `title`、`titleSlot` 合并为 `title`,再扩充属性类型。 +- 对于 `xxClass`、`xxStyle`类的属性,移除,可使用 `className` 、`style` 来实现。 +- 移除与样式有关的属性,除基础组件的样式属性及部分实现起来较为复杂的样式属性外,大多数样式属性被移除,可通过样式变量来实现。 +- 将普遍认同可内置的属性或不怎么使用的属性,直接内置,去掉属性设置。 + +### 组件实现 + +### 基础组件 + +#### Button + +- 移除 `plain`,通过 `fill="outline"` 实现 +- 增加 `ref`,对外暴露组件内 `button` 元素 +- CSS 变量中,对 `type` 类型对应的色值的定义,不在暴露到文档中,建议使用默认值,或修改主题变量 +- 增加 `fill` 模式类型,`dashed`,修改 `fill` 默认值为 `outline`。 +- 增加 `rightIcon`,可满足同时设置左右两个icon的情况。 +- 修改 `size` 为 `large` 时的默认 `width` 为 `100%` 的值,如果使用通栏的 `button`,可搭配 `block` 来使用。 + +#### Cell + +- `subTitle` 重命名为 `description`,类型修改为 `React.Node` +- `desc` 重命名为 `extra`,类型修改为 `React.Node` +- `roundRadius` 重命名为 `radius` +- `center` 重命名为 `align`,默认值修改为`flex-start`,可选值为 `flex-start`、`center`、`flex-end` +- 移除 `icon`、 `isLink`、`url`、`linkSlot`、`replace`、`descTextAlign`,通过用户自定义节点实现,参考文档demo示例 + +#### CellGroup + +- 新增 `divider`,单元格之间是否有分割线 +- `desc` 重命名为 `description` +- `title`、`description` 类型修改为 `React.Node` +- 移除 `titleSlot` 和 `descSlot`,通过 `title`、`description` 实现 +- + +#### ConfigProvider + +#### Icon + +#### Image + +- 移除 `round`,通过 `radius` 实现圆或圆角 +- 移除 `loadingImg` 和 `slotLoading`,通过 `loading` 属性实现,当 `loading` 属性设置为 `ReactNode` 或 `true` 时,表示展示 `loading` 状态 +- 移除 `showError` 和 `slotError`,通过 `error` 属性实现,当 `error` 属性设置为 `ReactNode` 或 `true` 时,表示展示 `error` 状态 +- 移除 `loadingImg`,可通过 `loading` 设置 `ReactNode` +- 移除 `errorImg`,可通过 `error` 设置 `ReactNode` +- `showError` 重命名为 `error`,类型修改为 `boolean|ReactNode` +- `showLoading` 重命名为 `loading`,类型修改为 `boolean|ReactNode` + +#### Overlay + +- `overlayClass` 重命名为 `className` +- `overlayStyle` 重命名为 `style` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- 更改 `lockScroll` 默认值为 `true` +- 新增 `afterClose` 和 `afterShow`,用于完全关闭后触发的回调和完全展示后触发的回调 + +#### Popup + +- `popClass` 重命名为 `className`,统一将组件的样式类名使用 `className`,不再指定特殊名字,减轻用户使用的记忆成本 +- `overlayClass` 重命名为 `overlayClassName`,继承自`Overlay` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- `onOpened` 和 `onClosed` 重命名为 `afterShow` 和 `afterClose`,继承自`Overlay`,用于完全关闭后触发的回调和完全展示后触发的回调 +- `destroyOnClose` 的描述进行了修订,改为:“组件不可见时,卸载内容”,并把其默认值改为了`false` +- `onClickCloseIcon` 和 `onClickOverlay` 两个方法,增加布尔判断,如返回false 或 未定义返回值时,将不再关闭 Popup;默认值为 `true`;在demo中已增加相应示例;同时,两者的名字变更为 `onCloseIconClick`、`onOverlayClick` +- `closeIcon` 类型从 `string` 改为 `ReactNode`,以前的 `closeIcon='mask-close'` 需改为 `closeIcon={}` +- `onOverlayClick` 和 `onCloseIconClick` 不会自动触发 `onClose` 了,如需触发关闭事件,需主动调用 `onClose` 回调函数 +- 新增 `description` 属性,支持标题下展示描述内容。 +- 调整 `position` 为 `bottom` 时的默认样式,默认支持圆角,此刻不需要再设置 `round` 属性。 + +### 布局组件 + +#### Divider + +- 移除 `dashed`, 通过 `style` 属性实现 +- 移除 `hairline`, 默认为 `true` +- CSS 变量调整:`$divider-before-margin-right`、`$divider-after-margin-left` 统一为 `$divider-spacing`,`$divider-vertical-border-left` 变更为 `$divider-border-color`,增加 `$divider-side-width`。 + +#### Grid + +- 移除 `fontSize`,可自行控制传入的组件字体大小 +- 移除 `border`,作为默认样式 +- `columnNum` 重命名为 `columns` +- `GridItem` 使用方式修改为 `Grid.Item` + +#### Layout + +#### Sticky + +- 移除 `top` 和 `bottom`, 重命名为 `threshold` + +### 导航组件 + +#### Elevator + +- `acceptKey` 重命名为 `floorKey` +- `indexList` 重命名为 `list` +- `isSticky` 重命名为 `sticky` +- `onClickIndex` 重命名为 `onIndexClick` +- `onClickItem` 重命名为 `onItemClick` +- 新增`showKeys`,是否展示右侧导航 +- CSS 变量部分,对命名做了简化。 + +#### FixedNav + +- `unActiveText` 重命名为 `inactiveText` +- `navList` 重命名为 `list` +- `slotBtn` 重命名为 `content` +- `onSelected` 重命名为 `onSelect` +- 移除 `fixednavClass`,通过 `className` 实现 +- 移除 `slotList`,通过 `children` 实现 +- 该组件已废弃 `BEM` 规范,记得把 `__` 改为 `-` + +#### Indicator + +- 移除 `block`,暴露自定义节点 +- 移除 `align`,暴露自定义节点 +- `vertical` 重命名为`direction`,默认值为 `horizontal`,可选 `vertical` +- 移除 `fillZero`,暴露自定义节点 +- `size` 重命名为 `total` +- 增加非数字展示,并设置为默认状态 + +#### Menu + +- 移除 `fontClassName` +- 移除 `iconClassPrefix` +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick` +- `titleIcon` 重命名为 `icon` +- `optionsIcon` 重命名为 `icon` +- 增加 `closeOnClickAway` + +#### NavBar + +- `desc` 重命名为 `right`,类型修改为 `React.Node` +- 新增 `left`,左侧内容,渲染在返回区域的右侧 +- 新增 `back`,返回区域内容 +- `onClickBack` 重命名为 `onBackClick` +- 移除 `title`,通过 `children` 实现 +- 移除 `leftText` `leftShow`,通过 `back`、`left`实现 +- `safeAreaInsetTop` 重命名为 `safeArea` +- `border` 废弃 +- 移除 `onClickTitle` `onClickRight` `onClickIcon`,通过在`left`、`title`、`right`自定义事件实现,参考文档demo示例 +- + +#### Pagination + +- 新增 `lite` 模式,只展示页码,不支持事件交互 +- 新增 `defaultValue` 非受控值 +- `modelValue` 重命名为 `value`,受控值 +- `prevText` 重命名为 `prev`,类型修改为 `ReactNode` +- `nextText` 重命名为 `next`,类型修改为 `ReactNode` +- `forceEllipses` 重命令为 `ellipse` +- `showPageSize` 重命名为 `itemSize` +- `itemsPerpage` 重命名为 `pageSize` +- `totalitems` 重命名为 `total` +- `pageNodeRender` 重命名为 `itemRender` +- 移除 `pageCount`,通过 `total` 与 `pageSize` 组合实现 + +#### SideNavBar + +- `offset` 重命名为 `indent` + +#### Tabbar + +- `unactiveColor` 重命名为 `inactiveColor` +- `tabTitle` 重命名为 `title`,类型修改为 `ReactNode` +- `bottom` 重命名为 `fixed` +- `safeAreaInsetBottom` 重命名为 `safeArea` +- `visible` 重命名为 `defaultValue`,非受控 +- `activeVisible` 重命名为 `value`,受控 + +#### TabbarItem + +- 使用方式修改为 `Tabbar.Item` +- `icon` 类型改为 `ReactNode`,移除其他 `icon` 关联属性 +- 移除 `href`,通过 `onSwitch` 事件控制链接与路由跳转 +- 移除 `num`,支持传入所有 `Badge` Props +- 移除 `color`,使用父元素的 `activeColor`,保持同样的 `active` 状态 + +#### Tabs + +- 增加 `lite`、`card`、`button`、`divider` 模式。 +- 移除 `background`,通过 `className` 或 `style` 控制 +- 移除 `titleScroll`, 默认支持滚动 +- 移除 `ellipsis`,默认 `flex:1` +- 移除 `size`,通过 css 变量 `--nutui-tabs-titles-item-font-size` 实现 +- `animatedTime` 重命名为 `duration` +- `titleGutter` 重命名为 css 样式变量实现 +- `titleNode` 重命名为 `title` +- `color` 重命名为 `activeColor` +- `type` 重命名为 `activeType` +- `leftAlign` 重命名为 `align` +- `onClick` 类型改为 `(index: string | number) => void` +- `onChange` 类型改为 `(index: string | number) => void` +- 增加 defaultValue +- 增加 `activeType` 类型 `simple`,实现选项卡的简约选择,只修改字号和字重,不处理字色。 + +#### Tabs.Tabpane + +- `paneKey` 重命名为 `value` + +### 数据录入 + +#### Calendar + +- `poppable` 重命名为 `popup` +- `isAutoBackFill` 重命名为 `autoBackfill` +- `toDateAnimation` 重命名为 `scrollAnimation` +- `startText` 类型改为 `ReactNode` +- `endText` 类型改为 `ReactNode` +- `confirmText` 类型改为 `ReactNode` +- `onBtn` 重命名为 `renderHeaderButtons` +- `onDay` 重命名为 `renderDay` +- `onTopInfo` 重命名为 `renderDayTop` +- `onBottomInfo` 重命名为 `renderDayBottom` +- `onSelected` 重命名为 `onDayClick` +- `onChoose` 重命名为 `onConfirm` +- `onYearMonthChange` 重命名为 `onPageChange` +- 新增 `firstDayOfWeek`,支持按照周进行选择,指定周起止日,如0-6 + +#### Cascader + +- 新增 `defaultValue`,其中 `defaultValue` 用于非受控,原 `value` 用于受控。两者的类型都改为 `(number | string | undefined)[]` +- `checkedIcon` 重命名为 `activeIcon` +- `poppable` 重命名为 `popup` +- `lazyLoad` 重命名为 `onLoad`,当启动懒加载 `lazy` 时,动态加载数据 +- `convertConfig` 重命名为 `format`,配置转换规则 +- 合并 `textKey` `valueKey` `childrenKey` 三个属性为对象属性 `optionKey` +- 移除 `tabsColor`, 该属性为设置 `Tabs` 当前选中的 `tab` 的下划线色值,但该值最好与文字部分搭配使用,统一处理 CSS 变量。 + +#### Checkbox + +- 新增 `defaultChecked`,用于非受控,`checked` 用于受控 +- 新增 `value`,用于 group 模式 +- `textPosition` 重命名为 `labelPosition` +- `iconName` 重命名为 `icon`,类型为 `ReactNode` +- `iconAcitveName` 重命名为 `activeIcon` +- `iconIndeterminateName` 重命名为 `iconIndeterminateIcon` +- 移除 `iconSize` +- 部分 className 命名变更,废弃 `nutui-checkbox__xx` 命名方式,直接使用 `nutui-checkbox-xx`,并对选中状态命名修订为 `nutui-checkbox-icon-checked` +- 增加半选的禁用状态 + +#### Checkbox.Group + +- 新增 `defaultValue`,用于非受控,`value` 用于受控 +- `textPosition` 重命名为 `labelPosition` +- `toggleAll` 重命名为 `toggle` +- `toggleReverse` 重命名为 `reverse` +- 部分 className 命名变更,废弃 `nutui-checkbox__xx` 命名方式,直接使用 `nutui-checkbox-xx`,并对选中状态命名修订为 `nutui-checkbox-icon-checked` + +#### DatePicker + +- `modelValue` 重命名为 `value`,并增加 `defaultValue` +- `isShowChinese` 重命名为 `showChinese` +- `minDate` 重命名为 `startDate` +- `maxDate` 重命名为 `endDate` +- `onConfirmDatePicker` 重命名为 `onConfirm` +- `onCloseDatePicker` 重命名为 `onClose` +- 因为依赖组件`Picker`的变更,方法 `onConfirmDatePicker`、`onChange`的参数进行了调整,从`(selectedValue, selectedOptions)` 改为 `(selectedOptions, selectedValue)`。 + +#### Form + +- 增加 `footer`,类型为 `ReactNode`,用于表单底部区域,通常用于设置提交、重置按钮 +- 增加 `initialValues`,用于设置表单初始值,同时用于表单的重置 +- 增加 `name` 属性 + +#### Form.Item + +- 移除 `labelWidth`, 通过 `--nutui-form-item-label-width` 控制宽度 +- 增加 `required`,用于必选样式控制 +- 增加 `trigger`,用于设置数据更新的时机 +- 增加 `valuePropName`,用于收集子组件受控的属性映射 +- 增加 `getValueFromEvent`,用于在收集数据中进行数据转换 +- 增加 `onclick` 用于收集子组件的 `ref` + +#### Input + +#### InputNumber + +- 增加 `allowEmpty`, 用于允许内容是否为空 +- 新增 `defaultValue`,用于非受控,`value` 用于受控 +- `decimalPlaces` 重命名为 `digits` +- `isAsync` 重命名为 `async` +- 移除 `inputWidth`, 通过`--nutui-inputnumber-input-width`控制输入框的宽度 +- 移除 `buttonSize`, 通过`–nutui-inputnumber-button-width` 和 `–nutui-inputnumber-button-height`控制按钮的宽度和高度 +- taro 新增 `formatter` 属性, 用于指定输入框展示值的格式 +- 移除 `errorMessage` +- 移除 `showWordLimit` +- `autofocus` 重命名为 `autoFocus` +- `type="textarea"` 建议改为使用 `TextArea` 组件实现 + +#### NumberKeyboard + +- `randomKeys` 重命名为 `random` +- `customKey` 重命名为 `custom` +- `title` 类型变更为 `ReactNode` +- 新增 `onConfirm` 事件 +- 移除 `popClass` 定义,默认支持透传 `Popup` 属性 + +#### Picker + +- `isVisible` 重命名为 `visible` +- `listData` 重命名为 `options` +- `defaultValueData` 重命名为 `defaultValue` +- 增加受控 `value` +- `swipeDuration` 重命名为 `duration` +- `onCloseUpdate` 重命名为 `afterClose` +- 方法 `onConfirm`、`onClose`、`afterClose`、`onChange`的参数进行了调整,从`(selectedValue, selectedOptions)` 改为 `(selectedOptions, selectedValue)`。 + +#### Radio + +- 移除 `iconSize`,可通过 Icon 的 css 变量设置 +- `iconName` 重命名为 `icon`,类型修改为 `ReactNode` +- 增加 `labelPosition`,用于设置 `label` 的位置 +- 增加 `checked` 和 `defaultChecked` ,用于受控和非受控 +- `onChange` 类型修改为 `(checked: boolean) => void` +- 部分 className 命名变更,废弃 `nutui-radio__xx` 命名方式,直接使用 `nutui-radio-xx`,并对选中状态命名修订为 `nutui-radio-icon-checked` + +### Radio.Group + +- `textPosition` 重命名为 `labelPosition` +- 增加 `defaultValue` ,用于非受控 +- `onChange` 类型修改为 `(value: string| number) => void` +- 部分 className 命名变更,废弃 `nutui-radio__xx` 命名方式,直接使用 `nutui-radio-xx`,并对选中状态命名修订为 `nutui-radio-icon-checked` + +#### Range + +- `maxDesc` 重命名为 `maxDescription`,类型改为 `ReactNode` +- `minDesc` 重命名为 `minDescription`,类型改为 `ReactNode` +- `curValueDesc` 重命名为 `currentDescription`,类型改为 `(value) => ReactNode` +- 移除 `hiddenRange`,通过 `max/minDescription` 传 `null` 实现 +- 移除 `hiddenTag`,通过 `currentDescription` 传 `null` 实现 +- 移除 `activeColor`、`inactiveColor`、`buttonColor`,通过 `css` 变量实现 +- `onDragStart` 重命名为 `onStart` +- `onDragEnd` 重命名为 `onEnd` +- `modelValue` 重命为 `value`,增加 `defaultValue` 非受控方式 + +#### Rate + +- `minimizeValue` 重命名为 `min` +- `readonly` 重命名为 `readOnly` +- 移除 `spacing`,通过 css 样式变量实现 +- 移除 `activeColor`、`voidColor`、`iconSize`,通过 `checkedIcon`、`uncheckedIcon` 实现 +- 增加受控 `value` 与非受控 `defaultValue`,移除 `modelValue` + +#### SearchBar + +- `onClickInput` 重命名为 `onInputClick` +- 移除 `clearSize`,样式默认 +- 移除 `background`,使用 CSS 变量 `--nutui-searchbar-background` 实现 +- 移除 `inputBackground`,使用 CSS 变量 `--nutui-searchbar-input-background` 实现 +- 移除 `align`,使用 CSS 变量 `--nutui-searchbar-input-text-align` +- 新增 `left` 和 `right`,为 `ReactNode` 节点,可自定义内容 +- 移除 `leftoutIcon` 和 `label`,使用 `left` 实现 +- 移除 `rightoutIcon` 和 `actionText`,使用 `right` 实现 +- 移除 `leftinIcon`,使用 `leftIn` 实现 +- 移除 `rightinIcon`,使用 `rightIn` 实现,同时兼顾和 clearIcon 的交互,当设置rightIn时,默认展示 rightIn,当触发输入后,展示 clearIcon。同时增加 `backable` 来标记是否展示左侧返回Icon +- 移除 `onCancel`,使用 `right` 来实现事件处理 +- 移除 `onClickLeftinIcon`,用户可使用 `left` 来实现事件处理 +- 移除 `onClickLeftoutIcon`,用户可使用 `left` 来实现事件处理 +- 移除 `onClickRightinIcon`,用户可使用 `right` 来实现事件处理 +- 移除 `onClickRightoutIcon`,用户可使用 `right` 来实现事件处理 + +#### ShortPassword + +- `desc` 重命名为 `description` +- `noButton` 重命名为 `hideFooter` +- `onOk` 重命名为 `onConfirm` +- `errorMsg` 重命名为 `error` +- 移除 `closeOnClickOverlay`,默认支持透传 Popup 属性 +- `title`、`description`、`tips`、`error` 类型修改为 `ReactNode` +- `modelValue` 重命名为 `value`,受控模式 +- 新增 `onFoucs` 事件 + +#### TextArea + +- `maxlength` 重命名为 `maxLength` +- `readonly` 重命名为 `readOnly` +- `limitShow` 重命名为 `showCount` +- `autosize` 重命名为 `autoSize` +- 移除 `textAlign`,可通过 `style` 传入 +- `defaultValue` 改为非受控,增加受控值 `value` + +#### Uploader + +- `maximize` 重命名为 `maxFileSize` +- `maximum` 重命名为 `maxCount` +- `listType ` 重命名为 `previewType` +- `isDeletable ` 重命名为 `deletable` +- `isPreview` 重命名为 ` preview` +- `defaultImg` 重命名为 ` previewUrl` +- `defaultFileList` 重命名为 ` defaultValue` +- `uploadIconTip` 重命名为 `uploadLabel`,类型变更为 `ReactNode` +- `onBeforeUpload` 重命名为 `beforeUpload` +- `onBeforeXhrUpload` 重命名为 `beforeXhrUpload` +- `onBeforeDelete` 重命名为 `beforeDelete` +- `onRemove` 重命名为 `onDelete` +- 增加 `fit`,用于图片填充模式 +- 增加 `value`,用于受控传值 +- 移除 `uploadIconSize`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 +- `uploadIcon` 类型从 `string` 调整为 `ReactNode` +- `onChange` 参数类型从 `{fileList: FileItem[], event: any}` 调整为 `FileItem[]` + +### 操作反馈 + +#### ActionSheet + +- `title`,类型变更为 `ReactNode` +- `description`,类型变更为 `ReactNode` +- `cancelTxt`,重命名为 `cancelText`,类型变更为 `ReactNode` +- `menuItems` 重命名为 `options` +- `chooseTagValue` 重命名为 `value` +- `onChoose` 重命名为 `onSelect` +- 增加 `options` 的定义 + - `color` 重命名为 `danger` + - `name`,列表项的标题key + - `description`,列表项的描述key + - `danger`,列表项中提醒用户重点关注的操作 + - `disabled`,列表项中禁用项 + +#### BackTop + +- `elId` 重命名为 `target` +- 移除 `right`、`bottom`,通过 style 传入,增加支持 `left`、`top` +- `distance` 重命名为 `threshold` +- 移除 `isAnimation`,通过 `duration` 设置 0 实现无动画效果 + +#### Dialog + +- `okText` 重命名为 `confirmText`,规范命名。 +- `mask` 重命名为 `overlay`,组件库中统一使用 Overlay 组件作为遮罩层,并使用 overlay 作为是否展示遮罩层的属性值。 +- `closeOnClickOverlay` 重命名为 `closeOnOverlayClick`,组件库统一到该属性。 +- `noOkBtn` 重命名为 `hideConfirmButton`,初始值不变,依然表示是否隐藏确认按钮,主要是为了语义化更强。 +- `noCancelBtn` 重命名为 `hideCancelButton`,初始值不变,依然表示是否隐藏取消按钮,主要是为了语义化更强。 +- `okBtnDisabled` 重命名为 `disableConfirmButton`,初始值不变,依然表示是否禁用确认按钮,主要是为了语义化更强。 +- 移除 `noFooter`,使用 footer 统一处理,当 footer 为空时,及可替代该值。目前 noFooter 也需要手动声明是否为 noFooter;修改后需手动指出 footer={null} +- 移除 `textAlign`,改用样式变量 `--nutui-dialog-content-text-align` 或 SCSS 变量 `$dialog-content-text-align` 控制,默认值为 center。 +- 移除 `cancelAutoClose`,改为 `beforeCancel` 和 `beforeClose` 来实现,在点击关闭或取消时,可先触发这两个方法,以确定是否要关闭弹框,如返回true,则关闭;否则不关闭。 +- `onOk` 重命名为 `onConfirm`,规范命名。 +- `onClosed` 重命名为 `onClose`,规范命名,关闭时触发。 +- `onClickSelf` 重命名为 `onClick`,语义不变,仍表示点击弹框自身时触发事件。 +- 增加 `overlayStyle` 和 `overlayClassName`,用来配置 Overlay 组件样式。 +- 增加 `onOverlayClick`,支持点击overlay时,触发事件。 +- `onCancel` 回调不会自动关闭弹层,需主动调用 `Dialog.close(xx)` + +#### Drag + +#### InfiniteLoading + +- `useCapture` 重命名为 `capture` +- `onScrollChange` 重命名为 `onScroll` +- `isOpenRefresh` 重命名为 `pullRefresh` +- `pullTxt` 重命名为 `pullingText`,类型变更为 `ReactNode` +- `loadTxt` 重命名为 `loadingText`,类型变更为 `ReactNode` +- `containerId` 重命名为 `target` +- 修订类名如 `top-box`、`bottom-box` 为 `nut-infinite-top-tips`、`nut-infinite-bottom-tips` + +#### Notify + +- 移除 `color` ,通过css变量`--nutui-notify-text-color`实现 +- 移除`background`,通过css变量`--nutui-notify-base-background-color`实现 +- `onClosed` 重命名为 `onClose` + +#### PullToRefresh + +#### Swipe + +- 移除 `leftWidth` ,通过 `leftAction` 实现 +- 移除 `rightWidth` ,通过 `rightAction` 实现 + +#### Switch + +- 新增 `defaultChecked`,用于非受控,`checked` 用于受控 +- 移除 `isAsync`,通过 `checked`实现 +- 移除 `activeColor` ,通过css变量`--nutui-switch-open-background-color`实现 +- 移除 `inactiveColor`,通过css变量`--nutui-switch-close-background-color`实现 + +#### Toast + +- 移除H5版本 `id` +- 移除 `center`和 `bottom`,通过 `position` 实现 +- 移除 `bgColor`,通过 css 变量实现 +- 移除 `customClass`,通过 `className` 实现 +- 移除 `cover` 和 `coverColor` ,通过css变量实现 +- 移除 `loadingRotate`,旋转状态通过 `iconFont`实现 +- 移除 `textAlignCenter`,通过css变量实现 +- 修改 `closeOnClickOverlay` 为 `closeOnOverlayClick` ,语义不变,是否在点击遮罩层后关闭提示 +- 新增 `lockScroll` ,用于背景是否锁定,默认值为 `false` + +### 展示组件 + +#### Animate + +- `type` 属性类型更改为 `AnimateType` ,具体值详见文档 +- `action` 属性类型更改为 `initial \| click` + +#### AnimatingNumbers + +- `maxLen` 重命名为 `length` +- `endNumber` 重命名为 `value`,类型修改为 `string|number` +- `delaySpeed` 重命名为 `delay` +- `easeSpeed` 重命名为 `duration` + +#### Audio + +- `url` 重命名为 `src` +- `autoplay` 重命名为 `autoPlay` +- `onFastBack` 重命名为 `onBack` +- `onPlayEnd` 重命名为 `onEnd` + +#### Avatar + +- `url` 重命名为 `src` +- `onActiveAvatar` 重命名为 `onClick` +- 新增 `fit` 属性,用于图片填充模式 +- 移除 `iconSize`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 + +#### AvatarGroup + +- AvatarGroup `maxCount` 重命名为 `max` +- AvatarGroup `span` 重命名为 `gap` +- AvatarGroup `zIndex` 重命名为 `level` + +#### Badge + +- 移除 `zIndex`,目前没有用到,也不生效,直接去掉。 +- 移除 `icon`,自定义 `icon` 可放在 `value` 中实现,扩充了 `value` 的类型。 +- 修改 `max` 的最大值为99(之前为10000),比较贴合实际场景。 +- 主题定制的 `css` 变量中,去掉和 `dot` 有关的其他值,只保留 `width`。其他值由 `width` 计算而来. +- 主题定制,增加包含 icon 情况下的样式变量。 + +#### CircleProgress + +- `progress` 重命名为 `percent` +- `circleColor` 重命名为 `color` +- `pathColor` 重命名为 `background` + +#### Collapse + +- 新增 `defaultActiveName` 非受控 +- `activeName` 改为受控方式 +- `icon` 重命名为 `expandIcon`,类型修改为 `ReactNode` +- `onChange` 参数变更为 `activeName, name, status` +- 新增一种样式,尝试修改 `--nutui-collapse-item-border-bottom` 和 `-nutui-collapse-item-header-border-bottom`,可查看 + +#### CollapseItem + +- 使用方式调整为 `Collapse.Item` +- subTitle 重命名为 extra,类型修改为 `ReactNode` +- 新增 `expnandIcon`,优先级高于父组件对应值 +- 新增 `rotate`,优先级高于父组件对应值 + +#### CountDown + +- 新增 `remainingTime`,支持剩余毫秒时间倒计时。 + +#### Ellipsis + +- 新增 `className` 和 `style` 属性的支持 +- 优化 H5 的代码,去掉 `useEffect` 渲染改用 `useLayoutEffect` + +#### Empty + +- 新增 `status` 属性,用于默认图片错误类型 +- 新增 `size` 属性,用于区分全屏与半屏状态下图片的不同大小 +- 新增 `title` 属性,用于展示提示的标题部分 +- 新增 `actions` 属性,用于展示提示的操作部分,支持1个或2个操作 +- `image` 属性类型更改为 `ReactNode` +- 新增 `title`、`size`、`actions` 属性,支持标题的设置、图片大小的设置、可能的操作设置,操作设置默认以`Button`实现。 + +#### ImagePreview + +- `show` 重命名为 `visible` +- `autoplay` 重命名为 `autoPlay` +- `initNo` 重命名为 `defaultValue`,同时增加 `value`,为受控 +- `paginationVisible` 重命名为 `indicator` +- `paginationColor` 重命名为 `indicatorColor` +- `contentClose` 重命名为 `closeOnContentClick` +- 在 `Taro` 下支持视频 + +#### NoticeBar + +- `direction` 的可选值从 `across` 重命名为 `horizontal` +- `text` 重命名为 `content` +- `closeMode` 重命名为 `closeable` +- `leftIcon` 类型扩充,支持 `ReactNode` +- `rightIcon` 类型扩充,支持 `ReactNode` +- `color` 移除,使用 CSS 变量,之前已支持 +- `background` 移除,使用 CSS 变量,之前已支持 +- `wrapable` 重命名为 `wrap` +- `standTime` 重命名为 `duration` +- `onClickItem` 重命名为 `onItemClick` +- `complexAm` 废弃 + +#### Popover + +- 移除 `theme` 属性,可以通过css变量 `--nutui-brand-color` 控制暗黑模式 +- 新增 `showArrow` 属性,用于是否显示小箭头 +- 新增 `closeOnActionClick` 属性,用于是否在点击选项后关闭 +- 新增 `closeOnOutsideClick` 属性,用于是否在点击外部元素后关闭菜单 +- 新增 `targetId` 属性,用于自定义目标元素 id +- 新增 `onOpen` 属性,用于点击菜单时触发 +- 新增 `onClose` 属性,用于关闭菜单时触发 +- 新增 `action` 属性,用于为对应的选项添加方法 +- `onChoose` 重命名为 `onSelect` +- 继承Popup组件的 `overlayStyle` 、`overlayClassName` 、`overlay` 、`closeOnOverlayClick` 属性。 + +#### Price + +- `decimalDigits` 重命名为 `digits` +- 移除 `needSymbol`,通过 `symbol` 判断是否需要加上 symbol 符号 +- 新增 `line`,是否展示划线价 + +#### Progress + +- `percentage` 重命名为 `percent`,受控 +- 移除 `isShowPercentage`,可以自定义传入文案 +- 移除 `textWidth`,可以自定义传入内容的宽度 +- `strokeColor` 重命名为 `color` +- `fillColor` 重命名为 `background` +- 移除 `size`,通过 `strokeWidth`、`progress-height` css 变量实现尺寸自定义 +- `status` 重命名为 `animated`,表示是否展示动画效果 +- 移除 `textBackground`,通过 css 实现 +- 移除 `textColor`,通过 css 实现 +- 移除 `textInside`,仅保留内显功能 +- 移除 `textType、icon`,通过 `children` 传入自定义 `ReactNode`,不再区分类型 +- 新增 `lazy` 属性,支持每次进入可视区时展示进度条动画 +- 新增 `delay` 属性,表示延迟数据加载时长 + +#### Skeleton + +- `loading` 重命名为 `visible` +- `row` 重命名为 `rows` +- 移除 `width`,通过 css 变量 `skeleton-line-width` 实现 +- 移除 `height`,通过 css 变量 `skeleton-line-height` 实现 +- 移除 `round`,通过 css 变量 `skeleton-line-border-radius` 实现 + +#### Steps + +- `current` 重命名为 `value` +- `onClickStep` 重命名为 `onStepClick` +- `progressDot` 重命名为 `dot` + +#### Step + +- 移除 `iconColor`,可通过 `icon` 属性传入自定义 icon 或借助 CSS Variables 修改 icon 颜色 +- 移除 `size`,可通过 icon 属性传入自定义 icon 或借助 CSS Variables 修改 icon 大小 +- 移除 `renderContent` ,可通过 `description` 实现 +- `title` 类型修改为 `ReactNode` +- `content` 重命名为 `description`,类型改为 `ReactNode` +- `icon` 类型修改为 `ReactNode` +- `activeIndex` 重命名为 `value` + +#### Swiper + +- h5 + - 移除 `paginationColor`,通过 `indicator` 的 CSS 变量控制 + - 移除 `paginationBgColor`,通过 `indicator` 的 CSS 变量控制 + - 移除 `pageContent`,通过 indicator 实现 + - `autoplay` 重命名为 `autoplay` + - `initPage` 重命名为 `defaultValue` + - `paginationVisible` 重命名为 `indicator`,类型改为` ReactNode` + - `isPreventDefault` 重命名为 `preventDefault` + - `isStopPropagation` 重命名为 `stopPropagation` + - `isCenter` 重命名为 `center` +- taro + - 通过封装 Taro 的 `Swiper` 和 `SwiperItem` 实现,支持的属性可参考 Taro Swiper 文档。 + +#### Table + +- `onSorter` 重命名为 `onSort` +- 合并 `summary` 与 `noData` 的样式处理 + +#### Tag + +- `color` 重命名为 `background` +- `textColor` 重命名为 `color` + +#### TrendArrow + +- `rate` 重命名为 `value` +- `showSign` 重命名为 `symbol` +- `showZero` 重命名为 `zero` +- `arrowLeft` 重命名为 `left` +- `syncTextColor` 重命名为 `sync` +- `textColor` 重命名为 `color` +- `upIconName` 重命名为 `riseIcon`,类型修改为 `React.Node` +- `downIconName` 重命名为 `dropIcon`,类型修改为 `React.Node` +- 移除 `iconSize`,通过`riseIcon`、`dropIcon`自定义传入icon大小 + +#### Video + +- 在 `Taro` 下新增video的适配 + +#### VirtualList + +- `sourceData` 重命名为 `list` +- `conatinerSize` 重命名为 `containerHeight` +- `itemSize` 重命名为 `itemHeight` +- `itemEqualSize` 重命名为 `itemEqual` +- `horizontal` 修改为 `direction`,默认值 `vertical`,可选值 `horizontal` + +#### WaterMark + +- `fontColor` 重命名为 `color` + +### 特色组件 + +#### Address + +- 该组件的 `custom` 改用 `Cascader` 组件重写;`custom2`也将使用 `Cascader` 完成,在 `Cascader` 中支持 `Elevator`,开发中。所以会废弃 `province`、`city`、`country`、`town` 这些属性,同时支持 `Cascader` 的属性。 +- `modelValue` 重命名为 `visible` +- `modelSelect` 重命名为 `defaultValue` +- `onSelected` 重命名为 `onSelect` +- `existAddress` 重命名为 `existList` +- `selectedIcon` 重命名为 `selectIcon` +- `closeBtnIcon` 重命名为 `closeIcon` +- `backBtnIcon` 重命名为 `backIcon` +- `isShowCustomAddress` 重命名为 `custom`,用于已有地址列表与自定义列表的切换,修改默认为值 `false` +- `customAndExistTitle` 废弃,与 `custom` 合并,当 `custom` 为 true 时,为默认文案,设置为某字符串时,展示字符串。 +- `customAddressTitle`、`existAddressTitle` 重命名为 `title`,不再区分状态,可通过onSwitch修改title +- 精简布局和样式 + +#### Barrage + +- `barrageList` 重命名为 `list` +- `frequency` 重命名为 `interval` +- `speeds` 重命名为 `duration` +- `top` 重命名为 `gapY` + +#### Card + +#### Signature + +- `type` 类型修改为 `png|jpg` +- `unSupportTpl` 重命名为 `unsupported`,类型修改为 `ReactNode` +- 新增 `confirm`和`clear` ref 的方法,移除组件内部 `button`元素,通过自定义按钮元素,设置元素点击事件结合ref实现,参考文档demo示例 + +#### TimeSelect + +- 移除 `height`,通过 `style` 设置高度 +- `title` 类型修改为 `ReactNode` +- `onPannelChange` 重命名为 `onDateChange` +- 移除 `dates`、`times`,合并为 `options`,重新设计了数据结构 +- 增加 `optionKey` 用于自定义数据中的关键字 +- 移除 `currentKey`,新增 `defaultValue` 用于设置默认选项,支持时间选择 diff --git a/src/sites/doc/docs/taro/official-theme-react.en-US.md b/src/sites/doc/docs/taro/official-theme-react.en-US.md new file mode 100644 index 0000000000..931c122da2 --- /dev/null +++ b/src/sites/doc/docs/taro/official-theme-react.en-US.md @@ -0,0 +1,65 @@ +# Official theme + +## introduce + +NutUI provides multiple sets of official `UI` themes by default, while allowing new themes to be customized to a certain extent to meet the diverse visual needs of the business. + +#### + +| theme description | scss file name | +| --- | --- | +| Jingdong APP theme (default) | `variables.scss` | +| Jingdong B Mall Theme Preview | `variables-jdb.scss ` | + +NutUI theme customization + +## How to use + +### Modify the configuration file of the local project vite or webpack + +Modify the **sass-loader** configuration in the vite or webpack configuration file. The following example + +#### vite configuration example + +:::demo + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + // Default Jingdong APP 10.0 theme > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // Jingdong B Mall theme > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + }, + }, + }, +}) +``` + +::: + +#### webpack configuration example + +:::demo + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // Default Jingdong APP 10.0 theme > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // Jingdong B Mall theme > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + // Note: In different versions of sass-loader, the name of this option is different. For details, please refer to the version documentation corresponding to sass-loader + data: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + } + } + ] +} +``` + +::: diff --git a/src/sites/doc/docs/taro/official-theme-react.md b/src/sites/doc/docs/taro/official-theme-react.md new file mode 100644 index 0000000000..c4107d8c8c --- /dev/null +++ b/src/sites/doc/docs/taro/official-theme-react.md @@ -0,0 +1,86 @@ +# 官方主题 + +## 介绍 + +NutUI 默认提供多套官方`UI`主题,同时允许在一定程度上定制新主题,以满足业务的多样化视觉需求。 + +#### + +| 主题说明 | scss 文件名称 | +| --- | --- | +| 京东 APP 主题(默认) | `variables.scss` | +| 京东B商城主题预览 | `variables-jdb.scss` | + +NutUI 主题定制 + +## 使用方式 + +### 修改本地项目 vite 或者 webpack 的配置文件 + +修改 vite 或者 webpack 配置文件中 **sass-loader** 的配置。如下示例 + +#### vite 配置示例 + +:::demo + +```javascript +// https://vitejs.dev/config/ +export default defineConfig({ + //... + css: { + preprocessorOptions: { + scss: { + // 默认京东 APP 主题 > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // 京东B商城主题 > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + additionalData: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + }, + }, + }, +}) +``` + +::: + +#### webpack 配置示例 + +:::demo + +```javascript +{ + test: /\.(sa|sc)ss$/, + use: [ + { + loader: 'sass-loader', + options: { + // 默认京东 APP 主题 > @import "@nutui/nutui-react/dist/styles/variables.scss"; + // 京东B商城主题 > @import "@nutui/nutui-react/dist/styles/variables-jdb.scss"; + // 注意:在 sass-loader 不同版本,这个选项名是 是不一样的,具体可参考 sass-loader对应的版本文档 + data: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + } + } + ] +} +``` + +::: + +#### vue/cli 3 以上版本修改 **vue.config.js** 进行配置 + +:::demo + +```javascript +module.exports = { + css: { + loaderOptions: { + // 给 sass-loader 传递选项 + scss: { + // @/ 是 src/ 的别名 + // 注意:在 sass-loader v7 中,这个选项名是 "data" + prependData: `@import "@nutui/nutui-react/dist/styles/variables.scss";`, + }, + }, + }, +} +``` + +::: diff --git a/src/sites/doc/docs/taro/start-react.en-US.md b/src/sites/doc/docs/taro/start-react.en-US.md new file mode 100644 index 0000000000..b8d48574ff --- /dev/null +++ b/src/sites/doc/docs/taro/start-react.en-US.md @@ -0,0 +1,185 @@ +# Quick Start + +## Intro + +Through this article, you can master the installation and use of NutUI-React Taro. The operation is simple and easy to use, and the development is simple and fast. + +## Install Taro CLI + +```sh +# pnpm +pnpm install -g @tarojs/cli +# npm +npm install -g @tarojs/cli +# yarn +yarn global add @tarojs/cli +``` + +## Method 1: Use the NutUI template to quickly create a project + +#### 1. Use the command to create a Taro project: + +```sh +taro init +``` + +#### 2、Refer to the operation below to select the NutUI React template + +```sh +👽 Taro + +Taro 即将创建一个新项目! +Need help? Go and open issue: https://tls.jd.com/taro-issue-helper + +? 请输入项目名称! MyProject +? 请输入项目介绍 +? 请选择框架 React +? 是否需要使用 TypeScript ? Yes +? 请选择 CSS 预处理器(Sass/Less/Stylus) Sass +? 请选择编译工具 Webpack5 +? 请选择包管理工具 pnpm +? 请选择模板源 Github(最新) +✔ 拉取远程模板仓库成功! + 默认模板 + harmony + mobx + pwa +❯ react-NutUI(使用 NutUI React 的模板) + react-native + ...... +``` + +## Method 2: Introduce NutUI React into the existing Taro project + +#### 1. Install NutUI React + +```sh +# pnpm +pnpm add @nutui/nutui-react-taro +# npm +npm i @nutui/nutui-react-taro +# yarn +yarn add @nutui/nutui-react-taro +``` + +#### 2、Taro + +Install [@tarojs/plugin-html](https://taro-docs.jd.com/docs/use-h5/) + +```sh +# pnpm +pnpm add @tarojs/plugin-html@version +# yarn +yarn add @tarojs/plugin-html@version +# npm +npm i @tarojs/plugin-html@version +``` + +config + +:::demo + +```js +// config/index.js +config = { + plugins: ['@tarojs/plugin-html'], + designWidth(input) { + if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) { + return 375 + } + return 750 + }, + deviceRatio: { + 640: 2.34 / 2, + 750: 1, + 828: 1.81 / 2, + 375: 2 / 1, + }, +} +``` + +::: + +#### 3、Component usage and on-demand import + +You can choose to import style files in full: + +```js +import '@nutui/nutui-react-taro/dist/style.css' +``` + +You can also implement on-demand import of styles in the following ways: + +Install `babel-plugin-import`. + +```sh +# pnpm +pnpm add babel-plugin-import +# npm +npm i babel-plugin-import +# yarn +yarn add babel-plugin-import +``` + +babel config + +:::demo + +```js +// babel.config.js +plugins: [ + [ + 'import', + { + libraryName: '@nutui/nutui-react-taro', + libraryDirectory: 'dist/esm', + style: 'css', + camel2DashComponentName: false, + }, + 'nutui-react-taro', + ], +] +``` + +::: + +## Precautions + +#### 1. Check if Taro is successfully installed + +```sh +taro -v +``` + +The Taro version number appears to indicate a successful installation. + +#### 2. Saas-related errors occurred during the installation of Taro + +You may consider installing `mirror-config-china` and try again. + +```sh +npm install -g mirror-config-china +``` + +#### 3. When the applet project is running, the error message "can't find the template" appears + +Solution: Turn off prebundle and cache in Taro configuration file + +:::demo + +```js +// config/index.js +config = { + compiler: { + type: 'webpack5', + prebundle: { + exclude: ['@nutui/nutui-react-taro', '@nutui/icons-react-taro'], + }, + }, + cache: { + enable: false, + }, +} +``` + +::: diff --git a/src/sites/doc/docs/taro/start-react.md b/src/sites/doc/docs/taro/start-react.md new file mode 100644 index 0000000000..89ac3ff900 --- /dev/null +++ b/src/sites/doc/docs/taro/start-react.md @@ -0,0 +1,191 @@ +# 快速上手 + +## 介绍 + +通过本文你可以掌握 NutUI-React Taro 的安装和使用方法,操作简单易上手,开发简洁快速。 + +## 安装 Taro 脚手架 + +```sh +# pnpm +pnpm install -g @tarojs/cli +# npm +npm install -g @tarojs/cli +# yarn +yarn global add @tarojs/cli +``` + +## 方式一:使用 Taro 内置的 NutUI 模板快速创建项目 + +#### 1、使用命令创建 Taro 项目: + +```sh +taro init +``` + +#### 2、参考下方操作,选择 NutUI React 模板 + +```sh +👽 Taro + +Taro 即将创建一个新项目! +Need help? Go and open issue: https://tls.jd.com/taro-issue-helper + +? 请输入项目名称! MyProject +? 请输入项目介绍 +? 请选择框架 React +? 是否需要使用 TypeScript ? Yes +? 请选择 CSS 预处理器(Sass/Less/Stylus) Sass +? 请选择编译工具 Webpack5 +? 请选择包管理工具 pnpm +? 请选择模板源 Github(最新) +✔ 拉取远程模板仓库成功! + 默认模板 + harmony + mobx + pwa +❯ react-NutUI(使用 NutUI React 的模板) + react-native + ...... +``` + +## 方式二:在已有 Taro 项目中引入 NutUI React + +#### 1、安装 NutUI React + +```sh +# pnpm +pnpm add @nutui/nutui-react-taro +# npm +npm i @nutui/nutui-react-taro +# yarn +yarn add @nutui/nutui-react-taro +``` + +#### 2、Taro 相关配置 + +安装 [@tarojs/plugin-html](https://taro-docs.jd.com/docs/use-h5/) + +> 注意,这里安装的版本 version 必须与项目中 Taro 版本保持一致! + +```bash +# pnpm +pnpm add @tarojs/plugin-html@version +# yarn +yarn add @tarojs/plugin-html@version +# npm +npm i @tarojs/plugin-html@version +``` + +在项目中配置 + +:::demo + +```js +// config/index.js +config = { + // 开启 HTML 插件 + plugins: ['@tarojs/plugin-html'], + designWidth(input) { + // 配置 NutUI 375 尺寸 + if (input?.file?.replace(/\\+/g, '/').indexOf('@nutui') > -1) { + return 375 + } + // 全局使用 Taro 默认的 750 尺寸 + return 750 + }, + deviceRatio: { + 640: 2.34 / 2, + 750: 1, + 828: 1.81 / 2, + 375: 2 / 1, + }, +} +``` + +::: + +#### 3、组件使用与按需引入 + +您可以选择全量引入样式文件: + +```js +import '@nutui/nutui-react-taro/dist/style.css' +``` + +也可以通过下面的方式实现样式的按需引入: + +首先安装 `babel-plugin-import` 插件 + +```sh +# pnpm +pnpm add babel-plugin-import +# npm +npm i babel-plugin-import +# yarn +yarn add babel-plugin-import +``` + +安装后在项目中设置 babel 相关配置: + +```js +// babel.config.js +module.exports = { + presets: [ + // ... + ], + plugins: [ + [ + 'import', + { + libraryName: '@nutui/nutui-react-taro', + libraryDirectory: 'dist/esm', + style: 'css', + camel2DashComponentName: false, + }, + 'nutui-react-taro', + ], + ], +} +``` + +## 注意事项 + +#### 1、检查 Taro 是否安装成功 + +```sh +taro -v +``` + +出现 Taro 版本号说明安装成功。 + +#### 2、安装 Taro 过程中出现 Saas 相关错误 + +可以考虑安装 `mirror-config-china` 后重试。 + +```sh +npm install -g mirror-config-china +``` + +#### 3、小程序项目运行时出现「找不到模板」的错误提示 + +解决方案:在 Taro 配置文件中关闭 prebundle 及 cache + +:::demo + +```js +// config/index.js +config = { + compiler: { + type: 'webpack5', + prebundle: { + exclude: ['@nutui/nutui-react-taro', '@nutui/icons-react-taro'], + }, + }, + cache: { + enable: false, + }, +} +``` + +::: diff --git a/src/sites/doc/docs/taro/theme-react.en-US.md b/src/sites/doc/docs/taro/theme-react.en-US.md new file mode 100644 index 0000000000..30cfcb128c --- /dev/null +++ b/src/sites/doc/docs/taro/theme-react.en-US.md @@ -0,0 +1,58 @@ +# Customize Theme + +## Introduce + +NutUI-React supports flexible style customization to meet multiple visual business and brand needs, including but not limited to support for global master tone and component-specific visual customization. +
    +
    +In NutUI-React version 1.4.0, the Sass theme customization function of 1.x can still be used. We added CSS variables to the original theme customization function, so that the new theme customization function can be used without introducing additional SCSS style files. + +## Method 1: Use CSS Variables to configure topics + +`NutUI - React` can [CSS Vars] (https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) to organize the pattern, By overwriting these 'CSS' variables, you can achieve custom theme, dynamic switching theme and other functions. +
    +
    +You can play with the [ConfigProvider](#/zh-CN/component/configprovider) component. +
    +
    +We recommend replacing [CSS Vars] (https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) for the theme of personalized configuration. + +## Method 2: Use Sass variable for topic configuration + +#### Step 1: Create a custom variable SCSS file + +Create a new 'SCSS' file 'custom_theme.scss' in your local project. + +```scss +// Dominant tone +$color-primary: #fa2c19; +$color-primary-end: #fa6419; +... +``` + +#### Step 2: Modify the configuration file of the local project webpack or vite + +Modify the ** ass-loader** configuration in the 'vite' or 'webpack' configuration file. The following example + +#### taro + +Configure `scss` file global cover in `config/index.js`: + +```javascript +const path = require('path'); +const config = { + deviceRatio: { + 640: 2.34 / 2, + 750: 1, + 828: 1.81 / 2, + 375: 2 / 1 + }, + sass: { + resource: [ + path.resolve(__dirname, '..', 'src/assets/styles/custom_theme.scss') + ], + // 默认京东 APP 10.0主题 > @import "@nutui/nutui-react-taro/dist/styles/variables.scss"; + data: `@import "@nutui/nutui-react-taro/dist/styles/variables.scss";` + }, + // ... +``` diff --git a/src/sites/doc/docs/taro/theme-react.md b/src/sites/doc/docs/taro/theme-react.md new file mode 100644 index 0000000000..f1aec212d5 --- /dev/null +++ b/src/sites/doc/docs/taro/theme-react.md @@ -0,0 +1,53 @@ +# 主题定制 + +## 介绍 + +NutUI-React 支持灵活的样式定制,满足多种视觉业务和品牌需求,包括但不限于全局主色调和特定组件视觉定制的支持。 +
    +在 NutUI-React 的 1.4.0 版本中,依然可以使用 1.x 的 Sass 定制主题功能,我们在原有的主题定制功能上新增了 CSS 变量, 无需引入额外的 SCSS 样式文件,就可以使用到新的主题定制功能。 + +## 方式一 使用 CSS Variables 进行主题配置 + +`NutUI-React` 组件可以通过 [CSS Vars](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) 来组织样式,通过覆盖这些 `CSS` 变量,可以实现定制主题、动态切换主题等功能。 +
    +您可在 [ConfigProvider 组件](#/zh-CN/component/configprovider) 进行体验。 +
    +我们更推荐使用替换 [CSS Vars](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties) 的方式来进行个性化的主题配置。 + +## 方式二 使用 Sass 变量 进行主题配置 + +### 第一步 新建自定义变量 SCSS 文件 + +在本地项目中新建一个 `SCSS` 文件 `custom_theme.scss` 进行自定义。 + +```scss +// 主色调 +$color-primary: #fa2c19; +$color-primary-end: #fa6419; +... +``` + +### 第二步 修改本地项目 webpack 或者 vite 的配置文件 + +#### Taro 小程序使用示例 + +修改 `config/index.js` 文件中配置 `scss` 文件,全局覆盖如: + +```javascript +const path = require('path'); +const config = { + deviceRatio: { + 640: 2.34 / 2, + 750: 1, + 828: 1.81 / 2, + 375: 2 / 1 + }, + sass: { + resource: [ + path.resolve(__dirname, '..', 'src/assets/styles/custom_theme.scss') + ], + // 默认京东 APP 10.0主题 > @import "@nutui/nutui-react-taro/dist/styles/variables.scss"; + data: `@import "@nutui/nutui-react-taro/dist/styles/variables.scss";` + }, + // ... +``` diff --git a/src/sites/doc/router.ts b/src/sites/doc/router.ts index 5a91667608..201f206500 100644 --- a/src/sites/doc/router.ts +++ b/src/sites/doc/router.ts @@ -1,9 +1,12 @@ -import { Divider } from '@nutui/nutui-react-taro'; // const modulesPage = import.meta.globEager('/src/packages/**/doc.md', { // as: 'raw', // }) const modulesPage = import.meta.glob('/src/packages/**/doc.md') const routes: any[] = [] +const guideRoutes: any[] = [] +const guideEnRoutes: any[] = [] +const guideTaroRoutes: any[] = [] +const guideEnTaroRoutes: any[] = [] for (const path in modulesPage) { let name = (/packages\/(.*)\/doc\.md/.exec(path) as any[])[1] routes.push({ @@ -44,9 +47,41 @@ for (const path in modulesTaroPage) { }) } -// routes.push({ -// path: '/zh-CN/guide/intro-react', -// name: 'intro-react-zh-CN', -// component: () => Divider -// }) -export default routes +const modulesDocs = import.meta.glob('/src/sites/doc/docs/react/*.md'); +for (const path in modulesDocs) { + let name = (/docs\/react\/(.*).md/.exec(path) as any[])[1]; + guideRoutes.push({ + path: `/zh-CN/guide/${name}`, + component: modulesDocs[path], + name + }); +} + +const modulesEnDocs = import.meta.glob('/src/sites/doc/docs/react/*.en-US.md'); +for (const path in modulesEnDocs) { + let name = (/docs\/react\/(.*).en-US.md/.exec(path) as any[])[1]; + guideEnRoutes.push({ + path: `/en-US/guide/${name}`, + component: modulesEnDocs[path], + name: `en-${name}` + }); +} +const modulesTaroDocs = import.meta.glob('/src/sites/doc/docs/taro/*.md'); +for (const path in modulesTaroDocs) { + let name = (/docs\/taro\/(.*).md/.exec(path) as any[])[1]; + guideTaroRoutes.push({ + path: `/zh-CN/guide-taro/${name}`, + component: modulesDocs[path], + name + }); +} +const modulesEnTaroDocs = import.meta.glob('/src/sites/doc/docs/taro/*.en-US.md'); +for (const path in modulesEnTaroDocs) { + let name = (/docs\/taro\/(.*).en-US.md/.exec(path) as any[])[1]; + guideEnTaroRoutes.push({ + path: `/en-US/guide-taro/${name}`, + component: modulesDocs[path], + name + }); +} +export {routes, guideRoutes, guideEnRoutes, guideTaroRoutes, guideEnTaroRoutes} From 62a87fab2e114324192e55d4dbf4ef16c1894ca8 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Tue, 21 Jan 2025 19:10:13 +0800 Subject: [PATCH 08/14] feat: save some guide and routes logics --- src/sites/doc/App.tsx | 4 ++-- src/sites/doc/docs/react/contributing-react.en-US.md | 2 +- src/sites/doc/docs/react/contributing-react.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index cf70257b2a..c0ee24bb8d 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -88,11 +88,11 @@ const Content = () => { return (
    -
    + {!isGuide &&
    </div> - </div> + </div>} <div className={`doc-content-document ${isGuide ? 'full' : 'isComponent'}`} > diff --git a/src/sites/doc/docs/react/contributing-react.en-US.md b/src/sites/doc/docs/react/contributing-react.en-US.md index fa3d85d360..d96531048f 100644 --- a/src/sites/doc/docs/react/contributing-react.en-US.md +++ b/src/sites/doc/docs/react/contributing-react.en-US.md @@ -1,4 +1,4 @@ -<h2 style="margin-top: 0;">Contribution Guidelines</h2> +# Contribution Guidelines You can contribute to the NutUI community according to the co-construction direction in 《[NutUI invites you to build, Hello Contributor](https://jelly.jd.com/article/6320528b92d94a0068685525)》. diff --git a/src/sites/doc/docs/react/contributing-react.md b/src/sites/doc/docs/react/contributing-react.md index 21ad78757a..56e2eb7b72 100644 --- a/src/sites/doc/docs/react/contributing-react.md +++ b/src/sites/doc/docs/react/contributing-react.md @@ -1,4 +1,4 @@ -## 贡献指南 +# 贡献指南 您可根据《[NutUI 邀您共建,Contributor 您好](https://jelly.jd.com/article/6320528b92d94a0068685525)》中的共建方向为 NutUI 社区做出贡献。 From 485990ef03c0cbcb8f8e5101c898b515dd36c1ef Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Tue, 21 Jan 2025 20:17:17 +0800 Subject: [PATCH 09/14] feat: save some guide and routes logics --- src/sites/doc/App.tsx | 7 ++++--- src/sites/doc/components/nav/nav.tsx | 2 +- src/sites/doc/docs/taro/contributing-react.en-US.md | 4 ++-- src/sites/doc/docs/taro/contributing-react.md | 4 ++-- src/sites/doc/router.ts | 4 ++-- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index c0ee24bb8d..653adaf8a8 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -85,7 +85,8 @@ const Content = () => { useEffect(() => { document.addEventListener('scroll', scrollTitle) }, []) - + const routes = [...routers, ...guideRoutes, ...guideEnRoutes, ...guideTaroRoutes, ...guideEnTaroRoutes] + console.log(guideRoutes,guideTaroRoutes) return ( <div className="doc-content"> {!isGuide && <div className="doc-title"> @@ -97,8 +98,8 @@ const Content = () => { className={`doc-content-document ${isGuide ? 'full' : 'isComponent'}`} > <Routes> - {[...routers, ...guideRoutes].map((ru, k) => { - const path = ru.component.name?.substring( + {routes.map((ru, k) => { + const path = ru.component?.name?.substring( 0, ru.component.name.lastIndexOf('/') ) diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 626a8ea0b6..88d3a2b061 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -35,7 +35,7 @@ const Nav = () => { const changeNav = (_nav: any) => { setActiveName(_nav.name) - navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide/` + _nav.name.toLowerCase()) + navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide${isTaro? '-taro' : ''}/${_nav.name.toLowerCase()}`) } const isTaro = location.pathname.includes('-taro') const isZh = lang === 'zh-CN' diff --git a/src/sites/doc/docs/taro/contributing-react.en-US.md b/src/sites/doc/docs/taro/contributing-react.en-US.md index e15ca4a49c..2d201daa60 100644 --- a/src/sites/doc/docs/taro/contributing-react.en-US.md +++ b/src/sites/doc/docs/taro/contributing-react.en-US.md @@ -1,4 +1,4 @@ -<h2 style="margin-top: 0;">Contribution Guidelines</h2> +# Contribution Guidelines You can contribute to the NutUI community according to the co-construction direction in 《[NutUI invites you to build, Hello Contributor](https://jelly.jd.com/article/6320528b92d94a0068685525)》. @@ -123,5 +123,5 @@ npm run build:taro Thanks to all the developers below who have contributed code to NutUI. <a href="https://github.com/jdf2e/nutui-react/graphs/contributors"> - <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"> + <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"/> </a> diff --git a/src/sites/doc/docs/taro/contributing-react.md b/src/sites/doc/docs/taro/contributing-react.md index b851b28543..cc161ad9f8 100644 --- a/src/sites/doc/docs/taro/contributing-react.md +++ b/src/sites/doc/docs/taro/contributing-react.md @@ -1,4 +1,4 @@ -<h2 style="margin-top: 0;">贡献指南</h2> +# 贡献指南 您可根据《[NutUI 邀您共建,Contributor 您好](https://jelly.jd.com/article/6320528b92d94a0068685525)》中的共建方向为 NutUI 社区做出贡献。 @@ -117,5 +117,5 @@ npm run build:taro 感谢以下所有给 NutUI 贡献过代码的开发者。   <a href="https://github.com/jdf2e/nutui-react/graphs/contributors"> -<img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"> +<img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"/> </a> diff --git a/src/sites/doc/router.ts b/src/sites/doc/router.ts index 201f206500..89d14b6518 100644 --- a/src/sites/doc/router.ts +++ b/src/sites/doc/router.ts @@ -71,7 +71,7 @@ for (const path in modulesTaroDocs) { let name = (/docs\/taro\/(.*).md/.exec(path) as any[])[1]; guideTaroRoutes.push({ path: `/zh-CN/guide-taro/${name}`, - component: modulesDocs[path], + component: modulesTaroDocs[path], name }); } @@ -80,7 +80,7 @@ for (const path in modulesEnTaroDocs) { let name = (/docs\/taro\/(.*).en-US.md/.exec(path) as any[])[1]; guideEnTaroRoutes.push({ path: `/en-US/guide-taro/${name}`, - component: modulesDocs[path], + component: modulesEnTaroDocs[path], name }); } From 3d618f49c69d8b572b967a847e0d13c6d7a2978e Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 22 Jan 2025 10:14:25 +0800 Subject: [PATCH 10/14] feat: save some guide & guideTaro routes logics --- src/sites/doc/App.tsx | 24 ++++-- src/sites/doc/components/nav/nav.tsx | 2 +- src/sites/doc/docs/react/intro-react.en-US.md | 4 +- src/sites/doc/docs/react/intro-react.md | 2 +- .../doc/docs/react/migrate-from-v1.en-US.md | 73 +++++++++++++++++ .../doc/docs/react/migrate-from-v2.en-US.md | 78 +++++++++++++++++++ src/sites/doc/docs/taro/intro-react.md | 4 +- .../doc/docs/taro/official-theme-react.md | 2 +- src/sites/doc/router.ts | 4 +- 9 files changed, 177 insertions(+), 16 deletions(-) create mode 100644 src/sites/doc/docs/react/migrate-from-v1.en-US.md create mode 100644 src/sites/doc/docs/react/migrate-from-v2.en-US.md diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index 653adaf8a8..0e92f54a6d 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -85,15 +85,23 @@ const Content = () => { useEffect(() => { document.addEventListener('scroll', scrollTitle) }, []) - const routes = [...routers, ...guideRoutes, ...guideEnRoutes, ...guideTaroRoutes, ...guideEnTaroRoutes] - console.log(guideRoutes,guideTaroRoutes) + const routes = [ + ...routers, + ...guideRoutes, + ...guideEnRoutes, + ...guideTaroRoutes, + ...guideEnTaroRoutes, + ] + console.log(guideRoutes, guideTaroRoutes) return ( <div className="doc-content"> - {!isGuide && <div className="doc-title"> - <div className={`doc-title-position ${fixed ? 'fixed' : ''}`}> - <Title /> + {!isGuide && ( + <div className="doc-title"> + <div className={`doc-title-position ${fixed ? 'fixed' : ''}`}> + <Title /> + </div> </div> - </div>} + )} <div className={`doc-content-document ${isGuide ? 'full' : 'isComponent'}`} > @@ -120,7 +128,9 @@ const Content = () => { })} </Routes> </div> - <DemoPreview className={`${fixed ? 'fixed' : ''}`}></DemoPreview> + {!isGuide && ( + <DemoPreview className={`${fixed ? 'fixed' : ''}`}></DemoPreview> + )} </div> ) } diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 88d3a2b061..3ddfbfe6a1 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -35,7 +35,7 @@ const Nav = () => { const changeNav = (_nav: any) => { setActiveName(_nav.name) - navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide${isTaro? '-taro' : ''}/${_nav.name.toLowerCase()}`) + navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide/${_nav.name.toLowerCase()}${isTaro? '-taro' : ''}`) } const isTaro = location.pathname.includes('-taro') const isZh = lang === 'zh-CN' diff --git a/src/sites/doc/docs/react/intro-react.en-US.md b/src/sites/doc/docs/react/intro-react.en-US.md index 9bcccc2eae..ca1a178d13 100644 --- a/src/sites/doc/docs/react/intro-react.en-US.md +++ b/src/sites/doc/docs/react/intro-react.en-US.md @@ -4,7 +4,7 @@ The NutUI-React component library is suitable for H5 applications of the React t ## Features -- 🚀 70+ high-quality components covering mainstream mobile scenarios +- 🚀 80+ high-quality components covering mainstream mobile scenarios - 📖 Based on JD APP 10.0 visual specification - 🍭 Support on-demand reference - 📖 Detailed documentation and examples @@ -34,7 +34,7 @@ For browsers that do not support CSS variables, it is recommended to use [postcs Thanks to the following friends for their contributions to NutUI-React: <a href="https://github.com/jdf2e/nutui-react/graphs/contributors"> - <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"> + <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"/> </a> ## LICENSE diff --git a/src/sites/doc/docs/react/intro-react.md b/src/sites/doc/docs/react/intro-react.md index eea1cf0f3a..6f12688d62 100644 --- a/src/sites/doc/docs/react/intro-react.md +++ b/src/sites/doc/docs/react/intro-react.md @@ -4,7 +4,7 @@ NutUI-React 组件库,适用于 React 技术栈的 H5 应用,开箱即用, ## 特性 -- 🚀 70+ 高质量组件,覆盖移动端主流场景 +- 🚀 80+ 高质量组件,覆盖移动端主流场景 - 📖 基于京东APP 10.0 视觉规范 - 🍭 支持按需引用 - 📖 详尽的文档和示例 diff --git a/src/sites/doc/docs/react/migrate-from-v1.en-US.md b/src/sites/doc/docs/react/migrate-from-v1.en-US.md new file mode 100644 index 0000000000..ac547cc7d1 --- /dev/null +++ b/src/sites/doc/docs/react/migrate-from-v1.en-US.md @@ -0,0 +1,73 @@ +# Upgrading from v1 to v2 + +This document will help you upgrade from NutUI React `1.x` to NutUI React `2.x` version. + +## Upgrade Steps + +1. H5 Install NutUI React version 2.x + +```shell +npm install @nutui/nutui-react +``` + +2. Taro installs NutUI React version 2.x + +```shell +npm install @nutui/nutui-react-taro +``` + +3. Handling incompatible updates + There are some incompatible updates from NutUI React 1.x to NutUI React 2.x. You need to read the incompatible updates carefully and deal with them in turn. + You can manually check your code against the list below to make changes, or we provide a codemod cli tool @nutui/nutui-react-codemod to help you upgrade to v2 quickly. Please commit your local code changes before running codemod cli. +4. Theme variables are renamed: + For example, primary-color is renamed to color-primary; note that if you are using a custom theme, especially if you are using the ConfigProvider component, you are not using `nutuiBrandColor`, remember to rename it to `nutuiColorPrimary`. + +## Compatibility Updates + +1. Component style handling + Added support for importing css files on demand, while retaining the ability to import scss files on demand. On-demand css import can be realized by babel-import-plugin plugin: + The H5 configuration is as follows: + +```json +// Webpack .babelrc or babel.config.js configuration +plugins: [ + [ + “import”. + { + libraryName: “@nutui/nutui-react”, libraryDirectory: “dist/esm”, { + libraryDirectory: “dist/esm”, { + style: 'css', + camel2DashComponentName: false, + }. + “nutui-react”. + ] +] +``` + +Taro is configured as follows: + +```json +// Configured in Webpack .babelrc or babel.config.js +plugins: [ + [ + “import”. + { + libraryName: “@nutui/nutui-react-taro”, libraryDirectory: “dist/esm”, { + libraryDirectory: “dist/esm”, { + style: 'css', + camel2DashComponentName: false, + }. + “nutui-react-taro”. + ] +] +``` + +2. better type exporting and adding `JSDoc` annotations to types +3. Adjustment of component categorization + In terms of component classification, we have reviewed the 1.x classification based on the information structure from the interaction dimension, together with the interaction design side, and subclassed and reclassified them, with the goal of more closely matching the distribution of interaction scenarios and making it easy to find components. The main distribution is: + +- Basic components, remove the `Popup` component, and subdivide `Popup` into operation feedback-guidance tips section; +- Layout components, remain unchanged; +- Navigation components: move paging related components `Pagination` and `Indicator` to the display component (to consider the light operation of paging on mobile); move `Menu` menu to the subclass of data entry class-selector (to consider that `Menu` is mainly used as a filter); + +Translated with DeepL.com (free version) diff --git a/src/sites/doc/docs/react/migrate-from-v2.en-US.md b/src/sites/doc/docs/react/migrate-from-v2.en-US.md new file mode 100644 index 0000000000..ab97f5b9f9 --- /dev/null +++ b/src/sites/doc/docs/react/migrate-from-v2.en-US.md @@ -0,0 +1,78 @@ +# Upgrading from v2 to v3 + +This document will help you upgrade from NutUI React `2.x` to NutUI React `3.x` version. + +## Upgrade Steps + +1. H5 Install NutUI React version 3.x + +```shell +npm install @nutui/nutui-react +``` + +2. Taro installs NutUI React version 3.x + +```shell +npm install @nutui/nutui-react-taro +``` + +3. Handling incompatible updates + +There are some incompatible updates from NutUI React 1.x to NutUI React 2.x. You need to read the incompatible updates carefully and deal with them in turn. + +You can manually check your code against the list below to make changes, or we provide a codemod cli tool @nutui/nutui-react-codemod to help you upgrade to v2 quickly. Please commit your local code changes before running codemod cli. + +4. Theme variables are renamed: + For example, primary-color is renamed to color-primary; note that if you are using a custom theme, especially if you are using the ConfigProvider component, you are not using `nutuiBrandColor`, remember to rename it to `nutuiColorPrimary`. + +## Compatibility Updates + +1. Component style handling + +Added support for importing css files on demand, while retaining the ability to import scss files on demand. On-demand css import can be realized by babel-import-plugin plugin: + +The H5 configuration is as follows: + +```js +// Webpack .babelrc or babel.config.js configuration +plugins: [ + [ + “import”. + { + libraryName: “@nutui/nutui-react”, libraryDirectory: “dist/esm”, { + libraryDirectory: “dist/esm”, { + style: 'css', + camel2DashComponentName: false, + }. + “nutui-react”. + ] +] +``` + +Taro is configured as follows: + +```json +// Configured in Webpack .babelrc or babel.config.js +plugins: [ + [ + “import”. + { + libraryName: “@nutui/nutui-react-taro”, libraryDirectory: “dist/esm”, { + libraryDirectory: “dist/esm”, { + style: 'css', + camel2DashComponentName: false, + }. + “nutui-react-taro”. + ] +] +``` + +2. better type exporting and adding `JSDoc` annotations to types +3. Adjustment of component categorization + In terms of component classification, we have reviewed the 1.x classification based on the information structure from the interaction dimension, together with the interaction design side, and subclassed and reclassified them, with the goal of more closely matching the distribution of interaction scenarios and making it easy to find components. The main distribution is: + +- Basic components, remove the `Popup` component, and subdivide `Popup` into operation feedback-guidance tips section; +- Layout components, remain unchanged; +- Navigation components: move `Pagination` and `Indicator` to the display component (considering the light operation of paging on mobile); move `Menu` menu to the data entry class-selector subclass (considering the light operation of paging on mobile); move `Menu` to the data entry class-selector subclass (considering the light operation of paging on mobile). + +Translated with DeepL.com (free version) diff --git a/src/sites/doc/docs/taro/intro-react.md b/src/sites/doc/docs/taro/intro-react.md index f862e45e9a..a1caceb7b9 100644 --- a/src/sites/doc/docs/taro/intro-react.md +++ b/src/sites/doc/docs/taro/intro-react.md @@ -4,7 +4,7 @@ NutUI-React 组件库,基于 Taro,使用 React 技术栈开发小程序应 ## 特性 -- 🚀 70+ 高质量组件,覆盖移动端主流场景 +- 🚀 80+ 高质量组件,覆盖移动端主流场景 - 💪 支持一套代码同时开发多端小程序+H5 - 📖 基于京东APP 10.0 视觉规范 - 🍭 支持按需引用 @@ -31,7 +31,7 @@ NutUI-React 组件库,基于 Taro,使用 React 技术栈开发小程序应 感谢以下小伙伴们为 NutUI-React 发展做出的贡献: <a href="https://github.com/jdf2e/nutui-react/graphs/contributors"> - <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"> + <img src="https://opencollective.com/nutui-react/contributors.svg?width=890&button=false" alt="contributors"/> </a> ## 开源协议 diff --git a/src/sites/doc/docs/taro/official-theme-react.md b/src/sites/doc/docs/taro/official-theme-react.md index c4107d8c8c..b183ada3bd 100644 --- a/src/sites/doc/docs/taro/official-theme-react.md +++ b/src/sites/doc/docs/taro/official-theme-react.md @@ -11,7 +11,7 @@ NutUI 默认提供多套官方`UI`主题,同时允许在一定程度上定制 | 京东 APP 主题(默认) | `variables.scss` | | 京东B商城主题<a target="_blank" href="https://nutui.jd.com/h5/vue/4x/?jdb#/zh-CN/component/button" >预览</a> | `variables-jdb.scss` | -<img src="https://img12.360buyimg.com/imagetools/jfs/t1/157759/16/13989/142151/6052efc7Ef8f4bff4/f3dd6422949ba4b7.jpg" width="700" alt="NutUI 主题定制"> +<img src="https://img12.360buyimg.com/imagetools/jfs/t1/157759/16/13989/142151/6052efc7Ef8f4bff4/f3dd6422949ba4b7.jpg" width="700" alt="NutUI 主题定制"/> ## 使用方式 diff --git a/src/sites/doc/router.ts b/src/sites/doc/router.ts index 89d14b6518..f37724055e 100644 --- a/src/sites/doc/router.ts +++ b/src/sites/doc/router.ts @@ -70,7 +70,7 @@ const modulesTaroDocs = import.meta.glob('/src/sites/doc/docs/taro/*.md'); for (const path in modulesTaroDocs) { let name = (/docs\/taro\/(.*).md/.exec(path) as any[])[1]; guideTaroRoutes.push({ - path: `/zh-CN/guide-taro/${name}`, + path: `/zh-CN/guide/${name}-taro`, component: modulesTaroDocs[path], name }); @@ -79,7 +79,7 @@ const modulesEnTaroDocs = import.meta.glob('/src/sites/doc/docs/taro/*.en-US.md' for (const path in modulesEnTaroDocs) { let name = (/docs\/taro\/(.*).en-US.md/.exec(path) as any[])[1]; guideEnTaroRoutes.push({ - path: `/en-US/guide-taro/${name}`, + path: `/en-US/guide/${name}-taro`, component: modulesEnTaroDocs[path], name }); From 745ba0918fb8cd14710b9cdfc5d8fabfb4646a83 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 22 Jan 2025 10:20:04 +0800 Subject: [PATCH 11/14] =?UTF-8?q?fix:=20=E9=87=8D=E7=BD=AENav=20Tab?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sites/doc/components/nav/nav.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index 3ddfbfe6a1..ce4d35d5cf 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -31,10 +31,13 @@ const Nav = () => { } else { setIsGuide(false) } + if(location.pathname.includes('/intro-react')) { + setActiveName('intro-react') + } }, [location]) const changeNav = (_nav: any) => { setActiveName(_nav.name) - + console.log(_nav.name) navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide/${_nav.name.toLowerCase()}${isTaro? '-taro' : ''}`) } const isTaro = location.pathname.includes('-taro') From d4624ced21d55f30207e376e2a00d2925fa2cee3 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 22 Jan 2025 10:25:00 +0800 Subject: [PATCH 12/14] chore: delete some logs --- src/sites/doc/App.tsx | 1 - src/sites/doc/components/header/header.tsx | 3 --- src/sites/doc/components/nav/nav.tsx | 1 - 3 files changed, 5 deletions(-) diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index 0e92f54a6d..2cbc4edc02 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -92,7 +92,6 @@ const Content = () => { ...guideTaroRoutes, ...guideEnTaroRoutes, ] - console.log(guideRoutes, guideTaroRoutes) return ( <div className="doc-content"> {!isGuide && ( diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/doc/components/header/header.tsx index 41e0116504..a0bce3b0ad 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/doc/components/header/header.tsx @@ -66,9 +66,7 @@ const Header = () => { (l) => location.pathname.indexOf(l.locale) > -1 )[0] setCurrLang(lang) - console.log(lang) }, [location]) - const [visible, setVisible] = useState(false) const [activeLink, setActiveLink] = useState('指南') // const handleSwitchLocale = (e: any) => { // const classList: string[] = [].slice.call(e.target.classList) @@ -158,7 +156,6 @@ const Header = () => { > <a onClick={() => { - console.log(item) toLink(item) }} > diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/doc/components/nav/nav.tsx index ce4d35d5cf..ed4c1efd4d 100644 --- a/src/sites/doc/components/nav/nav.tsx +++ b/src/sites/doc/components/nav/nav.tsx @@ -37,7 +37,6 @@ const Nav = () => { }, [location]) const changeNav = (_nav: any) => { setActiveName(_nav.name) - console.log(_nav.name) navigate(`${isZh ? '/zh-CN/' : '/en-US/'}guide/${_nav.name.toLowerCase()}${isTaro? '-taro' : ''}`) } const isTaro = location.pathname.includes('-taro') From 3a8ad9b40421db092900e6751c167f5b3c89b1f6 Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 22 Jan 2025 11:35:20 +0800 Subject: [PATCH 13/14] feat: save some backtop logics --- src/sites/assets/styles/md-style.scss | 1 - src/sites/assets/styles/variables.scss | 49 +++++++++++++------ src/sites/doc/App.scss | 5 ++ src/sites/doc/App.tsx | 6 ++- .../doc/components/demoblock/codeblock.tsx | 3 +- 5 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/sites/assets/styles/md-style.scss b/src/sites/assets/styles/md-style.scss index 2578487490..f6e4995484 100644 --- a/src/sites/assets/styles/md-style.scss +++ b/src/sites/assets/styles/md-style.scss @@ -1,5 +1,4 @@ @import 'highlight.scss'; -$doc-smile-curve: url('https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png') !default; .doc-content-document { position: relative; diff --git a/src/sites/assets/styles/variables.scss b/src/sites/assets/styles/variables.scss index fc6b3a5203..1ff4609e4c 100644 --- a/src/sites/assets/styles/variables.scss +++ b/src/sites/assets/styles/variables.scss @@ -1,5 +1,8 @@ // doc -$doc-default-color: #ff0f23; +$doc-default-color: #fa2c19 !default; +$doc-smile-curve: url('https://img10.360buyimg.com/imagetools/jfs/t1/136135/19/14659/946/5fa20aa8E33a9aa26/d329fbe669171208.png') !default; +$doc-footer-theme-icon: url('@/assets/images/icon-color.png') no-repeat + center/100% !default; $doc-default-primary-bg: linear-gradient( 135deg, rgba(250, 25, 44, 1) 0%, @@ -8,9 +11,14 @@ $doc-default-primary-bg: linear-gradient( rgba(250, 63, 25, 1) 100% ); -// color +$white: #fff; +$black: #000; +// 标题常规文字 +$title-color: #1a1a1a; + +// clolr // 红色 -$theme-red: #ff0f23; +$theme-red: #fa2c19; $theme-red-word: #fff; $theme-red-border: #fff; $theme-red-input: #fff; @@ -18,7 +26,7 @@ $theme-red-actice: #fff; $theme-red-select-border: #f0f2f5; $theme-red-select-word: #666; $theme-red-select-bg: #fff; -$theme-red-header-bg: url('../../assets/images/header-bg.png'); +$theme-red-header-bg: url('@/assets/images/header-bg.png'); $theme-red-footer-word1: #1a1a1a; $theme-red-footer-word2: #666; $theme-red-footer-word3: #1d1d21; @@ -37,22 +45,24 @@ $theme-white: #fff; $theme-white-word: #1a1a1a; $theme-white-input: #ccc; $theme-white-border: #d8d8d8; -$theme-white-actice: #ff0f23; +$theme-white-actice: #fa2c19; $theme-white-select-border: #f0f2f5; $theme-white-select-word: #666; $theme-white-select-bg: #fff; +$theme-white-select-hover: rgba(0, 0, 0, 0.02); +$theme-white-select-active: rgba(0, 0, 0, 0.06); $theme-white-box-border: #f5f5f5; $theme-white-footer-word1: #1a1a1a; $theme-white-footer-word2: #666; $theme-white-footer-word3: #1d1d21; $theme-white-footer-word4: #808080; -$theme-white-footer-hover: #ff0f23; +$theme-white-footer-hover: #fa2c19; $theme-white-footer-bg: #fff; $theme-white-footer-border: #eaf0fb; $theme-white-theme-border: #f5f6f7; $theme-white-circle: #fff; $theme-white-circle-border: #e5e5e5; -$theme-white-index-description: #959fb1; +$theme-white-index-desc: #959fb1; // 黑色 $theme-black-word: #ccc; @@ -60,6 +70,10 @@ $theme-black-input: #ccc; $theme-black-border: #d8d8d8; $theme-black-actice: #fff; $theme-black-select-bg: #1d1d1d; +$theme-black-nav-select-bg: #2c2c2c; +$theme-black-nav-select-border: #5e5e5e; +$theme-black-nav-select-active-bg: rgba(255, 255, 255, 0.2); +$theme-black-nav-select-hover-bg: rgba(255, 255, 255, 0.06); $theme-black-select-border: #c1c1c3; $theme-black-select-hover: #797a7b; $theme-black-select-word: #fff; @@ -67,8 +81,8 @@ $theme-black-box-border: #6b5554; $theme-black-footer-word1: #fff; $theme-black-footer-word2: #f5f5f5; $theme-black-footer-word3: #f5f5f5; -$theme-black-footer-word4: #808080; -$theme-black-footer-hover: #ff0f23; +$theme-black-footer-word4: #fff; +$theme-black-footer-hover: $doc-default-color; $theme-black-footer-bg: #1d1d21; $theme-black-footer-border: transparent; $theme-black-theme-border: #666; @@ -76,27 +90,34 @@ $theme-black-circle: #1a1a1a; // header $doc-default-header-color: $white; $doc-header-height: 64px; -$doc-header-bg: url('../../assets/images/header-bg.png') no-repeat; +$doc-header-bg: url('@/assets/images/header-bg.png') no-repeat; // nav $doc-default-nav-bg: $white; -$doc-default-nav-color: $color-title; +$doc-default-nav-color: $title-color; +$doc-nav-icon-color1: #41b883; +$doc-nav-icon-color2: #74c9ff; +$doc-nav-icon-bg1: rgba(65, 184, 131, 0.16); +$doc-nav-icon-bg2: rgba(116, 201, 255, 0.16); +// footer +// $doc-default-header-color: $white; +// $doc-footer-height: 73px; // home $theme-black-content-bg: #060506; //markdown-add-style $nutui-doc-black: #323233; -$nutui-doc-blue: #0073ff; +$nutui-doc-blue: #1989fa; $nutui-doc-purple: #8080ff; $nutui-doc-fuchsia: #a7419e; $nutui-doc-red: #fa2400; -$nutui-doc-text-color: #666666; +$nutui-doc-text-color: rgba(0, 0, 0, 0.88); $nutui-doc-text-light-blue: rgba(69, 90, 100, 0.6); $nutui-doc-background-color: #f7f8fa; $nutui-doc-grey: #999; $nutui-doc-dark-grey: #666; $nutui-doc-light-grey: #ccc; $nutui-doc-border-color: #f1f4f8; -$nutui-doc-code-color: #58727e; +$nutui-doc-code-color: rgba(0, 0, 0, 0.88); $nutui-doc-code-background-color: #f1f4f8; $nutui-doc-code-font-family: 'Source Code Pro', 'Monaco', 'Inconsolata', monospace; diff --git a/src/sites/doc/App.scss b/src/sites/doc/App.scss index 18bec29eb8..30e763cf00 100644 --- a/src/sites/doc/App.scss +++ b/src/sites/doc/App.scss @@ -247,3 +247,8 @@ $doc-title-height: 137px; right: 10px; } } +.doc-backtop { + position: fixed; + bottom: 14px; + right: 200px; +} diff --git a/src/sites/doc/App.tsx b/src/sites/doc/App.tsx index 2cbc4edc02..a2be6f8ca0 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/doc/App.tsx @@ -128,7 +128,10 @@ const Content = () => { </Routes> </div> {!isGuide && ( - <DemoPreview className={`${fixed ? 'fixed' : ''}`}></DemoPreview> + <> + <DemoPreview className={`${fixed ? 'fixed' : ''}`}></DemoPreview> + <BackTop className={`${fixed ? 'doc-backtop' : ''}`} /> + </> )} </div> ) @@ -142,7 +145,6 @@ const App = () => { <Nav /> <Content /> </HashRouter> - <BackTop threshold={500} /> </div> ) } diff --git a/src/sites/doc/components/demoblock/codeblock.tsx b/src/sites/doc/components/demoblock/codeblock.tsx index 6623682941..1509641103 100644 --- a/src/sites/doc/components/demoblock/codeblock.tsx +++ b/src/sites/doc/components/demoblock/codeblock.tsx @@ -12,6 +12,7 @@ const modules = import.meta.glob(`@/packages/**/demos/**/*.tsx`, { const CodeBlock: FunctionComponent = (props: { src?: string }) => { const ctx = useContext(APPContext) + const path = `${ctx.path}/doc.md` const originCode = modules[`${ctx.path}/demos/${props.src}`] try { const highlightedCode = hljs.highlightAuto(originCode, ['jsx']).value @@ -22,7 +23,7 @@ const CodeBlock: FunctionComponent = (props: { src?: string }) => { </pre> </DemoBlock> ) - } catch(e) { + } catch (e) { console.log('e', e) return <></> } From 3301a0f013d229dff03838266d2498cbcd3335dc Mon Sep 17 00:00:00 2001 From: "Alex.hxy" <1872591453@qq.com> Date: Wed, 5 Feb 2025 13:47:28 +0800 Subject: [PATCH 14/14] =?UTF-8?q?refactor:=20=E6=89=93=E5=8C=85=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E5=88=9D=E5=A7=8B=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + index.html | 2 +- package.json | 15 +- src/packages/popup/doc.taro.md | 10 +- src/packages/uploader/doc.en-US.md | 20 +- src/sites/assets/styles/variables.scss | 2 +- src/sites/config/env.ts | 2 +- .../doc/components/demo-preview/index.ts | 3 - src/sites/doc/components/header/index.ts | 2 - src/sites/doc/components/nav/index.ts | 3 - src/sites/{ => sites-react}/doc/App.scss | 0 src/sites/{ => sites-react}/doc/App.tsx | 13 +- .../components/demo-preview/demo-preview.scss | 0 .../components/demo-preview/demo-preview.tsx | 0 .../doc/components/demo-preview/index.ts | 3 + .../doc/components/demoblock/basedUtil.ts | 0 .../doc/components/demoblock/codeblock.tsx | 0 .../doc/components/demoblock/demoblock.scss | 0 .../doc/components/demoblock/demoblock.tsx | 0 .../doc/components/demoblock/index.ts | 0 .../doc/components/header/header.scss | 16 +- .../doc/components/header/header.tsx | 5 +- .../doc/components/header/index.ts | 2 + .../doc/components/issue/index.ts | 0 .../doc/components/issue/issue.scss | 0 .../doc/components/issue/issue.tsx | 0 .../sites-react/doc/components/nav/index.ts | 3 + .../doc/components/nav/nav.scss | 0 .../doc/components/nav/nav.tsx | 0 .../doc/components/search/search.scss | 2 +- .../doc/components/search/search.tsx | 2 +- src/sites/{ => sites-react}/doc/context.ts | 0 src/sites/sites-react/doc/docs.taro.ts | 363 ++++++++++++++++++ src/sites/sites-react/doc/docs.ts | 359 +++++++++++++++++ .../docs/react/contributing-react.en-US.md | 0 .../doc/docs/react/contributing-react.md | 0 .../docs/react/international-react.en-US.md | 0 .../doc/docs/react/international-react.md | 0 .../doc/docs/react/intro-react.en-US.md | 0 .../doc/docs/react/intro-react.md | 0 .../doc/docs/react/migrate-from-v1.en-US.md | 0 .../doc/docs/react/migrate-from-v1.md | 0 .../doc/docs/react/migrate-from-v2.en-US.md | 0 .../doc/docs/react/migrate-from-v2.md | 0 .../docs/react/official-theme-react.en-US.md | 0 .../doc/docs/react/official-theme-react.md | 0 .../doc/docs/react/start-react.en-US.md | 0 .../doc/docs/react/start-react.md | 0 .../doc/docs/react/theme-react.en-US.md | 0 .../doc/docs/react/theme-react.md | 0 .../doc/docs/taro/contributing-react.en-US.md | 0 .../doc/docs/taro/contributing-react.md | 0 .../docs/taro/international-react.en-US.md | 0 .../doc/docs/taro/international-react.md | 0 .../doc/docs/taro/intro-react.en-US.md | 0 .../doc/docs/taro/intro-react.md | 0 .../doc/docs/taro/migrate-from-v1.md | 0 .../doc/docs/taro/migrate-from-v2.md | 0 .../docs/taro/official-theme-react.en-US.md | 0 .../doc/docs/taro/official-theme-react.md | 0 .../doc/docs/taro/start-react.en-US.md | 0 .../doc/docs/taro/start-react.md | 0 .../doc/docs/taro/theme-react.en-US.md | 0 .../doc/docs/taro/theme-react.md | 0 src/sites/{ => sites-react}/doc/main.tsx | 4 +- src/sites/{ => sites-react}/doc/router.ts | 4 +- src/sites/theme/components/header/header.scss | 8 +- vite.config.demo.ts | 126 ++++++ vite.config.site.taro.ts | 0 vite.config.site.ts | 92 +++-- 70 files changed, 975 insertions(+), 87 deletions(-) delete mode 100644 src/sites/doc/components/demo-preview/index.ts delete mode 100644 src/sites/doc/components/header/index.ts delete mode 100644 src/sites/doc/components/nav/index.ts rename src/sites/{ => sites-react}/doc/App.scss (100%) rename src/sites/{ => sites-react}/doc/App.tsx (92%) rename src/sites/{ => sites-react}/doc/components/demo-preview/demo-preview.scss (100%) rename src/sites/{ => sites-react}/doc/components/demo-preview/demo-preview.tsx (100%) create mode 100644 src/sites/sites-react/doc/components/demo-preview/index.ts rename src/sites/{ => sites-react}/doc/components/demoblock/basedUtil.ts (100%) rename src/sites/{ => sites-react}/doc/components/demoblock/codeblock.tsx (100%) rename src/sites/{ => sites-react}/doc/components/demoblock/demoblock.scss (100%) rename src/sites/{ => sites-react}/doc/components/demoblock/demoblock.tsx (100%) rename src/sites/{ => sites-react}/doc/components/demoblock/index.ts (100%) rename src/sites/{ => sites-react}/doc/components/header/header.scss (97%) rename src/sites/{ => sites-react}/doc/components/header/header.tsx (99%) create mode 100644 src/sites/sites-react/doc/components/header/index.ts rename src/sites/{ => sites-react}/doc/components/issue/index.ts (100%) rename src/sites/{ => sites-react}/doc/components/issue/issue.scss (100%) rename src/sites/{ => sites-react}/doc/components/issue/issue.tsx (100%) create mode 100644 src/sites/sites-react/doc/components/nav/index.ts rename src/sites/{ => sites-react}/doc/components/nav/nav.scss (100%) rename src/sites/{ => sites-react}/doc/components/nav/nav.tsx (100%) rename src/sites/{ => sites-react}/doc/components/search/search.scss (94%) rename src/sites/{ => sites-react}/doc/components/search/search.tsx (98%) rename src/sites/{ => sites-react}/doc/context.ts (100%) create mode 100644 src/sites/sites-react/doc/docs.taro.ts create mode 100644 src/sites/sites-react/doc/docs.ts rename src/sites/{ => sites-react}/doc/docs/react/contributing-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/contributing-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/international-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/international-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/intro-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/intro-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/migrate-from-v1.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/migrate-from-v1.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/migrate-from-v2.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/migrate-from-v2.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/official-theme-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/official-theme-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/start-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/start-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/theme-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/react/theme-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/contributing-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/contributing-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/international-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/international-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/intro-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/intro-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/migrate-from-v1.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/migrate-from-v2.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/official-theme-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/official-theme-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/start-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/start-react.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/theme-react.en-US.md (100%) rename src/sites/{ => sites-react}/doc/docs/taro/theme-react.md (100%) rename src/sites/{ => sites-react}/doc/main.tsx (88%) rename src/sites/{ => sites-react}/doc/router.ts (93%) create mode 100644 vite.config.demo.ts create mode 100644 vite.config.site.taro.ts diff --git a/.gitignore b/.gitignore index f56e3aa29f..54d4f200c4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ node_modules .npmrc /dist /dist-demo +/dist-site /libs /jd/upload.js # yarn.lock diff --git a/index.html b/index.html index 47e045264c..738380c63b 100644 --- a/index.html +++ b/index.html @@ -49,7 +49,7 @@ continue.</strong> </noscript> <div id="doc"></div> - <script type="module" src="/src/sites/doc/main.tsx"></script> + <script type="module" src="/src/sites/sites-react/doc/main.tsx"></script> <script> //分享配置 var shareOption = { diff --git a/package.json b/package.json index 7e8f266dec..b4e0ff2a4b 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "changelog": "node ./scripts/generate-changelog.js", "clone:jdharmony": "node ./scripts/harmony/clone-jdharmony.js", "dev": "vite --open --force", + "dev:site:taro": "tsc && vite --force --config vite.config.site.taro.ts", "dev:rtl": "VITE_RTL=rtl vite --open --force", "dev:jrkf": "VITE_APP_PROJECT_ID=jrkf vite --open --force", "dev:taro:rn:dark": "THEME=dark pnpm dev:taro:rn", @@ -64,12 +65,14 @@ "build": "node ./scripts/replace-css-var.js && npm run checked && node scripts/build.mjs", "build:taro": "node ./scripts/replace-css-var.js && npm run checked:taro && node scripts/build-taro.mjs", "build:taro:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp node scripts/build-taro.mjs", - "build:site": "npm run checked && vite build --config vite.config.site.ts", - "build:site:jmapp": "npm run checked && VITE_APP_PROJECT_ID=jmapp vite build", - "build:taro:site": "pnpm update:taro:entry && npm run checked:taro && npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", - "build:jdtaro:site": "pnpm update:taro:entry && npm run checked:taro && npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", - "build:taro:site:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", - "build:jstaro:site:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", + "build:demo": "npm run checked && vite build --config vite.config.demo.ts", + "build:demo:jmapp": "npm run checked && VITE_APP_PROJECT_ID=jmapp vite build", + "build:taro:demo": "pnpm update:taro:entry && npm run checked:taro && npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", + "build:site": "vite build --config vite.config.site.ts", + "build:taro:site": "vite build --config vite.config.site.taro.ts", + "build:jdtaro:demo": "pnpm update:taro:entry && npm run checked:taro && npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", + "build:taro:demo:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp npm run generate:file:taro:pages && pnpm --dir ./packages/nutui-taro-demo build:h5", + "build:jstaro:demo:jmapp": "npm run checked:taro && VITE_APP_PROJECT_ID=jmapp npm run generate:file:taro:pages && JD=1 pnpm --dir ./packages/nutui-taro-demo build:h5", "generate:file": "node scripts/generate-nutui.js", "generate:themes": "node scripts/generate-themes.js", "generate:themes-dev": "node scripts/generate-themes-dev.js", diff --git a/src/packages/popup/doc.taro.md b/src/packages/popup/doc.taro.md index 5badf6c610..33a1f4807b 100644 --- a/src/packages/popup/doc.taro.md +++ b/src/packages/popup/doc.taro.md @@ -52,14 +52,6 @@ import { Popup } from '@nutui/nutui-react-taro' ::: -<!-- ### 指定节点挂载 - -:::demo - -<CodeBlock src='taro/demo6.tsx'></CodeBlock> - -::: --> - ### 多层堆叠 :::demo @@ -110,7 +102,7 @@ import { Popup } from '@nutui/nutui-react-taro' | description | 子标题/描述部分 | `ReactNode` | `-` | | destroyOnClose | 组件不可见时,卸载内容 | `boolean` | `false` | | round | 是否显示圆角 | `boolean` | `false` | -| portal | 指定节点挂载 | `HTMLElement` \| `(() => HTMLElement)` | null` | `null` | +| portal | 指定节点挂载 | ``HTMLElement` \| `(() => HTMLElement)` \| null`` | `null` | | onClick | 点击弹框时触发 | `event: MouseEvent` | `-` | | onCloseIconClick | 点击关闭图标时触发 | `event: MouseEvent` | `-` | | onOpen | 打开弹框时触发 | `-` | `-` | diff --git a/src/packages/uploader/doc.en-US.md b/src/packages/uploader/doc.en-US.md index ddd803979b..3e774c0e4a 100644 --- a/src/packages/uploader/doc.en-US.md +++ b/src/packages/uploader/doc.en-US.md @@ -102,25 +102,25 @@ import { Uploader } from '@nutui/nutui-react' | deletable | Whether or not to show the delete button | `boolean` | `true` | | method | The http method for the upload request | `string` | `post` | | previewType | previewType | The built-in style of the uploaded list, two basic styles are supported picture, list | `string` -| capture | Picture [selection mode] (<https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#htmlattrdefcapture>"), directly bring up the camera | `string` | `false` | maxFileSize +| capture | Picture [selection mode](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/input#htmlattrdefcapture), directly bring up the camera | `string` | `false` | maxFileSize | maxFileSize | You can set the maximum file size (in bytes) for uploading | `number` \| `string` | `Number.MAX_VALUE` | | maxCount | File upload count limit | `number` \| `string` | `1` | | fit | Picture fill mode | `contain` \| `cover` \| `fill` \| `none` \| `scale-down` | `cover` | | clearInput | If or not you want to clear the `input` content, set it to `true` to support selecting the same file to upload over and over again | `boolean` | `true` | -| accept | Allowed file types to be uploaded, [Details] ("<https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#%E9%99%90%E5%88%B6%E5%85%81%E8%AE%> B8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B") | `string` | `*` | -| uploadIcon | uploadRegion <a href=“#/zh-CN/icon”>Icon Name</a> | `React.ReactNode` | `-` | +| accept | Allowed file types to be uploaded, [Details](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/Input/file#%E9%99%90%E5%88%B6%E5%85%81%E8%AE%B8%E7%9A%84%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B) | `string` | `*` | +| uploadIcon | uploadRegion <a href="#/zh-CN/icon">Icon Name</a> | `React.ReactNode` | `-` | | deleteIcon | Delete the icon name of the region | `React.ReactNode` | `-` | | uploadLabel | Text below the image in the upload area | `React. | multiple | Whether to support file multi-selection |`boolean`|`false`| | disabled | Whether to disable file uploading |`boolean`|`false`| -| beforeUpload | The beforeUpload function needs to return a`Promise`object |`(file: File[]) => Promise<File[] \| boolean>`|`-`| -| beforeDelete | Callback when deleting a file, does not remove it if the return value is false. Supports returning a`Promise`object, which is not removed when resolve(false) or reject |`(file: FileItem, files: FileItem[]) => boolean`|`-`| -| onOversize | Triggered when file size exceeds limit |`(file: File[]) => void`|`-`| +| beforeUpload | The beforeUpload function needs to return a`Promise`object |```(file: File[]) => Promise<File[] \| boolean>```|`-`| +| beforeDelete | Callback when deleting a file, does not remove it if the return value is false. Supports returning a`Promise`object, which is not removed when resolve(false) or reject |```(file: FileItem, files: FileItem[]) => boolean```|`-`| +| onOversize | Triggered when file size exceeds limit |```(file: File[]) => void```|`-`| | onOverCount | Triggered when the number of files exceeds the limit |`(count: number) => void`|`-`| -| onChange | Triggered when the list of uploaded files changes |`(files: FileItem[]) => void`|`-`| -| onDelete | Triggered when clicked to delete a file |`(file: FileItem, files: FileItem[]) => void`|`-`| -| onFileItemClick | Triggered when a file is uploaded successfully |`(file: FileItem, index: number) => void`|`-`| -| onUploadQueueChange | Triggered when the image upload queue changes |`(tasks: FileItem[]) => void`|`-` | +| onChange | Triggered when the list of uploaded files changes |```(files: FileItem[]) => void```|`-`| +| onDelete | Triggered when clicked to delete a file |```(file: FileItem, files: FileItem[]) => void```|`-`| +| onFileItemClick | Triggered when a file is uploaded successfully |```(file: FileItem, index: number) => void```|`-`| +| onUploadQueueChange | Triggered when the image upload queue changes |```(tasks: FileItem[]) => void```|`-` | > Note: accept, capture and multiple are the native attributes of the browser input tag, the support for these attributes varies among mobile models, so there may be some compatibility issues under different models and WebViews. diff --git a/src/sites/assets/styles/variables.scss b/src/sites/assets/styles/variables.scss index 1ff4609e4c..02a12925ca 100644 --- a/src/sites/assets/styles/variables.scss +++ b/src/sites/assets/styles/variables.scss @@ -26,7 +26,7 @@ $theme-red-actice: #fff; $theme-red-select-border: #f0f2f5; $theme-red-select-word: #666; $theme-red-select-bg: #fff; -$theme-red-header-bg: url('@/assets/images/header-bg.png'); +$theme-red-header-bg: url('@/sites/assets/images/header-bg.png'); $theme-red-footer-word1: #1a1a1a; $theme-red-footer-word2: #666; $theme-red-footer-word3: #1d1d21; diff --git a/src/sites/config/env.ts b/src/sites/config/env.ts index 930aa30c2c..3a2a1ebaea 100644 --- a/src/sites/config/env.ts +++ b/src/sites/config/env.ts @@ -12,7 +12,7 @@ type EnvConfig = { const config: EnvConfig = { baseUrl: '', - isPrd: true // 是否为线上 + isPrd: true, // 是否为线上 }; switch ((import.meta as any).env.MODE) { case 'development': diff --git a/src/sites/doc/components/demo-preview/index.ts b/src/sites/doc/components/demo-preview/index.ts deleted file mode 100644 index 584a5be520..0000000000 --- a/src/sites/doc/components/demo-preview/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import DemoPreview from '@/sites/doc/components/demo-preview/demo-preview' - -export default DemoPreview diff --git a/src/sites/doc/components/header/index.ts b/src/sites/doc/components/header/index.ts deleted file mode 100644 index daa1dc13fe..0000000000 --- a/src/sites/doc/components/header/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -import Header from '@/sites/doc/components/header/header' -export default Header diff --git a/src/sites/doc/components/nav/index.ts b/src/sites/doc/components/nav/index.ts deleted file mode 100644 index 01ec18ad30..0000000000 --- a/src/sites/doc/components/nav/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import Nav from '@/sites/doc/components/nav/nav' - -export default Nav diff --git a/src/sites/doc/App.scss b/src/sites/sites-react/doc/App.scss similarity index 100% rename from src/sites/doc/App.scss rename to src/sites/sites-react/doc/App.scss diff --git a/src/sites/doc/App.tsx b/src/sites/sites-react/doc/App.tsx similarity index 92% rename from src/sites/doc/App.tsx rename to src/sites/sites-react/doc/App.tsx index a2be6f8ca0..906fa4d98b 100644 --- a/src/sites/doc/App.tsx +++ b/src/sites/sites-react/doc/App.tsx @@ -3,11 +3,11 @@ import { HashRouter, Routes, Route, useLocation } from 'react-router-dom' import { MDXProvider } from '@mdx-js/react' import './App.scss' import APPContext from './context' -import Nav from '@/sites/doc/components/nav' -import Header from '@/sites/doc/components/header' -import DemoPreview from '@/sites/doc/components/demo-preview' -import Issue from '@/sites/doc/components/issue' -import { getComponentName } from '@/sites/assets/util' +import Nav from '../doc/components/nav' +import Header from '../doc/components/header' +import DemoPreview from '../doc/components/demo-preview' +import Issue from '..//doc/components/issue' +import { getComponentName } from '../../assets/util' import { routes as routers, guideEnRoutes, @@ -17,7 +17,7 @@ import { } from './router' import loadable from '@loadable/component' import CodeBlock from './components/demoblock/codeblock' -import { BackTop } from '../../packages/backtop/backtop' +import { BackTop } from '../../../packages/backtop/backtop' const Title = () => { let location = useLocation() @@ -92,6 +92,7 @@ const Content = () => { ...guideTaroRoutes, ...guideEnTaroRoutes, ] + console.log(guideEnRoutes) return ( <div className="doc-content"> {!isGuide && ( diff --git a/src/sites/doc/components/demo-preview/demo-preview.scss b/src/sites/sites-react/doc/components/demo-preview/demo-preview.scss similarity index 100% rename from src/sites/doc/components/demo-preview/demo-preview.scss rename to src/sites/sites-react/doc/components/demo-preview/demo-preview.scss diff --git a/src/sites/doc/components/demo-preview/demo-preview.tsx b/src/sites/sites-react/doc/components/demo-preview/demo-preview.tsx similarity index 100% rename from src/sites/doc/components/demo-preview/demo-preview.tsx rename to src/sites/sites-react/doc/components/demo-preview/demo-preview.tsx diff --git a/src/sites/sites-react/doc/components/demo-preview/index.ts b/src/sites/sites-react/doc/components/demo-preview/index.ts new file mode 100644 index 0000000000..750c18144c --- /dev/null +++ b/src/sites/sites-react/doc/components/demo-preview/index.ts @@ -0,0 +1,3 @@ +import DemoPreview from '../../../doc/components/demo-preview/demo-preview' + +export default DemoPreview diff --git a/src/sites/doc/components/demoblock/basedUtil.ts b/src/sites/sites-react/doc/components/demoblock/basedUtil.ts similarity index 100% rename from src/sites/doc/components/demoblock/basedUtil.ts rename to src/sites/sites-react/doc/components/demoblock/basedUtil.ts diff --git a/src/sites/doc/components/demoblock/codeblock.tsx b/src/sites/sites-react/doc/components/demoblock/codeblock.tsx similarity index 100% rename from src/sites/doc/components/demoblock/codeblock.tsx rename to src/sites/sites-react/doc/components/demoblock/codeblock.tsx diff --git a/src/sites/doc/components/demoblock/demoblock.scss b/src/sites/sites-react/doc/components/demoblock/demoblock.scss similarity index 100% rename from src/sites/doc/components/demoblock/demoblock.scss rename to src/sites/sites-react/doc/components/demoblock/demoblock.scss diff --git a/src/sites/doc/components/demoblock/demoblock.tsx b/src/sites/sites-react/doc/components/demoblock/demoblock.tsx similarity index 100% rename from src/sites/doc/components/demoblock/demoblock.tsx rename to src/sites/sites-react/doc/components/demoblock/demoblock.tsx diff --git a/src/sites/doc/components/demoblock/index.ts b/src/sites/sites-react/doc/components/demoblock/index.ts similarity index 100% rename from src/sites/doc/components/demoblock/index.ts rename to src/sites/sites-react/doc/components/demoblock/index.ts diff --git a/src/sites/doc/components/header/header.scss b/src/sites/sites-react/doc/components/header/header.scss similarity index 97% rename from src/sites/doc/components/header/header.scss rename to src/sites/sites-react/doc/components/header/header.scss index e118ab2796..c6d116a3aa 100644 --- a/src/sites/doc/components/header/header.scss +++ b/src/sites/sites-react/doc/components/header/header.scss @@ -130,7 +130,7 @@ bottom: 3px; left: 50%; margin-left: -17.5px; - background: url('../../../assets/images/item-active.png'); + background: url('../../../../assets/images/item-active.png'); } } &:last-of-type { @@ -143,12 +143,12 @@ height: 26px; vertical-align: middle; background-repeat: no-repeat; - background-image: url('../../../assets/images/icon-user.png'); + background-image: url('../../../../assets/images/icon-user.png'); background-size: 26px; &.gitee { margin-left: 8px; - background-image: url('../../../assets/images/icon-gitee.png'); + background-image: url('../../../../assets/images/icon-gitee.png'); } } } @@ -207,10 +207,10 @@ .header { &-logo { .logo-link { - background: url('../../../assets/images/logo-header-white.png') + background: url('../../../../assets/images/logo-header-white.png') no-repeat center/100%; &.react { - background: url('../../../assets/images/logo-header-white-react.png') + background: url('../../../../assets/images/logo-header-white-react.png') no-repeat center/100%; } &.jdb { @@ -268,12 +268,12 @@ position: relative; &.select-down { .header-select-hd { - background-image: url('../../../assets/images/icon-select-white-down.png'); + background-image: url('../../../../assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../../assets/images/icon-select-white-up.png'); + background-image: url('../../../../assets/images/icon-select-white-up.png'); } } .guild-line { @@ -673,7 +673,7 @@ &-box { &.select-down { .header-select-hd { - background-image: url('../../../assets/images/icon-select-white-down.png'); + background-image: url('../../../../assets/images/icon-select-white-down.png'); } } &.select-up { diff --git a/src/sites/doc/components/header/header.tsx b/src/sites/sites-react/doc/components/header/header.tsx similarity index 99% rename from src/sites/doc/components/header/header.tsx rename to src/sites/sites-react/doc/components/header/header.tsx index a0bce3b0ad..c4519386c3 100644 --- a/src/sites/doc/components/header/header.tsx +++ b/src/sites/sites-react/doc/components/header/header.tsx @@ -1,13 +1,12 @@ import React, { useEffect, useState } from 'react' // @ts-ignore import { version } from '/package.json' -import config from '../../../config/env' +import config from '../../../../config/env' import './header.scss' import { useNavigate, useLocation } from 'react-router-dom' import { CSSTransition } from 'react-transition-group' import Search from '../search/search' import { - SiteVueTaro, SiteReactTaro, header, versions, @@ -20,7 +19,7 @@ import { moreGuide, businessGuide, products, -} from '../../../config/index' +} from '../../../../config/index' const Header = () => { const navigate = useNavigate() const location = useLocation() diff --git a/src/sites/sites-react/doc/components/header/index.ts b/src/sites/sites-react/doc/components/header/index.ts new file mode 100644 index 0000000000..989f813ead --- /dev/null +++ b/src/sites/sites-react/doc/components/header/index.ts @@ -0,0 +1,2 @@ +import Header from '../../../doc/components/header/header' +export default Header diff --git a/src/sites/doc/components/issue/index.ts b/src/sites/sites-react/doc/components/issue/index.ts similarity index 100% rename from src/sites/doc/components/issue/index.ts rename to src/sites/sites-react/doc/components/issue/index.ts diff --git a/src/sites/doc/components/issue/issue.scss b/src/sites/sites-react/doc/components/issue/issue.scss similarity index 100% rename from src/sites/doc/components/issue/issue.scss rename to src/sites/sites-react/doc/components/issue/issue.scss diff --git a/src/sites/doc/components/issue/issue.tsx b/src/sites/sites-react/doc/components/issue/issue.tsx similarity index 100% rename from src/sites/doc/components/issue/issue.tsx rename to src/sites/sites-react/doc/components/issue/issue.tsx diff --git a/src/sites/sites-react/doc/components/nav/index.ts b/src/sites/sites-react/doc/components/nav/index.ts new file mode 100644 index 0000000000..99e5eeb8a4 --- /dev/null +++ b/src/sites/sites-react/doc/components/nav/index.ts @@ -0,0 +1,3 @@ +import Nav from '../../../doc/components/nav/nav' + +export default Nav diff --git a/src/sites/doc/components/nav/nav.scss b/src/sites/sites-react/doc/components/nav/nav.scss similarity index 100% rename from src/sites/doc/components/nav/nav.scss rename to src/sites/sites-react/doc/components/nav/nav.scss diff --git a/src/sites/doc/components/nav/nav.tsx b/src/sites/sites-react/doc/components/nav/nav.tsx similarity index 100% rename from src/sites/doc/components/nav/nav.tsx rename to src/sites/sites-react/doc/components/nav/nav.tsx diff --git a/src/sites/doc/components/search/search.scss b/src/sites/sites-react/doc/components/search/search.scss similarity index 94% rename from src/sites/doc/components/search/search.scss rename to src/sites/sites-react/doc/components/search/search.scss index dc27b2f741..08d5cce62d 100644 --- a/src/sites/doc/components/search/search.scss +++ b/src/sites/sites-react/doc/components/search/search.scss @@ -9,7 +9,7 @@ font-size: 14px; vertical-align: middle; background-color: transparent; - background-image: url('../../../assets/images/input-search.png'); + background-image: url('../../../../assets/images/input-search.png'); background-repeat: no-repeat; font-size: 14px; color: #fff; diff --git a/src/sites/doc/components/search/search.tsx b/src/sites/sites-react/doc/components/search/search.tsx similarity index 98% rename from src/sites/doc/components/search/search.tsx rename to src/sites/sites-react/doc/components/search/search.tsx index 4291bac671..4a7833504d 100644 --- a/src/sites/doc/components/search/search.tsx +++ b/src/sites/sites-react/doc/components/search/search.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState } from 'react' import './search.scss' import { Link, useNavigate } from 'react-router-dom' -import { nav } from '../../../config' +import { nav } from '../../../../config' export default function Search() { const navList = nav.flatMap((item) => item.packages).filter((i) => i.show) const [searchVal, setSearchVal] = useState('') diff --git a/src/sites/doc/context.ts b/src/sites/sites-react/doc/context.ts similarity index 100% rename from src/sites/doc/context.ts rename to src/sites/sites-react/doc/context.ts diff --git a/src/sites/sites-react/doc/docs.taro.ts b/src/sites/sites-react/doc/docs.taro.ts new file mode 100644 index 0000000000..0e866e4365 --- /dev/null +++ b/src/sites/sites-react/doc/docs.taro.ts @@ -0,0 +1,363 @@ +import ButtonzhTW from '@/packages/button/doc.zh-TW.md?raw'; +import Buttontaro from '@/packages/button/doc.taro.md?raw'; +import ButtonenUS from '@/packages/button/doc.en-US.md?raw'; +import Button from '@/packages/button/doc.md?raw' +import CellzhTW from '@/packages/cell/doc.zh-TW.md?raw'; +import Celltaro from '@/packages/cell/doc.taro.md?raw'; +import CellenUS from '@/packages/cell/doc.en-US.md?raw'; +import Cell from '@/packages/cell/doc.md?raw' +import CellGroup from '@/packages/cellgroup/doc.md?raw' +import ConfigProviderzhTW from '@/packages/configprovider/doc.zh-TW.md?raw'; +import ConfigProvidertaro from '@/packages/configprovider/doc.taro.md?raw'; +import ConfigProviderenUS from '@/packages/configprovider/doc.en-US.md?raw'; +import ConfigProvider from '@/packages/configprovider/doc.md?raw' +import ImagezhTW from '@/packages/image/doc.zh-TW.md?raw'; +import Imagetaro from '@/packages/image/doc.taro.md?raw'; +import ImageenUS from '@/packages/image/doc.en-US.md?raw'; +import Image from '@/packages/image/doc.md?raw' +import OverlayzhTW from '@/packages/overlay/doc.zh-TW.md?raw'; +import Overlaytaro from '@/packages/overlay/doc.taro.md?raw'; +import OverlayenUS from '@/packages/overlay/doc.en-US.md?raw'; +import Overlay from '@/packages/overlay/doc.md?raw' +import Col from '@/packages/col/doc.md?raw' +import DividerzhTW from '@/packages/divider/doc.zh-TW.md?raw'; +import Dividertaro from '@/packages/divider/doc.taro.md?raw'; +import DividerenUS from '@/packages/divider/doc.en-US.md?raw'; +import Divider from '@/packages/divider/doc.md?raw' +import GridzhTW from '@/packages/grid/doc.zh-TW.md?raw'; +import Gridtaro from '@/packages/grid/doc.taro.md?raw'; +import GridenUS from '@/packages/grid/doc.en-US.md?raw'; +import Grid from '@/packages/grid/doc.md?raw' +import GridItem from '@/packages/griditem/doc.md?raw' +import LayoutzhTW from '@/packages/layout/doc.zh-TW.md?raw'; +import Layouttaro from '@/packages/layout/doc.taro.md?raw'; +import LayoutenUS from '@/packages/layout/doc.en-US.md?raw'; +import Layout from '@/packages/layout/doc.md?raw' +import Row from '@/packages/row/doc.md?raw' +import SpacezhTW from '@/packages/space/doc.zh-TW.md?raw'; +import Spacetaro from '@/packages/space/doc.taro.md?raw'; +import SpaceenUS from '@/packages/space/doc.en-US.md?raw'; +import Space from '@/packages/space/doc.md?raw' +import StickyzhTW from '@/packages/sticky/doc.zh-TW.md?raw'; +import Stickytaro from '@/packages/sticky/doc.taro.md?raw'; +import StickyenUS from '@/packages/sticky/doc.en-US.md?raw'; +import Sticky from '@/packages/sticky/doc.md?raw' +import SafeAreazhTW from '@/packages/safearea/doc.zh-TW.md?raw'; +import SafeAreataro from '@/packages/safearea/doc.taro.md?raw'; +import SafeAreaenUS from '@/packages/safearea/doc.en-US.md?raw'; +import SafeArea from '@/packages/safearea/doc.md?raw' +import BackTopzhTW from '@/packages/backtop/doc.zh-TW.md?raw'; +import BackToptaro from '@/packages/backtop/doc.taro.md?raw'; +import BackTopenUS from '@/packages/backtop/doc.en-US.md?raw'; +import BackTop from '@/packages/backtop/doc.md?raw' +import ElevatorzhTW from '@/packages/elevator/doc.zh-TW.md?raw'; +import Elevatortaro from '@/packages/elevator/doc.taro.md?raw'; +import ElevatorenUS from '@/packages/elevator/doc.en-US.md?raw'; +import Elevator from '@/packages/elevator/doc.md?raw' +import FixedNavzhTW from '@/packages/fixednav/doc.zh-TW.md?raw'; +import FixedNavtaro from '@/packages/fixednav/doc.taro.md?raw'; +import FixedNavenUS from '@/packages/fixednav/doc.en-US.md?raw'; +import FixedNav from '@/packages/fixednav/doc.md?raw' +import HoverButtonzhTW from '@/packages/hoverbutton/doc.zh-TW.md?raw'; +import HoverButtontaro from '@/packages/hoverbutton/doc.taro.md?raw'; +import HoverButtonenUS from '@/packages/hoverbutton/doc.en-US.md?raw'; +import HoverButton from '@/packages/hoverbutton/doc.md?raw' +import HoverButtonItem from '@/packages/hoverbuttonitem/doc.md?raw' +import NavBarzhTW from '@/packages/navbar/doc.zh-TW.md?raw'; +import NavBartaro from '@/packages/navbar/doc.taro.md?raw'; +import NavBarenUS from '@/packages/navbar/doc.en-US.md?raw'; +import NavBar from '@/packages/navbar/doc.md?raw' +import SideNavBarzhTW from '@/packages/sidenavbar/doc.zh-TW.md?raw'; +import SideNavBartaro from '@/packages/sidenavbar/doc.taro.md?raw'; +import SideNavBarenUS from '@/packages/sidenavbar/doc.en-US.md?raw'; +import SideNavBar from '@/packages/sidenavbar/doc.md?raw' +import SideBarzhTW from '@/packages/sidebar/doc.zh-TW.md?raw'; +import SideBartaro from '@/packages/sidebar/doc.taro.md?raw'; +import SideBarenUS from '@/packages/sidebar/doc.en-US.md?raw'; +import SideBar from '@/packages/sidebar/doc.md?raw' +import SideBarItem from '@/packages/sidebaritem/doc.md?raw' +import SideNavBarItem from '@/packages/sidenavbaritem/doc.md?raw' +import SubSideNavBar from '@/packages/subsidenavbar/doc.md?raw' +import TabbarzhTW from '@/packages/tabbar/doc.zh-TW.md?raw'; +import Tabbartaro from '@/packages/tabbar/doc.taro.md?raw'; +import TabbarenUS from '@/packages/tabbar/doc.en-US.md?raw'; +import Tabbar from '@/packages/tabbar/doc.md?raw' +import TabbarItem from '@/packages/tabbaritem/doc.md?raw' +import TabPane from '@/packages/tabpane/doc.md?raw' +import TabszhTW from '@/packages/tabs/doc.zh-TW.md?raw'; +import Tabstaro from '@/packages/tabs/doc.taro.md?raw'; +import TabsenUS from '@/packages/tabs/doc.en-US.md?raw'; +import Tabs from '@/packages/tabs/doc.md?raw' +import AddresszhTW from '@/packages/address/doc.zh-TW.md?raw'; +import Addresstaro from '@/packages/address/doc.taro.md?raw'; +import AddressenUS from '@/packages/address/doc.en-US.md?raw'; +import Address from '@/packages/address/doc.md?raw' +import CalendarzhTW from '@/packages/calendar/doc.zh-TW.md?raw'; +import Calendartaro from '@/packages/calendar/doc.taro.md?raw'; +import CalendarenUS from '@/packages/calendar/doc.en-US.md?raw'; +import Calendar from '@/packages/calendar/doc.md?raw' +import CalendarItem from '@/packages/calendaritem/doc.md?raw' +import CalendarCardzhTW from '@/packages/calendarcard/doc.zh-TW.md?raw'; +import CalendarCardtaro from '@/packages/calendarcard/doc.taro.md?raw'; +import CalendarCardenUS from '@/packages/calendarcard/doc.en-US.md?raw'; +import CalendarCard from '@/packages/calendarcard/doc.md?raw' +import CascaderzhTW from '@/packages/cascader/doc.zh-TW.md?raw'; +import Cascadertaro from '@/packages/cascader/doc.taro.md?raw'; +import CascaderenUS from '@/packages/cascader/doc.en-US.md?raw'; +import Cascader from '@/packages/cascader/doc.md?raw' +import CheckboxzhTW from '@/packages/checkbox/doc.zh-TW.md?raw'; +import Checkboxtaro from '@/packages/checkbox/doc.taro.md?raw'; +import CheckboxenUS from '@/packages/checkbox/doc.en-US.md?raw'; +import Checkbox from '@/packages/checkbox/doc.md?raw' +import CheckboxGroup from '@/packages/checkboxgroup/doc.md?raw' +import DatePickerzhTW from '@/packages/datepicker/doc.zh-TW.md?raw'; +import DatePickertaro from '@/packages/datepicker/doc.taro.md?raw'; +import DatePickerenUS from '@/packages/datepicker/doc.en-US.md?raw'; +import DatePicker from '@/packages/datepicker/doc.md?raw' +import FormzhTW from '@/packages/form/doc.zh-TW.md?raw'; +import Formtaro from '@/packages/form/doc.taro.md?raw'; +import FormenUS from '@/packages/form/doc.en-US.md?raw'; +import Form from '@/packages/form/doc.md?raw' +import FormItem from '@/packages/formitem/doc.md?raw' +import InputzhTW from '@/packages/input/doc.zh-TW.md?raw'; +import Inputtaro from '@/packages/input/doc.taro.md?raw'; +import InputenUS from '@/packages/input/doc.en-US.md?raw'; +import Input from '@/packages/input/doc.md?raw' +import InputNumberzhTW from '@/packages/inputnumber/doc.zh-TW.md?raw'; +import InputNumbertaro from '@/packages/inputnumber/doc.taro.md?raw'; +import InputNumberenUS from '@/packages/inputnumber/doc.en-US.md?raw'; +import InputNumber from '@/packages/inputnumber/doc.md?raw' +import MenuzhTW from '@/packages/menu/doc.zh-TW.md?raw'; +import Menutaro from '@/packages/menu/doc.taro.md?raw'; +import MenuenUS from '@/packages/menu/doc.en-US.md?raw'; +import Menu from '@/packages/menu/doc.md?raw' +import MenuItem from '@/packages/menuitem/doc.md?raw' +import NumberKeyboardzhTW from '@/packages/numberkeyboard/doc.zh-TW.md?raw'; +import NumberKeyboardtaro from '@/packages/numberkeyboard/doc.taro.md?raw'; +import NumberKeyboardenUS from '@/packages/numberkeyboard/doc.en-US.md?raw'; +import NumberKeyboard from '@/packages/numberkeyboard/doc.md?raw' +import PickerzhTW from '@/packages/picker/doc.zh-TW.md?raw'; +import Pickertaro from '@/packages/picker/doc.taro.md?raw'; +import PickerenUS from '@/packages/picker/doc.en-US.md?raw'; +import Picker from '@/packages/picker/doc.md?raw' +import RadiozhTW from '@/packages/radio/doc.zh-TW.md?raw'; +import Radiotaro from '@/packages/radio/doc.taro.md?raw'; +import RadioenUS from '@/packages/radio/doc.en-US.md?raw'; +import Radio from '@/packages/radio/doc.md?raw' +import RadioGroup from '@/packages/radiogroup/doc.md?raw' +import RangezhTW from '@/packages/range/doc.zh-TW.md?raw'; +import Rangetaro from '@/packages/range/doc.taro.md?raw'; +import RangeenUS from '@/packages/range/doc.en-US.md?raw'; +import Range from '@/packages/range/doc.md?raw' +import RatezhTW from '@/packages/rate/doc.zh-TW.md?raw'; +import Ratetaro from '@/packages/rate/doc.taro.md?raw'; +import RateenUS from '@/packages/rate/doc.en-US.md?raw'; +import Rate from '@/packages/rate/doc.md?raw' +import SearchBarzhTW from '@/packages/searchbar/doc.zh-TW.md?raw'; +import SearchBartaro from '@/packages/searchbar/doc.taro.md?raw'; +import SearchBarenUS from '@/packages/searchbar/doc.en-US.md?raw'; +import SearchBar from '@/packages/searchbar/doc.md?raw' +import ShortPasswordzhTW from '@/packages/shortpassword/doc.zh-TW.md?raw'; +import ShortPasswordtaro from '@/packages/shortpassword/doc.taro.md?raw'; +import ShortPasswordenUS from '@/packages/shortpassword/doc.en-US.md?raw'; +import ShortPassword from '@/packages/shortpassword/doc.md?raw' +import SignaturezhTW from '@/packages/signature/doc.zh-TW.md?raw'; +import Signaturetaro from '@/packages/signature/doc.taro.md?raw'; +import SignatureenUS from '@/packages/signature/doc.en-US.md?raw'; +import Signature from '@/packages/signature/doc.md?raw' +import SwitchzhTW from '@/packages/switch/doc.zh-TW.md?raw'; +import Switchtaro from '@/packages/switch/doc.taro.md?raw'; +import SwitchenUS from '@/packages/switch/doc.en-US.md?raw'; +import Switch from '@/packages/switch/doc.md?raw' +import TextAreazhTW from '@/packages/textarea/doc.zh-TW.md?raw'; +import TextAreataro from '@/packages/textarea/doc.taro.md?raw'; +import TextAreaenUS from '@/packages/textarea/doc.en-US.md?raw'; +import TextArea from '@/packages/textarea/doc.md?raw' +import UploaderzhTW from '@/packages/uploader/doc.zh-TW.md?raw'; +import Uploadertaro from '@/packages/uploader/doc.taro.md?raw'; +import UploaderenUS from '@/packages/uploader/doc.en-US.md?raw'; +import Uploader from '@/packages/uploader/doc.md?raw' +import ActionSheetzhTW from '@/packages/actionsheet/doc.zh-TW.md?raw'; +import ActionSheettaro from '@/packages/actionsheet/doc.taro.md?raw'; +import ActionSheetenUS from '@/packages/actionsheet/doc.en-US.md?raw'; +import ActionSheet from '@/packages/actionsheet/doc.md?raw' +import BadgezhTW from '@/packages/badge/doc.zh-TW.md?raw'; +import Badgetaro from '@/packages/badge/doc.taro.md?raw'; +import BadgeenUS from '@/packages/badge/doc.en-US.md?raw'; +import Badge from '@/packages/badge/doc.md?raw' +import DialogzhTW from '@/packages/dialog/doc.zh-TW.md?raw'; +import Dialogtaro from '@/packages/dialog/doc.taro.md?raw'; +import DialogenUS from '@/packages/dialog/doc.en-US.md?raw'; +import Dialog from '@/packages/dialog/doc.md?raw' +import DragzhTW from '@/packages/drag/doc.zh-TW.md?raw'; +import Dragtaro from '@/packages/drag/doc.taro.md?raw'; +import DragenUS from '@/packages/drag/doc.en-US.md?raw'; +import Drag from '@/packages/drag/doc.md?raw' +import EmptyzhTW from '@/packages/empty/doc.zh-TW.md?raw'; +import Emptytaro from '@/packages/empty/doc.taro.md?raw'; +import EmptyenUS from '@/packages/empty/doc.en-US.md?raw'; +import Empty from '@/packages/empty/doc.md?raw' +import ResultPagezhTW from '@/packages/resultpage/doc.zh-TW.md?raw'; +import ResultPagetaro from '@/packages/resultpage/doc.taro.md?raw'; +import ResultPageenUS from '@/packages/resultpage/doc.en-US.md?raw'; +import ResultPage from '@/packages/resultpage/doc.md?raw' +import InfiniteLoadingzhTW from '@/packages/infiniteloading/doc.zh-TW.md?raw'; +import InfiniteLoadingtaro from '@/packages/infiniteloading/doc.taro.md?raw'; +import InfiniteLoadingenUS from '@/packages/infiniteloading/doc.en-US.md?raw'; +import InfiniteLoading from '@/packages/infiniteloading/doc.md?raw' +import LoadingzhTW from '@/packages/loading/doc.zh-TW.md?raw'; +import Loadingtaro from '@/packages/loading/doc.taro.md?raw'; +import LoadingenUS from '@/packages/loading/doc.en-US.md?raw'; +import Loading from '@/packages/loading/doc.md?raw' +import NoticeBarzhTW from '@/packages/noticebar/doc.zh-TW.md?raw'; +import NoticeBartaro from '@/packages/noticebar/doc.taro.md?raw'; +import NoticeBarenUS from '@/packages/noticebar/doc.en-US.md?raw'; +import NoticeBar from '@/packages/noticebar/doc.md?raw' +import NotifyzhTW from '@/packages/notify/doc.zh-TW.md?raw'; +import Notifytaro from '@/packages/notify/doc.taro.md?raw'; +import NotifyenUS from '@/packages/notify/doc.en-US.md?raw'; +import Notify from '@/packages/notify/doc.md?raw' +import PopoverzhTW from '@/packages/popover/doc.zh-TW.md?raw'; +import Popovertaro from '@/packages/popover/doc.taro.md?raw'; +import PopoverenUS from '@/packages/popover/doc.en-US.md?raw'; +import Popover from '@/packages/popover/doc.md?raw' +import PopupzhTW from '@/packages/popup/doc.zh-TW.md?raw'; +import Popuptaro from '@/packages/popup/doc.taro.md?raw'; +import PopupenUS from '@/packages/popup/doc.en-US.md?raw'; +import Popup from '@/packages/popup/doc.md?raw' +import PullToRefreshzhTW from '@/packages/pulltorefresh/doc.zh-TW.md?raw'; +import PullToRefreshtaro from '@/packages/pulltorefresh/doc.taro.md?raw'; +import PullToRefreshenUS from '@/packages/pulltorefresh/doc.en-US.md?raw'; +import PullToRefresh from '@/packages/pulltorefresh/doc.md?raw' +import SkeletonzhTW from '@/packages/skeleton/doc.zh-TW.md?raw'; +import Skeletontaro from '@/packages/skeleton/doc.taro.md?raw'; +import SkeletonenUS from '@/packages/skeleton/doc.en-US.md?raw'; +import Skeleton from '@/packages/skeleton/doc.md?raw' +import SwipezhTW from '@/packages/swipe/doc.zh-TW.md?raw'; +import Swipetaro from '@/packages/swipe/doc.taro.md?raw'; +import SwipeenUS from '@/packages/swipe/doc.en-US.md?raw'; +import Swipe from '@/packages/swipe/doc.md?raw' +import ToastzhTW from '@/packages/toast/doc.zh-TW.md?raw'; +import Toasttaro from '@/packages/toast/doc.taro.md?raw'; +import ToastenUS from '@/packages/toast/doc.en-US.md?raw'; +import Toast from '@/packages/toast/doc.md?raw' +import AnimatezhTW from '@/packages/animate/doc.zh-TW.md?raw'; +import Animatetaro from '@/packages/animate/doc.taro.md?raw'; +import AnimateenUS from '@/packages/animate/doc.en-US.md?raw'; +import Animate from '@/packages/animate/doc.md?raw' +import AnimatingNumberszhTW from '@/packages/animatingnumbers/doc.zh-TW.md?raw'; +import AnimatingNumberstaro from '@/packages/animatingnumbers/doc.taro.md?raw'; +import AnimatingNumbersenUS from '@/packages/animatingnumbers/doc.en-US.md?raw'; +import AnimatingNumbers from '@/packages/animatingnumbers/doc.md?raw' +import AudiozhTW from '@/packages/audio/doc.zh-TW.md?raw'; +import Audiotaro from '@/packages/audio/doc.taro.md?raw'; +import AudioenUS from '@/packages/audio/doc.en-US.md?raw'; +import Audio from '@/packages/audio/doc.md?raw' +import AvatarzhTW from '@/packages/avatar/doc.zh-TW.md?raw'; +import Avatartaro from '@/packages/avatar/doc.taro.md?raw'; +import AvatarenUS from '@/packages/avatar/doc.en-US.md?raw'; +import Avatar from '@/packages/avatar/doc.md?raw' +import AvatarGroup from '@/packages/avatargroup/doc.md?raw' +import CircleProgresszhTW from '@/packages/circleprogress/doc.zh-TW.md?raw'; +import CircleProgresstaro from '@/packages/circleprogress/doc.taro.md?raw'; +import CircleProgressenUS from '@/packages/circleprogress/doc.en-US.md?raw'; +import CircleProgress from '@/packages/circleprogress/doc.md?raw' +import CollapsezhTW from '@/packages/collapse/doc.zh-TW.md?raw'; +import Collapsetaro from '@/packages/collapse/doc.taro.md?raw'; +import CollapseenUS from '@/packages/collapse/doc.en-US.md?raw'; +import Collapse from '@/packages/collapse/doc.md?raw' +import CollapseItem from '@/packages/collapseitem/doc.md?raw' +import CountDownzhTW from '@/packages/countdown/doc.zh-TW.md?raw'; +import CountDowntaro from '@/packages/countdown/doc.taro.md?raw'; +import CountDownenUS from '@/packages/countdown/doc.en-US.md?raw'; +import CountDown from '@/packages/countdown/doc.md?raw' +import EllipsiszhTW from '@/packages/ellipsis/doc.zh-TW.md?raw'; +import Ellipsistaro from '@/packages/ellipsis/doc.taro.md?raw'; +import EllipsisenUS from '@/packages/ellipsis/doc.en-US.md?raw'; +import Ellipsis from '@/packages/ellipsis/doc.md?raw' +import ImagePreviewzhTW from '@/packages/imagepreview/doc.zh-TW.md?raw'; +import ImagePreviewtaro from '@/packages/imagepreview/doc.taro.md?raw'; +import ImagePreviewenUS from '@/packages/imagepreview/doc.en-US.md?raw'; +import ImagePreview from '@/packages/imagepreview/doc.md?raw' +import IndicatorzhTW from '@/packages/indicator/doc.zh-TW.md?raw'; +import Indicatortaro from '@/packages/indicator/doc.taro.md?raw'; +import IndicatorenUS from '@/packages/indicator/doc.en-US.md?raw'; +import Indicator from '@/packages/indicator/doc.md?raw' +import LottiezhTW from '@/packages/lottie/doc.zh-TW.md?raw'; +import Lottietaro from '@/packages/lottie/doc.taro.md?raw'; +import LottieenUS from '@/packages/lottie/doc.en-US.md?raw'; +import Lottie from '@/packages/lottie/doc.md?raw' +import PaginationzhTW from '@/packages/pagination/doc.zh-TW.md?raw'; +import Paginationtaro from '@/packages/pagination/doc.taro.md?raw'; +import PaginationenUS from '@/packages/pagination/doc.en-US.md?raw'; +import Pagination from '@/packages/pagination/doc.md?raw' +import SegmentedzhTW from '@/packages/segmented/doc.zh-TW.md?raw'; +import Segmentedtaro from '@/packages/segmented/doc.taro.md?raw'; +import SegmentedenUS from '@/packages/segmented/doc.en-US.md?raw'; +import Segmented from '@/packages/segmented/doc.md?raw' +import PricezhTW from '@/packages/price/doc.zh-TW.md?raw'; +import Pricetaro from '@/packages/price/doc.taro.md?raw'; +import PriceenUS from '@/packages/price/doc.en-US.md?raw'; +import Price from '@/packages/price/doc.md?raw' +import ProgresszhTW from '@/packages/progress/doc.zh-TW.md?raw'; +import Progresstaro from '@/packages/progress/doc.taro.md?raw'; +import ProgressenUS from '@/packages/progress/doc.en-US.md?raw'; +import Progress from '@/packages/progress/doc.md?raw' +import Step from '@/packages/step/doc.md?raw' +import StepszhTW from '@/packages/steps/doc.zh-TW.md?raw'; +import Stepstaro from '@/packages/steps/doc.taro.md?raw'; +import StepsenUS from '@/packages/steps/doc.en-US.md?raw'; +import Steps from '@/packages/steps/doc.md?raw' +import SwiperzhTW from '@/packages/swiper/doc.zh-TW.md?raw'; +import Swipertaro from '@/packages/swiper/doc.taro.md?raw'; +import SwiperenUS from '@/packages/swiper/doc.en-US.md?raw'; +import Swiper from '@/packages/swiper/doc.md?raw' +import SwiperItem from '@/packages/swiperitem/doc.md?raw' +import TablezhTW from '@/packages/table/doc.zh-TW.md?raw'; +import Tabletaro from '@/packages/table/doc.taro.md?raw'; +import TableenUS from '@/packages/table/doc.en-US.md?raw'; +import Table from '@/packages/table/doc.md?raw' +import TagzhTW from '@/packages/tag/doc.zh-TW.md?raw'; +import Tagtaro from '@/packages/tag/doc.taro.md?raw'; +import TagenUS from '@/packages/tag/doc.en-US.md?raw'; +import Tag from '@/packages/tag/doc.md?raw' +import TourzhTW from '@/packages/tour/doc.zh-TW.md?raw'; +import Tourtaro from '@/packages/tour/doc.taro.md?raw'; +import TourenUS from '@/packages/tour/doc.en-US.md?raw'; +import Tour from '@/packages/tour/doc.md?raw' +import VideozhTW from '@/packages/video/doc.zh-TW.md?raw'; +import Videotaro from '@/packages/video/doc.taro.md?raw'; +import VideoenUS from '@/packages/video/doc.en-US.md?raw'; +import Video from '@/packages/video/doc.md?raw' +import VirtualListzhTW from '@/packages/virtuallist/doc.zh-TW.md?raw'; +import VirtualListtaro from '@/packages/virtuallist/doc.taro.md?raw'; +import VirtualListenUS from '@/packages/virtuallist/doc.en-US.md?raw'; +import VirtualList from '@/packages/virtuallist/doc.md?raw' +import BarragezhTW from '@/packages/barrage/doc.zh-TW.md?raw'; +import Barragetaro from '@/packages/barrage/doc.taro.md?raw'; +import BarrageenUS from '@/packages/barrage/doc.en-US.md?raw'; +import Barrage from '@/packages/barrage/doc.md?raw' +import CardzhTW from '@/packages/card/doc.zh-TW.md?raw'; +import Cardtaro from '@/packages/card/doc.taro.md?raw'; +import CardenUS from '@/packages/card/doc.en-US.md?raw'; +import Card from '@/packages/card/doc.md?raw' +import TimeDetail from '@/packages/timedetail/doc.md?raw' +import TimeSelectzhTW from '@/packages/timeselect/doc.zh-TW.md?raw'; +import TimeSelecttaro from '@/packages/timeselect/doc.taro.md?raw'; +import TimeSelectenUS from '@/packages/timeselect/doc.en-US.md?raw'; +import TimeSelect from '@/packages/timeselect/doc.md?raw' +import TrendArrowzhTW from '@/packages/trendarrow/doc.zh-TW.md?raw'; +import TrendArrowtaro from '@/packages/trendarrow/doc.taro.md?raw'; +import TrendArrowenUS from '@/packages/trendarrow/doc.en-US.md?raw'; +import TrendArrow from '@/packages/trendarrow/doc.md?raw' +import WaterMarkzhTW from '@/packages/watermark/doc.zh-TW.md?raw'; +import WaterMarktaro from '@/packages/watermark/doc.taro.md?raw'; +import WaterMarkenUS from '@/packages/watermark/doc.en-US.md?raw'; +import WaterMark from '@/packages/watermark/doc.md?raw' +import AvatarCropperzhTW from '@/packages/avatarcropper/doc.zh-TW.md?raw'; +import AvatarCroppertaro from '@/packages/avatarcropper/doc.taro.md?raw'; +import AvatarCropperenUS from '@/packages/avatarcropper/doc.en-US.md?raw'; +import AvatarCropper from '@/packages/avatarcropper/doc.md?raw' + +export const routers = ['Button','Cell','CellGroup','ConfigProvider','Image','Overlay','Col','Divider','Grid','GridItem','Layout','Row','Space','Sticky','SafeArea','BackTop','Elevator','FixedNav','HoverButton','HoverButtonItem','NavBar','SideNavBar','SideBar','SideBarItem','SideNavBarItem','SubSideNavBar','Tabbar','TabbarItem','TabPane','Tabs','Address','Calendar','CalendarItem','CalendarCard','Cascader','Checkbox','CheckboxGroup','DatePicker','Form','FormItem','Input','InputNumber','Menu','MenuItem','NumberKeyboard','Picker','Radio','RadioGroup','Range','Rate','SearchBar','ShortPassword','Signature','Switch','TextArea','Uploader','ActionSheet','Badge','Dialog','Drag','Empty','ResultPage','InfiniteLoading','Loading','NoticeBar','Notify','Popover','Popup','PullToRefresh','Skeleton','Swipe','Toast','Animate','AnimatingNumbers','Audio','Avatar','AvatarGroup','CircleProgress','Collapse','CollapseItem','CountDown','Ellipsis','ImagePreview','Indicator','Lottie','Pagination','Segmented','Price','Progress','Step','Steps','Swiper','SwiperItem','Table','Tag','Tour','Video','VirtualList','Barrage','Card','TimeDetail','TimeSelect','TrendArrow','WaterMark','AvatarCropper'] +export const raws = {ButtonzhTW,Buttontaro,ButtonenUS,Button,CellzhTW,Celltaro,CellenUS,Cell,CellGroup,ConfigProviderzhTW,ConfigProvidertaro,ConfigProviderenUS,ConfigProvider,ImagezhTW,Imagetaro,ImageenUS,Image,OverlayzhTW,Overlaytaro,OverlayenUS,Overlay,Col,DividerzhTW,Dividertaro,DividerenUS,Divider,GridzhTW,Gridtaro,GridenUS,Grid,GridItem,LayoutzhTW,Layouttaro,LayoutenUS,Layout,Row,SpacezhTW,Spacetaro,SpaceenUS,Space,StickyzhTW,Stickytaro,StickyenUS,Sticky,SafeAreazhTW,SafeAreataro,SafeAreaenUS,SafeArea,BackTopzhTW,BackToptaro,BackTopenUS,BackTop,ElevatorzhTW,Elevatortaro,ElevatorenUS,Elevator,FixedNavzhTW,FixedNavtaro,FixedNavenUS,FixedNav,HoverButtonzhTW,HoverButtontaro,HoverButtonenUS,HoverButton,HoverButtonItem,NavBarzhTW,NavBartaro,NavBarenUS,NavBar,SideNavBarzhTW,SideNavBartaro,SideNavBarenUS,SideNavBar,SideBarzhTW,SideBartaro,SideBarenUS,SideBar,SideBarItem,SideNavBarItem,SubSideNavBar,TabbarzhTW,Tabbartaro,TabbarenUS,Tabbar,TabbarItem,TabPane,TabszhTW,Tabstaro,TabsenUS,Tabs,AddresszhTW,Addresstaro,AddressenUS,Address,CalendarzhTW,Calendartaro,CalendarenUS,Calendar,CalendarItem,CalendarCardzhTW,CalendarCardtaro,CalendarCardenUS,CalendarCard,CascaderzhTW,Cascadertaro,CascaderenUS,Cascader,CheckboxzhTW,Checkboxtaro,CheckboxenUS,Checkbox,CheckboxGroup,DatePickerzhTW,DatePickertaro,DatePickerenUS,DatePicker,FormzhTW,Formtaro,FormenUS,Form,FormItem,InputzhTW,Inputtaro,InputenUS,Input,InputNumberzhTW,InputNumbertaro,InputNumberenUS,InputNumber,MenuzhTW,Menutaro,MenuenUS,Menu,MenuItem,NumberKeyboardzhTW,NumberKeyboardtaro,NumberKeyboardenUS,NumberKeyboard,PickerzhTW,Pickertaro,PickerenUS,Picker,RadiozhTW,Radiotaro,RadioenUS,Radio,RadioGroup,RangezhTW,Rangetaro,RangeenUS,Range,RatezhTW,Ratetaro,RateenUS,Rate,SearchBarzhTW,SearchBartaro,SearchBarenUS,SearchBar,ShortPasswordzhTW,ShortPasswordtaro,ShortPasswordenUS,ShortPassword,SignaturezhTW,Signaturetaro,SignatureenUS,Signature,SwitchzhTW,Switchtaro,SwitchenUS,Switch,TextAreazhTW,TextAreataro,TextAreaenUS,TextArea,UploaderzhTW,Uploadertaro,UploaderenUS,Uploader,ActionSheetzhTW,ActionSheettaro,ActionSheetenUS,ActionSheet,BadgezhTW,Badgetaro,BadgeenUS,Badge,DialogzhTW,Dialogtaro,DialogenUS,Dialog,DragzhTW,Dragtaro,DragenUS,Drag,EmptyzhTW,Emptytaro,EmptyenUS,Empty,ResultPagezhTW,ResultPagetaro,ResultPageenUS,ResultPage,InfiniteLoadingzhTW,InfiniteLoadingtaro,InfiniteLoadingenUS,InfiniteLoading,LoadingzhTW,Loadingtaro,LoadingenUS,Loading,NoticeBarzhTW,NoticeBartaro,NoticeBarenUS,NoticeBar,NotifyzhTW,Notifytaro,NotifyenUS,Notify,PopoverzhTW,Popovertaro,PopoverenUS,Popover,PopupzhTW,Popuptaro,PopupenUS,Popup,PullToRefreshzhTW,PullToRefreshtaro,PullToRefreshenUS,PullToRefresh,SkeletonzhTW,Skeletontaro,SkeletonenUS,Skeleton,SwipezhTW,Swipetaro,SwipeenUS,Swipe,ToastzhTW,Toasttaro,ToastenUS,Toast,AnimatezhTW,Animatetaro,AnimateenUS,Animate,AnimatingNumberszhTW,AnimatingNumberstaro,AnimatingNumbersenUS,AnimatingNumbers,AudiozhTW,Audiotaro,AudioenUS,Audio,AvatarzhTW,Avatartaro,AvatarenUS,Avatar,AvatarGroup,CircleProgresszhTW,CircleProgresstaro,CircleProgressenUS,CircleProgress,CollapsezhTW,Collapsetaro,CollapseenUS,Collapse,CollapseItem,CountDownzhTW,CountDowntaro,CountDownenUS,CountDown,EllipsiszhTW,Ellipsistaro,EllipsisenUS,Ellipsis,ImagePreviewzhTW,ImagePreviewtaro,ImagePreviewenUS,ImagePreview,IndicatorzhTW,Indicatortaro,IndicatorenUS,Indicator,LottiezhTW,Lottietaro,LottieenUS,Lottie,PaginationzhTW,Paginationtaro,PaginationenUS,Pagination,SegmentedzhTW,Segmentedtaro,SegmentedenUS,Segmented,PricezhTW,Pricetaro,PriceenUS,Price,ProgresszhTW,Progresstaro,ProgressenUS,Progress,Step,StepszhTW,Stepstaro,StepsenUS,Steps,SwiperzhTW,Swipertaro,SwiperenUS,Swiper,SwiperItem,TablezhTW,Tabletaro,TableenUS,Table,TagzhTW,Tagtaro,TagenUS,Tag,TourzhTW,Tourtaro,TourenUS,Tour,VideozhTW,Videotaro,VideoenUS,Video,VirtualListzhTW,VirtualListtaro,VirtualListenUS,VirtualList,BarragezhTW,Barragetaro,BarrageenUS,Barrage,CardzhTW,Cardtaro,CardenUS,Card,TimeDetail,TimeSelectzhTW,TimeSelecttaro,TimeSelectenUS,TimeSelect,TrendArrowzhTW,TrendArrowtaro,TrendArrowenUS,TrendArrow,WaterMarkzhTW,WaterMarktaro,WaterMarkenUS,WaterMark,AvatarCropperzhTW,AvatarCroppertaro,AvatarCropperenUS,AvatarCropper} diff --git a/src/sites/sites-react/doc/docs.ts b/src/sites/sites-react/doc/docs.ts new file mode 100644 index 0000000000..ef1bfc3344 --- /dev/null +++ b/src/sites/sites-react/doc/docs.ts @@ -0,0 +1,359 @@ +import ButtonzhTW from '@/packages/button/doc.zh-TW.md?raw'; +import Buttontaro from '@/packages/button/doc.taro.md?raw'; +import ButtonenUS from '@/packages/button/doc.en-US.md?raw'; +import Button from '@/packages/button/doc.md?raw'; +import CellzhTW from '@/packages/cell/doc.zh-TW.md?raw'; +import Celltaro from '@/packages/cell/doc.taro.md?raw'; +import CellenUS from '@/packages/cell/doc.en-US.md?raw'; +import Cell from '@/packages/cell/doc.md?raw'; +import ConfigProviderzhTW from '@/packages/configprovider/doc.zh-TW.md?raw'; +import ConfigProvidertaro from '@/packages/configprovider/doc.taro.md?raw'; +import ConfigProviderenUS from '@/packages/configprovider/doc.en-US.md?raw'; +import ConfigProvider from '@/packages/configprovider/doc.md?raw'; +import ImagezhTW from '@/packages/image/doc.zh-TW.md?raw'; +import Imagetaro from '@/packages/image/doc.taro.md?raw'; +import ImageenUS from '@/packages/image/doc.en-US.md?raw'; +import Image from '@/packages/image/doc.md?raw'; +import OverlayzhTW from '@/packages/overlay/doc.zh-TW.md?raw'; +import Overlaytaro from '@/packages/overlay/doc.taro.md?raw'; +import OverlayenUS from '@/packages/overlay/doc.en-US.md?raw'; +import Overlay from '@/packages/overlay/doc.md?raw'; +import DividerzhTW from '@/packages/divider/doc.zh-TW.md?raw'; +import Dividertaro from '@/packages/divider/doc.taro.md?raw'; +import DividerenUS from '@/packages/divider/doc.en-US.md?raw'; +import Divider from '@/packages/divider/doc.md?raw'; +import GridzhTW from '@/packages/grid/doc.zh-TW.md?raw'; +import Gridtaro from '@/packages/grid/doc.taro.md?raw'; +import GridenUS from '@/packages/grid/doc.en-US.md?raw'; +import Grid from '@/packages/grid/doc.md?raw'; +import LayoutzhTW from '@/packages/layout/doc.zh-TW.md?raw'; +import Layouttaro from '@/packages/layout/doc.taro.md?raw'; +import LayoutenUS from '@/packages/layout/doc.en-US.md?raw'; +import Layout from '@/packages/layout/doc.md?raw'; +import SpacezhTW from '@/packages/space/doc.zh-TW.md?raw'; +import Spacetaro from '@/packages/space/doc.taro.md?raw'; +import SpaceenUS from '@/packages/space/doc.en-US.md?raw'; +import Space from '@/packages/space/doc.md?raw'; +import StickyzhTW from '@/packages/sticky/doc.zh-TW.md?raw'; +import Stickytaro from '@/packages/sticky/doc.taro.md?raw'; +import StickyenUS from '@/packages/sticky/doc.en-US.md?raw'; +import Sticky from '@/packages/sticky/doc.md?raw'; +import SafeAreazhTW from '@/packages/safearea/doc.zh-TW.md?raw'; +import SafeAreataro from '@/packages/safearea/doc.taro.md?raw'; +import SafeAreaenUS from '@/packages/safearea/doc.en-US.md?raw'; +import SafeArea from '@/packages/safearea/doc.md?raw'; +import BackTopzhTW from '@/packages/backtop/doc.zh-TW.md?raw'; +import BackToptaro from '@/packages/backtop/doc.taro.md?raw'; +import BackTopenUS from '@/packages/backtop/doc.en-US.md?raw'; +import BackTop from '@/packages/backtop/doc.md?raw'; +import ElevatorzhTW from '@/packages/elevator/doc.zh-TW.md?raw'; +import Elevatortaro from '@/packages/elevator/doc.taro.md?raw'; +import ElevatorenUS from '@/packages/elevator/doc.en-US.md?raw'; +import Elevator from '@/packages/elevator/doc.md?raw'; +import FixedNavzhTW from '@/packages/fixednav/doc.zh-TW.md?raw'; +import FixedNavtaro from '@/packages/fixednav/doc.taro.md?raw'; +import FixedNavenUS from '@/packages/fixednav/doc.en-US.md?raw'; +import FixedNav from '@/packages/fixednav/doc.md?raw'; +import HoverButtonzhTW from '@/packages/hoverbutton/doc.zh-TW.md?raw'; +import HoverButtontaro from '@/packages/hoverbutton/doc.taro.md?raw'; +import HoverButtonenUS from '@/packages/hoverbutton/doc.en-US.md?raw'; +import HoverButton from '@/packages/hoverbutton/doc.md?raw'; +import NavBarzhTW from '@/packages/navbar/doc.zh-TW.md?raw'; +import NavBartaro from '@/packages/navbar/doc.taro.md?raw'; +import NavBarenUS from '@/packages/navbar/doc.en-US.md?raw'; +import NavBar from '@/packages/navbar/doc.md?raw'; +import SideNavBarzhTW from '@/packages/sidenavbar/doc.zh-TW.md?raw'; +import SideNavBartaro from '@/packages/sidenavbar/doc.taro.md?raw'; +import SideNavBarenUS from '@/packages/sidenavbar/doc.en-US.md?raw'; +import SideNavBar from '@/packages/sidenavbar/doc.md?raw'; +import SideBarzhTW from '@/packages/sidebar/doc.zh-TW.md?raw'; +import SideBartaro from '@/packages/sidebar/doc.taro.md?raw'; +import SideBarenUS from '@/packages/sidebar/doc.en-US.md?raw'; +import SideBar from '@/packages/sidebar/doc.md?raw'; +import TabbarzhTW from '@/packages/tabbar/doc.zh-TW.md?raw'; +import Tabbartaro from '@/packages/tabbar/doc.taro.md?raw'; +import TabbarenUS from '@/packages/tabbar/doc.en-US.md?raw'; +import Tabbar from '@/packages/tabbar/doc.md?raw'; +import TabszhTW from '@/packages/tabs/doc.zh-TW.md?raw'; +import Tabstaro from '@/packages/tabs/doc.taro.md?raw'; +import TabsenUS from '@/packages/tabs/doc.en-US.md?raw'; +import Tabs from '@/packages/tabs/doc.md?raw'; +import AddresszhTW from '@/packages/address/doc.zh-TW.md?raw'; +import Addresstaro from '@/packages/address/doc.taro.md?raw'; +import AddressenUS from '@/packages/address/doc.en-US.md?raw'; +import Address from '@/packages/address/doc.md?raw'; +import CalendarzhTW from '@/packages/calendar/doc.zh-TW.md?raw'; +import Calendartaro from '@/packages/calendar/doc.taro.md?raw'; +import CalendarenUS from '@/packages/calendar/doc.en-US.md?raw'; +import Calendar from '@/packages/calendar/doc.md?raw'; +import CalendarCardzhTW from '@/packages/calendarcard/doc.zh-TW.md?raw'; +import CalendarCardtaro from '@/packages/calendarcard/doc.taro.md?raw'; +import CalendarCardenUS from '@/packages/calendarcard/doc.en-US.md?raw'; +import CalendarCard from '@/packages/calendarcard/doc.md?raw'; +import CascaderzhTW from '@/packages/cascader/doc.zh-TW.md?raw'; +import Cascadertaro from '@/packages/cascader/doc.taro.md?raw'; +import CascaderenUS from '@/packages/cascader/doc.en-US.md?raw'; +import Cascader from '@/packages/cascader/doc.md?raw'; +import CheckboxzhTW from '@/packages/checkbox/doc.zh-TW.md?raw'; +import Checkboxtaro from '@/packages/checkbox/doc.taro.md?raw'; +import CheckboxenUS from '@/packages/checkbox/doc.en-US.md?raw'; +import Checkbox from '@/packages/checkbox/doc.md?raw'; +import DatePickerzhTW from '@/packages/datepicker/doc.zh-TW.md?raw'; +import DatePickertaro from '@/packages/datepicker/doc.taro.md?raw'; +import DatePickerenUS from '@/packages/datepicker/doc.en-US.md?raw'; +import DatePicker from '@/packages/datepicker/doc.md?raw'; +import FormzhTW from '@/packages/form/doc.zh-TW.md?raw'; +import Formtaro from '@/packages/form/doc.taro.md?raw'; +import FormenUS from '@/packages/form/doc.en-US.md?raw'; +import Form from '@/packages/form/doc.md?raw'; +import InputzhTW from '@/packages/input/doc.zh-TW.md?raw'; +import Inputtaro from '@/packages/input/doc.taro.md?raw'; +import InputenUS from '@/packages/input/doc.en-US.md?raw'; +import Input from '@/packages/input/doc.md?raw'; +import InputNumberzhTW from '@/packages/inputnumber/doc.zh-TW.md?raw'; +import InputNumbertaro from '@/packages/inputnumber/doc.taro.md?raw'; +import InputNumberenUS from '@/packages/inputnumber/doc.en-US.md?raw'; +import InputNumber from '@/packages/inputnumber/doc.md?raw'; +import MenuzhTW from '@/packages/menu/doc.zh-TW.md?raw'; +import Menutaro from '@/packages/menu/doc.taro.md?raw'; +import MenuenUS from '@/packages/menu/doc.en-US.md?raw'; +import Menu from '@/packages/menu/doc.md?raw'; +import NumberKeyboardzhTW from '@/packages/numberkeyboard/doc.zh-TW.md?raw'; +import NumberKeyboardtaro from '@/packages/numberkeyboard/doc.taro.md?raw'; +import NumberKeyboardenUS from '@/packages/numberkeyboard/doc.en-US.md?raw'; +import NumberKeyboard from '@/packages/numberkeyboard/doc.md?raw'; +import PickerzhTW from '@/packages/picker/doc.zh-TW.md?raw'; +import Pickertaro from '@/packages/picker/doc.taro.md?raw'; +import PickerenUS from '@/packages/picker/doc.en-US.md?raw'; +import Picker from '@/packages/picker/doc.md?raw'; +import RadiozhTW from '@/packages/radio/doc.zh-TW.md?raw'; +import Radiotaro from '@/packages/radio/doc.taro.md?raw'; +import RadioenUS from '@/packages/radio/doc.en-US.md?raw'; +import Radio from '@/packages/radio/doc.md?raw'; +import RangezhTW from '@/packages/range/doc.zh-TW.md?raw'; +import Rangetaro from '@/packages/range/doc.taro.md?raw'; +import RangeenUS from '@/packages/range/doc.en-US.md?raw'; +import Range from '@/packages/range/doc.md?raw'; +import RatezhTW from '@/packages/rate/doc.zh-TW.md?raw'; +import Ratetaro from '@/packages/rate/doc.taro.md?raw'; +import RateenUS from '@/packages/rate/doc.en-US.md?raw'; +import Rate from '@/packages/rate/doc.md?raw'; +import SearchBarzhTW from '@/packages/searchbar/doc.zh-TW.md?raw'; +import SearchBartaro from '@/packages/searchbar/doc.taro.md?raw'; +import SearchBarenUS from '@/packages/searchbar/doc.en-US.md?raw'; +import SearchBar from '@/packages/searchbar/doc.md?raw'; +import ShortPasswordzhTW from '@/packages/shortpassword/doc.zh-TW.md?raw'; +import ShortPasswordtaro from '@/packages/shortpassword/doc.taro.md?raw'; +import ShortPasswordenUS from '@/packages/shortpassword/doc.en-US.md?raw'; +import ShortPassword from '@/packages/shortpassword/doc.md?raw'; +import SignaturezhTW from '@/packages/signature/doc.zh-TW.md?raw'; +import Signaturetaro from '@/packages/signature/doc.taro.md?raw'; +import SignatureenUS from '@/packages/signature/doc.en-US.md?raw'; +import Signature from '@/packages/signature/doc.md?raw'; +import SwitchzhTW from '@/packages/switch/doc.zh-TW.md?raw'; +import Switchtaro from '@/packages/switch/doc.taro.md?raw'; +import SwitchenUS from '@/packages/switch/doc.en-US.md?raw'; +import Switch from '@/packages/switch/doc.md?raw'; +import TextAreazhTW from '@/packages/textarea/doc.zh-TW.md?raw'; +import TextAreataro from '@/packages/textarea/doc.taro.md?raw'; +import TextAreaenUS from '@/packages/textarea/doc.en-US.md?raw'; +import TextArea from '@/packages/textarea/doc.md?raw'; +import UploaderzhTW from '@/packages/uploader/doc.zh-TW.md?raw'; +import Uploadertaro from '@/packages/uploader/doc.taro.md?raw'; +import UploaderenUS from '@/packages/uploader/doc.en-US.md?raw'; +import Uploader from '@/packages/uploader/doc.md?raw'; +import ActionSheetzhTW from '@/packages/actionsheet/doc.zh-TW.md?raw'; +import ActionSheettaro from '@/packages/actionsheet/doc.taro.md?raw'; +import ActionSheetenUS from '@/packages/actionsheet/doc.en-US.md?raw'; +import ActionSheet from '@/packages/actionsheet/doc.md?raw'; +import BadgezhTW from '@/packages/badge/doc.zh-TW.md?raw'; +import Badgetaro from '@/packages/badge/doc.taro.md?raw'; +import BadgeenUS from '@/packages/badge/doc.en-US.md?raw'; +import Badge from '@/packages/badge/doc.md?raw'; +import DialogzhTW from '@/packages/dialog/doc.zh-TW.md?raw'; +import Dialogtaro from '@/packages/dialog/doc.taro.md?raw'; +import DialogenUS from '@/packages/dialog/doc.en-US.md?raw'; +import Dialog from '@/packages/dialog/doc.md?raw'; +import DragzhTW from '@/packages/drag/doc.zh-TW.md?raw'; +import Dragtaro from '@/packages/drag/doc.taro.md?raw'; +import DragenUS from '@/packages/drag/doc.en-US.md?raw'; +import Drag from '@/packages/drag/doc.md?raw'; +import EmptyzhTW from '@/packages/empty/doc.zh-TW.md?raw'; +import Emptytaro from '@/packages/empty/doc.taro.md?raw'; +import EmptyenUS from '@/packages/empty/doc.en-US.md?raw'; +import Empty from '@/packages/empty/doc.md?raw'; +import ResultPagezhTW from '@/packages/resultpage/doc.zh-TW.md?raw'; +import ResultPagetaro from '@/packages/resultpage/doc.taro.md?raw'; +import ResultPageenUS from '@/packages/resultpage/doc.en-US.md?raw'; +import ResultPage from '@/packages/resultpage/doc.md?raw'; +import InfiniteLoadingzhTW from '@/packages/infiniteloading/doc.zh-TW.md?raw'; +import InfiniteLoadingtaro from '@/packages/infiniteloading/doc.taro.md?raw'; +import InfiniteLoadingenUS from '@/packages/infiniteloading/doc.en-US.md?raw'; +import InfiniteLoading from '@/packages/infiniteloading/doc.md?raw'; +import LoadingzhTW from '@/packages/loading/doc.zh-TW.md?raw'; +import Loadingtaro from '@/packages/loading/doc.taro.md?raw'; +import LoadingenUS from '@/packages/loading/doc.en-US.md?raw'; +import Loading from '@/packages/loading/doc.md?raw'; +import NoticeBarzhTW from '@/packages/noticebar/doc.zh-TW.md?raw'; +import NoticeBartaro from '@/packages/noticebar/doc.taro.md?raw'; +import NoticeBarenUS from '@/packages/noticebar/doc.en-US.md?raw'; +import NoticeBar from '@/packages/noticebar/doc.md?raw'; +import NotifyzhTW from '@/packages/notify/doc.zh-TW.md?raw'; +import Notifytaro from '@/packages/notify/doc.taro.md?raw'; +import NotifyenUS from '@/packages/notify/doc.en-US.md?raw'; +import Notify from '@/packages/notify/doc.md?raw'; +import PopoverzhTW from '@/packages/popover/doc.zh-TW.md?raw'; +import Popovertaro from '@/packages/popover/doc.taro.md?raw'; +import PopoverenUS from '@/packages/popover/doc.en-US.md?raw'; +import Popover from '@/packages/popover/doc.md?raw'; +import PopupzhTW from '@/packages/popup/doc.zh-TW.md?raw'; +import Popuptaro from '@/packages/popup/doc.taro.md?raw'; +import PopupenUS from '@/packages/popup/doc.en-US.md?raw'; +import Popup from '@/packages/popup/doc.md?raw'; +import PullToRefreshzhTW from '@/packages/pulltorefresh/doc.zh-TW.md?raw'; +import PullToRefreshtaro from '@/packages/pulltorefresh/doc.taro.md?raw'; +import PullToRefreshenUS from '@/packages/pulltorefresh/doc.en-US.md?raw'; +import PullToRefresh from '@/packages/pulltorefresh/doc.md?raw'; +import SkeletonzhTW from '@/packages/skeleton/doc.zh-TW.md?raw'; +import Skeletontaro from '@/packages/skeleton/doc.taro.md?raw'; +import SkeletonenUS from '@/packages/skeleton/doc.en-US.md?raw'; +import Skeleton from '@/packages/skeleton/doc.md?raw'; +import SwipezhTW from '@/packages/swipe/doc.zh-TW.md?raw'; +import Swipetaro from '@/packages/swipe/doc.taro.md?raw'; +import SwipeenUS from '@/packages/swipe/doc.en-US.md?raw'; +import Swipe from '@/packages/swipe/doc.md?raw'; +import ToastzhTW from '@/packages/toast/doc.zh-TW.md?raw'; +import Toasttaro from '@/packages/toast/doc.taro.md?raw'; +import ToastenUS from '@/packages/toast/doc.en-US.md?raw'; +import Toast from '@/packages/toast/doc.md?raw'; +import AnimatezhTW from '@/packages/animate/doc.zh-TW.md?raw'; +import Animatetaro from '@/packages/animate/doc.taro.md?raw'; +import AnimateenUS from '@/packages/animate/doc.en-US.md?raw'; +import Animate from '@/packages/animate/doc.md?raw'; +import AnimatingNumberszhTW from '@/packages/animatingnumbers/doc.zh-TW.md?raw'; +import AnimatingNumberstaro from '@/packages/animatingnumbers/doc.taro.md?raw'; +import AnimatingNumbersenUS from '@/packages/animatingnumbers/doc.en-US.md?raw'; +import AnimatingNumbers from '@/packages/animatingnumbers/doc.md?raw'; +import AudiozhTW from '@/packages/audio/doc.zh-TW.md?raw'; +import Audiotaro from '@/packages/audio/doc.taro.md?raw'; +import AudioenUS from '@/packages/audio/doc.en-US.md?raw'; +import Audio from '@/packages/audio/doc.md?raw'; +import AvatarzhTW from '@/packages/avatar/doc.zh-TW.md?raw'; +import Avatartaro from '@/packages/avatar/doc.taro.md?raw'; +import AvatarenUS from '@/packages/avatar/doc.en-US.md?raw'; +import Avatar from '@/packages/avatar/doc.md?raw'; +import CircleProgresszhTW from '@/packages/circleprogress/doc.zh-TW.md?raw'; +import CircleProgresstaro from '@/packages/circleprogress/doc.taro.md?raw'; +import CircleProgressenUS from '@/packages/circleprogress/doc.en-US.md?raw'; +import CircleProgress from '@/packages/circleprogress/doc.md?raw'; +import CollapsezhTW from '@/packages/collapse/doc.zh-TW.md?raw'; +import Collapsetaro from '@/packages/collapse/doc.taro.md?raw'; +import CollapseenUS from '@/packages/collapse/doc.en-US.md?raw'; +import Collapse from '@/packages/collapse/doc.md?raw'; +import CountDownzhTW from '@/packages/countdown/doc.zh-TW.md?raw'; +import CountDowntaro from '@/packages/countdown/doc.taro.md?raw'; +import CountDownenUS from '@/packages/countdown/doc.en-US.md?raw'; +import CountDown from '@/packages/countdown/doc.md?raw'; +import EllipsiszhTW from '@/packages/ellipsis/doc.zh-TW.md?raw'; +import Ellipsistaro from '@/packages/ellipsis/doc.taro.md?raw'; +import EllipsisenUS from '@/packages/ellipsis/doc.en-US.md?raw'; +import Ellipsis from '@/packages/ellipsis/doc.md?raw'; +import ImagePreviewzhTW from '@/packages/imagepreview/doc.zh-TW.md?raw'; +import ImagePreviewtaro from '@/packages/imagepreview/doc.taro.md?raw'; +import ImagePreviewenUS from '@/packages/imagepreview/doc.en-US.md?raw'; +import ImagePreview from '@/packages/imagepreview/doc.md?raw'; +import IndicatorzhTW from '@/packages/indicator/doc.zh-TW.md?raw'; +import Indicatortaro from '@/packages/indicator/doc.taro.md?raw'; +import IndicatorenUS from '@/packages/indicator/doc.en-US.md?raw'; +import Indicator from '@/packages/indicator/doc.md?raw'; +import LottiezhTW from '@/packages/lottie/doc.zh-TW.md?raw'; +import Lottietaro from '@/packages/lottie/doc.taro.md?raw'; +import LottieenUS from '@/packages/lottie/doc.en-US.md?raw'; +import Lottie from '@/packages/lottie/doc.md?raw'; +import PaginationzhTW from '@/packages/pagination/doc.zh-TW.md?raw'; +import Paginationtaro from '@/packages/pagination/doc.taro.md?raw'; +import PaginationenUS from '@/packages/pagination/doc.en-US.md?raw'; +import Pagination from '@/packages/pagination/doc.md?raw'; +import SegmentedzhTW from '@/packages/segmented/doc.zh-TW.md?raw'; +import Segmentedtaro from '@/packages/segmented/doc.taro.md?raw'; +import SegmentedenUS from '@/packages/segmented/doc.en-US.md?raw'; +import Segmented from '@/packages/segmented/doc.md?raw'; +import PricezhTW from '@/packages/price/doc.zh-TW.md?raw'; +import Pricetaro from '@/packages/price/doc.taro.md?raw'; +import PriceenUS from '@/packages/price/doc.en-US.md?raw'; +import Price from '@/packages/price/doc.md?raw'; +import ProgresszhTW from '@/packages/progress/doc.zh-TW.md?raw'; +import Progresstaro from '@/packages/progress/doc.taro.md?raw'; +import ProgressenUS from '@/packages/progress/doc.en-US.md?raw'; +import Progress from '@/packages/progress/doc.md?raw'; +import StepszhTW from '@/packages/steps/doc.zh-TW.md?raw'; +import Stepstaro from '@/packages/steps/doc.taro.md?raw'; +import StepsenUS from '@/packages/steps/doc.en-US.md?raw'; +import Steps from '@/packages/steps/doc.md?raw'; +import SwiperzhTW from '@/packages/swiper/doc.zh-TW.md?raw'; +import Swipertaro from '@/packages/swiper/doc.taro.md?raw'; +import SwiperenUS from '@/packages/swiper/doc.en-US.md?raw'; +import Swiper from '@/packages/swiper/doc.md?raw'; +import TablezhTW from '@/packages/table/doc.zh-TW.md?raw'; +import Tabletaro from '@/packages/table/doc.taro.md?raw'; +import TableenUS from '@/packages/table/doc.en-US.md?raw'; +import Table from '@/packages/table/doc.md?raw'; +import TagzhTW from '@/packages/tag/doc.zh-TW.md?raw'; +import Tagtaro from '@/packages/tag/doc.taro.md?raw'; +import TagenUS from '@/packages/tag/doc.en-US.md?raw'; +import Tag from '@/packages/tag/doc.md?raw'; +import TourzhTW from '@/packages/tour/doc.zh-TW.md?raw'; +import Tourtaro from '@/packages/tour/doc.taro.md?raw'; +import TourenUS from '@/packages/tour/doc.en-US.md?raw'; +import Tour from '@/packages/tour/doc.md?raw'; +import VideozhTW from '@/packages/video/doc.zh-TW.md?raw'; +import Videotaro from '@/packages/video/doc.taro.md?raw'; +import VideoenUS from '@/packages/video/doc.en-US.md?raw'; +import Video from '@/packages/video/doc.md?raw'; +import VirtualListzhTW from '@/packages/virtuallist/doc.zh-TW.md?raw'; +import VirtualListtaro from '@/packages/virtuallist/doc.taro.md?raw'; +import VirtualListenUS from '@/packages/virtuallist/doc.en-US.md?raw'; +import VirtualList from '@/packages/virtuallist/doc.md?raw'; +import BarragezhTW from '@/packages/barrage/doc.zh-TW.md?raw'; +import Barragetaro from '@/packages/barrage/doc.taro.md?raw'; +import BarrageenUS from '@/packages/barrage/doc.en-US.md?raw'; +import Barrage from '@/packages/barrage/doc.md?raw'; +import CardzhTW from '@/packages/card/doc.zh-TW.md?raw'; +import Cardtaro from '@/packages/card/doc.taro.md?raw'; +import CardenUS from '@/packages/card/doc.en-US.md?raw'; +import Card from '@/packages/card/doc.md?raw'; +import TimeSelectzhTW from '@/packages/timeselect/doc.zh-TW.md?raw'; +import TimeSelecttaro from '@/packages/timeselect/doc.taro.md?raw'; +import TimeSelectenUS from '@/packages/timeselect/doc.en-US.md?raw'; +import TimeSelect from '@/packages/timeselect/doc.md?raw'; +import TrendArrowzhTW from '@/packages/trendarrow/doc.zh-TW.md?raw'; +import TrendArrowtaro from '@/packages/trendarrow/doc.taro.md?raw'; +import TrendArrowenUS from '@/packages/trendarrow/doc.en-US.md?raw'; +import TrendArrow from '@/packages/trendarrow/doc.md?raw'; +import WaterMarkzhTW from '@/packages/watermark/doc.zh-TW.md?raw'; +import WaterMarktaro from '@/packages/watermark/doc.taro.md?raw'; +import WaterMarkenUS from '@/packages/watermark/doc.en-US.md?raw'; +import WaterMark from '@/packages/watermark/doc.md?raw'; +import AvatarCropperzhTW from '@/packages/avatarcropper/doc.zh-TW.md?raw'; +import AvatarCroppertaro from '@/packages/avatarcropper/doc.taro.md?raw'; +import AvatarCropperenUS from '@/packages/avatarcropper/doc.en-US.md?raw'; +import AvatarCropper from '@/packages/avatarcropper/doc.md?raw'; + +import CellScss from '@/packages/cell/demo.scss?raw'; +import OverlayScss from '@/packages/overlay/demo.scss?raw'; +import NavBarScss from '@/packages/navbar/demo.scss?raw'; +import CalendarScss from '@/packages/calendar/demo.scss?raw'; +import SignatureScss from '@/packages/signature/demo.scss?raw'; +import NoticeBarScss from '@/packages/noticebar/demo.scss?raw'; +import PopoverScss from '@/packages/popover/demo.scss?raw'; +import SkeletonScss from '@/packages/skeleton/demo.scss?raw'; +import AvatarScss from '@/packages/avatar/demo.scss?raw'; +import CircleProgressScss from '@/packages/circleprogress/demo.scss?raw'; +import SwiperScss from '@/packages/swiper/demo.scss?raw'; +import TourScss from '@/packages/tour/demo.scss?raw'; +import BarrageScss from '@/packages/barrage/demo.scss?raw'; +import TrendArrowScss from '@/packages/trendarrow/demo.scss?raw'; + +export const scssRaws = { CellScss,OverlayScss,NavBarScss,CalendarScss,SignatureScss,NoticeBarScss,PopoverScss,SkeletonScss,AvatarScss,CircleProgressScss,SwiperScss,TourScss,BarrageScss,TrendArrowScss } +export const routers = ['Button','Cell','ConfigProvider','Image','Overlay','Divider','Grid','Layout','Space','Sticky','SafeArea','BackTop','Elevator','FixedNav','HoverButton','NavBar','SideNavBar','SideBar','Tabbar','Tabs','Address','Calendar','CalendarCard','Cascader','Checkbox','DatePicker','Form','Input','InputNumber','Menu','NumberKeyboard','Picker','Radio','Range','Rate','SearchBar','ShortPassword','Signature','Switch','TextArea','Uploader','ActionSheet','Badge','Dialog','Drag','Empty','ResultPage','InfiniteLoading','Loading','NoticeBar','Notify','Popover','Popup','PullToRefresh','Skeleton','Swipe','Toast','Animate','AnimatingNumbers','Audio','Avatar','CircleProgress','Collapse','CountDown','Ellipsis','ImagePreview','Indicator','Lottie','Pagination','Segmented','Price','Progress','Steps','Swiper','Table','Tag','Tour','Video','VirtualList','Barrage','Card','TimeSelect','TrendArrow','WaterMark','AvatarCropper'] +export const raws = {ButtonzhTW,Buttontaro,ButtonenUS,Button,CellzhTW,Celltaro,CellenUS,Cell,ConfigProviderzhTW,ConfigProvidertaro,ConfigProviderenUS,ConfigProvider,ImagezhTW,Imagetaro,ImageenUS,Image,OverlayzhTW,Overlaytaro,OverlayenUS,Overlay,DividerzhTW,Dividertaro,DividerenUS,Divider,GridzhTW,Gridtaro,GridenUS,Grid,LayoutzhTW,Layouttaro,LayoutenUS,Layout,SpacezhTW,Spacetaro,SpaceenUS,Space,StickyzhTW,Stickytaro,StickyenUS,Sticky,SafeAreazhTW,SafeAreataro,SafeAreaenUS,SafeArea,BackTopzhTW,BackToptaro,BackTopenUS,BackTop,ElevatorzhTW,Elevatortaro,ElevatorenUS,Elevator,FixedNavzhTW,FixedNavtaro,FixedNavenUS,FixedNav,HoverButtonzhTW,HoverButtontaro,HoverButtonenUS,HoverButton,NavBarzhTW,NavBartaro,NavBarenUS,NavBar,SideNavBarzhTW,SideNavBartaro,SideNavBarenUS,SideNavBar,SideBarzhTW,SideBartaro,SideBarenUS,SideBar,TabbarzhTW,Tabbartaro,TabbarenUS,Tabbar,TabszhTW,Tabstaro,TabsenUS,Tabs,AddresszhTW,Addresstaro,AddressenUS,Address,CalendarzhTW,Calendartaro,CalendarenUS,Calendar,CalendarCardzhTW,CalendarCardtaro,CalendarCardenUS,CalendarCard,CascaderzhTW,Cascadertaro,CascaderenUS,Cascader,CheckboxzhTW,Checkboxtaro,CheckboxenUS,Checkbox,DatePickerzhTW,DatePickertaro,DatePickerenUS,DatePicker,FormzhTW,Formtaro,FormenUS,Form,InputzhTW,Inputtaro,InputenUS,Input,InputNumberzhTW,InputNumbertaro,InputNumberenUS,InputNumber,MenuzhTW,Menutaro,MenuenUS,Menu,NumberKeyboardzhTW,NumberKeyboardtaro,NumberKeyboardenUS,NumberKeyboard,PickerzhTW,Pickertaro,PickerenUS,Picker,RadiozhTW,Radiotaro,RadioenUS,Radio,RangezhTW,Rangetaro,RangeenUS,Range,RatezhTW,Ratetaro,RateenUS,Rate,SearchBarzhTW,SearchBartaro,SearchBarenUS,SearchBar,ShortPasswordzhTW,ShortPasswordtaro,ShortPasswordenUS,ShortPassword,SignaturezhTW,Signaturetaro,SignatureenUS,Signature,SwitchzhTW,Switchtaro,SwitchenUS,Switch,TextAreazhTW,TextAreataro,TextAreaenUS,TextArea,UploaderzhTW,Uploadertaro,UploaderenUS,Uploader,ActionSheetzhTW,ActionSheettaro,ActionSheetenUS,ActionSheet,BadgezhTW,Badgetaro,BadgeenUS,Badge,DialogzhTW,Dialogtaro,DialogenUS,Dialog,DragzhTW,Dragtaro,DragenUS,Drag,EmptyzhTW,Emptytaro,EmptyenUS,Empty,ResultPagezhTW,ResultPagetaro,ResultPageenUS,ResultPage,InfiniteLoadingzhTW,InfiniteLoadingtaro,InfiniteLoadingenUS,InfiniteLoading,LoadingzhTW,Loadingtaro,LoadingenUS,Loading,NoticeBarzhTW,NoticeBartaro,NoticeBarenUS,NoticeBar,NotifyzhTW,Notifytaro,NotifyenUS,Notify,PopoverzhTW,Popovertaro,PopoverenUS,Popover,PopupzhTW,Popuptaro,PopupenUS,Popup,PullToRefreshzhTW,PullToRefreshtaro,PullToRefreshenUS,PullToRefresh,SkeletonzhTW,Skeletontaro,SkeletonenUS,Skeleton,SwipezhTW,Swipetaro,SwipeenUS,Swipe,ToastzhTW,Toasttaro,ToastenUS,Toast,AnimatezhTW,Animatetaro,AnimateenUS,Animate,AnimatingNumberszhTW,AnimatingNumberstaro,AnimatingNumbersenUS,AnimatingNumbers,AudiozhTW,Audiotaro,AudioenUS,Audio,AvatarzhTW,Avatartaro,AvatarenUS,Avatar,CircleProgresszhTW,CircleProgresstaro,CircleProgressenUS,CircleProgress,CollapsezhTW,Collapsetaro,CollapseenUS,Collapse,CountDownzhTW,CountDowntaro,CountDownenUS,CountDown,EllipsiszhTW,Ellipsistaro,EllipsisenUS,Ellipsis,ImagePreviewzhTW,ImagePreviewtaro,ImagePreviewenUS,ImagePreview,IndicatorzhTW,Indicatortaro,IndicatorenUS,Indicator,LottiezhTW,Lottietaro,LottieenUS,Lottie,PaginationzhTW,Paginationtaro,PaginationenUS,Pagination,SegmentedzhTW,Segmentedtaro,SegmentedenUS,Segmented,PricezhTW,Pricetaro,PriceenUS,Price,ProgresszhTW,Progresstaro,ProgressenUS,Progress,StepszhTW,Stepstaro,StepsenUS,Steps,SwiperzhTW,Swipertaro,SwiperenUS,Swiper,TablezhTW,Tabletaro,TableenUS,Table,TagzhTW,Tagtaro,TagenUS,Tag,TourzhTW,Tourtaro,TourenUS,Tour,VideozhTW,Videotaro,VideoenUS,Video,VirtualListzhTW,VirtualListtaro,VirtualListenUS,VirtualList,BarragezhTW,Barragetaro,BarrageenUS,Barrage,CardzhTW,Cardtaro,CardenUS,Card,TimeSelectzhTW,TimeSelecttaro,TimeSelectenUS,TimeSelect,TrendArrowzhTW,TrendArrowtaro,TrendArrowenUS,TrendArrow,WaterMarkzhTW,WaterMarktaro,WaterMarkenUS,WaterMark,AvatarCropperzhTW,AvatarCroppertaro,AvatarCropperenUS,AvatarCropper} diff --git a/src/sites/doc/docs/react/contributing-react.en-US.md b/src/sites/sites-react/doc/docs/react/contributing-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/contributing-react.en-US.md rename to src/sites/sites-react/doc/docs/react/contributing-react.en-US.md diff --git a/src/sites/doc/docs/react/contributing-react.md b/src/sites/sites-react/doc/docs/react/contributing-react.md similarity index 100% rename from src/sites/doc/docs/react/contributing-react.md rename to src/sites/sites-react/doc/docs/react/contributing-react.md diff --git a/src/sites/doc/docs/react/international-react.en-US.md b/src/sites/sites-react/doc/docs/react/international-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/international-react.en-US.md rename to src/sites/sites-react/doc/docs/react/international-react.en-US.md diff --git a/src/sites/doc/docs/react/international-react.md b/src/sites/sites-react/doc/docs/react/international-react.md similarity index 100% rename from src/sites/doc/docs/react/international-react.md rename to src/sites/sites-react/doc/docs/react/international-react.md diff --git a/src/sites/doc/docs/react/intro-react.en-US.md b/src/sites/sites-react/doc/docs/react/intro-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/intro-react.en-US.md rename to src/sites/sites-react/doc/docs/react/intro-react.en-US.md diff --git a/src/sites/doc/docs/react/intro-react.md b/src/sites/sites-react/doc/docs/react/intro-react.md similarity index 100% rename from src/sites/doc/docs/react/intro-react.md rename to src/sites/sites-react/doc/docs/react/intro-react.md diff --git a/src/sites/doc/docs/react/migrate-from-v1.en-US.md b/src/sites/sites-react/doc/docs/react/migrate-from-v1.en-US.md similarity index 100% rename from src/sites/doc/docs/react/migrate-from-v1.en-US.md rename to src/sites/sites-react/doc/docs/react/migrate-from-v1.en-US.md diff --git a/src/sites/doc/docs/react/migrate-from-v1.md b/src/sites/sites-react/doc/docs/react/migrate-from-v1.md similarity index 100% rename from src/sites/doc/docs/react/migrate-from-v1.md rename to src/sites/sites-react/doc/docs/react/migrate-from-v1.md diff --git a/src/sites/doc/docs/react/migrate-from-v2.en-US.md b/src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md similarity index 100% rename from src/sites/doc/docs/react/migrate-from-v2.en-US.md rename to src/sites/sites-react/doc/docs/react/migrate-from-v2.en-US.md diff --git a/src/sites/doc/docs/react/migrate-from-v2.md b/src/sites/sites-react/doc/docs/react/migrate-from-v2.md similarity index 100% rename from src/sites/doc/docs/react/migrate-from-v2.md rename to src/sites/sites-react/doc/docs/react/migrate-from-v2.md diff --git a/src/sites/doc/docs/react/official-theme-react.en-US.md b/src/sites/sites-react/doc/docs/react/official-theme-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/official-theme-react.en-US.md rename to src/sites/sites-react/doc/docs/react/official-theme-react.en-US.md diff --git a/src/sites/doc/docs/react/official-theme-react.md b/src/sites/sites-react/doc/docs/react/official-theme-react.md similarity index 100% rename from src/sites/doc/docs/react/official-theme-react.md rename to src/sites/sites-react/doc/docs/react/official-theme-react.md diff --git a/src/sites/doc/docs/react/start-react.en-US.md b/src/sites/sites-react/doc/docs/react/start-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/start-react.en-US.md rename to src/sites/sites-react/doc/docs/react/start-react.en-US.md diff --git a/src/sites/doc/docs/react/start-react.md b/src/sites/sites-react/doc/docs/react/start-react.md similarity index 100% rename from src/sites/doc/docs/react/start-react.md rename to src/sites/sites-react/doc/docs/react/start-react.md diff --git a/src/sites/doc/docs/react/theme-react.en-US.md b/src/sites/sites-react/doc/docs/react/theme-react.en-US.md similarity index 100% rename from src/sites/doc/docs/react/theme-react.en-US.md rename to src/sites/sites-react/doc/docs/react/theme-react.en-US.md diff --git a/src/sites/doc/docs/react/theme-react.md b/src/sites/sites-react/doc/docs/react/theme-react.md similarity index 100% rename from src/sites/doc/docs/react/theme-react.md rename to src/sites/sites-react/doc/docs/react/theme-react.md diff --git a/src/sites/doc/docs/taro/contributing-react.en-US.md b/src/sites/sites-react/doc/docs/taro/contributing-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/contributing-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/contributing-react.en-US.md diff --git a/src/sites/doc/docs/taro/contributing-react.md b/src/sites/sites-react/doc/docs/taro/contributing-react.md similarity index 100% rename from src/sites/doc/docs/taro/contributing-react.md rename to src/sites/sites-react/doc/docs/taro/contributing-react.md diff --git a/src/sites/doc/docs/taro/international-react.en-US.md b/src/sites/sites-react/doc/docs/taro/international-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/international-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/international-react.en-US.md diff --git a/src/sites/doc/docs/taro/international-react.md b/src/sites/sites-react/doc/docs/taro/international-react.md similarity index 100% rename from src/sites/doc/docs/taro/international-react.md rename to src/sites/sites-react/doc/docs/taro/international-react.md diff --git a/src/sites/doc/docs/taro/intro-react.en-US.md b/src/sites/sites-react/doc/docs/taro/intro-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/intro-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/intro-react.en-US.md diff --git a/src/sites/doc/docs/taro/intro-react.md b/src/sites/sites-react/doc/docs/taro/intro-react.md similarity index 100% rename from src/sites/doc/docs/taro/intro-react.md rename to src/sites/sites-react/doc/docs/taro/intro-react.md diff --git a/src/sites/doc/docs/taro/migrate-from-v1.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v1.md similarity index 100% rename from src/sites/doc/docs/taro/migrate-from-v1.md rename to src/sites/sites-react/doc/docs/taro/migrate-from-v1.md diff --git a/src/sites/doc/docs/taro/migrate-from-v2.md b/src/sites/sites-react/doc/docs/taro/migrate-from-v2.md similarity index 100% rename from src/sites/doc/docs/taro/migrate-from-v2.md rename to src/sites/sites-react/doc/docs/taro/migrate-from-v2.md diff --git a/src/sites/doc/docs/taro/official-theme-react.en-US.md b/src/sites/sites-react/doc/docs/taro/official-theme-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/official-theme-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/official-theme-react.en-US.md diff --git a/src/sites/doc/docs/taro/official-theme-react.md b/src/sites/sites-react/doc/docs/taro/official-theme-react.md similarity index 100% rename from src/sites/doc/docs/taro/official-theme-react.md rename to src/sites/sites-react/doc/docs/taro/official-theme-react.md diff --git a/src/sites/doc/docs/taro/start-react.en-US.md b/src/sites/sites-react/doc/docs/taro/start-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/start-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/start-react.en-US.md diff --git a/src/sites/doc/docs/taro/start-react.md b/src/sites/sites-react/doc/docs/taro/start-react.md similarity index 100% rename from src/sites/doc/docs/taro/start-react.md rename to src/sites/sites-react/doc/docs/taro/start-react.md diff --git a/src/sites/doc/docs/taro/theme-react.en-US.md b/src/sites/sites-react/doc/docs/taro/theme-react.en-US.md similarity index 100% rename from src/sites/doc/docs/taro/theme-react.en-US.md rename to src/sites/sites-react/doc/docs/taro/theme-react.en-US.md diff --git a/src/sites/doc/docs/taro/theme-react.md b/src/sites/sites-react/doc/docs/taro/theme-react.md similarity index 100% rename from src/sites/doc/docs/taro/theme-react.md rename to src/sites/sites-react/doc/docs/taro/theme-react.md diff --git a/src/sites/doc/main.tsx b/src/sites/sites-react/doc/main.tsx similarity index 88% rename from src/sites/doc/main.tsx rename to src/sites/sites-react/doc/main.tsx index 611a579cef..edbb32b1d5 100644 --- a/src/sites/doc/main.tsx +++ b/src/sites/sites-react/doc/main.tsx @@ -1,13 +1,13 @@ import React from 'react' import * as ReactDOM from 'react-dom/client' -import { isMobile } from '@/sites/assets/util' +import { isMobile } from '../../assets/util' import '@/sites/assets/styles/reset.scss' import '@/sites/assets/styles/md-style.scss' import App from './App' if (isMobile) { location.replace('demo.html') -} +} const rootElement = document.querySelector('#doc') diff --git a/src/sites/doc/router.ts b/src/sites/sites-react/doc/router.ts similarity index 93% rename from src/sites/doc/router.ts rename to src/sites/sites-react/doc/router.ts index f37724055e..3f99c2a5b3 100644 --- a/src/sites/doc/router.ts +++ b/src/sites/sites-react/doc/router.ts @@ -47,7 +47,7 @@ for (const path in modulesTaroPage) { }) } -const modulesDocs = import.meta.glob('/src/sites/doc/docs/react/*.md'); +const modulesDocs = import.meta.glob('/src/sites/sites-react/doc/docs/react/*.md'); for (const path in modulesDocs) { let name = (/docs\/react\/(.*).md/.exec(path) as any[])[1]; guideRoutes.push({ @@ -57,7 +57,7 @@ for (const path in modulesDocs) { }); } -const modulesEnDocs = import.meta.glob('/src/sites/doc/docs/react/*.en-US.md'); +const modulesEnDocs = import.meta.glob('/src/sites/sites-react/doc/docs/react/*.en-US.md'); for (const path in modulesEnDocs) { let name = (/docs\/react\/(.*).en-US.md/.exec(path) as any[])[1]; guideEnRoutes.push({ diff --git a/src/sites/theme/components/header/header.scss b/src/sites/theme/components/header/header.scss index a090f32d67..b1ae250808 100644 --- a/src/sites/theme/components/header/header.scss +++ b/src/sites/theme/components/header/header.scss @@ -209,12 +209,12 @@ &-box { &.select-down { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-down.png'); + background-image: url('../../../assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-up.png'); + background-image: url('../../../assets/images/icon-select-white-up.png'); } } } @@ -367,12 +367,12 @@ &-box { &.select-down { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-down.png'); + background-image: url('../../../assets/images/icon-select-white-down.png'); } } &.select-up { .header-select-hd { - background-image: url('../../assets/images/icon-select-white-up.png'); + background-image: url('../../../assets/images/icon-select-white-up.png'); } } } diff --git a/vite.config.demo.ts b/vite.config.demo.ts new file mode 100644 index 0000000000..f89b305d4d --- /dev/null +++ b/vite.config.demo.ts @@ -0,0 +1,126 @@ +/// <reference types="vitest" /> +import { defineConfig, UserConfig } from 'vite' +import { resolve, join } from 'path' +// @ts-ignore +import atImport from 'postcss-import' +import autoprefixer from 'autoprefixer' +import config from './package.json' + +const projectID = process.env.VITE_APP_PROJECT_ID || '' + +let fileStr = `@import "@/styles/variables.scss";@import "@/sites/assets/styles/variables.scss";@import '@/styles/theme-default.scss';\n` +if (projectID) { + fileStr = `@import '@/styles/variables-${projectID}.scss';\n@import "@/sites/assets/styles/variables.scss";\n@import '@/styles/font-${projectID}/iconfont.css';\n@import '@/styles/theme-${projectID}.scss';\n` +} + +// https://vitejs.dev/config/ +export default defineConfig(async (): Promise<UserConfig> => { + return { + mode: 'production', + base: `/h5/react/${projectID === 'jmapp' ? 'jdesign' : '3x'}`, + resolve: { + alias: [ + { + find: '@nutui/nutui-react/dist/es/lottie/animation/light/loading.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/light/loading.json' + ), + }, + { + find: '@nutui/nutui-react/dist/es/lottie/animation/light/global.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/light/global.json' + ), + }, + { + find: '@nutui/nutui-react/dist/es/lottie/animation/light/pulltorefresh.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/light/pulltorefresh.json' + ), + }, + { + find: '@nutui/nutui-react/dist/es/lottie/animation/dark/loading.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/dark/loading.json' + ), + }, + { + find: '@nutui/nutui-react/dist/es/lottie/animation/dark/global.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/dark/global.json' + ), + }, + { + find: '@nutui/nutui-react/dist/es/lottie/animation/dark/pulltorefresh.json', + replacement: resolve( + __dirname, + './src/packages/lottie/animation/dark/pulltorefresh.json' + ), + }, + { + find: '@nutui/nutui-react/dist/locale/en-US', + replacement: resolve(__dirname, './src/locales/en-US.ts'), + }, + { + find: '@nutui/nutui-react-taro/dist/locales/en-US', + replacement: resolve(__dirname, './src/locales/en-US.ts'), + }, + { find: '@', replacement: resolve(__dirname, './src') }, + { + find: '@nutui/nutui-react', + replacement: resolve(__dirname, './src/packages/nutui.react.ts'), + }, + { + find: '@nutui/nutui-react-taro', + replacement: resolve(__dirname, './src/packages/nutui.react.taro.ts'), + }, + ], + }, + css: { + preprocessorOptions: { + scss: { + // example : additionalData: `@import "./src/dclearesign/styles/variables";` + // dont need include file extend .scss + api: 'modern-compiler', + additionalData: fileStr, + // 这里查看可选值:https://github.com/sass/sass/blob/1c9ec00/js-api-doc/deprecations.d.ts#L180 + silenceDeprecations: ['import', 'global-builtin'], + }, + postcss: { + plugins: [ + atImport({ path: join(__dirname, 'src`') }), + autoprefixer({ + overrideBrowserslist: [ + '> 0.5%', + 'last 2 versions', + 'ie > 11', + 'iOS >= 10', + 'Android >= 5', + ], + }), + ], + }, + }, + }, + build: { + target: 'es2015', + outDir: `./dist-demo/${projectID === 'jmapp' ? 'jdesign' : '3x'}/`, + cssCodeSplit: true, + rollupOptions: { + input: { + mobile: resolve(__dirname, 'demo.html'), + }, + output: { + entryFileNames: `demo-${config.version}/[name].js`, + chunkFileNames: `demo-${config.version}/[name].js`, + assetFileNames: `demo-${config.version}/[name].[ext]`, + }, + }, + }, + } +}) diff --git a/vite.config.site.taro.ts b/vite.config.site.taro.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/vite.config.site.ts b/vite.config.site.ts index f89b305d4d..887b76ee31 100644 --- a/vite.config.site.ts +++ b/vite.config.site.ts @@ -1,9 +1,10 @@ /// <reference types="vitest" /> import { defineConfig, UserConfig } from 'vite' -import { resolve, join } from 'path' +import reactRefresh from '@vitejs/plugin-react' +import { join, resolve } from 'path' // @ts-ignore import atImport from 'postcss-import' -import autoprefixer from 'autoprefixer' +import { readFileSync } from 'node:fs' import config from './package.json' const projectID = process.env.VITE_APP_PROJECT_ID || '' @@ -12,12 +13,27 @@ let fileStr = `@import "@/styles/variables.scss";@import "@/sites/assets/styles/ if (projectID) { fileStr = `@import '@/styles/variables-${projectID}.scss';\n@import "@/sites/assets/styles/variables.scss";\n@import '@/styles/font-${projectID}/iconfont.css';\n@import '@/styles/theme-${projectID}.scss';\n` } +const refRandom = Math.random().toString(36).slice(-8) // https://vitejs.dev/config/ export default defineConfig(async (): Promise<UserConfig> => { + const mdx = await import('@mdx-js/rollup') + const remarkGfm = await import('remark-gfm') + const remarkDirective = await import('remark-directive') return { - mode: 'production', - base: `/h5/react/${projectID === 'jmapp' ? 'jdesign' : '3x'}`, + base: '/h5/react/3x', + server: { + port: 2021, + host: '0.0.0.0', + open: '/h5/react/3x/index.react.html', + proxy: { + '/devServer': { + target: 'https://nutui.jd.com', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/devServer/, ''), + }, + }, + }, resolve: { alias: [ { @@ -84,41 +100,69 @@ export default defineConfig(async (): Promise<UserConfig> => { css: { preprocessorOptions: { scss: { - // example : additionalData: `@import "./src/dclearesign/styles/variables";` - // dont need include file extend .scss + // example : additionalData: `@import "./src/design/styles/variables";` api: 'modern-compiler', additionalData: fileStr, // 这里查看可选值:https://github.com/sass/sass/blob/1c9ec00/js-api-doc/deprecations.d.ts#L180 silenceDeprecations: ['import', 'global-builtin'], }, postcss: { - plugins: [ - atImport({ path: join(__dirname, 'src`') }), - autoprefixer({ - overrideBrowserslist: [ - '> 0.5%', - 'last 2 versions', - 'ie > 11', - 'iOS >= 10', - 'Android >= 5', - ], - }), - ], + plugins: [atImport({ path: join(__dirname, 'src`') })], }, }, }, + plugins: [ + { + enforce: 'pre', + ...mdx.default({ + providerImportSource: '@mdx-js/react', + mdExtensions: [], + mdxExtensions: ['.md'], + remarkPlugins: [remarkGfm.default, remarkDirective.default], + }), + }, + { + name: 'test', + apply: 'serve', + async load(id: string) { + if (id.endsWith('.scss')) { + // 移除 @import 语句 + const filePath = resolve(process.cwd(), id) + const scssCode = await readFileSync(filePath, 'utf-8') + const modifiedCode = scssCode.replace( + /@import\s+['"](\.{2}?\/)[^'".]+(.s?css)['"];/g, + '' + ) + return modifiedCode + } + }, + }, + + reactRefresh(), + ], + test: { + setupFiles: ['./vitest.setup.ts'], + globals: true, + environment: 'happy-dom', + coverage: { + all: false, + provider: 'v8', + }, + include: ['src/packages/**/*.(test|spec).(ts|tsx)'], + reporters: ['default', 'html'], + }, build: { - target: 'es2015', - outDir: `./dist-demo/${projectID === 'jmapp' ? 'jdesign' : '3x'}/`, + outDir: './dist-site/h5', + assetsDir: `${config.version}-${refRandom}`, cssCodeSplit: true, rollupOptions: { input: { - mobile: resolve(__dirname, 'demo.html'), + react: resolve(__dirname, 'index.html'), }, output: { - entryFileNames: `demo-${config.version}/[name].js`, - chunkFileNames: `demo-${config.version}/[name].js`, - assetFileNames: `demo-${config.version}/[name].[ext]`, + entryFileNames: `${config.version}-${refRandom}/[name].js`, + chunkFileNames: `${config.version}-${refRandom}/[name].js`, + assetFileNames: `${config.version}-${refRandom}/[name].[ext]`, }, }, },