qr codes are ... STILL ... working
parent
00f6ecae52
commit
0be5d1b3dd
|
|
@ -21,7 +21,8 @@
|
||||||
"ignorePatterns": [
|
"ignorePatterns": [
|
||||||
"node_modules/**",
|
"node_modules/**",
|
||||||
"**/dist/**",
|
"**/dist/**",
|
||||||
"cordova/**"
|
"cordova/**",
|
||||||
|
"scripts/**"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"@typescript-eslint/no-unused-vars": "error",
|
"@typescript-eslint/no-unused-vars": "error",
|
||||||
|
|
|
||||||
|
|
@ -1,21 +0,0 @@
|
||||||
import {resolve, sep} from 'path';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
'*.{js,ts,tsx}': 'eslint --cache --fix',
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run typechecking if any type-sensitive files was staged
|
|
||||||
* @param {string[]} filenames
|
|
||||||
* @return {string[]}
|
|
||||||
*/
|
|
||||||
'packages/**/{*.ts,*.vue,tsconfig.json}': ({filenames}) => {
|
|
||||||
const pathToPackages = resolve(process.cwd(), 'packages') + sep;
|
|
||||||
return Array.from(
|
|
||||||
filenames.reduce((set, filename) => {
|
|
||||||
const pack = filename.replace(pathToPackages, '').split(sep)[0];
|
|
||||||
set.add(`npm run typecheck:${pack} --if-present`);
|
|
||||||
return set;
|
|
||||||
}, new Set),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
@ -9,7 +9,8 @@
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cordova": "^11.0.0"
|
"cordova": "^11.0.0",
|
||||||
|
"cordova-plugin-qrscanner-mm": "^4.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cordova-android": "^10.1.2"
|
"cordova-android": "^10.1.2"
|
||||||
|
|
@ -1232,6 +1233,15 @@
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/cordova-plugin-qrscanner-mm": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/cordova-plugin-qrscanner-mm/-/cordova-plugin-qrscanner-mm-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-C3RoycI66tzx3X3TQlH08x5k2VMbBzK77+e7HpeYTR+93rAZuDsnkWoEl09MHnZhHLKpRuR6hEf77obkNAzk4A==",
|
||||||
|
"dependencies": {
|
||||||
|
"qrcode-reader": "^1.0.4",
|
||||||
|
"webrtc-adapter": "^3.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/cordova-serve": {
|
"node_modules/cordova-serve": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz",
|
||||||
|
|
@ -3719,6 +3729,11 @@
|
||||||
"teleport": ">=0.2.0"
|
"teleport": ">=0.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/qrcode-reader": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
|
||||||
|
},
|
||||||
"node_modules/qs": {
|
"node_modules/qs": {
|
||||||
"version": "6.10.3",
|
"version": "6.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
||||||
|
|
@ -4104,6 +4119,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
|
||||||
"integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg=="
|
"integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg=="
|
||||||
},
|
},
|
||||||
|
"node_modules/sdp": {
|
||||||
|
"version": "1.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-9x0+fpJHW2bbqtIktmL+H9m+BswgurPVPhWrur4cCZPDWDSsdGYvRBaKhDXlnNCD1b/Xi8cOTG2u703CTQuwgg=="
|
||||||
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.3.7",
|
"version": "7.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
|
||||||
|
|
@ -4812,6 +4832,18 @@
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||||
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
|
"integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/webrtc-adapter": {
|
||||||
|
"version": "3.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-3.4.3.tgz",
|
||||||
|
"integrity": "sha512-rz+SxzIEuHDbyTKhYffLmzSGX6+D/pOwoXKzS1pbR2PmMhBQTXCd7aYVhSoCcTHRcmcAR3OsFE8pbYFdy1qjbQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"sdp": "^1.5.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0.0",
|
||||||
|
"npm": ">=3.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/which": {
|
"node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
|
@ -5979,6 +6011,15 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"cordova-plugin-qrscanner-mm": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/cordova-plugin-qrscanner-mm/-/cordova-plugin-qrscanner-mm-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-C3RoycI66tzx3X3TQlH08x5k2VMbBzK77+e7HpeYTR+93rAZuDsnkWoEl09MHnZhHLKpRuR6hEf77obkNAzk4A==",
|
||||||
|
"requires": {
|
||||||
|
"qrcode-reader": "^1.0.4",
|
||||||
|
"webrtc-adapter": "^3.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cordova-serve": {
|
"cordova-serve": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.0.tgz",
|
||||||
|
|
@ -7850,6 +7891,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
|
||||||
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
|
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
|
||||||
},
|
},
|
||||||
|
"qrcode-reader": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ=="
|
||||||
|
},
|
||||||
"qs": {
|
"qs": {
|
||||||
"version": "6.10.3",
|
"version": "6.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
||||||
|
|
@ -8125,6 +8171,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
|
||||||
"integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg=="
|
"integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg=="
|
||||||
},
|
},
|
||||||
|
"sdp": {
|
||||||
|
"version": "1.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/sdp/-/sdp-1.5.4.tgz",
|
||||||
|
"integrity": "sha512-9x0+fpJHW2bbqtIktmL+H9m+BswgurPVPhWrur4cCZPDWDSsdGYvRBaKhDXlnNCD1b/Xi8cOTG2u703CTQuwgg=="
|
||||||
|
},
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "7.3.7",
|
"version": "7.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
|
||||||
|
|
@ -8662,6 +8713,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"webrtc-adapter": {
|
||||||
|
"version": "3.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-3.4.3.tgz",
|
||||||
|
"integrity": "sha512-rz+SxzIEuHDbyTKhYffLmzSGX6+D/pOwoXKzS1pbR2PmMhBQTXCd7aYVhSoCcTHRcmcAR3OsFE8pbYFdy1qjbQ==",
|
||||||
|
"requires": {
|
||||||
|
"sdp": "^1.5.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,14 @@
|
||||||
"cordova": {
|
"cordova": {
|
||||||
"platforms": [
|
"platforms": [
|
||||||
"android"
|
"android"
|
||||||
]
|
],
|
||||||
|
"plugins": {
|
||||||
|
"cordova-plugin-qrscanner": {}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"cordova": "^11.0.0"
|
"cordova": "^11.0.0",
|
||||||
|
"cordova-plugin-qrscanner-mm": "^4.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"cordova-android": "^10.1.2"
|
"cordova-android": "^10.1.2"
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -26,8 +26,8 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body style="margin: 0px; overflow: hidden; color: #f8f8f2; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif">
|
<body style="margin: 0px; overflow: hidden;">
|
||||||
<div id="app" style="width: 100vw; height: 100vh; background: #282a36"></div>
|
<div id="app" style="width: 100vw; height: 100vh;"></div>
|
||||||
|
|
||||||
<script src="cordova.js"></script>
|
<script src="cordova.js"></script>
|
||||||
<script src="index.js"></script>
|
<script src="index.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/mysql": "^2.15.21",
|
"@types/mysql": "^2.15.21",
|
||||||
|
"@types/qrcode": "^1.4.2",
|
||||||
"@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",
|
||||||
|
|
@ -20,8 +21,10 @@
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
"get-port": "^6.1.2",
|
"get-port": "^6.1.2",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
"qrcode": "^1.5.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
"react-icons": "^4.4.0",
|
||||||
"react-time-ago": "^7.2.1",
|
"react-time-ago": "^7.2.1",
|
||||||
"react-timeago": "^7.1.0",
|
"react-timeago": "^7.1.0",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
|
|
@ -1053,6 +1056,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
||||||
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
|
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
|
||||||
},
|
},
|
||||||
|
"node_modules/@types/qrcode": {
|
||||||
|
"version": "1.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.2.tgz",
|
||||||
|
"integrity": "sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@types/qs": {
|
"node_modules/@types/qs": {
|
||||||
"version": "6.9.7",
|
"version": "6.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
||||||
|
|
@ -3521,6 +3532,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/decompress-response": {
|
"node_modules/decompress-response": {
|
||||||
"version": "3.3.0",
|
"version": "3.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
||||||
|
|
@ -3654,6 +3673,11 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"node_modules/dijkstrajs": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg=="
|
||||||
|
},
|
||||||
"node_modules/dir-compare": {
|
"node_modules/dir-compare": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz",
|
||||||
|
|
@ -4123,6 +4147,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||||
},
|
},
|
||||||
|
"node_modules/encode-utf8": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||||
|
},
|
||||||
"node_modules/encodeurl": {
|
"node_modules/encodeurl": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
|
|
@ -5455,7 +5484,6 @@
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "6.* || 8.* || >= 10.*"
|
"node": "6.* || 8.* || >= 10.*"
|
||||||
}
|
}
|
||||||
|
|
@ -8154,6 +8182,14 @@
|
||||||
"node": ">=4.0"
|
"node": ">=4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/pngjs": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/postcss": {
|
"node_modules/postcss": {
|
||||||
"version": "8.4.14",
|
"version": "8.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
||||||
|
|
@ -8316,6 +8352,134 @@
|
||||||
"teleport": ">=0.2.0"
|
"teleport": ">=0.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/qrcode": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
|
||||||
|
"dependencies": {
|
||||||
|
"dijkstrajs": "^1.0.1",
|
||||||
|
"encode-utf8": "^1.0.3",
|
||||||
|
"pngjs": "^5.0.0",
|
||||||
|
"yargs": "^15.3.1"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"qrcode": "bin/qrcode"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10.13.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/camelcase": {
|
||||||
|
"version": "5.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||||
|
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/cliui": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"strip-ansi": "^6.0.0",
|
||||||
|
"wrap-ansi": "^6.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/find-up": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||||
|
"dependencies": {
|
||||||
|
"locate-path": "^5.0.0",
|
||||||
|
"path-exists": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/locate-path": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||||
|
"dependencies": {
|
||||||
|
"p-locate": "^4.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/p-locate": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||||
|
"dependencies": {
|
||||||
|
"p-limit": "^2.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/path-exists": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/wrap-ansi": {
|
||||||
|
"version": "6.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||||
|
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/y18n": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/yargs": {
|
||||||
|
"version": "15.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
|
||||||
|
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
|
||||||
|
"dependencies": {
|
||||||
|
"cliui": "^6.0.0",
|
||||||
|
"decamelize": "^1.2.0",
|
||||||
|
"find-up": "^4.1.0",
|
||||||
|
"get-caller-file": "^2.0.1",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"require-main-filename": "^2.0.0",
|
||||||
|
"set-blocking": "^2.0.0",
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"which-module": "^2.0.0",
|
||||||
|
"y18n": "^4.0.0",
|
||||||
|
"yargs-parser": "^18.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qrcode/node_modules/yargs-parser": {
|
||||||
|
"version": "18.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
|
||||||
|
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"camelcase": "^5.0.0",
|
||||||
|
"decamelize": "^1.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/qs": {
|
"node_modules/qs": {
|
||||||
"version": "6.10.3",
|
"version": "6.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
||||||
|
|
@ -8435,6 +8599,14 @@
|
||||||
"react": "^18.2.0"
|
"react": "^18.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-icons": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
|
||||||
|
"integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-is": {
|
"node_modules/react-is": {
|
||||||
"version": "16.13.1",
|
"version": "16.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||||
|
|
@ -8702,7 +8874,6 @@
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
|
|
@ -8715,6 +8886,11 @@
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/require-main-filename": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||||
|
},
|
||||||
"node_modules/resolve": {
|
"node_modules/resolve": {
|
||||||
"version": "1.22.1",
|
"version": "1.22.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
|
||||||
|
|
@ -10439,6 +10615,11 @@
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/which-module": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
|
||||||
|
},
|
||||||
"node_modules/wide-align": {
|
"node_modules/wide-align": {
|
||||||
"version": "1.1.5",
|
"version": "1.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
||||||
|
|
@ -11463,6 +11644,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
||||||
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
|
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
|
||||||
},
|
},
|
||||||
|
"@types/qrcode": {
|
||||||
|
"version": "1.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.4.2.tgz",
|
||||||
|
"integrity": "sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==",
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/qs": {
|
"@types/qs": {
|
||||||
"version": "6.9.7",
|
"version": "6.9.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
|
||||||
|
|
@ -13323,6 +13512,11 @@
|
||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"decamelize": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="
|
||||||
|
},
|
||||||
"decompress-response": {
|
"decompress-response": {
|
||||||
"version": "3.3.0",
|
"version": "3.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
|
||||||
|
|
@ -13421,6 +13615,11 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
|
"dijkstrajs": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg=="
|
||||||
|
},
|
||||||
"dir-compare": {
|
"dir-compare": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz",
|
||||||
|
|
@ -13806,6 +14005,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
|
||||||
},
|
},
|
||||||
|
"encode-utf8": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="
|
||||||
|
},
|
||||||
"encodeurl": {
|
"encodeurl": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
|
|
@ -14741,8 +14945,7 @@
|
||||||
"get-caller-file": {
|
"get-caller-file": {
|
||||||
"version": "2.0.5",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"get-func-name": {
|
"get-func-name": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
|
|
@ -16737,6 +16940,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pngjs": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw=="
|
||||||
|
},
|
||||||
"postcss": {
|
"postcss": {
|
||||||
"version": "8.4.14",
|
"version": "8.4.14",
|
||||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
|
||||||
|
|
@ -16858,6 +17066,106 @@
|
||||||
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
|
||||||
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
|
"integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
|
||||||
},
|
},
|
||||||
|
"qrcode": {
|
||||||
|
"version": "1.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz",
|
||||||
|
"integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==",
|
||||||
|
"requires": {
|
||||||
|
"dijkstrajs": "^1.0.1",
|
||||||
|
"encode-utf8": "^1.0.3",
|
||||||
|
"pngjs": "^5.0.0",
|
||||||
|
"yargs": "^15.3.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"camelcase": {
|
||||||
|
"version": "5.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||||
|
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
|
||||||
|
},
|
||||||
|
"cliui": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"strip-ansi": "^6.0.0",
|
||||||
|
"wrap-ansi": "^6.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"find-up": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
|
||||||
|
"requires": {
|
||||||
|
"locate-path": "^5.0.0",
|
||||||
|
"path-exists": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"locate-path": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
|
||||||
|
"requires": {
|
||||||
|
"p-locate": "^4.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"p-locate": {
|
||||||
|
"version": "4.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
|
||||||
|
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
||||||
|
"requires": {
|
||||||
|
"p-limit": "^2.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"path-exists": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
|
||||||
|
},
|
||||||
|
"wrap-ansi": {
|
||||||
|
"version": "6.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
||||||
|
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
||||||
|
"requires": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"y18n": {
|
||||||
|
"version": "4.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
|
||||||
|
"integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
|
||||||
|
},
|
||||||
|
"yargs": {
|
||||||
|
"version": "15.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
|
||||||
|
"integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
|
||||||
|
"requires": {
|
||||||
|
"cliui": "^6.0.0",
|
||||||
|
"decamelize": "^1.2.0",
|
||||||
|
"find-up": "^4.1.0",
|
||||||
|
"get-caller-file": "^2.0.1",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"require-main-filename": "^2.0.0",
|
||||||
|
"set-blocking": "^2.0.0",
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"which-module": "^2.0.0",
|
||||||
|
"y18n": "^4.0.0",
|
||||||
|
"yargs-parser": "^18.1.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yargs-parser": {
|
||||||
|
"version": "18.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
|
||||||
|
"integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^5.0.0",
|
||||||
|
"decamelize": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"qs": {
|
"qs": {
|
||||||
"version": "6.10.3",
|
"version": "6.10.3",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
|
||||||
|
|
@ -16940,6 +17248,12 @@
|
||||||
"scheduler": "^0.23.0"
|
"scheduler": "^0.23.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-icons": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
|
||||||
|
"integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
|
||||||
|
"requires": {}
|
||||||
|
},
|
||||||
"react-is": {
|
"react-is": {
|
||||||
"version": "16.13.1",
|
"version": "16.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||||
|
|
@ -17144,14 +17458,18 @@
|
||||||
"require-directory": {
|
"require-directory": {
|
||||||
"version": "2.1.1",
|
"version": "2.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
|
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"require-from-string": {
|
"require-from-string": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
|
||||||
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
|
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
|
||||||
},
|
},
|
||||||
|
"require-main-filename": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
|
||||||
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.22.1",
|
"version": "1.22.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
|
||||||
|
|
@ -18409,6 +18727,11 @@
|
||||||
"is-symbol": "^1.0.3"
|
"is-symbol": "^1.0.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"which-module": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q=="
|
||||||
|
},
|
||||||
"wide-align": {
|
"wide-align": {
|
||||||
"version": "1.1.5",
|
"version": "1.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/mysql": "^2.15.21",
|
"@types/mysql": "^2.15.21",
|
||||||
|
"@types/qrcode": "^1.4.2",
|
||||||
"@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",
|
||||||
|
|
@ -69,8 +70,10 @@
|
||||||
"express": "^4.18.1",
|
"express": "^4.18.1",
|
||||||
"get-port": "^6.1.2",
|
"get-port": "^6.1.2",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
"qrcode": "^1.5.1",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
|
"react-icons": "^4.4.0",
|
||||||
"react-time-ago": "^7.2.1",
|
"react-time-ago": "^7.2.1",
|
||||||
"react-timeago": "^7.1.0",
|
"react-timeago": "^7.1.0",
|
||||||
"uuid": "^8.3.2",
|
"uuid": "^8.3.2",
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import {
|
||||||
mkdirSync,
|
mkdirSync,
|
||||||
existsSync,
|
existsSync,
|
||||||
} from 'fs';
|
} from 'fs';
|
||||||
|
import { URL } from 'url';
|
||||||
|
|
||||||
const appdataPath = process.env.APPDATA || // windows
|
const appdataPath = process.env.APPDATA || // windows
|
||||||
(process.platform == 'darwin' ?
|
(process.platform == 'darwin' ?
|
||||||
|
|
@ -13,6 +14,7 @@ const appdataPath = process.env.APPDATA || // windows
|
||||||
|
|
||||||
const cornerDataPath = resolve(appdataPath, 'corner');
|
const cornerDataPath = resolve(appdataPath, 'corner');
|
||||||
const clientIdPath = resolve(cornerDataPath, 'clientId');
|
const clientIdPath = resolve(cornerDataPath, 'clientId');
|
||||||
|
const homeServerPath = resolve(cornerDataPath, 'homeServer');
|
||||||
|
|
||||||
// --- setup ---
|
// --- setup ---
|
||||||
|
|
||||||
|
|
@ -39,4 +41,22 @@ export function setClientId(id: string) {
|
||||||
if(!validUuid(id)) return false;
|
if(!validUuid(id)) return false;
|
||||||
writeFileSync(clientIdPath, id);
|
writeFileSync(clientIdPath, id);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getHomeServer() {
|
||||||
|
const url = readFileSync(homeServerPath).toString()
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
return url;
|
||||||
|
} catch(e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setHomeServer(url: string) {
|
||||||
|
if(url === null) {
|
||||||
|
writeFileSync(homeServerPath, '');
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
writeFileSync(homeServerPath, url);
|
||||||
}
|
}
|
||||||
|
|
@ -6,8 +6,8 @@
|
||||||
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
<meta content="width=device-width, initial-scale=1.0" name="viewport">
|
||||||
<title>Vite App</title>
|
<title>Vite App</title>
|
||||||
</head>
|
</head>
|
||||||
<body style="font-size: 1em; margin: 0px; overflow: hidden; color: #f8f8f2; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif">
|
<body style=" margin: 0px; overflow: hidden;">
|
||||||
<div id="app" style="width: 100vw; height: 100vh; background: #282a36"></div>
|
<div id="app" style="width: 100vw; height: 100vh;"></div>
|
||||||
<script src="./src/index.tsx" type="module"></script>
|
<script src="./src/index.tsx" type="module"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import * as preload from '#preload';
|
import * as preload from '#preload';
|
||||||
|
|
||||||
|
console.log('#preload', preload);
|
||||||
|
|
||||||
const functions: any = (function() {
|
const functions: any = (function() {
|
||||||
const electron = !!preload.getClientId;
|
const electron = !!preload.getClientId;
|
||||||
const cordova = 'cordova' in globalThis;
|
const cordova = 'cordova' in globalThis;
|
||||||
|
|
@ -11,7 +13,8 @@ const functions: any = (function() {
|
||||||
if(electron) {
|
if(electron) {
|
||||||
return preload;
|
return preload;
|
||||||
} else {
|
} else {
|
||||||
let cid: any = null;
|
let cid: string | null = null;
|
||||||
|
let homeServer: string | null = null;
|
||||||
return {
|
return {
|
||||||
getClientId() {
|
getClientId() {
|
||||||
return cid;
|
return cid;
|
||||||
|
|
@ -19,10 +22,20 @@ const functions: any = (function() {
|
||||||
setClientId(id: any) {
|
setClientId(id: any) {
|
||||||
cid = id;
|
cid = id;
|
||||||
},
|
},
|
||||||
|
getHomeServer() {
|
||||||
|
return homeServer;
|
||||||
|
},
|
||||||
|
setHomeServer(str: string) {
|
||||||
|
homeServer = str;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
console.log('native functions loaded', functions);
|
||||||
|
|
||||||
export const getClientId = functions.getClientId;
|
export const getClientId = functions.getClientId;
|
||||||
export const setClientId = functions.setClientId;
|
export const setClientId = functions.setClientId;
|
||||||
|
export const getHomeServer = functions.getHomeServer;
|
||||||
|
export const setHomeServer = functions.setHomeServer;
|
||||||
|
|
@ -1,25 +1,60 @@
|
||||||
import { createContext, useEffect, useState } from 'react';
|
import { createContext, useCallback, useEffect, useState, useMemo } from 'react';
|
||||||
import Channels from './Channels';
|
import Channels from './Channels';
|
||||||
import Chat from './Chat';
|
import Chat from './Chat';
|
||||||
import { getClientId, setClientId } from '../lib/native';
|
import {
|
||||||
|
getClientId,
|
||||||
|
setClientId,
|
||||||
|
getHomeServer,
|
||||||
|
setHomeServer
|
||||||
|
} from '../lib/native';
|
||||||
import { useApi } from '../lib/useApi';
|
import { useApi } from '../lib/useApi';
|
||||||
import Sidebar from '../components/Sidebar';
|
import Sidebar from '../components/Sidebar';
|
||||||
|
import NewAccount from './NewAccount';
|
||||||
|
|
||||||
export const channelContext = createContext<{
|
export const ChannelContext = createContext<{
|
||||||
channel: string | null,
|
channel: string | null,
|
||||||
setChannel: (uid: string) => void
|
setChannel: (uid: string) => void
|
||||||
}>({
|
}>({
|
||||||
channel: null,
|
channel: null,
|
||||||
setChannel: () => {},
|
setChannel: () => {},
|
||||||
});
|
});
|
||||||
|
export const ClientIdContext = createContext<{
|
||||||
export const clientIdContext = createContext<string | null>(null);
|
clientId: string | null,
|
||||||
|
setClientId: (id: string | null) => void
|
||||||
|
}>({
|
||||||
|
clientId: null,
|
||||||
|
setClientId: () => {}
|
||||||
|
});
|
||||||
|
export const HomeServerContext = createContext<{
|
||||||
|
homeServer: string | null,
|
||||||
|
setHomeServer: (uid: string | null) => void
|
||||||
|
}>({
|
||||||
|
homeServer: null,
|
||||||
|
setHomeServer: () => {}
|
||||||
|
});
|
||||||
|
export const TransparencyContext = createContext<(transparent: boolean) => void>(() => {});
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
const [channel, setChannel] = useState<string | null>(null);
|
const [channel, setChannel] = useState<string | null>(null);
|
||||||
const [clientId, setCachedClientId] = useState(getClientId());
|
const [clientId, setCachedClientId] = useState(getClientId());
|
||||||
const channelContextValue = { channel, setChannel };
|
const [homeServer, setCachedHomeServer] = useState<string | null>(getHomeServer());
|
||||||
|
const channelContextValue = { channel, setChannel }
|
||||||
|
|
||||||
|
const [transparent, setTransparent] = useState(false);
|
||||||
|
|
||||||
|
const setHomeServerCallback = useCallback((url: string | null) => {
|
||||||
|
console.log('SETTING HOME SERVER', url)
|
||||||
|
setHomeServer(url);
|
||||||
|
setCachedHomeServer(getHomeServer());
|
||||||
|
}, [homeServer]);
|
||||||
|
|
||||||
|
const homeServerContextValue = useMemo(() => {
|
||||||
|
return {
|
||||||
|
homeServer,
|
||||||
|
setHomeServer: setHomeServerCallback
|
||||||
|
};
|
||||||
|
}, [homeServer, setHomeServerCallback])
|
||||||
|
|
||||||
// persist given clientId to disk
|
// persist given clientId to disk
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if(clientId === null) return;
|
if(clientId === null) return;
|
||||||
|
|
@ -37,31 +72,48 @@ export default function App() {
|
||||||
send('client:new');
|
send('client:new');
|
||||||
}, [clientId]);
|
}, [clientId]);
|
||||||
|
|
||||||
|
const clientIdContextValue = { clientId, setClientId: setCachedClientId };
|
||||||
|
|
||||||
|
// font-size: 16px;
|
||||||
|
// font-family: 'Lato', sans-serif;
|
||||||
|
// font-family: 'Red Hat Text', sans-serif;
|
||||||
|
// font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||||
|
// color: #f8f8f2;
|
||||||
|
// background: #282a36;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<clientIdContext.Provider value={clientId}>
|
<ClientIdContext.Provider value={clientIdContextValue}>
|
||||||
<channelContext.Provider value={channelContextValue}>
|
<ChannelContext.Provider value={channelContextValue}>
|
||||||
<Sidebar
|
<HomeServerContext.Provider value={homeServerContextValue}>
|
||||||
threshold={800}
|
<TransparencyContext.Provider value={setTransparent}>
|
||||||
sidebar={300}
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin='' />
|
||||||
<Channels></Channels>
|
<link href={"https://fonts.googleapis.com/css2?family=Fira+Sans&family=Josefin+Sans&family=Lato&family=Radio+Canada&family=Readex+Pro&family=Red+Hat+Text&family=Rubik&family=Signika&family=Telex&display=swap"} rel="stylesheet" />
|
||||||
<Chat></Chat>
|
<div style={{
|
||||||
</Sidebar>
|
background: transparent ? 'rgba(0, 0, 0, 0)' : '#282a36',
|
||||||
{/* <div style={{
|
color: transparent ? 'black' : '#f8f8f2',
|
||||||
display: 'grid',
|
fontSize: '16px',
|
||||||
gridTemplateColumns: '200px 1fr',
|
fontFamily: "'Red Hat Text', sans-serif",
|
||||||
gridTemplateRows: '1fr',
|
width: '100%',
|
||||||
height: '100%',
|
height: '100%'
|
||||||
}}>
|
}}>
|
||||||
<div style={{
|
{homeServer === null && (
|
||||||
background: '#21222c',
|
<NewAccount></NewAccount>
|
||||||
borderRight: '1px solid #bd93f9',
|
) || (
|
||||||
}}>
|
<Sidebar
|
||||||
</div>
|
threshold={800}
|
||||||
<div>
|
sidebar={300}
|
||||||
</div>
|
>
|
||||||
</div> */}
|
<Channels></Channels>
|
||||||
</channelContext.Provider>
|
<Chat></Chat>
|
||||||
</clientIdContext.Provider>
|
</Sidebar>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</TransparencyContext.Provider>
|
||||||
|
</HomeServerContext.Provider>
|
||||||
|
</ChannelContext.Provider>
|
||||||
|
</ClientIdContext.Provider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
import { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
import { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
||||||
import { channelContext, clientIdContext } from './App';
|
import { ChannelContext, ClientIdContext, HomeServerContext } from './App';
|
||||||
import { useApi } from '../lib/useApi';
|
import { useApi } from '../lib/useApi';
|
||||||
import type { IMessage } from './Message';
|
import type { IMessage } from './Message';
|
||||||
import NameTextbox from './NameTextbox';
|
import NameTextbox from './NameTextbox';
|
||||||
|
import LoginQR from './LoginQR';
|
||||||
|
|
||||||
interface IChannel {
|
interface IChannel {
|
||||||
uid: string;
|
uid: string;
|
||||||
|
|
@ -26,8 +27,10 @@ export default function Channels() {
|
||||||
const [channels, setChannels] = useState<IChannel[]>([]);
|
const [channels, setChannels] = useState<IChannel[]>([]);
|
||||||
const [unreads, setUnreads] = useState<IUnreads>({});
|
const [unreads, setUnreads] = useState<IUnreads>({});
|
||||||
|
|
||||||
const {channel, setChannel} = useContext(channelContext);
|
const { channel, setChannel } = useContext(ChannelContext);
|
||||||
const clientId = useContext(clientIdContext);
|
const { clientId } = useContext(ClientIdContext);
|
||||||
|
|
||||||
|
const { setHomeServer } = useContext(HomeServerContext);
|
||||||
|
|
||||||
const { send } = useApi({
|
const { send } = useApi({
|
||||||
'channels:list'(data: IChannel[]) {
|
'channels:list'(data: IChannel[]) {
|
||||||
|
|
@ -56,8 +59,10 @@ export default function Channels() {
|
||||||
}, [channels]);
|
}, [channels]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
console.log(channel, channels);
|
||||||
if(channels.length === 0) return;
|
if(channels.length === 0) return;
|
||||||
if(channel !== null) return;
|
if(channel !== null) return;
|
||||||
|
console.log('this is what setChannel is', setChannel);
|
||||||
setChannel(channels[0].uid);
|
setChannel(channels[0].uid);
|
||||||
}, [channel, channels]);
|
}, [channel, channels]);
|
||||||
|
|
||||||
|
|
@ -135,7 +140,9 @@ export default function Channels() {
|
||||||
borderRadius: '8px',
|
borderRadius: '8px',
|
||||||
// lineHeight: '20px'
|
// lineHeight: '20px'
|
||||||
}}>ADD</button>
|
}}>ADD</button>
|
||||||
<NameTextbox></NameTextbox>
|
<NameTextbox></NameTextbox><br></br>
|
||||||
|
<button onClick={() => setHomeServer(null)}>leave</button><br></br>
|
||||||
|
<LoginQR></LoginQR>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
import { useCallback, useContext, useEffect, useRef, useState } from 'react';
|
||||||
import { v4 } from 'uuid';
|
import { v4 } from 'uuid';
|
||||||
import { useApi } from '../lib/useApi';
|
import { useApi } from '../lib/useApi';
|
||||||
import { channelContext, clientIdContext } from './App';
|
import { ChannelContext, ClientIdContext } from './App';
|
||||||
import type { IMessage} from './Message';
|
import type { IMessage} from './Message';
|
||||||
import { Message } from './Message';
|
import { Message } from './Message';
|
||||||
|
import { MdSend } from 'react-icons/md'
|
||||||
|
|
||||||
function createMessage(from: string, text: string,
|
function createMessage(from: string, text: string,
|
||||||
channel: string, t = 0): IMessage {
|
channel: string, t = 0): IMessage {
|
||||||
|
|
@ -20,10 +21,13 @@ export default () => {
|
||||||
const [messages, setMessages] = useState<IMessage[]>([]);
|
const [messages, setMessages] = useState<IMessage[]>([]);
|
||||||
const [hist, setHist] = useState(false);
|
const [hist, setHist] = useState(false);
|
||||||
|
|
||||||
|
const CHATBOX_SIZE = 64;
|
||||||
|
const PADDING = 8;
|
||||||
|
|
||||||
const textBoxRef = useRef<HTMLDivElement>(null);
|
const textBoxRef = useRef<HTMLDivElement>(null);
|
||||||
|
|
||||||
const { channel, setChannel } = useContext(channelContext);
|
const { channel, setChannel } = useContext(ChannelContext);
|
||||||
const clientId = useContext(clientIdContext);
|
const { clientId } = useContext(ClientIdContext);
|
||||||
|
|
||||||
const { send } = useApi({
|
const { send } = useApi({
|
||||||
'message:message'(data: IMessage) {
|
'message:message'(data: IMessage) {
|
||||||
|
|
@ -68,8 +72,8 @@ export default () => {
|
||||||
height: '100%',
|
height: '100%',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
display: 'grid',
|
display: 'grid',
|
||||||
gridTemplateColumns: '1fr 64px',
|
gridTemplateColumns: `1fr ${CHATBOX_SIZE}px`,
|
||||||
gridTemplateRows: '1fr 64px',
|
gridTemplateRows: `1fr ${CHATBOX_SIZE}px`,
|
||||||
gridTemplateAreas: '"content content" "message send"',
|
gridTemplateAreas: '"content content" "message send"',
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|
@ -77,6 +81,7 @@ export default () => {
|
||||||
// borderBottom: '1px solid #bd93f9',
|
// borderBottom: '1px solid #bd93f9',
|
||||||
gridArea: 'content',
|
gridArea: 'content',
|
||||||
position: 'relative',
|
position: 'relative',
|
||||||
|
// borderBottom: '1px solid white'
|
||||||
}}>
|
}}>
|
||||||
<div style={{
|
<div style={{
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
|
|
@ -91,9 +96,9 @@ export default () => {
|
||||||
<div onClick={() => {
|
<div onClick={() => {
|
||||||
textBoxRef.current?.focus();
|
textBoxRef.current?.focus();
|
||||||
}}style={{
|
}}style={{
|
||||||
margin: '8px',
|
margin: PADDING + 'px',
|
||||||
marginRight: '3px',
|
marginRight: '0px',
|
||||||
borderRadius: '8px',
|
borderRadius: ((CHATBOX_SIZE - PADDING*2) / 2) + 'px',
|
||||||
background: '#343746',
|
background: '#343746',
|
||||||
gridArea: 'message',
|
gridArea: 'message',
|
||||||
display: 'grid',
|
display: 'grid',
|
||||||
|
|
@ -112,9 +117,11 @@ export default () => {
|
||||||
background: 'inherit',
|
background: 'inherit',
|
||||||
outline: 'none',
|
outline: 'none',
|
||||||
boxSizing: 'border-box',
|
boxSizing: 'border-box',
|
||||||
borderRadius: '8px',
|
// borderRadius: '8px',
|
||||||
|
// borderRadius: '50%',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
resize: 'none',
|
resize: 'none',
|
||||||
|
// border: '1px solid white',
|
||||||
}}
|
}}
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -128,14 +135,14 @@ export default () => {
|
||||||
background: '#bd93f9',
|
background: '#bd93f9',
|
||||||
width: '100%',
|
width: '100%',
|
||||||
height: '100%',
|
height: '100%',
|
||||||
// borderRadius: '50%',
|
borderRadius: '50%',
|
||||||
borderRadius: '8px',
|
// borderRadius: '8px',
|
||||||
cursor: 'pointer',
|
cursor: 'pointer',
|
||||||
display: 'grid',
|
display: 'grid',
|
||||||
placeItems: 'center center',
|
placeItems: 'center center',
|
||||||
fontSize: '32px',
|
fontSize: '32px',
|
||||||
}}>
|
}}>
|
||||||
|
<MdSend></MdSend>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
import { useContext, useEffect, useState } from "react";
|
||||||
|
import { ClientIdContext, HomeServerContext } from "./App";
|
||||||
|
import QR from 'qrcode';
|
||||||
|
|
||||||
|
export default function() {
|
||||||
|
const { homeServer } = useContext(HomeServerContext);
|
||||||
|
const { clientId } = useContext(ClientIdContext);
|
||||||
|
const [qr, setQr] = useState<string | null>(null);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
(async () => {
|
||||||
|
setQr(await QR.toDataURL(
|
||||||
|
'loginv1|' + homeServer + '|' + clientId
|
||||||
|
));
|
||||||
|
})()
|
||||||
|
}, [clientId, homeServer])
|
||||||
|
|
||||||
|
return <img src={qr ?? undefined} />
|
||||||
|
}
|
||||||
|
|
@ -37,7 +37,7 @@ export function Message({
|
||||||
}}>
|
}}>
|
||||||
<TimeAgo
|
<TimeAgo
|
||||||
date={message.timestamp}
|
date={message.timestamp}
|
||||||
formatter={(t, u) => u === 'second' ? 'Just Now' : ('' + t + u[0])}
|
formatter={(t, u) => u === 'second' ? 'Now' : ('' + t + u[0])}
|
||||||
></TimeAgo>
|
></TimeAgo>
|
||||||
</span>
|
</span>
|
||||||
<span style={{
|
<span style={{
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,12 @@ import {
|
||||||
useRef,
|
useRef,
|
||||||
useState,
|
useState,
|
||||||
} from 'react';
|
} from 'react';
|
||||||
import { clientIdContext } from './App';
|
import { ClientIdContext } from './App';
|
||||||
import { useApi } from '../lib/useApi';
|
import { useApi } from '../lib/useApi';
|
||||||
|
|
||||||
|
|
||||||
export default function NameTextbox() {
|
export default function NameTextbox() {
|
||||||
const clientId = useContext(clientIdContext);
|
const { clientId } = useContext(ClientIdContext);
|
||||||
const [name, setName] = useState<string | null>(null);
|
const [name, setName] = useState<string | null>(null);
|
||||||
const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null);
|
const [inputElement, setInputElement] = useState<HTMLInputElement | null>(null);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { useCallback, useContext, useRef } from "react"
|
||||||
|
import { ClientIdContext, HomeServerContext, TransparencyContext } from "./App"
|
||||||
|
|
||||||
|
export default function NewAccount() {
|
||||||
|
|
||||||
|
const [data, setData] = useState('');
|
||||||
|
const [scanning, setScanning] = useState(false);
|
||||||
|
|
||||||
|
const inputRef = useRef<HTMLInputElement>(null);
|
||||||
|
const { setHomeServer } = useContext(HomeServerContext);
|
||||||
|
const { setClientId } = useContext(ClientIdContext);
|
||||||
|
|
||||||
|
const setTransparent = useContext(TransparencyContext);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setTransparent(scanning);
|
||||||
|
}, [scanning, setTransparent]);
|
||||||
|
|
||||||
|
const go = useCallback(() => {
|
||||||
|
if(inputRef.current === null) return;
|
||||||
|
setHomeServer(inputRef.current.value)
|
||||||
|
}, [HomeServerContext]);
|
||||||
|
|
||||||
|
const scanQr = useCallback(() => {
|
||||||
|
//@ts-ignore
|
||||||
|
window.QRScanner.prepare((err: any, status: any) => {
|
||||||
|
if(!err && status.authorized) {
|
||||||
|
setScanning(true);
|
||||||
|
//@ts-ignore
|
||||||
|
window.QRScanner.hide();
|
||||||
|
//@ts-ignore
|
||||||
|
window.QRScanner.scan((err, text) => {
|
||||||
|
if (err) return alert(err);
|
||||||
|
// alert(text);
|
||||||
|
setData(text);
|
||||||
|
setScanning(false);
|
||||||
|
//@ts-ignore
|
||||||
|
window.QRScanner.show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [data]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// this avoids a timing issue whereby the component
|
||||||
|
// gets removed before it has a chance to clean up
|
||||||
|
// its setting of transparency...
|
||||||
|
if(scanning) return;
|
||||||
|
if(!data) return;
|
||||||
|
const [action, homeServer, clientId] = data.split('|');
|
||||||
|
switch(action) {
|
||||||
|
case 'loginv1': {
|
||||||
|
setHomeServer(homeServer);
|
||||||
|
setClientId(clientId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [data, scanning])
|
||||||
|
|
||||||
|
return <div style={{
|
||||||
|
display: 'grid',
|
||||||
|
placeContent: 'center center',
|
||||||
|
height: '100%',
|
||||||
|
}}>
|
||||||
|
Create New Account!! <br />
|
||||||
|
Enter Home Server URL <br />
|
||||||
|
<input defaultValue="wss://dev.valnet.xyz" ref={inputRef}></input> <br />
|
||||||
|
<button onClick={go}> GO </button> <br />
|
||||||
|
<br />
|
||||||
|
or scan a QR! <br />
|
||||||
|
<button onClick={scanQr}>SCAN</button><br></br>
|
||||||
|
<pre>
|
||||||
|
{data}
|
||||||
|
{scanning ? 'SCANNING' : 'NOT SCANNING'}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
@ -40,7 +40,9 @@ const config = {
|
||||||
environment: 'happy-dom',
|
environment: 'happy-dom',
|
||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
react(),
|
react({
|
||||||
|
fastRefresh: false
|
||||||
|
}),
|
||||||
renderer.vite({
|
renderer.vite({
|
||||||
preloadEntry: join(PACKAGE_ROOT, '../preload/src/index.ts'),
|
preloadEntry: join(PACKAGE_ROOT, '../preload/src/index.ts'),
|
||||||
}),
|
}),
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,12 @@ files.forEach(file => {
|
||||||
copyFileSync(resolve('./packages/renderer/dist/', file), './cordova/www/app.js');
|
copyFileSync(resolve('./packages/renderer/dist/', file), './cordova/www/app.js');
|
||||||
});
|
});
|
||||||
|
|
||||||
execSync('npm run cordova run', {
|
try {
|
||||||
cwd: resolve('./cordova'),
|
const proc = execSync('npm run cordova run', {
|
||||||
});
|
cwd: resolve('./cordova'),
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
console.log(e.output.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// console.log(proc.toString());
|
||||||
Reference in New Issue