├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── assets ├── android-1.jpg ├── android-2.jpg ├── android-3.jpg ├── android-4.jpg ├── ios-1.png ├── ios-2.png └── qrcode.png ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public ├── favicon.ico ├── icon.png └── manifest.json ├── src ├── cnodejs.svg ├── components │ ├── avatar.module.css │ ├── avatar.tsx │ ├── common.module.css │ ├── header.tsx │ ├── loading.tsx │ ├── markdown.tsx │ ├── no-more.module.css │ ├── no-more.tsx │ ├── reply.tsx │ ├── styled.module.css │ ├── styled.tsx │ ├── timeago.module.css │ ├── timeago.tsx │ ├── topic.module.css │ └── topic.tsx ├── env.d.ts ├── globals.css ├── hooks │ └── auth.ts ├── icon.svg ├── index.tsx ├── pages │ ├── about.tsx │ ├── index.tsx │ ├── login.tsx │ ├── message.tsx │ ├── post.module.css │ ├── post.tsx │ ├── topic │ │ ├── [id].tsx │ │ └── detail.module.css │ └── user │ │ └── [loginname].tsx └── utils.ts ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env.local 29 | .env.development.local 30 | .env.test.local 31 | .env.production.local 32 | 33 | # vercel 34 | .vercel 35 | 36 | .norm 37 | dist/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Rongjian Zhang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CNode PWA 2 | 3 | ## License 4 | 5 | MIT 6 | -------------------------------------------------------------------------------- /assets/android-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/android-1.jpg -------------------------------------------------------------------------------- /assets/android-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/android-2.jpg -------------------------------------------------------------------------------- /assets/android-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/android-3.jpg -------------------------------------------------------------------------------- /assets/android-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/android-4.jpg -------------------------------------------------------------------------------- /assets/ios-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/ios-1.png -------------------------------------------------------------------------------- /assets/ios-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/ios-2.png -------------------------------------------------------------------------------- /assets/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/assets/qrcode.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 22 | 23 | 24 | CNode社区 25 | 26 | 27 | 28 | 29 |
30 | 31 | 55 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cnode-pwa", 3 | "private": true, 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build" 7 | }, 8 | "devDependencies": { 9 | "@bytemd/plugin-gfm": "^1.13.1", 10 | "@bytemd/plugin-medium-zoom": "^1.13.1", 11 | "@bytemd/react": "^1.13.1", 12 | "@types/react": "^18.0.8", 13 | "@types/react-dom": "^18.0.3", 14 | "@vitejs/plugin-react": "^1.3.1", 15 | "antd-mobile": "^5.11.1", 16 | "antd-mobile-icons": "^0.2.2", 17 | "github-markdown-css": "^5.1.0", 18 | "lodash-es": "^4.17.21", 19 | "react": "18.1.0", 20 | "react-dom": "^18.1.0", 21 | "react-qr-reader": "^3.0.0-beta-1", 22 | "react-query": "^3.38.0", 23 | "react-router-dom": "^6.3.0", 24 | "timeago-react": "^3.0.4", 25 | "typescript": "^4.6.4", 26 | "vite": "^2.9.6", 27 | "vite-plugin-pages": "^0.23.0", 28 | "vite-plugin-svgr": "^2.0.0", 29 | "vite-tsconfig-paths": "^3.4.1" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | '@bytemd/plugin-gfm': ^1.13.1 5 | '@bytemd/plugin-medium-zoom': ^1.13.1 6 | '@bytemd/react': ^1.13.1 7 | '@types/react': ^18.0.8 8 | '@types/react-dom': ^18.0.3 9 | '@vitejs/plugin-react': ^1.3.1 10 | antd-mobile: ^5.11.1 11 | antd-mobile-icons: ^0.2.2 12 | github-markdown-css: ^5.1.0 13 | lodash-es: ^4.17.21 14 | react: 18.1.0 15 | react-dom: ^18.1.0 16 | react-qr-reader: ^3.0.0-beta-1 17 | react-query: ^3.38.0 18 | react-router-dom: ^6.3.0 19 | timeago-react: ^3.0.4 20 | typescript: ^4.6.4 21 | vite: ^2.9.6 22 | vite-plugin-pages: ^0.23.0 23 | vite-plugin-svgr: ^2.0.0 24 | vite-tsconfig-paths: ^3.4.1 25 | 26 | devDependencies: 27 | '@bytemd/plugin-gfm': 1.13.1 28 | '@bytemd/plugin-medium-zoom': 1.13.1 29 | '@bytemd/react': 1.13.1_react@18.1.0 30 | '@types/react': 18.0.8 31 | '@types/react-dom': 18.0.3 32 | '@vitejs/plugin-react': 1.3.1 33 | antd-mobile: 5.11.1_react-dom@18.1.0+react@18.1.0 34 | antd-mobile-icons: 0.2.2 35 | github-markdown-css: 5.1.0 36 | lodash-es: 4.17.21 37 | react: 18.1.0 38 | react-dom: 18.1.0_react@18.1.0 39 | react-qr-reader: 3.0.0-beta-1_react-dom@18.1.0+react@18.1.0 40 | react-query: 3.38.0_react-dom@18.1.0+react@18.1.0 41 | react-router-dom: 6.3.0_react-dom@18.1.0+react@18.1.0 42 | timeago-react: 3.0.4_react@18.1.0 43 | typescript: 4.6.4 44 | vite: 2.9.6 45 | vite-plugin-pages: 0.23.0_vite@2.9.6 46 | vite-plugin-svgr: 2.0.0_vite@2.9.6 47 | vite-tsconfig-paths: 3.4.1_vite@2.9.6 48 | 49 | packages: 50 | 51 | /@ampproject/remapping/2.2.0: 52 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 53 | engines: {node: '>=6.0.0'} 54 | dependencies: 55 | '@jridgewell/gen-mapping': 0.1.1 56 | '@jridgewell/trace-mapping': 0.3.9 57 | dev: true 58 | 59 | /@babel/code-frame/7.16.7: 60 | resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} 61 | engines: {node: '>=6.9.0'} 62 | dependencies: 63 | '@babel/highlight': 7.17.9 64 | dev: true 65 | 66 | /@babel/compat-data/7.17.10: 67 | resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} 68 | engines: {node: '>=6.9.0'} 69 | dev: true 70 | 71 | /@babel/core/7.17.10: 72 | resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==} 73 | engines: {node: '>=6.9.0'} 74 | dependencies: 75 | '@ampproject/remapping': 2.2.0 76 | '@babel/code-frame': 7.16.7 77 | '@babel/generator': 7.17.10 78 | '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 79 | '@babel/helper-module-transforms': 7.17.7 80 | '@babel/helpers': 7.17.9 81 | '@babel/parser': 7.17.10 82 | '@babel/template': 7.16.7 83 | '@babel/traverse': 7.17.10 84 | '@babel/types': 7.17.10 85 | convert-source-map: 1.8.0 86 | debug: 4.3.4 87 | gensync: 1.0.0-beta.2 88 | json5: 2.2.1 89 | semver: 6.3.0 90 | transitivePeerDependencies: 91 | - supports-color 92 | dev: true 93 | 94 | /@babel/generator/7.17.10: 95 | resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} 96 | engines: {node: '>=6.9.0'} 97 | dependencies: 98 | '@babel/types': 7.17.10 99 | '@jridgewell/gen-mapping': 0.1.1 100 | jsesc: 2.5.2 101 | dev: true 102 | 103 | /@babel/helper-annotate-as-pure/7.16.7: 104 | resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} 105 | engines: {node: '>=6.9.0'} 106 | dependencies: 107 | '@babel/types': 7.17.10 108 | dev: true 109 | 110 | /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: 111 | resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} 112 | engines: {node: '>=6.9.0'} 113 | peerDependencies: 114 | '@babel/core': ^7.0.0 115 | dependencies: 116 | '@babel/compat-data': 7.17.10 117 | '@babel/core': 7.17.10 118 | '@babel/helper-validator-option': 7.16.7 119 | browserslist: 4.20.3 120 | semver: 6.3.0 121 | dev: true 122 | 123 | /@babel/helper-environment-visitor/7.16.7: 124 | resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} 125 | engines: {node: '>=6.9.0'} 126 | dependencies: 127 | '@babel/types': 7.17.10 128 | dev: true 129 | 130 | /@babel/helper-function-name/7.17.9: 131 | resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} 132 | engines: {node: '>=6.9.0'} 133 | dependencies: 134 | '@babel/template': 7.16.7 135 | '@babel/types': 7.17.10 136 | dev: true 137 | 138 | /@babel/helper-hoist-variables/7.16.7: 139 | resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} 140 | engines: {node: '>=6.9.0'} 141 | dependencies: 142 | '@babel/types': 7.17.10 143 | dev: true 144 | 145 | /@babel/helper-module-imports/7.16.7: 146 | resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} 147 | engines: {node: '>=6.9.0'} 148 | dependencies: 149 | '@babel/types': 7.17.10 150 | dev: true 151 | 152 | /@babel/helper-module-transforms/7.17.7: 153 | resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} 154 | engines: {node: '>=6.9.0'} 155 | dependencies: 156 | '@babel/helper-environment-visitor': 7.16.7 157 | '@babel/helper-module-imports': 7.16.7 158 | '@babel/helper-simple-access': 7.17.7 159 | '@babel/helper-split-export-declaration': 7.16.7 160 | '@babel/helper-validator-identifier': 7.16.7 161 | '@babel/template': 7.16.7 162 | '@babel/traverse': 7.17.10 163 | '@babel/types': 7.17.10 164 | transitivePeerDependencies: 165 | - supports-color 166 | dev: true 167 | 168 | /@babel/helper-plugin-utils/7.16.7: 169 | resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} 170 | engines: {node: '>=6.9.0'} 171 | dev: true 172 | 173 | /@babel/helper-simple-access/7.17.7: 174 | resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} 175 | engines: {node: '>=6.9.0'} 176 | dependencies: 177 | '@babel/types': 7.17.10 178 | dev: true 179 | 180 | /@babel/helper-split-export-declaration/7.16.7: 181 | resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} 182 | engines: {node: '>=6.9.0'} 183 | dependencies: 184 | '@babel/types': 7.17.10 185 | dev: true 186 | 187 | /@babel/helper-validator-identifier/7.16.7: 188 | resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} 189 | engines: {node: '>=6.9.0'} 190 | dev: true 191 | 192 | /@babel/helper-validator-option/7.16.7: 193 | resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} 194 | engines: {node: '>=6.9.0'} 195 | dev: true 196 | 197 | /@babel/helpers/7.17.9: 198 | resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==} 199 | engines: {node: '>=6.9.0'} 200 | dependencies: 201 | '@babel/template': 7.16.7 202 | '@babel/traverse': 7.17.10 203 | '@babel/types': 7.17.10 204 | transitivePeerDependencies: 205 | - supports-color 206 | dev: true 207 | 208 | /@babel/highlight/7.17.9: 209 | resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} 210 | engines: {node: '>=6.9.0'} 211 | dependencies: 212 | '@babel/helper-validator-identifier': 7.16.7 213 | chalk: 2.4.2 214 | js-tokens: 4.0.0 215 | dev: true 216 | 217 | /@babel/parser/7.17.10: 218 | resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} 219 | engines: {node: '>=6.0.0'} 220 | hasBin: true 221 | dev: true 222 | 223 | /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.10: 224 | resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} 225 | engines: {node: '>=6.9.0'} 226 | peerDependencies: 227 | '@babel/core': ^7.0.0-0 228 | dependencies: 229 | '@babel/core': 7.17.10 230 | '@babel/helper-plugin-utils': 7.16.7 231 | dev: true 232 | 233 | /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.10: 234 | resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} 235 | engines: {node: '>=6.9.0'} 236 | peerDependencies: 237 | '@babel/core': ^7.0.0-0 238 | dependencies: 239 | '@babel/core': 7.17.10 240 | '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 241 | dev: true 242 | 243 | /@babel/plugin-transform-react-jsx-self/7.16.7_@babel+core@7.17.10: 244 | resolution: {integrity: sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==} 245 | engines: {node: '>=6.9.0'} 246 | peerDependencies: 247 | '@babel/core': ^7.0.0-0 248 | dependencies: 249 | '@babel/core': 7.17.10 250 | '@babel/helper-plugin-utils': 7.16.7 251 | dev: true 252 | 253 | /@babel/plugin-transform-react-jsx-source/7.16.7_@babel+core@7.17.10: 254 | resolution: {integrity: sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==} 255 | engines: {node: '>=6.9.0'} 256 | peerDependencies: 257 | '@babel/core': ^7.0.0-0 258 | dependencies: 259 | '@babel/core': 7.17.10 260 | '@babel/helper-plugin-utils': 7.16.7 261 | dev: true 262 | 263 | /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.10: 264 | resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} 265 | engines: {node: '>=6.9.0'} 266 | peerDependencies: 267 | '@babel/core': ^7.0.0-0 268 | dependencies: 269 | '@babel/core': 7.17.10 270 | '@babel/helper-annotate-as-pure': 7.16.7 271 | '@babel/helper-module-imports': 7.16.7 272 | '@babel/helper-plugin-utils': 7.16.7 273 | '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.10 274 | '@babel/types': 7.17.10 275 | dev: true 276 | 277 | /@babel/runtime/7.17.9: 278 | resolution: {integrity: sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==} 279 | engines: {node: '>=6.9.0'} 280 | dependencies: 281 | regenerator-runtime: 0.13.9 282 | dev: true 283 | 284 | /@babel/template/7.16.7: 285 | resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} 286 | engines: {node: '>=6.9.0'} 287 | dependencies: 288 | '@babel/code-frame': 7.16.7 289 | '@babel/parser': 7.17.10 290 | '@babel/types': 7.17.10 291 | dev: true 292 | 293 | /@babel/traverse/7.17.10: 294 | resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} 295 | engines: {node: '>=6.9.0'} 296 | dependencies: 297 | '@babel/code-frame': 7.16.7 298 | '@babel/generator': 7.17.10 299 | '@babel/helper-environment-visitor': 7.16.7 300 | '@babel/helper-function-name': 7.17.9 301 | '@babel/helper-hoist-variables': 7.16.7 302 | '@babel/helper-split-export-declaration': 7.16.7 303 | '@babel/parser': 7.17.10 304 | '@babel/types': 7.17.10 305 | debug: 4.3.4 306 | globals: 11.12.0 307 | transitivePeerDependencies: 308 | - supports-color 309 | dev: true 310 | 311 | /@babel/types/7.17.10: 312 | resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} 313 | engines: {node: '>=6.9.0'} 314 | dependencies: 315 | '@babel/helper-validator-identifier': 7.16.7 316 | to-fast-properties: 2.0.0 317 | dev: true 318 | 319 | /@bytemd/plugin-gfm/1.13.1: 320 | resolution: {integrity: sha512-V6ioQtGAW4T73Va2wVG8nGhGulPKi6FcPCN3yn4aE+FUV4/1j5lXXOEk7nPsfj9ZSlmmkappAc7BWnuKie2N4w==} 321 | peerDependencies: 322 | bytemd: ^1.5.0 323 | dev: true 324 | 325 | /@bytemd/plugin-medium-zoom/1.13.1: 326 | resolution: {integrity: sha512-U/pA+gBQ4vl45YltcMGbj1n7S+jTcwSYg+kVO9aiTHpCL4DRPiIKqzgAbcTDX/AYg1z7YBlt0CeCf/mB3T4b4w==} 327 | peerDependencies: 328 | bytemd: ^1.5.0 329 | dependencies: 330 | medium-zoom: 1.0.6 331 | dev: true 332 | 333 | /@bytemd/react/1.13.1_react@18.1.0: 334 | resolution: {integrity: sha512-mZEAeWAcVEkVhafHlseP0cJcM3bIwuK8AyZzIgyFzmWw6qyDntnyvrPzzXGWDT/vqhQnGMOE2suvMK4G7dMgbA==} 335 | peerDependencies: 336 | react: '*' 337 | dependencies: 338 | bytemd: 1.13.1 339 | react: 18.1.0 340 | dev: true 341 | 342 | /@cush/relative/1.0.0: 343 | resolution: {integrity: sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==} 344 | dev: true 345 | 346 | /@floating-ui/core/0.6.2: 347 | resolution: {integrity: sha512-jktYRmZwmau63adUG3GKOAVCofBXkk55S/zQ94XOorAHhwqFIOFAy1rSp2N0Wp6/tGbe9V3u/ExlGZypyY17rg==} 348 | dev: true 349 | 350 | /@floating-ui/dom/0.4.5: 351 | resolution: {integrity: sha512-b+prvQgJt8pieaKYMSJBXHxX/DYwdLsAWxKYqnO5dO2V4oo/TYBZJAUQCVNjTWWsrs6o4VDrNcP9+E70HAhJdw==} 352 | dependencies: 353 | '@floating-ui/core': 0.6.2 354 | dev: true 355 | 356 | /@jridgewell/gen-mapping/0.1.1: 357 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 358 | engines: {node: '>=6.0.0'} 359 | dependencies: 360 | '@jridgewell/set-array': 1.1.0 361 | '@jridgewell/sourcemap-codec': 1.4.11 362 | dev: true 363 | 364 | /@jridgewell/resolve-uri/3.0.6: 365 | resolution: {integrity: sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==} 366 | engines: {node: '>=6.0.0'} 367 | dev: true 368 | 369 | /@jridgewell/set-array/1.1.0: 370 | resolution: {integrity: sha512-SfJxIxNVYLTsKwzB3MoOQ1yxf4w/E6MdkvTgrgAt1bfxjSrLUoHMKrDOykwN14q65waezZIdqDneUIPh4/sKxg==} 371 | engines: {node: '>=6.0.0'} 372 | dev: true 373 | 374 | /@jridgewell/sourcemap-codec/1.4.11: 375 | resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} 376 | dev: true 377 | 378 | /@jridgewell/trace-mapping/0.3.9: 379 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 380 | dependencies: 381 | '@jridgewell/resolve-uri': 3.0.6 382 | '@jridgewell/sourcemap-codec': 1.4.11 383 | dev: true 384 | 385 | /@nodelib/fs.scandir/2.1.5: 386 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 387 | engines: {node: '>= 8'} 388 | dependencies: 389 | '@nodelib/fs.stat': 2.0.5 390 | run-parallel: 1.2.0 391 | dev: true 392 | 393 | /@nodelib/fs.stat/2.0.5: 394 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 395 | engines: {node: '>= 8'} 396 | dev: true 397 | 398 | /@nodelib/fs.walk/1.2.8: 399 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 400 | engines: {node: '>= 8'} 401 | dependencies: 402 | '@nodelib/fs.scandir': 2.1.5 403 | fastq: 1.13.0 404 | dev: true 405 | 406 | /@react-spring/animated/9.4.4_react@18.1.0: 407 | resolution: {integrity: sha512-e9xnuBaUTD+NolKikUmrGWjX8AVCPyj1GcEgjgq9E+0sXKv46UY7cm2EmB6mUDTxWIDVKebARY++xT4nGDraBQ==} 408 | peerDependencies: 409 | react: ^16.8.0 || ^17.0.0 410 | dependencies: 411 | '@react-spring/shared': 9.4.4_react@18.1.0 412 | '@react-spring/types': 9.4.4 413 | react: 18.1.0 414 | dev: true 415 | 416 | /@react-spring/core/9.4.4_react@18.1.0: 417 | resolution: {integrity: sha512-llgb0ljFyjMB0JhWsaFHOi9XFT8n1jBMVs1IFY2ipIBerWIRWrgUmIpakLPHTa4c4jwqTaDSwX90s2a0iN7dxQ==} 418 | peerDependencies: 419 | react: ^16.8.0 || ^17.0.0 420 | dependencies: 421 | '@react-spring/animated': 9.4.4_react@18.1.0 422 | '@react-spring/rafz': 9.4.4 423 | '@react-spring/shared': 9.4.4_react@18.1.0 424 | '@react-spring/types': 9.4.4 425 | react: 18.1.0 426 | dev: true 427 | 428 | /@react-spring/rafz/9.4.4: 429 | resolution: {integrity: sha512-5ki/sQ06Mdf8AuFstSt5zbNNicRT4LZogiJttDAww1ozhuvemafNWEHxhzcULgCPCDu2s7HsroaISV7+GQWrhw==} 430 | dev: true 431 | 432 | /@react-spring/shared/9.4.4_react@18.1.0: 433 | resolution: {integrity: sha512-ySVgScDZlhm/+Iy2smY9i/DDrShArY0j6zjTS/Re1lasKnhq8qigoGiAxe8xMPJNlCaj3uczCqHy3TY9bKRtfQ==} 434 | peerDependencies: 435 | react: ^16.8.0 || ^17.0.0 436 | dependencies: 437 | '@react-spring/rafz': 9.4.4 438 | '@react-spring/types': 9.4.4 439 | react: 18.1.0 440 | dev: true 441 | 442 | /@react-spring/types/9.4.4: 443 | resolution: {integrity: sha512-KpxKt/D//q/t/6FBcde/RE36LKp8PpWu7kFEMLwpzMGl9RpcexunmYOQJWwmJWtkQjgE1YRr7DzBMryz6La1cQ==} 444 | dev: true 445 | 446 | /@react-spring/web/9.4.4_react-dom@18.1.0+react@18.1.0: 447 | resolution: {integrity: sha512-iJmOLdhcuizriUlu/xqBc5y8KaFts+UI+iC+GxyTwBtzxA9czKiSAZW2ESuhG8stafa3jncwjfTQQp84KN36cw==} 448 | peerDependencies: 449 | react: ^16.8.0 || ^17.0.0 450 | react-dom: ^16.8.0 || ^17.0.0 451 | dependencies: 452 | '@react-spring/animated': 9.4.4_react@18.1.0 453 | '@react-spring/core': 9.4.4_react@18.1.0 454 | '@react-spring/shared': 9.4.4_react@18.1.0 455 | '@react-spring/types': 9.4.4 456 | react: 18.1.0 457 | react-dom: 18.1.0_react@18.1.0 458 | dev: true 459 | 460 | /@rollup/pluginutils/4.2.1: 461 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 462 | engines: {node: '>= 8.0.0'} 463 | dependencies: 464 | estree-walker: 2.0.2 465 | picomatch: 2.3.1 466 | dev: true 467 | 468 | /@svgr/babel-plugin-add-jsx-attribute/6.0.0_@babel+core@7.17.10: 469 | resolution: {integrity: sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==} 470 | engines: {node: '>=10'} 471 | peerDependencies: 472 | '@babel/core': ^7.0.0-0 473 | dependencies: 474 | '@babel/core': 7.17.10 475 | dev: true 476 | 477 | /@svgr/babel-plugin-remove-jsx-attribute/6.0.0_@babel+core@7.17.10: 478 | resolution: {integrity: sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==} 479 | engines: {node: '>=10'} 480 | peerDependencies: 481 | '@babel/core': ^7.0.0-0 482 | dependencies: 483 | '@babel/core': 7.17.10 484 | dev: true 485 | 486 | /@svgr/babel-plugin-remove-jsx-empty-expression/6.0.0_@babel+core@7.17.10: 487 | resolution: {integrity: sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==} 488 | engines: {node: '>=10'} 489 | peerDependencies: 490 | '@babel/core': ^7.0.0-0 491 | dependencies: 492 | '@babel/core': 7.17.10 493 | dev: true 494 | 495 | /@svgr/babel-plugin-replace-jsx-attribute-value/6.0.0_@babel+core@7.17.10: 496 | resolution: {integrity: sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==} 497 | engines: {node: '>=10'} 498 | peerDependencies: 499 | '@babel/core': ^7.0.0-0 500 | dependencies: 501 | '@babel/core': 7.17.10 502 | dev: true 503 | 504 | /@svgr/babel-plugin-svg-dynamic-title/6.0.0_@babel+core@7.17.10: 505 | resolution: {integrity: sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==} 506 | engines: {node: '>=10'} 507 | peerDependencies: 508 | '@babel/core': ^7.0.0-0 509 | dependencies: 510 | '@babel/core': 7.17.10 511 | dev: true 512 | 513 | /@svgr/babel-plugin-svg-em-dimensions/6.0.0_@babel+core@7.17.10: 514 | resolution: {integrity: sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==} 515 | engines: {node: '>=10'} 516 | peerDependencies: 517 | '@babel/core': ^7.0.0-0 518 | dependencies: 519 | '@babel/core': 7.17.10 520 | dev: true 521 | 522 | /@svgr/babel-plugin-transform-react-native-svg/6.0.0_@babel+core@7.17.10: 523 | resolution: {integrity: sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==} 524 | engines: {node: '>=10'} 525 | peerDependencies: 526 | '@babel/core': ^7.0.0-0 527 | dependencies: 528 | '@babel/core': 7.17.10 529 | dev: true 530 | 531 | /@svgr/babel-plugin-transform-svg-component/6.2.0_@babel+core@7.17.10: 532 | resolution: {integrity: sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==} 533 | engines: {node: '>=12'} 534 | peerDependencies: 535 | '@babel/core': ^7.0.0-0 536 | dependencies: 537 | '@babel/core': 7.17.10 538 | dev: true 539 | 540 | /@svgr/babel-preset/6.2.0_@babel+core@7.17.10: 541 | resolution: {integrity: sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==} 542 | engines: {node: '>=10'} 543 | peerDependencies: 544 | '@babel/core': ^7.0.0-0 545 | dependencies: 546 | '@babel/core': 7.17.10 547 | '@svgr/babel-plugin-add-jsx-attribute': 6.0.0_@babel+core@7.17.10 548 | '@svgr/babel-plugin-remove-jsx-attribute': 6.0.0_@babel+core@7.17.10 549 | '@svgr/babel-plugin-remove-jsx-empty-expression': 6.0.0_@babel+core@7.17.10 550 | '@svgr/babel-plugin-replace-jsx-attribute-value': 6.0.0_@babel+core@7.17.10 551 | '@svgr/babel-plugin-svg-dynamic-title': 6.0.0_@babel+core@7.17.10 552 | '@svgr/babel-plugin-svg-em-dimensions': 6.0.0_@babel+core@7.17.10 553 | '@svgr/babel-plugin-transform-react-native-svg': 6.0.0_@babel+core@7.17.10 554 | '@svgr/babel-plugin-transform-svg-component': 6.2.0_@babel+core@7.17.10 555 | dev: true 556 | 557 | /@svgr/core/6.2.1: 558 | resolution: {integrity: sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==} 559 | engines: {node: '>=10'} 560 | dependencies: 561 | '@svgr/plugin-jsx': 6.2.1_@svgr+core@6.2.1 562 | camelcase: 6.3.0 563 | cosmiconfig: 7.0.1 564 | transitivePeerDependencies: 565 | - supports-color 566 | dev: true 567 | 568 | /@svgr/hast-util-to-babel-ast/6.2.1: 569 | resolution: {integrity: sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==} 570 | engines: {node: '>=10'} 571 | dependencies: 572 | '@babel/types': 7.17.10 573 | entities: 3.0.1 574 | dev: true 575 | 576 | /@svgr/plugin-jsx/6.2.1_@svgr+core@6.2.1: 577 | resolution: {integrity: sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==} 578 | engines: {node: '>=10'} 579 | peerDependencies: 580 | '@svgr/core': ^6.0.0 581 | dependencies: 582 | '@babel/core': 7.17.10 583 | '@svgr/babel-preset': 6.2.0_@babel+core@7.17.10 584 | '@svgr/core': 6.2.1 585 | '@svgr/hast-util-to-babel-ast': 6.2.1 586 | svg-parser: 2.0.4 587 | transitivePeerDependencies: 588 | - supports-color 589 | dev: true 590 | 591 | /@types/big.js/6.1.3: 592 | resolution: {integrity: sha512-fHh2h1cFlvGP0kFCqoAsnuQoM0n3xHB6HxgZvELt7dji+BtK/j938MRL0nG5AA45EgibuFcPjgLlkqfUPCyoKw==} 593 | dev: true 594 | 595 | /@types/codemirror/5.60.5: 596 | resolution: {integrity: sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==} 597 | dependencies: 598 | '@types/tern': 0.23.4 599 | dev: true 600 | 601 | /@types/debug/4.1.7: 602 | resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} 603 | dependencies: 604 | '@types/ms': 0.7.31 605 | dev: true 606 | 607 | /@types/estree/0.0.51: 608 | resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} 609 | dev: true 610 | 611 | /@types/js-cookie/2.2.7: 612 | resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==} 613 | dev: true 614 | 615 | /@types/json5/0.0.29: 616 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 617 | dev: true 618 | 619 | /@types/ms/0.7.31: 620 | resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} 621 | dev: true 622 | 623 | /@types/parse-json/4.0.0: 624 | resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} 625 | dev: true 626 | 627 | /@types/prop-types/15.7.5: 628 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 629 | dev: true 630 | 631 | /@types/react-dom/18.0.3: 632 | resolution: {integrity: sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ==} 633 | dependencies: 634 | '@types/react': 18.0.8 635 | dev: true 636 | 637 | /@types/react-is/17.0.3: 638 | resolution: {integrity: sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==} 639 | dependencies: 640 | '@types/react': 18.0.8 641 | dev: true 642 | 643 | /@types/react-virtualized/9.21.21: 644 | resolution: {integrity: sha512-Exx6I7p4Qn+BBA1SRyj/UwQlZ0I0Pq7g7uhAp0QQ4JWzZunqEqNBGTmCmMmS/3N9wFgAGWuBD16ap7k8Y14VPA==} 645 | dependencies: 646 | '@types/prop-types': 15.7.5 647 | '@types/react': 17.0.44 648 | dev: true 649 | 650 | /@types/react/17.0.44: 651 | resolution: {integrity: sha512-Ye0nlw09GeMp2Suh8qoOv0odfgCoowfM/9MG6WeRD60Gq9wS90bdkdRtYbRkNhXOpG4H+YXGvj4wOWhAC0LJ1g==} 652 | dependencies: 653 | '@types/prop-types': 15.7.5 654 | '@types/scheduler': 0.16.2 655 | csstype: 3.0.11 656 | dev: true 657 | 658 | /@types/react/18.0.8: 659 | resolution: {integrity: sha512-+j2hk9BzCOrrOSJASi5XiOyBbERk9jG5O73Ya4M0env5Ixi6vUNli4qy994AINcEF+1IEHISYFfIT4zwr++LKw==} 660 | dependencies: 661 | '@types/prop-types': 15.7.5 662 | '@types/scheduler': 0.16.2 663 | csstype: 3.0.11 664 | dev: true 665 | 666 | /@types/resize-observer-browser/0.1.7: 667 | resolution: {integrity: sha512-G9eN0Sn0ii9PWQ3Vl72jDPgeJwRWhv2Qk/nQkJuWmRmOB4HX3/BhD5SE1dZs/hzPZL/WKnvF0RHdTSG54QJFyg==} 668 | dev: true 669 | 670 | /@types/scheduler/0.16.2: 671 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 672 | dev: true 673 | 674 | /@types/tern/0.23.4: 675 | resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} 676 | dependencies: 677 | '@types/estree': 0.0.51 678 | dev: true 679 | 680 | /@use-gesture/core/10.2.12: 681 | resolution: {integrity: sha512-BIZ9Zyo2xFyLS8pYyhawa5upNpshLTSBVTek+56EqgCp/j95YfZI7PtgwHmm0cm+0HNqeq8FHkhFmJlbj4Pg3Q==} 682 | dev: true 683 | 684 | /@use-gesture/react/10.2.12_react@18.1.0: 685 | resolution: {integrity: sha512-ykNZWRjwesSirhaBmcAWveHyivXn/E5/R4kY6i8+cDtklKuPM91oFEML9tV5CRBuGJONY/rxD+JVNs/SOwfp4w==} 686 | peerDependencies: 687 | react: '>= 16.8.0' 688 | dependencies: 689 | '@use-gesture/core': 10.2.12 690 | react: 18.1.0 691 | dev: true 692 | 693 | /@vitejs/plugin-react/1.3.1: 694 | resolution: {integrity: sha512-qQS8Y2fZCjo5YmDUplEXl3yn+aueiwxB7BaoQ4nWYJYR+Ai8NXPVLlkLobVMs5+DeyFyg9Lrz6zCzdX1opcvyw==} 695 | engines: {node: '>=12.0.0'} 696 | dependencies: 697 | '@babel/core': 7.17.10 698 | '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 699 | '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.17.10 700 | '@babel/plugin-transform-react-jsx-self': 7.16.7_@babel+core@7.17.10 701 | '@babel/plugin-transform-react-jsx-source': 7.16.7_@babel+core@7.17.10 702 | '@rollup/pluginutils': 4.2.1 703 | react-refresh: 0.12.0 704 | resolve: 1.22.0 705 | transitivePeerDependencies: 706 | - supports-color 707 | dev: true 708 | 709 | /@zxing/browser/0.0.7_@zxing+library@0.18.6: 710 | resolution: {integrity: sha512-AepzMgDnD6EjxewqmXpHJsi4S3Gw9ilZJLIbTf6fWuWySEcHBodnGu3p7FWlgq1Sd5QyfPhTum5z3CBkkhMVng==} 711 | peerDependencies: 712 | '@zxing/library': ^0.18.3 713 | dependencies: 714 | '@zxing/library': 0.18.6 715 | optionalDependencies: 716 | '@zxing/text-encoding': 0.9.0 717 | dev: true 718 | 719 | /@zxing/library/0.18.6: 720 | resolution: {integrity: sha512-bulZ9JHoLFd9W36pi+7e7DnEYNJhljYjZ1UTsKPOoLMU3qtC+REHITeCRNx40zTRJZx18W5TBRXt5pq2Uopjsw==} 721 | engines: {node: '>= 10.4.0'} 722 | dependencies: 723 | ts-custom-error: 3.2.0 724 | optionalDependencies: 725 | '@zxing/text-encoding': 0.9.0 726 | dev: true 727 | 728 | /@zxing/text-encoding/0.9.0: 729 | resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} 730 | requiresBuild: true 731 | dev: true 732 | optional: true 733 | 734 | /ahooks-v3-count/1.0.0: 735 | resolution: {integrity: sha512-V7uUvAwnimu6eh/PED4mCDjE7tokeZQLKlxg9lCTMPhN+NjsSbtdacByVlR1oluXQzD3MOw55wylDmQo4+S9ZQ==} 736 | dev: true 737 | 738 | /ahooks/3.3.10_react@18.1.0: 739 | resolution: {integrity: sha512-CNZQRnNkvbafV5qdGcx7AT81XJNPa7vAo1XoShvdI8s6oHigTrmc+kWkyWWEywiEchF992Z6oIQEXkSsL034fw==} 740 | engines: {node: '>=8.0.0'} 741 | peerDependencies: 742 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 743 | dependencies: 744 | '@types/js-cookie': 2.2.7 745 | ahooks-v3-count: 1.0.0 746 | dayjs: 1.11.1 747 | intersection-observer: 0.12.0 748 | js-cookie: 2.2.1 749 | lodash: 4.17.21 750 | react: 18.1.0 751 | resize-observer-polyfill: 1.5.1 752 | screenfull: 5.2.0 753 | dev: true 754 | 755 | /ansi-styles/3.2.1: 756 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 757 | engines: {node: '>=4'} 758 | dependencies: 759 | color-convert: 1.9.3 760 | dev: true 761 | 762 | /antd-mobile-icons/0.2.2: 763 | resolution: {integrity: sha512-iquIc7EsQTndk5nMv9pQQv+/OY5YnjVIPhtCFo7W7JL+Gjqzq/YJ/HO2WxUxyCgYha2NsTTNAb2vPa/M4zAi2g==} 764 | dev: true 765 | 766 | /antd-mobile-v5-count/1.0.1: 767 | resolution: {integrity: sha512-YGsiEDCPUDz3SzfXi6gLZn/HpeSMW+jgPc4qiYUr1fSopg3hkUie2TnooJdExgfiETHefH3Ggs58He0OVfegLA==} 768 | dev: true 769 | 770 | /antd-mobile/5.11.1_react-dom@18.1.0+react@18.1.0: 771 | resolution: {integrity: sha512-1bDAwESV7wbNd3G2C4P91lXf6UkApZ0EwSSxhwNusJ5W7eu2uiv7iEPuIsLprVezn6KwuCm9qKvG3AujpnmOoA==} 772 | peerDependencies: 773 | react: ^16.8.0 || ^17.0.0 774 | dependencies: 775 | '@floating-ui/dom': 0.4.5 776 | '@react-spring/web': 9.4.4_react-dom@18.1.0+react@18.1.0 777 | '@types/big.js': 6.1.3 778 | '@types/react-is': 17.0.3 779 | '@types/react-virtualized': 9.21.21 780 | '@types/resize-observer-browser': 0.1.7 781 | '@use-gesture/react': 10.2.12_react@18.1.0 782 | ahooks: 3.3.10_react@18.1.0 783 | antd-mobile-icons: 0.2.2 784 | antd-mobile-v5-count: 1.0.1 785 | big.js: 6.1.1 786 | classnames: 2.3.1 787 | dayjs: 1.11.1 788 | lodash: 4.17.21 789 | rc-field-form: 1.26.3_react-dom@18.1.0+react@18.1.0 790 | react: 18.1.0 791 | react-is: 17.0.2 792 | staged-components: 1.1.2_react@18.1.0 793 | tslib: 2.4.0 794 | transitivePeerDependencies: 795 | - react-dom 796 | dev: true 797 | 798 | /async-validator/4.1.1: 799 | resolution: {integrity: sha512-p4DO/JXwjs8klJyJL8Q2oM4ks5fUTze/h5k10oPPKMiLe1fj3G1QMzPHNmN1Py4ycOk7WlO2DcGXv1qiESJCZA==} 800 | dev: true 801 | 802 | /available-typed-arrays/1.0.5: 803 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 804 | engines: {node: '>= 0.4'} 805 | dev: true 806 | 807 | /balanced-match/1.0.2: 808 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 809 | dev: true 810 | 811 | /big-integer/1.6.51: 812 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} 813 | engines: {node: '>=0.6'} 814 | dev: true 815 | 816 | /big.js/6.1.1: 817 | resolution: {integrity: sha512-1vObw81a8ylZO5ePrtMay0n018TcftpTA5HFKDaSuiUDBo8biRBtjIobw60OpwuvrGk+FsxKamqN4cnmj/eXdg==} 818 | dev: true 819 | 820 | /brace-expansion/1.1.11: 821 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 822 | dependencies: 823 | balanced-match: 1.0.2 824 | concat-map: 0.0.1 825 | dev: true 826 | 827 | /braces/3.0.2: 828 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 829 | engines: {node: '>=8'} 830 | dependencies: 831 | fill-range: 7.0.1 832 | dev: true 833 | 834 | /broadcast-channel/3.7.0: 835 | resolution: {integrity: sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==} 836 | dependencies: 837 | '@babel/runtime': 7.17.9 838 | detect-node: 2.1.0 839 | js-sha3: 0.8.0 840 | microseconds: 0.2.0 841 | nano-time: 1.0.0 842 | oblivious-set: 1.0.0 843 | rimraf: 3.0.2 844 | unload: 2.2.0 845 | dev: true 846 | 847 | /browserslist/4.20.3: 848 | resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==} 849 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 850 | hasBin: true 851 | dependencies: 852 | caniuse-lite: 1.0.30001334 853 | electron-to-chromium: 1.4.129 854 | escalade: 3.1.1 855 | node-releases: 2.0.4 856 | picocolors: 1.0.0 857 | dev: true 858 | 859 | /bytemd/1.13.1: 860 | resolution: {integrity: sha512-Sd8vq6/viHlkFmgZBgDRvnPiY5nomSqexirJ3hUDKbg+0MILMJkXNtXAxp25aT0hpG6jOm4asO8rSOxVTdZF0w==} 861 | dependencies: 862 | '@types/codemirror': 5.60.5 863 | dev: true 864 | 865 | /call-bind/1.0.2: 866 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 867 | dependencies: 868 | function-bind: 1.1.1 869 | get-intrinsic: 1.1.1 870 | dev: true 871 | 872 | /callsites/3.1.0: 873 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 874 | engines: {node: '>=6'} 875 | dev: true 876 | 877 | /camelcase/6.3.0: 878 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 879 | engines: {node: '>=10'} 880 | dev: true 881 | 882 | /caniuse-lite/1.0.30001334: 883 | resolution: {integrity: sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==} 884 | dev: true 885 | 886 | /chalk/2.4.2: 887 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 888 | engines: {node: '>=4'} 889 | dependencies: 890 | ansi-styles: 3.2.1 891 | escape-string-regexp: 1.0.5 892 | supports-color: 5.5.0 893 | dev: true 894 | 895 | /classnames/2.3.1: 896 | resolution: {integrity: sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==} 897 | dev: true 898 | 899 | /color-convert/1.9.3: 900 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 901 | dependencies: 902 | color-name: 1.1.3 903 | dev: true 904 | 905 | /color-name/1.1.3: 906 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 907 | dev: true 908 | 909 | /concat-map/0.0.1: 910 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 911 | dev: true 912 | 913 | /convert-source-map/1.8.0: 914 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} 915 | dependencies: 916 | safe-buffer: 5.1.2 917 | dev: true 918 | 919 | /cosmiconfig/7.0.1: 920 | resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} 921 | engines: {node: '>=10'} 922 | dependencies: 923 | '@types/parse-json': 4.0.0 924 | import-fresh: 3.3.0 925 | parse-json: 5.2.0 926 | path-type: 4.0.0 927 | yaml: 1.10.2 928 | dev: true 929 | 930 | /csstype/3.0.11: 931 | resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} 932 | dev: true 933 | 934 | /dayjs/1.11.1: 935 | resolution: {integrity: sha512-ER7EjqVAMkRRsxNCC5YqJ9d9VQYuWdGt7aiH2qA5R5wt8ZmWaP2dLUSIK6y/kVzLMlmh1Tvu5xUf4M/wdGJ5KA==} 936 | dev: true 937 | 938 | /debug/4.3.4: 939 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 940 | engines: {node: '>=6.0'} 941 | peerDependencies: 942 | supports-color: '*' 943 | peerDependenciesMeta: 944 | supports-color: 945 | optional: true 946 | dependencies: 947 | ms: 2.1.2 948 | dev: true 949 | 950 | /deep-equal/2.0.5: 951 | resolution: {integrity: sha512-nPiRgmbAtm1a3JsnLCf6/SLfXcjyN5v8L1TXzdCmHrXJ4hx+gW/w1YCcn7z8gJtSiDArZCgYtbao3QqLm/N1Sw==} 952 | dependencies: 953 | call-bind: 1.0.2 954 | es-get-iterator: 1.1.2 955 | get-intrinsic: 1.1.1 956 | is-arguments: 1.1.1 957 | is-date-object: 1.0.5 958 | is-regex: 1.1.4 959 | isarray: 2.0.5 960 | object-is: 1.1.5 961 | object-keys: 1.1.1 962 | object.assign: 4.1.2 963 | regexp.prototype.flags: 1.4.3 964 | side-channel: 1.0.4 965 | which-boxed-primitive: 1.0.2 966 | which-collection: 1.0.1 967 | which-typed-array: 1.1.7 968 | dev: true 969 | 970 | /define-properties/1.1.4: 971 | resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} 972 | engines: {node: '>= 0.4'} 973 | dependencies: 974 | has-property-descriptors: 1.0.0 975 | object-keys: 1.1.1 976 | dev: true 977 | 978 | /detect-node/2.1.0: 979 | resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} 980 | dev: true 981 | 982 | /electron-to-chromium/1.4.129: 983 | resolution: {integrity: sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==} 984 | dev: true 985 | 986 | /entities/3.0.1: 987 | resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} 988 | engines: {node: '>=0.12'} 989 | dev: true 990 | 991 | /error-ex/1.3.2: 992 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 993 | dependencies: 994 | is-arrayish: 0.2.1 995 | dev: true 996 | 997 | /es-abstract/1.19.5: 998 | resolution: {integrity: sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==} 999 | engines: {node: '>= 0.4'} 1000 | dependencies: 1001 | call-bind: 1.0.2 1002 | es-to-primitive: 1.2.1 1003 | function-bind: 1.1.1 1004 | get-intrinsic: 1.1.1 1005 | get-symbol-description: 1.0.0 1006 | has: 1.0.3 1007 | has-symbols: 1.0.3 1008 | internal-slot: 1.0.3 1009 | is-callable: 1.2.4 1010 | is-negative-zero: 2.0.2 1011 | is-regex: 1.1.4 1012 | is-shared-array-buffer: 1.0.2 1013 | is-string: 1.0.7 1014 | is-weakref: 1.0.2 1015 | object-inspect: 1.12.0 1016 | object-keys: 1.1.1 1017 | object.assign: 4.1.2 1018 | string.prototype.trimend: 1.0.4 1019 | string.prototype.trimstart: 1.0.4 1020 | unbox-primitive: 1.0.2 1021 | dev: true 1022 | 1023 | /es-get-iterator/1.1.2: 1024 | resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} 1025 | dependencies: 1026 | call-bind: 1.0.2 1027 | get-intrinsic: 1.1.1 1028 | has-symbols: 1.0.3 1029 | is-arguments: 1.1.1 1030 | is-map: 2.0.2 1031 | is-set: 2.0.2 1032 | is-string: 1.0.7 1033 | isarray: 2.0.5 1034 | dev: true 1035 | 1036 | /es-to-primitive/1.2.1: 1037 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 1038 | engines: {node: '>= 0.4'} 1039 | dependencies: 1040 | is-callable: 1.2.4 1041 | is-date-object: 1.0.5 1042 | is-symbol: 1.0.4 1043 | dev: true 1044 | 1045 | /esbuild-android-64/0.14.38: 1046 | resolution: {integrity: sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==} 1047 | engines: {node: '>=12'} 1048 | cpu: [x64] 1049 | os: [android] 1050 | requiresBuild: true 1051 | dev: true 1052 | optional: true 1053 | 1054 | /esbuild-android-arm64/0.14.38: 1055 | resolution: {integrity: sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==} 1056 | engines: {node: '>=12'} 1057 | cpu: [arm64] 1058 | os: [android] 1059 | requiresBuild: true 1060 | dev: true 1061 | optional: true 1062 | 1063 | /esbuild-darwin-64/0.14.38: 1064 | resolution: {integrity: sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==} 1065 | engines: {node: '>=12'} 1066 | cpu: [x64] 1067 | os: [darwin] 1068 | requiresBuild: true 1069 | dev: true 1070 | optional: true 1071 | 1072 | /esbuild-darwin-arm64/0.14.38: 1073 | resolution: {integrity: sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==} 1074 | engines: {node: '>=12'} 1075 | cpu: [arm64] 1076 | os: [darwin] 1077 | requiresBuild: true 1078 | dev: true 1079 | optional: true 1080 | 1081 | /esbuild-freebsd-64/0.14.38: 1082 | resolution: {integrity: sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==} 1083 | engines: {node: '>=12'} 1084 | cpu: [x64] 1085 | os: [freebsd] 1086 | requiresBuild: true 1087 | dev: true 1088 | optional: true 1089 | 1090 | /esbuild-freebsd-arm64/0.14.38: 1091 | resolution: {integrity: sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==} 1092 | engines: {node: '>=12'} 1093 | cpu: [arm64] 1094 | os: [freebsd] 1095 | requiresBuild: true 1096 | dev: true 1097 | optional: true 1098 | 1099 | /esbuild-linux-32/0.14.38: 1100 | resolution: {integrity: sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==} 1101 | engines: {node: '>=12'} 1102 | cpu: [ia32] 1103 | os: [linux] 1104 | requiresBuild: true 1105 | dev: true 1106 | optional: true 1107 | 1108 | /esbuild-linux-64/0.14.38: 1109 | resolution: {integrity: sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==} 1110 | engines: {node: '>=12'} 1111 | cpu: [x64] 1112 | os: [linux] 1113 | requiresBuild: true 1114 | dev: true 1115 | optional: true 1116 | 1117 | /esbuild-linux-arm/0.14.38: 1118 | resolution: {integrity: sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==} 1119 | engines: {node: '>=12'} 1120 | cpu: [arm] 1121 | os: [linux] 1122 | requiresBuild: true 1123 | dev: true 1124 | optional: true 1125 | 1126 | /esbuild-linux-arm64/0.14.38: 1127 | resolution: {integrity: sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==} 1128 | engines: {node: '>=12'} 1129 | cpu: [arm64] 1130 | os: [linux] 1131 | requiresBuild: true 1132 | dev: true 1133 | optional: true 1134 | 1135 | /esbuild-linux-mips64le/0.14.38: 1136 | resolution: {integrity: sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==} 1137 | engines: {node: '>=12'} 1138 | cpu: [mips64el] 1139 | os: [linux] 1140 | requiresBuild: true 1141 | dev: true 1142 | optional: true 1143 | 1144 | /esbuild-linux-ppc64le/0.14.38: 1145 | resolution: {integrity: sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==} 1146 | engines: {node: '>=12'} 1147 | cpu: [ppc64] 1148 | os: [linux] 1149 | requiresBuild: true 1150 | dev: true 1151 | optional: true 1152 | 1153 | /esbuild-linux-riscv64/0.14.38: 1154 | resolution: {integrity: sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==} 1155 | engines: {node: '>=12'} 1156 | cpu: [riscv64] 1157 | os: [linux] 1158 | requiresBuild: true 1159 | dev: true 1160 | optional: true 1161 | 1162 | /esbuild-linux-s390x/0.14.38: 1163 | resolution: {integrity: sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==} 1164 | engines: {node: '>=12'} 1165 | cpu: [s390x] 1166 | os: [linux] 1167 | requiresBuild: true 1168 | dev: true 1169 | optional: true 1170 | 1171 | /esbuild-netbsd-64/0.14.38: 1172 | resolution: {integrity: sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==} 1173 | engines: {node: '>=12'} 1174 | cpu: [x64] 1175 | os: [netbsd] 1176 | requiresBuild: true 1177 | dev: true 1178 | optional: true 1179 | 1180 | /esbuild-openbsd-64/0.14.38: 1181 | resolution: {integrity: sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==} 1182 | engines: {node: '>=12'} 1183 | cpu: [x64] 1184 | os: [openbsd] 1185 | requiresBuild: true 1186 | dev: true 1187 | optional: true 1188 | 1189 | /esbuild-sunos-64/0.14.38: 1190 | resolution: {integrity: sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==} 1191 | engines: {node: '>=12'} 1192 | cpu: [x64] 1193 | os: [sunos] 1194 | requiresBuild: true 1195 | dev: true 1196 | optional: true 1197 | 1198 | /esbuild-windows-32/0.14.38: 1199 | resolution: {integrity: sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==} 1200 | engines: {node: '>=12'} 1201 | cpu: [ia32] 1202 | os: [win32] 1203 | requiresBuild: true 1204 | dev: true 1205 | optional: true 1206 | 1207 | /esbuild-windows-64/0.14.38: 1208 | resolution: {integrity: sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==} 1209 | engines: {node: '>=12'} 1210 | cpu: [x64] 1211 | os: [win32] 1212 | requiresBuild: true 1213 | dev: true 1214 | optional: true 1215 | 1216 | /esbuild-windows-arm64/0.14.38: 1217 | resolution: {integrity: sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==} 1218 | engines: {node: '>=12'} 1219 | cpu: [arm64] 1220 | os: [win32] 1221 | requiresBuild: true 1222 | dev: true 1223 | optional: true 1224 | 1225 | /esbuild/0.14.38: 1226 | resolution: {integrity: sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==} 1227 | engines: {node: '>=12'} 1228 | hasBin: true 1229 | requiresBuild: true 1230 | optionalDependencies: 1231 | esbuild-android-64: 0.14.38 1232 | esbuild-android-arm64: 0.14.38 1233 | esbuild-darwin-64: 0.14.38 1234 | esbuild-darwin-arm64: 0.14.38 1235 | esbuild-freebsd-64: 0.14.38 1236 | esbuild-freebsd-arm64: 0.14.38 1237 | esbuild-linux-32: 0.14.38 1238 | esbuild-linux-64: 0.14.38 1239 | esbuild-linux-arm: 0.14.38 1240 | esbuild-linux-arm64: 0.14.38 1241 | esbuild-linux-mips64le: 0.14.38 1242 | esbuild-linux-ppc64le: 0.14.38 1243 | esbuild-linux-riscv64: 0.14.38 1244 | esbuild-linux-s390x: 0.14.38 1245 | esbuild-netbsd-64: 0.14.38 1246 | esbuild-openbsd-64: 0.14.38 1247 | esbuild-sunos-64: 0.14.38 1248 | esbuild-windows-32: 0.14.38 1249 | esbuild-windows-64: 0.14.38 1250 | esbuild-windows-arm64: 0.14.38 1251 | dev: true 1252 | 1253 | /escalade/3.1.1: 1254 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1255 | engines: {node: '>=6'} 1256 | dev: true 1257 | 1258 | /escape-string-regexp/1.0.5: 1259 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1260 | engines: {node: '>=0.8.0'} 1261 | dev: true 1262 | 1263 | /estree-walker/2.0.2: 1264 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1265 | dev: true 1266 | 1267 | /fast-glob/3.2.11: 1268 | resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} 1269 | engines: {node: '>=8.6.0'} 1270 | dependencies: 1271 | '@nodelib/fs.stat': 2.0.5 1272 | '@nodelib/fs.walk': 1.2.8 1273 | glob-parent: 5.1.2 1274 | merge2: 1.4.1 1275 | micromatch: 4.0.5 1276 | dev: true 1277 | 1278 | /fastq/1.13.0: 1279 | resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} 1280 | dependencies: 1281 | reusify: 1.0.4 1282 | dev: true 1283 | 1284 | /fill-range/7.0.1: 1285 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1286 | engines: {node: '>=8'} 1287 | dependencies: 1288 | to-regex-range: 5.0.1 1289 | dev: true 1290 | 1291 | /foreach/2.0.5: 1292 | resolution: {integrity: sha512-ZBbtRiapkZYLsqoPyZOR+uPfto0GRMNQN1GwzZtZt7iZvPPbDDQV0JF5Hx4o/QFQ5c0vyuoZ98T8RSBbopzWtA==} 1293 | dev: true 1294 | 1295 | /fs.realpath/1.0.0: 1296 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1297 | dev: true 1298 | 1299 | /fsevents/2.3.2: 1300 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1301 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1302 | os: [darwin] 1303 | requiresBuild: true 1304 | dev: true 1305 | optional: true 1306 | 1307 | /function-bind/1.1.1: 1308 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1309 | dev: true 1310 | 1311 | /functions-have-names/1.2.3: 1312 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1313 | dev: true 1314 | 1315 | /gensync/1.0.0-beta.2: 1316 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1317 | engines: {node: '>=6.9.0'} 1318 | dev: true 1319 | 1320 | /get-intrinsic/1.1.1: 1321 | resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} 1322 | dependencies: 1323 | function-bind: 1.1.1 1324 | has: 1.0.3 1325 | has-symbols: 1.0.3 1326 | dev: true 1327 | 1328 | /get-symbol-description/1.0.0: 1329 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1330 | engines: {node: '>= 0.4'} 1331 | dependencies: 1332 | call-bind: 1.0.2 1333 | get-intrinsic: 1.1.1 1334 | dev: true 1335 | 1336 | /github-markdown-css/5.1.0: 1337 | resolution: {integrity: sha512-QLtORwHHtUHhPMHu7i4GKfP6Vx5CWZn+NKQXe+cBhslY1HEt0CTEkP4d/vSROKV0iIJSpl4UtlQ16AD8C6lMug==} 1338 | dev: true 1339 | 1340 | /glob-parent/5.1.2: 1341 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1342 | engines: {node: '>= 6'} 1343 | dependencies: 1344 | is-glob: 4.0.3 1345 | dev: true 1346 | 1347 | /glob-regex/0.3.2: 1348 | resolution: {integrity: sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==} 1349 | dev: true 1350 | 1351 | /glob/7.2.0: 1352 | resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} 1353 | dependencies: 1354 | fs.realpath: 1.0.0 1355 | inflight: 1.0.6 1356 | inherits: 2.0.4 1357 | minimatch: 3.1.2 1358 | once: 1.4.0 1359 | path-is-absolute: 1.0.1 1360 | dev: true 1361 | 1362 | /globals/11.12.0: 1363 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1364 | engines: {node: '>=4'} 1365 | dev: true 1366 | 1367 | /globrex/0.1.2: 1368 | resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} 1369 | dev: true 1370 | 1371 | /has-bigints/1.0.2: 1372 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1373 | dev: true 1374 | 1375 | /has-flag/3.0.0: 1376 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1377 | engines: {node: '>=4'} 1378 | dev: true 1379 | 1380 | /has-property-descriptors/1.0.0: 1381 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1382 | dependencies: 1383 | get-intrinsic: 1.1.1 1384 | dev: true 1385 | 1386 | /has-symbols/1.0.3: 1387 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1388 | engines: {node: '>= 0.4'} 1389 | dev: true 1390 | 1391 | /has-tostringtag/1.0.0: 1392 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1393 | engines: {node: '>= 0.4'} 1394 | dependencies: 1395 | has-symbols: 1.0.3 1396 | dev: true 1397 | 1398 | /has/1.0.3: 1399 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1400 | engines: {node: '>= 0.4.0'} 1401 | dependencies: 1402 | function-bind: 1.1.1 1403 | dev: true 1404 | 1405 | /history/5.3.0: 1406 | resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} 1407 | dependencies: 1408 | '@babel/runtime': 7.17.9 1409 | dev: true 1410 | 1411 | /import-fresh/3.3.0: 1412 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1413 | engines: {node: '>=6'} 1414 | dependencies: 1415 | parent-module: 1.0.1 1416 | resolve-from: 4.0.0 1417 | dev: true 1418 | 1419 | /inflight/1.0.6: 1420 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1421 | dependencies: 1422 | once: 1.4.0 1423 | wrappy: 1.0.2 1424 | dev: true 1425 | 1426 | /inherits/2.0.4: 1427 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1428 | dev: true 1429 | 1430 | /internal-slot/1.0.3: 1431 | resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} 1432 | engines: {node: '>= 0.4'} 1433 | dependencies: 1434 | get-intrinsic: 1.1.1 1435 | has: 1.0.3 1436 | side-channel: 1.0.4 1437 | dev: true 1438 | 1439 | /intersection-observer/0.12.0: 1440 | resolution: {integrity: sha512-2Vkz8z46Dv401zTWudDGwO7KiGHNDkMv417T5ItcNYfmvHR/1qCTVBO9vwH8zZmQ0WkA/1ARwpysR9bsnop4NQ==} 1441 | dev: true 1442 | 1443 | /is-arguments/1.1.1: 1444 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 1445 | engines: {node: '>= 0.4'} 1446 | dependencies: 1447 | call-bind: 1.0.2 1448 | has-tostringtag: 1.0.0 1449 | dev: true 1450 | 1451 | /is-arrayish/0.2.1: 1452 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1453 | dev: true 1454 | 1455 | /is-bigint/1.0.4: 1456 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1457 | dependencies: 1458 | has-bigints: 1.0.2 1459 | dev: true 1460 | 1461 | /is-boolean-object/1.1.2: 1462 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1463 | engines: {node: '>= 0.4'} 1464 | dependencies: 1465 | call-bind: 1.0.2 1466 | has-tostringtag: 1.0.0 1467 | dev: true 1468 | 1469 | /is-callable/1.2.4: 1470 | resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} 1471 | engines: {node: '>= 0.4'} 1472 | dev: true 1473 | 1474 | /is-core-module/2.9.0: 1475 | resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} 1476 | dependencies: 1477 | has: 1.0.3 1478 | dev: true 1479 | 1480 | /is-date-object/1.0.5: 1481 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1482 | engines: {node: '>= 0.4'} 1483 | dependencies: 1484 | has-tostringtag: 1.0.0 1485 | dev: true 1486 | 1487 | /is-extglob/2.1.1: 1488 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1489 | engines: {node: '>=0.10.0'} 1490 | dev: true 1491 | 1492 | /is-glob/4.0.3: 1493 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1494 | engines: {node: '>=0.10.0'} 1495 | dependencies: 1496 | is-extglob: 2.1.1 1497 | dev: true 1498 | 1499 | /is-map/2.0.2: 1500 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} 1501 | dev: true 1502 | 1503 | /is-negative-zero/2.0.2: 1504 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1505 | engines: {node: '>= 0.4'} 1506 | dev: true 1507 | 1508 | /is-number-object/1.0.7: 1509 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1510 | engines: {node: '>= 0.4'} 1511 | dependencies: 1512 | has-tostringtag: 1.0.0 1513 | dev: true 1514 | 1515 | /is-number/7.0.0: 1516 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1517 | engines: {node: '>=0.12.0'} 1518 | dev: true 1519 | 1520 | /is-regex/1.1.4: 1521 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1522 | engines: {node: '>= 0.4'} 1523 | dependencies: 1524 | call-bind: 1.0.2 1525 | has-tostringtag: 1.0.0 1526 | dev: true 1527 | 1528 | /is-set/2.0.2: 1529 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} 1530 | dev: true 1531 | 1532 | /is-shared-array-buffer/1.0.2: 1533 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1534 | dependencies: 1535 | call-bind: 1.0.2 1536 | dev: true 1537 | 1538 | /is-string/1.0.7: 1539 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1540 | engines: {node: '>= 0.4'} 1541 | dependencies: 1542 | has-tostringtag: 1.0.0 1543 | dev: true 1544 | 1545 | /is-symbol/1.0.4: 1546 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1547 | engines: {node: '>= 0.4'} 1548 | dependencies: 1549 | has-symbols: 1.0.3 1550 | dev: true 1551 | 1552 | /is-typed-array/1.1.8: 1553 | resolution: {integrity: sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA==} 1554 | engines: {node: '>= 0.4'} 1555 | dependencies: 1556 | available-typed-arrays: 1.0.5 1557 | call-bind: 1.0.2 1558 | es-abstract: 1.19.5 1559 | foreach: 2.0.5 1560 | has-tostringtag: 1.0.0 1561 | dev: true 1562 | 1563 | /is-weakmap/2.0.1: 1564 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} 1565 | dev: true 1566 | 1567 | /is-weakref/1.0.2: 1568 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1569 | dependencies: 1570 | call-bind: 1.0.2 1571 | dev: true 1572 | 1573 | /is-weakset/2.0.2: 1574 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} 1575 | dependencies: 1576 | call-bind: 1.0.2 1577 | get-intrinsic: 1.1.1 1578 | dev: true 1579 | 1580 | /isarray/2.0.5: 1581 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1582 | dev: true 1583 | 1584 | /js-cookie/2.2.1: 1585 | resolution: {integrity: sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==} 1586 | dev: true 1587 | 1588 | /js-sha3/0.8.0: 1589 | resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} 1590 | dev: true 1591 | 1592 | /js-tokens/4.0.0: 1593 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1594 | dev: true 1595 | 1596 | /jsesc/2.5.2: 1597 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 1598 | engines: {node: '>=4'} 1599 | hasBin: true 1600 | dev: true 1601 | 1602 | /json-parse-even-better-errors/2.3.1: 1603 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1604 | dev: true 1605 | 1606 | /json5/1.0.1: 1607 | resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} 1608 | hasBin: true 1609 | dependencies: 1610 | minimist: 1.2.6 1611 | dev: true 1612 | 1613 | /json5/2.2.1: 1614 | resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} 1615 | engines: {node: '>=6'} 1616 | hasBin: true 1617 | dev: true 1618 | 1619 | /lines-and-columns/1.2.4: 1620 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1621 | dev: true 1622 | 1623 | /local-pkg/0.4.1: 1624 | resolution: {integrity: sha512-lL87ytIGP2FU5PWwNDo0w3WhIo2gopIAxPg9RxDYF7m4rr5ahuZxP22xnJHIvaLTe4Z9P6uKKY2UHiwyB4pcrw==} 1625 | engines: {node: '>=14'} 1626 | dev: true 1627 | 1628 | /lodash-es/4.17.21: 1629 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1630 | dev: true 1631 | 1632 | /lodash/4.17.21: 1633 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1634 | dev: true 1635 | 1636 | /loose-envify/1.4.0: 1637 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1638 | hasBin: true 1639 | dependencies: 1640 | js-tokens: 4.0.0 1641 | dev: true 1642 | 1643 | /match-sorter/6.3.1: 1644 | resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} 1645 | dependencies: 1646 | '@babel/runtime': 7.17.9 1647 | remove-accents: 0.4.2 1648 | dev: true 1649 | 1650 | /medium-zoom/1.0.6: 1651 | resolution: {integrity: sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==} 1652 | dev: true 1653 | 1654 | /merge2/1.4.1: 1655 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1656 | engines: {node: '>= 8'} 1657 | dev: true 1658 | 1659 | /micromatch/4.0.5: 1660 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1661 | engines: {node: '>=8.6'} 1662 | dependencies: 1663 | braces: 3.0.2 1664 | picomatch: 2.3.1 1665 | dev: true 1666 | 1667 | /microseconds/0.2.0: 1668 | resolution: {integrity: sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==} 1669 | dev: true 1670 | 1671 | /minimatch/3.1.2: 1672 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1673 | dependencies: 1674 | brace-expansion: 1.1.11 1675 | dev: true 1676 | 1677 | /minimist/1.2.6: 1678 | resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} 1679 | dev: true 1680 | 1681 | /ms/2.1.2: 1682 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1683 | dev: true 1684 | 1685 | /nano-time/1.0.0: 1686 | resolution: {integrity: sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==} 1687 | dependencies: 1688 | big-integer: 1.6.51 1689 | dev: true 1690 | 1691 | /nanoid/3.3.3: 1692 | resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} 1693 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1694 | hasBin: true 1695 | dev: true 1696 | 1697 | /node-releases/2.0.4: 1698 | resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} 1699 | dev: true 1700 | 1701 | /object-inspect/1.12.0: 1702 | resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} 1703 | dev: true 1704 | 1705 | /object-is/1.1.5: 1706 | resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} 1707 | engines: {node: '>= 0.4'} 1708 | dependencies: 1709 | call-bind: 1.0.2 1710 | define-properties: 1.1.4 1711 | dev: true 1712 | 1713 | /object-keys/1.1.1: 1714 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1715 | engines: {node: '>= 0.4'} 1716 | dev: true 1717 | 1718 | /object.assign/4.1.2: 1719 | resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} 1720 | engines: {node: '>= 0.4'} 1721 | dependencies: 1722 | call-bind: 1.0.2 1723 | define-properties: 1.1.4 1724 | has-symbols: 1.0.3 1725 | object-keys: 1.1.1 1726 | dev: true 1727 | 1728 | /oblivious-set/1.0.0: 1729 | resolution: {integrity: sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==} 1730 | dev: true 1731 | 1732 | /once/1.4.0: 1733 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1734 | dependencies: 1735 | wrappy: 1.0.2 1736 | dev: true 1737 | 1738 | /parent-module/1.0.1: 1739 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1740 | engines: {node: '>=6'} 1741 | dependencies: 1742 | callsites: 3.1.0 1743 | dev: true 1744 | 1745 | /parse-json/5.2.0: 1746 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1747 | engines: {node: '>=8'} 1748 | dependencies: 1749 | '@babel/code-frame': 7.16.7 1750 | error-ex: 1.3.2 1751 | json-parse-even-better-errors: 2.3.1 1752 | lines-and-columns: 1.2.4 1753 | dev: true 1754 | 1755 | /path-is-absolute/1.0.1: 1756 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1757 | engines: {node: '>=0.10.0'} 1758 | dev: true 1759 | 1760 | /path-parse/1.0.7: 1761 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1762 | dev: true 1763 | 1764 | /path-type/4.0.0: 1765 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1766 | engines: {node: '>=8'} 1767 | dev: true 1768 | 1769 | /picocolors/1.0.0: 1770 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1771 | dev: true 1772 | 1773 | /picomatch/2.3.1: 1774 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1775 | engines: {node: '>=8.6'} 1776 | dev: true 1777 | 1778 | /postcss/8.4.13: 1779 | resolution: {integrity: sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==} 1780 | engines: {node: ^10 || ^12 || >=14} 1781 | dependencies: 1782 | nanoid: 3.3.3 1783 | picocolors: 1.0.0 1784 | source-map-js: 1.0.2 1785 | dev: true 1786 | 1787 | /queue-microtask/1.2.3: 1788 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1789 | dev: true 1790 | 1791 | /rc-field-form/1.26.3_react-dom@18.1.0+react@18.1.0: 1792 | resolution: {integrity: sha512-wzQToAwdr8fiq/Nb1KFq+9WYFeALJXKwNGk5/MaCu1AUS7PpVQaN2anzVfWdVBFiiM2N+3DOh64JSOH8s1w3FQ==} 1793 | engines: {node: '>=8.x'} 1794 | peerDependencies: 1795 | react: '>=16.9.0' 1796 | react-dom: '>=16.9.0' 1797 | dependencies: 1798 | '@babel/runtime': 7.17.9 1799 | async-validator: 4.1.1 1800 | rc-util: 5.21.2_react-dom@18.1.0+react@18.1.0 1801 | react: 18.1.0 1802 | react-dom: 18.1.0_react@18.1.0 1803 | dev: true 1804 | 1805 | /rc-util/5.21.2_react-dom@18.1.0+react@18.1.0: 1806 | resolution: {integrity: sha512-QuuZ2tKMScGtxSx3rLzgPGGDZm/np7phMqA7OcDidSf44abvSk+AdtdD7ZvQPvCEtdC6nCSI5tEVnUaYjjD9/w==} 1807 | peerDependencies: 1808 | react: '>=16.9.0' 1809 | react-dom: '>=16.9.0' 1810 | dependencies: 1811 | '@babel/runtime': 7.17.9 1812 | react: 18.1.0 1813 | react-dom: 18.1.0_react@18.1.0 1814 | react-is: 16.13.1 1815 | shallowequal: 1.1.0 1816 | dev: true 1817 | 1818 | /react-dom/18.1.0_react@18.1.0: 1819 | resolution: {integrity: sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==} 1820 | peerDependencies: 1821 | react: ^18.1.0 1822 | dependencies: 1823 | loose-envify: 1.4.0 1824 | react: 18.1.0 1825 | scheduler: 0.22.0 1826 | dev: true 1827 | 1828 | /react-is/16.13.1: 1829 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1830 | dev: true 1831 | 1832 | /react-is/17.0.2: 1833 | resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} 1834 | dev: true 1835 | 1836 | /react-qr-reader/3.0.0-beta-1_react-dom@18.1.0+react@18.1.0: 1837 | resolution: {integrity: sha512-5HeFH9x/BlziRYQYGK2AeWS9WiKYZtGGMs9DXy3bcySTX3C9UJL9EwcPnWw8vlf7JP4FcrAlr1SnZ5nsWLQGyw==} 1838 | peerDependencies: 1839 | react: ^16.8.0 || ^17.0.0 1840 | react-dom: ^16.8.0 || ^17.0.0 1841 | dependencies: 1842 | '@zxing/browser': 0.0.7_@zxing+library@0.18.6 1843 | '@zxing/library': 0.18.6 1844 | react: 18.1.0 1845 | react-dom: 18.1.0_react@18.1.0 1846 | rollup: 2.71.1 1847 | dev: true 1848 | 1849 | /react-query/3.38.0_react-dom@18.1.0+react@18.1.0: 1850 | resolution: {integrity: sha512-VRbCTRrDfC5FsB70+JfZuxFRv9SAvkZ1h36MsN8+QaDN+NWB6s1vJndqpoLQnJqN0COTG2zsInMq0KFdYze6TA==} 1851 | peerDependencies: 1852 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 1853 | react-dom: '*' 1854 | react-native: '*' 1855 | peerDependenciesMeta: 1856 | react-dom: 1857 | optional: true 1858 | react-native: 1859 | optional: true 1860 | dependencies: 1861 | '@babel/runtime': 7.17.9 1862 | broadcast-channel: 3.7.0 1863 | match-sorter: 6.3.1 1864 | react: 18.1.0 1865 | react-dom: 18.1.0_react@18.1.0 1866 | dev: true 1867 | 1868 | /react-refresh/0.12.0: 1869 | resolution: {integrity: sha512-suLIhrU2IHKL5JEKR/fAwJv7bbeq4kJ+pJopf77jHwuR+HmJS/HbrPIGsTBUVfw7tXPOmYv7UJ7PCaN49e8x4A==} 1870 | engines: {node: '>=0.10.0'} 1871 | dev: true 1872 | 1873 | /react-router-dom/6.3.0_react-dom@18.1.0+react@18.1.0: 1874 | resolution: {integrity: sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==} 1875 | peerDependencies: 1876 | react: '>=16.8' 1877 | react-dom: '>=16.8' 1878 | dependencies: 1879 | history: 5.3.0 1880 | react: 18.1.0 1881 | react-dom: 18.1.0_react@18.1.0 1882 | react-router: 6.3.0_react@18.1.0 1883 | dev: true 1884 | 1885 | /react-router/6.3.0_react@18.1.0: 1886 | resolution: {integrity: sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==} 1887 | peerDependencies: 1888 | react: '>=16.8' 1889 | dependencies: 1890 | history: 5.3.0 1891 | react: 18.1.0 1892 | dev: true 1893 | 1894 | /react/18.1.0: 1895 | resolution: {integrity: sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==} 1896 | engines: {node: '>=0.10.0'} 1897 | dependencies: 1898 | loose-envify: 1.4.0 1899 | dev: true 1900 | 1901 | /recrawl-sync/2.2.2: 1902 | resolution: {integrity: sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==} 1903 | dependencies: 1904 | '@cush/relative': 1.0.0 1905 | glob-regex: 0.3.2 1906 | slash: 3.0.0 1907 | tslib: 1.14.1 1908 | dev: true 1909 | 1910 | /regenerator-runtime/0.13.9: 1911 | resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} 1912 | dev: true 1913 | 1914 | /regexp.prototype.flags/1.4.3: 1915 | resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} 1916 | engines: {node: '>= 0.4'} 1917 | dependencies: 1918 | call-bind: 1.0.2 1919 | define-properties: 1.1.4 1920 | functions-have-names: 1.2.3 1921 | dev: true 1922 | 1923 | /remove-accents/0.4.2: 1924 | resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} 1925 | dev: true 1926 | 1927 | /resize-observer-polyfill/1.5.1: 1928 | resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} 1929 | dev: true 1930 | 1931 | /resolve-from/4.0.0: 1932 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1933 | engines: {node: '>=4'} 1934 | dev: true 1935 | 1936 | /resolve/1.22.0: 1937 | resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} 1938 | hasBin: true 1939 | dependencies: 1940 | is-core-module: 2.9.0 1941 | path-parse: 1.0.7 1942 | supports-preserve-symlinks-flag: 1.0.0 1943 | dev: true 1944 | 1945 | /reusify/1.0.4: 1946 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1947 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1948 | dev: true 1949 | 1950 | /rimraf/3.0.2: 1951 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1952 | hasBin: true 1953 | dependencies: 1954 | glob: 7.2.0 1955 | dev: true 1956 | 1957 | /rollup/2.71.1: 1958 | resolution: {integrity: sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==} 1959 | engines: {node: '>=10.0.0'} 1960 | hasBin: true 1961 | optionalDependencies: 1962 | fsevents: 2.3.2 1963 | dev: true 1964 | 1965 | /run-parallel/1.2.0: 1966 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1967 | dependencies: 1968 | queue-microtask: 1.2.3 1969 | dev: true 1970 | 1971 | /safe-buffer/5.1.2: 1972 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1973 | dev: true 1974 | 1975 | /scheduler/0.22.0: 1976 | resolution: {integrity: sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==} 1977 | dependencies: 1978 | loose-envify: 1.4.0 1979 | dev: true 1980 | 1981 | /screenfull/5.2.0: 1982 | resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} 1983 | engines: {node: '>=0.10.0'} 1984 | dev: true 1985 | 1986 | /semver/6.3.0: 1987 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1988 | hasBin: true 1989 | dev: true 1990 | 1991 | /shallowequal/1.1.0: 1992 | resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} 1993 | dev: true 1994 | 1995 | /side-channel/1.0.4: 1996 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1997 | dependencies: 1998 | call-bind: 1.0.2 1999 | get-intrinsic: 1.1.1 2000 | object-inspect: 1.12.0 2001 | dev: true 2002 | 2003 | /slash/3.0.0: 2004 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 2005 | engines: {node: '>=8'} 2006 | dev: true 2007 | 2008 | /source-map-js/1.0.2: 2009 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 2010 | engines: {node: '>=0.10.0'} 2011 | dev: true 2012 | 2013 | /staged-components/1.1.2_react@18.1.0: 2014 | resolution: {integrity: sha512-Fzf0qhYau/zn1pEsZSZml0b8vvGvdC+xo71jM0TE8vtM/2VjRCGLWaPb3vH3csaLv4qcoXVMMcRIeSO+HTHehQ==} 2015 | peerDependencies: 2016 | react: ^16.8.0 || ^17.0.0 2017 | dependencies: 2018 | react: 18.1.0 2019 | dev: true 2020 | 2021 | /string.prototype.trimend/1.0.4: 2022 | resolution: {integrity: sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==} 2023 | dependencies: 2024 | call-bind: 1.0.2 2025 | define-properties: 1.1.4 2026 | dev: true 2027 | 2028 | /string.prototype.trimstart/1.0.4: 2029 | resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} 2030 | dependencies: 2031 | call-bind: 1.0.2 2032 | define-properties: 1.1.4 2033 | dev: true 2034 | 2035 | /strip-bom/3.0.0: 2036 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 2037 | engines: {node: '>=4'} 2038 | dev: true 2039 | 2040 | /supports-color/5.5.0: 2041 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 2042 | engines: {node: '>=4'} 2043 | dependencies: 2044 | has-flag: 3.0.0 2045 | dev: true 2046 | 2047 | /supports-preserve-symlinks-flag/1.0.0: 2048 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 2049 | engines: {node: '>= 0.4'} 2050 | dev: true 2051 | 2052 | /svg-parser/2.0.4: 2053 | resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} 2054 | dev: true 2055 | 2056 | /timeago-react/3.0.4_react@18.1.0: 2057 | resolution: {integrity: sha512-cv6Bnm01VKyHoQCBKzk24+L9ycj3jLq3uEFpYILKGJT7UUXWEzC0TBCxforsvL4NSjcwqqHNKdEeqEFMNNoN2A==} 2058 | peerDependencies: 2059 | react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 2060 | dependencies: 2061 | react: 18.1.0 2062 | timeago.js: 4.0.2 2063 | dev: true 2064 | 2065 | /timeago.js/4.0.2: 2066 | resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==} 2067 | dev: true 2068 | 2069 | /to-fast-properties/2.0.0: 2070 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 2071 | engines: {node: '>=4'} 2072 | dev: true 2073 | 2074 | /to-regex-range/5.0.1: 2075 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2076 | engines: {node: '>=8.0'} 2077 | dependencies: 2078 | is-number: 7.0.0 2079 | dev: true 2080 | 2081 | /ts-custom-error/3.2.0: 2082 | resolution: {integrity: sha512-cBvC2QjtvJ9JfWLvstVnI45Y46Y5dMxIaG1TDMGAD/R87hpvqFL+7LhvUDhnRCfOnx/xitollFWWvUKKKhbN0A==} 2083 | engines: {node: '>=8.0.0'} 2084 | dev: true 2085 | 2086 | /tsconfig-paths/3.14.1: 2087 | resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} 2088 | dependencies: 2089 | '@types/json5': 0.0.29 2090 | json5: 1.0.1 2091 | minimist: 1.2.6 2092 | strip-bom: 3.0.0 2093 | dev: true 2094 | 2095 | /tslib/1.14.1: 2096 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 2097 | dev: true 2098 | 2099 | /tslib/2.4.0: 2100 | resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} 2101 | dev: true 2102 | 2103 | /typescript/4.6.4: 2104 | resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} 2105 | engines: {node: '>=4.2.0'} 2106 | hasBin: true 2107 | dev: true 2108 | 2109 | /unbox-primitive/1.0.2: 2110 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 2111 | dependencies: 2112 | call-bind: 1.0.2 2113 | has-bigints: 1.0.2 2114 | has-symbols: 1.0.3 2115 | which-boxed-primitive: 1.0.2 2116 | dev: true 2117 | 2118 | /unload/2.2.0: 2119 | resolution: {integrity: sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==} 2120 | dependencies: 2121 | '@babel/runtime': 7.17.9 2122 | detect-node: 2.1.0 2123 | dev: true 2124 | 2125 | /vite-plugin-pages/0.23.0_vite@2.9.6: 2126 | resolution: {integrity: sha512-KEfW6WBfACCjMXoQY0mLEzfifwCTq6FlvvtXs2XSEe9Pd4QadZTNzHOPKHDsKpVXysRzbYxE8/c/Ao9+nXsQ7w==} 2127 | peerDependencies: 2128 | '@vue/compiler-sfc': ^3.0.0 2129 | vite: ^2.0.0 2130 | peerDependenciesMeta: 2131 | '@vue/compiler-sfc': 2132 | optional: true 2133 | dependencies: 2134 | '@types/debug': 4.1.7 2135 | debug: 4.3.4 2136 | deep-equal: 2.0.5 2137 | fast-glob: 3.2.11 2138 | json5: 2.2.1 2139 | local-pkg: 0.4.1 2140 | picocolors: 1.0.0 2141 | vite: 2.9.6 2142 | yaml: 2.0.1 2143 | transitivePeerDependencies: 2144 | - supports-color 2145 | dev: true 2146 | 2147 | /vite-plugin-svgr/2.0.0_vite@2.9.6: 2148 | resolution: {integrity: sha512-nxu542CRXLqAsI7Ebw5EMHFpLp1yb0ix+DTCVAIRz09+YREkOY8sDr2Jl5yKaKSOA3UQnW4yf6Vg4DhArJCvyA==} 2149 | peerDependencies: 2150 | vite: ^2.6.0 2151 | dependencies: 2152 | '@svgr/core': 6.2.1 2153 | vite: 2.9.6 2154 | transitivePeerDependencies: 2155 | - supports-color 2156 | dev: true 2157 | 2158 | /vite-tsconfig-paths/3.4.1_vite@2.9.6: 2159 | resolution: {integrity: sha512-SgK3/pnTuJ3i+gMSAWLR6VCPSw26bnxawrmXGvCDjJgk8MAQgmbCrFrAzfwbwZBXSqSuvWEuX04Wt73qJKx8fQ==} 2160 | peerDependencies: 2161 | vite: '>2.0.0-0' 2162 | dependencies: 2163 | debug: 4.3.4 2164 | globrex: 0.1.2 2165 | recrawl-sync: 2.2.2 2166 | tsconfig-paths: 3.14.1 2167 | vite: 2.9.6 2168 | transitivePeerDependencies: 2169 | - supports-color 2170 | dev: true 2171 | 2172 | /vite/2.9.6: 2173 | resolution: {integrity: sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==} 2174 | engines: {node: '>=12.2.0'} 2175 | hasBin: true 2176 | peerDependencies: 2177 | less: '*' 2178 | sass: '*' 2179 | stylus: '*' 2180 | peerDependenciesMeta: 2181 | less: 2182 | optional: true 2183 | sass: 2184 | optional: true 2185 | stylus: 2186 | optional: true 2187 | dependencies: 2188 | esbuild: 0.14.38 2189 | postcss: 8.4.13 2190 | resolve: 1.22.0 2191 | rollup: 2.71.1 2192 | optionalDependencies: 2193 | fsevents: 2.3.2 2194 | dev: true 2195 | 2196 | /which-boxed-primitive/1.0.2: 2197 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2198 | dependencies: 2199 | is-bigint: 1.0.4 2200 | is-boolean-object: 1.1.2 2201 | is-number-object: 1.0.7 2202 | is-string: 1.0.7 2203 | is-symbol: 1.0.4 2204 | dev: true 2205 | 2206 | /which-collection/1.0.1: 2207 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} 2208 | dependencies: 2209 | is-map: 2.0.2 2210 | is-set: 2.0.2 2211 | is-weakmap: 2.0.1 2212 | is-weakset: 2.0.2 2213 | dev: true 2214 | 2215 | /which-typed-array/1.1.7: 2216 | resolution: {integrity: sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw==} 2217 | engines: {node: '>= 0.4'} 2218 | dependencies: 2219 | available-typed-arrays: 1.0.5 2220 | call-bind: 1.0.2 2221 | es-abstract: 1.19.5 2222 | foreach: 2.0.5 2223 | has-tostringtag: 1.0.0 2224 | is-typed-array: 1.1.8 2225 | dev: true 2226 | 2227 | /wrappy/1.0.2: 2228 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2229 | dev: true 2230 | 2231 | /yaml/1.10.2: 2232 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 2233 | engines: {node: '>= 6'} 2234 | dev: true 2235 | 2236 | /yaml/2.0.1: 2237 | resolution: {integrity: sha512-1NpAYQ3wjzIlMs0mgdBmYzLkFgWBIWrzYVDYfrixhoFNNgJ444/jT2kUT2sicRbJES3oQYRZugjB6Ro8SjKeFg==} 2238 | engines: {node: '>= 14'} 2239 | dev: true 2240 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/public/favicon.ico -------------------------------------------------------------------------------- /public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pd4d10/cnode-pwa/6e1449ad6bad3fe33964cb13205583eaffca567c/public/icon.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "CNode - Node.js中文社区", 3 | "short_name": "CNode社区", 4 | "icons": [ 5 | { 6 | "src": "icon.png", 7 | "sizes": "512x512", 8 | "type": "image/png" 9 | } 10 | ], 11 | "start_url": "/", 12 | "display": "standalone", 13 | "background_color": "#fff", 14 | "theme_color": "#fff" 15 | } 16 | -------------------------------------------------------------------------------- /src/cnodejs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | 18 | 25 | 28 | 36 | 42 | 45 | 54 | 55 | -------------------------------------------------------------------------------- /src/components/avatar.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | display: flex; 3 | min-width: 0; 4 | width: 100%; 5 | } 6 | 7 | .avatar { 8 | min-width: 48px; /* fix width at chrome */ 9 | width: 48px; 10 | height: 48px; 11 | border-radius: 50%; 12 | } 13 | 14 | .content { 15 | display: flex; 16 | min-width: 0; /* https://stackoverflow.com/questions/34934586/white-space-nowrap-and-flexbox-did-not-work-in-chrome */ 17 | flex-direction: column; 18 | flex-grow: 1; 19 | justify-content: space-between; 20 | height: 48px; 21 | margin-left: 10px; 22 | } 23 | -------------------------------------------------------------------------------- /src/components/avatar.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import { useNavigate } from 'react-router-dom' 3 | import $s from './avatar.module.css' 4 | import { TopicProps } from './topic' 5 | 6 | export const AvatarRow = ({ author, children, ...props }) => { 7 | const navigate = useNavigate() 8 | return ( 9 |
10 | {author.loginname} { 15 | e.preventDefault() 16 | navigate(`/user/${author.loginname}`) 17 | }} 18 | /> 19 |
{children}
20 |
21 | ) 22 | } 23 | 24 | export const Avatar: FC = (author) => { 25 | const navigate = useNavigate() 26 | return ( 27 | {author.loginname} { 33 | e.preventDefault() 34 | navigate(`/user/${author.loginname}`) 35 | }} 36 | /> 37 | ) 38 | } 39 | -------------------------------------------------------------------------------- /src/components/common.module.css: -------------------------------------------------------------------------------- 1 | .link { 2 | border-bottom: 1px solid #f0f0f0 !important; 3 | } 4 | 5 | .link:visited h3 { 6 | color: #888; 7 | } 8 | -------------------------------------------------------------------------------- /src/components/header.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import { useNavigate } from 'react-router-dom' 3 | import { NavBar } from 'antd-mobile' 4 | import { NavBarProps } from 'antd-mobile/es/components/nav-bar' 5 | 6 | export const Header: FC = ({ right, ...props }) => { 7 | const navigate = useNavigate() 8 | 9 | return ( 10 | { 12 | // TODO: 13 | if (history.length === 1) { 14 | // If no history, go to homepage 15 | navigate('/') 16 | } else { 17 | navigate(-1) 18 | } 19 | }} 20 | right={right ?
{right}
: null} 21 | {...props} 22 | /> 23 | ) 24 | } 25 | -------------------------------------------------------------------------------- /src/components/loading.tsx: -------------------------------------------------------------------------------- 1 | import { Loading as AntdLoading } from 'antd-mobile' 2 | 3 | export const Loading = () => ( 4 |
11 | 12 |
13 | ) 14 | 15 | export const LoadingMore = () => 16 | -------------------------------------------------------------------------------- /src/components/markdown.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import { Viewer, ViewerProps } from '@bytemd/react' 3 | import mediumZoom from '@bytemd/plugin-medium-zoom' 4 | import gfm from '@bytemd/plugin-gfm' 5 | import 'github-markdown-css' 6 | 7 | const plugins = [mediumZoom(), gfm()] 8 | 9 | export const MarkdownViewer: FC> = ({ value }) => { 10 | return 11 | } 12 | -------------------------------------------------------------------------------- /src/components/no-more.module.css: -------------------------------------------------------------------------------- 1 | .text { 2 | text-align: center; 3 | color: #aaa; 4 | margin: 10px auto 20px; 5 | font-size: 12px; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/no-more.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import $s from './no-more.module.css' 3 | 4 | export const NoMore: FC = () => { 5 | return
--- 没有更多了 ---
6 | } 7 | -------------------------------------------------------------------------------- /src/components/reply.tsx: -------------------------------------------------------------------------------- 1 | import { AvatarRow } from './avatar' 2 | import { MarkdownViewer } from './markdown' 3 | import { TimeAgo } from './timeago' 4 | 5 | export const Reply = (props) => ( 6 |
7 |
8 | 9 |
{props.author.loginname}
10 | 11 |
12 |
13 | 14 | {/* */} 15 |
16 | ) 17 | -------------------------------------------------------------------------------- /src/components/styled.module.css: -------------------------------------------------------------------------------- 1 | .title { 2 | margin: 0; 3 | font-size: 16px; 4 | line-height: 24px; 5 | font-weight: normal; 6 | color: #333; 7 | white-space: nowrap; 8 | text-overflow: ellipsis; 9 | overflow: hidden; 10 | } 11 | -------------------------------------------------------------------------------- /src/components/styled.tsx: -------------------------------------------------------------------------------- 1 | import $s from './styled.module.css' 2 | 3 | export const Title = (props) =>

4 | -------------------------------------------------------------------------------- /src/components/timeago.module.css: -------------------------------------------------------------------------------- 1 | .time { 2 | font-size: 12px; 3 | /* line-height: 24px; */ 4 | color: #838383; 5 | } 6 | -------------------------------------------------------------------------------- /src/components/timeago.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import TimeAgoLib from 'timeago-react' 3 | import $s from './timeago.module.css' 4 | 5 | export const TimeAgo: FC<{ text?: string; time: string }> = ({ 6 | text, 7 | time, 8 | }) => ( 9 | 10 | {text} 11 | 12 | 13 | ) 14 | -------------------------------------------------------------------------------- /src/components/topic.module.css: -------------------------------------------------------------------------------- 1 | .extra { 2 | display: flex; 3 | height: 24px; 4 | align-items: center; 5 | justify-content: space-between; 6 | } 7 | 8 | .left { 9 | display: flex; 10 | align-items: center; 11 | } 12 | 13 | .right { 14 | font-size: 12px; 15 | color: #b4b4b4; 16 | margin-left: 8px; 17 | } 18 | -------------------------------------------------------------------------------- /src/components/topic.tsx: -------------------------------------------------------------------------------- 1 | import { FC } from 'react' 2 | import { useNavigate } from 'react-router-dom' 3 | import { colors } from '../utils' 4 | import $c from './common.module.css' 5 | import $s from './topic.module.css' 6 | import { Avatar } from './avatar' 7 | import { TimeAgo } from './timeago' 8 | import { Ellipsis, List, Tag } from 'antd-mobile' 9 | 10 | export interface TopicProps { 11 | id: string 12 | author_id: string 13 | tab: string 14 | content: string 15 | title: string 16 | last_reply_at: string 17 | good: boolean 18 | top: boolean 19 | reply_count: number 20 | visit_count: number 21 | create_at: string 22 | author: { 23 | loginname: string 24 | avatar_url: string 25 | } 26 | } 27 | 28 | export const Topic: FC = (props) => { 29 | const navigate = useNavigate() 30 | return ( 31 | } 35 | description={ 36 |
37 |
38 | 39 | {props.top 40 | ? '置顶' 41 | : props.good 42 | ? '精华' 43 | : { 44 | share: '分享', 45 | ask: '问答', 46 | job: '招聘', 47 | }[props.tab]} 48 | 49 |
50 | {props.reply_count} 51 | 回复 / {props.visit_count} 浏览 52 |
53 |
54 | 55 |
56 | } 57 | onClick={() => { 58 | navigate(`/topic/${props.id}`) 59 | }} 60 | > 61 | 62 |
63 | ) 64 | } 65 | 66 | export const UserTopic: FC = (props) => { 67 | const navigate = useNavigate() 68 | 69 | return ( 70 | } 73 | arrow={false} 74 | description={ 75 |
76 |
{props.author.loginname}
77 | 78 |
79 | } 80 | onClick={() => { 81 | navigate(`/topic/${props.id}`) 82 | }} 83 | > 84 | 85 |
86 | ) 87 | } 88 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | -------------------------------------------------------------------------------- /src/globals.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | padding: 0; 4 | margin: 0; 5 | font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, 6 | Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; 7 | } 8 | 9 | a { 10 | color: inherit; 11 | text-decoration: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | } 17 | 18 | .fade-enter { 19 | opacity: 0; 20 | z-index: 1; 21 | } 22 | 23 | .fade-enter.fade-enter-active { 24 | opacity: 1; 25 | transition: opacity 250ms ease-in; 26 | } 27 | -------------------------------------------------------------------------------- /src/hooks/auth.ts: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import { fetchAPI } from '@/utils' 3 | 4 | export const useAuth = () => { 5 | const [token, setToken] = useState(null) 6 | const [loginname, setLoginname] = useState(null) 7 | const [count, setCount] = useState(0) 8 | 9 | const queueAfterToken = [] 10 | 11 | const runAfterTokenVerified = (callback) => { 12 | queueAfterToken.push(callback) 13 | } 14 | 15 | const fetchUnreadCount = async (token) => { 16 | const { data } = await fetchAPI('/message/count?accesstoken=' + token) 17 | setCount(data) 18 | setTimeout(() => { 19 | fetchUnreadCount(token) 20 | }, 10000) 21 | } 22 | 23 | const verifyToken = async (token) => { 24 | try { 25 | const { id, loginname, avatar_url } = await fetchAPI('/accesstoken', { 26 | accesstoken: token, 27 | }) 28 | setToken(token) 29 | setLoginname(loginname) 30 | fetchUnreadCount(token) 31 | localStorage.setItem('token', token) 32 | // queueAfterToken.forEach(callback => callback()) 33 | // queueAfterToken = [] 34 | return true 35 | } catch (err) { 36 | return false 37 | } 38 | } 39 | 40 | return { 41 | token, 42 | loginname, 43 | count, 44 | fetchUnreadCount, 45 | runAfterTokenVerified, 46 | verifyToken, 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/icon.svg: -------------------------------------------------------------------------------- 1 | logo -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense, useEffect } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import { BrowserRouter as Router, useRoutes } from 'react-router-dom' 4 | import { useAuth } from '@/hooks/auth' 5 | import { QueryClient, QueryClientProvider } from 'react-query' 6 | import './globals.css' 7 | import routes from '~react-pages' 8 | 9 | const queryClient = new QueryClient() 10 | 11 | const App = () => { 12 | const { verifyToken, fetchUnreadCount } = useAuth() 13 | 14 | useEffect(() => { 15 | const init = async () => { 16 | const token = localStorage.getItem('token') 17 | if (token) { 18 | const isValid = await verifyToken(token) 19 | if (isValid) { 20 | fetchUnreadCount(token) 21 | } 22 | } 23 | } 24 | init() 25 | }, []) 26 | 27 | return ( 28 | 29 | Loading...

}>{useRoutes(routes)}
30 |
31 | ) 32 | } 33 | 34 | const root = createRoot(document.getElementById('root')!) 35 | root.render( 36 | 37 | 38 | 39 | ) 40 | -------------------------------------------------------------------------------- /src/pages/about.tsx: -------------------------------------------------------------------------------- 1 | import { List } from 'antd-mobile' 2 | import { FC } from 'react' 3 | import { ReactComponent as Logo } from '../cnodejs.svg' 4 | import { Header } from '@/components/header' 5 | 6 | const Linker: FC<{ title: string; url: string; description?: string }> = ({ 7 | title, 8 | url, 9 | description = url, 10 | }) => ( 11 | { 15 | window.open(url) 16 | }} 17 | > 18 | {title} 19 | 20 | ) 21 | 22 | export default function About() { 23 | return ( 24 | <> 25 |
关于
26 |
34 | 35 |
36 | 37 | 38 | 39 | 44 | 45 | 46 | ) 47 | } 48 | -------------------------------------------------------------------------------- /src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { useSearchParams, useNavigate, Link } from 'react-router-dom' 2 | import { fetchAPI } from '@/utils' 3 | import { Topic, TopicProps } from '@/components/topic' 4 | import { Badge, InfiniteScroll, List, Space, Tabs } from 'antd-mobile' 5 | import { BellOutline, UserOutline } from 'antd-mobile-icons' 6 | import { useAuth } from '@/hooks/auth' 7 | import { Header } from '@/components/header' 8 | import { useInfiniteQuery } from 'react-query' 9 | import { Loading } from '@/components/loading' 10 | 11 | export default function Home() { 12 | const [searchParams] = useSearchParams() 13 | const tab = searchParams.get('tab') ?? 'all' 14 | const navigate = useNavigate() 15 | 16 | const { count, loginname } = useAuth() 17 | 18 | const { data, fetchNextPage, hasNextPage } = useInfiniteQuery<{ 19 | data: TopicProps[] 20 | cursor: number 21 | }>( 22 | ['topics', tab], 23 | async ({ pageParam = 1 }) => { 24 | const json = await fetchAPI( 25 | `/topics?mdrender=false&tab=${tab}&page=${pageParam}&limit=20` 26 | ) 27 | json.cursor = pageParam + 1 28 | return json 29 | }, 30 | { 31 | getNextPageParam: (lastPage) => lastPage.cursor, 32 | } 33 | ) 34 | 35 | return ( 36 |
37 |
41 | 42 | {count ? ( 43 | 44 | 45 | 46 | ) : ( 47 | 48 | )} 49 | 50 | 51 | 52 | 53 | 54 | } 55 | > 56 | CNode 57 |
58 | { 60 | navigate(key === 'all' ? '/' : '/?tab=' + key) 61 | }} 62 | > 63 | {[ 64 | { id: 'all', title: '全部' }, 65 | { id: 'good', title: '精华' }, 66 | { id: 'share', title: '分享' }, 67 | { id: 'ask', title: '问答' }, 68 | { id: 'job', title: '招聘' }, 69 | ].map(({ id, title }) => ( 70 | 71 | ))} 72 | 73 | 74 | {!data ? ( 75 | 76 | ) : ( 77 | 78 | {data.pages 79 | .map((page) => { 80 | return page.data.map((topic) => { 81 | return 82 | }) 83 | }) 84 | .flat()} 85 | 86 | )} 87 | { 89 | await fetchNextPage() 90 | }} 91 | hasMore={hasNextPage} 92 | /> 93 | 94 | {/* */} 102 |
103 | ) 104 | } 105 | -------------------------------------------------------------------------------- /src/pages/login.tsx: -------------------------------------------------------------------------------- 1 | import { useNavigate } from 'react-router-dom' 2 | import { useAuth } from '@/hooks/auth' 3 | import { QrReader } from 'react-qr-reader' 4 | // import { colors } from '../../utils' 5 | // import style from './login.css' 6 | 7 | export default function Login() { 8 | const navigate = useNavigate() 9 | // props.dispatch(authActions.hideLogin())} 14 | // > 15 | // 请在 PC 端登录后,点击右上角的 16 | // 设置 17 | // 进入设置页面获取 Access Token 18 | // props.dispatch(authActions.inputToken(e.target.value))} 22 | // /> 23 | // 24 | // 25 | 26 | const { verifyToken } = useAuth() 27 | 28 | return ( 29 | { 31 | const token = res?.getText() 32 | console.log('scan', token) 33 | if (!token) return 34 | 35 | const isValid = await verifyToken(token) 36 | if (isValid) { 37 | navigate('/') 38 | } 39 | }} 40 | constraints={{ 41 | facingMode: 'environment', 42 | }} // style={{ width: "100%" }} 43 | /> 44 | ) 45 | } 46 | -------------------------------------------------------------------------------- /src/pages/message.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect, FC } from 'react' 2 | import { useNavigate } from 'react-router-dom' 3 | import { useAuth } from '@/hooks/auth' 4 | import { colors, fetchAPI } from '@/utils' 5 | import { CheckOutline } from 'antd-mobile-icons' 6 | import { Header } from '@/components/header' 7 | import { List, Toast } from 'antd-mobile' 8 | import { Loading } from '@/components/loading' 9 | import { NoMore } from '@/components/no-more' 10 | import { AvatarRow } from '@/components/avatar' 11 | import { Title } from '@/components/styled' 12 | 13 | const MessageItem: FC = (props) => { 14 | const navigate = useNavigate() 15 | return ( 16 | { 18 | navigate(`/topic/${props.topic.id}`) 19 | }} 20 | style={props.has_read ? {} : { background: '#f4fcf0' }} 21 | > 22 | 23 |
24 | {props.author.loginname}{' '} 25 | 回复了你的话题 26 |
27 | {props.topic.title} 28 |
29 |
30 | ) 31 | } 32 | 33 | export default function Message() { 34 | const [unread, setUnread] = useState([]) 35 | const [read, setRead] = useState([]) 36 | const [isLoading, setIsLoading] = useState(false) 37 | const { token } = useAuth() 38 | 39 | const updateMessages = async () => { 40 | setIsLoading(true) 41 | try { 42 | const { data } = await fetchAPI('/messages?accesstoken=' + token) 43 | setUnread(data.hasnot_read_messages) 44 | setRead(data.has_read_messages) 45 | } finally { 46 | setIsLoading(false) 47 | } 48 | } 49 | 50 | const markAllAsRead = async () => { 51 | await fetchAPI('/message/mark_all', { 52 | accesstoken: token, 53 | }) 54 | } 55 | 56 | useEffect(() => { 57 | // this.props.runAfterTokenVerified(this.props.fetchMessages) 58 | 59 | if (token) { 60 | updateMessages() 61 | } 62 | }, []) 63 | 64 | if (!token) { 65 | // return // TODO: 66 | } 67 | 68 | return ( 69 |
70 |
{ 74 | await markAllAsRead() 75 | Toast.show('已标记全部消息为已读') 76 | await updateMessages() 77 | }} 78 | > 79 | } 80 | > 81 | 消息 82 |
83 | {isLoading ? ( 84 | 85 | ) : ( 86 | <> 87 | {unread.map((message) => ( 88 | 89 | ))} 90 | {read.map((message) => ( 91 | 92 | ))} 93 | 94 | 95 | )} 96 |
97 | ) 98 | } 99 | -------------------------------------------------------------------------------- /src/pages/post.module.css: -------------------------------------------------------------------------------- 1 | .control { 2 | margin: 8px 0 !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/pages/post.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import { useNavigate } from 'react-router-dom' 3 | import { Header } from '@/components/header' 4 | import { fetchAPI } from '@/utils' 5 | import $s from './post.module.css' 6 | import { useAuth } from '@/hooks/auth' 7 | import { PlayOutline } from 'antd-mobile-icons' 8 | import { Input, Toast } from 'antd-mobile' 9 | 10 | const postTabs = [ 11 | { id: 'ask', name: '问答' }, 12 | { id: 'share', name: '分享' }, 13 | { id: 'job', name: '招聘' }, 14 | { id: 'dev', name: '客户端测试' }, 15 | ] 16 | 17 | export default function Post() { 18 | const navigate = useNavigate() 19 | const [tab, setTab] = useState('ask') 20 | const [title, setTitle] = useState('') 21 | const [content, setContent] = useState('') 22 | const [titleErrorVisible, setTitleErrorVisible] = useState(false) 23 | const [contentErrorVisible, setContentErrorVisible] = useState(false) 24 | 25 | const { token } = useAuth() 26 | 27 | const showTitleError = titleErrorVisible && !title 28 | const showContentError = contentErrorVisible && !content 29 | 30 | return ( 31 |
{ 33 | e.preventDefault() 34 | if (!title || !content) { 35 | setTitleErrorVisible(!title) 36 | setContentErrorVisible(!content) 37 | return 38 | } 39 | try { 40 | const { topic_id } = await fetchAPI('/topics', { 41 | title, 42 | tab: 'dev', // for test 43 | // tab, 44 | content, 45 | accesstoken: token, 46 | }) 47 | navigate(`/topic/${topic_id}`, { replace: true }) 48 | } catch (err) { 49 | Toast.show(err.message) 50 | } 51 | }} 52 | > 53 |
}>发布话题
54 |
55 | { 62 | // setTitle(e.target.value) 63 | // }, 64 | // error: showTitleError, 65 | // }} 66 | // error={showTitleError} 67 | // helperText={showTitleError ? '请输入标题' : null} 68 | /> 69 | {/* { 80 | setTab(e.target.value) 81 | }, 82 | }} 83 | > 84 | {postTabs.map(({ id, name }) => ( 85 | 88 | ))} 89 | */} 90 | { 102 | // setContent(e.target.value) 103 | // }, 104 | // error: showContentError, 105 | // }} 106 | // error={showContentError} 107 | // helperText={showContentError ? '请输入内容' : null} 108 | /> 109 |
110 |
111 | ) 112 | } 113 | -------------------------------------------------------------------------------- /src/pages/topic/[id].tsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from 'react' 2 | import { fetchAPI, shareCurrentUrl } from '@/utils' 3 | import $s from './detail.module.css' 4 | import { SendOutline } from 'antd-mobile-icons' 5 | import { Header } from '@/components/header' 6 | import { MarkdownViewer } from '@/components/markdown' 7 | import { Reply } from '@/components/reply' 8 | import { AvatarRow } from '@/components/avatar' 9 | import { Loading } from '@/components/loading' 10 | import { NoMore } from '@/components/no-more' 11 | import { TimeAgo } from '@/components/timeago' 12 | import { useParams } from 'react-router-dom' 13 | 14 | export default function Topic() { 15 | const params = useParams<'id'>() 16 | 17 | const [topic, setTopic] = useState(null) 18 | const [isLoading, setIsLoading] = useState(false) 19 | 20 | useEffect(() => { 21 | if (!params.id) return 22 | 23 | const init = async () => { 24 | try { 25 | setIsLoading(true) 26 | const { data } = await fetchAPI(`/topic/${params.id}?mdrender=false`) 27 | setTopic(data) 28 | } finally { 29 | setIsLoading(false) 30 | } 31 | } 32 | 33 | init() 34 | }, [params.id]) 35 | 36 | return ( 37 | <> 38 |
{ 42 | shareCurrentUrl(topic ? topic.title : '') 43 | }} 44 | /> 45 | } 46 | > 47 | 话题 48 |
49 | {!topic ? ( 50 | 51 | ) : ( 52 |
53 |
{topic.title}
54 | 55 |
{topic.author.loginname}
56 |
57 | 58 | 59 | {topic.visit_count} 60 | 次浏览 61 | 62 |
63 |
64 | 65 |
66 |
72 | {topic.reply_count 73 | ? `共 ${topic.reply_count} 条回复` 74 | : '暂无回复'} 75 |
76 | {topic.replies.map((reply) => ( 77 | 78 | ))} 79 | 80 |
81 |
82 | )} 83 | 84 | ) 85 | } 86 | -------------------------------------------------------------------------------- /src/pages/topic/detail.module.css: -------------------------------------------------------------------------------- 1 | .container { 2 | padding: 12px 16px; 3 | color: #333; 4 | } 5 | 6 | .title { 7 | font-size: 20px; 8 | margin-bottom: 12px; 9 | } 10 | 11 | .info { 12 | display: flex; 13 | margin: 12px 0; 14 | } 15 | 16 | .prettyprint { 17 | overflow: auto; 18 | } 19 | 20 | .container h2 { 21 | font-size: 20px; 22 | } 23 | 24 | .tip { 25 | font-size: 12px; 26 | line-height: 24px; 27 | color: #838383; 28 | } 29 | -------------------------------------------------------------------------------- /src/pages/user/[loginname].tsx: -------------------------------------------------------------------------------- 1 | import { Tabs, List } from 'antd-mobile' 2 | import { SendOutline } from 'antd-mobile-icons' 3 | import { useState, useEffect } from 'react' 4 | import { Header } from '@/components/header' 5 | import { fetchAPI, shareCurrentUrl } from '@/utils' 6 | import { UserTopic } from '@/components/topic' 7 | import { NoMore } from '@/components/no-more' 8 | import { Loading } from '@/components/loading' 9 | import { AvatarRow } from '@/components/avatar' 10 | import { TimeAgo } from '@/components/timeago' 11 | import { useParams } from 'react-router-dom' 12 | 13 | export default function User() { 14 | const { loginname } = useParams<'loginname'>() 15 | const [author, setAuthor] = useState(null) 16 | const [tabKey, setTabKey] = useState('0') 17 | const [tabData, setTabData] = useState([[], [], []]) 18 | 19 | useEffect(() => { 20 | const init = async () => { 21 | if (!loginname) return 22 | 23 | const [{ data }, { data: collectData }] = await Promise.all([ 24 | fetchAPI(`/user/${loginname}`), 25 | fetchAPI(`/topic_collect/${loginname}`), 26 | ]) 27 | setAuthor(data) 28 | setTabData([data.recent_replies, data.recent_topics, collectData]) 29 | } 30 | 31 | init() 32 | }, [loginname]) 33 | 34 | return ( 35 |
36 |
{ 40 | shareCurrentUrl(author ? author.loginname : '') 41 | }} 42 | /> 43 | } 44 | > 45 | 用户 46 |
47 | {author ? ( 48 |
49 | 50 |
{author.loginname}
51 |
52 | 53 |
54 |
55 | { 58 | setTabKey(key) 59 | }} 60 | > 61 | {['最近参与', '最近发布', '话题收藏'].map((title, index) => { 62 | return 63 | })} 64 | 65 | 66 | {tabData[tabKey].map((topic) => ( 67 | 68 | ))} 69 | 70 | 71 |
72 | ) : ( 73 | 74 | )} 75 |
76 | ) 77 | } 78 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import { Toast } from 'antd-mobile' 2 | 3 | export const colors = { 4 | background: '#444', 5 | primary: '#80bd01', 6 | tag: '#80bd01', 7 | avatarBorder: '#80bd01', 8 | avatarBackground: '#f5f5f5', 9 | } 10 | 11 | export async function fetchAPI(url: string, body?: Record) { 12 | const options: RequestInit = {} 13 | // if body passed in then use posts 14 | if (body) { 15 | options.method = 'POST' 16 | options.headers = { 17 | // 'Content-Type': 'application/json', 18 | 'Content-Type': 'application/x-www-form-urlencoded', 19 | } 20 | // options.body = JSON.stringify(body) 21 | options.body = new URLSearchParams(body).toString() 22 | } 23 | 24 | const res = await fetch(`https://cnodejs.org/api/v1${url}`, options) 25 | const json = await res.json() 26 | 27 | if (!json.success) { 28 | throw new Error(json.error_msg) 29 | } 30 | 31 | return json 32 | } 33 | 34 | export function copy(text: string) { 35 | const $ = document.createElement('textarea') 36 | $.value = text 37 | document.body.appendChild($) 38 | $.select() 39 | document.execCommand('copy') 40 | document.body.removeChild($) 41 | } 42 | 43 | export function shareCurrentUrl(text: string) { 44 | if (navigator.share) { 45 | return navigator.share({ 46 | title: text, 47 | text: text, 48 | url: window.location.href, 49 | }) 50 | } else { 51 | copy(window.location.href) 52 | Toast.show('链接已复制至剪贴板') 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2019", 4 | "moduleResolution": "node", 5 | "lib": ["DOM", "ES2019"], 6 | "strict": true, 7 | "jsx": "react-jsx", 8 | "esModuleInterop": true, 9 | "baseUrl": ".", 10 | "paths": { 11 | "@/*": ["src/*"] 12 | } 13 | }, 14 | "include": ["src"] 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import svgr from 'vite-plugin-svgr' 3 | import pages from 'vite-plugin-pages' 4 | import react from '@vitejs/plugin-react' 5 | import tsconfigPaths from 'vite-tsconfig-paths' 6 | 7 | export default defineConfig({ 8 | plugins: [svgr(), pages({ resolver: 'react' }), react(), tsconfigPaths()], 9 | }) 10 | --------------------------------------------------------------------------------