| @@ -1,38 +1,44 @@ | |||
| 404.html,1625735851483,daa499dd96d8229e73235345702ba32f0793f0c8e5c0d30e40e37a5872be57aa | |||
| asset-manifest.json,1625735154584,e7e65bbe4f970baed02984ef8f12ddcc534e18b09b7f0c1f548febd46cece5bf | |||
| index.html,1625735154584,b57eb7feb4a8e548e38687d80d2301857752c08538ace3925a740803feaf2e60 | |||
| favicon.ico,499162500000,eae62e993eb980ec8a25058c39d5a51feab118bd2100c4deebb2a9c158ec11f9 | |||
| manifest.json,1625735109662,cf5d3eccd4041bfc0b29e302068b05621d330b7ca972b4255415098312d1a8db | |||
| robots.txt,499162500000,bfe106a3fb878dc83461c86818bf74fc1bdc7f28538ba613cd3e775516ce8b49 | |||
| logo192.png,499162500000,3ee59515172ee198f3be375979df15ac5345183e656720a381b8872b2a39dc8b | |||
| static/js/2.f2c49f19.chunk.js.LICENSE.txt,1625735154584,344f60d92805a3f6078799efe3001c0746af425c166ecf1779b9a58f0ef566af | |||
| static/css/main.c2331756.chunk.css,1625735154582,416e7c45fcb21ea2b434d1a102bb66089f91f088f8d7869c2bdd7ede2c92d266 | |||
| logo512.png,499162500000,ee7e2f3fdb8209c4b6fd7bef6ba50d1b9dba30a25bb5c3126df057e1cb6f5331 | |||
| static/js/3.cb57794e.chunk.js,1625735154584,60de2dd7f15199fe2965e522e52d03e10bb5b50442ecbd5383cf163b56169d41 | |||
| static/css/main.c2331756.chunk.css.map,1625735154584,5a70a5fd98b73bcd7499c2a1c6bb7204a31a95002b9f74b53c893ab06c113f9d | |||
| static/js/3.cb57794e.chunk.js.map,1625735154584,ac8e3493f1d85733cb7c4a0a06252a60309d0110c1836d71a0b2b095c4d26d9c | |||
| static/js/main.91ccfac1.chunk.js,1625735154583,eb3e06874b71fff865234ab59a4b130fac43830a0dffcf912d38d4923f49a2a2 | |||
| static/js/runtime-main.453708b4.js,1625735154583,5ffb3477eee5df188ee85b1115a6dfbe96c74b15304886457e0b5dc2dff127f3 | |||
| static/js/runtime-main.453708b4.js.map,1625735154584,2dd6c3cc8b31001fecef5790c3bf5d4ba67920959507a28c71309bab7ff5de10 | |||
| static/media/activity.3733339a.svg,1625735154580,7f509f05b0d77c25d3f07db4f6166db16b031e5caa5c69959a97ba151fb4998c | |||
| static/media/anamnesis.a641b7e6.svg,1625735154578,2f49a8859f005fc1bde28592099cf18bfc409762709ccdd2de5f89989eed9f72 | |||
| static/media/book-sharp.11c8fa82.svg,1625735154583,9972070f05e15fa2db5c640f4267ccf06500112fecd7cf9ea82440a54164075e | |||
| static/media/bookmark.a2da2096.svg,1625735154580,9b406705f5d944e658cbf998053672cbd348fb46d9433a326fc5d8fc14e89b16 | |||
| static/media/bookshelf.483b2aa4.svg,1625735154580,c280aae70c53ae70c8e36578038a328ac7a030ba9931fb42ea201b3e046fb562 | |||
| static/media/bx-brain.0318e2d4.svg,1625735154581,6ad7f9222269641c5c7d0c273dd726d73cd575bc671a89773e3d4a7e25cf2a77 | |||
| static/media/bx-calendar.1108d675.svg,1625735154580,f288c3ed3312a50d1fdb163ba8b78140e191b06d81bac9853947a97602f4508e | |||
| static/media/bx-search-alt.6aee4585.svg,1625735154580,603550581c70a06e5664ac553d0fc219aafe14e5c94033f29adb736d66b72379 | |||
| static/media/check-circle.c1e8fd45.svg,1625735154580,c730ae96b836b753d2f86436bf6ecd699a7f5def0509a1bb9ad3a3ef90ef2c3a | |||
| static/media/circled.bac31e63.svg,1625735154580,721d1d9a1b5b04c473deb6a5224198ca8c43e3e59c68dc535b7f1018055ab0aa | |||
| static/media/expand.4a4b1ee4.svg,1625735154580,cf40afa575712fa86ae9ebbef98aa8d4b57c97a5b3783aa0169d7e660c5c9c17 | |||
| static/media/home.bb84a97d.svg,1625735154582,6d3e94ae19e370469517160dc45cb896635c1892d5961469ab6e5eccc7e457a7 | |||
| static/media/more-vertical.c6e3fe1e.svg,1625735154583,792da2f0838baeb52067592370b92f656e6578916c8919e3a686c44f14a9333c | |||
| static/media/intern-badge.c818f4cb.svg,1625735154581,8f049889351e35ec360d7cd418d02b5b578287bf6e5527d49f034d66265e72aa | |||
| static/media/plus.8ac59b29.svg,1625735154580,fa6f72790a676cd5239c144de64ef763ff4176d73886884d9969941030771eec | |||
| static/media/readme.81bb4934.svg,1625735154580,87e0a90f1a972cb3b6bf3f84db0c81fb17555e943b3f1fe96092136b17b93f55 | |||
| static/media/stats-chart.c0cc3ef1.svg,1625735154583,ccf5b788671a0a2d19f35844d0ec30dd88224cfd3651da90e79a1fabe1d80e1c | |||
| static/media/time.c96f97a2.svg,1625735154580,5a37df247e69bc2d4f8a0ed1b8efd9551fbd639d1aed6e85582da6bfff6182a8 | |||
| static/media/user-speaker.6817a677.svg,1625735154581,24f8ba4e218fd372cd42531bd46bfbbc03a9ba0ef83efd902e65bb886fb84da5 | |||
| static/js/main.91ccfac1.chunk.js.map,1625735154584,a26fcaf41f0e9c8d2623a52a78986d832c7c33e5f224b1f152ae59527f6587fe | |||
| static/js/2.f2c49f19.chunk.js,1625735154583,691d04a0c237f14bc70ed22eada4e3dde4e753dd7bf302f8a2b31372792112b5 | |||
| static/js/2.f2c49f19.chunk.js.map,1625735154584,50c9075e5ed85bd9588c7d48c503d6a614f43980e99e2bde9973a82e7d5d6724 | |||
| asset-manifest.json,1626794365226,d91f9903ae14aed6ff22f5f45cf15914ccfc6700fc6d7f6427e0426589240ec3 | |||
| index.html,1626794365225,637dea62635534da4191a634336345f56e23f0bf42344e76fd046d4deb55e937 | |||
| favicon.ico,1626794341324,b72f7455f00e4e58792d2bca892abb068e2213838c0316d6b7a0d6d16acd1955 | |||
| manifest.json,1626794341329,9ba0b8957fc9cd6f287f006dff4f3afc528f312295571d004abc874a7b304b10 | |||
| logo512.png,1626794341327,191fc21360b4ccfb1cda11a1efb97f489ed22672ca83f4064316802bbfdd750e | |||
| static/js/2.fe96eeec.chunk.js.LICENSE.txt,1626794365227,bfbf3a4b9e414262e302b9c850733cb7cfafa9577cb62b814d04300a511215fc | |||
| logo192.png,1626794341326,caff018b7f1e8fd481eb1c50d75b0ef236bcd5078b1d15c8bb348453fee30293 | |||
| static/css/main.88a7e5b6.chunk.css,1626794365222,2001d3d6dcac1a6a1f98d4beaa90a6cf321a188f2867beacdd3cfe5ea249944e | |||
| static/js/3.2a971649.chunk.js,1626794365228,5c08d3850f7916057981ca88b25fe6ad2271828427a7315c6e36a12b448d099f | |||
| static/js/3.2a971649.chunk.js.map,1626794365228,079a86bc9477b0a1c6b808d7e77accaeada46621c8bea0d6e4ae5b5be56b6e16 | |||
| robots.txt,1626794341331,391d14b3c2f8c9143a27a28c7399585142228d4d1bdbe2c87ac946de411fa9a2 | |||
| static/js/runtime-main.88e70a30.js,1626794365224,cca7cf118b3460737b0c8fab0945e4b48b9b3bf6993e2e1e307b123205aefc5b | |||
| static/media/activity.3733339a.svg,1626794365218,67be60524bdd174949075ac2c73519261ed65998a49439f0e8ff5a631b68c746 | |||
| static/js/runtime-main.88e70a30.js.map,1626794365228,15ede7cf463dbc025e43cf76df6ae98b4bcff6b00e2853344b049c0187942f9d | |||
| static/media/anamnesis.a641b7e6.svg,1626794365218,24435e79f9fd57f71276508858befb2a77719f416fe7213068aad53b8953cce8 | |||
| static/media/book-sharp.11c8fa82.svg,1626794365222,f67644a183683a63f2d9976e890eb1fb2ad2e97ebb18eb10050342d28b92ed5b | |||
| static/media/bookmark.a2da2096.svg,1626794365220,29c13e1546597c703791f2a447fe18535963823f3f902ffedb8724434511b2c8 | |||
| static/media/bookshelf.483b2aa4.svg,1626794365220,e6545866615c0e1a6f850509153b365072f05c3179c4d4fb3ecb21c7b82ac96f | |||
| static/media/bx-brain.0318e2d4.svg,1626794365218,89cd203c6b55ea3b65034f05e266dc30b14e727bbd11de1c75a9f08af6f64e36 | |||
| static/media/bx-search-alt.6aee4585.svg,1626794365218,651936941fee86d3b721a577909bf90d4e08d9e62c8a95174488babde81d8971 | |||
| static/js/main.16376668.chunk.js,1626794365222,859883682aec19415ea1ceb139edf9fcf0da840d5943cdfa71b49c4e85249f3f | |||
| static/media/bx-calendar.1108d675.svg,1626794365219,7c453239d1488a29754ccad27304519a30d992e0b0239e912fcea73d21bbb497 | |||
| static/media/check-circle.c1e8fd45.svg,1626794365218,ff073d43826664345aca33e591a3914931c2deec9a207e1f36ac6405c2c830e7 | |||
| static/media/check.b354552a.svg,1626794365222,c5d25c512d5e7d9df6398de36eeafe5fc2ebb55b4160881f088a0608226d6db1 | |||
| static/media/circled.bac31e63.svg,1626794365218,862ea839b0e6250d6d4d5876eb1338e61f0c3456346a489b164e336ce6eb826b | |||
| static/media/chevron-left.680dffe8.svg,1626794365223,746c1361579c3a2086dbcee59f06438a2d6bb54d5b973103f217c743cec47eb5 | |||
| static/media/close.d4e228d9.svg,1626794365222,8bb89d130acaee639c2bf274160929e1353a5ff18eca4e271b30a50431408ca9 | |||
| static/media/expand.4a4b1ee4.svg,1626794365218,84e811af4e150e4dc440824c18ab5e0e53d7a4ea1bf3166143287595bde0af49 | |||
| static/media/home.bb84a97d.svg,1626794365222,081a43fb3ad132a1295a75b2123a79b0261a9ba6978a175eaa81035f56fda0d7 | |||
| static/media/more-vertical.c6e3fe1e.svg,1626794365225,5425d3d4391f054c3ce2aae41fa66956d79ffc70b0bcdad3f64483f5bb1d7587 | |||
| static/media/plus-circle.a1ca80d1.svg,1626794365222,f1c9f52a1d21edf65463d233394155d447f0e592cd8da55879439c1cd038147c | |||
| static/media/plus.8ac59b29.svg,1626794365218,86dc717c45016a3e4f2521fbac049a77771852ed4b36741a3814bd0549a0ee36 | |||
| static/media/readme.81bb4934.svg,1626794365218,0c3a0b717b9e0b427f07c777ca51bab67bc81a6ac5efedbd97fa1fb2c564f33c | |||
| static/media/stats-chart.c0cc3ef1.svg,1626794365222,cdfef79d4b11681a86e7bcc785782b9001ae79f8e42f10640ca92e62e99c6996 | |||
| static/media/speaker.6971d2a3.svg,1626794365222,58d679636ee09fdd1c6d41fd213288500b8c4ffcfe8104eb278f0e207b064113 | |||
| static/media/time.c96f97a2.svg,1626794365218,11c478f1864cdc4126943a74ab8560ebe3f20b179ee854e9b5b9a80c33148e16 | |||
| static/media/tab.c01b43e6.svg,1626794365218,82584e243b002fac4cc97868a2f30c520148eb4718e0d5c85c0c717e604fd56f | |||
| static/media/timer.b4355910.svg,1626794365223,c7495c3ea38b4d7e5ff08cbb7417528752e6e34e3dd1c6e1e5599ecd491b90c2 | |||
| static/media/intern-badge.c818f4cb.svg,1626794365222,b431e30ab91858642d2d78053114dd85b8cd51ee5f57d26545fd4c89f4e699ff | |||
| static/media/user-speaker.6817a677.svg,1626794365219,5c658319026bfd2bfbfc017ef5a0bb80a3436f5473ca7d30a4277e51f07f6692 | |||
| static/css/main.88a7e5b6.chunk.css.map,1626794365227,5b89966c7cfb2897b2d645c5fcccd61450af717275c73fe931c4002e7a145d50 | |||
| static/js/main.16376668.chunk.js.map,1626794365227,2de54fcfb82378e27c2a564dc422db6c004250b2a8eb27d52199b72065a74fcd | |||
| static/js/2.fe96eeec.chunk.js,1626794365225,be18b55b6e9e86ef2c8f558880eb4af549ef58785c262008bec36a294dcc51a1 | |||
| static/js/2.fe96eeec.chunk.js.map,1626794365229,9ca7b6a3bc5a4b5d18b07c25797b00afb15e14d38930980de0f4b067e4ecdb60 | |||
| @@ -3754,6 +3754,15 @@ | |||
| "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", | |||
| "optional": true | |||
| }, | |||
| "bindings": { | |||
| "version": "1.5.0", | |||
| "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", | |||
| "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", | |||
| "optional": true, | |||
| "requires": { | |||
| "file-uri-to-path": "1.0.0" | |||
| } | |||
| }, | |||
| "bluebird": { | |||
| "version": "3.7.2", | |||
| "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", | |||
| @@ -6687,6 +6696,12 @@ | |||
| } | |||
| } | |||
| }, | |||
| "file-uri-to-path": { | |||
| "version": "1.0.0", | |||
| "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", | |||
| "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", | |||
| "optional": true | |||
| }, | |||
| "filesize": { | |||
| "version": "6.1.0", | |||
| "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.1.0.tgz", | |||
| @@ -6700,6 +6715,11 @@ | |||
| "to-regex-range": "^5.0.1" | |||
| } | |||
| }, | |||
| "filter-obj": { | |||
| "version": "1.1.0", | |||
| "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", | |||
| "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=" | |||
| }, | |||
| "finalhandler": { | |||
| "version": "1.1.2", | |||
| "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", | |||
| @@ -10949,6 +10969,22 @@ | |||
| "prepend-http": "^1.0.0", | |||
| "query-string": "^4.1.0", | |||
| "sort-keys": "^1.0.0" | |||
| }, | |||
| "dependencies": { | |||
| "query-string": { | |||
| "version": "4.3.4", | |||
| "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", | |||
| "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", | |||
| "requires": { | |||
| "object-assign": "^4.1.0", | |||
| "strict-uri-encode": "^1.0.0" | |||
| } | |||
| }, | |||
| "strict-uri-encode": { | |||
| "version": "1.1.0", | |||
| "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", | |||
| "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" | |||
| } | |||
| } | |||
| }, | |||
| "npm-run-path": { | |||
| @@ -12753,12 +12789,14 @@ | |||
| "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" | |||
| }, | |||
| "query-string": { | |||
| "version": "4.3.4", | |||
| "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", | |||
| "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", | |||
| "version": "7.0.1", | |||
| "resolved": "https://registry.npmjs.org/query-string/-/query-string-7.0.1.tgz", | |||
| "integrity": "sha512-uIw3iRvHnk9to1blJCG3BTc+Ro56CBowJXKmNNAm3RulvPBzWLRqKSiiDk+IplJhsydwtuNMHi8UGQFcCLVfkA==", | |||
| "requires": { | |||
| "object-assign": "^4.1.0", | |||
| "strict-uri-encode": "^1.0.0" | |||
| "decode-uri-component": "^0.2.0", | |||
| "filter-obj": "^1.1.0", | |||
| "split-on-first": "^1.0.0", | |||
| "strict-uri-encode": "^2.0.0" | |||
| } | |||
| }, | |||
| "querystring": { | |||
| @@ -14683,6 +14721,11 @@ | |||
| } | |||
| } | |||
| }, | |||
| "split-on-first": { | |||
| "version": "1.1.0", | |||
| "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", | |||
| "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==" | |||
| }, | |||
| "split-string": { | |||
| "version": "3.1.0", | |||
| "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", | |||
| @@ -14813,9 +14856,9 @@ | |||
| "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" | |||
| }, | |||
| "strict-uri-encode": { | |||
| "version": "1.1.0", | |||
| "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", | |||
| "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" | |||
| "version": "2.0.0", | |||
| "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", | |||
| "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=" | |||
| }, | |||
| "string-length": { | |||
| "version": "4.0.2", | |||
| @@ -15967,6 +16010,7 @@ | |||
| "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", | |||
| "optional": true, | |||
| "requires": { | |||
| "bindings": "^1.5.0", | |||
| "nan": "^2.12.1" | |||
| } | |||
| }, | |||
| @@ -16545,6 +16589,7 @@ | |||
| "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", | |||
| "optional": true, | |||
| "requires": { | |||
| "bindings": "^1.5.0", | |||
| "nan": "^2.12.1" | |||
| } | |||
| }, | |||
| @@ -11,6 +11,7 @@ | |||
| "@types/react": "^17.0.13", | |||
| "@types/react-dom": "^17.0.8", | |||
| "node-sass": "^6.0.1", | |||
| "query-string": "^7.0.1", | |||
| "react": "^17.0.2", | |||
| "react-circular-progressbar": "^2.0.4", | |||
| "react-dom": "^17.0.2", | |||
| @@ -5,6 +5,7 @@ import { Tabs } from "./components/tabs/Tabs"; | |||
| import { BrowserRouter, Route, Redirect, Switch } from "react-router-dom"; | |||
| import { AddWord } from "./components/add-word/AddWord"; | |||
| import { AddShelf } from "./components/add-shelf/AddShelf"; | |||
| import { CategoryDetails } from "./components/category-details/CategoryDetails"; | |||
| function App() { | |||
| return ( | |||
| @@ -14,6 +15,7 @@ function App() { | |||
| <Route path="/add-word" component={AddWord} /> | |||
| <Route path="/add-shelf" component={AddShelf} /> | |||
| <Route path="/categories" component={Categories} /> | |||
| <Route path="/category-details/" component={CategoryDetails} /> | |||
| <Route path="/revise" component={Revise} /> | |||
| <Redirect from="/" to="/home" /> | |||
| </Switch> | |||
| @@ -1,7 +1,7 @@ | |||
| <svg xmlns="http://www.w3.org/2000/svg" width="4" height="16" viewBox="0 0 4 16"> | |||
| <g id="more-alt" transform="translate(19 -6) rotate(90)"> | |||
| <path id="Path_13" data-name="Path 13" d="M10,17a2,2,0,1,1-2-2A2,2,0,0,1,10,17Z" transform="translate(0 0)" fill="#fff"/> | |||
| <path id="Path_14" data-name="Path 14" d="M19,17a2,2,0,1,1-2-2A2,2,0,0,1,19,17Z" transform="translate(-3 0)" fill="#fff"/> | |||
| <path id="Path_15" data-name="Path 15" d="M26,19a2,2,0,1,0-2-2A2,2,0,0,0,26,19Z" transform="translate(-6 0)" fill="#fff"/> | |||
| <path id="Path_13" data-name="Path 13" d="M10,17a2,2,0,1,1-2-2A2,2,0,0,1,10,17Z" transform="translate(0 0)"/> | |||
| <path id="Path_14" data-name="Path 14" d="M19,17a2,2,0,1,1-2-2A2,2,0,0,1,19,17Z" transform="translate(-3 0)"/> | |||
| <path id="Path_15" data-name="Path 15" d="M26,19a2,2,0,1,0-2-2A2,2,0,0,0,26,19Z" transform="translate(-6 0)"/> | |||
| </g> | |||
| </svg> | |||
| @@ -1,24 +1,3 @@ | |||
| .createShelfModal { | |||
| background-color: var(--creamy-white); | |||
| z-index: 2; | |||
| width: 100vw; | |||
| height: 100vh; | |||
| overflow: auto; | |||
| opacity: 0; | |||
| position: relative; | |||
| animation: fadeIn 0.3s forwards; | |||
| @keyframes fadeIn { | |||
| 0% { | |||
| opacity: 0; | |||
| transform: translateY(10vh); | |||
| } 100% { | |||
| opacity: 1; | |||
| transform: translateY(0vh); | |||
| } | |||
| } | |||
| } | |||
| .modalHeader { | |||
| background-color: var(--orange); | |||
| display: flex; | |||
| @@ -170,19 +149,19 @@ | |||
| } | |||
| } | |||
| &:nth-child(1) .icon { | |||
| &:nth-child(5n - 4) .icon { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(2) .icon { | |||
| &:nth-child(5n - 3) .icon { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(3) .icon { | |||
| &:nth-child(5n - 2) .icon { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(4) .icon { | |||
| &:nth-child(5n - 1) .icon { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| @@ -16,7 +16,7 @@ export const AddShelf: React.FC = () => { | |||
| viewPermission: 'PRIVATE' | |||
| }); | |||
| return <section className={styles.createShelfModal}> | |||
| return <section className="modalPage"> | |||
| <header className={styles.modalHeader}> | |||
| <h4> Create New Shelf </h4> | |||
| @@ -1,24 +1,3 @@ | |||
| .modalPage { | |||
| background-color: var(--creamy-white); | |||
| z-index: 2; | |||
| width: 100vw; | |||
| height: 100vh; | |||
| overflow: auto; | |||
| opacity: 0; | |||
| position: relative; | |||
| animation: fadeIn 0.3s forwards; | |||
| @keyframes fadeIn { | |||
| 0% { | |||
| opacity: 0; | |||
| transform: translateY(10vh); | |||
| } 100% { | |||
| opacity: 1; | |||
| transform: translateY(0vh); | |||
| } | |||
| } | |||
| } | |||
| .navHeader { | |||
| background-color: transparent; | |||
| text-align: center; | |||
| @@ -254,17 +233,21 @@ | |||
| align-items: center; | |||
| margin: 0 0 2rem; | |||
| &:nth-child(3n) .icon { | |||
| &:nth-child(5n - 4) .icon { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(3n - 1) .icon { | |||
| &:nth-child(5n - 3) .icon { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(3n - 2) .icon { | |||
| &:nth-child(5n - 2) .icon { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(5n - 1) .icon { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| .icon { | |||
| @@ -26,7 +26,7 @@ export const AddWord: React.FC = () => { | |||
| } | |||
| } | |||
| return <section className={styles.modalPage}> | |||
| return <section className="modalPage"> | |||
| <header className={styles.navHeader}> | |||
| <button onClick={() => { | |||
| if (selectedWord) { | |||
| @@ -49,6 +49,7 @@ | |||
| h4 { | |||
| color: white; | |||
| font-size: 2.2rem; | |||
| font-weight: 600; | |||
| } | |||
| p { | |||
| @@ -116,7 +117,8 @@ | |||
| height: 5rem; | |||
| color: var(--orange); | |||
| cursor: pointer; | |||
| font-weight: 700; | |||
| font-weight: 600; | |||
| font-size: 1.3rem; | |||
| svg { | |||
| width: 2rem; | |||
| @@ -4,10 +4,8 @@ import { ReactComponent as LogoIcon } from '../../assets/icons/anamnesis.svg'; | |||
| import { ReactComponent as SearchIcon } from '../../assets/icons/bx-search-alt.svg'; | |||
| import { ReactComponent as PlusCircledIcon } from '../../assets/icons/plus-circle.svg'; | |||
| import { ReactComponent as TimeIcon } from '../../assets/icons/time.svg'; | |||
| import { ReactComponent as PersonSpeakerIcon } from '../../assets/icons/user-speaker.svg'; | |||
| import { ReactComponent as BookMarkIcon } from '../../assets/icons/bookmark.svg'; | |||
| import { ReactComponent as BrainIcon } from '../../assets/icons/bx-brain.svg'; | |||
| import { userProfileData } from "../home/Home"; | |||
| import { NavLink } from "react-router-dom"; | |||
| export const Categories: React.FC = () => { | |||
| return <section className="page"> | |||
| @@ -37,44 +35,19 @@ export const Categories: React.FC = () => { | |||
| </button> | |||
| <section className={styles.Grid}> | |||
| <section className={styles.Grid}> | |||
| <ul> | |||
| <li> | |||
| <div className={styles.icon}> | |||
| <TimeIcon /> | |||
| </div> | |||
| <div className={styles.info}> | |||
| <label> Vocabulary </label> | |||
| <span> 5 Shelves </span> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div className={styles.icon}> | |||
| <BookMarkIcon /> | |||
| </div> | |||
| <div className={styles.info}> | |||
| <label> Books </label> | |||
| <span> 3 Shelves </span> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div className={styles.icon}> | |||
| <PersonSpeakerIcon /> | |||
| </div> | |||
| <div className={styles.info}> | |||
| <label> IELTS </label> | |||
| <span> 5 Shelves </span> | |||
| </div> | |||
| </li> | |||
| <li> | |||
| <div className={styles.icon}> | |||
| <BrainIcon /> | |||
| </div> | |||
| <div className={styles.info}> | |||
| <label> GRE </label> | |||
| <span> 2 Shelves </span> | |||
| </div> | |||
| </li> | |||
| { userProfileData.categories.map((category, index) => { | |||
| return <li key={category.name}> | |||
| <div className={styles.icon}> | |||
| { category.icon } | |||
| </div> | |||
| <NavLink to={'/category-details/category_id=' + index} className={styles.info}> | |||
| <label> { category.name } </label> | |||
| <span> { category.shelves.length } Shelves </span> | |||
| </NavLink> | |||
| </li> | |||
| })} | |||
| </ul> | |||
| </section> | |||
| </section> | |||
| @@ -1,8 +0,0 @@ | |||
| import React from "react"; | |||
| import styles from './CategoryDetails.module.scss'; | |||
| export const CategoryDetails: React.FC = () => { | |||
| return <section className="page"> | |||
| </section> | |||
| } | |||
| @@ -0,0 +1,231 @@ | |||
| .navHeader { | |||
| background-color: transparent; | |||
| text-align: center; | |||
| position: relative; | |||
| display: flex; | |||
| justify-content: space-between; | |||
| align-items: center; | |||
| padding: 1rem 1.5rem; | |||
| button { | |||
| width: 4rem; | |||
| text-align: center; | |||
| background-color: transparent; | |||
| border: 0; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: flex-start; | |||
| svg { | |||
| width: 1rem; | |||
| color: var(--black); | |||
| } | |||
| } | |||
| h5 { | |||
| font-size: 1.5rem; | |||
| } | |||
| figure { | |||
| display: block; | |||
| img { | |||
| display: block; | |||
| width: 4rem; | |||
| height: 4rem; | |||
| border-radius: 50%; | |||
| border: 1px solid var(--creamy-white); | |||
| } | |||
| } | |||
| } | |||
| .Shelf { | |||
| padding: 0 2rem; | |||
| ul { | |||
| list-style: none; | |||
| display: grid; | |||
| grid-template-columns: 1fr 1fr; | |||
| grid-gap: 2rem; | |||
| } | |||
| [class*="CircularProgressbar"] { | |||
| width: 100%; | |||
| height: 100%; | |||
| } | |||
| .progress { | |||
| position: relative; | |||
| width: 7rem; | |||
| height: 7rem; | |||
| .text { | |||
| position: absolute; | |||
| left: 0; | |||
| top: 0; | |||
| height: 100%; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| width: 100%; | |||
| text-align: center; | |||
| font-size: 1.4rem; | |||
| color: white; | |||
| font-weight: 600; | |||
| } | |||
| } | |||
| li { | |||
| border-radius: 3rem; | |||
| padding: 1.5rem; | |||
| &:nth-child(5n - 4) { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(5n - 3) { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(5n - 2) { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(5n - 1) { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| h5 { | |||
| font-size: 1.2rem; | |||
| color: white; | |||
| font-weight: 600; | |||
| margin-top: 1rem; | |||
| } | |||
| p { | |||
| font-size: 1.1rem; | |||
| color: white; | |||
| &:last-child { | |||
| margin-top: 1rem; | |||
| } | |||
| } | |||
| } | |||
| .tabHeading { | |||
| background-color: transparent; | |||
| position: relative; | |||
| padding: 3rem 2.5rem 8rem 4rem; | |||
| display: flex; | |||
| align-items: flex-start; | |||
| &::before { | |||
| content: ''; | |||
| position: absolute; | |||
| left: 0; | |||
| bottom: 0; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: var(--teal); | |||
| border-top-left-radius: 3rem; | |||
| border-top-right-radius: 3rem; | |||
| } | |||
| &>* { | |||
| position: relative; | |||
| } | |||
| h4 { | |||
| color: white; | |||
| font-size: 2.2rem; | |||
| font-weight: 600; | |||
| } | |||
| p { | |||
| color: white; | |||
| font-size: 1.4rem; | |||
| } | |||
| .icon { | |||
| width: 6rem; | |||
| height: 6rem; | |||
| background-color: var(--orange); | |||
| border-radius: 1rem; | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| margin-right: 1rem; | |||
| svg { | |||
| width: 2.5rem; | |||
| height: 2.5rem; | |||
| fill: white; | |||
| } | |||
| } | |||
| .moreButton { | |||
| margin-left: auto; | |||
| width: 2rem; | |||
| height: 5rem; | |||
| display: flex; | |||
| align-items: flex-start; | |||
| justify-content: center; | |||
| background-color: transparent; | |||
| border: none; | |||
| svg { | |||
| fill: white; | |||
| width: 1.8rem; | |||
| height: 1.8rem; | |||
| } | |||
| } | |||
| } | |||
| .searchHolder { | |||
| position: relative; | |||
| &::before { | |||
| content: ''; | |||
| position: absolute; | |||
| left: 0; | |||
| bottom: 0; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-color: var(--creamy-white); | |||
| border-top-left-radius: 3rem; | |||
| border-top-right-radius: 3rem; | |||
| } | |||
| &>* { | |||
| position: relative; | |||
| } | |||
| .searchBar { | |||
| background-color: white; | |||
| display: flex; | |||
| border-radius: 3rem; | |||
| height: 5rem; | |||
| width: calc(100% - 6rem); | |||
| margin: -2.5rem auto 0; | |||
| align-items: center; | |||
| justify-content: space-between; | |||
| box-shadow: 0px 5px 30px -20px var(--grey); | |||
| transform: translateY(-2.5rem); | |||
| input { | |||
| height: 100%; | |||
| border: 0; | |||
| width: calc(100% - 5rem); | |||
| background-color: transparent; | |||
| padding-left: 2rem; | |||
| font-size: 1.4rem; | |||
| } | |||
| svg { | |||
| width: 5rem; | |||
| fill: var(--red); | |||
| } | |||
| } | |||
| } | |||
| @@ -0,0 +1,77 @@ | |||
| import React from "react"; | |||
| import styles from './CategoryDetails.module.scss'; | |||
| import { useLocation } from 'react-router'; | |||
| import queryString from 'query-string'; | |||
| import { ReactComponent as ChevronLeft } from '../../assets/icons/chevron-left.svg'; | |||
| import { ReactComponent as SearchIcon } from '../../assets/icons/bx-search-alt.svg'; | |||
| import { ReactComponent as MoreIcon } from '../../assets/icons/more-alt.svg'; | |||
| import { userProfileData } from "../home/Home"; | |||
| import { CircularProgressbar } from "react-circular-progressbar"; | |||
| export const CategoryDetails: React.FC = () => { | |||
| const location = useLocation(); | |||
| const category_id: any = queryString.parse(location.pathname)['/category-details/category_id']; | |||
| const shelfCount: number = userProfileData.categories[category_id].shelves.length; | |||
| return <section className="modalPage"> | |||
| <header className={styles.navHeader}> | |||
| <button onClick={() => window.history.back()}> | |||
| <ChevronLeft /> | |||
| </button> | |||
| <h5> Shelves </h5> | |||
| <figure> | |||
| {/* eslint-disable-next-line */} | |||
| <img src={ userProfileData.image } alt="profile-image" /> | |||
| </figure> | |||
| </header> | |||
| <header className={styles.tabHeading}> | |||
| <div className={styles.icon}> | |||
| { userProfileData.categories[category_id].icon } | |||
| </div> | |||
| <div className={styles.headingDetails}> | |||
| <h4> { userProfileData.categories[category_id].name } </h4> | |||
| <p> { shelfCount } { shelfCount > 1 ? 'Shelves' : 'Shelf' } </p> | |||
| </div> | |||
| <button className={styles.moreButton}> | |||
| <MoreIcon /> | |||
| </button> | |||
| </header> | |||
| <section className={styles.searchHolder}> | |||
| <div className={styles.searchBar}> | |||
| <input type="text" placeholder={'Search Shelves'} /> | |||
| <SearchIcon /> | |||
| </div> | |||
| </section> | |||
| <section className={styles.Shelf}> | |||
| <ul> | |||
| { userProfileData.categories[Number(category_id)].shelves.map(shelf => { | |||
| return <li key={shelf.name}> | |||
| <div className={styles.progress}> | |||
| <CircularProgressbar value={shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0} strokeWidth={7} | |||
| styles={{ | |||
| path: { | |||
| stroke: 'white', | |||
| strokeLinecap: 'round', | |||
| }, | |||
| trail: { | |||
| stroke: 'rgba(255, 255, 255, 0.25)', | |||
| strokeLinecap: 'round', | |||
| }} | |||
| } /> | |||
| <span className={styles.text}> { shelf.words.length > 0 ? (shelf.revisedWords.length * 100/ shelf.words.length) : 0 }% </span> | |||
| </div> | |||
| <h5> { shelf.name } </h5> | |||
| <p> { shelf.words.length } words </p> | |||
| </li> | |||
| }) } | |||
| </ul> | |||
| </section> | |||
| </section> | |||
| } | |||
| @@ -161,17 +161,21 @@ $block-padding: 0 2rem; | |||
| align-items: center; | |||
| margin: 2rem 0; | |||
| &:nth-child(1) .icon { | |||
| &:nth-child(5n - 4) .icon { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(2) .icon { | |||
| &:nth-child(5n - 3) .icon { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(3) .icon { | |||
| &:nth-child(5n - 2) .icon { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(5n - 1) .icon { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| .icon { | |||
| @@ -251,21 +255,21 @@ $block-padding: 0 2rem; | |||
| border-radius: 3rem; | |||
| padding: 1.5rem; | |||
| &:nth-child(1) { | |||
| &:nth-child(5n - 4) { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(2) { | |||
| &:nth-child(5n - 3) { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(3) { | |||
| &:nth-child(5n - 2) { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(4) { | |||
| &:nth-child(5n - 1) { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| } | |||
| h5 { | |||
| @@ -301,19 +305,19 @@ $block-padding: 0 2rem; | |||
| align-items: center; | |||
| margin: 2rem 0; | |||
| &:nth-child(1) .icon { | |||
| &:nth-child(5n - 4) .icon { | |||
| background-color: var(--orange); | |||
| } | |||
| &:nth-child(2) .icon { | |||
| &:nth-child(5n - 3) .icon { | |||
| background-color: var(--blue); | |||
| } | |||
| &:nth-child(3) .icon { | |||
| &:nth-child(5n - 2) .icon { | |||
| background-color: var(--red); | |||
| } | |||
| &:nth-child(4) .icon { | |||
| &:nth-child(5n - 1) .icon { | |||
| background-color: var(--teal); | |||
| } | |||
| } | |||
| @@ -1,4 +1,4 @@ | |||
| import React, { useState } from "react"; | |||
| import React from "react"; | |||
| import styles from './Home.module.scss'; | |||
| import { ReactComponent as LogoIcon } from '../../assets/icons/anamnesis.svg'; | |||
| import { ReactComponent as SearchIcon } from '../../assets/icons/bx-search-alt.svg'; | |||
| @@ -198,15 +198,15 @@ export const Home: React.FC = () => { | |||
| </button> | |||
| </header> | |||
| <ul> | |||
| { userProfileData.categories.map(category => { | |||
| { userProfileData.categories.map((category, index) => { | |||
| return <li key={category.name}> | |||
| <div className={styles.icon}> | |||
| { category.icon } | |||
| </div> | |||
| <div className={styles.info}> | |||
| <NavLink to={'/category-details/category_id=' + index} className={styles.info}> | |||
| <label> { category.name } </label> | |||
| <span> { category.shelves.length } Shelves </span> | |||
| </div> | |||
| </NavLink> | |||
| </li> | |||
| })} | |||
| </ul> | |||
| @@ -9,6 +9,10 @@ | |||
| font-family: 'Poppins', sans-serif; | |||
| } | |||
| h1, h2, h3, h4, h5, h6 { | |||
| font-weight: 600; | |||
| } | |||
| :root { | |||
| --orange: #f1be83; | |||
| --red: #d47077; | |||
| @@ -31,4 +35,25 @@ | |||
| overflow: auto; | |||
| position: relative; | |||
| padding-bottom: 100px; | |||
| } | |||
| .modalPage { | |||
| background-color: var(--creamy-white); | |||
| z-index: 2; | |||
| width: 100vw; | |||
| height: 100vh; | |||
| overflow: auto; | |||
| opacity: 0; | |||
| position: relative; | |||
| animation: fadeUp 0.3s forwards; | |||
| } | |||
| @keyframes fadeUp { | |||
| 0% { | |||
| opacity: 0; | |||
| transform: translateY(10vh); | |||
| } 100% { | |||
| opacity: 1; | |||
| transform: translateY(0vh); | |||
| } | |||
| } | |||