Compare commits
No commits in common. "f98b79a00eda277c1406159e2d7ca1fcbe73eb6e" and "3c5fc204089177598c3226b19648cff99456cb06" have entirely different histories.
f98b79a00e
...
3c5fc20408
13 changed files with 71 additions and 997 deletions
308
package-lock.json
generated
308
package-lock.json
generated
|
@ -13,6 +13,7 @@
|
||||||
"@emotion/react": "^11.11.1",
|
"@emotion/react": "^11.11.1",
|
||||||
"@emotion/styled": "^11.11.0",
|
"@emotion/styled": "^11.11.0",
|
||||||
"@tauri-apps/api": "^1.3.0",
|
"@tauri-apps/api": "^1.3.0",
|
||||||
|
"@types/lodash-es": "^4.17.7",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"flowbite": "^1.6.5",
|
"flowbite": "^1.6.5",
|
||||||
|
@ -27,13 +28,11 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tauri-apps/cli": "^1.3.1",
|
"@tauri-apps/cli": "^1.3.1",
|
||||||
"@types/lodash-es": "^4.17.7",
|
|
||||||
"@types/node": "^18.7.10",
|
"@types/node": "^18.7.10",
|
||||||
"@types/react": "^18.0.15",
|
"@types/react": "^18.0.15",
|
||||||
"@types/react-dom": "^18.0.6",
|
"@types/react-dom": "^18.0.6",
|
||||||
"@types/react-timeago": "^4.1.3",
|
"@types/react-timeago": "^4.1.3",
|
||||||
"@vitejs/plugin-react": "^3.0.0",
|
"@vitejs/plugin-react": "^3.0.0",
|
||||||
"@vitejs/plugin-react-swc": "^3.3.2",
|
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
"postcss": "^8.4.24",
|
"postcss": "^8.4.24",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
|
@ -1830,200 +1829,6 @@
|
||||||
"node": ">=14"
|
"node": ">=14"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@swc/core": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
|
|
||||||
"dev": true,
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/swc"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@swc/core-darwin-arm64": "1.3.62",
|
|
||||||
"@swc/core-darwin-x64": "1.3.62",
|
|
||||||
"@swc/core-linux-arm-gnueabihf": "1.3.62",
|
|
||||||
"@swc/core-linux-arm64-gnu": "1.3.62",
|
|
||||||
"@swc/core-linux-arm64-musl": "1.3.62",
|
|
||||||
"@swc/core-linux-x64-gnu": "1.3.62",
|
|
||||||
"@swc/core-linux-x64-musl": "1.3.62",
|
|
||||||
"@swc/core-win32-arm64-msvc": "1.3.62",
|
|
||||||
"@swc/core-win32-ia32-msvc": "1.3.62",
|
|
||||||
"@swc/core-win32-x64-msvc": "1.3.62"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"@swc/helpers": "^0.5.0"
|
|
||||||
},
|
|
||||||
"peerDependenciesMeta": {
|
|
||||||
"@swc/helpers": {
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-darwin-arm64": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-darwin-x64": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-linux-arm-gnueabihf": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-linux-arm64-gnu": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-linux-arm64-musl": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-linux-x64-gnu": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-linux-x64-musl": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-win32-arm64-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-win32-ia32-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
|
|
||||||
"cpu": [
|
|
||||||
"ia32"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@swc/core-win32-x64-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@tauri-apps/api": {
|
"node_modules/@tauri-apps/api": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.3.0.tgz",
|
||||||
|
@ -2218,7 +2023,6 @@
|
||||||
"version": "4.17.7",
|
"version": "4.17.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz",
|
||||||
"integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==",
|
"integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==",
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/lodash": "*"
|
"@types/lodash": "*"
|
||||||
}
|
}
|
||||||
|
@ -2302,18 +2106,6 @@
|
||||||
"vite": "^4.1.0-beta.0"
|
"vite": "^4.1.0-beta.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@vitejs/plugin-react-swc": {
|
|
||||||
"version": "3.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
|
|
||||||
"integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@swc/core": "^1.3.61"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"vite": "^4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@zag-js/element-size": {
|
"node_modules/@zag-js/element-size": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz",
|
||||||
|
@ -5626,94 +5418,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz",
|
||||||
"integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA=="
|
"integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA=="
|
||||||
},
|
},
|
||||||
"@swc/core": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@swc/core-darwin-arm64": "1.3.62",
|
|
||||||
"@swc/core-darwin-x64": "1.3.62",
|
|
||||||
"@swc/core-linux-arm-gnueabihf": "1.3.62",
|
|
||||||
"@swc/core-linux-arm64-gnu": "1.3.62",
|
|
||||||
"@swc/core-linux-arm64-musl": "1.3.62",
|
|
||||||
"@swc/core-linux-x64-gnu": "1.3.62",
|
|
||||||
"@swc/core-linux-x64-musl": "1.3.62",
|
|
||||||
"@swc/core-win32-arm64-msvc": "1.3.62",
|
|
||||||
"@swc/core-win32-ia32-msvc": "1.3.62",
|
|
||||||
"@swc/core-win32-x64-msvc": "1.3.62"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@swc/core-darwin-arm64": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-darwin-x64": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-linux-arm-gnueabihf": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-linux-arm64-gnu": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-linux-arm64-musl": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-linux-x64-gnu": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-linux-x64-musl": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-win32-arm64-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-win32-ia32-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@swc/core-win32-x64-msvc": {
|
|
||||||
"version": "1.3.62",
|
|
||||||
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
|
|
||||||
"integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"@tauri-apps/api": {
|
"@tauri-apps/api": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.3.0.tgz",
|
||||||
|
@ -5808,7 +5512,6 @@
|
||||||
"version": "4.17.7",
|
"version": "4.17.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.7.tgz",
|
||||||
"integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==",
|
"integrity": "sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/lodash": "*"
|
"@types/lodash": "*"
|
||||||
}
|
}
|
||||||
|
@ -5886,15 +5589,6 @@
|
||||||
"react-refresh": "^0.14.0"
|
"react-refresh": "^0.14.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@vitejs/plugin-react-swc": {
|
|
||||||
"version": "3.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
|
|
||||||
"integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@swc/core": "^1.3.61"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@zag-js/element-size": {
|
"@zag-js/element-size": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@zag-js/element-size/-/element-size-0.3.2.tgz",
|
||||||
|
|
|
@ -29,13 +29,12 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@tauri-apps/cli": "^1.3.1",
|
"@tauri-apps/cli": "^1.3.1",
|
||||||
"@types/lodash-es": "^4.17.7",
|
|
||||||
"@types/node": "^18.7.10",
|
"@types/node": "^18.7.10",
|
||||||
|
"@types/lodash-es": "^4.17.7",
|
||||||
"@types/react": "^18.0.15",
|
"@types/react": "^18.0.15",
|
||||||
"@types/react-dom": "^18.0.6",
|
"@types/react-dom": "^18.0.6",
|
||||||
"@types/react-timeago": "^4.1.3",
|
"@types/react-timeago": "^4.1.3",
|
||||||
"@vitejs/plugin-react": "^3.0.0",
|
"@vitejs/plugin-react": "^3.0.0",
|
||||||
"@vitejs/plugin-react-swc": "^3.3.2",
|
|
||||||
"autoprefixer": "^10.4.14",
|
"autoprefixer": "^10.4.14",
|
||||||
"postcss": "^8.4.24",
|
"postcss": "^8.4.24",
|
||||||
"prettier": "^2.8.8",
|
"prettier": "^2.8.8",
|
||||||
|
|
|
@ -1,10 +1,21 @@
|
||||||
import { Button, Grid, GridItem, Stat, StatLabel, StatNumber, Tooltip } from "@chakra-ui/react";
|
import {
|
||||||
|
Button,
|
||||||
|
Grid,
|
||||||
|
GridItem,
|
||||||
|
Stat,
|
||||||
|
StatArrow,
|
||||||
|
StatGroup,
|
||||||
|
StatHelpText,
|
||||||
|
StatLabel,
|
||||||
|
StatNumber,
|
||||||
|
Tooltip,
|
||||||
|
} from "@chakra-ui/react";
|
||||||
import { ArrowRightIcon } from "@chakra-ui/icons";
|
import { ArrowRightIcon } from "@chakra-ui/icons";
|
||||||
import styles from "./DashboardReviewStats.module.scss";
|
import styles from "./DashboardReviewStats.module.scss";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { invoke } from "@tauri-apps/api/tauri";
|
import { invoke } from "@tauri-apps/api/tauri";
|
||||||
import { Link } from "react-router-dom";
|
import { Link } from "react-router-dom";
|
||||||
import ConditionalWrapper from "./utils/ConditionalWrapper";
|
import ConditionalWrapper from "../lib/ConditionalWrapper";
|
||||||
|
|
||||||
interface SrsStats {
|
interface SrsStats {
|
||||||
reviews_available: number;
|
reviews_available: number;
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
import { invoke } from "@tauri-apps/api/tauri";
|
import { invoke } from "@tauri-apps/api/tauri";
|
||||||
import { GetKanjiResult } from "../panes/KanjiPane";
|
import { GetKanjiResult } from "../panes/KanjiPane";
|
||||||
|
import { Kanji } from "../types/Kanji";
|
||||||
import TimeAgo from "react-timeago";
|
import TimeAgo from "react-timeago";
|
||||||
import styles from "./KanjiDisplay.module.scss";
|
import styles from "./KanjiDisplay.module.scss";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
import { Button } from "@chakra-ui/button";
|
import { Button } from "@chakra-ui/button";
|
||||||
import { AddIcon } from "@chakra-ui/icons";
|
import { AddIcon } from "@chakra-ui/icons";
|
||||||
import SelectOnClick from "./utils/SelectOnClick";
|
import SelectOnClick from "../lib/SelectOnClick";
|
||||||
import { Alert, AlertIcon } from "@chakra-ui/alert";
|
import { Alert, AlertIcon } from "@chakra-ui/alert";
|
||||||
import { isValid } from "date-fns";
|
import { isValid } from "date-fns";
|
||||||
|
|
||||||
|
|
|
@ -1,32 +0,0 @@
|
||||||
import { Input as BaseInput, InputProps as BaseInputProps } from "@chakra-ui/react";
|
|
||||||
import { romajiToKana } from "../../lib/kanaHelper";
|
|
||||||
import { ChangeEvent } from "react";
|
|
||||||
|
|
||||||
export interface InputProps extends BaseInputProps {
|
|
||||||
kanaInput?: boolean;
|
|
||||||
setValue?: (_: string) => void;
|
|
||||||
defaultValue?: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function InputBox({
|
|
||||||
kanaInput,
|
|
||||||
|
|
||||||
value,
|
|
||||||
setValue,
|
|
||||||
|
|
||||||
onChange: baseOnChange,
|
|
||||||
...props
|
|
||||||
}: InputProps) {
|
|
||||||
const onChange = (evt: ChangeEvent<HTMLInputElement>) => {
|
|
||||||
let newValue = evt.target.value;
|
|
||||||
console.log("hellosu", kanaInput, newValue, romajiToKana(newValue));
|
|
||||||
|
|
||||||
if (kanaInput == true) newValue = romajiToKana(newValue) ?? newValue;
|
|
||||||
|
|
||||||
setValue?.(newValue);
|
|
||||||
|
|
||||||
if (baseOnChange) baseOnChange(evt);
|
|
||||||
};
|
|
||||||
|
|
||||||
return <BaseInput value={value} onChange={onChange} {...props} />;
|
|
||||||
}
|
|
|
@ -1,562 +0,0 @@
|
||||||
{
|
|
||||||
"kanaToHiragana": [
|
|
||||||
["ッ", "っ"],
|
|
||||||
["チ", "ち"],
|
|
||||||
["シ", "し"],
|
|
||||||
["ツ", "つ"],
|
|
||||||
["ヅ", "づ"],
|
|
||||||
["ヂ", "ぢ"],
|
|
||||||
["ヮ", "ゎ"],
|
|
||||||
["ャ", "ゃ"],
|
|
||||||
["ィ", "ぃ"],
|
|
||||||
["ュ", "ゅ"],
|
|
||||||
["ェ", "ぇ"],
|
|
||||||
["ョ", "ょ"],
|
|
||||||
["カ", "か"],
|
|
||||||
["キ", "き"],
|
|
||||||
["ク", "く"],
|
|
||||||
["ケ", "け"],
|
|
||||||
["コ", "こ"],
|
|
||||||
["サ", "さ"],
|
|
||||||
["ス", "す"],
|
|
||||||
["セ", "せ"],
|
|
||||||
["ソ", "そ"],
|
|
||||||
["タ", "た"],
|
|
||||||
["テ", "て"],
|
|
||||||
["ト", "と"],
|
|
||||||
["ナ", "な"],
|
|
||||||
["ニ", "に"],
|
|
||||||
["ヌ", "ぬ"],
|
|
||||||
["ネ", "ね"],
|
|
||||||
["ノ", "の"],
|
|
||||||
["ハ", "は"],
|
|
||||||
["ヒ", "ひ"],
|
|
||||||
["フ", "ふ"],
|
|
||||||
["ヘ", "へ"],
|
|
||||||
["ホ", "ほ"],
|
|
||||||
["マ", "ま"],
|
|
||||||
["ミ", "み"],
|
|
||||||
["ム", "む"],
|
|
||||||
["メ", "め"],
|
|
||||||
["モ", "も"],
|
|
||||||
["ヤ", "や"],
|
|
||||||
["ユ", "ゆ"],
|
|
||||||
["ヨ", "よ"],
|
|
||||||
["ラ", "ら"],
|
|
||||||
["リ", "り"],
|
|
||||||
["ル", "る"],
|
|
||||||
["レ", "れ"],
|
|
||||||
["ロ", "ろ"],
|
|
||||||
["ワ", "わ"],
|
|
||||||
["ヲ", "を"],
|
|
||||||
["ガ", "が"],
|
|
||||||
["ギ", "ぎ"],
|
|
||||||
["グ", "ぐ"],
|
|
||||||
["ゲ", "げ"],
|
|
||||||
["ゴ", "ご"],
|
|
||||||
["ジ", "じ"],
|
|
||||||
["ダ", "だ"],
|
|
||||||
["デ", "で"],
|
|
||||||
["ド", "ど"],
|
|
||||||
["バ", "ば"],
|
|
||||||
["ビ", "び"],
|
|
||||||
["ブ", "ぶ"],
|
|
||||||
["ベ", "べ"],
|
|
||||||
["ボ", "ぼ"],
|
|
||||||
["パ", "ぱ"],
|
|
||||||
["ピ", "ぴ"],
|
|
||||||
["プ", "ぷ"],
|
|
||||||
["ペ", "ぺ"],
|
|
||||||
["ポ", "ぽ"],
|
|
||||||
["ザ", "ざ"],
|
|
||||||
["ズ", "ず"],
|
|
||||||
["ゼ", "ぜ"],
|
|
||||||
["ゾ", "ぞ"],
|
|
||||||
["ァ", "ぁ"],
|
|
||||||
["ィ", "ぃ"],
|
|
||||||
["ゥ", "ぅ"],
|
|
||||||
["ェ", "ぇ"],
|
|
||||||
["ォ", "ぉ"],
|
|
||||||
["ン", "ん"],
|
|
||||||
["ア", "あ"],
|
|
||||||
["イ", "い"],
|
|
||||||
["ウ", "う"],
|
|
||||||
["エ", "え"],
|
|
||||||
["オ", "お"]
|
|
||||||
],
|
|
||||||
|
|
||||||
"katakanaToHiragana": [
|
|
||||||
["っ", "ッ"],
|
|
||||||
["ち", "チ"],
|
|
||||||
["し", "シ"],
|
|
||||||
["つ", "ツ"],
|
|
||||||
["づ", "ヅ"],
|
|
||||||
["ぢ", "ヂ"],
|
|
||||||
["ゎ", "ヮ"],
|
|
||||||
["ゃ", "ャ"],
|
|
||||||
["ぃ", "ィ"],
|
|
||||||
["ゅ", "ュ"],
|
|
||||||
["ぇ", "ェ"],
|
|
||||||
["ょ", "ョ"],
|
|
||||||
["か", "カ"],
|
|
||||||
["き", "キ"],
|
|
||||||
["く", "ク"],
|
|
||||||
["け", "ケ"],
|
|
||||||
["こ", "コ"],
|
|
||||||
["さ", "サ"],
|
|
||||||
["す", "ス"],
|
|
||||||
["せ", "セ"],
|
|
||||||
["そ", "ソ"],
|
|
||||||
["た", "タ"],
|
|
||||||
["て", "テ"],
|
|
||||||
["と", "ト"],
|
|
||||||
["な", "ナ"],
|
|
||||||
["に", "ニ"],
|
|
||||||
["ぬ", "ヌ"],
|
|
||||||
["ね", "ネ"],
|
|
||||||
["の", "ノ"],
|
|
||||||
["は", "ハ"],
|
|
||||||
["ひ", "ヒ"],
|
|
||||||
["ふ", "フ"],
|
|
||||||
["へ", "ヘ"],
|
|
||||||
["ほ", "ホ"],
|
|
||||||
["ま", "マ"],
|
|
||||||
["み", "ミ"],
|
|
||||||
["む", "ム"],
|
|
||||||
["め", "メ"],
|
|
||||||
["も", "モ"],
|
|
||||||
["や", "ヤ"],
|
|
||||||
["ゆ", "ユ"],
|
|
||||||
["よ", "ヨ"],
|
|
||||||
["ら", "ラ"],
|
|
||||||
["り", "リ"],
|
|
||||||
["る", "ル"],
|
|
||||||
["れ", "レ"],
|
|
||||||
["ろ", "ロ"],
|
|
||||||
["わ", "ワ"],
|
|
||||||
["を", "ヲ"],
|
|
||||||
["が", "ガ"],
|
|
||||||
["ぎ", "ギ"],
|
|
||||||
["ぐ", "グ"],
|
|
||||||
["げ", "ゲ"],
|
|
||||||
["ご", "ゴ"],
|
|
||||||
["じ", "ジ"],
|
|
||||||
["だ", "ダ"],
|
|
||||||
["で", "デ"],
|
|
||||||
["ど", "ド"],
|
|
||||||
["ば", "バ"],
|
|
||||||
["び", "ビ"],
|
|
||||||
["ぶ", "ブ"],
|
|
||||||
["べ", "ベ"],
|
|
||||||
["ぼ", "ボ"],
|
|
||||||
["ぱ", "パ"],
|
|
||||||
["ぴ", "ピ"],
|
|
||||||
["ぷ", "プ"],
|
|
||||||
["ぺ", "ペ"],
|
|
||||||
["ぽ", "ポ"],
|
|
||||||
["ざ", "ザ"],
|
|
||||||
["ず", "ズ"],
|
|
||||||
["ぜ", "ゼ"],
|
|
||||||
["ぞ", "ゾ"],
|
|
||||||
["ぁ", "ァ"],
|
|
||||||
["ぃ", "ィ"],
|
|
||||||
["ぅ", "ゥ"],
|
|
||||||
["ぇ", "ェ"],
|
|
||||||
["ぉ", "ォ"],
|
|
||||||
["ん", "ン"],
|
|
||||||
["あ", "ア"],
|
|
||||||
["い", "イ"],
|
|
||||||
["う", "ウ"],
|
|
||||||
["え", "エ"],
|
|
||||||
["お", "オ"]
|
|
||||||
],
|
|
||||||
|
|
||||||
"romajiToKana": {
|
|
||||||
"4letter": [
|
|
||||||
["XTSU", "ッ"],
|
|
||||||
["xtsu", "っ"],
|
|
||||||
["LTSU", "ッ"],
|
|
||||||
["ltsu", "っ"]
|
|
||||||
],
|
|
||||||
"3letter": [
|
|
||||||
["CHA", "チャ"],
|
|
||||||
["cha", "ちゃ"],
|
|
||||||
["CHI", "チ"],
|
|
||||||
["chi", "ち"],
|
|
||||||
["CHU", "チュ"],
|
|
||||||
["chu", "ちゅ"],
|
|
||||||
["CHE", "チェ"],
|
|
||||||
["che", "ちぇ"],
|
|
||||||
["CHO", "チョ"],
|
|
||||||
["cho", "ちょ"],
|
|
||||||
["SHA", "シャ"],
|
|
||||||
["sha", "しゃ"],
|
|
||||||
["SHI", "シ"],
|
|
||||||
["shi", "し"],
|
|
||||||
["SHU", "シュ"],
|
|
||||||
["shu", "しゅ"],
|
|
||||||
["SHE", "シェ"],
|
|
||||||
["she", "しぇ"],
|
|
||||||
["SHO", "ショ"],
|
|
||||||
["sho", "しょ"],
|
|
||||||
["RYA", "リャ"],
|
|
||||||
["rya", "りゃ"],
|
|
||||||
["RYI", "リィ"],
|
|
||||||
["ryi", "りぃ"],
|
|
||||||
["RYU", "リュ"],
|
|
||||||
["ryu", "りゅ"],
|
|
||||||
["RYE", "リェ"],
|
|
||||||
["rye", "りぇ"],
|
|
||||||
["RYO", "リョ"],
|
|
||||||
["ryo", "りょ"],
|
|
||||||
["HYA", "ヒャ"],
|
|
||||||
["hya", "ひゃ"],
|
|
||||||
["HYI", "ヒィ"],
|
|
||||||
["hyi", "ひぃ"],
|
|
||||||
["HYU", "ヒュ"],
|
|
||||||
["hyu", "ひゅ"],
|
|
||||||
["HYE", "ヒェ"],
|
|
||||||
["hye", "ひぇ"],
|
|
||||||
["HYO", "ヒョ"],
|
|
||||||
["hyo", "ひょ"],
|
|
||||||
["BYA", "ビャ"],
|
|
||||||
["bya", "びゃ"],
|
|
||||||
["BYI", "ビィ"],
|
|
||||||
["byi", "びぃ"],
|
|
||||||
["BYU", "ビュ"],
|
|
||||||
["byu", "びゅ"],
|
|
||||||
["BYE", "ビェ"],
|
|
||||||
["bye", "びぇ"],
|
|
||||||
["BYO", "ビョ"],
|
|
||||||
["byo", "びょ"],
|
|
||||||
["PYA", "ピャ"],
|
|
||||||
["pya", "ぴゃ"],
|
|
||||||
["PYI", "ピィ"],
|
|
||||||
["pyi", "ぴぃ"],
|
|
||||||
["PYU", "ピュ"],
|
|
||||||
["pyu", "ぴゅ"],
|
|
||||||
["PYE", "ピェ"],
|
|
||||||
["pye", "ぴぇ"],
|
|
||||||
["PYO", "ピョ"],
|
|
||||||
["pyo", "ぴょ"],
|
|
||||||
["MYA", "ミャ"],
|
|
||||||
["mya", "みゃ"],
|
|
||||||
["MYI", "ミィ"],
|
|
||||||
["myi", "みぃ"],
|
|
||||||
["MYU", "ミュ"],
|
|
||||||
["myu", "みゅ"],
|
|
||||||
["MYE", "ミェ"],
|
|
||||||
["mye", "みぇ"],
|
|
||||||
["MYO", "ミョ"],
|
|
||||||
["myo", "みょ"],
|
|
||||||
["KYA", "キャ"],
|
|
||||||
["kya", "きゃ"],
|
|
||||||
["KYI", "キィ"],
|
|
||||||
["kyi", "きぃ"],
|
|
||||||
["KYU", "キュ"],
|
|
||||||
["kyu", "きゅ"],
|
|
||||||
["KYE", "キェ"],
|
|
||||||
["kye", "きぇ"],
|
|
||||||
["KYO", "キョ"],
|
|
||||||
["kyo", "きょ"],
|
|
||||||
["GYA", "ギャ"],
|
|
||||||
["gya", "ぎゃ"],
|
|
||||||
["GYI", "ギィ"],
|
|
||||||
["gyi", "ぎぃ"],
|
|
||||||
["GYU", "ギュ"],
|
|
||||||
["gyu", "ぎゅ"],
|
|
||||||
["GYE", "ギェ"],
|
|
||||||
["gye", "ぎぇ"],
|
|
||||||
["GYO", "ギョ"],
|
|
||||||
["gyo", "ぎょ"],
|
|
||||||
["NYA", "ニャ"],
|
|
||||||
["nya", "にゃ"],
|
|
||||||
["NYI", "ニィ"],
|
|
||||||
["nyi", "にぃ"],
|
|
||||||
["NYU", "ニュ"],
|
|
||||||
["nyu", "にゅ"],
|
|
||||||
["NYE", "ニェ"],
|
|
||||||
["nye", "にぇ"],
|
|
||||||
["NYO", "ニョ"],
|
|
||||||
["nyo", "にょ"],
|
|
||||||
["JYA", "ジャ"],
|
|
||||||
["jya", "じゃ"],
|
|
||||||
["JYI", "ジィ"],
|
|
||||||
["jyi", "じぃ"],
|
|
||||||
["JYU", "ジュ"],
|
|
||||||
["jyu", "じゅ"],
|
|
||||||
["JYE", "ジェ"],
|
|
||||||
["jye", "じぇ"],
|
|
||||||
["JYO", "ジョ"],
|
|
||||||
["jyo", "じょ"],
|
|
||||||
["TSU", "ツ"],
|
|
||||||
["tsu", "つ"],
|
|
||||||
["DZU", "ヅ"],
|
|
||||||
["dzu", "づ"],
|
|
||||||
["DZI", "ヂ"],
|
|
||||||
["dzi", "ぢ"],
|
|
||||||
["DYA", "ヂャ"],
|
|
||||||
["dya", "ぢゃ"],
|
|
||||||
["DYI", "ヂィ"],
|
|
||||||
["dyi", "ぢぃ"],
|
|
||||||
["DYU", "ヂュ"],
|
|
||||||
["dyu", "ぢゅ"],
|
|
||||||
["DYE", "ヂェ"],
|
|
||||||
["dye", "ぢぇ"],
|
|
||||||
["DYO", "ヂョ"],
|
|
||||||
["dyo", "ぢょ"],
|
|
||||||
["XTU", "ッ"],
|
|
||||||
["xtu", "っ"],
|
|
||||||
["XWA", "ヮ"],
|
|
||||||
["xwa", "ゎ"],
|
|
||||||
["XKA", "ヵ"],
|
|
||||||
["xka", "ヵ"],
|
|
||||||
["XKE", "ヶ"],
|
|
||||||
["xke", "ヶ"],
|
|
||||||
["XYA", "ャ"],
|
|
||||||
["xya", "ゃ"],
|
|
||||||
["XYI", "ィ"],
|
|
||||||
["xyi", "ぃ"],
|
|
||||||
["XYU", "ュ"],
|
|
||||||
["xyu", "ゅ"],
|
|
||||||
["XYE", "ェ"],
|
|
||||||
["xye", "ぇ"],
|
|
||||||
["XYO", "ョ"],
|
|
||||||
["xyo", "ょ"],
|
|
||||||
["cya", "ちゃ"],
|
|
||||||
["cyu", "ちゅ"],
|
|
||||||
["cyo", "ちょ"],
|
|
||||||
["sya", "しゃ"],
|
|
||||||
["syu", "しゅ"],
|
|
||||||
["syo", "しょ"],
|
|
||||||
["tya", "ちゃ"],
|
|
||||||
["tyu", "ちゅ"],
|
|
||||||
["tyo", "ちょ"],
|
|
||||||
["TYA", "チャ"],
|
|
||||||
["TYU", "チュ"],
|
|
||||||
["TYO", "チョ"]
|
|
||||||
],
|
|
||||||
"2letter": [
|
|
||||||
["KA", "カ"],
|
|
||||||
["ka", "か"],
|
|
||||||
["KI", "キ"],
|
|
||||||
["ki", "き"],
|
|
||||||
["KU", "ク"],
|
|
||||||
["ku", "く"],
|
|
||||||
["KE", "ケ"],
|
|
||||||
["ke", "け"],
|
|
||||||
["KO", "コ"],
|
|
||||||
["ko", "こ"],
|
|
||||||
["CA", "カ"],
|
|
||||||
["ca", "か"],
|
|
||||||
["CI", "キ"],
|
|
||||||
["ci", "き"],
|
|
||||||
["CU", "ク"],
|
|
||||||
["cu", "く"],
|
|
||||||
["CE", "ケ"],
|
|
||||||
["ce", "け"],
|
|
||||||
["CO", "コ"],
|
|
||||||
["co", "こ"],
|
|
||||||
["SA", "サ"],
|
|
||||||
["sa", "さ"],
|
|
||||||
["SI", "シ"],
|
|
||||||
["si", "し"],
|
|
||||||
["SU", "ス"],
|
|
||||||
["su", "す"],
|
|
||||||
["SE", "セ"],
|
|
||||||
["se", "せ"],
|
|
||||||
["SO", "ソ"],
|
|
||||||
["so", "そ"],
|
|
||||||
["TA", "タ"],
|
|
||||||
["ta", "た"],
|
|
||||||
["TE", "テ"],
|
|
||||||
["ti", "ち"],
|
|
||||||
["TI", "チ"],
|
|
||||||
["tu", "つ"],
|
|
||||||
["TU", "ツ"],
|
|
||||||
["te", "て"],
|
|
||||||
["TO", "ト"],
|
|
||||||
["to", "と"],
|
|
||||||
["NA", "ナ"],
|
|
||||||
["na", "な"],
|
|
||||||
["NI", "ニ"],
|
|
||||||
["ni", "に"],
|
|
||||||
["NU", "ヌ"],
|
|
||||||
["nu", "ぬ"],
|
|
||||||
["NE", "ネ"],
|
|
||||||
["ne", "ね"],
|
|
||||||
["NO", "ノ"],
|
|
||||||
["no", "の"],
|
|
||||||
["HA", "ハ"],
|
|
||||||
["ha", "は"],
|
|
||||||
["HI", "ヒ"],
|
|
||||||
["hi", "ひ"],
|
|
||||||
["HU", "フ"],
|
|
||||||
["hu", "ふ"],
|
|
||||||
["HE", "ヘ"],
|
|
||||||
["he", "へ"],
|
|
||||||
["HO", "ホ"],
|
|
||||||
["ho", "ほ"],
|
|
||||||
["MA", "マ"],
|
|
||||||
["ma", "ま"],
|
|
||||||
["MI", "ミ"],
|
|
||||||
["mi", "み"],
|
|
||||||
["MU", "ム"],
|
|
||||||
["mu", "む"],
|
|
||||||
["ME", "メ"],
|
|
||||||
["me", "め"],
|
|
||||||
["MO", "モ"],
|
|
||||||
["mo", "も"],
|
|
||||||
["YA", "ヤ"],
|
|
||||||
["ya", "や"],
|
|
||||||
["YU", "ユ"],
|
|
||||||
["yu", "ゆ"],
|
|
||||||
["YE", "イェ"],
|
|
||||||
["ye", "いぇ"],
|
|
||||||
["YO", "ヨ"],
|
|
||||||
["yo", "よ"],
|
|
||||||
["RA", "ラ"],
|
|
||||||
["ra", "ら"],
|
|
||||||
["RI", "リ"],
|
|
||||||
["ri", "り"],
|
|
||||||
["RU", "ル"],
|
|
||||||
["ru", "る"],
|
|
||||||
["RE", "レ"],
|
|
||||||
["re", "れ"],
|
|
||||||
["RO", "ロ"],
|
|
||||||
["ro", "ろ"],
|
|
||||||
["LA", "ラ"],
|
|
||||||
["la", "ら"],
|
|
||||||
["LI", "リ"],
|
|
||||||
["li", "り"],
|
|
||||||
["LU", "ル"],
|
|
||||||
["lu", "る"],
|
|
||||||
["LE", "レ"],
|
|
||||||
["le", "れ"],
|
|
||||||
["LO", "ロ"],
|
|
||||||
["lo", "ろ"],
|
|
||||||
["WA", "ワ"],
|
|
||||||
["wa", "わ"],
|
|
||||||
["WI", "ウィ"],
|
|
||||||
["wi", "うぃ"],
|
|
||||||
["WU", "ウ"],
|
|
||||||
["wu", "う"],
|
|
||||||
["WE", "ウェ"],
|
|
||||||
["we", "うぇ"],
|
|
||||||
["WO", "ヲ"],
|
|
||||||
["wo", "を"],
|
|
||||||
["GA", "ガ"],
|
|
||||||
["ga", "が"],
|
|
||||||
["GI", "ギ"],
|
|
||||||
["gi", "ぎ"],
|
|
||||||
["GU", "グ"],
|
|
||||||
["gu", "ぐ"],
|
|
||||||
["GE", "ゲ"],
|
|
||||||
["ge", "げ"],
|
|
||||||
["GO", "ゴ"],
|
|
||||||
["go", "ご"],
|
|
||||||
["JA", "ジャ"],
|
|
||||||
["ja", "じゃ"],
|
|
||||||
["JI", "ジ"],
|
|
||||||
["ji", "じ"],
|
|
||||||
["JU", "ジュ"],
|
|
||||||
["ju", "じゅ"],
|
|
||||||
["JE", "ジェ"],
|
|
||||||
["je", "じぇ"],
|
|
||||||
["JO", "ジョ"],
|
|
||||||
["jo", "じょ"],
|
|
||||||
["DA", "ダ"],
|
|
||||||
["da", "だ"],
|
|
||||||
["DI", "ヂ"],
|
|
||||||
["di", "ぢ"],
|
|
||||||
["DU", "ヅ"],
|
|
||||||
["du", "づ"],
|
|
||||||
["DE", "デ"],
|
|
||||||
["de", "で"],
|
|
||||||
["DO", "ド"],
|
|
||||||
["do", "ど"],
|
|
||||||
["BA", "バ"],
|
|
||||||
["ba", "ば"],
|
|
||||||
["BI", "ビ"],
|
|
||||||
["bi", "び"],
|
|
||||||
["BU", "ブ"],
|
|
||||||
["bu", "ぶ"],
|
|
||||||
["BE", "ベ"],
|
|
||||||
["be", "べ"],
|
|
||||||
["BO", "ボ"],
|
|
||||||
["bo", "ぼ"],
|
|
||||||
["VA", "ヴァ"],
|
|
||||||
["va", "ヴぁ"],
|
|
||||||
["VI", "ヴィ"],
|
|
||||||
["vi", "ヴぃ"],
|
|
||||||
["VU", "ヴ"],
|
|
||||||
["vu", "ヴ"],
|
|
||||||
["VE", "ヴェ"],
|
|
||||||
["ve", "ヴぇ"],
|
|
||||||
["VO", "ヴォ"],
|
|
||||||
["vo", "ヴぉ"],
|
|
||||||
["PA", "パ"],
|
|
||||||
["pa", "ぱ"],
|
|
||||||
["PI", "ピ"],
|
|
||||||
["pi", "ぴ"],
|
|
||||||
["PU", "プ"],
|
|
||||||
["pu", "ぷ"],
|
|
||||||
["PE", "ペ"],
|
|
||||||
["pe", "ぺ"],
|
|
||||||
["PO", "ポ"],
|
|
||||||
["po", "ぽ"],
|
|
||||||
["ZA", "ザ"],
|
|
||||||
["za", "ざ"],
|
|
||||||
["ZI", "ジ"],
|
|
||||||
["zi", "じ"],
|
|
||||||
["ZU", "ズ"],
|
|
||||||
["zu", "ず"],
|
|
||||||
["ZE", "ゼ"],
|
|
||||||
["ze", "ぜ"],
|
|
||||||
["ZO", "ゾ"],
|
|
||||||
["zo", "ぞ"],
|
|
||||||
["FA", "ファ"],
|
|
||||||
["fa", "ふぁ"],
|
|
||||||
["FI", "フィ"],
|
|
||||||
["fi", "ふぃ"],
|
|
||||||
["FU", "フ"],
|
|
||||||
["fu", "ふ"],
|
|
||||||
["FE", "フェ"],
|
|
||||||
["fe", "ふぇ"],
|
|
||||||
["FO", "フォ"],
|
|
||||||
["fo", "ふぉ"],
|
|
||||||
["XA", "ァ"],
|
|
||||||
["xa", "ぁ"],
|
|
||||||
["XI", "ィ"],
|
|
||||||
["xi", "ぃ"],
|
|
||||||
["XU", "ゥ"],
|
|
||||||
["xu", "ぅ"],
|
|
||||||
["XE", "ェ"],
|
|
||||||
["xe", "ぇ"],
|
|
||||||
["XO", "ォ"],
|
|
||||||
["xo", "ぉ"],
|
|
||||||
["XN", "ン"],
|
|
||||||
["xn", "ん"],
|
|
||||||
["NN", "ン"],
|
|
||||||
["N'", "ン"],
|
|
||||||
["nn", "ん"],
|
|
||||||
["n'", "ん"]
|
|
||||||
],
|
|
||||||
"1letter": [
|
|
||||||
["A", "ア"],
|
|
||||||
["a", "あ"],
|
|
||||||
["I", "イ"],
|
|
||||||
["i", "い"],
|
|
||||||
["U", "ウ"],
|
|
||||||
["u", "う"],
|
|
||||||
["E", "エ"],
|
|
||||||
["e", "え"],
|
|
||||||
["O", "オ"],
|
|
||||||
["o", "お"]
|
|
||||||
],
|
|
||||||
"replaceN": [
|
|
||||||
["N", "ン"],
|
|
||||||
["n", "ん"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,42 +0,0 @@
|
||||||
import kanadata from "../data/kanadata.json";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Specifically converts a romaji string to kana.
|
|
||||||
* The result may be hiragana, katakana or mixed, depending on the case
|
|
||||||
* of the input romaji.
|
|
||||||
*
|
|
||||||
* @param romaji Input romaji string.
|
|
||||||
* @param isLive Set to true to specify that the conversion is done in live (while the user is writing). Disables certain functions.
|
|
||||||
* @returns Output kana string.
|
|
||||||
*/
|
|
||||||
export function romajiToKana(romaji: string, isLive = false): string | null {
|
|
||||||
let s = romaji.trim();
|
|
||||||
if (s == "") return null;
|
|
||||||
|
|
||||||
// Replace the double vowels for katakana.
|
|
||||||
const doubleVowelRegex = /([AEIOU])\1/g;
|
|
||||||
s = s.replaceAll(doubleVowelRegex, "$1ー");
|
|
||||||
|
|
||||||
// Replace the double consonants.
|
|
||||||
|
|
||||||
// Then, replace - by ー.
|
|
||||||
s = s.replaceAll("-", "ー");
|
|
||||||
s = s.replaceAll("_", "ー");
|
|
||||||
|
|
||||||
// Then, replace 4 letter characters:
|
|
||||||
for (const [find, repl] of kanadata.romajiToKana["4letter"]) s = s.replaceAll(find, repl);
|
|
||||||
|
|
||||||
// Then, replace 3 letter characters:
|
|
||||||
for (const [find, repl] of kanadata.romajiToKana["3letter"]) s = s.replaceAll(find, repl);
|
|
||||||
|
|
||||||
// Then, replace 2 letter characters:
|
|
||||||
for (const [find, repl] of kanadata.romajiToKana["2letter"]) s = s.replaceAll(find, repl);
|
|
||||||
|
|
||||||
// Then, replace 1 letter characters:
|
|
||||||
for (const [find, repl] of kanadata.romajiToKana["1letter"]) s = s.replaceAll(find, repl);
|
|
||||||
|
|
||||||
if (!isLive)
|
|
||||||
for (const [find, repl] of kanadata.romajiToKana["replaceN"]) s = s.replaceAll(find, repl);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
17
src/panes/HomePane.tsx
Normal file
17
src/panes/HomePane.tsx
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
export default function HomePane() {
|
||||||
|
return (
|
||||||
|
<main>
|
||||||
|
<h1 className="text-4xl">Houhou</h1>
|
||||||
|
|
||||||
|
<a
|
||||||
|
href="https://git.mzhang.io/michael/houhou"
|
||||||
|
rel="noopener"
|
||||||
|
target="_blank"
|
||||||
|
className="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800"
|
||||||
|
style={{ display: "inline" }}
|
||||||
|
>
|
||||||
|
Source
|
||||||
|
</a>
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
|
@ -3,8 +3,14 @@ import {
|
||||||
Container,
|
Container,
|
||||||
Input,
|
Input,
|
||||||
InputGroup,
|
InputGroup,
|
||||||
InputLeftElement,
|
|
||||||
InputRightElement,
|
InputRightElement,
|
||||||
|
Modal,
|
||||||
|
ModalBody,
|
||||||
|
ModalCloseButton,
|
||||||
|
ModalContent,
|
||||||
|
ModalFooter,
|
||||||
|
ModalHeader,
|
||||||
|
ModalOverlay,
|
||||||
Progress,
|
Progress,
|
||||||
Spinner,
|
Spinner,
|
||||||
useDisclosure,
|
useDisclosure,
|
||||||
|
@ -15,9 +21,8 @@ import { invoke } from "@tauri-apps/api/tauri";
|
||||||
import { Link, useNavigate } from "react-router-dom";
|
import { Link, useNavigate } from "react-router-dom";
|
||||||
import { ArrowBackIcon, CheckIcon } from "@chakra-ui/icons";
|
import { ArrowBackIcon, CheckIcon } from "@chakra-ui/icons";
|
||||||
import { FormEvent } from "react";
|
import { FormEvent } from "react";
|
||||||
import ConfirmQuitModal from "../components/utils/ConfirmQuitModal";
|
import ConfirmQuitModal from "../lib/ConfirmQuitModal";
|
||||||
import * as _ from "lodash-es";
|
import * as _ from "lodash-es";
|
||||||
import InputBox from "../components/utils/InputBox";
|
|
||||||
|
|
||||||
export interface SrsEntry {
|
export interface SrsEntry {
|
||||||
associated_kanji: string;
|
associated_kanji: string;
|
||||||
|
@ -27,8 +32,8 @@ export interface SrsEntry {
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ReviewItemType {
|
export enum ReviewItemType {
|
||||||
MEANING = "MEANING",
|
MEANING,
|
||||||
READING = "READING",
|
READING,
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ReviewItem {
|
export interface ReviewItem {
|
||||||
|
@ -102,38 +107,15 @@ export function Component() {
|
||||||
setReviewQueue(rest);
|
setReviewQueue(rest);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const renderInside = () => {
|
||||||
if (!reviewQueue) return <Spinner />;
|
if (!reviewQueue) return <Spinner />;
|
||||||
|
|
||||||
if (reviewQueue.length == 0) return <Done />;
|
if (reviewQueue.length == 0) return <Done />;
|
||||||
|
|
||||||
const nextItem = reviewQueue[0];
|
const nextItem = reviewQueue[0];
|
||||||
|
|
||||||
const inputBox = (kanaInput: boolean) => {
|
|
||||||
return (
|
|
||||||
<InputGroup>
|
|
||||||
<InputLeftElement>{kanaInput ? "あ" : "A"}</InputLeftElement>
|
|
||||||
|
|
||||||
<InputBox
|
|
||||||
kanaInput={kanaInput}
|
|
||||||
value={currentAnswer}
|
|
||||||
setValue={setCurrentAnswer}
|
|
||||||
autoFocus
|
|
||||||
className={styles["input-box"]}
|
|
||||||
placeholder="Enter your answer..."
|
|
||||||
spellCheck={false}
|
|
||||||
backgroundColor={"white"}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<InputRightElement>
|
|
||||||
<CheckIcon color="green.500" />
|
|
||||||
</InputRightElement>
|
|
||||||
</InputGroup>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const renderInside = () => {
|
|
||||||
console.log("next item", nextItem);
|
console.log("next item", nextItem);
|
||||||
|
|
||||||
const kanaInput = nextItem.type == ReviewItemType.READING;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{startingSize && (
|
{startingSize && (
|
||||||
|
@ -148,15 +130,27 @@ export function Component() {
|
||||||
|
|
||||||
<h1 className={styles["test-word"]}>{nextItem.challenge}</h1>
|
<h1 className={styles["test-word"]}>{nextItem.challenge}</h1>
|
||||||
|
|
||||||
<form onSubmit={formSubmit}>
|
<details>
|
||||||
{
|
<summary>Debug</summary>
|
||||||
{
|
<pre>{JSON.stringify(nextItem, null, 2)}</pre>
|
||||||
[ReviewItemType.MEANING]: "What is the meaning?",
|
</details>
|
||||||
[ReviewItemType.READING]: "What is the reading?",
|
|
||||||
}[nextItem.type]
|
|
||||||
}
|
|
||||||
|
|
||||||
{inputBox(kanaInput)}
|
<form onSubmit={formSubmit}>
|
||||||
|
<InputGroup>
|
||||||
|
<Input
|
||||||
|
autoFocus
|
||||||
|
className={styles["input-box"]}
|
||||||
|
placeholder="Enter your answer..."
|
||||||
|
value={currentAnswer}
|
||||||
|
spellCheck={false}
|
||||||
|
backgroundColor={"white"}
|
||||||
|
onChange={(evt) => setCurrentAnswer(evt.target.value)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<InputRightElement>
|
||||||
|
<CheckIcon color="green.500" />
|
||||||
|
</InputRightElement>
|
||||||
|
</InputGroup>
|
||||||
</form>
|
</form>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -177,12 +171,6 @@ export function Component() {
|
||||||
<ArrowBackIcon />
|
<ArrowBackIcon />
|
||||||
Back
|
Back
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>Debug</summary>
|
|
||||||
<pre>{JSON.stringify(nextItem, null, 2)}</pre>
|
|
||||||
</details>
|
|
||||||
|
|
||||||
<div className={styles.container}>{renderInside()}</div>
|
<div className={styles.container}>{renderInside()}</div>
|
||||||
</Container>
|
</Container>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { defineConfig } from "vite";
|
import { defineConfig } from "vite";
|
||||||
import react from "@vitejs/plugin-react-swc";
|
import react from "@vitejs/plugin-react";
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig(async () => ({
|
export default defineConfig(async () => ({
|
||||||
|
|
Loading…
Reference in a new issue