├── .gitignore
├── .npmrc
├── LICENSE
├── babel.config.build.js
├── babel.config.js
├── build.sh
├── config
├── dev.js
├── index.js
└── prod.js
├── global.d.ts
├── package.json
├── preview.gif
├── project.config.json
├── project.private.config.json
├── readme.md
├── src
├── app.config.ts
├── app.less
├── app.ts
├── components
│ └── Table
│ │ ├── Table.tsx
│ │ ├── index.d.ts
│ │ ├── index.js
│ │ ├── style.css
│ │ ├── style.less
│ │ └── types.ts
└── pages
│ └── example
│ ├── index.config.js
│ └── index.tsx
├── tsconfig.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | build
3 | .idea
4 | node_modules/
5 | deploy_versions/
6 | .temp/
7 | .rn_temp/
8 | .DS_Store
9 | .vscode
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npmjs.org
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/babel.config.build.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@babel/env',
4 | '@babel/typescript',
5 | '@babel/react',
6 | ]
7 | };
8 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | // babel-preset-taro 更多选项和默认值:
2 | // https://github.com/NervJS/taro/blob/next/packages/babel-preset-taro/README.md
3 | module.exports = {
4 | presets: [
5 | [
6 | 'taro',
7 | {
8 | framework: 'react',
9 | ts: true
10 | }
11 | ]
12 | ]
13 | };
14 |
--------------------------------------------------------------------------------
/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | echo "--- BUILD START ---"
4 |
5 | # reset
6 | rm -rf build
7 | mkdir build
8 |
9 | # move
10 | cp -r src/components/Table build
11 |
12 | # complie
13 | npx lessc build/Table/style.less build/Table/style.css -x
14 | npx babel --config-file $(pwd)/babel.config.build.js build/Table/Table.tsx --out-file build/Table/Table.js
15 |
16 | # clear
17 | rm -rf build/Table/style.less
18 | rm -rf build/Table/Table.tsx
19 | rm -rf build/Table/types.ts
20 |
21 | echo "--- BUILD FINISH ---"
22 |
--------------------------------------------------------------------------------
/config/dev.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 | const exec = require('child_process').exec;
4 |
5 | // 监听 style.less 编译为 css
6 | const LESSC = path.resolve(__dirname, '../node_modules/.bin/lessc');
7 | const INPUT = path.resolve(__dirname, '../src/components/Table/style.less');
8 | const OUTPUT = path.resolve(__dirname, '../src/components/Table/style.css');
9 |
10 | console.log('😁 正在监听 style.less 修改');
11 | fs.watchFile(INPUT, { interval: 1000 }, (curr, prev) => {
12 | console.log('💨 开始编译 style.less');
13 | exec(`${LESSC} ${INPUT} ${OUTPUT} -x`, (err) => {
14 | if (err) {
15 | console.log('💢 编译 style.less 出错');
16 | return;
17 | }
18 | console.log('✅ 编译 style.less 成功');
19 | });
20 | });
21 |
22 | module.exports = {
23 | env: {
24 | NODE_ENV: '"development"'
25 | },
26 | defineConstants: {},
27 | mini: {}
28 | };
29 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | const config = {
2 | projectName: 'taro3-table',
3 | date: '2021-3-12',
4 | designWidth: 750,
5 | deviceRatio: {
6 | 640: 2.34 / 2,
7 | 750: 1,
8 | 828: 1.81 / 2
9 | },
10 | sourceRoot: 'src',
11 | outputRoot: 'dist',
12 | plugins: [],
13 | defineConstants: {},
14 | copy: {
15 | patterns: [],
16 | options: {}
17 | },
18 | framework: 'react',
19 | mini: {
20 | postcss: {
21 | pxtransform: {
22 | enable: true,
23 | config: {}
24 | },
25 | url: {
26 | enable: true,
27 | config: {
28 | limit: 1024 // 设定转换尺寸上限
29 | }
30 | },
31 | cssModules: {
32 | enable: false, // 默认为 false,如需使用 css modules 功能,则设为 true
33 | config: {
34 | namingPattern: 'module', // 转换模式,取值为 global/module
35 | generateScopedName: '[name]__[local]___[hash:base64:5]'
36 | }
37 | }
38 | }
39 | }
40 | };
41 |
42 | module.exports = function (merge) {
43 | if (process.env.NODE_ENV === 'development') {
44 | return merge({}, config, require('./dev'));
45 | }
46 | return merge({}, config, require('./prod'));
47 | };
48 |
--------------------------------------------------------------------------------
/config/prod.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | NODE_ENV: '"production"'
4 | },
5 | defineConstants: {},
6 | mini: {}
7 | };
8 |
--------------------------------------------------------------------------------
/global.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.png';
2 | declare module '*.gif';
3 | declare module '*.jpg';
4 | declare module '*.jpeg';
5 | declare module '*.svg';
6 | declare module '*.css';
7 | declare module '*.less';
8 | declare module '*.scss';
9 | declare module '*.sass';
10 | declare module '*.styl';
11 |
12 | declare namespace NodeJS {
13 | interface ProcessEnv {
14 | TARO_ENV: 'weapp' | 'swan' | 'alipay' | 'h5' | 'rn' | 'tt' | 'quickapp' | 'qq' | 'jd';
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "taro3-table",
3 | "version": "1.1.2",
4 | "author": "qxtang",
5 | "main": "build/Table/index.js",
6 | "types": "build/Table/index.d.ts",
7 | "description": "基于 Taro3、React 的微信小程序端多功能表格组件",
8 | "templateInfo": {
9 | "name": "default",
10 | "typescript": true,
11 | "css": "less"
12 | },
13 | "files": [
14 | "build",
15 | "readme.md",
16 | "package.json"
17 | ],
18 | "repository": {
19 | "type": "git",
20 | "url": "git@github.com:qxtang/taro3-table.git"
21 | },
22 | "scripts": {
23 | "prepublishOnly": "npm run build",
24 | "build:weapp": "taro build --type weapp",
25 | "dev:weapp": "npm run build:weapp -- --watch",
26 | "build": "bash ./build.sh"
27 | },
28 | "browserslist": [
29 | "last 3 versions",
30 | "Android >= 4.1",
31 | "ios >= 8"
32 | ],
33 | "dependencies": {
34 | "classnames": "^2.2.6",
35 | "use-deep-compare-effect": "^1.6.1"
36 | },
37 | "devDependencies": {
38 | "@babel/cli": "^7.13.10",
39 | "@babel/core": "^7.8.0",
40 | "@babel/runtime": "^7.7.7",
41 | "@tarojs/components": "3.0.22",
42 | "@tarojs/mini-runner": "3.0.22",
43 | "@tarojs/react": "3.0.22",
44 | "@tarojs/runtime": "3.0.22",
45 | "@tarojs/taro": "3.0.22",
46 | "@tarojs/webpack-runner": "3.0.22",
47 | "@types/react": "^16.0.0",
48 | "@types/webpack-env": "^1.13.6",
49 | "@typescript-eslint/eslint-plugin": "^2.x",
50 | "@typescript-eslint/parser": "^2.x",
51 | "babel-preset-taro": "3.0.22",
52 | "eslint": "^6.8.0",
53 | "eslint-config-taro": "3.0.22",
54 | "eslint-plugin-import": "^2.12.0",
55 | "eslint-plugin-react": "^7.8.2",
56 | "eslint-plugin-react-hooks": "^1.6.1",
57 | "less": "^4.1.2",
58 | "lessc": "^1.0.2",
59 | "react": "^16.10.0",
60 | "react-dom": "^16.10.0",
61 | "stylelint": "9.3.0",
62 | "typescript": "^3.7.0"
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/preview.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BugHunter7788/taro3-table/ed82bde9e85e8820d128d3c1353669c810889f85/preview.gif
--------------------------------------------------------------------------------
/project.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "miniprogramRoot": "dist/",
3 | "projectname": "taro3-table",
4 | "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
5 | "appid": "wxf085182fc9a94aec",
6 | "setting": {
7 | "urlCheck": true,
8 | "es6": false,
9 | "enhance": true,
10 | "postcss": false,
11 | "preloadBackgroundData": false,
12 | "minified": false,
13 | "newFeature": false,
14 | "coverView": true,
15 | "nodeModules": false,
16 | "autoAudits": false,
17 | "showShadowRootInWxmlPanel": true,
18 | "scopeDataCheck": false,
19 | "uglifyFileName": false,
20 | "checkInvalidKey": true,
21 | "checkSiteMap": true,
22 | "uploadWithSourceMap": true,
23 | "compileHotReLoad": false,
24 | "lazyloadPlaceholderEnable": false,
25 | "useMultiFrameRuntime": true,
26 | "useApiHook": true,
27 | "useApiHostProcess": true,
28 | "babelSetting": {
29 | "ignore": [],
30 | "disablePlugins": [],
31 | "outputPath": ""
32 | },
33 | "enableEngineNative": false,
34 | "useIsolateContext": false,
35 | "userConfirmedBundleSwitch": false,
36 | "packNpmManually": false,
37 | "packNpmRelationList": [],
38 | "minifyWXSS": true,
39 | "disableUseStrict": false,
40 | "showES6CompileOption": false,
41 | "useCompilerPlugins": false,
42 | "minifyWXML": true,
43 | "useStaticServer": true
44 | },
45 | "compileType": "miniprogram",
46 | "condition": {},
47 | "libVersion": "2.24.7",
48 | "srcMiniprogramRoot": "dist/",
49 | "packOptions": {
50 | "ignore": [],
51 | "include": []
52 | },
53 | "editorSetting": {
54 | "tabIndent": "insertSpaces",
55 | "tabSize": 2
56 | }
57 | }
--------------------------------------------------------------------------------
/project.private.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "projectname": "taro3-table",
3 | "setting": {
4 | "compileHotReLoad": true
5 | },
6 | "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html"
7 | }
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # taro3-table
2 |
3 |