diff --git a/.eslintrc.js b/.eslintrc.js
index 2adc439e07c..e235012d909 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -5,8 +5,7 @@ module.exports = {
'import',
'jest',
'react',
- 'simple-import-sort',
- 'prettier'
+ 'simple-import-sort'
],
extends: [
'eslint:recommended',
@@ -14,7 +13,6 @@ module.exports = {
'plugin:@typescript-eslint/recommended',
'plugin:react/jsx-runtime',
'plugin:react/recommended',
- 'prettier'
],
rules: {
'@typescript-eslint/ban-ts-comment': 0,
@@ -31,6 +29,10 @@ module.exports = {
'@typescript-eslint/no-use-before-define': [1, { functions: false, classes: false }],
'@typescript-eslint/no-var-requires': 0,
camelcase: 0,
+ 'eol-last': 0,
+ 'comma-dangle': 0,
+ 'no-mixed-operators': 0,
+ 'no-multiple-empty-lines': 0,
'import/first': 2,
'import/newline-after-import': 2,
'import/no-duplicates': 2,
diff --git a/.github/workflows/build-rust-binding.yml b/.github/workflows/build-rust-binding.yml
index c1e319397f4..e092c415b12 100644
--- a/.github/workflows/build-rust-binding.yml
+++ b/.github/workflows/build-rust-binding.yml
@@ -46,7 +46,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
- uses: pnpm/action-setup@v2.4.0
+ uses: pnpm/action-setup@v3.0.0
with:
version: 7
- name: Setup Node.js ${{ matrix.node-version }}
diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index 82a398b1573..ce148e64171 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -44,7 +44,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
- uses: pnpm/action-setup@v2.4.0
+ uses: pnpm/action-setup@v3.0.0
with:
version: 7
- name: Setup Node.js ${{ matrix.node-version }}
@@ -102,7 +102,7 @@ jobs:
# 以下 coverage 流程通过 artifact 拆分文件作为单独 job 上传时间损耗过长,因此在在 node test 后直接继续执行
- name: Upload [taro-cli] coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
with:
move_coverage_to_trash: true
@@ -110,7 +110,7 @@ jobs:
files: ./packages/taro-cli/coverage/clover.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload runner coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
with:
move_coverage_to_trash: true
@@ -118,7 +118,7 @@ jobs:
files: ./packages/taro-webpack5-runner/coverage/clover.xml,./packages/taro-webpack-runner/coverage/clover.xml,./packages/taro-mini-runner/coverage/clover.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload [taro-runtime] coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
with:
move_coverage_to_trash: true
@@ -126,7 +126,7 @@ jobs:
files: ./packages/taro-runtime/coverage/clover.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload [taro-web] coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
with:
move_coverage_to_trash: true
@@ -134,7 +134,7 @@ jobs:
files: ./packages/taro-components/coverage/clover.xml,./packages/taro-h5/coverage/clover.xml,./packages/taro-router/coverage/clover.xml
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload rest coverage to Codecov
- uses: codecov/codecov-action@v3
+ uses: codecov/codecov-action@v4
if: ${{ matrix.settings.host == 'ubuntu-latest' }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 8feaeda923e..93cb33d8f64 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -82,7 +82,7 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- name: Setup pnpm
- uses: pnpm/action-setup@v2.4.0
+ uses: pnpm/action-setup@v3.0.0
with:
version: 7
- name: Setup Node 16
diff --git a/.github/workflows/sync-components-types.yml b/.github/workflows/sync-components-types.yml
index b437f3c9ab0..a5597c8187e 100644
--- a/.github/workflows/sync-components-types.yml
+++ b/.github/workflows/sync-components-types.yml
@@ -34,7 +34,7 @@ jobs:
${{ runner.os }}-
- name: install
- uses: pnpm/action-setup@v2.4.0
+ uses: pnpm/action-setup@v3.0.0
with:
version: 7
run_install: |
diff --git a/.gitignore b/.gitignore
index 6a1460ae0b3..1e103109c87 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,6 +76,7 @@ common/autoinstallers/*/.npmrc
target/
debug/
+!packages/taro-platform-harmony-hybrid/src/api/apis/base/debug
# Binding artifacts
artifacts
@@ -84,4 +85,4 @@ artifacts
*.node
# harmony-hybrid extend-h5-apis file
-packages/taro-platform-harmony-hybrid/src/api/apis/extend-h5-apis.ts
\ No newline at end of file
+packages/taro-platform-harmony-hybrid/src/api/apis/extend-h5-apis.ts
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 40629da47a9..14c42a2afc8 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,16 +1,4 @@
{
- "eslint.validate": [
- "javascript",
- "javascriptreact",
- {
- "language": "typescript",
- "autoFix": true
- },
- {
- "language": "typescriptreact",
- "autoFix": true
- }
- ],
"search.exclude": {
"**/.git": true,
"**/node_modules": true,
diff --git a/crates/native_binding/package.json b/crates/native_binding/package.json
index 2ddde1a807d..64b74ec3256 100644
--- a/crates/native_binding/package.json
+++ b/crates/native_binding/package.json
@@ -1,6 +1,6 @@
{
"name": "@tarojs/binding",
- "version": "3.6.25",
+ "version": "3.6.29",
"description": "Node binding for taro",
"main": "binding.js",
"typings": "binding.d.ts",
diff --git a/crates/swc_plugin_compile_mode/src/tests/attributes.rs b/crates/swc_plugin_compile_mode/src/tests/attributes.rs
index bfeab582ee2..ddc9de82f4f 100644
--- a/crates/swc_plugin_compile_mode/src/tests/attributes.rs
+++ b/crates/swc_plugin_compile_mode/src/tests/attributes.rs
@@ -27,7 +27,7 @@ test!(
-
+
diff --git a/crates/swc_plugin_compile_mode/src/transform.rs b/crates/swc_plugin_compile_mode/src/transform.rs
index 523d9ffa857..e17c62a3fa5 100644
--- a/crates/swc_plugin_compile_mode/src/transform.rs
+++ b/crates/swc_plugin_compile_mode/src/transform.rs
@@ -376,7 +376,9 @@ impl TransformVisitor {
}
// 小程序组件标准属性 -> 取 @tarojs/shared 传递过来的属性值;非标准属性 -> 取属性名
- let value: &str = attrs_map.get(&miniapp_attr_name).unwrap_or(&jsx_attr_name);
+ let value: &str = attrs_map.get(&miniapp_attr_name)
+ .map(|res| res.as_str())
+ .unwrap_or(if miniapp_attr_name == "id" { "uid" } else { &jsx_attr_name });
// 按当前节点在节点树中的位置换算路径
node_path.push('.');
let value = if value.contains(TMPL_DATA_ROOT) {
diff --git a/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_handle_events.js b/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_handle_events.js
index ce536eb00b8..2a9fea02d0b 100644
--- a/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_handle_events.js
+++ b/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_handle_events.js
@@ -1,4 +1,4 @@
-const TARO_TEMPLATES_f0t0 = '';
+const TARO_TEMPLATES_f0t0 = '';
function Index() {
return
diff --git a/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_turn_dynamic_attrs.js b/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_turn_dynamic_attrs.js
index 846b9f5233a..236b82458a1 100644
--- a/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_turn_dynamic_attrs.js
+++ b/crates/swc_plugin_compile_mode/tests/__swc_snapshots__/src/tests/attributes.rs/should_turn_dynamic_attrs.js
@@ -1,10 +1,10 @@
-const TARO_TEMPLATES_f0t0 = '';
+const TARO_TEMPLATES_f0t0 = '';
function Index() {
return
-
+
;
diff --git a/examples/blended-taro-component-vue3/h5/package.json b/examples/blended-taro-component-vue3/h5/package.json
index ef0b47f7035..6a5bda64775 100644
--- a/examples/blended-taro-component-vue3/h5/package.json
+++ b/examples/blended-taro-component-vue3/h5/package.json
@@ -60,7 +60,7 @@
"style-loader": "1.3.0",
"stylelint": "^14.4.0",
"typescript": "^4.1.0",
- "vue-loader": "^17.0.0",
+ "vue-loader": "^17.1.0",
"webpack": "5.78.0"
}
}
diff --git a/examples/blended-taro-component-vue3/taro-project/package.json b/examples/blended-taro-component-vue3/taro-project/package.json
index dff3abdd5cc..e034a17ec9f 100644
--- a/examples/blended-taro-component-vue3/taro-project/package.json
+++ b/examples/blended-taro-component-vue3/taro-project/package.json
@@ -68,7 +68,7 @@
"ts-node": "^10.9.1",
"tsconfig-paths-webpack-plugin": "^4.1.0",
"typescript": "^5.1.0",
- "vue-loader": "^17.0.0",
+ "vue-loader": "^17.1.0",
"webpack": "5.78.0"
}
}
diff --git a/examples/mini-program-example/.editorconfig b/examples/mini-program-example/.editorconfig
new file mode 100644
index 00000000000..5760be58369
--- /dev/null
+++ b/examples/mini-program-example/.editorconfig
@@ -0,0 +1,12 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/examples/mini-program-example/.eslintrc b/examples/mini-program-example/.eslintrc
new file mode 100644
index 00000000000..c9c31c176f5
--- /dev/null
+++ b/examples/mini-program-example/.eslintrc
@@ -0,0 +1,13 @@
+{
+ "extends": ["taro/react"],
+ "rules": {
+ "react/jsx-uses-react": "off",
+ "react/react-in-jsx-scope": "off",
+ "@typescript-eslint/no-unused-expressions": "off",
+ "import/first": "off",
+ "no-unused-vars": "off",
+ "@typescript-eslint/no-unused-vars": "off",
+ "@typescript-eslint/no-shadow": "off",
+ "react/forbid-elements": "off"
+ }
+}
diff --git a/examples/mini-program-example/.gitignore b/examples/mini-program-example/.gitignore
new file mode 100644
index 00000000000..331e8f6f4da
--- /dev/null
+++ b/examples/mini-program-example/.gitignore
@@ -0,0 +1,7 @@
+dist/
+deploy_versions/
+.temp/
+.rn_temp/
+node_modules/
+.DS_Store
+.swc
\ No newline at end of file
diff --git a/examples/mini-program-example/.prettierrc b/examples/mini-program-example/.prettierrc
new file mode 100644
index 00000000000..0b9ec4ffff8
--- /dev/null
+++ b/examples/mini-program-example/.prettierrc
@@ -0,0 +1,14 @@
+{
+ "printWidth": 120,
+ "singleQuote": true,
+ "useTabs": false,
+ "tabWidth": 2,
+ "semi": false,
+ "quoteProps": "as-needed",
+ "trailingComma": "es5",
+ "bracketSpacing": true,
+ "jsxSingleQuote": true,
+ "jsxBracketSameLine": false,
+ "arrowParens": "always",
+ "endOfLine": "auto"
+}
\ No newline at end of file
diff --git a/examples/mini-program-example/babel.config.js b/examples/mini-program-example/babel.config.js
new file mode 100644
index 00000000000..f3acb812f5a
--- /dev/null
+++ b/examples/mini-program-example/babel.config.js
@@ -0,0 +1,10 @@
+// babel-preset-taro 更多选项和默认值:
+// https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
+module.exports = {
+ presets: [
+ ['taro', {
+ framework: 'react',
+ ts: true
+ }]
+ ]
+}
diff --git a/examples/mini-program-example/config/dev.js b/examples/mini-program-example/config/dev.js
new file mode 100644
index 00000000000..6821bf8e47d
--- /dev/null
+++ b/examples/mini-program-example/config/dev.js
@@ -0,0 +1,9 @@
+module.exports = {
+ env: {
+ NODE_ENV: '"development"'
+ },
+ defineConstants: {
+ },
+ mini: {},
+ h5: {}
+}
diff --git a/examples/mini-program-example/config/index.js b/examples/mini-program-example/config/index.js
new file mode 100644
index 00000000000..03f52196110
--- /dev/null
+++ b/examples/mini-program-example/config/index.js
@@ -0,0 +1,96 @@
+const path = require('path')
+
+const config = {
+ projectName: 'mini-program-example',
+ date: '2023-6-15',
+ designWidth: 750,
+ deviceRatio: {
+ 640: 2.34 / 2,
+ 750: 1,
+ 828: 1.81 / 2
+ },
+ sourceRoot: 'src',
+ outputRoot: `dist/spa/main`,
+ plugins: [],
+ alias: {
+ '@/util': path.resolve(__dirname, '..', 'src/util'),
+ '@/styles': path.resolve(__dirname, '..', 'src/styles'),
+ '@/assets': path.resolve(__dirname, '..', 'src/assets'),
+ '@/components': path.resolve(__dirname, '..', 'src/components'),
+ },
+ defineConstants: {
+ },
+ copy: {
+ patterns: [
+ ],
+ options: {
+ }
+ },
+ framework: 'react',
+ compiler: 'webpack5',
+ cache: {
+ enable: false // Webpack 持久化缓存配置,建议开启。默认配置请参考:https://docs.taro.zone/docs/config-detail#cache
+ },
+ mini: {
+ postcss: {
+ pxtransform: {
+ enable: true,
+ config: {
+
+ }
+ },
+ url: {
+ enable: true,
+ config: {
+ limit: 1024 // 设定转换尺寸上限
+ }
+ },
+ cssModules: {
+ enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
+ config: {
+ namingPattern: 'module', // 转换模式,取值为 global/module
+ generateScopedName: '[name]__[local]___[hash:base64:5]'
+ }
+ }
+ },
+ imageUrlLoaderOption:{
+ limit:8192
+ }
+ },
+ h5: {
+ publicPath: '/spa/main/',
+ staticDirectory: 'static',
+ postcss: {
+ autoprefixer: {
+ enable: true,
+ config: {
+ }
+ },
+ cssModules: {
+ enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
+ config: {
+ namingPattern: 'module', // 转换模式,取值为 global/module
+ generateScopedName: '[name]__[local]___[hash:base64:5]'
+ }
+ }
+ },
+ imageUrlLoaderOption:{
+ limit:8192
+ }
+ },
+ rn: {
+ appName: 'taroDemo',
+ postcss: {
+ cssModules: {
+ enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
+ }
+ }
+ }
+}
+
+module.exports = function (merge) {
+ if (process.env.NODE_ENV === 'development') {
+ return merge({}, config, require('./dev'))
+ }
+ return merge({}, config, require('./prod'))
+}
diff --git a/examples/mini-program-example/config/prod.js b/examples/mini-program-example/config/prod.js
new file mode 100644
index 00000000000..e1486661d96
--- /dev/null
+++ b/examples/mini-program-example/config/prod.js
@@ -0,0 +1,37 @@
+module.exports = {
+ env: {
+ NODE_ENV: '"production"'
+ },
+ defineConstants: {
+ },
+ mini: {},
+ h5: {
+ /**
+ * WebpackChain 插件配置
+ * @docs https://github.com/neutrinojs/webpack-chain
+ */
+ // webpackChain (chain) {
+ // /**
+ // * 如果 h5 端编译后体积过大,可以使用 webpack-bundle-analyzer 插件对打包体积进行分析。
+ // * @docs https://github.com/webpack-contrib/webpack-bundle-analyzer
+ // */
+ // chain.plugin('analyzer')
+ // .use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin, [])
+
+ // /**
+ // * 如果 h5 端首屏加载时间过长,可以使用 prerender-spa-plugin 插件预加载首页。
+ // * @docs https://github.com/chrisvfritz/prerender-spa-plugin
+ // */
+ // const path = require('path')
+ // const Prerender = require('prerender-spa-plugin')
+ // const staticDir = path.join(__dirname, '..', 'dist')
+ // chain
+ // .plugin('prerender')
+ // .use(new Prerender({
+ // staticDir,
+ // routes: [ '/pages/index/index' ],
+ // postProcess: (context) => ({ ...context, outputPath: path.join(staticDir, 'index.html') })
+ // }))
+ // }
+ }
+}
diff --git a/examples/mini-program-example/package.json b/examples/mini-program-example/package.json
new file mode 100644
index 00000000000..018d091f750
--- /dev/null
+++ b/examples/mini-program-example/package.json
@@ -0,0 +1,86 @@
+{
+ "name": "mini-program-example",
+ "version": "1.0.0",
+ "private": true,
+ "description": "小程序demo",
+ "templateInfo": {
+ "name": "default",
+ "typescript": true,
+ "css": "sass"
+ },
+ "scripts": {
+ "lint": "eslint src --ext .js --ext .jsx --ext .ts --ext .tsx",
+ "format": "prettier --write \"src/**/*.{ts,tsx,js,jsx}\" && eslint src --ext .js --ext .jsx --ext .ts --ext .tsx --fix",
+ "build:weapp": "taro build --type weapp",
+ "build:swan": "taro build --type swan",
+ "build:alipay": "taro build --type alipay",
+ "build:tt": "taro build --type tt",
+ "build:h5": "taro build --type h5",
+ "build:rn": "taro build --type rn",
+ "build:qq": "taro build --type qq",
+ "build:jd": "taro build --type jd",
+ "build:quickapp": "taro build --type quickapp",
+ "build:harmony-hybrid": "taro build --type harmony-hybrid",
+ "dev:weapp": "npm run build:weapp -- --watch",
+ "dev:swan": "npm run build:swan -- --watch",
+ "dev:alipay": "npm run build:alipay -- --watch",
+ "dev:tt": "npm run build:tt -- --watch",
+ "dev:h5": "npm run build:h5 -- --watch",
+ "dev:rn": "npm run build:rn -- --watch",
+ "dev:qq": "npm run build:qq -- --watch",
+ "dev:jd": "npm run build:jd -- --watch",
+ "dev:quickapp": "npm run build:quickapp -- --watch",
+ "dev:harmony-hybrid": "npm run build:harmony-hybrid -- --watch",
+ "clear:harmony-hybrid": "rm -rf node_modules/.taro/harmony-hybrid && npm run dev:harmony-hybrid",
+ "rebuild": "cd ../../packages/%npm_config_package% && pnpm build && cd ../../examples/mini-program-example && rimraf node_modules && pnpm install"
+ },
+ "browserslist": [
+ "last 3 versions",
+ "Android >= 4.1",
+ "ios >= 8"
+ ],
+ "author": "",
+ "dependencies": {
+ "@babel/runtime": "^7.14.5",
+ "@tarojs/components": "workspace:*",
+ "@tarojs/helper": "workspace:*",
+ "@tarojs/plugin-platform-weapp": "workspace:*",
+ "@tarojs/plugin-platform-alipay": "workspace:*",
+ "@tarojs/plugin-platform-tt": "workspace:*",
+ "@tarojs/plugin-platform-swan": "workspace:*",
+ "@tarojs/plugin-platform-jd": "workspace:*",
+ "@tarojs/plugin-platform-qq": "workspace:*",
+ "@tarojs/plugin-platform-h5": "workspace:*",
+ "@tarojs/plugin-platform-harmony-hybrid": "workspace:*",
+ "@tarojs/runtime": "workspace:*",
+ "@tarojs/shared": "workspace:*",
+ "@tarojs/taro": "workspace:*",
+ "@tarojs/plugin-framework-react": "workspace:*",
+ "@tarojs/react": "workspace:*",
+ "react-dom": "^18.2.0",
+ "react": "^18.2.0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.8.0",
+ "@tarojs/cli": "workspace:*",
+ "@types/webpack-env": "^1.13.6",
+ "@types/react": "^18.2.0",
+ "webpack": "5.78.0",
+ "@tarojs/webpack5-runner": "workspace:*",
+ "babel-preset-taro": "workspace:*",
+ "eslint-config-taro": "workspace:*",
+ "eslint": "^8.12.0",
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5",
+ "react-refresh": "^0.11.0",
+ "eslint-plugin-react": "^7.8.2",
+ "eslint-plugin-import": "^2.12.0",
+ "eslint-plugin-react-hooks": "^4.2.0",
+ "stylelint": "^14.4.0",
+ "@typescript-eslint/parser": "^5.20.0",
+ "@typescript-eslint/eslint-plugin": "^5.20.0",
+ "typescript": "^4.1.0",
+ "postcss": "^8.4.18",
+ "ts-node": "^10.9.1",
+ "@types/node": "^18.15.11"
+ }
+}
diff --git a/examples/mini-program-example/project.config.json b/examples/mini-program-example/project.config.json
new file mode 100644
index 00000000000..8f6409b7da1
--- /dev/null
+++ b/examples/mini-program-example/project.config.json
@@ -0,0 +1,32 @@
+{
+ "miniprogramRoot": "dist/",
+ "projectname": "mini-program-example",
+ "description": "小程序demo",
+ "appid": "wx16ae4838cf116f8f",
+ "setting": {
+ "urlCheck": true,
+ "es6": false,
+ "enhance": false,
+ "compileHotReLoad": false,
+ "postcss": false,
+ "minified": false,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "condition": false
+ },
+ "compileType": "miniprogram",
+ "libVersion": "3.0.0",
+ "srcMiniprogramRoot": "dist/",
+ "packOptions": {
+ "ignore": [],
+ "include": []
+ },
+ "condition": {},
+ "editorSetting": {
+ "tabIndent": "insertSpaces",
+ "tabSize": 2
+ }
+}
diff --git a/examples/mini-program-example/project.private.config.json b/examples/mini-program-example/project.private.config.json
new file mode 100644
index 00000000000..76705881346
--- /dev/null
+++ b/examples/mini-program-example/project.private.config.json
@@ -0,0 +1,7 @@
+{
+ "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+ "projectname": "mini-program-example",
+ "setting": {
+ "compileHotReLoad": true
+ }
+}
diff --git a/examples/mini-program-example/project.tt.json b/examples/mini-program-example/project.tt.json
new file mode 100644
index 00000000000..72f4fc57910
--- /dev/null
+++ b/examples/mini-program-example/project.tt.json
@@ -0,0 +1,9 @@
+{
+ "miniprogramRoot": "./",
+ "projectname": "mini-program-example",
+ "appid": "testAppId",
+ "setting": {
+ "es6": false,
+ "minified": false
+ }
+}
diff --git a/examples/mini-program-example/src/app.config.ts b/examples/mini-program-example/src/app.config.ts
new file mode 100644
index 00000000000..847d1653cc3
--- /dev/null
+++ b/examples/mini-program-example/src/app.config.ts
@@ -0,0 +1,185 @@
+export default defineAppConfig({
+ pages: [
+ 'pages/index/index',
+ 'pages/error/index',
+ 'pages/component/index/index',
+ 'pages/component/cover-image/cover-image',
+ 'pages/component/cover-view/cover-view',
+ 'pages/component/view/view',
+ 'pages/component/scroll-view/scroll-view',
+ 'pages/component/swiper/swiper',
+ 'pages/component/text/text',
+ 'pages/component/icon/icon',
+ 'pages/component/progress/progress',
+ 'pages/component/button/button',
+ 'pages/component/checkbox/checkbox',
+ 'pages/component/form/form',
+ 'pages/component/input/input',
+ 'pages/component/label/label',
+ 'pages/component/picker/picker',
+ 'pages/component/picker-view/picker-view',
+ 'pages/component/radio/radio',
+ 'pages/component/switch/switch',
+ 'pages/component/textarea/textarea',
+ 'pages/component/navigator/navigator',
+ 'pages/component/audio/audio',
+ 'pages/component/camera/camera',
+ 'pages/component/image/image',
+ 'pages/component/video/video',
+ 'pages/component/live-player/live-player',
+ 'pages/component/map/map',
+ 'pages/component/canvas/canvas',
+ 'pages/component/slider/slider',
+ 'pages/component/grid-view/grid-view',
+ 'pages/component/grid-view/demo1',
+ 'pages/component/grid-view/demo2',
+ 'pages/component/list-view/list-view',
+ 'pages/component/page-container/page-container',
+ 'pages/component/radio-group/radio-group',
+ 'pages/component/checkbox-group/checkbox-group',
+ 'pages/component/match-media/match-media',
+ 'pages/component/movable-view/movable-view',
+ 'pages/component/sticky-header/sticky-header',
+ 'pages/component/root-portal/root-portal',
+ 'pages/component/editor/editor',
+ 'pages/component/share-element/share-element',
+ 'pages/api/index/index',
+ 'pages/api/advertising/index',
+ 'pages/api/ai/inference/index',
+ 'pages/api/ai/visionAlgorithms/index',
+ 'pages/api/ai/faceRecognition/index',
+ 'pages/api/alipay/index',
+ 'pages/api/analysis/index',
+ 'pages/api/basics/basics/index',
+ 'pages/api/basics/nativeDebug/index',
+ 'pages/api/basics/encryption/index',
+ 'pages/api/basics/miniProgram/index',
+ 'pages/api/basics/performance/index',
+ 'pages/api/basics/system/index',
+ 'pages/api/basics/update/index',
+ 'pages/api/cache/index',
+ 'pages/api/canvas/index',
+ 'pages/api/cloudServices/index',
+ 'pages/api/device/bluetoothGeneral/index',
+ 'pages/api/device/bluetoothLowCenter/index',
+ 'pages/api/device/bluetoothLowPerpherals/index',
+ 'pages/api/device/bluetoothBeacon/index',
+ 'pages/api/device/nfc/index',
+ 'pages/api/device/wifi/index',
+ 'pages/api/device/calendar/index',
+ 'pages/api/device/contact/index',
+ 'pages/api/device/accessibility/index',
+ 'pages/api/device/bettery/index',
+ 'pages/api/device/clipBoard/index',
+ 'pages/api/device/network/index',
+ 'pages/api/device/screen/index',
+ 'pages/api/device/keyboard/index',
+ 'pages/api/device/phoneCall/index',
+ 'pages/api/device/accelerometer/index',
+ 'pages/api/device/compass/index',
+ 'pages/api/device/deviceOrientation/index',
+ 'pages/api/device/gyroscope/index',
+ 'pages/api/device/memory/index',
+ 'pages/api/device/scan/index',
+ 'pages/api/device/sms/index',
+ 'pages/api/device/vibration/index',
+ 'pages/api/file/index',
+ 'pages/api/forward/index',
+ 'pages/api/framework/index',
+ 'pages/api/interface/interaction/index',
+ 'pages/api/interface/navigationBar/index',
+ 'pages/api/interface/background/index',
+ 'pages/api/interface/font/index',
+ 'pages/api/interface/pullDownRefresh/index',
+ 'pages/api/interface/scroll/index',
+ 'pages/api/interface/animation/index',
+ 'pages/api/interface/setTop/index',
+ 'pages/api/interface/customizedComponents/index',
+ 'pages/api/interface/menu/index',
+ 'pages/api/interface/windows/index',
+ 'pages/api/location/index',
+ 'pages/api/media/map/index',
+ 'pages/api/media/image/index',
+ 'pages/api/media/video/index',
+ 'pages/api/media/audio/index',
+ 'pages/api/media/backgroundAudio/index',
+ 'pages/api/media/realtimeAudioAndVideo/index',
+ 'pages/api/media/recording/index',
+ 'pages/api/media/camera/index',
+ 'pages/api/media/richText/index',
+ 'pages/api/media/audioOrVideoCompose/index',
+ 'pages/api/media/realtimeVoice/index',
+ 'pages/api/media/screenRecorder/index',
+ 'pages/api/media/videoDecoder/index',
+ 'pages/api/network/request/index',
+ 'pages/api/network/download/index',
+ 'pages/api/network/upload/index',
+ 'pages/api/network/webSocket/index',
+ 'pages/api/network/mDNS/index',
+ 'pages/api/network/TCPCommunications/index',
+ 'pages/api/network/UDPCommunications/index',
+ 'pages/api/openAPIS/login/index',
+ 'pages/api/openAPIS/accountInfomation/index',
+ 'pages/api/openAPIS/userInfomation/index',
+ 'pages/api/openAPIS/authorization/index',
+ 'pages/api/openAPIS/setting/index',
+ 'pages/api/openAPIS/recipientAddress/index',
+ 'pages/api/openAPIS/cardsAndOffers/index',
+ 'pages/api/openAPIS/invoice/index',
+ 'pages/api/openAPIS/biometricAuthorization/index',
+ 'pages/api/openAPIS/weRun/index',
+ 'pages/api/openAPIS/subscribeNews/index',
+ 'pages/api/openAPIS/wechatRedRacket/index',
+ 'pages/api/openAPIS/collection/index',
+ 'pages/api/openAPIS/mineMiniProgram/index',
+ 'pages/api/openAPIS/licensePlate/index',
+ 'pages/api/openAPIS/wechatVideoChannel/index',
+ 'pages/api/openAPIS/deviceVoip/index',
+ 'pages/api/openAPIS/wechatGroup/index',
+ 'pages/api/openAPIS/wechatCustomerService/index',
+ 'pages/api/payment/index',
+ 'pages/api/qq/index',
+ 'pages/api/redirection/index',
+ 'pages/api/routing/index',
+ 'pages/api/routing/routeA/index',
+ 'pages/api/swan/index',
+ 'pages/api/taro/expand/index',
+ 'pages/api/taro/hooks/index',
+ 'pages/api/thirdParty/index',
+ 'pages/api/worker/index',
+ 'pages/api/wxml/index',
+ 'pages/performance/index/index'
+ ],
+ tabBar: {
+ color: '#7A7E83',
+ selectedColor: '#1F69FF',
+ borderStyle: 'black',
+ backgroundColor: 'F7F7F7',
+ list: [
+ {
+ pagePath: 'pages/component/index/index',
+ iconPath: 'assets/tab/component.png',
+ selectedIconPath: 'assets/tab/component_select.png',
+ text: '组件',
+ },
+ {
+ pagePath: 'pages/index/index',
+ iconPath: 'assets/tab/home.png',
+ selectedIconPath: 'assets/tab/home_select.png',
+ text: '首页',
+ },
+ {
+ pagePath: 'pages/api/index/index',
+ iconPath: 'assets/tab/api.png',
+ selectedIconPath: 'assets/tab/api_select.png',
+ text: '接口',
+ },
+ ],
+ },
+ window: {
+ backgroundTextStyle: 'light',
+ navigationBarBackgroundColor: '#F7F7F7',
+ navigationBarTitleText: 'Harmony',
+ navigationBarTextStyle: 'black',
+ },
+})
diff --git a/examples/mini-program-example/src/app.scss b/examples/mini-program-example/src/app.scss
new file mode 100644
index 00000000000..f170d325e90
--- /dev/null
+++ b/examples/mini-program-example/src/app.scss
@@ -0,0 +1,37 @@
+@import '@/styles/variables.scss';
+
+.api-page {
+ box-sizing: border-box;
+ padding: 40px;
+ height: 100%;
+}
+
+.test-style {
+ color: #f5f5f5;
+ background-color: $color-success;
+}
+
+.tag {
+ display: inline-block;
+ text-align: center;
+ width: 120px;
+ padding: 5px 5px;
+ border: 1px solid red;
+ border-radius: 5px;
+ color: red;
+ font-size: 20px;
+ margin: 5px;
+}
+
+.navigator {
+ padding: 20px 30px;
+ position: relative;
+ display: flex;
+ align-items: center;
+ transition: 0.3s;
+ }
+
+.navigator:active {
+ background-color: $color-grey-5;
+ opacity: 0.2;
+}
\ No newline at end of file
diff --git a/examples/mini-program-example/src/app.ts b/examples/mini-program-example/src/app.ts
new file mode 100644
index 00000000000..2c34853faba
--- /dev/null
+++ b/examples/mini-program-example/src/app.ts
@@ -0,0 +1,55 @@
+import React from 'react'
+import Taro from '@tarojs/taro'
+import { TestConsole } from '@/util/util'
+import './app.scss'
+
+class App extends React.Component {
+ onLaunch(res) {
+ if (res) {
+ Taro.setStorageSync('onLaunch', res)
+ } else {
+ Taro.setStorageSync('onLaunch', 'Triggered')
+ }
+ TestConsole.consoleNormal('onLaunch', res)
+ }
+
+ onError(error) {
+ if (error) {
+ Taro.setStorageSync('onError', error)
+ } else {
+ Taro.setStorageSync('onError', 'Triggered')
+ }
+ TestConsole.consoleNormal('onError', error)
+ Taro.showToast({
+ title: 'onError',
+ icon: 'error',
+ })
+ }
+
+ onPageNotFound(res) {
+ if (res) {
+ Taro.setStorageSync('onPageNotFound', res)
+ } else {
+ Taro.setStorageSync('onPageNotFound', 'Triggered')
+ }
+ TestConsole.consoleNormal('onPageNotFound', res)
+ Taro.navigateTo({
+ url: 'pages/error/index',
+ })
+ }
+
+ componentDidShow(res) {
+ TestConsole.consoleNormal('App componentDidShow', res)
+ }
+
+ componentDidHide() {
+ TestConsole.consoleNormal('App componentDidHide')
+ }
+
+ render() {
+ // this.props.children 是将要会渲染的页面
+ return this.props.children
+ }
+}
+
+export default App
diff --git a/examples/mini-program-example/src/assets/api/AI.png b/examples/mini-program-example/src/assets/api/AI.png
new file mode 100644
index 00000000000..9fd4b8d15ac
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/AI.png differ
diff --git a/examples/mini-program-example/src/assets/api/advertising.png b/examples/mini-program-example/src/assets/api/advertising.png
new file mode 100644
index 00000000000..b5b0826a168
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/advertising.png differ
diff --git a/examples/mini-program-example/src/assets/api/alipay.png b/examples/mini-program-example/src/assets/api/alipay.png
new file mode 100644
index 00000000000..fa8e5181a94
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/alipay.png differ
diff --git a/examples/mini-program-example/src/assets/api/analysis.png b/examples/mini-program-example/src/assets/api/analysis.png
new file mode 100644
index 00000000000..5f824d64ab8
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/analysis.png differ
diff --git a/examples/mini-program-example/src/assets/api/cache.png b/examples/mini-program-example/src/assets/api/cache.png
new file mode 100644
index 00000000000..e716cf187e8
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/cache.png differ
diff --git a/examples/mini-program-example/src/assets/api/canvas.png b/examples/mini-program-example/src/assets/api/canvas.png
new file mode 100644
index 00000000000..a9a11d7a66a
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/canvas.png differ
diff --git a/examples/mini-program-example/src/assets/api/cloud.png b/examples/mini-program-example/src/assets/api/cloud.png
new file mode 100644
index 00000000000..53a4e5c14f4
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/cloud.png differ
diff --git a/examples/mini-program-example/src/assets/api/devices.png b/examples/mini-program-example/src/assets/api/devices.png
new file mode 100644
index 00000000000..827aee51e43
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/devices.png differ
diff --git a/examples/mini-program-example/src/assets/api/file.png b/examples/mini-program-example/src/assets/api/file.png
new file mode 100644
index 00000000000..8bf29fca2f1
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/file.png differ
diff --git a/examples/mini-program-example/src/assets/api/forward.png b/examples/mini-program-example/src/assets/api/forward.png
new file mode 100644
index 00000000000..84b41f2950c
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/forward.png differ
diff --git a/examples/mini-program-example/src/assets/api/frame.png b/examples/mini-program-example/src/assets/api/frame.png
new file mode 100644
index 00000000000..cabe80db3a8
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/frame.png differ
diff --git a/examples/mini-program-example/src/assets/api/interface.png b/examples/mini-program-example/src/assets/api/interface.png
new file mode 100644
index 00000000000..f461ad371a9
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/interface.png differ
diff --git a/examples/mini-program-example/src/assets/api/iphone.png b/examples/mini-program-example/src/assets/api/iphone.png
new file mode 100644
index 00000000000..288291a3086
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/iphone.png differ
diff --git a/examples/mini-program-example/src/assets/api/local.png b/examples/mini-program-example/src/assets/api/local.png
new file mode 100644
index 00000000000..cf8cc40fa04
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/local.png differ
diff --git a/examples/mini-program-example/src/assets/api/logo.png b/examples/mini-program-example/src/assets/api/logo.png
new file mode 100644
index 00000000000..3a26136014c
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/logo.png differ
diff --git a/examples/mini-program-example/src/assets/api/media.png b/examples/mini-program-example/src/assets/api/media.png
new file mode 100644
index 00000000000..0d82eb31d4e
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/media.png differ
diff --git a/examples/mini-program-example/src/assets/api/network.png b/examples/mini-program-example/src/assets/api/network.png
new file mode 100644
index 00000000000..d7313b12c47
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/network.png differ
diff --git a/examples/mini-program-example/src/assets/api/openapi.png b/examples/mini-program-example/src/assets/api/openapi.png
new file mode 100644
index 00000000000..da04b5702e8
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/openapi.png differ
diff --git a/examples/mini-program-example/src/assets/api/payment.png b/examples/mini-program-example/src/assets/api/payment.png
new file mode 100644
index 00000000000..e6ecf00625e
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/payment.png differ
diff --git a/examples/mini-program-example/src/assets/api/qq.png b/examples/mini-program-example/src/assets/api/qq.png
new file mode 100644
index 00000000000..cc5700df4bd
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/qq.png differ
diff --git a/examples/mini-program-example/src/assets/api/redirection.png b/examples/mini-program-example/src/assets/api/redirection.png
new file mode 100644
index 00000000000..b67780ef2f0
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/redirection.png differ
diff --git a/examples/mini-program-example/src/assets/api/routing.png b/examples/mini-program-example/src/assets/api/routing.png
new file mode 100644
index 00000000000..0ba0b529be5
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/routing.png differ
diff --git a/examples/mini-program-example/src/assets/api/swan.png b/examples/mini-program-example/src/assets/api/swan.png
new file mode 100644
index 00000000000..c8917b87cea
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/swan.png differ
diff --git a/examples/mini-program-example/src/assets/api/taro.png b/examples/mini-program-example/src/assets/api/taro.png
new file mode 100644
index 00000000000..85e79b551f5
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/taro.png differ
diff --git a/examples/mini-program-example/src/assets/api/thirdparty.png b/examples/mini-program-example/src/assets/api/thirdparty.png
new file mode 100644
index 00000000000..c2157b54bac
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/thirdparty.png differ
diff --git a/examples/mini-program-example/src/assets/api/worker.png b/examples/mini-program-example/src/assets/api/worker.png
new file mode 100644
index 00000000000..8b32e0df841
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/worker.png differ
diff --git a/examples/mini-program-example/src/assets/api/wxml.png b/examples/mini-program-example/src/assets/api/wxml.png
new file mode 100644
index 00000000000..7eb4b9fcfb4
Binary files /dev/null and b/examples/mini-program-example/src/assets/api/wxml.png differ
diff --git a/examples/mini-program-example/src/assets/component/canvas.png b/examples/mini-program-example/src/assets/component/canvas.png
new file mode 100644
index 00000000000..21b38cb5814
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/canvas.png differ
diff --git a/examples/mini-program-example/src/assets/component/content.png b/examples/mini-program-example/src/assets/component/content.png
new file mode 100644
index 00000000000..817fa6993d5
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/content.png differ
diff --git a/examples/mini-program-example/src/assets/component/form.png b/examples/mini-program-example/src/assets/component/form.png
new file mode 100644
index 00000000000..a47bd243b6b
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/form.png differ
diff --git a/examples/mini-program-example/src/assets/component/logo.png b/examples/mini-program-example/src/assets/component/logo.png
new file mode 100644
index 00000000000..c77866090d8
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/logo.png differ
diff --git a/examples/mini-program-example/src/assets/component/map.png b/examples/mini-program-example/src/assets/component/map.png
new file mode 100644
index 00000000000..e205568ba8c
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/map.png differ
diff --git a/examples/mini-program-example/src/assets/component/media.png b/examples/mini-program-example/src/assets/component/media.png
new file mode 100644
index 00000000000..62e54cdc1eb
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/media.png differ
diff --git a/examples/mini-program-example/src/assets/component/nav.png b/examples/mini-program-example/src/assets/component/nav.png
new file mode 100644
index 00000000000..24e15b307d4
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/nav.png differ
diff --git a/examples/mini-program-example/src/assets/component/nav_red.png b/examples/mini-program-example/src/assets/component/nav_red.png
new file mode 100644
index 00000000000..4f3879faeaa
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/nav_red.png differ
diff --git a/examples/mini-program-example/src/assets/component/view.png b/examples/mini-program-example/src/assets/component/view.png
new file mode 100644
index 00000000000..03c900331da
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/view.png differ
diff --git a/examples/mini-program-example/src/assets/component/view_red.png b/examples/mini-program-example/src/assets/component/view_red.png
new file mode 100644
index 00000000000..4fd0acd72a9
Binary files /dev/null and b/examples/mini-program-example/src/assets/component/view_red.png differ
diff --git a/examples/mini-program-example/src/assets/tab/api.png b/examples/mini-program-example/src/assets/tab/api.png
new file mode 100644
index 00000000000..ba12ce45ba4
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/api.png differ
diff --git a/examples/mini-program-example/src/assets/tab/api_select.png b/examples/mini-program-example/src/assets/tab/api_select.png
new file mode 100644
index 00000000000..269d726af8a
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/api_select.png differ
diff --git a/examples/mini-program-example/src/assets/tab/component.png b/examples/mini-program-example/src/assets/tab/component.png
new file mode 100644
index 00000000000..b5917ae7a60
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/component.png differ
diff --git a/examples/mini-program-example/src/assets/tab/component_select.png b/examples/mini-program-example/src/assets/tab/component_select.png
new file mode 100644
index 00000000000..f79d9954bc1
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/component_select.png differ
diff --git a/examples/mini-program-example/src/assets/tab/home.png b/examples/mini-program-example/src/assets/tab/home.png
new file mode 100644
index 00000000000..5450f8384b3
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/home.png differ
diff --git a/examples/mini-program-example/src/assets/tab/home_select.png b/examples/mini-program-example/src/assets/tab/home_select.png
new file mode 100644
index 00000000000..57d426fe492
Binary files /dev/null and b/examples/mini-program-example/src/assets/tab/home_select.png differ
diff --git a/examples/mini-program-example/src/components/buttonList/index.scss b/examples/mini-program-example/src/components/buttonList/index.scss
new file mode 100644
index 00000000000..dc703b6b99f
--- /dev/null
+++ b/examples/mini-program-example/src/components/buttonList/index.scss
@@ -0,0 +1,127 @@
+@import "@/styles/variables.scss";
+
+.button-list {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+}
+
+.hidden-control {
+ width: 90%;
+ font-size: 32px;
+ display: flex;
+ align-items: center;
+}
+
+.stepper {
+ width: 24%;
+ height: 60px;
+ display: flex;
+ justify-content: space-around;
+ margin: 0 20px;
+ align-items: center;
+ border: 4px solid #ccc;
+ border-radius: 10px;
+}
+
+.stepper .stepper-num {
+ display: block;
+ width: 36%;
+ text-align: center;
+ border-left: 4px solid #ccc;
+ border-right: 4px solid #ccc;
+}
+
+.stepper .normal {
+ font-size: 42px;
+ padding: 0;
+ display: block;
+ width: 32%;
+ text-align: center;
+}
+
+.api-page-btn-area {
+ width: 100%;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ transition: 0.3s;
+}
+
+.api-page-btn-area-hidden {
+ opacity: 0;
+ height: 0;
+}
+
+.api-textarea-area {
+ width: 100%;
+ position: relative;
+}
+
+.api-input-area {
+ width: 90%;
+ height: 200px;
+ margin: 20px auto;
+ border: $color-grey-0 solid 4px;
+ border-radius: 10px;
+ overflow: hidden;
+ transition: 0.3s;
+ resize: none;
+}
+
+.api-input-area-hidden {
+ height: 0;
+ margin: 0 auto;
+ border: $color-grey-0 solid 0px;
+}
+
+.textarea-control {
+ position: absolute;
+ right: 50px;
+ top: 36px;
+ height: 40px;
+ width: 40px;
+ border: 2px solid $color-grey-0;
+ background-color: $color-success;
+ border-radius: 100%;
+ opacity: $opacity-active;
+ text-align: center;
+ line-height: 40px;
+ z-index: 99;
+}
+
+.taro-textarea {
+ resize: none;
+}
+
+textarea {
+ resize: none;
+}
+
+.api-page-btn {
+ color: $color-grey-6;
+ white-space: nowrap;
+ display: flex;
+ margin: 20px 50%;
+ padding: 15px 25px;
+ border-radius: 40px;
+ box-shadow: 5px 5px 5px 2px $color-grey-1, 0 0 0 0 $color-grey-1 inset;
+ background-color: $color-success;
+ transition: 0.3s;
+}
+
+.api-page-btn-uncreate {
+ opacity: $opacity-disabled;
+ pointer-events: none;
+}
+
+.api-page-btn-advanced {
+ background-color: $color-advanced;
+}
+
+.api-page-btn:active {
+ color: $color-success;
+ background-color: $color-grey-6;
+ box-shadow: 0 0 0 0 $color-grey-1, 5px 5px 5px 2px $color-grey-1 inset;
+}
diff --git a/examples/mini-program-example/src/components/buttonList/index.tsx b/examples/mini-program-example/src/components/buttonList/index.tsx
new file mode 100644
index 00000000000..9de2aa696b3
--- /dev/null
+++ b/examples/mini-program-example/src/components/buttonList/index.tsx
@@ -0,0 +1,178 @@
+import React from 'react'
+import Taro from '@tarojs/taro'
+import { View, Text, Textarea } from '@tarojs/components'
+import CallbackContents from '@/components/callbackContents'
+import './index.scss'
+
+/**
+ * 按钮列表
+ * @returns
+ */
+
+interface Props {
+ buttonList: any
+}
+
+interface States {
+ inputData: Array