diff --git a/.github/workflows/pr-compressed-size.yml b/.github/workflows/pr-compressed-size.yml index 0886ec814..ea3018ba8 100644 --- a/.github/workflows/pr-compressed-size.yml +++ b/.github/workflows/pr-compressed-size.yml @@ -16,3 +16,22 @@ jobs: repo-token: '${{ secrets.GITHUB_TOKEN }}' install-script: 'npm install --force' pattern: './packages/tdesign-miniprogram/miniprogram_dist/**/*.{js,wxs,wxml,json}' + comment-key: miniprogram + + - name: Install pnpm + run: npm install -g pnpm@9 + + - name: Install dependencies + run: pnpm install + + - uses: preactjs/compressed-size-action@v2 + with: + repo-token: '${{ secrets.GITHUB_TOKEN }}' + pattern: './packages/tdesign-uniapp/npm_dist/**/*.{js,ts,vue,less,css}' + comment-key: uniapp + + - uses: preactjs/compressed-size-action@v2 + with: + repo-token: '${{ secrets.GITHUB_TOKEN }}' + pattern: './packages/tdesign-uniapp-chat/npm_dist/**/*.{js,ts,vue,less,css}' + comment-key: uniapp-chat \ No newline at end of file diff --git a/.github/workflows/typos-config.toml b/.github/workflows/typos-config.toml index 11c02cb2b..5a32e7a5d 100644 --- a/.github/workflows/typos-config.toml +++ b/.github/workflows/typos-config.toml @@ -9,4 +9,12 @@ nd = "nd" loosing = "loosing" [files] -extend-exclude = ["CHANGELOG*.md", "changelog.json", "echarts.js"] +extend-exclude = [ + "CHANGELOG*.md", + "changelog.json", + "echarts.js", + "packages/uniapp-components/npm/**/*", + "packages/uniapp-pro-components/chat/npm/**/*", + "packages/tdesign-uniapp/app/common/uni.css", + "packages/tdesign-uniapp/app/uni_modules/**/*", +] diff --git a/.gitignore b/.gitignore index 173583b02..e1af7d160 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,8 @@ _wechatide _example !packages/components/**/_example/ !packages/pro-components/**/_example/ +!packages/uniapp-components/**/_example/ +!packages/uniapp-pro-components/**/_example/ packages/tdesign-miniprogram/example/pages/* !packages/tdesign-miniprogram/example/pages/gulp-error @@ -15,6 +17,22 @@ packages/tdesign-miniprogram/test/e2e packages/tdesign-miniprogram/test/unit packages/tdesign-miniprogram/test/unit-virtualHost +# about uniapp +packages/tdesign-uniapp/example/src/_tdesign +packages/tdesign-uniapp/example/src/_tdesign-raw/ +packages/tdesign-uniapp/example/src/pages-more/ +packages/tdesign-uniapp/npm_dist/ +packages/tdesign-uniapp-chat/npm_dist/ + +# about app of uniapp +packages/tdesign-uniapp/app/uni_modules/tdesign-uniapp*/ +packages/tdesign-uniapp/app/unpackage/ +packages/tdesign-uniapp/app/pages-more/ +packages/tdesign-uniapp/app/pages/ +packages/tdesign-uniapp/app/components/ +packages/tdesign-uniapp/app/tdesign-uniapp-raw/ + + .DS_Store node_modules package-lock.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 130dfdf9d..81d8aba50 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -46,5 +46,10 @@ "[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "cSpell.words": ["stylelint", "cascader"] + "cSpell.words": [ + "stylelint", + "cascader", + "tdesign", + "uniapp", + ] } diff --git a/package.json b/package.json index 5bc3a8ed4..3d7b77699 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,8 @@ "scripts": { "start": "npm run dev", "dev": "cross-env NODE_ENV=development gulp dev --gulpfile script/gulpfile.js --cwd ./", + "uniapp": "pnpm -C packages/tdesign-uniapp", + "uniapp:chat": "pnpm -C packages/tdesign-uniapp-chat", "build": "cross-env NODE_ENV=production gulp build --gulpfile script/gulpfile.js --cwd ./", "build:dist": "gulp --gulpfile script/gulpfile.dist.js --cwd ./", "build:example": "gulp --gulpfile script/gulpfile.example.js --cwd ./", @@ -41,6 +43,8 @@ "changelog": "node script/generate-changelog.js", "robot": "publish-cli robot-msg", "qrcode": "pnpm -C packages/tdesign-miniprogram/site qrcode", + "build:uniapp": "pnpm -C packages/tdesign-uniapp run release:prepare", + "build:uniapp:chat": "pnpm -C packages/tdesign-uniapp run release:prepare", "snippet": "node snippets/generate-demo-snippet.mjs" }, "author": "tdesign", diff --git a/packages/components/common/style/theme/_font.less b/packages/components/common/style/theme/_font.less index c174909fc..3e0d0d7a1 100644 --- a/packages/components/common/style/theme/_font.less +++ b/packages/components/common/style/theme/_font.less @@ -51,23 +51,32 @@ page, --td-font-link-small: var(--td-font-size-link-small) / var(--td-line-height-link-small) var(--td-font-family); --td-font-link-medium: var(--td-font-size-link-medium) / var(--td-line-height-link-medium) var(--td-font-family); --td-font-link-large: var(--td-font-size-link-large) / var(--td-line-height-link-large) var(--td-font-family); - --td-font-mark-extraSmall: 600 var(--td-font-size-mark-extraSmall) / var(--td-line-height-mark-extraSmall) var(--td-font-family); + --td-font-mark-extraSmall: 600 var(--td-font-size-mark-extraSmall) / var(--td-line-height-mark-extraSmall) + var(--td-font-family); --td-font-mark-small: 600 var(--td-font-size-mark-small) / var(--td-line-height-mark-small) var(--td-font-family); --td-font-mark-medium: 600 var(--td-font-size-mark-medium) / var(--td-line-height-mark-medium) var(--td-font-family); --td-font-mark-large: 600 var(--td-font-size-mark-large) / var(--td-line-height-mark-large) var(--td-font-family); - --td-font-body-extraSmall: var(--td-font-size-body-extraSmall) / var(--td-line-height-body-extraSmall) var(--td-font-family); + --td-font-body-extraSmall: var(--td-font-size-body-extraSmall) / var(--td-line-height-body-extraSmall) + var(--td-font-family); --td-font-body-small: var(--td-font-size-body-small) / var(--td-line-height-body-small) var(--td-font-family); --td-font-body-medium: var(--td-font-size-body-medium) / var(--td-line-height-body-medium) var(--td-font-family); --td-font-body-large: var(--td-font-size-body-large) / var(--td-line-height-body-large) var(--td-font-family); --td-font-title-small: 600 var(--td-font-size-title-small) / var(--td-line-height-title-small) var(--td-font-family); - --td-font-title-medium: 600 var(--td-font-size-title-medium) / var(--td-line-height-title-medium) var(--td-font-family); + --td-font-title-medium: 600 var(--td-font-size-title-medium) / var(--td-line-height-title-medium) + var(--td-font-family); --td-font-title-large: 600 var(--td-font-size-title-large) / var(--td-line-height-title-large) var(--td-font-family); - --td-font-title-extraLarge: 600 var(--td-font-size-title-extraLarge) / var(--td-line-height-title-extraLarge) var(--td-font-family); - --td-font-headline-small: 600 var(--td-font-size-headline-small) / var(--td-line-height-headline-small) var(--td-font-family); - --td-font-headline-medium: 600 var(--td-font-size-headline-medium) / var(--td-line-height-headline-medium) var(--td-font-family); - --td-font-headline-large: 600 var(--td-font-size-headline-large) / var(--td-line-height-headline-large) var(--td-font-family); - --td-font-display-medium: 600 var(--td-font-size-display-medium) / var(--td-line-height-display-medium) var(--td-font-family); - --td-font-display-large: 600 var(--td-font-size-display-large) / var(--td-line-height-display-large) var(--td-font-family); + --td-font-title-extraLarge: 600 var(--td-font-size-title-extraLarge) / var(--td-line-height-title-extraLarge) + var(--td-font-family); + --td-font-headline-small: 600 var(--td-font-size-headline-small) / var(--td-line-height-headline-small) + var(--td-font-family); + --td-font-headline-medium: 600 var(--td-font-size-headline-medium) / var(--td-line-height-headline-medium) + var(--td-font-family); + --td-font-headline-large: 600 var(--td-font-size-headline-large) / var(--td-line-height-headline-large) + var(--td-font-family); + --td-font-display-medium: 600 var(--td-font-size-display-medium) / var(--td-line-height-display-medium) + var(--td-font-family); + --td-font-display-large: 600 var(--td-font-size-display-large) / var(--td-line-height-display-large) + var(--td-font-family); // 字体大小 token --td-font-size: 20rpx; diff --git a/packages/components/date-time-picker/__test__/__snapshots__/index.test.js.snap b/packages/components/date-time-picker/__test__/__snapshots__/index.test.js.snap index 2c89aac5e..93df22a2a 100644 --- a/packages/components/date-time-picker/__test__/__snapshots__/index.test.js.snap +++ b/packages/components/date-time-picker/__test__/__snapshots__/index.test.js.snap @@ -69,7 +69,7 @@ exports[`date-time-picker :base 1`] = ` > - 2015年 + 2016年 - 2016年 + 2017年 - 2017年 + 2018年 - 2018年 + 2019年 - 2019年 + 2020年 - 2020年 + 2021年 - 2021年 + 2022年 - 2022年 + 2023年 - 2023年 + 2024年 - 2024年 + 2025年 - 2025年 + 2026年 - 2026年 + 2027年 - 2027年 + 2028年 - 2028年 + 2029年 - 2029年 + 2030年 - 2030年 + 2031年 - 2031年 + 2032年 - 2032年 + 2033年 - 2033年 + 2034年 - 2034年 + 2035年 - 2035年 + 2036年 diff --git a/packages/tdesign-uniapp-chat/.eslintignore b/packages/tdesign-uniapp-chat/.eslintignore new file mode 100644 index 000000000..865dc3fbd --- /dev/null +++ b/packages/tdesign-uniapp-chat/.eslintignore @@ -0,0 +1,17 @@ +unpackage +node_modules/ +coverage +static/common/* + +dist/ +/log/ +!.vuepress + +uni_modules/ +miniprogram_npm/ +packages/tdesign/npm/ +packages/tdesign-uniapp-chat/npm/ +packages/tdesign-uniapp-chat/chat-list/_example/ec-canvas/echarts.js + +*.html +!.stylelintrc.js diff --git a/packages/tdesign-uniapp-chat/.eslintrc.js b/packages/tdesign-uniapp-chat/.eslintrc.js new file mode 100644 index 000000000..ff525544c --- /dev/null +++ b/packages/tdesign-uniapp-chat/.eslintrc.js @@ -0,0 +1,24 @@ +module.exports = { + root: true, + extends: ['eslint-config-light-vue3'], + globals: { + getCurrentPages: true, + uni: true, + globalThis: true, + qq: true, + weex: true, + plus: true, + getApp: true, + }, + parserOptions: { + project: 'tsconfig.eslint.json', + // https://stackoverflow.com/questions/77792745/fatalerror-error-ts6046-argument-for-moduleresolution-option-must-be-nod + tsconfigRootDir: __dirname, + + ecmaVersion: 'latest', + extraFileExtensions: ['.vue'], + }, + rules: { + 'vue/no-v-text-v-html-on-component': 0, + }, +}; diff --git a/packages/tdesign-uniapp-chat/package.json b/packages/tdesign-uniapp-chat/package.json new file mode 100644 index 000000000..b9800a38e --- /dev/null +++ b/packages/tdesign-uniapp-chat/package.json @@ -0,0 +1,70 @@ +{ + "name": "tdesign-uniapp", + "version": "0.0.0", + "private": "true", + "homepage": "https://uwayfly.com/tdesign-uniapp/", + "bugs": { + "url": "https://github.com/Tencent/tdesign-miniprogram/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Tencent/tdesign-miniprogram.git" + }, + "scripts": { + "site": "pnpm --filter=\"./site\" build", + "site:dev": "pnpm --filter=\"./site\" run dev", + "site:preview": "pnpm --filter=\"./site\" run site:preview", + "type-check": "vue-tsc --noEmit", + "publish": "cd npm_dist && npm publish" + }, + "devDependencies": { + "@commitlint/cli": "^12.0.1", + "@commitlint/config-conventional": "^12.0.1", + "@dcloudio/types": "^3.4.19", + "@stylistic/eslint-plugin-jsx": "3.1.0", + "@types/node": "^24.2.0", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "@vue/runtime-core": "^3.4.21", + "@vue/tsconfig": "^0.7.0", + "concurrently": "^9.2.1", + "dotenv": "^17.2.3", + "echarts": "^6.0.0", + "eslint": "8.57.1", + "eslint-config-light": "latest", + "eslint-config-light-vue3": "latest", + "eslint-import-resolver-alias": "1.1.2", + "eslint-import-resolver-node": "0.3.9", + "eslint-plugin-import": "2.26.0", + "eslint-plugin-jest": "25", + "eslint-plugin-light": "latest", + "eslint-plugin-prettier": "4.2.1", + "eslint-plugin-react": "7.26.1", + "eslint-plugin-react-hooks": "4.2.0", + "eslint-plugin-tailwindcss": "3.18.0", + "eslint-plugin-vue": "9.14.0", + "glob": "^11.0.3", + "husky": "^6.0.0", + "less": "^4.4.2", + "lint-staged": "^10.5.4", + "miniprogram-api-typings": "^4.1.0", + "postcss-less": "^6.0.0", + "postcss-rpx-transform": "^1.0.1", + "stylelint": "14.16.1", + "stylelint-config-common": "1.0.10", + "stylelint-config-standard": "^39.0.1", + "stylelint-less": "^3.0.1", + "stylelint-scss": "6.10.0", + "t-comm": "^2.0.26", + "tslib": "^2.3.1", + "typescript": "5.1", + "vite": "5.2.8", + "vue-tsc": "^1.0.24", + "zrender": "^6.0.0" + }, + "lint-staged": { + "*.{ts,js,vue}": [ + "eslint --fix" + ] + } +} \ No newline at end of file diff --git a/packages/tdesign-uniapp-chat/shims-uni.d.ts b/packages/tdesign-uniapp-chat/shims-uni.d.ts new file mode 100644 index 000000000..9a8c66b04 --- /dev/null +++ b/packages/tdesign-uniapp-chat/shims-uni.d.ts @@ -0,0 +1,12 @@ +/* eslint-disable @typescript-eslint/no-empty-interface */ +/* eslint-disable import/no-unresolved */ +/// +import 'vue'; + +declare module '@vue/runtime-core' { + type Hooks = App.AppInstance & Page.PageInstance; + + interface ComponentCustomOptions extends Hooks { + + } +} diff --git a/packages/tdesign-uniapp-chat/site/.env.intranet b/packages/tdesign-uniapp-chat/site/.env.intranet new file mode 100644 index 000000000..995fca4af --- /dev/null +++ b/packages/tdesign-uniapp-chat/site/.env.intranet @@ -0,0 +1 @@ +NODE_ENV=production \ No newline at end of file diff --git a/packages/tdesign-uniapp-chat/site/.env.preview b/packages/tdesign-uniapp-chat/site/.env.preview new file mode 100644 index 000000000..c0d665211 --- /dev/null +++ b/packages/tdesign-uniapp-chat/site/.env.preview @@ -0,0 +1 @@ +NODE_ENV=development diff --git a/packages/tdesign-uniapp-chat/site/.env.production b/packages/tdesign-uniapp-chat/site/.env.production new file mode 100644 index 000000000..20f7e8ded --- /dev/null +++ b/packages/tdesign-uniapp-chat/site/.env.production @@ -0,0 +1 @@ +VUE_APP_PUBLICPATH = https://cdn.uwayfly.com/tdesign-uniapp-chat diff --git a/packages/tdesign-uniapp-chat/site/docs.config.js b/packages/tdesign-uniapp-chat/site/docs.config.js new file mode 100644 index 000000000..4193a5df5 --- /dev/null +++ b/packages/tdesign-uniapp-chat/site/docs.config.js @@ -0,0 +1,166 @@ +export const docs = [ + { + title: '开始', + titleEn: 'Start', + type: 'document', // 普通文档 + children: [ + { + title: '快速开始', + titleEn: 'Getting Started', + name: 'getting-started', + meta: { docType: 'explain' }, + path: '/tdesign-uniapp-chat/getting-started', + component: () => import('@docs/getting-started.md'), + }, + { + title: '更新日志', + titleEn: 'CHANGELOG', + name: 'changelog', + path: '/tdesign-uniapp-chat/changelog', + component: () => import('@/CHANGELOG.md'), + }, + { + title: '常见问题', + titleEn: 'FAQ', + name: 'faq', + path: '/tdesign-uniapp-chat/faq', + component: () => import('@docs/faq.md'), + }, + { + title: '什么是流式输出', + name: 'sse', + path: '/tdesign-uniapp-chat/sse', + component: () => import('@docs/sse.md'), + }, + ], + }, + { + title: '全局配置', + titleEn: 'Global Config', + type: 'document', + children: [ + { + title: '样式覆盖', + titleEn: 'Custom Style', + name: 'custom-style', + meta: { docType: 'explain' }, + path: '/tdesign-uniapp-chat/custom-style', + component: () => import('@docs/custom-style.md'), + }, + { + title: '自定义主题', + titleEn: 'Custom Theme', + name: 'custom-theme', + meta: { docType: 'explain' }, + path: '/tdesign-uniapp-chat/custom-theme', + component: () => import('@docs/custom-theme.md'), + }, + { + title: '深色模式', + titleEn: 'Dark Mode', + name: 'dark-mode', + meta: { docType: 'explain' }, + path: '/tdesign-uniapp-chat/dark-mode', + component: () => import('@docs/dark-mode.md'), + }, + ], + }, + { + title: '基础', + type: 'component', // 组件文档 + children: [ + { + title: 'ChatList 对话列表', + titleEn: 'ChatList', + name: 'ChatList 对话列表', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-list', + component: () => import('@/chat-list/README.md'), + }, + { + title: 'ChatSender 对话输入', + titleEn: 'ChatSender', + name: 'ChatSender 对话输入', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-sender', + component: () => import('@/chat-sender/README.md'), + }, + { + title: 'ChatMessage 对话消息体', + titleEn: 'ChatMessage', + name: 'ChatMessage 对话消息体', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-message', + component: () => import('@/chat-message/README.md'), + }, + { + title: 'ChatActionbar 对话操作', + titleEn: 'ChatActionbar', + name: 'ChatActionbar 对话操作', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-actionbar', + component: () => import('@/chat-actionbar/README.md'), + }, + { + title: 'ChatMarkdown Markdown内容', + titleEn: 'ChatMarkdown', + name: 'ChatMarkdown Markdown内容', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-markdown', + component: () => import('@/chat-markdown/README.md'), + componentEn: () => import('@/chat-markdown/README.en-US.md'), + }, + { + title: 'ChatThinking 思考过程', + titleEn: 'ChatThinking', + name: 'ChatThinking 思考过程', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-thinking', + component: () => import('@/chat-thinking/README.md'), + componentEn: () => import('@/chat-thinking/README.en-US.md'), + }, + { + title: 'ChatLoading 对话加载', + titleEn: 'ChatLoading', + name: 'ChatLoading 对话加载', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-loading', + component: () => import('@/chat-loading/README.md'), + componentEn: () => import('@/chat-loading/README.en-US.md'), + }, + { + title: 'Attachments 文件附件', + titleEn: 'Attachments', + name: 'Attachments 文件附件', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/attachments', + component: () => import('@/attachments/README.md'), + componentEn: () => import('@/attachments/README.en-US.md'), + }, + { + title: 'ChatContent 对话正文', + titleEn: 'ChatContent', + name: 'ChatContent 对话正文', + meta: { docType: 'base' }, + path: '/tdesign-uniapp-chat/components/chat-content', + component: () => import('@/chat-content/README.md'), + componentEn: () => import('@/chat-content/README.en-US.md'), + }, + ], + }, +]; + +export const enDocs = docs.map(doc => ({ + ...doc, + title: doc.titleEn || '', + children: doc?.children?.map(child => ({ + title: child.titleEn || '', + name: `${child.name}-en`, + path: `${child.path}-en`, + meta: { lang: 'en' }, + component: child.componentEn || child.component, + })), +})); + +export default { enDocs, docs }; + diff --git a/packages/tdesign-uniapp-chat/site/docs/custom-style.md b/packages/tdesign-uniapp-chat/site/docs/custom-style.md new file mode 100644 index 000000000..4f3df2fae --- /dev/null +++ b/packages/tdesign-uniapp-chat/site/docs/custom-style.md @@ -0,0 +1,117 @@ +--- +title: 样式覆盖 +description: TDesign 提供了多种方式可以实现样式覆盖 +spline: explain +--- + +TDesign UniApp 提供了 4 种方式用于样式覆盖 + +## 1 使用 Custom Style + +> TDesign 全部组件均支持 `custom-style` 属性。可传入 CSS 字符串,将会应用于组件的根元素。 + + + +### 开启 virtualHost + +在微信小程序基础库版本高于 2.19.2 的情况下,TDesign 会默认开启 `virtualHost` 属性。 + +此时 `custom-style` 和 `style` 的效果是一致的,任选其一即可: + +```html +填充按钮 + +填充按钮 +``` + +渲染的结果如下: + +```html +