From 2cd811f68b0b96b08a6deb5715a3b389d1053c55 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Fri, 21 Mar 2025 13:09:08 +0800 Subject: [PATCH] init --- .coding-ci.yml | 24 + .eslintrc.cjs | 23 + .gitignore | 28 + .husky/pre-commit | 1 + .prettierignore | 6 + .prettierrc | 7 + README.md | 1 + babel.config.cjs | 13 + config.ts | 35 + index.html | 26 + package.json | 62 + public/logo.png | Bin 0 -> 2985 bytes public/vite.svg | 18 + src/App.tsx | 58 + src/assets/App.less | 337 + src/assets/icons/history.svg | 10 + src/assets/icons/logo.svg | 43 + src/assets/icons/logo_no_text.svg | 9 + src/assets/icons/save.svg | 3 + src/assets/icons/view.svg | 3 + src/assets/index.less | 174 + src/components/Dot.tsx | 33 + src/components/app/title-bar.less | 28 + src/components/app/title-bar.tsx | 47 + src/components/messages/Modal.tsx | 175 + src/components/pagination/index.tsx | 29 + src/components/popover/dropdown-menu.tsx | 104 + src/components/test/index.tsx | 28 + src/core/bridge.ts | 69 + src/core/cache.ts | 54 + src/core/config.ts | 23 + src/core/device-id.ts | 87 + src/core/proofread-queue.ts | 127 + src/core/proofread-util.ts | 174 + src/core/string-utils.ts | 62 + src/core/use-demo-store.ts | 32 + src/main.tsx | 5 + .../components/ellipsi-paragraph.tsx | 39 + src/pages/detection/components/generating.tsx | 30 + .../detection/components/style.module.less | 100 + src/pages/detection/components/types.ts | 7 + src/pages/detection/sense.tsx | 238 + .../home-deprecated/components/editor.less | 297 + .../components/home-proofread.less | 777 ++ .../home-deprecated/components/icons.tsx | 135 + .../components/images/loading.svg | 9 + .../components/images/logo.tsx | 45 + .../components/images/notice.tsx | 391 + .../home-deprecated/components/index.tsx | 366 + .../components/panel-right-state.tsx | 73 + .../components/parse-proofread-result.ts | 70 + .../components/proofread-item.tsx | 179 + src/pages/home-deprecated/components/tools.ts | 59 + src/pages/home-deprecated/components/types.ts | 202 + src/pages/home-deprecated/images/bg.png | Bin 0 -> 10334 bytes .../images/btn_arrow_close.png | Bin 0 -> 490 bytes .../home-deprecated/images/btn_arrow_open.png | Bin 0 -> 476 bytes src/pages/home-deprecated/images/check.gif | Bin 0 -> 19515 bytes .../home-deprecated/images/icon-export.png | Bin 0 -> 408 bytes .../home-deprecated/images/icon-idle.png | Bin 0 -> 11573 bytes .../home-deprecated/images/icon-perfect.png | Bin 0 -> 4899 bytes .../home-deprecated/images/icon-setting.png | Bin 0 -> 508 bytes src/pages/home-deprecated/images/perfect.png | Bin 0 -> 15904 bytes .../home-deprecated/images/processing.gif | Bin 0 -> 47741 bytes src/pages/home-deprecated/index.tsx | 437 + src/pages/home-deprecated/notice.tsx | 79 + src/pages/lexicon/components/columns.tsx | 106 + src/pages/lexicon/components/import-file.tsx | 119 + src/pages/lexicon/components/modify-modal.tsx | 109 + src/pages/lexicon/components/save-modal.tsx | 243 + src/pages/lexicon/index.tsx | 40 + src/pages/lexicon/lexicon.less | 170 + src/pages/lexicon/lexicon.tsx | 355 + .../login/components/terms/agreement.tsx | 284 + src/pages/login/components/terms/env.ts | 2 + src/pages/login/components/terms/privacy.tsx | 526 + src/pages/login/components/user/avatar.tsx | 9 + src/pages/login/components/user/input.tsx | 72 + .../login/components/user/login-form.tsx | 139 + .../login/components/user/login-modal.tsx | 92 + src/pages/login/components/user/qr-login.tsx | 81 + .../login/components/user/s/user.module.less | 94 + .../login/components/user/user.module.less | 81 + src/pages/login/index.tsx | 39 + src/pages/login/login.less | 22 + src/pages/normal/Default.tsx | 62 + src/pages/normal/Main.tsx | 51 + src/pages/normal/contact.tsx | 37 + src/pages/normal/images/wechat_qrcode.png | Bin 0 -> 6194 bytes src/pages/normal/test.tsx | 49 + src/pages/proofread/components/editor.less | 380 + .../components/gov/collapse-info.tsx | 10 + .../proofread/components/gov/gov-extra.tsx | 45 + .../components/gov/leader-position.tsx | 0 .../components/gov/leader-saying.tsx | 0 .../components/gov/parse-gov-extra.ts | 77 + src/pages/proofread/components/gov/readme.md | 9 + src/pages/proofread/components/icons.tsx | 157 + .../components/images/arrow-icon.tsx | 8 + .../proofread/components/images/loading.svg | 9 + .../proofread/components/images/logo.tsx | 47 + .../proofread/components/images/notice.tsx | 391 + src/pages/proofread/components/index.tsx | 576 + .../components/panel-right-state.tsx | 73 + .../components/parse-proofread-result.ts | 68 + .../components/proofread-item-description.tsx | 90 + .../proofread/components/proofread-item.tsx | 195 + src/pages/proofread/components/proofread.less | 865 ++ src/pages/proofread/components/tools.ts | 59 + src/pages/proofread/components/types.ts | 202 + .../components/virtual-list-item.tsx | 32 + src/pages/proofread/images/bg.png | Bin 0 -> 10334 bytes .../proofread/images/btn_arrow_close.png | Bin 0 -> 490 bytes src/pages/proofread/images/btn_arrow_open.png | Bin 0 -> 476 bytes src/pages/proofread/images/check.gif | Bin 0 -> 19515 bytes src/pages/proofread/images/icon-export.png | Bin 0 -> 408 bytes src/pages/proofread/images/icon-idle.png | Bin 0 -> 11573 bytes src/pages/proofread/images/icon-perfect.png | Bin 0 -> 4899 bytes src/pages/proofread/images/icon-setting.png | Bin 0 -> 508 bytes src/pages/proofread/images/perfect.png | Bin 0 -> 15904 bytes src/pages/proofread/images/processing.gif | Bin 0 -> 47741 bytes src/pages/proofread/index.tsx | 997 ++ src/pages/proofread/notice.tsx | 103 + src/pages/setting/index.tsx | 107 + src/pages/setting/style.less | 24 + src/pages/test/mqtt.tsx | 50 + src/routes/index.tsx | 31 + src/service/api/detection.ts | 29 + src/service/api/document.ts | 142 + src/service/api/index.ts | 5 + src/service/api/lexicon.ts | 131 + src/service/api/settings.ts | 40 + src/service/api/user.ts | 126 + src/service/api/util.ts | 16 + src/service/api/v3/document.ts | 104 + src/service/api/v3/enums.ts | 10 + src/service/create-new-document.ts | 0 src/service/exportDocument.ts | 42 + src/service/fake/api.ts | 74 + src/service/fake/doc-2236.ts | 10927 ++++++++++++++++ src/service/fake/document.ts | 231 + src/service/request.ts | 193 + src/service/types.ts | 78 + src/service/types/base.ts | 61 + src/service/types/document.ts | 359 + src/service/types/lexicon.ts | 138 + src/service/types/notice.ts | 37 + src/service/types/settings.ts | 31 + src/service/types/user.ts | 32 + src/service/use-proofread.ts | 201 + src/service/userinfoStore.ts | 89 + src/types/account.ts | 28 + src/types/auth.ts | 74 + src/types/base.ts | 61 + src/types/detection.d.ts | 16 + src/types/document.ts | 79 + src/types/proofread-state.ts | 10 + src/types/proofread.ts | 82 + src/types/type-proofread.d.ts | 20 + src/types/v3/enums.ts | 110 + src/types/v3/proofread.d.ts | 172 + src/utils/base64.ts | 23 + src/utils/cloneDeep.ts | 16 + src/utils/element-util.ts | 22 + src/utils/sleep.ts | 9 + src/utils/storage.ts | 45 + src/utils/strings.ts | 89 + src/utils/vars.ts | 12 + src/vite-env.d.ts | 279 + tsconfig.json | 30 + tsconfig.node.json | 10 + vite.config.offline.ts | 24 + vite.config.ts | 57 + yarn.lock | 5958 +++++++++ 174 files changed, 33200 insertions(+) create mode 100644 .coding-ci.yml create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .husky/pre-commit create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 babel.config.cjs create mode 100644 config.ts create mode 100644 index.html create mode 100644 package.json create mode 100644 public/logo.png create mode 100644 public/vite.svg create mode 100644 src/App.tsx create mode 100644 src/assets/App.less create mode 100644 src/assets/icons/history.svg create mode 100644 src/assets/icons/logo.svg create mode 100644 src/assets/icons/logo_no_text.svg create mode 100644 src/assets/icons/save.svg create mode 100644 src/assets/icons/view.svg create mode 100644 src/assets/index.less create mode 100644 src/components/Dot.tsx create mode 100644 src/components/app/title-bar.less create mode 100644 src/components/app/title-bar.tsx create mode 100644 src/components/messages/Modal.tsx create mode 100644 src/components/pagination/index.tsx create mode 100644 src/components/popover/dropdown-menu.tsx create mode 100644 src/components/test/index.tsx create mode 100644 src/core/bridge.ts create mode 100644 src/core/cache.ts create mode 100644 src/core/config.ts create mode 100644 src/core/device-id.ts create mode 100644 src/core/proofread-queue.ts create mode 100644 src/core/proofread-util.ts create mode 100644 src/core/string-utils.ts create mode 100644 src/core/use-demo-store.ts create mode 100644 src/main.tsx create mode 100644 src/pages/detection/components/ellipsi-paragraph.tsx create mode 100644 src/pages/detection/components/generating.tsx create mode 100644 src/pages/detection/components/style.module.less create mode 100644 src/pages/detection/components/types.ts create mode 100644 src/pages/detection/sense.tsx create mode 100644 src/pages/home-deprecated/components/editor.less create mode 100644 src/pages/home-deprecated/components/home-proofread.less create mode 100644 src/pages/home-deprecated/components/icons.tsx create mode 100644 src/pages/home-deprecated/components/images/loading.svg create mode 100644 src/pages/home-deprecated/components/images/logo.tsx create mode 100644 src/pages/home-deprecated/components/images/notice.tsx create mode 100644 src/pages/home-deprecated/components/index.tsx create mode 100644 src/pages/home-deprecated/components/panel-right-state.tsx create mode 100644 src/pages/home-deprecated/components/parse-proofread-result.ts create mode 100644 src/pages/home-deprecated/components/proofread-item.tsx create mode 100644 src/pages/home-deprecated/components/tools.ts create mode 100644 src/pages/home-deprecated/components/types.ts create mode 100644 src/pages/home-deprecated/images/bg.png create mode 100644 src/pages/home-deprecated/images/btn_arrow_close.png create mode 100644 src/pages/home-deprecated/images/btn_arrow_open.png create mode 100644 src/pages/home-deprecated/images/check.gif create mode 100644 src/pages/home-deprecated/images/icon-export.png create mode 100644 src/pages/home-deprecated/images/icon-idle.png create mode 100644 src/pages/home-deprecated/images/icon-perfect.png create mode 100644 src/pages/home-deprecated/images/icon-setting.png create mode 100644 src/pages/home-deprecated/images/perfect.png create mode 100644 src/pages/home-deprecated/images/processing.gif create mode 100644 src/pages/home-deprecated/index.tsx create mode 100644 src/pages/home-deprecated/notice.tsx create mode 100644 src/pages/lexicon/components/columns.tsx create mode 100644 src/pages/lexicon/components/import-file.tsx create mode 100644 src/pages/lexicon/components/modify-modal.tsx create mode 100644 src/pages/lexicon/components/save-modal.tsx create mode 100644 src/pages/lexicon/index.tsx create mode 100644 src/pages/lexicon/lexicon.less create mode 100644 src/pages/lexicon/lexicon.tsx create mode 100644 src/pages/login/components/terms/agreement.tsx create mode 100644 src/pages/login/components/terms/env.ts create mode 100644 src/pages/login/components/terms/privacy.tsx create mode 100644 src/pages/login/components/user/avatar.tsx create mode 100644 src/pages/login/components/user/input.tsx create mode 100644 src/pages/login/components/user/login-form.tsx create mode 100644 src/pages/login/components/user/login-modal.tsx create mode 100644 src/pages/login/components/user/qr-login.tsx create mode 100644 src/pages/login/components/user/s/user.module.less create mode 100644 src/pages/login/components/user/user.module.less create mode 100644 src/pages/login/index.tsx create mode 100644 src/pages/login/login.less create mode 100644 src/pages/normal/Default.tsx create mode 100644 src/pages/normal/Main.tsx create mode 100644 src/pages/normal/contact.tsx create mode 100644 src/pages/normal/images/wechat_qrcode.png create mode 100644 src/pages/normal/test.tsx create mode 100644 src/pages/proofread/components/editor.less create mode 100644 src/pages/proofread/components/gov/collapse-info.tsx create mode 100644 src/pages/proofread/components/gov/gov-extra.tsx create mode 100644 src/pages/proofread/components/gov/leader-position.tsx create mode 100644 src/pages/proofread/components/gov/leader-saying.tsx create mode 100644 src/pages/proofread/components/gov/parse-gov-extra.ts create mode 100644 src/pages/proofread/components/gov/readme.md create mode 100644 src/pages/proofread/components/icons.tsx create mode 100644 src/pages/proofread/components/images/arrow-icon.tsx create mode 100644 src/pages/proofread/components/images/loading.svg create mode 100644 src/pages/proofread/components/images/logo.tsx create mode 100644 src/pages/proofread/components/images/notice.tsx create mode 100644 src/pages/proofread/components/index.tsx create mode 100644 src/pages/proofread/components/panel-right-state.tsx create mode 100644 src/pages/proofread/components/parse-proofread-result.ts create mode 100644 src/pages/proofread/components/proofread-item-description.tsx create mode 100644 src/pages/proofread/components/proofread-item.tsx create mode 100644 src/pages/proofread/components/proofread.less create mode 100644 src/pages/proofread/components/tools.ts create mode 100644 src/pages/proofread/components/types.ts create mode 100644 src/pages/proofread/components/virtual-list-item.tsx create mode 100644 src/pages/proofread/images/bg.png create mode 100644 src/pages/proofread/images/btn_arrow_close.png create mode 100644 src/pages/proofread/images/btn_arrow_open.png create mode 100644 src/pages/proofread/images/check.gif create mode 100644 src/pages/proofread/images/icon-export.png create mode 100644 src/pages/proofread/images/icon-idle.png create mode 100644 src/pages/proofread/images/icon-perfect.png create mode 100644 src/pages/proofread/images/icon-setting.png create mode 100644 src/pages/proofread/images/perfect.png create mode 100644 src/pages/proofread/images/processing.gif create mode 100644 src/pages/proofread/index.tsx create mode 100644 src/pages/proofread/notice.tsx create mode 100644 src/pages/setting/index.tsx create mode 100644 src/pages/setting/style.less create mode 100644 src/pages/test/mqtt.tsx create mode 100644 src/routes/index.tsx create mode 100644 src/service/api/detection.ts create mode 100644 src/service/api/document.ts create mode 100644 src/service/api/index.ts create mode 100644 src/service/api/lexicon.ts create mode 100644 src/service/api/settings.ts create mode 100644 src/service/api/user.ts create mode 100644 src/service/api/util.ts create mode 100644 src/service/api/v3/document.ts create mode 100644 src/service/api/v3/enums.ts create mode 100644 src/service/create-new-document.ts create mode 100644 src/service/exportDocument.ts create mode 100644 src/service/fake/api.ts create mode 100644 src/service/fake/doc-2236.ts create mode 100644 src/service/fake/document.ts create mode 100644 src/service/request.ts create mode 100644 src/service/types.ts create mode 100644 src/service/types/base.ts create mode 100644 src/service/types/document.ts create mode 100644 src/service/types/lexicon.ts create mode 100644 src/service/types/notice.ts create mode 100644 src/service/types/settings.ts create mode 100644 src/service/types/user.ts create mode 100644 src/service/use-proofread.ts create mode 100644 src/service/userinfoStore.ts create mode 100644 src/types/account.ts create mode 100644 src/types/auth.ts create mode 100644 src/types/base.ts create mode 100644 src/types/detection.d.ts create mode 100644 src/types/document.ts create mode 100644 src/types/proofread-state.ts create mode 100644 src/types/proofread.ts create mode 100644 src/types/type-proofread.d.ts create mode 100644 src/types/v3/enums.ts create mode 100644 src/types/v3/proofread.d.ts create mode 100644 src/utils/base64.ts create mode 100644 src/utils/cloneDeep.ts create mode 100644 src/utils/element-util.ts create mode 100644 src/utils/sleep.ts create mode 100644 src/utils/storage.ts create mode 100644 src/utils/strings.ts create mode 100644 src/utils/vars.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.offline.ts create mode 100644 vite.config.ts create mode 100644 yarn.lock diff --git a/.coding-ci.yml b/.coding-ci.yml new file mode 100644 index 0000000..39f6cee --- /dev/null +++ b/.coding-ci.yml @@ -0,0 +1,24 @@ +.pipeline: &pipeline + runner: + cpus: 2 + docker: + image: node:20.11.1 + stages: + - name: 启用yarn + script: corepack enable yarn + - name: 安装依赖 + script: yarn install + - name: build + script: yarn run build + +dev/main: + push: + - <<: *pipeline + +master: + push: + - <<: *pipeline + +release: + push: + - <<: *pipeline \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..53b61b0 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,23 @@ +module.exports = { + root: true, + env: { browser: true, es2020: true }, + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:react-hooks/recommended', + ], + ignorePatterns: ['dist', '.eslintrc.cjs'], + parser: '@typescript-eslint/parser', + plugins: ['react-refresh'], + rules: { + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + '@typescript-eslint/no-explicit-any':[ + 'off' + ], + 'no-mixed-spaces-and-tabs':'off', + 'no-control-regex':0 + }, +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c1cb29f --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +*_local +__test__ +.next +src/examples + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..10da9ff --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npm run build \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..2f71350 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +/node_modules +package*.json +.gitignore +*.local +*_local +__test__ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..abc9f2b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,7 @@ +{ + "useTabs": true, + "tabWidth": 4, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100 +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..61ff219 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +[![构建状态](https://starbite.coding.net/badges/aixiaodui/job/4041174/master/build.svg)](https://starbite.coding.net/p/aixiaodui/ci/job) \ No newline at end of file diff --git a/babel.config.cjs b/babel.config.cjs new file mode 100644 index 0000000..4505a29 --- /dev/null +++ b/babel.config.cjs @@ -0,0 +1,13 @@ +// babel.config.js +// eslint-disable-next-line no-undef +module.exports = { + presets: [ + [ + "@babel/preset-env", + { targets: { node: "current" } }, + ], + + "@babel/preset-typescript", + ], + // extensionsToTreatAsEsm: ['.ts'] +}; \ No newline at end of file diff --git a/config.ts b/config.ts new file mode 100644 index 0000000..58f7b43 --- /dev/null +++ b/config.ts @@ -0,0 +1,35 @@ +const defaultConfig = { + API_PREFIX: (process.env.API_PREFIX || ''), + PUBLIC_PATH: (process.env.PUBLIC_PATH || './'), + HOME_PAGE_PATH: (process.env.HOME_PAGE_PATH || '/'), + ALLOW_MAX_COUNT: (process.env.ALLOW_MAX_COUNT || 600000), + + SYNC_CHECK_MAX_WORD_COUNT: (process.env.SYNC_CHECK_MAX_WORD_COUNT || 20000), + // 是否允许扫描 + APP_NAME: 'AI校对王', + // 用户登录凭证key + LOGIN_TOKEN_KEY: 'ai_login_token', + // 二维码过期时间 + QR_EXPIRE_TIME: 300000 +} +export const AppConfig = { + development: { + ...defaultConfig, + WEB_PATH: 'http://gm1.zverse.group', + }, + test: { + ...defaultConfig, + WEB_PATH: 'http://gm1.zverse.group', + }, + preview: { + ...defaultConfig, + WEB_PATH: 'https://pre-gm.gachafun.com', + QR_EXPIRE_TIME: 600000 + }, + production: { + ...defaultConfig, + WEB_PATH: 'https://gm.gachafun.com', + QR_EXPIRE_TIME: 600000 + } +} +export const BuildEnvName = process.env.ENV_NAME || '' diff --git a/index.html b/index.html new file mode 100644 index 0000000..f94d3a3 --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + + + AI校对插件 + + + +
+
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..870599f --- /dev/null +++ b/package.json @@ -0,0 +1,62 @@ +{ + "name": "ai_office_web", + "private": true, + "version": "2.2.1", + "type": "module", + "scripts": { + "dev": "vite --host", + "dev-gray": "vite --host --mode pre", + "test": "jest", + "build": "tsc && vite build --mode production", + "build-test": "tsc && vite build --mode test", + "build-offline": "tsc && vite build --config vite.config.offline.ts", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "preview": "vite preview --host", + "clean": "rm -rf dist" + }, + "dependencies": { + "@ant-design/icons": "^5.3.1", + "@emotion/css": "^11.11.2", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.0", + "@fingerprintjs/fingerprintjs": "^4.5.0", + "@mui/material": "^5.15.13", + "@types/markdown-it": "^14.1.2", + "ahooks": "^3.8.4", + "antd": "^5.22.7", + "axios": "^1.6.8", + "crypto-js": "^4.2.0", + "dayjs": "^1.11.10", + "markdown-it": "^14.1.0", + "mqtt": "^5.10.1", + "qs": "^6.12.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.0", + "vite-tsconfig-paths": "^4.3.2", + "zustand": "^4.5.0" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@babel/preset-env": "^7.25.4", + "@babel/preset-typescript": "^7.24.7", + "@types/crypto-js": "^4.2.2", + "@types/jest": "^29.5.13", + "@types/node": "^20.11.16", + "@types/qs": "^6.9.14", + "@types/react": "^18.2.43", + "@types/react-dom": "^18.2.17", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", + "@vitejs/plugin-react": "^4.2.1", + "babel-jest": "^29.7.0", + "eslint": "^8.55.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "jest": "^29.7.0", + "less": "^4.2.0", + "typescript": "^5.2.2", + "vite": "^5.0.8", + "vite-plugin-make-offline": "^1.0.0" + } +} diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2e84e28b859c39b0d43bf7dde893b085ab07a0 GIT binary patch literal 2985 zcmV;a3s&@rP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt3nocKK~#9!?VVk06xSJspBds^*Y+B_{wb)0+6CvL##Gd;s~`o^ z1QcXN^unk&m>~Nis?t_+Td6mV;D*Roh)9VV`=U}TD^gn`yTx!p9N`!TQYS`E`DwsF z7ZF-;YzzE@@hexaJ)l{Uc zF2V$Uu5+17+~6*AM5GH9FPt4Hpq6cHXDii|7Ojdv>oQ)VGk#n7B@K-)0|`v9%);Q#Y;281jNl<9s!1F#w%@) zG5C0eF>yD5Q-^ansU`N!lp1f6Z2DU`X7oOk;=!RB0=dv6e$N>M3Uu(;Q;0w4K^0 z)X{Iz$b}UVqMtfDHX$vHi<@I~jME}*>rzVS5I4oF=rC-AJVO*}85Fm}%owCrz6nui z#4m1z+2N;A+Ui!Jab>GxhE_R~Jsc(|Zh=)1dfhh5S?t(QDmss*gVL;z~xJHCC78aBYr7kNFKqG2PXUba(-8RN%5YI9)d zD4p`1_wroIw|HcLOa-suz4izThA7L|dFFHMN}+66rf z+s0^sr#YRHisL4|WTk5K@M_$a(A@w!p_rvBS90zmQh7DiO|U{58l0X<*htc1kO9EIXrZ zMbzk8Hc0DnEE}S00-{E5Gi{q}mm;=7)M$n6(rO&dc9f{mMQoMU;%K%~6g7Ii$wQ2} zPBrVJMsK#uK3EQ=gw0W--K7&|QwJ(4TcmY3o-L><`R;T^)2Sg}rNDg@noczZD!$nG zl8b3nP^7ZaUEXFo3L90bq*deu)vnRjP^Gd?T0>5-PIZ^KSwfj>v^A8e+S8U?45nPA zR9Zt$P^vm5_nFP{x<*@rS9MzIM4RGqjkX4lJ8i}yRNKzPbQVF?kd@Lds}XQ(v^BUj z+9Cof_oX%D1ou@Yr8VRPlPXiv8ghau*Jx{)Qn@FsAt$(}a!Xo6PH;=bFRdXb@T=Um zWYueK6XCYX923$y9M1%ED)VmRVLE>1RTj7|t;6wLXF(;*WoaFb=Q3dxR?D~Gk};Q} zODk^hKw62TdBBaR(Rba)p{e+}8#Q{4i_%&g%|+&-Mn^a=t;NxtClXr=KFXZ58pkrn zD8!7u!X0Tnj^z$lAZGNuIoVTPfI;RVz5`9atvAfcUc&T84`N22jr#6lF!P*^9>k2E z;3H{Gj$|MANb{IE$iVvlAIgStGa}44}hqdzI zxMak8@xEN#=m>*clUC*^t}z(@J$CU#^eK9!wK+x6b7%Pnqa70>X)^lX#${?);oxQeBPhfv8XuXeU89mD}Legrp zmJr9ZhUc`iD4$>`#Pi#q(~2Im!qbtZ!RO zzj$4VMUdAtYxL{ljYfq2%yT%`F)m(=Se(-^dV(*+b&ao{kYe@soe3sQ&rz(GQamf# zL6vXoerq#}-|&Gk7wQnNGj@&+SiV?8IY!&2e=0ol`Mx6qOxrGLf$dbA&g|y10i|J483dX4(u;La%r+rK8uH43Iwh#EU8!efX@fIcjz8*6LpCYz8Qy zI|m<&VY;nP8(T~#A@QPH86i5&e*|jb;V?n*;#(C#4ol`kXk|v+0xM#MRymUa6dH42 zxXDkW{2Q@Ct-}XV2dR~}IZBCxe;VkpTYCBy8~wIuRE*OiZR<)D>gab+hc84wb#`eo zma~>aHkxviNlbGn^9clIqS9cSiDc==5Df-Q^feiULfULF6E)qKq>VzmHW@3~M3>kc z<@DnrUFl7{l|*3|0~#}n>>5uPU|06k