From 109d51115bc560dc8eeba23ac33b7125b59d5c2a Mon Sep 17 00:00:00 2001 From: primakov Date: Sun, 16 Apr 2023 12:18:29 +0300 Subject: [PATCH] all other staff --- package-lock.json | 428 ++++++++++++++++-- package.json | 5 +- src/app.tsx | 13 +- .../503702d8-c8e2-4dd9-b05b-3c12e282d1cb.png | Bin 90010 -> 0 bytes src/assets/back.svg | 11 - src/assets/fullscreen.svg | 3 - src/assets/logo-short.svg | 57 --- src/assets/logo-white.svg | 57 --- src/assets/logo.svg | 57 --- src/components/keyboard.style.ts | 66 --- src/components/keyboard.tsx | 36 -- src/dashboard.tsx | 29 ++ src/pages/Journal.tsx | 78 ++++ src/pages/Lesson.tsx | 44 ++ src/pages/UserPage.tsx | 72 +++ src/pages/main.tsx | 236 +--------- src/pages/style.ts | 299 +----------- src/socket.ts | 17 +- 18 files changed, 681 insertions(+), 827 deletions(-) delete mode 100644 src/assets/503702d8-c8e2-4dd9-b05b-3c12e282d1cb.png delete mode 100644 src/assets/back.svg delete mode 100644 src/assets/fullscreen.svg delete mode 100644 src/assets/logo-short.svg delete mode 100644 src/assets/logo-white.svg delete mode 100644 src/assets/logo.svg delete mode 100644 src/components/keyboard.style.ts delete mode 100644 src/components/keyboard.tsx create mode 100644 src/dashboard.tsx create mode 100644 src/pages/Journal.tsx create mode 100644 src/pages/Lesson.tsx create mode 100644 src/pages/UserPage.tsx diff --git a/package-lock.json b/package-lock.json index 4e35f59..3be6627 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,10 +13,13 @@ "@emotion/styled": "^11.10.5", "@types/react": "^17.0.52", "@types/react-dom": "^17.0.18", + "dayjs": "^1.11.7", "express": "^4.18.2", + "qrcode": "^1.5.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-helmet": "^6.1.0", + "react-router-dom": "^6.10.0", "socket.io-client": "^4.5.4", "typescript": "^4.9.3" }, @@ -2160,6 +2163,14 @@ "node": ">= 8" } }, + "node_modules/@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==", + "engines": { + "node": ">=14" + } + }, "node_modules/@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -2602,7 +2613,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2611,7 +2621,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2989,6 +2998,14 @@ "node": ">=6" } }, + "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/caniuse-lite": { "version": "1.0.30001434", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", @@ -3143,6 +3160,16 @@ "webpack": "*" } }, + "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/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -3174,7 +3201,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3185,8 +3211,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.19", @@ -3438,6 +3463,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3454,6 +3484,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/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -3580,6 +3618,11 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -3614,6 +3657,11 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", @@ -3623,6 +3671,11 @@ "node": ">= 4" } }, + "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -4291,7 +4344,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4304,7 +4356,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -4316,7 +4367,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -4331,7 +4381,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -4656,6 +4705,14 @@ "node": ">=6.9.0" } }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", @@ -5224,6 +5281,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6012,7 +6077,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -6066,7 +6130,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -6245,6 +6308,14 @@ "node": ">=4" } }, + "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/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -6409,6 +6480,23 @@ "node": ">=6" } }, + "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/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -6809,6 +6897,36 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, + "node_modules/react-router": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", + "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "dependencies": { + "@remix-run/router": "1.5.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", + "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "dependencies": { + "@remix-run/router": "1.5.0", + "react-router": "6.10.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-side-effect": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", @@ -6972,6 +7090,19 @@ "node": ">=0.10" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "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": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -7202,6 +7333,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -7727,11 +7863,34 @@ "node": ">= 0.8" } }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.0" }, @@ -8527,6 +8686,11 @@ "node": ">= 8" } }, + "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/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -8548,6 +8712,19 @@ "microevent.ts": "~0.1.1" } }, + "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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -8582,6 +8759,11 @@ "node": ">=0.4.0" } }, + "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/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -8596,6 +8778,39 @@ "node": ">= 6" } }, + "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/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/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -10124,6 +10339,11 @@ "fastq": "^1.6.0" } }, + "@remix-run/router": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.5.0.tgz", + "integrity": "sha512-bkUDCp8o1MvFO+qxkODcbhSqRa6P2GXgrGZVpt0dCXNW2HCSCqYI0ZoAqEOSAjRWmmlKcYgFvN4B4S+zo/f8kg==" + }, "@socket.io/component-emitter": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", @@ -10525,14 +10745,12 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -10811,6 +11029,11 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, "caniuse-lite": { "version": "1.0.30001434", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", @@ -10922,6 +11145,16 @@ "del": "^4.1.1" } }, + "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" + } + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -10947,7 +11180,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -10955,8 +11187,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "colorette": { "version": "2.0.19", @@ -11142,6 +11373,11 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, + "dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -11150,6 +11386,11 @@ "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==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -11250,6 +11491,11 @@ } } }, + "dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -11281,12 +11527,22 @@ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, + "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": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -11834,7 +12090,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -11844,7 +12099,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -11853,7 +12107,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -11862,7 +12115,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -12116,6 +12368,11 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", @@ -12547,6 +12804,11 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -13121,8 +13383,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "parent-module": { "version": "1.0.1", @@ -13157,8 +13418,7 @@ "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==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -13288,6 +13548,11 @@ } } }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -13398,6 +13663,17 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "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" + } + }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -13699,6 +13975,23 @@ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", "dev": true }, + "react-router": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.10.0.tgz", + "integrity": "sha512-Nrg0BWpQqrC3ZFFkyewrflCud9dio9ME3ojHCF/WLsprJVzkq3q3UeEhMCAW1dobjeGbWgjNn/PVF6m46ANxXQ==", + "requires": { + "@remix-run/router": "1.5.0" + } + }, + "react-router-dom": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.10.0.tgz", + "integrity": "sha512-E5dfxRPuXKJqzwSe/qGcqdwa18QiWC6f3H3cWXM24qj4N0/beCIf/CWTipop2xm7mR0RCS99NnaqPNjHtrAzCg==", + "requires": { + "@remix-run/router": "1.5.0", + "react-router": "6.10.0" + } + }, "react-side-effect": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", @@ -13831,6 +14124,16 @@ "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "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": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -13998,6 +14301,11 @@ "send": "0.18.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -14425,11 +14733,30 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, "requires": { "ansi-regex": "^5.0.0" } @@ -14971,6 +15298,11 @@ "isexe": "^2.0.0" } }, + "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==" + }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -14992,6 +15324,16 @@ "microevent.ts": "~0.1.1" } }, + "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" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -15009,6 +15351,11 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==" }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -15020,6 +15367,33 @@ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, + "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" + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 1d350c0..1e62d27 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "./src/index.tsx", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "start": "ijl-cli --server --port=8099 --with-open-browser", + "start": "ijl-cli --server --port=8099", "build": "npm run clean && ijl-cli --build --dev", "build:prod": "npm run clean && ijl-cli --build", "clean": "rimraf dist" @@ -25,10 +25,13 @@ "@emotion/styled": "^11.10.5", "@types/react": "^17.0.52", "@types/react-dom": "^17.0.18", + "dayjs": "^1.11.7", "express": "^4.18.2", + "qrcode": "^1.5.1", "react": "^17.0.2", "react-dom": "^17.0.2", "react-helmet": "^6.1.0", + "react-router-dom": "^6.10.0", "socket.io-client": "^4.5.4", "typescript": "^4.9.3" } diff --git a/src/app.tsx b/src/app.tsx index 2c137eb..23ae77e 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -1,12 +1,17 @@ import React from 'react'; import { Helmet } from 'react-helmet'; import { Global, css } from '@emotion/react' +import { BrowserRouter } from 'react-router-dom'; +import ruLocale from 'dayjs/locale/ru'; +import dayjs from 'dayjs'; -import { MainPage } from './pages/main'; +import { Dashboard } from './dashboard'; + +dayjs.locale('ru', ruLocale); const App = () => { return( - <> + @@ -58,8 +63,8 @@ const App = () => { } `} /> - - + + ) } diff --git a/src/assets/503702d8-c8e2-4dd9-b05b-3c12e282d1cb.png b/src/assets/503702d8-c8e2-4dd9-b05b-3c12e282d1cb.png deleted file mode 100644 index c8e6d68b6c4276d2d3bc0defe4309a6d8a828dc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90010 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 diff --git a/src/assets/back.svg b/src/assets/back.svg deleted file mode 100644 index 6d6fc25..0000000 --- a/src/assets/back.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - diff --git a/src/assets/fullscreen.svg b/src/assets/fullscreen.svg deleted file mode 100644 index 98641b3..0000000 --- a/src/assets/fullscreen.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/assets/logo-short.svg b/src/assets/logo-short.svg deleted file mode 100644 index 563c229..0000000 --- a/src/assets/logo-short.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/logo-white.svg b/src/assets/logo-white.svg deleted file mode 100644 index 145bf6a..0000000 --- a/src/assets/logo-white.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/logo.svg b/src/assets/logo.svg deleted file mode 100644 index 86ed112..0000000 --- a/src/assets/logo.svg +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/components/keyboard.style.ts b/src/components/keyboard.style.ts deleted file mode 100644 index 0b37560..0000000 --- a/src/components/keyboard.style.ts +++ /dev/null @@ -1,66 +0,0 @@ -import styled from '@emotion/styled'; -import { keyframes } from '@emotion/react'; - -const reveal = keyframes` - from { - bottom: -600px; - } - to { - bottom: 0; - } -`; - -export const Wrapper = styled.div` - position: absolute; - bottom: 0; - left: auto; - right: auto; - padding: 12px; - background-color: #96e8c229; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - animation: ${reveal} .5s; - animation-timing-function: cubic-bezier(0, 0.39, 0.29, 1.02); - - @media screen and (max-width: 600px) { - padding: 6px; - } -`; - -export const KeyRow = styled.div` - display: flex; -`; - -export const BackspaceBtn = styled.img` - width: 60%; -`; - -export const Key = styled.button` - margin: 4px; - width: 8vw; - max-width: 100px; - height: 7vw; - max-height: 100px; - min-height: 40px; - font-size: 24px; - display: flex; - align-items: center; - justify-content: center; - color: #829cdb; - border-radius: 6px; - background-color: #fff; - border: none; - box-shadow: 1px 2px 6px #5c7cc9; - - @media screen and (max-width: 600px) { - margin: 2px; - } - - &:active { - background: #f5f5f5; - box-shadow: inset 1px 2px 6px #5c7cc9, - 0px 6px 16px #5c7cc9; - } -`; diff --git a/src/components/keyboard.tsx b/src/components/keyboard.tsx deleted file mode 100644 index b3792b5..0000000 --- a/src/components/keyboard.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import back from '../assets/back.svg'; - -import { - Wrapper, - Key, - KeyRow, - BackspaceBtn, -} from './keyboard.style'; - -const rows = [ - ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'], - ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'], - ['z', 'x', 'c', 'v', 'b', 'n', 'm', ] -] - -export const Keyboard = ({ onChange }) => { - const handleClick = (key) => () => { - if (typeof key === 'string') { - onChange(v => v + key.toUpperCase()); - } else { - onChange(v => v.slice(0, -1)) - } - } - return ( - - {rows.map((row, index) => ( - - {row.map(key => ( - {key} - ))} - - ))} - - ) -} \ No newline at end of file diff --git a/src/dashboard.tsx b/src/dashboard.tsx new file mode 100644 index 0000000..08d85d4 --- /dev/null +++ b/src/dashboard.tsx @@ -0,0 +1,29 @@ +import React, { useEffect } from 'react'; +import { + Routes, + Route, + useNavigate +} from 'react-router-dom'; + +import { MainPage } from './pages/main'; +import { Lesson } from './pages/Lesson'; +import { UserPage } from './pages/UserPage'; + +const Redirect = ({ path }) => { + const navigate = useNavigate(); + + useEffect(() => { + navigate(path); + }, []); + + return null; +} + +export const Dashboard = () => ( + + } /> + } /> + } /> + } /> + +) diff --git a/src/pages/Journal.tsx b/src/pages/Journal.tsx new file mode 100644 index 0000000..f8d0a3d --- /dev/null +++ b/src/pages/Journal.tsx @@ -0,0 +1,78 @@ +import React, { useCallback, useEffect, useRef, useState } from 'react'; +import dayjs from 'dayjs'; +import { Link } from 'react-router-dom' + +import { + ArrowImg, + IconButton, + InputElement, + InputLabel, + InputWrapper, + StartWrapper, + LessonItem, + Lessonname, +} from './style'; + +import arrow from '../assets/36-arrow-right.svg'; +import { connect, getSocket } from "../socket"; + +export const Journal = () => { + const [lessons, setLessons] = useState(null); + + useEffect(() => { + connect(); + const socket = getSocket(); + socket.on('lessons', data => { + setLessons(data) + }) + }, []); + + const [value, setValue] = useState(''); + const handleChange = useCallback(event => { + setValue(event.target.value.toUpperCase()) + }, [setValue]); + const inputRef = useRef(null); + + const handleSubmit = useCallback((event) => { + event.preventDefault(); + + const socket = getSocket(); + socket.emit('create-lesson', { lessonName: value }); + setValue('') + }, [value]) + + return ( + +
+ + + Название новой лекции: + + + + + + +
+
    + {lessons?.map((lesson) => ( + + + {lesson.name} + {dayjs(lesson.ts).format('DD MMMM YYYYг.')} + + + ))} +
+
+ ) +}; diff --git a/src/pages/Lesson.tsx b/src/pages/Lesson.tsx new file mode 100644 index 0000000..e8d93e6 --- /dev/null +++ b/src/pages/Lesson.tsx @@ -0,0 +1,44 @@ +import React, { useEffect, useState, useRef } from 'react'; +import { useParams } from 'react-router-dom'; +import dayjs from 'dayjs'; +import QRCode from 'qrcode'; + +import { connect, getSocket } from '../socket'; +import { MainWrapper, StartWrapper, QRCanvas, LessonItem, Lessonname } from './style'; + +export const Lesson = () => { + const { lessonId } = useParams(); + const canvRef = useRef(null); + const [lesson, setLesson] = useState(null); + useEffect(() => { + connect(); + const socket = getSocket(); + socket.on('lessons', data => { + setLesson(data.find(lesson => lesson.id === lessonId)); + }) + + QRCode.toCanvas(canvRef.current, `${location.origin}/journal/u/${lessonId}` , function (error) { + if (error) console.error(error) + console.log('success!'); + }) + }, []); + + return ( + + +

Lesson - {lesson?.name}

+ {dayjs(lesson?.ts).format('DD MMMM YYYYг.')} + + + +
    + {lesson?.padavans?.map((padavan, index) => ( + + {padavan.name} + + ))} +
+
+
+ ) +} diff --git a/src/pages/UserPage.tsx b/src/pages/UserPage.tsx new file mode 100644 index 0000000..ded37df --- /dev/null +++ b/src/pages/UserPage.tsx @@ -0,0 +1,72 @@ +import React, { useCallback, useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; + +import { connect, getSocket } from '../socket'; +import { ArrowImg, IconButton, InputElement, InputLabel, InputWrapper, MainWrapper, StartWrapper } from './style'; +import arrow from '../assets/36-arrow-right.svg'; + +export const UserPage = () => { + const [socketId, setSocketId] = useState(null); + const { lessonId } = useParams(); + useEffect(() => { + connect(); + const socket = getSocket(); + socket.on('connect', () => { + const id = localStorage.getItem('socketId'); + if (!id) { + localStorage.setItem('socketId', socket.id); + setSocketId(socket.id); + } else { + setSocketId(id); + } + + const name = localStorage.getItem('name'); + if (name) { + const socket = getSocket(); + socket.emit('add', { socketId: id || socket.id, name, lessonid: lessonId }); + } + }) + socket.on('lessons', data => { + // setLessons(data) + }) + }, []); + + const [value, setValue] = useState(localStorage.getItem('name') || ''); + const handleChange = useCallback(event => { + setValue(event.target.value.toUpperCase()) + }, [setValue]); + + const handleSubmit = useCallback((event) => { + event.preventDefault(); + + const socket = getSocket(); + localStorage.setItem('name', value) + socket.emit('add', { socketId, name: value, lessonid: lessonId }); + }, [value]) + + return ( + + +
+ + + Как вас зовут: + + + + + + +
+
+
+ ) +} diff --git a/src/pages/main.tsx b/src/pages/main.tsx index 9251b1e..97d9ea5 100644 --- a/src/pages/main.tsx +++ b/src/pages/main.tsx @@ -1,41 +1,16 @@ -import React, {useState, useCallback, useRef, useMemo} from 'react'; -import { getFeatures } from '@ijl/cli'; +import React, {useState, useCallback, useRef, useEffect} from 'react'; -import logo from '../assets/logo.svg'; import arrow from '../assets/36-arrow-right.svg'; -import fullScreen from '../assets/fullscreen.svg'; -import logoShort from '../assets/logo-short.svg'; - -import { Keyboard } from '../components/keyboard'; import { MainWrapper, InputElement, InputLabel, InputWrapper, - LogoImg, ArrowImg, IconButton, - StartWrapper, - StartI, - StartInput, - StartLabel, - HalfLine, - HideGroup, - Circle, - LineSvg, - Svg, - CircleDiv, - FullScreenButton, - InputHolder, - Blow, - BigLogo, } from './style'; -import { socket } from "../socket"; - -const keyboardFeature = getFeatures('hub-video-start')?.keyboard; -const fullScreenFeature = getFeatures('hub-video-start')?.fullScreen; -const blowAnimFeature = getFeatures('hub-video-start')?.blowAnim; +import { Journal } from './Journal'; const Input = ({ onStart }) => { const [value, setValue] = useState(''); @@ -45,9 +20,18 @@ const Input = ({ onStart }) => { }, [setValue]); const inputRef = useRef(null); + useEffect(() => { + const pass = localStorage.getItem('pass') + + if (pass) { + onStart(); + } + }, []); + const handleSubmit = useCallback((event) => { event.preventDefault(); - if (value === 'SBER') { + localStorage.setItem('pass', 'true') + if (value === 'OYB0Y') { onStart() } }, [value]) @@ -59,219 +43,33 @@ const Input = ({ onStart }) => { - Ввод: + Введите пароль: setInfocuse(true)} ref={inputRef} - onClick={(event) => { - if (keyboardFeature) { - event.preventDefault(); - event.stopPropagation(); - inputRef.current.blur(); - } - }} id="input" + type="password" autoComplete="off" /> - {keyboardFeature && setInfocuse(true)} />} - {keyboardFeature && inFocuse && ( - - )} ) } -export const Line = ({ hide, reverse, speed, delay, radius, progress, width, color }) => ( - - - - - -) - -Line.defaultProps = { - reverse: false -} - -const Start = () => { - const [sended, setSend] = useState(false); - - const handleCheck = () => { - if (!sended) { - socket.emit('play') - setSend(true) - } - } - - return ( - - {sended && blowAnimFeature && ( - <> - - - - - - - - )} - {/* - - - - - - - - */} - - - - - - - - - - СТАРТ - - - - ) -} - export const MainPage = () => { - const [showStart, setShowStart] = useState(false); - const [isFull, setFull] = useState(false); - - const handleFullScreen = useCallback(() => { - const elem = document.documentElement; - if (elem.requestFullscreen) { - elem.requestFullscreen(); - } else if (elem.webkitRequestFullscreen) { /* Safari */ - elem.webkitRequestFullscreen(); - } else if (elem.msRequestFullscreen) { /* IE11 */ - elem.msRequestFullscreen(); - } - setFull(true); - }, []); + const [shoList, setShoList] = useState(false); return ( - {fullScreenFeature && !isFull && ( - - - - )} - - {/* */} - {!showStart && setShowStart(true)} />} - {showStart && } + {!shoList && setShoList(true)} />} + {shoList && } ); }; diff --git a/src/pages/style.ts b/src/pages/style.ts index 631c8d5..a3ef198 100644 --- a/src/pages/style.ts +++ b/src/pages/style.ts @@ -33,12 +33,6 @@ export const InputElement = styled.input` max-width: 90vw; `; -export const LogoImg = styled.img` - position: absolute; - top: 24px; - left: 24px; -`; - export const ArrowImg = styled.img` width: 48px; height: 48px; @@ -65,177 +59,12 @@ const reveal = keyframes` export const StartWrapper = styled.div` animation: ${reveal} 1s ease forwards; /* box-shadow: 0 -2px 5px rgba(255,255,255,0.05), 0 2px 5px rgba(255,255,255,0.1); */ - width: 350px; - height: 350px; + width: 650px; + height: calc(100vh - 300px); /* margin: 60px auto; */ position: relative; `; -export const StartLabel = styled.label` - display: block; - width: 100%; - height: 100%; - border-radius: 50%; - background: #b25244; - /* background: linear-gradient(#f7f2f6, #b2ac9e); */ - /* background: linear-gradient(#b52a2a, #e10ff1); */ - background: linear-gradient(rgb(255 251 251), rgb(140 219 35)); - position: relative; - color: #a5a39d; - font-size: 70px; - text-align: center; - line-height: 150px; - transition: all 0.3s ease-out; - text-shadow: 0 2px 1px rgba(0,0,0,0.25); - z-index: 1; - box-shadow: - inset 0 2px 3px rgba(255,255,255,0.13), - 0 5px 8px rgba(0,0,0,0.3), - 0 10px 10px 4px rgba(0,0,0,0.3); - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - &::after { - content: ""; - position: absolute; - left: -20px; - right: -20px; - top: -20px; - bottom: -20px; - z-index: -2; - border-radius: inherit; - box-shadow: - inset 0 1px 0 rgba(255,255,255,0.1), - 0 1px 2px rgba(0,0,0,0.3), - 0 0 10px rgba(0,0,0,0.15); - } - - &::before { - content: ""; - position: absolute; - left: -10px; - right: -10px; - top: -10px; - bottom: -10px; - z-index: -1; - border-radius: inherit; - box-shadow: inset 0 10px 10px rgba(0,0,0,0.13); - -webkit-filter:blur(1px); - filter: blur(1px); - } -`; - -export const StartInput = styled.input` - display: block; - width: 100%; - height: 100%; - opacity: 0; - z-index: 100; - position: absolute; - cursor: pointer; - -webkit-tap-highlight-color: transparent; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - - &:checked ~ label { - box-shadow: - inset 0 2px 3px rgba(255,255,255,0.13), - 0 5px 8px rgba(0,0,0,0.35), - 0 3px 10px 4px rgba(0,0,0,0.2); - color: #9abb82; - } -`; - -export const StartI = styled.i` - content: ""; - display: flex; - position: absolute; - width: 70%; - height: 70%; - left: 50%; - top: 50%; - z-index: 1; - color: white; - margin: -35% 0 0 -35%; - border-radius: 50%; - background: linear-gradient(#22a037, #98e221); - box-shadow: - 0 -2px 5px rgba(255,255,255,0.05), - 0 2px 5px rgba(255,255,255,0.1); - -webkit-filter:blur(1px); - filter: blur(1px); - align-items: center; - justify-content: center; - font-style: normal; -`; - -// const LineRotation = keyframes -//` -// 0% { -// transform: translate(-50%, -100%) rotate(0); -// } - -// 100% { -// transform: translate(-50%, -100%) rotate(1turn); -// } -// `; - - -// type LineProps = { -// radius: number; -// width: number; - -// } - -// export const HalfLine = styled.div(({ -// radius, -// width, -// }) =>css` -// transform-origin: 50% 100%; -// animation: ${LineRotation} 3s linear infinite; -// width: ${radius * 2}px; -// height: ${radius}px; -// border-top-left-radius: ${radius}px; -// border-top-right-radius: ${radius}px; -// border: ${width}px solid gray; -// border-bottom: 0; -// position: absolute; -// top: 50%; -// left: 50%; -// transform: translate(-50%, -100%); -// `); - -const LineRotation = keyframes` - 0% { - transform: translate(-50%, -50%) rotate(0); - } - - 100% { - transform: translate(-50%, -50%) rotate(1turn); - } -`; - -const LineHideAnimation = keyframes` - 0% { - /* transform: scale(1); */ - opacity: 1; - } - - 100% { - /* transform: scale(0); */ - opacity: 0; - } -`; - export const Svg = styled.svg` position: absolute; top: 50%; @@ -245,120 +74,20 @@ export const Svg = styled.svg` /* stroke-dasharray: 600; */ `; -export const CircleDiv = styled.div` - width: 700px; - height: 700px; - position: absolute; - top: 50%; - left: 50%; - transform-origin: 50% 50%; - transform: translate(-50%, -50%) rotate(270deg); - border-radius: 50%; - background: radial-gradient( - farthest-side at bottom center, - rgba(35, 235, 4, 0.709), - rgba(255, 255, 255, 0) 65% - ), - radial-gradient( - farthest-corner at bottom left, - rgba(244, 244, 8, 0.9), - rgba(255, 255, 255, 0) 40% - ), - radial-gradient( - farthest-side at bottom right, - rgba(0, 195, 255, 0.648), - rgba(255, 255, 255, 0) 65% - ); +export const LessonItem = styled.li` + list-style: none; + background-color: #ffffff; + padding: 16px; + border-radius: 12px; + box-shadow: 2px 2px 6px #0000005c; + margin-bottom: 12px; `; -export const LineSvg = styled.svg<{ animationSpeed: number; delay: number; reverse: boolean }>` - animation: ${LineRotation} ${({ animationSpeed }) => animationSpeed}s linear infinite${({ reverse }) => reverse ? ' reverse' : ''}; - animation-delay: -${({ delay }) => delay}s; - position: absolute; - top: 50%; - left: 50%; - transform-origin: 50% 50%; - transform: translate(-50%, -50%); - z-index: 2; +export const Lessonname = styled.span` + display: inline-box; + margin-right: 12px; `; -export const HideGroup = styled.g<{ hide: boolean; delay: number; }>` - animation: ${({ hide }) => hide ? css`${LineHideAnimation} 3s ease-in forwards`: ''}; - transform-origin: 50% 50%; - animation-delay: ${({ delay }) => delay / 10}s; -`; -export const Circle = styled.circle<{ circumference: number; percent: number }>` - transition: 0.35s stroke-dashoffset; - transform: rotate(-90deg); - transform-origin: 50% 50%; - stroke-dasharray: ${({ circumference }) => `${circumference} ${circumference}`}; - stroke-dashoffset: ${({ circumference, percent }) => circumference - percent / 100 * circumference}; -`; - -export const FullScreenButton = styled.button` - padding: 12px; - position: absolute; - top: 50px; - right: 50px; - border: none; - background-color: rgba(0, 0, 0, .07); -`; - -export const InputHolder = styled.div` - background-color: rgba(0, 0, 0, .0); - width: calc(100% - 70px); - height: 60px; - right: 70px; - top: 12px; - left: 12px; - position: absolute; - - @media screen and (max-width: 600px) { - width: 100%; - } -`; - -const blowAnim = keyframes` - to { - width: 200vw; - height: 200vw; - } -`; - -type BlowProps = { - delay: number; - color: string; -} - -export const Blow = styled.div` - z-index: 10; - border-radius: 50%; - position: absolute; - left: 50%; - top: 50%; - width: 0; - height: 0%; - background-color: ${({ color }) => color}; - animation: ${blowAnim} 1s ease-out forwards; - animation-delay: ${({ delay }) => delay}s; - transform: translate(-50%, -50%); -`; - -const blowAnimShort = keyframes` - to { - width: 50vw; - height: 50vw; - } -`; - -export const BigLogo = styled.img` - z-index: 10; - position: absolute; - left: 50%; - top: 50%; - width: 0; - height: 0; - animation: ${blowAnimShort} 2s ease-out forwards; - animation-delay: .7s; - transform: translate(-50%, -50%); +export const QRCanvas = styled.canvas` + display: block; `; diff --git a/src/socket.ts b/src/socket.ts index 0166888..24bbd81 100644 --- a/src/socket.ts +++ b/src/socket.ts @@ -1,8 +1,17 @@ import { getConfigValue } from "@ijl/cli"; import { io } from "socket.io-client"; -export const socket = io(getConfigValue('journal.socket.url'), { path: getConfigValue('journal.socket.path')}); -socket.on("connect", () => { - console.log('Socket connected', socket.id) -}) +let socket = null; + +export const getSocket = () => socket; + +export const connect = () => { + socket = io(getConfigValue('journal.socket.url') + '/lessons', { path: getConfigValue('journal.socket.path')}); + socket.on("connect", () => { + console.log('Socket connected', socket.id) + }) + +} + +