From bf1f4664e9cabd9583bff4c45ff22216612ddc9d Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Tue, 16 Jul 2024 14:17:32 -0400 Subject: [PATCH 01/54] add videos to articles --- package-lock.json | 1354 ++++------------------------------ package.json | 4 +- src/components/IonicCard.tsx | 27 +- src/pages/Discover.tsx | 94 ++- src/theme/tailwind.css | 8 + 5 files changed, 250 insertions(+), 1237 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ccde36..ce6a385 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@capacitor/keyboard": "5.0.6", "@capacitor/share": "^5.0.6", "@capacitor/status-bar": "5.0.6", - "@ionic/react": "^7.0.0", + "@ionic/react": "^7.8.6", "@ionic/react-router": "^7.0.0", "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", @@ -24,8 +24,7 @@ "react-markdown": "^9.0.1", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", - "react-share": "^5.1.0", - "react-share-social": "^0.1.55" + "react-share": "^5.1.0" }, "devDependencies": { "@capacitor/cli": "5.5.1", @@ -2163,11 +2162,6 @@ "ms": "^2.1.1" } }, - "node_modules/@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -2651,21 +2645,23 @@ } }, "node_modules/@ionic/core": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.4.tgz", - "integrity": "sha512-rZbKlcVucRTDOK2Woh4CWPePlsXiUt3G9dCUniduKD7WeiuAk0GzfmoM3WXBvcUpkVTUIOrvKHaqd3JJSWEIzg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.8.6.tgz", + "integrity": "sha512-HAYZdEmeJgOdo2kDlZkcCGHb+zs/vjU6iv4skbVBL7y+OnSv/oC2u83Yee8S3/aY0YAxkyBgu7hLTYH13Zc2Aw==", + "license": "MIT", "dependencies": { - "@stencil/core": "^4.7.1", - "ionicons": "^7.2.1", + "@stencil/core": "^4.12.2", + "ionicons": "^7.2.2", "tslib": "^2.1.0" } }, "node_modules/@ionic/react": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.5.4.tgz", - "integrity": "sha512-SJ/iHPgHg5FeOka8AzoSWFM1zi923yqTEEqTjAJczjow4V276e3YWy5YoVzPMg+k2ti4YaIJSkUU9hypcwfDMg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.8.6.tgz", + "integrity": "sha512-IIlcdOW2OmcrjC3nqGqQCcJdHDnEbGIfyzpKR0FDaRQ6M/a7Mz6IlIG/cgdGP0RBBadECykBFDfa6XgRAGwWoA==", + "license": "MIT", "dependencies": { - "@ionic/core": "7.5.4", + "@ionic/core": "7.8.6", "ionicons": "^7.0.0", "tslib": "*" }, @@ -2689,6 +2685,32 @@ "react-router-dom": "^5.0.1" } }, + "node_modules/@ionic/react-router/node_modules/@ionic/core": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.4.tgz", + "integrity": "sha512-rZbKlcVucRTDOK2Woh4CWPePlsXiUt3G9dCUniduKD7WeiuAk0GzfmoM3WXBvcUpkVTUIOrvKHaqd3JJSWEIzg==", + "license": "MIT", + "dependencies": { + "@stencil/core": "^4.7.1", + "ionicons": "^7.2.1", + "tslib": "^2.1.0" + } + }, + "node_modules/@ionic/react-router/node_modules/@ionic/react": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.5.4.tgz", + "integrity": "sha512-SJ/iHPgHg5FeOka8AzoSWFM1zi923yqTEEqTjAJczjow4V276e3YWy5YoVzPMg+k2ti4YaIJSkUU9hypcwfDMg==", + "license": "MIT", + "dependencies": { + "@ionic/core": "7.5.4", + "ionicons": "^7.0.0", + "tslib": "*" + }, + "peerDependencies": { + "react": ">=16.8.6", + "react-dom": ">=16.8.6" + } + }, "node_modules/@ionic/utils-array": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", @@ -2916,19 +2938,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@material-ui/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", - "peerDependencies": { - "@types/react": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -2971,9 +2980,10 @@ "dev": true }, "node_modules/@stencil/core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.7.1.tgz", - "integrity": "sha512-KDWA/3qDiABA5LqtHCmTVwORuzgu/YdC0FpSBwVmwlw6K8jUjbTA5JB6Q03da2F+EQlDHOVgbW0TNtHCm54uXQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.19.2.tgz", + "integrity": "sha512-ZdnbHmHEl8E5vN0GWDtONe5w6j3CrSqqxZM4hNLBPkV/aouWKug7D5/Mi6RazfYO5U4fmHQYLwMz60rHcx0G4g==", + "license": "MIT", "bin": { "stencil": "bin/stencil" }, @@ -3296,14 +3306,6 @@ "@types/react-router": "*" } }, - "node_modules/@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", - "dependencies": { - "@types/react": "*" - } - }, "node_modules/@types/scheduler": { "version": "0.16.6", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", @@ -3812,25 +3814,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -4082,7 +4065,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -4159,6 +4143,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4508,14 +4493,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -4579,15 +4556,11 @@ "node": ">=4.0.0" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/convert-source-map": { "version": "2.0.0", @@ -4639,15 +4612,6 @@ "node": ">= 8" } }, - "node_modules/css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "dependencies": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -5013,15 +4977,6 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -5062,11 +5017,6 @@ "node": ">= 0.4.0" } }, - "node_modules/email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -5728,30 +5678,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "dependencies": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5764,22 +5690,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5909,7 +5819,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -6043,73 +5954,11 @@ "assert-plus": "^1.0.0" } }, - "node_modules/gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", - "dependencies": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "bin": { - "gh-pages": "bin/gh-pages.js", - "gh-pages-clean": "bin/gh-pages-clean.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gh-pages/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/gh-pages/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/gh-pages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/gh-pages/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/gh-pages/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6176,21 +6025,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "dependencies": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -6206,7 +6040,8 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", @@ -6424,11 +6259,6 @@ "node": ">=8.12.0" } }, - "node_modules/hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -6508,6 +6338,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6516,7 +6347,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "2.0.0", @@ -6547,9 +6379,10 @@ } }, "node_modules/ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", + "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", + "license": "MIT", "dependencies": { "@stencil/core": "^4.0.3" } @@ -6762,11 +6595,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -7411,88 +7239,6 @@ "verror": "1.10.0" } }, - "node_modules/jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/jss" - } - }, - "node_modules/jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "node_modules/jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "node_modules/jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "dependencies": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -7620,7 +7366,8 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -7755,20 +7502,6 @@ "node": ">=12" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-from-markdown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", @@ -8315,6 +8048,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8645,6 +8379,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "dependencies": { "wrappy": "1" } @@ -8749,14 +8484,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/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==", - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8785,6 +8512,7 @@ "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" } @@ -8793,6 +8521,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8899,25 +8628,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dependencies": { - "pinkie": "^2.0.0" - }, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -8931,65 +8642,6 @@ "node": ">= 6" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/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/pkg-dir/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/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/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/pkg-types": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", @@ -9015,11 +8667,6 @@ "node": ">=10.4.0" } }, - "node_modules/popper.js": { - "version": "1.16.1-lts", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", - "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" - }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -9366,7 +9013,8 @@ "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/react-markdown": { "version": "9.0.1", @@ -9446,236 +9094,13 @@ "node_modules/react-share": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/react-share/-/react-share-5.1.0.tgz", - "integrity": "sha512-OvyfMtj/0UzH1wi90OdHhZVJ6WUC/+IeWvBwppeZozwIGyAjQgyR0QXlHOrxVHVECqnGvcpBaFTXVrqouTieaw==", - "dependencies": { - "classnames": "^2.3.2", - "jsonp": "^0.2.1" - }, - "peerDependencies": { - "react": "^17 || ^18" - } - }, - "node_modules/react-share-social": { - "version": "0.1.55", - "resolved": "https://registry.npmjs.org/react-share-social/-/react-share-social-0.1.55.tgz", - "integrity": "sha512-Mkm6ucoKjj7ENXldz1B+BDtVA4Z387LEjJgtWhEzdrQGtYFGbK8fktZCsBLKTQhl0F/YvQxTrOlNl9DbxaVtHw==", - "dependencies": { - "@material-ui/core": "^4.11.4", - "gh-pages": "^4.0.0", - "react-share": "^4.3.1" - } - }, - "node_modules/react-share-social/node_modules/@material-ui/core": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", - "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", - "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.5", - "@material-ui/system": "^4.12.2", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.4", - "hoist-non-react-statics": "^3.3.2", - "popper.js": "1.16.1-lts", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0", - "react-transition-group": "^4.4.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-share-social/node_modules/@material-ui/styles": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", - "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", - "deprecated": "Material UI v4 doesn't receive active development since September 2021. See the guide https://mui.com/material-ui/migration/migration-v4/ to upgrade to v5.", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.8.0", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.5.1", - "jss-plugin-camel-case": "^10.5.1", - "jss-plugin-default-unit": "^10.5.1", - "jss-plugin-global": "^10.5.1", - "jss-plugin-nested": "^10.5.1", - "jss-plugin-props-sort": "^10.5.1", - "jss-plugin-rule-value-function": "^10.5.1", - "jss-plugin-vendor-prefixer": "^10.5.1", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-share-social/node_modules/@material-ui/styles/node_modules/csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "node_modules/react-share-social/node_modules/@material-ui/system": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", - "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "csstype": "^2.5.2", - "prop-types": "^15.7.2" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/material-ui" - }, - "peerDependencies": { - "@types/react": "^16.8.6 || ^17.0.0", - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-share-social/node_modules/@material-ui/system/node_modules/csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - }, - "node_modules/react-share-social/node_modules/@material-ui/utils": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", - "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", - "dependencies": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0", - "react-dom": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/react-share-social/node_modules/@types/react": { - "version": "17.0.80", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", - "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", - "optional": true, - "peer": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" - } - }, - "node_modules/react-share-social/node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-share-social/node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-share-social/node_modules/react-share": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-share/-/react-share-4.4.1.tgz", - "integrity": "sha512-AJ9m9RiJssqvYg7MoJUc9J0D7b/liWrsfQ99ndKc5vJ4oVHHd4Fy87jBlKEQPibT40oYA3AQ/a9/oQY6/yaigw==", - "dependencies": { - "classnames": "^2.3.2", - "jsonp": "^0.2.1" - }, - "engines": { - "node": ">=6.9.0", - "npm": ">=5.0.0" - }, - "peerDependencies": { - "react": "^16.3.0 || ^17 || ^18" - } - }, - "node_modules/react-share-social/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "integrity": "sha512-OvyfMtj/0UzH1wi90OdHhZVJ6WUC/+IeWvBwppeZozwIGyAjQgyR0QXlHOrxVHVECqnGvcpBaFTXVrqouTieaw==", "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" + "classnames": "^2.3.2", + "jsonp": "^0.2.1" }, "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" + "react": "^17 || ^18" } }, "node_modules/read-cache": { @@ -10096,6 +9521,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -10468,25 +9894,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-outer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/style-to-object": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", @@ -10837,25 +10244,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "dependencies": { - "escape-string-regexp": "^1.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/trim-repeated/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -11612,7 +11000,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/ws": { "version": "8.14.2", @@ -13213,11 +12602,6 @@ } } }, - "@emotion/hash": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", - "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" - }, "@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -13462,21 +12846,21 @@ } }, "@ionic/core": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.4.tgz", - "integrity": "sha512-rZbKlcVucRTDOK2Woh4CWPePlsXiUt3G9dCUniduKD7WeiuAk0GzfmoM3WXBvcUpkVTUIOrvKHaqd3JJSWEIzg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.8.6.tgz", + "integrity": "sha512-HAYZdEmeJgOdo2kDlZkcCGHb+zs/vjU6iv4skbVBL7y+OnSv/oC2u83Yee8S3/aY0YAxkyBgu7hLTYH13Zc2Aw==", "requires": { - "@stencil/core": "^4.7.1", - "ionicons": "^7.2.1", + "@stencil/core": "^4.12.2", + "ionicons": "^7.2.2", "tslib": "^2.1.0" } }, "@ionic/react": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.5.4.tgz", - "integrity": "sha512-SJ/iHPgHg5FeOka8AzoSWFM1zi923yqTEEqTjAJczjow4V276e3YWy5YoVzPMg+k2ti4YaIJSkUU9hypcwfDMg==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.8.6.tgz", + "integrity": "sha512-IIlcdOW2OmcrjC3nqGqQCcJdHDnEbGIfyzpKR0FDaRQ6M/a7Mz6IlIG/cgdGP0RBBadECykBFDfa6XgRAGwWoA==", "requires": { - "@ionic/core": "7.5.4", + "@ionic/core": "7.8.6", "ionicons": "^7.0.0", "tslib": "*" } @@ -13488,6 +12872,28 @@ "requires": { "@ionic/react": "7.5.4", "tslib": "*" + }, + "dependencies": { + "@ionic/core": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-7.5.4.tgz", + "integrity": "sha512-rZbKlcVucRTDOK2Woh4CWPePlsXiUt3G9dCUniduKD7WeiuAk0GzfmoM3WXBvcUpkVTUIOrvKHaqd3JJSWEIzg==", + "requires": { + "@stencil/core": "^4.7.1", + "ionicons": "^7.2.1", + "tslib": "^2.1.0" + } + }, + "@ionic/react": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@ionic/react/-/react-7.5.4.tgz", + "integrity": "sha512-SJ/iHPgHg5FeOka8AzoSWFM1zi923yqTEEqTjAJczjow4V276e3YWy5YoVzPMg+k2ti4YaIJSkUU9hypcwfDMg==", + "requires": { + "@ionic/core": "7.5.4", + "ionicons": "^7.0.0", + "tslib": "*" + } + } } }, "@ionic/utils-array": { @@ -13674,12 +13080,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@material-ui/types": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz", - "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==", - "requires": {} - }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -13713,9 +13113,9 @@ "dev": true }, "@stencil/core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.7.1.tgz", - "integrity": "sha512-KDWA/3qDiABA5LqtHCmTVwORuzgu/YdC0FpSBwVmwlw6K8jUjbTA5JB6Q03da2F+EQlDHOVgbW0TNtHCm54uXQ==" + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.19.2.tgz", + "integrity": "sha512-ZdnbHmHEl8E5vN0GWDtONe5w6j3CrSqqxZM4hNLBPkV/aouWKug7D5/Mi6RazfYO5U4fmHQYLwMz60rHcx0G4g==" }, "@testing-library/dom": { "version": "9.3.3", @@ -13999,14 +13399,6 @@ "@types/react-router": "*" } }, - "@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", - "requires": { - "@types/react": "*" - } - }, "@types/scheduler": { "version": "0.16.6", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.6.tgz", @@ -14394,19 +13786,6 @@ "is-string": "^1.0.7" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "requires": { - "array-uniq": "^1.0.1" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==" - }, "array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -14583,7 +13962,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "base64-js": { "version": "1.5.1", @@ -14637,6 +14017,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14857,11 +14238,6 @@ "string-width": "^4.2.0" } }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -14909,15 +14285,11 @@ "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "convert-source-map": { "version": "2.0.0", @@ -14957,15 +14329,6 @@ "which": "^2.0.1" } }, - "css-vendor": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", - "integrity": "sha512-x9Aq0XTInxrkuFeHKbYC7zWY8ai7qJ04Kxd9MnvbC1uO5DagxoHQjm4JvG+vCdXOoFtCjbL2XSZfxmoYa9uQVQ==", - "requires": { - "@babel/runtime": "^7.8.3", - "is-in-browser": "^1.0.2" - } - }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -15247,15 +14610,6 @@ "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, "domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -15290,11 +14644,6 @@ "sax": "1.1.4" } }, - "email-addresses": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", - "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==" - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -15811,21 +15160,6 @@ "flat-cache": "^3.0.4" } }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==" - }, - "filenamify": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-4.3.0.tgz", - "integrity": "sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==", - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.1", - "trim-repeated": "^1.0.0" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -15835,16 +15169,6 @@ "to-regex-range": "^5.0.1" } }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -15945,7 +15269,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "fsevents": { "version": "2.3.3", @@ -16039,62 +15364,11 @@ "assert-plus": "^1.0.0" } }, - "gh-pages": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-4.0.0.tgz", - "integrity": "sha512-p8S0T3aGJc68MtwOcZusul5qPSNZCalap3NWbhRUZYu1YOdp+EjZ+4kPmRM8h3NNRdqw00yuevRjlkuSzCn7iQ==", - "requires": { - "async": "^2.6.1", - "commander": "^2.18.0", - "email-addresses": "^3.0.1", - "filenamify": "^4.3.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "^8.1.0", - "globby": "^6.1.0" - }, - "dependencies": { - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { - "lodash": "^4.17.14" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - } - } - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16137,18 +15411,6 @@ "define-properties": "^1.1.3" } }, - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -16161,7 +15423,8 @@ "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true }, "graphemer": { "version": "1.4.0", @@ -16324,11 +15587,6 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, - "hyphenate-style-name": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", - "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" - }, "iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -16376,6 +15634,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -16384,7 +15643,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "ini": { "version": "2.0.0", @@ -16409,9 +15669,9 @@ } }, "ionicons": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.2.1.tgz", - "integrity": "sha512-2pvCM7DGVEtbbj48PJzQrCADCQrqjU1nUYX9l9PyEWz3ZfdnLdAouqwPxLdl8tbaF9cE7OZRSlyQD7oLOLnGoQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ionicons/-/ionicons-7.4.0.tgz", + "integrity": "sha512-ZK94MMqgzMCPPMhmk8Ouu6goyVHFIlw/ACP6oe3FrikcI0N7CX0xcwVaEbUc0G/v3W0shI93vo+9ve/KpvcNhQ==", "requires": { "@stencil/core": "^4.0.3" } @@ -16552,11 +15812,6 @@ "is-extglob": "^2.1.1" } }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha512-FeXIBgG/CPGd/WUxuEyvgGTEfwiG9Z4EKGxjNMRqviiIIfsmgrpnHLffEDdwUHqNva1VEW91o3xBT/m8Elgl9g==" - }, "is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", @@ -17045,84 +16300,6 @@ "verror": "1.10.0" } }, - "jss": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz", - "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==", - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^3.0.2", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-camel-case": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz", - "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==", - "requires": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.10.0" - } - }, - "jss-plugin-default-unit": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz", - "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-global": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz", - "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-nested": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz", - "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-props-sort": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz", - "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0" - } - }, - "jss-plugin-rule-value-function": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz", - "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==", - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.10.0", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-vendor-prefixer": { - "version": "10.10.0", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz", - "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==", - "requires": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.8", - "jss": "10.10.0" - } - }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -17212,7 +16389,8 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.debounce": { "version": "4.0.8", @@ -17319,14 +16497,6 @@ "@jridgewell/sourcemap-codec": "^1.4.15" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, "mdast-util-from-markdown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", @@ -17633,6 +16803,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -17874,6 +17045,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "requires": { "wrappy": "1" } @@ -17945,11 +17117,6 @@ "aggregate-error": "^3.0.0" } }, - "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==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -17971,12 +17138,14 @@ "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==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true }, "path-key": { "version": "3.1.1", @@ -18062,20 +17231,8 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "requires": { - "pinkie": "^2.0.0" - } + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true }, "pirates": { "version": "4.0.6", @@ -18083,49 +17240,6 @@ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "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-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.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" - } - } - } - }, "pkg-types": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", @@ -18148,11 +17262,6 @@ "xmlbuilder": "^15.1.1" } }, - "popper.js": { - "version": "1.16.1-lts", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz", - "integrity": "sha512-Kjw8nKRl1m+VrSFCoVGPph93W/qrSO7ZkqPpTf7F4bk/sqcfWK019dWBUpE/fBOsOQY1dks/Bmcbfn1heM/IsA==" - }, "postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -18371,7 +17480,8 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "react-markdown": { "version": "9.0.1", @@ -18442,158 +17552,6 @@ "jsonp": "^0.2.1" } }, - "react-share-social": { - "version": "0.1.55", - "resolved": "https://registry.npmjs.org/react-share-social/-/react-share-social-0.1.55.tgz", - "integrity": "sha512-Mkm6ucoKjj7ENXldz1B+BDtVA4Z387LEjJgtWhEzdrQGtYFGbK8fktZCsBLKTQhl0F/YvQxTrOlNl9DbxaVtHw==", - "requires": { - "@material-ui/core": "^4.11.4", - "gh-pages": "^4.0.0", - "react-share": "^4.3.1" - }, - "dependencies": { - "@material-ui/core": { - "version": "4.12.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.4.tgz", - "integrity": "sha512-tr7xekNlM9LjA6pagJmL8QCgZXaubWUwkJnoYcMKd4gw/t4XiyvnTkjdGrUVicyB2BsdaAv1tvow45bPM4sSwQ==", - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.11.5", - "@material-ui/system": "^4.12.2", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.4", - "hoist-non-react-statics": "^3.3.2", - "popper.js": "1.16.1-lts", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0", - "react-transition-group": "^4.4.0" - } - }, - "@material-ui/styles": { - "version": "4.11.5", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.11.5.tgz", - "integrity": "sha512-o/41ot5JJiUsIETME9wVLAJrmIWL3j0R0Bj2kCOLbSfqEkKf0fmaPt+5vtblUh5eXr2S+J/8J3DaCb10+CzPGA==", - "requires": { - "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.8.0", - "@material-ui/types": "5.1.0", - "@material-ui/utils": "^4.11.3", - "clsx": "^1.0.4", - "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.3.2", - "jss": "^10.5.1", - "jss-plugin-camel-case": "^10.5.1", - "jss-plugin-default-unit": "^10.5.1", - "jss-plugin-global": "^10.5.1", - "jss-plugin-nested": "^10.5.1", - "jss-plugin-props-sort": "^10.5.1", - "jss-plugin-rule-value-function": "^10.5.1", - "jss-plugin-vendor-prefixer": "^10.5.1", - "prop-types": "^15.7.2" - }, - "dependencies": { - "csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - } - } - }, - "@material-ui/system": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.12.2.tgz", - "integrity": "sha512-6CSKu2MtmiJgcCGf6nBQpM8fLkuB9F55EKfbdTC80NND5wpTmKzwdhLYLH3zL4cLlK0gVaaltW7/wMuyTnN0Lw==", - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.11.3", - "csstype": "^2.5.2", - "prop-types": "^15.7.2" - }, - "dependencies": { - "csstype": { - "version": "2.6.21", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", - "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" - } - } - }, - "@material-ui/utils": { - "version": "4.11.3", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.11.3.tgz", - "integrity": "sha512-ZuQPV4rBK/V1j2dIkSSEcH5uT6AaHuKWFfotADHsC0wVL1NLd2WkFCm4ZZbX33iO4ydl6V0GPngKm8HZQ2oujg==", - "requires": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0 || ^17.0.0" - } - }, - "@types/react": { - "version": "17.0.80", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.80.tgz", - "integrity": "sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA==", - "optional": true, - "peer": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "^0.16", - "csstype": "^3.0.2" - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-share": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/react-share/-/react-share-4.4.1.tgz", - "integrity": "sha512-AJ9m9RiJssqvYg7MoJUc9J0D7b/liWrsfQ99ndKc5vJ4oVHHd4Fy87jBlKEQPibT40oYA3AQ/a9/oQY6/yaigw==", - "requires": { - "classnames": "^2.3.2", - "jsonp": "^0.2.1" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - } - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -18903,7 +17861,8 @@ "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true }, "set-function-length": { "version": "1.1.1", @@ -19188,21 +18147,6 @@ "acorn": "^8.10.0" } }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, "style-to-object": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", @@ -19486,21 +18430,6 @@ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", - "requires": { - "escape-string-regexp": "^1.0.2" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, "trough": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", @@ -19986,7 +18915,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "ws": { "version": "8.14.2", diff --git a/package.json b/package.json index d75f083..0fc3597 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@capacitor/keyboard": "5.0.6", "@capacitor/share": "^5.0.6", "@capacitor/status-bar": "5.0.6", - "@ionic/react": "^7.0.0", + "@ionic/react": "^7.8.6", "@ionic/react-router": "^7.0.0", "@types/react-router": "^5.1.20", "@types/react-router-dom": "^5.3.3", @@ -45,9 +45,9 @@ "cypress": "^12.7.0", "eslint": "^8.35.0", "eslint-plugin-react": "^7.32.2", - "prettier": "^2.8.8", "jsdom": "^22.1.0", "postcss": "^8.4.31", + "prettier": "^2.8.8", "tailwindcss": "^3.3.5", "typescript": "^5.1.6", "vite": "^4.3.9", diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index f787690..0cc7719 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -25,6 +25,7 @@ interface CardProps { tag: string; teaser: string; speech_generated: number; + video: boolean; } export default function IonicCard({ @@ -35,27 +36,28 @@ export default function IonicCard({ manual_id, teaser, speech_generated, + video, + image, }: CardProps) { const [summary, setSummary] = useState(body.split(".")[0]); const [sentences, setSentences] = useState(body.split(".")); return ( -
+
{ e.preventDefault(); - window.location.href = `/post/${id}`; + window.location.href = video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`; }} > {/* Silhouette of mountains */} + { image!== null ? :
} {title} @@ -86,6 +91,8 @@ export default function IonicCard({ style={{ fontSize: "1.2rem", lineHeight: "1.75rem", + paddingLeft: 40, + paddingRight:40, }} > {teaser.length > 200 ? `${teaser.substring(0, 200)}...` : `${teaser}`} @@ -93,10 +100,13 @@ export default function IonicCard({ {/* have card modal button at bottom */}
{ // prevent routing to post page @@ -109,12 +119,13 @@ export default function IonicCard({ shape="round" size="small" color={"warning"} + className="hoverButton" onClick={(e) => { e.preventDefault(); - window.location.href = `/post/${id}`; + window.location.href = video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`; }} > - Read + {video? "Watch": "Read"} {speech_generated === 1 && ( { const [selectedVoiceId, setSelectedVoiceId] = useState( "21m00Tcm4TlvDq8ikWAM" ); const [isExpandedArray, setIsExpandedArray] = useState([]); - const [articles, setArticles] = useState([]); + const [articles, setArticles] = useState([]); const [usedVoiceIds, setUsedVoicesIds] = useState([ "D38z5RcWu1voky8WS1ja", "21m00Tcm4TlvDq8ikWAM", @@ -43,10 +57,59 @@ const Discover: React.FC = () => { }) .then((res) => res.json()) .then((resp) => { - setArticles(resp.data); - setFilteredArticles(resp.data); - setIsExpandedArray(new Array(resp.data.length).fill(false)); - console.log(resp.data); + const data = resp.data; + let resources: ArticleComponent[] = (data.map((resource: any) => { + return { + video: false, + title: resource.attributes.title, + teaser: resource.attributes.teasers, + link: resource.attributes.link, + imageURL: null, + tag: "article", + speech_generated: resource.attributes.speech_generated, + body: resource.attributes.body, + }; + })); + fetch(`${import.meta.env.VITE_STRAPI_URL}/api/videos?populate=*`, { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, + }).then((res) => res.json()) + .then((response) => { + const videoData = response.data; + videoData.map((videoURL: any) => { + const videoID = videoURL.attributes.url.split("v=")[1]; + fetch(`https://www.googleapis.com/youtube/v3/videos?id=${videoID}&key=AIzaSyAi1dPx0fqC8EP9YoaNo1WPsykq_yVczCY&part=snippet,contentDetails,statistics,status®ionCode=us`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + }, + }).then((res) => res.json()) + .then((resp) => { + const videoTitle = resp.items[0].snippet.title; + const videoDescription = resp.items[0].snippet.description.split(".").splice(0, 2).join("."); + resources.push({ + id: videoID, + video: true, + title: videoTitle, + teaser: videoDescription, + link: videoURL.attributes.url, + tag: "video", + speech_generated: videoDescription, + author: resp.items[0].snippet.channelID, + imageURL: resp.items[0].snippet.thumbnails.high.url, + manual_id: "0", + }); + resources = resources.sort((a, b) => a.title.localeCompare(b.title)); + setArticles(resources); + console.log(articles) + setFilteredArticles(resources); + setIsExpandedArray(new Array(resources.length).fill(false)); + }) + }) + }); }); }, []); @@ -223,25 +286,26 @@ const Discover: React.FC = () => {
-
+
{filteredArticles && filteredArticles.length > 0 && filteredArticles.map((article: any, index: number) => (
handleExpandCard(index)} index={index} - manual_id={article.attributes.manual_id} - teaser={article.attributes.teasers} - speech_generated={article.attributes.speech_generated} + manual_id={article.manual_id} + teaser={article.teaser} + speech_generated={article.speech_generated} + video={article.video} />
))} diff --git a/src/theme/tailwind.css b/src/theme/tailwind.css index cdb6dee..2fba6db 100644 --- a/src/theme/tailwind.css +++ b/src/theme/tailwind.css @@ -14,4 +14,12 @@ p { margin: revert; } + + .hoverCard:hover { + filter: drop-shadow(0px 0px 4px var( --ion-color-dark)); + } + + .hoverButton:hover { + filter: drop-shadow(0px 0px 1px var(--ion-color-medium-contrast)); + } } From 6f2d1ec815ddac58686a34de5cd6fa5fa07e2322 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Tue, 16 Jul 2024 15:05:30 -0400 Subject: [PATCH 02/54] filter --- src/components/CardModal.tsx | 6 ++- src/components/IonicCard.tsx | 5 ++- src/pages/Discover.tsx | 85 ++++++++++++------------------------ src/theme/tailwind.css | 4 -- 4 files changed, 36 insertions(+), 64 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 7873d91..da7a210 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -126,6 +126,8 @@ const CardModal: React.FC = ({ "This modal example uses triggers to automatically open a modal when the button is clicked." ); + const [hover, setHover] = useState(false); + function confirm() { modal.current?.dismiss(input.current?.value, "confirm"); } @@ -143,7 +145,7 @@ const CardModal: React.FC = ({ <> = ({ e.preventDefault(); //modal.current?.present(); }} + onMouseEnter = {() => setHover(true)} + onMouseLeave = {() => setHover(false)} > Listen diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index 0cc7719..f06dde3 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -41,6 +41,7 @@ export default function IonicCard({ }: CardProps) { const [summary, setSummary] = useState(body.split(".")[0]); const [sentences, setSentences] = useState(body.split(".")); + const [hover, setHover] = useState(false); return (
@@ -115,7 +116,7 @@ export default function IonicCard({ }} > setHover(true)} + onMouseLeave = {() => setHover(false)} > {video? "Watch": "Read"} diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index c354dcd..137b58a 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -14,7 +14,7 @@ import { IonSearchbar, IonText, } from "@ionic/react"; -import { flag, informationCircleOutline, play } from "ionicons/icons"; +import { closeOutline, flag, informationCircleOutline, play } from "ionicons/icons"; const token = import.meta.env.VITE_STRAPY_TOKEN; const apiKey = import.meta.env.VITE_ELEVEN_LABS_API_KEY; @@ -38,6 +38,7 @@ const Discover: React.FC = () => { ); const [isExpandedArray, setIsExpandedArray] = useState([]); const [articles, setArticles] = useState([]); + const [filters, setFilters] = useState([]); const [usedVoiceIds, setUsedVoicesIds] = useState([ "D38z5RcWu1voky8WS1ja", "21m00Tcm4TlvDq8ikWAM", @@ -104,7 +105,6 @@ const Discover: React.FC = () => { }); resources = resources.sort((a, b) => a.title.localeCompare(b.title)); setArticles(resources); - console.log(articles) setFilteredArticles(resources); setIsExpandedArray(new Array(resources.length).fill(false)); }) @@ -143,6 +143,18 @@ const Discover: React.FC = () => { console.log(filteredArticles); }, [searchText]); + useEffect(() => { + if(filters.length !== 0) { + let filteredArticles = articles + filters.forEach((filter) => { + filteredArticles = filteredArticles.filter((article: any) => article.tag === filter); + }) + setFilteredArticles(filteredArticles); + } else { + setFilteredArticles(articles); + } + }, [filters]); + const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); }; @@ -189,67 +201,27 @@ const Discover: React.FC = () => {
-
+
- -
- - - Explore the articles we have - - -
- {/* - +
+ !filters.includes("article") ? setFilters(filters.concat(["article"])) : setFilters(filters.filter(filter => filter !== 'article'))}> + {filters.includes("article") ? :
} Articles - - TikToks - - - Short Facts + !filters.includes("video") ? setFilters(filters.concat(["video"])) : setFilters(filters.filter(filter => filter !== 'video'))}> + {filters.includes("video") ? :
} + Videos - - Instagram Posts + !filters.includes("audio") ? setFilters(filters.concat(["audio"])) : setFilters(filters.filter(filter => filter !== 'audio'))}> + {filters.includes("audio") ? :
} + Audio Available - - Articles - - - TikToks - - - Short Facts - - */} - - {/*
*/} - {/* { - console.log(event.target.value); - setSearchText(event.target.value); - }} - mode="ios" - animated={true} - placeholder="Search for what you are looking for..." - color={"warning"} - style={{ - borderRadius: 40, - maxWidth: 600, - margin: "auto", - }} - > */} +
+
{ }} > Select your voice - {/* - - */} {
-
+
{filteredArticles && filteredArticles.length > 0 && filteredArticles.map((article: any, index: number) => ( diff --git a/src/theme/tailwind.css b/src/theme/tailwind.css index 2fba6db..5c7d1a3 100644 --- a/src/theme/tailwind.css +++ b/src/theme/tailwind.css @@ -18,8 +18,4 @@ .hoverCard:hover { filter: drop-shadow(0px 0px 4px var( --ion-color-dark)); } - - .hoverButton:hover { - filter: drop-shadow(0px 0px 1px var(--ion-color-medium-contrast)); - } } From 3472b023e1006c91d186df6a43ecd2a5a2717fb9 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Tue, 16 Jul 2024 15:41:57 -0400 Subject: [PATCH 03/54] styling changes --- src/components/CardModal.tsx | 2 +- src/components/Footer.tsx | 68 ++++++++++-------------------------- src/components/IonicCard.tsx | 6 ++-- src/components/Navbar.tsx | 6 ++-- src/theme/tailwind.css | 8 +++++ 5 files changed, 34 insertions(+), 56 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index da7a210..cb84006 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -147,7 +147,7 @@ const CardModal: React.FC = ({ id={`${id}open-modal`} fill= { hover ? "outline": "solid"} shape="round" - color="success" + color="secondary" size="small" onClick={(e) => { e.preventDefault(); diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 8149577..d067438 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -1,6 +1,8 @@ import { useLocation } from "react-router"; -import { IonAlert, IonButton } from "@ionic/react"; +import { IonAlert, IonButton, IonIcon } from "@ionic/react"; import { useState } from "react"; +import { LinkedinIcon } from "react-share"; +import { logoFacebook, logoInstagram, logoLinkedin, logoTwitter } from "ionicons/icons"; const Footer = () => { const route = useLocation(); @@ -46,71 +48,39 @@ const Footer = () => {
Follow us
-
Email
contact@cycminds.org diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index f06dde3..b997e89 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -46,7 +46,7 @@ export default function IonicCard({ return (
{ e.preventDefault(); diff --git a/src/components/Navbar.tsx b/src/components/Navbar.tsx index 5b13d78..10df4f0 100644 --- a/src/components/Navbar.tsx +++ b/src/components/Navbar.tsx @@ -98,14 +98,14 @@ const Navbar = () => { > {navigation.map((item) => { const color = location.pathname.includes(item.href) - ? "bg-orange-400" - : "bg-orange-600"; + ? "text-orange-600" + : "text-orange-400"; return (
  • {item.name} diff --git a/src/theme/tailwind.css b/src/theme/tailwind.css index 5c7d1a3..e6124f7 100644 --- a/src/theme/tailwind.css +++ b/src/theme/tailwind.css @@ -18,4 +18,12 @@ .hoverCard:hover { filter: drop-shadow(0px 0px 4px var( --ion-color-dark)); } + + .hoverLink:hover { + text-decoration: underline; + } + + .hoverIcon:hover { + color:var(--ion-color-primary); + } } From f82404c45ba261da9e16297a31f74609bddad3b7 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Tue, 16 Jul 2024 16:23:17 -0400 Subject: [PATCH 04/54] swap colors --- src/components/CardModal.tsx | 2 +- src/components/IonicCard.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index cb84006..687c1c2 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -147,7 +147,7 @@ const CardModal: React.FC = ({ id={`${id}open-modal`} fill= { hover ? "outline": "solid"} shape="round" - color="secondary" + color="light" size="small" onClick={(e) => { e.preventDefault(); diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index b997e89..b294ed8 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -119,7 +119,7 @@ export default function IonicCard({ fill= { hover ? "outline": "solid"} shape="round" size="small" - color={"light"} + color={"secondary"} className="hoverButton" onClick={(e) => { e.preventDefault(); From 64d988ffd4cec38974484c9fc0d39a4d9b6cb00d Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Tue, 16 Jul 2024 16:57:17 -0400 Subject: [PATCH 05/54] fix link --- src/components/IonicCard.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index b294ed8..8b01f92 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -6,10 +6,12 @@ import { IonCardSubtitle, IonCardTitle, IonChip, + IonIcon, IonLabel, } from "@ionic/react"; import React, { useState } from "react"; import CardModal from "./CardModal"; +import { playCircle, playCircleOutline } from "ionicons/icons"; interface CardProps { id: string; @@ -54,11 +56,11 @@ export default function IonicCard({ button onClick={(e) => { e.preventDefault(); - window.location.href = video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`; + window.open( video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`, '_blank'); }} > {/* Silhouette of mountains */} - { image!== null ? :
    } + { image!== null ?
    :
    } Date: Tue, 16 Jul 2024 16:57:37 -0400 Subject: [PATCH 06/54] play button --- src/pages/Discover.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 137b58a..a4d7042 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -61,6 +61,7 @@ const Discover: React.FC = () => { const data = resp.data; let resources: ArticleComponent[] = (data.map((resource: any) => { return { + id: resource.id, video: false, title: resource.attributes.title, teaser: resource.attributes.teasers, From 85ff9ed625038507a9c03575e055711e806ce427 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 10:25:02 -0400 Subject: [PATCH 07/54] fix button positioning --- src/components/IonicCard.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index 8b01f92..69c9627 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -44,6 +44,7 @@ export default function IonicCard({ const [summary, setSummary] = useState(body.split(".")[0]); const [sentences, setSentences] = useState(body.split(".")); const [hover, setHover] = useState(false); + const [playCircleColor, setPlayCircleColor] = useState("invert(1.0)"); return (
    @@ -60,7 +61,7 @@ export default function IonicCard({ }} > {/* Silhouette of mountains */} - { image!== null ?
    :
    } + { image!== null ?
    setPlayCircleColor("invert(0.9)")} onMouseLeave = {() => setPlayCircleColor("invert(1.0)")}>
    :
    } {teaser.length > 200 ? `${teaser.substring(0, 200)}...` : `${teaser}`} @@ -103,13 +105,11 @@ export default function IonicCard({ {/* have card modal button at bottom */}
    { // prevent routing to post page From d5b38e96caeff518ae7f711fff8f477b4f8e9da9 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 10:50:19 -0400 Subject: [PATCH 08/54] add button component --- src/components/Button.tsx | 17 ++++++++++++++++ src/components/Empower.tsx | 4 +++- src/pages/Index.tsx | 40 +++++++++++++++++++------------------- 3 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 src/components/Button.tsx diff --git a/src/components/Button.tsx b/src/components/Button.tsx new file mode 100644 index 0000000..e82bf74 --- /dev/null +++ b/src/components/Button.tsx @@ -0,0 +1,17 @@ +interface ButtonProps { + text: string; + backgroundColor: string; + size: string; + } + + const Button: React.FC = ({ text, backgroundColor, size }) => { + return ( + + ); + } + + export default Button; \ No newline at end of file diff --git a/src/components/Empower.tsx b/src/components/Empower.tsx index 99e0a5e..3be8eea 100644 --- a/src/components/Empower.tsx +++ b/src/components/Empower.tsx @@ -4,6 +4,7 @@ interface EmpowerProps { bgColor?: string; btnElement?: JSX.Element; rounded?: boolean; + textColor?: string; } const Empower = ({ @@ -12,6 +13,7 @@ const Empower = ({ bgColor, btnElement, rounded = false, + textColor, }: EmpowerProps) => { return (
    @@ -27,7 +29,7 @@ const Empower = ({

    {title}

    -

    +

    {description}

    {btnElement}
    diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index fea8f3e..c370db4 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -1,12 +1,15 @@ +import React from "react"; import CenterDescriptionCards from "../components/CenterDescriptionCards"; import Empower from "../components/Empower"; import HelpInfographics from "../components/HelpInfographics"; import NewHero from "../components/NewHero"; import SocialInfographics from "../components/SocialInfographics"; import { useHistory } from "react-router"; +import Button from "../components/Button"; const Index: React.FC = () => { const history = useHistory(); + const [hover, setHover] = React.useState(false); return (
    @@ -27,17 +30,15 @@ const Index: React.FC = () => { { - history.push("/discover"); - }} - > - Read More - +
    { + history.push("/discover"); + }}>
    } />
    @@ -46,18 +47,17 @@ const Index: React.FC = () => { { - history.push("/about-us"); - }} - > - Read More - +
    { + history.push("/about-us"); + }}>
    } />
    From 767f1b8dab09127942c279a3d6f0631974cf03f5 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 10:55:30 -0400 Subject: [PATCH 09/54] prettier format --- .eslintrc.js | 17 +-- .vscode/extensions.json | 4 +- capacitor.config.ts | 12 +- cypress.config.ts | 2 +- cypress/e2e/test.cy.ts | 12 +- cypress/support/commands.ts | 2 +- cypress/support/e2e.ts | 4 +- index.html | 10 +- postcss.config.js | 2 +- src/components/Button.tsx | 31 +++-- src/components/CardModal.tsx | 6 +- src/components/Cloud.css | 2 +- src/components/Empower.tsx | 4 +- src/components/ExploreContainer.css | 2 +- src/components/Footer.tsx | 23 ++-- src/components/IonicCard.tsx | 59 ++++++-- src/components/Menu.css | 5 +- src/pages/Discover.tsx | 205 ++++++++++++++++++---------- src/pages/Index.tsx | 37 +++-- src/setupTests.ts | 14 +- src/theme/tailwind.css | 4 +- vite.config.ts | 19 ++- 22 files changed, 291 insertions(+), 185 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index af472a1..5c60c32 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,17 +1,14 @@ module.exports = { root: true, env: { - node: true + node: true, }, - 'extends': [ - 'plugin:react/recommended', - 'eslint:recommended' - ], + extends: ["plugin:react/recommended", "eslint:recommended"], parserOptions: { - ecmaVersion: 2020 + ecmaVersion: 2020, }, rules: { - 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', - } -} + "no-console": process.env.NODE_ENV === "production" ? "warn" : "off", + "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off", + }, +}; diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ffcebbe..86abac9 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,5 +1,3 @@ { - "recommendations": [ - "ionic.ionic" - ] + "recommendations": ["ionic.ionic"] } diff --git a/capacitor.config.ts b/capacitor.config.ts index 7308aa5..421ea28 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -1,12 +1,12 @@ -import { CapacitorConfig } from '@capacitor/cli'; +import { CapacitorConfig } from "@capacitor/cli"; const config: CapacitorConfig = { - appId: 'io.ionic.starter', - appName: 'cycm-ionic', - webDir: 'dist', + appId: "io.ionic.starter", + appName: "cycm-ionic", + webDir: "dist", server: { - androidScheme: 'https' - } + androidScheme: "https", + }, }; export default config; diff --git a/cypress.config.ts b/cypress.config.ts index 5d58e7a..e7077cd 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -7,4 +7,4 @@ export default defineConfig({ // implement node event listeners here }, }, -}); \ No newline at end of file +}); diff --git a/cypress/e2e/test.cy.ts b/cypress/e2e/test.cy.ts index 4f3230b..4698a59 100644 --- a/cypress/e2e/test.cy.ts +++ b/cypress/e2e/test.cy.ts @@ -1,6 +1,6 @@ -describe('My First Test', () => { - it('Visits the app root url', () => { - cy.visit('/folder/Inbox') - cy.contains('#container', 'Inbox') - }) -}) +describe("My First Test", () => { + it("Visits the app root url", () => { + cy.visit("/folder/Inbox"); + cy.contains("#container", "Inbox"); + }); +}); diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts index 698b01a..95857ae 100644 --- a/cypress/support/commands.ts +++ b/cypress/support/commands.ts @@ -34,4 +34,4 @@ // visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable // } // } -// } \ No newline at end of file +// } diff --git a/cypress/support/e2e.ts b/cypress/support/e2e.ts index f80f74f..6a173d6 100644 --- a/cypress/support/e2e.ts +++ b/cypress/support/e2e.ts @@ -14,7 +14,7 @@ // *********************************************************** // Import commands.js using ES2015 syntax: -import './commands' +import "./commands"; // Alternatively you can use CommonJS syntax: -// require('./commands') \ No newline at end of file +// require('./commands') diff --git a/index.html b/index.html index 8b211c1..10c2458 100644 --- a/index.html +++ b/index.html @@ -3,9 +3,9 @@ CYCM - + - + - + - + - + diff --git a/postcss.config.js b/postcss.config.js index 2e7af2b..2aa7205 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -3,4 +3,4 @@ export default { tailwindcss: {}, autoprefixer: {}, }, -} +}; diff --git a/src/components/Button.tsx b/src/components/Button.tsx index e82bf74..510a4da 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,17 +1,18 @@ interface ButtonProps { - text: string; - backgroundColor: string; - size: string; - } + text: string; + backgroundColor: string; + size: string; +} - const Button: React.FC = ({ text, backgroundColor, size }) => { - return ( - - ); - } - - export default Button; \ No newline at end of file +const Button: React.FC = ({ text, backgroundColor, size }) => { + return ( + + ); +}; + +export default Button; diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 687c1c2..634de61 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -145,7 +145,7 @@ const CardModal: React.FC = ({ <> = ({ e.preventDefault(); //modal.current?.present(); }} - onMouseEnter = {() => setHover(true)} - onMouseLeave = {() => setHover(false)} + onMouseEnter={() => setHover(true)} + onMouseLeave={() => setHover(false)} > Listen diff --git a/src/components/Cloud.css b/src/components/Cloud.css index 10c76cf..63d4e12 100644 --- a/src/components/Cloud.css +++ b/src/components/Cloud.css @@ -71,4 +71,4 @@ --x-3: rgba(194, 203, 231, 1); --x-4: rgba(123, 108, 246, 1); --x-5: rgba(227, 215, 252, 1); -} \ No newline at end of file +} diff --git a/src/components/Empower.tsx b/src/components/Empower.tsx index 3be8eea..b891053 100644 --- a/src/components/Empower.tsx +++ b/src/components/Empower.tsx @@ -29,7 +29,9 @@ const Empower = ({

    {title}

    -

    +

    {description}

    {btnElement}
    diff --git a/src/components/ExploreContainer.css b/src/components/ExploreContainer.css index c2c47cf..bdb7b99 100644 --- a/src/components/ExploreContainer.css +++ b/src/components/ExploreContainer.css @@ -21,4 +21,4 @@ #container a { text-decoration: none; -} \ No newline at end of file +} diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index d067438..4ab9404 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -2,7 +2,12 @@ import { useLocation } from "react-router"; import { IonAlert, IonButton, IonIcon } from "@ionic/react"; import { useState } from "react"; import { LinkedinIcon } from "react-share"; -import { logoFacebook, logoInstagram, logoLinkedin, logoTwitter } from "ionicons/icons"; +import { + logoFacebook, + logoInstagram, + logoLinkedin, + logoTwitter, +} from "ionicons/icons"; const Footer = () => { const route = useLocation(); @@ -53,26 +58,26 @@ const Footer = () => { className="flex font-medium items-center text-white hoverIcon" href="https://www.facebook.com/" > - + - + - + - - + className="flex font-medium items-center text-white hoverIcon" + href="https://www.linkedin.com/" + > + +
    diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index 69c9627..28c23cc 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -47,21 +47,56 @@ export default function IonicCard({ const [playCircleColor, setPlayCircleColor] = useState("invert(1.0)"); return ( -
    +
    { e.preventDefault(); - window.open( video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`, '_blank'); + window.open( + video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`, + "_blank" + ); }} > {/* Silhouette of mountains */} - { image!== null ?
    setPlayCircleColor("invert(0.9)")} onMouseLeave = {() => setPlayCircleColor("invert(1.0)")}>
    :
    } + {image !== null ? ( +
    setPlayCircleColor("invert(0.9)")} + onMouseLeave={() => setPlayCircleColor("invert(1.0)")} + > + + +
    + ) : ( +
    + )} @@ -96,7 +131,7 @@ export default function IonicCard({ fontSize: "1.2rem", lineHeight: "1.75rem", paddingLeft: 40, - paddingRight:40, + paddingRight: 40, paddingBottom: 80, }} > @@ -118,19 +153,21 @@ export default function IonicCard({ }} > { e.preventDefault(); - window.location.href = video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`; + window.location.href = video + ? `https://www.youtube.com/watch?v=${id}` + : `/post/${id}`; }} - onMouseEnter = {() => setHover(true)} - onMouseLeave = {() => setHover(false)} + onMouseEnter={() => setHover(true)} + onMouseLeave={() => setHover(false)} > - {video? "Watch": "Read"} + {video ? "Watch" : "Read"} {speech_generated === 1 && ( { const [selectedVoiceId, setSelectedVoiceId] = useState( @@ -59,58 +64,68 @@ const Discover: React.FC = () => { .then((res) => res.json()) .then((resp) => { const data = resp.data; - let resources: ArticleComponent[] = (data.map((resource: any) => { - return { - id: resource.id, - video: false, - title: resource.attributes.title, - teaser: resource.attributes.teasers, - link: resource.attributes.link, - imageURL: null, - tag: "article", - speech_generated: resource.attributes.speech_generated, - body: resource.attributes.body, - }; - })); - fetch(`${import.meta.env.VITE_STRAPI_URL}/api/videos?populate=*`, { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: `Bearer ${token}`, - }, - }).then((res) => res.json()) - .then((response) => { - const videoData = response.data; - videoData.map((videoURL: any) => { - const videoID = videoURL.attributes.url.split("v=")[1]; - fetch(`https://www.googleapis.com/youtube/v3/videos?id=${videoID}&key=AIzaSyAi1dPx0fqC8EP9YoaNo1WPsykq_yVczCY&part=snippet,contentDetails,statistics,status®ionCode=us`, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - }, - }).then((res) => res.json()) - .then((resp) => { - const videoTitle = resp.items[0].snippet.title; - const videoDescription = resp.items[0].snippet.description.split(".").splice(0, 2).join("."); - resources.push({ - id: videoID, - video: true, - title: videoTitle, - teaser: videoDescription, - link: videoURL.attributes.url, - tag: "video", - speech_generated: videoDescription, - author: resp.items[0].snippet.channelID, - imageURL: resp.items[0].snippet.thumbnails.high.url, - manual_id: "0", - }); - resources = resources.sort((a, b) => a.title.localeCompare(b.title)); - setArticles(resources); - setFilteredArticles(resources); - setIsExpandedArray(new Array(resources.length).fill(false)); + let resources: ArticleComponent[] = data.map((resource: any) => { + return { + id: resource.id, + video: false, + title: resource.attributes.title, + teaser: resource.attributes.teasers, + link: resource.attributes.link, + imageURL: null, + tag: "article", + speech_generated: resource.attributes.speech_generated, + body: resource.attributes.body, + }; + }); + fetch(`${import.meta.env.VITE_STRAPI_URL}/api/videos?populate=*`, { + method: "GET", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${token}`, + }, }) - }) - }); + .then((res) => res.json()) + .then((response) => { + const videoData = response.data; + videoData.map((videoURL: any) => { + const videoID = videoURL.attributes.url.split("v=")[1]; + fetch( + `https://www.googleapis.com/youtube/v3/videos?id=${videoID}&key=AIzaSyAi1dPx0fqC8EP9YoaNo1WPsykq_yVczCY&part=snippet,contentDetails,statistics,status®ionCode=us`, + { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + } + ) + .then((res) => res.json()) + .then((resp) => { + const videoTitle = resp.items[0].snippet.title; + const videoDescription = resp.items[0].snippet.description + .split(".") + .splice(0, 2) + .join("."); + resources.push({ + id: videoID, + video: true, + title: videoTitle, + teaser: videoDescription, + link: videoURL.attributes.url, + tag: "video", + speech_generated: videoDescription, + author: resp.items[0].snippet.channelID, + imageURL: resp.items[0].snippet.thumbnails.high.url, + manual_id: "0", + }); + resources = resources.sort((a, b) => + a.title.localeCompare(b.title) + ); + setArticles(resources); + setFilteredArticles(resources); + setIsExpandedArray(new Array(resources.length).fill(false)); + }); + }); + }); }); }, []); @@ -145,11 +160,13 @@ const Discover: React.FC = () => { }, [searchText]); useEffect(() => { - if(filters.length !== 0) { - let filteredArticles = articles + if (filters.length !== 0) { + let filteredArticles = articles; filters.forEach((filter) => { - filteredArticles = filteredArticles.filter((article: any) => article.tag === filter); - }) + filteredArticles = filteredArticles.filter( + (article: any) => article.tag === filter + ); + }); setFilteredArticles(filteredArticles); } else { setFilteredArticles(articles); @@ -208,21 +225,63 @@ const Discover: React.FC = () => { margin: "auto", }} > -
    - !filters.includes("article") ? setFilters(filters.concat(["article"])) : setFilters(filters.filter(filter => filter !== 'article'))}> - {filters.includes("article") ? :
    } - Articles - - !filters.includes("video") ? setFilters(filters.concat(["video"])) : setFilters(filters.filter(filter => filter !== 'video'))}> - {filters.includes("video") ? :
    } - Videos - - !filters.includes("audio") ? setFilters(filters.concat(["audio"])) : setFilters(filters.filter(filter => filter !== 'audio'))}> - {filters.includes("audio") ? :
    } - Audio Available - -
    -
    +
    + + !filters.includes("article") + ? setFilters(filters.concat(["article"])) + : setFilters( + filters.filter((filter) => filter !== "article") + ) + } + > + {filters.includes("article") ? ( + + ) : ( +
    + )} + Articles + + + !filters.includes("video") + ? setFilters(filters.concat(["video"])) + : setFilters( + filters.filter((filter) => filter !== "video") + ) + } + > + {filters.includes("video") ? ( + + ) : ( +
    + )} + Videos + + + !filters.includes("audio") + ? setFilters(filters.concat(["audio"])) + : setFilters( + filters.filter((filter) => filter !== "audio") + ) + } + > + {filters.includes("audio") ? ( + + ) : ( +
    + )} + Audio Available + +
    +
    { { const history = useHistory(); - const [hover, setHover] = React.useState(false); return (
    @@ -32,13 +31,17 @@ const Index: React.FC = () => { description="Discover helpful resources and articles to promote mental health awareness and support for teens. Together, we can create a safe and nurturing environment for their well-being." bgColor="transparent" btnElement={ -
    { - history.push("/discover"); - }}>
    +
    { + history.push("/discover"); + }} + > +
    } />
    @@ -51,13 +54,17 @@ const Index: React.FC = () => { rounded textColor="white" btnElement={ -
    { - history.push("/about-us"); - }}>
    +
    { + history.push("/about-us"); + }} + > +
    } />
    diff --git a/src/setupTests.ts b/src/setupTests.ts index 87988d6..ad7e4bc 100644 --- a/src/setupTests.ts +++ b/src/setupTests.ts @@ -2,13 +2,15 @@ // allows you to do things like: // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom/extend-expect'; +import "@testing-library/jest-dom/extend-expect"; // Mock matchmedia -window.matchMedia = window.matchMedia || function() { - return { +window.matchMedia = + window.matchMedia || + function () { + return { matches: false, - addListener: function() {}, - removeListener: function() {} + addListener: function () {}, + removeListener: function () {}, + }; }; -}; diff --git a/src/theme/tailwind.css b/src/theme/tailwind.css index e6124f7..864a530 100644 --- a/src/theme/tailwind.css +++ b/src/theme/tailwind.css @@ -16,7 +16,7 @@ } .hoverCard:hover { - filter: drop-shadow(0px 0px 4px var( --ion-color-dark)); + filter: drop-shadow(0px 0px 4px var(--ion-color-dark)); } .hoverLink:hover { @@ -24,6 +24,6 @@ } .hoverIcon:hover { - color:var(--ion-color-primary); + color: var(--ion-color-primary); } } diff --git a/vite.config.ts b/vite.config.ts index ba7e47f..c1f8877 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,16 +1,13 @@ -import legacy from '@vitejs/plugin-legacy' -import react from '@vitejs/plugin-react' -import { defineConfig } from 'vite' +import legacy from "@vitejs/plugin-legacy"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [ - react(), - legacy() - ], + plugins: [react(), legacy()], test: { globals: true, - environment: 'jsdom', - setupFiles: './src/setupTests.ts', - } -}) + environment: "jsdom", + setupFiles: "./src/setupTests.ts", + }, +}); From 54cf71d56ede87e27f16f473808ecf248caeafed Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 11:13:30 -0400 Subject: [PATCH 10/54] button edits --- src/components/Button.tsx | 3 +-- src/pages/Index.tsx | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 510a4da..ad4aa5b 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -7,8 +7,7 @@ interface ButtonProps { const Button: React.FC = ({ text, backgroundColor, size }) => { return ( diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 5728fe2..be0e8e6 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -38,7 +38,7 @@ const Index: React.FC = () => { >
    From 11d3a145e26624f474ef337d0fa3b07a615c359c Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 11:50:42 -0400 Subject: [PATCH 11/54] fix button --- src/components/Button.tsx | 28 +++++++++++++++++++++++++--- src/components/CardModal.tsx | 18 ++++++++---------- src/components/IonicCard.tsx | 19 ++++++++----------- src/pages/Index.tsx | 29 +++++++++++++---------------- tailwind.config.js | 1 + 5 files changed, 55 insertions(+), 40 deletions(-) diff --git a/src/components/Button.tsx b/src/components/Button.tsx index ad4aa5b..38852ac 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -1,13 +1,35 @@ +import { useState } from "react"; + interface ButtonProps { + id?: string; text: string; backgroundColor: string; - size: string; + textColor?: string; + size?: string | number; + py: string | number, + px: string | number, + onClick?: (e: any) => void; } -const Button: React.FC = ({ text, backgroundColor, size }) => { +let Button: React.FC = ({ id, text, backgroundColor, textColor, size, px, py, onClick }) => { + const [hover, setHover] = useState(false); return ( diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 634de61..d7e9e8b 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -25,6 +25,7 @@ import { closeCircle, pauseCircle, } from "ionicons/icons"; +import Button from "./Button"; interface Props { title: string; @@ -143,21 +144,18 @@ const CardModal: React.FC = ({ return ( <> - { e.preventDefault(); //modal.current?.present(); }} - onMouseEnter={() => setHover(true)} - onMouseLeave={() => setHover(false)} - > - Listen - + /> - { e.preventDefault(); window.location.href = video ? `https://www.youtube.com/watch?v=${id}` : `/post/${id}`; }} - onMouseEnter={() => setHover(true)} - onMouseLeave={() => setHover(false)} - > - {video ? "Watch" : "Read"} - + /> {speech_generated === 1 && ( { description="Discover helpful resources and articles to promote mental health awareness and support for teens. Together, we can create a safe and nurturing environment for their well-being." bgColor="transparent" btnElement={ -
    { - history.push("/discover"); - }} - >
    } />
    @@ -54,17 +53,15 @@ const Index: React.FC = () => { rounded textColor="white" btnElement={ -
    { - history.push("/about-us"); - }} - >
    } />
    diff --git a/tailwind.config.js b/tailwind.config.js index 813a383..34f4a0e 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,5 @@ /** @type {import('tailwindcss').Config} */ +const colors = require('tailwindcss/colors') export default { content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], theme: { From 453f7ba8e8b6872edb610a877c455d2ca26d93d3 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 12:05:45 -0400 Subject: [PATCH 12/54] fix background --- src/pages/Index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 7d523e7..0039edf 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -29,11 +29,11 @@ const Index: React.FC = () => { { Date: Wed, 17 Jul 2024 12:20:10 -0400 Subject: [PATCH 13/54] fix text color --- src/pages/Index.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 0039edf..76a38ae 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -30,6 +30,7 @@ const Index: React.FC = () => { Date: Wed, 17 Jul 2024 12:21:36 -0400 Subject: [PATCH 14/54] fix the play button align --- src/pages/Discover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index eb1a4a3..ff8a47b 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -285,7 +285,7 @@ const Discover: React.FC = () => {
    Date: Wed, 17 Jul 2024 12:28:03 -0400 Subject: [PATCH 15/54] fix filters logic --- src/pages/Discover.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index ff8a47b..b6ffe8f 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -43,7 +43,7 @@ const Discover: React.FC = () => { ); const [isExpandedArray, setIsExpandedArray] = useState([]); const [articles, setArticles] = useState([]); - const [filters, setFilters] = useState([]); + const [filters, setFilters] = useState(["article", "video", "audio"]); const [usedVoiceIds, setUsedVoicesIds] = useState([ "D38z5RcWu1voky8WS1ja", "21m00Tcm4TlvDq8ikWAM", @@ -161,10 +161,10 @@ const Discover: React.FC = () => { useEffect(() => { if (filters.length !== 0) { - let filteredArticles = articles; + let filteredArticles: ArticleComponent[] = []; filters.forEach((filter) => { - filteredArticles = filteredArticles.filter( - (article: any) => article.tag === filter + articles.map( + (article: any) => article.tag === filter && !filteredArticles.includes(article) ? filteredArticles.push(article) : null ); }); setFilteredArticles(filteredArticles); From 960db9338eb70fe9f15d5d2642aaf05fd86f9164 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 12:41:30 -0400 Subject: [PATCH 16/54] sort by date instead of alphabetical --- src/pages/Discover.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index b6ffe8f..07850d3 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -35,6 +35,7 @@ type ArticleComponent = { author: string; manual_id: string; body?: string; + date: Date; }; const Discover: React.FC = () => { @@ -75,6 +76,7 @@ const Discover: React.FC = () => { tag: "article", speech_generated: resource.attributes.speech_generated, body: resource.attributes.body, + date: new Date(resource.attributes.published_date), }; }); fetch(`${import.meta.env.VITE_STRAPI_URL}/api/videos?populate=*`, { @@ -116,9 +118,10 @@ const Discover: React.FC = () => { author: resp.items[0].snippet.channelID, imageURL: resp.items[0].snippet.thumbnails.high.url, manual_id: "0", + date: new Date(resp.items[0].snippet.publishedAt), }); resources = resources.sort((a, b) => - a.title.localeCompare(b.title) + -1 * (new Date(a.date).getTime() - new Date(b.date).getTime()) ); setArticles(resources); setFilteredArticles(resources); From 5be7bfc0619191d08ac7adff617eb4b7462dbaef Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 12:41:46 -0400 Subject: [PATCH 17/54] better image compatibiltiy --- src/components/IonicCard.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index aa154db..dceb53a 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -84,7 +84,7 @@ export default function IonicCard({ src={image} title="Article image" /> - + /> :
    }
    ) : (
    @@ -142,7 +142,7 @@ export default function IonicCard({
    Date: Wed, 17 Jul 2024 13:19:02 -0400 Subject: [PATCH 18/54] add image from strapi functionality --- src/components/IonicCard.tsx | 4 ++-- src/pages/Discover.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index dceb53a..8e39aad 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -78,7 +78,7 @@ export default function IonicCard({ onMouseLeave={() => setPlayCircleColor("invert(1.0)")} > {title} diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 07850d3..04bf21e 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -72,7 +72,7 @@ const Discover: React.FC = () => { title: resource.attributes.title, teaser: resource.attributes.teasers, link: resource.attributes.link, - imageURL: null, + imageURL: resource.attributes.header_image.data ? resource.attributes.header_image.data[0].attributes.name : null, tag: "article", speech_generated: resource.attributes.speech_generated, body: resource.attributes.body, From 1d7d5426aa2c0adfa8f46c9bd85853b458eb1195 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:24:19 -0400 Subject: [PATCH 19/54] uploadable description --- src/pages/Discover.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 04bf21e..fceebfc 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -90,6 +90,7 @@ const Discover: React.FC = () => { .then((response) => { const videoData = response.data; videoData.map((videoURL: any) => { + console.log(videoURL); const videoID = videoURL.attributes.url.split("v=")[1]; fetch( `https://www.googleapis.com/youtube/v3/videos?id=${videoID}&key=AIzaSyAi1dPx0fqC8EP9YoaNo1WPsykq_yVczCY&part=snippet,contentDetails,statistics,status®ionCode=us`, @@ -111,7 +112,7 @@ const Discover: React.FC = () => { id: videoID, video: true, title: videoTitle, - teaser: videoDescription, + teaser: videoURL.attributes.description === null || videoURL.attributes.description.trim() === "" ? videoDescription : videoURL.attributes.description, link: videoURL.attributes.url, tag: "video", speech_generated: videoDescription, From 7ee2e6b42c888194a9a916c871f6f519e73b13dd Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:39:13 -0400 Subject: [PATCH 20/54] fetch article photo from backend --- src/pages/Post.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Post.tsx b/src/pages/Post.tsx index 4625895..bb6abf1 100644 --- a/src/pages/Post.tsx +++ b/src/pages/Post.tsx @@ -13,7 +13,7 @@ const Post: React.FC = () => { const { id } = useParams<{ id: string }>(); useEffect(() => { - fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles/${id}`, { + fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { method: "GET", headers: { "Content-Type": "application/json", @@ -22,7 +22,7 @@ const Post: React.FC = () => { }) .then((res) => res.json()) .then((resp) => { - setArticle(resp.data); + setArticle(resp.data.find((article: any) => String(article.id) === id)); }); }, []); @@ -137,7 +137,7 @@ const Post: React.FC = () => {
    {/* random image as placeholder */} - random + random {/* {article?.title} */}
    From eb7c5e85c207c0c942ed5c09a59023cfcd36bf88 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:40:13 -0400 Subject: [PATCH 21/54] prettier fix --- src/components/Button.tsx | 27 ++++++++++++++++--------- src/components/CardModal.tsx | 2 +- src/components/IonicCard.tsx | 26 +++++++++++++----------- src/pages/Discover.tsx | 28 +++++++++++++++++++------- src/pages/Index.tsx | 38 ++++++++++++++++++------------------ src/pages/Resource.tsx | 22 ++++++++++++++++----- 6 files changed, 91 insertions(+), 52 deletions(-) diff --git a/src/components/Button.tsx b/src/components/Button.tsx index 38852ac..2ae7c37 100644 --- a/src/components/Button.tsx +++ b/src/components/Button.tsx @@ -6,30 +6,39 @@ interface ButtonProps { backgroundColor: string; textColor?: string; size?: string | number; - py: string | number, - px: string | number, + py: string | number; + px: string | number; onClick?: (e: any) => void; } -let Button: React.FC = ({ id, text, backgroundColor, textColor, size, px, py, onClick }) => { +let Button: React.FC = ({ + id, + text, + backgroundColor, + textColor, + size, + px, + py, + onClick, +}) => { const [hover, setHover] = useState(false); return ( diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index d7e9e8b..868e889 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -146,7 +146,7 @@ const CardModal: React.FC = ({ <>
    ) : (
    diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index fceebfc..b2d66f0 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -44,7 +44,11 @@ const Discover: React.FC = () => { ); const [isExpandedArray, setIsExpandedArray] = useState([]); const [articles, setArticles] = useState([]); - const [filters, setFilters] = useState(["article", "video", "audio"]); + const [filters, setFilters] = useState([ + "article", + "video", + "audio", + ]); const [usedVoiceIds, setUsedVoicesIds] = useState([ "D38z5RcWu1voky8WS1ja", "21m00Tcm4TlvDq8ikWAM", @@ -72,7 +76,9 @@ const Discover: React.FC = () => { title: resource.attributes.title, teaser: resource.attributes.teasers, link: resource.attributes.link, - imageURL: resource.attributes.header_image.data ? resource.attributes.header_image.data[0].attributes.name : null, + imageURL: resource.attributes.header_image.data + ? resource.attributes.header_image.data[0].attributes.name + : null, tag: "article", speech_generated: resource.attributes.speech_generated, body: resource.attributes.body, @@ -112,7 +118,11 @@ const Discover: React.FC = () => { id: videoID, video: true, title: videoTitle, - teaser: videoURL.attributes.description === null || videoURL.attributes.description.trim() === "" ? videoDescription : videoURL.attributes.description, + teaser: + videoURL.attributes.description === null || + videoURL.attributes.description.trim() === "" + ? videoDescription + : videoURL.attributes.description, link: videoURL.attributes.url, tag: "video", speech_generated: videoDescription, @@ -121,8 +131,10 @@ const Discover: React.FC = () => { manual_id: "0", date: new Date(resp.items[0].snippet.publishedAt), }); - resources = resources.sort((a, b) => - -1 * (new Date(a.date).getTime() - new Date(b.date).getTime()) + resources = resources.sort( + (a, b) => + -1 * + (new Date(a.date).getTime() - new Date(b.date).getTime()) ); setArticles(resources); setFilteredArticles(resources); @@ -167,8 +179,10 @@ const Discover: React.FC = () => { if (filters.length !== 0) { let filteredArticles: ArticleComponent[] = []; filters.forEach((filter) => { - articles.map( - (article: any) => article.tag === filter && !filteredArticles.includes(article) ? filteredArticles.push(article) : null + articles.map((article: any) => + article.tag === filter && !filteredArticles.includes(article) + ? filteredArticles.push(article) + : null ); }); setFilteredArticles(filteredArticles); diff --git a/src/pages/Index.tsx b/src/pages/Index.tsx index 76a38ae..9fb4bdd 100644 --- a/src/pages/Index.tsx +++ b/src/pages/Index.tsx @@ -32,16 +32,16 @@ const Index: React.FC = () => { bgColor="#FC8D3D" textColor="white" btnElement={ -
    @@ -54,15 +54,15 @@ const Index: React.FC = () => { rounded textColor="white" btnElement={ -
    diff --git a/src/pages/Resource.tsx b/src/pages/Resource.tsx index 0dd108f..f9ced7e 100644 --- a/src/pages/Resource.tsx +++ b/src/pages/Resource.tsx @@ -36,7 +36,7 @@ const Resource: React.FC = () => { // Attempt to play audio automatically if (audioRef.current) { - audioRef.current.play().catch(error => { + audioRef.current.play().catch((error) => { console.error("Autoplay failed:", error); }); } @@ -58,12 +58,22 @@ const Resource: React.FC = () => {
    - +
    - -
    @@ -93,7 +103,9 @@ const Resource: React.FC = () => { }} > {resource.attributes.title} From a65a804caadf31123260ddbf9e41dc08ab327ebf Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:44:38 -0400 Subject: [PATCH 22/54] add option to sort by date added --- src/pages/Discover.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index b2d66f0..a83504e 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -129,7 +129,7 @@ const Discover: React.FC = () => { author: resp.items[0].snippet.channelID, imageURL: resp.items[0].snippet.thumbnails.high.url, manual_id: "0", - date: new Date(resp.items[0].snippet.publishedAt), + date: videoURL.attributes.site_published_date ? new Date(videoURL.attributes.site_published_date) : new Date(resp.items[0].snippet.publishedAt), }); resources = resources.sort( (a, b) => From 4f24d585e6b6afa47b8456ad4d0b6a26e52f0f62 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:39:13 -0400 Subject: [PATCH 23/54] fetch article photo from backend --- src/pages/Post.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/pages/Post.tsx b/src/pages/Post.tsx index 4625895..bb6abf1 100644 --- a/src/pages/Post.tsx +++ b/src/pages/Post.tsx @@ -13,7 +13,7 @@ const Post: React.FC = () => { const { id } = useParams<{ id: string }>(); useEffect(() => { - fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles/${id}`, { + fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { method: "GET", headers: { "Content-Type": "application/json", @@ -22,7 +22,7 @@ const Post: React.FC = () => { }) .then((res) => res.json()) .then((resp) => { - setArticle(resp.data); + setArticle(resp.data.find((article: any) => String(article.id) === id)); }); }, []); @@ -137,7 +137,7 @@ const Post: React.FC = () => {
    {/* random image as placeholder */} - random + random {/* {article?.title} */}
    From 03c715a3dab8b5d6aa34814c6033adf9b48dbc9a Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:46:21 -0400 Subject: [PATCH 24/54] format again --- src/pages/Discover.tsx | 4 +++- src/pages/Post.tsx | 9 ++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index a83504e..0f81df1 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -129,7 +129,9 @@ const Discover: React.FC = () => { author: resp.items[0].snippet.channelID, imageURL: resp.items[0].snippet.thumbnails.high.url, manual_id: "0", - date: videoURL.attributes.site_published_date ? new Date(videoURL.attributes.site_published_date) : new Date(resp.items[0].snippet.publishedAt), + date: videoURL.attributes.site_published_date + ? new Date(videoURL.attributes.site_published_date) + : new Date(resp.items[0].snippet.publishedAt), }); resources = resources.sort( (a, b) => diff --git a/src/pages/Post.tsx b/src/pages/Post.tsx index bb6abf1..e2705f7 100644 --- a/src/pages/Post.tsx +++ b/src/pages/Post.tsx @@ -137,7 +137,14 @@ const Post: React.FC = () => {
    {/* random image as placeholder */} - random + random {/* {article?.title} */}
    From 71e2774619fdefc24013bd61ceb5d25871b2a91e Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 13:46:49 -0400 Subject: [PATCH 25/54] format again --- src/pages/Discover.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index a83504e..0f81df1 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -129,7 +129,9 @@ const Discover: React.FC = () => { author: resp.items[0].snippet.channelID, imageURL: resp.items[0].snippet.thumbnails.high.url, manual_id: "0", - date: videoURL.attributes.site_published_date ? new Date(videoURL.attributes.site_published_date) : new Date(resp.items[0].snippet.publishedAt), + date: videoURL.attributes.site_published_date + ? new Date(videoURL.attributes.site_published_date) + : new Date(resp.items[0].snippet.publishedAt), }); resources = resources.sort( (a, b) => From c1587da72ce58bec8be507de8654547cb76b31bd Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Wed, 17 Jul 2024 17:20:24 -0400 Subject: [PATCH 26/54] temp pagination --- package-lock.json | 27 +++++++++-- package.json | 1 + src/pages/Discover.tsx | 108 +++++++++++++++++++++++++++++++++++++---- 3 files changed, 123 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b442e4..db97c81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", + "react-paginate": "^8.2.0", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-share": "^5.1.0" @@ -8955,8 +8956,7 @@ "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "node_modules/react-markdown": { "version": "9.0.1", @@ -8983,6 +8983,18 @@ "react": ">=18" } }, + "node_modules/react-paginate": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-8.2.0.tgz", + "integrity": "sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==", + "license": "MIT", + "dependencies": { + "prop-types": "^15" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18" + } + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -17350,8 +17362,7 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, "react-markdown": { "version": "9.0.1", @@ -17370,6 +17381,14 @@ "vfile": "^6.0.0" } }, + "react-paginate": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-8.2.0.tgz", + "integrity": "sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==", + "requires": { + "prop-types": "^15" + } + }, "react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", diff --git a/package.json b/package.json index 7588301..c0129cf 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", + "react-paginate": "^8.2.0", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-share": "^5.1.0" diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 0f81df1..814c898 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -8,18 +8,28 @@ import { IonCardTitle, IonChip, IonContent, + IonFabButton, IonIcon, + IonInfiniteScrollContent, IonItemDivider, IonLabel, IonSearchbar, + IonSegmentButton, IonText, } from "@ionic/react"; import { + arrowBack, + arrowForward, + chevronBackOutline, + chevronForwardOutline, closeOutline, flag, informationCircleOutline, play, } from "ionicons/icons"; +import ReactDOM from 'react-dom'; +import ReactPaginate from 'react-paginate'; + const token = import.meta.env.VITE_STRAPY_TOKEN; const apiKey = import.meta.env.VITE_ELEVEN_LABS_API_KEY; @@ -55,10 +65,13 @@ const Discover: React.FC = () => { ]); const [usedVoices, setUsedVoices] = useState([]); const [filteredArticles, setFilteredArticles] = useState([]); + const [pageArticles, setPageArticles] = useState([]); const [searchText, setSearchText] = useState(""); + const [pages, setPages] = useState([]); + const [page, setPage] = useState(0); + const entriesPerPage = 1; useEffect(() => { - // fetch from localhost:1337/api/articles fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { method: "GET", headers: { @@ -173,7 +186,6 @@ const Discover: React.FC = () => { const filteredArticles = articles.filter((article: any) => article.attributes.title.toLowerCase().includes(searchText.toLowerCase()) ); - setFilteredArticles(filteredArticles); console.log(filteredArticles); }, [searchText]); @@ -193,6 +205,13 @@ const Discover: React.FC = () => { } }, [filters]); + useEffect(() => { + const numPages = Math.ceil(filteredArticles.length / entriesPerPage); + setPages([...Array(numPages).keys()]); + setPage(Math.max(0, Math.min(page, numPages - 1))); + setPageArticles(filteredArticles.slice((page) * entriesPerPage, Math.min((page) * entriesPerPage + entriesPerPage, filteredArticles.length))); + } , [page, filteredArticles]); + const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); }; @@ -220,7 +239,7 @@ const Discover: React.FC = () => { className="pt-48" style={{ background: - "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)", + "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)" }} >
    @@ -336,9 +355,9 @@ const Discover: React.FC = () => {
    - {filteredArticles && - filteredArticles.length > 0 && - filteredArticles.map((article: any, index: number) => ( + {pageArticles && + pageArticles.length > 0 && + pageArticles.map((article: any, index: number) => (
    {
    ))}
    -
    +
    + > + { + setPage(0); + }} + color = "transparent" + size = "small" + style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} + > + + + { + setPage(page - 1); + }} + color = "transparent" + size = "small" + style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} + > + + + + + Page {page + 1} of {pages.length} + + + { + setPage(page + 1); + }} + color = "transparent" + size = "small" + style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} + > + + + { + setPage(pages[pages.length - 1]); + }} + color = "transparent" + size = "small" + style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} + > + + +
    +
    +
    + {pages.map((pageNumber) => ( +
    + { + setPage(pageNumber); + }} + style = {{ color: "white", "--box-shadow" : "none", "--border-color": "white", "--border-style":"solid", "--border-width":"1px", margin: "0.2rem"}} + > + {pageNumber + 1} + +
    + ))} +
    From 99fdfec848a48cd5b66ae9fe9e67f37d311fa235 Mon Sep 17 00:00:00 2001 From: kchenturtles <94144671+kchenturtles@users.noreply.github.com> Date: Wed, 17 Jul 2024 18:49:31 -0400 Subject: [PATCH 27/54] Revert "temp pagination" (wrong branch) This reverts commit c1587da72ce58bec8be507de8654547cb76b31bd. --- package-lock.json | 27 ++--------- package.json | 1 - src/pages/Discover.tsx | 108 ++++------------------------------------- 3 files changed, 13 insertions(+), 123 deletions(-) diff --git a/package-lock.json b/package-lock.json index db97c81..9b442e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,6 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", - "react-paginate": "^8.2.0", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-share": "^5.1.0" @@ -8956,7 +8955,8 @@ "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "node_modules/react-markdown": { "version": "9.0.1", @@ -8983,18 +8983,6 @@ "react": ">=18" } }, - "node_modules/react-paginate": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-8.2.0.tgz", - "integrity": "sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==", - "license": "MIT", - "dependencies": { - "prop-types": "^15" - }, - "peerDependencies": { - "react": "^16 || ^17 || ^18" - } - }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -17362,7 +17350,8 @@ "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true }, "react-markdown": { "version": "9.0.1", @@ -17381,14 +17370,6 @@ "vfile": "^6.0.0" } }, - "react-paginate": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/react-paginate/-/react-paginate-8.2.0.tgz", - "integrity": "sha512-sJCz1PW+9PNIjUSn919nlcRVuleN2YPoFBOvL+6TPgrH/3lwphqiSOgdrLafLdyLDxsgK+oSgviqacF4hxsDIw==", - "requires": { - "prop-types": "^15" - } - }, "react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", diff --git a/package.json b/package.json index c0129cf..7588301 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,6 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-markdown": "^9.0.1", - "react-paginate": "^8.2.0", "react-router": "^5.3.4", "react-router-dom": "^5.3.4", "react-share": "^5.1.0" diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 814c898..0f81df1 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -8,28 +8,18 @@ import { IonCardTitle, IonChip, IonContent, - IonFabButton, IonIcon, - IonInfiniteScrollContent, IonItemDivider, IonLabel, IonSearchbar, - IonSegmentButton, IonText, } from "@ionic/react"; import { - arrowBack, - arrowForward, - chevronBackOutline, - chevronForwardOutline, closeOutline, flag, informationCircleOutline, play, } from "ionicons/icons"; -import ReactDOM from 'react-dom'; -import ReactPaginate from 'react-paginate'; - const token = import.meta.env.VITE_STRAPY_TOKEN; const apiKey = import.meta.env.VITE_ELEVEN_LABS_API_KEY; @@ -65,13 +55,10 @@ const Discover: React.FC = () => { ]); const [usedVoices, setUsedVoices] = useState([]); const [filteredArticles, setFilteredArticles] = useState([]); - const [pageArticles, setPageArticles] = useState([]); const [searchText, setSearchText] = useState(""); - const [pages, setPages] = useState([]); - const [page, setPage] = useState(0); - const entriesPerPage = 1; useEffect(() => { + // fetch from localhost:1337/api/articles fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { method: "GET", headers: { @@ -186,6 +173,7 @@ const Discover: React.FC = () => { const filteredArticles = articles.filter((article: any) => article.attributes.title.toLowerCase().includes(searchText.toLowerCase()) ); + setFilteredArticles(filteredArticles); console.log(filteredArticles); }, [searchText]); @@ -205,13 +193,6 @@ const Discover: React.FC = () => { } }, [filters]); - useEffect(() => { - const numPages = Math.ceil(filteredArticles.length / entriesPerPage); - setPages([...Array(numPages).keys()]); - setPage(Math.max(0, Math.min(page, numPages - 1))); - setPageArticles(filteredArticles.slice((page) * entriesPerPage, Math.min((page) * entriesPerPage + entriesPerPage, filteredArticles.length))); - } , [page, filteredArticles]); - const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); }; @@ -239,7 +220,7 @@ const Discover: React.FC = () => { className="pt-48" style={{ background: - "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)" + "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)", }} >
    @@ -355,9 +336,9 @@ const Discover: React.FC = () => {
    - {pageArticles && - pageArticles.length > 0 && - pageArticles.map((article: any, index: number) => ( + {filteredArticles && + filteredArticles.length > 0 && + filteredArticles.map((article: any, index: number) => (
    {
    ))}
    -
    -
    - { - setPage(0); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - { - setPage(page - 1); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - - - Page {page + 1} of {pages.length} - - - { - setPage(page + 1); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - { - setPage(pages[pages.length - 1]); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - -
    -
    -
    - {pages.map((pageNumber) => ( -
    - { - setPage(pageNumber); - }} - style = {{ color: "white", "--box-shadow" : "none", "--border-color": "white", "--border-style":"solid", "--border-width":"1px", margin: "0.2rem"}} - > - {pageNumber + 1} - -
    - ))} -
    + />
    From 12c4a3de1e47a9b46d9e514be42bc725b22e88bd Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 10:01:42 -0400 Subject: [PATCH 28/54] run prettier again --- src/components/AboutFutureVisionSections.tsx | 21 +++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/components/AboutFutureVisionSections.tsx b/src/components/AboutFutureVisionSections.tsx index 125c5dd..d18cc19 100644 --- a/src/components/AboutFutureVisionSections.tsx +++ b/src/components/AboutFutureVisionSections.tsx @@ -5,7 +5,7 @@ import { IonCardTitle, } from "@ionic/react"; import React from "react"; -import './AboutFutureVisionSections.css'; // Ensure you have a CSS file for styling +import "./AboutFutureVisionSections.css"; // Ensure you have a CSS file for styling export default function AboutFutureVisionSections() { return ( @@ -20,7 +20,9 @@ export default function AboutFutureVisionSections() {
      -
    • Opportunities for trainees in all disciplines to collaborate
    • +
    • + Opportunities for trainees in all disciplines to collaborate +
    • Create content for website and social media
    @@ -31,8 +33,14 @@ export default function AboutFutureVisionSections() {
      -
    • Design training toolkits to be used at schools and community-based organizations
    • -
    • Engage with youth outside of the clinical setting and in the community
    • +
    • + Design training toolkits to be used at schools and + community-based organizations +
    • +
    • + Engage with youth outside of the clinical setting and in the + community +
    @@ -42,7 +50,10 @@ export default function AboutFutureVisionSections() {
      -
    • BMC Department of Psychiatry: National "go-to" resource for mental health in diverse teens
    • +
    • + BMC Department of Psychiatry: National "go-to" resource for + mental health in diverse teens +
    From cf25272d6fae13ccde20c04dbef0a8436584bb8f Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 10:31:52 -0400 Subject: [PATCH 29/54] fix pagination page numbers bug --- src/pages/Discover.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 814c898..6ab8e99 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -69,7 +69,7 @@ const Discover: React.FC = () => { const [searchText, setSearchText] = useState(""); const [pages, setPages] = useState([]); const [page, setPage] = useState(0); - const entriesPerPage = 1; + const entriesPerPage = 3; useEffect(() => { fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { @@ -140,8 +140,8 @@ const Discover: React.FC = () => { tag: "video", speech_generated: videoDescription, author: resp.items[0].snippet.channelID, + manual_id: videoURL.id, imageURL: resp.items[0].snippet.thumbnails.high.url, - manual_id: "0", date: videoURL.attributes.site_published_date ? new Date(videoURL.attributes.site_published_date) : new Date(resp.items[0].snippet.publishedAt), @@ -186,24 +186,23 @@ const Discover: React.FC = () => { const filteredArticles = articles.filter((article: any) => article.attributes.title.toLowerCase().includes(searchText.toLowerCase()) ); - console.log(filteredArticles); }, [searchText]); useEffect(() => { if (filters.length !== 0) { - let filteredArticles: ArticleComponent[] = []; + let filtered: ArticleComponent[] = []; filters.forEach((filter) => { articles.map((article: any) => - article.tag === filter && !filteredArticles.includes(article) - ? filteredArticles.push(article) + article.tag === filter && !filtered.includes(article) + ? filtered.push(article) : null ); }); - setFilteredArticles(filteredArticles); + setFilteredArticles(filtered); } else { setFilteredArticles(articles); } - }, [filters]); + }, [articles, isExpandedArray, filters]); useEffect(() => { const numPages = Math.ceil(filteredArticles.length / entriesPerPage); From 6ebb52115b1d246e6a3c81a5abd57b984a34fec8 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 11:08:29 -0400 Subject: [PATCH 30/54] format --- src/pages/Discover.tsx | 210 +++++++++++++++++++++++++++-------------- 1 file changed, 137 insertions(+), 73 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 6ab8e99..e5cac65 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -27,8 +27,8 @@ import { informationCircleOutline, play, } from "ionicons/icons"; -import ReactDOM from 'react-dom'; -import ReactPaginate from 'react-paginate'; +import ReactDOM from "react-dom"; +import ReactPaginate from "react-paginate"; const token = import.meta.env.VITE_STRAPY_TOKEN; const apiKey = import.meta.env.VITE_ELEVEN_LABS_API_KEY; @@ -208,8 +208,16 @@ const Discover: React.FC = () => { const numPages = Math.ceil(filteredArticles.length / entriesPerPage); setPages([...Array(numPages).keys()]); setPage(Math.max(0, Math.min(page, numPages - 1))); - setPageArticles(filteredArticles.slice((page) * entriesPerPage, Math.min((page) * entriesPerPage + entriesPerPage, filteredArticles.length))); - } , [page, filteredArticles]); + setPageArticles( + filteredArticles.slice( + page * entriesPerPage, + Math.min( + page * entriesPerPage + entriesPerPage, + filteredArticles.length + ) + ) + ); + }, [page, filteredArticles]); const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); @@ -238,7 +246,7 @@ const Discover: React.FC = () => { className="pt-48" style={{ background: - "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)" + "linear-gradient(180deg, #FFF 26.5%, #FD9390 87.5%, #FB4B45 100%)", }} >
    @@ -377,82 +385,138 @@ const Discover: React.FC = () => {
    ))}
  • -
    -
    - { - setPage(0); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - { - setPage(page - 1); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - - - Page {page + 1} of {pages.length} - - - { - setPage(page + 1); - }} - color = "transparent" - size = "small" - style = {{ color: "white", "--box-shadow" : "none", margin: "0.2rem"}} - > - - - { - setPage(pages[pages.length - 1]); +
    - - + { + setPage(0); + }} + color="transparent" + size="small" + style={{ + color: "white", + "--box-shadow": "none", + margin: "0.2rem", + }} + > + + + + { + setPage(page - 1); + }} + color="transparent" + size="small" + style={{ + color: "white", + "--box-shadow": "none", + margin: "0.2rem", + }} + > + + + + + Page {page + 1} of {pages.length} + + + { + setPage(page + 1); + }} + color="transparent" + size="small" + style={{ + color: "white", + "--box-shadow": "none", + margin: "0.2rem", + }} + > + + + { + setPage(pages[pages.length - 1]); + }} + color="transparent" + size="small" + style={{ + color: "white", + "--box-shadow": "none", + margin: "0.2rem", + }} + > + + + +
    +
    + {pages.map((pageNumber) => ( +
    + { + setPage(pageNumber); + }} + style={{ + color: "white", + "--box-shadow": "none", + "--border-color": "white", + "--border-style": "solid", + "--border-width": "1px", + margin: "0.2rem", + }} + > + {pageNumber + 1} + +
    + ))}
    -
    - {pages.map((pageNumber) => ( -
    - { - setPage(pageNumber); - }} - style = {{ color: "white", "--box-shadow" : "none", "--border-color": "white", "--border-style":"solid", "--border-width":"1px", margin: "0.2rem"}} - > - {pageNumber + 1} - -
    - ))} -
    From 07facff92536160520a2780ae4a15753ca0839a4 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 11:47:24 -0400 Subject: [PATCH 31/54] scroll to bottom when changing pages --- src/pages/Discover.tsx | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index e5cac65..973af01 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useEffect, useRef, useState } from "react"; import IonicCard from "../components/IonicCard"; import { IonButton, @@ -69,7 +69,9 @@ const Discover: React.FC = () => { const [searchText, setSearchText] = useState(""); const [pages, setPages] = useState([]); const [page, setPage] = useState(0); - const entriesPerPage = 3; + const entriesPerPage = 6; + const messagesEnd = useRef(null); + const didMountRef = useRef(false) useEffect(() => { fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { @@ -219,6 +221,16 @@ const Discover: React.FC = () => { ); }, [page, filteredArticles]); + const scrollToBottom = () => { + messagesEnd.current?.scrollIntoView({ behavior: "smooth", alignToTop: true, block: "start" }); + } + + useEffect(() => { + if (didMountRef.current) { + scrollToBottom(); + } else didMountRef.current = true + }); + const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); }; @@ -425,6 +437,7 @@ const Discover: React.FC = () => { { setPage(page - 1); + scrollToBottom(); }} color="transparent" size="small" @@ -519,8 +532,9 @@ const Discover: React.FC = () => {
    +
    ); }; -export default Discover; +export default Discover; \ No newline at end of file From 323d7fdf3859273910a57361edc2b9219401b634 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 11:55:17 -0400 Subject: [PATCH 32/54] fix card sizing --- src/components/IonicCard.tsx | 2 ++ src/pages/Discover.tsx | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/IonicCard.tsx b/src/components/IonicCard.tsx index 1fb94c1..d8627e6 100644 --- a/src/components/IonicCard.tsx +++ b/src/components/IonicCard.tsx @@ -53,6 +53,7 @@ export default function IonicCard({ minHeight: "100%", display: "flex", alignItems: "stretch", + width: "100%", margin: "auto", }} > @@ -60,6 +61,7 @@ export default function IonicCard({ color={"primary"} style={{ borderRadius: 20, + width: "100%", }} className="hoverCard" button diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 973af01..a668853 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -373,7 +373,7 @@ const Discover: React.FC = () => {
    -
    +
    {pageArticles && pageArticles.length > 0 && pageArticles.map((article: any, index: number) => ( From 6c3f72304f759553dc069c9ebbbdaadcb3f9e7ad Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 11:55:26 -0400 Subject: [PATCH 33/54] format again --- src/pages/Discover.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index a668853..6b4f9c3 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -71,7 +71,7 @@ const Discover: React.FC = () => { const [page, setPage] = useState(0); const entriesPerPage = 6; const messagesEnd = useRef(null); - const didMountRef = useRef(false) + const didMountRef = useRef(false); useEffect(() => { fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { @@ -222,13 +222,17 @@ const Discover: React.FC = () => { }, [page, filteredArticles]); const scrollToBottom = () => { - messagesEnd.current?.scrollIntoView({ behavior: "smooth", alignToTop: true, block: "start" }); - } + messagesEnd.current?.scrollIntoView({ + behavior: "smooth", + alignToTop: true, + block: "start", + }); + }; useEffect(() => { if (didMountRef.current) { scrollToBottom(); - } else didMountRef.current = true + } else didMountRef.current = true; }); const handleVoiceChange = (event: any) => { @@ -532,9 +536,9 @@ const Discover: React.FC = () => {
    -
    +
    ); }; -export default Discover; \ No newline at end of file +export default Discover; From 143bb5c57e475cc9d9dbe7f3e489d500af408016 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 12:04:29 -0400 Subject: [PATCH 34/54] fix auto scrolling too early --- src/pages/Discover.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 6b4f9c3..8e1819c 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -72,6 +72,7 @@ const Discover: React.FC = () => { const entriesPerPage = 6; const messagesEnd = useRef(null); const didMountRef = useRef(false); + const [firstMount, setFirstMount] = useState(false); useEffect(() => { fetch(`${import.meta.env.VITE_STRAPI_URL}/api/articles?populate=*`, { @@ -230,10 +231,12 @@ const Discover: React.FC = () => { }; useEffect(() => { - if (didMountRef.current) { + if (didMountRef.current && firstMount) { scrollToBottom(); - } else didMountRef.current = true; - }); + } else { + didMountRef.current = true; + } + }, [pageArticles]); const handleVoiceChange = (event: any) => { setSelectedVoiceId(event.target.value); @@ -423,6 +426,7 @@ const Discover: React.FC = () => { { setPage(0); + setFirstMount(true); }} color="transparent" size="small" @@ -441,7 +445,7 @@ const Discover: React.FC = () => { { setPage(page - 1); - scrollToBottom(); + setFirstMount(true); }} color="transparent" size="small" @@ -470,6 +474,7 @@ const Discover: React.FC = () => { { setPage(page + 1); + setFirstMount(true); }} color="transparent" size="small" @@ -484,6 +489,7 @@ const Discover: React.FC = () => { { setPage(pages[pages.length - 1]); + setFirstMount(true); }} color="transparent" size="small" @@ -519,6 +525,7 @@ const Discover: React.FC = () => { color={page === pageNumber ? "light" : "transparent"} onClick={() => { setPage(pageNumber); + setFirstMount(true); }} style={{ color: "white", From c292707235bbe1127d3b61cc0d80498e3e9df6d3 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 12:14:00 -0400 Subject: [PATCH 35/54] format again --- src/components/AboutFutureVisionSections.tsx | 21 +++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/components/AboutFutureVisionSections.tsx b/src/components/AboutFutureVisionSections.tsx index 125c5dd..d18cc19 100644 --- a/src/components/AboutFutureVisionSections.tsx +++ b/src/components/AboutFutureVisionSections.tsx @@ -5,7 +5,7 @@ import { IonCardTitle, } from "@ionic/react"; import React from "react"; -import './AboutFutureVisionSections.css'; // Ensure you have a CSS file for styling +import "./AboutFutureVisionSections.css"; // Ensure you have a CSS file for styling export default function AboutFutureVisionSections() { return ( @@ -20,7 +20,9 @@ export default function AboutFutureVisionSections() {
      -
    • Opportunities for trainees in all disciplines to collaborate
    • +
    • + Opportunities for trainees in all disciplines to collaborate +
    • Create content for website and social media
    @@ -31,8 +33,14 @@ export default function AboutFutureVisionSections() {
      -
    • Design training toolkits to be used at schools and community-based organizations
    • -
    • Engage with youth outside of the clinical setting and in the community
    • +
    • + Design training toolkits to be used at schools and + community-based organizations +
    • +
    • + Engage with youth outside of the clinical setting and in the + community +
    @@ -42,7 +50,10 @@ export default function AboutFutureVisionSections() {
      -
    • BMC Department of Psychiatry: National "go-to" resource for mental health in diverse teens
    • +
    • + BMC Department of Psychiatry: National "go-to" resource for + mental health in diverse teens +
    From c831b4bb1f55e1b03197f556b7ddaa23b8d6a006 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 12:23:59 -0400 Subject: [PATCH 36/54] fix error --- src/pages/Discover.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/pages/Discover.tsx b/src/pages/Discover.tsx index 8e1819c..5e1c2c2 100644 --- a/src/pages/Discover.tsx +++ b/src/pages/Discover.tsx @@ -69,7 +69,7 @@ const Discover: React.FC = () => { const [searchText, setSearchText] = useState(""); const [pages, setPages] = useState([]); const [page, setPage] = useState(0); - const entriesPerPage = 6; + const entriesPerPage = 2; const messagesEnd = useRef(null); const didMountRef = useRef(false); const [firstMount, setFirstMount] = useState(false); @@ -223,11 +223,13 @@ const Discover: React.FC = () => { }, [page, filteredArticles]); const scrollToBottom = () => { - messagesEnd.current?.scrollIntoView({ - behavior: "smooth", - alignToTop: true, - block: "start", - }); + if (messagesEnd.current !== null) { + const html = messagesEnd.current as HTMLElement; + html.scrollIntoView({ + behavior: "smooth", + block: "end", + }); + } }; useEffect(() => { From 3dddc07495048047f5dab38198e002d775593ef4 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 12:36:49 -0400 Subject: [PATCH 37/54] fix error --- src/components/AboutFutureVisionSections.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/AboutFutureVisionSections.tsx b/src/components/AboutFutureVisionSections.tsx index d18cc19..642d720 100644 --- a/src/components/AboutFutureVisionSections.tsx +++ b/src/components/AboutFutureVisionSections.tsx @@ -5,7 +5,6 @@ import { IonCardTitle, } from "@ionic/react"; import React from "react"; -import "./AboutFutureVisionSections.css"; // Ensure you have a CSS file for styling export default function AboutFutureVisionSections() { return ( From 44eae74acfe4fad89bc4dbc10c71a00b6d0298a3 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 14:35:16 -0400 Subject: [PATCH 38/54] restyle video modal --- src/components/CardModal.tsx | 171 +++++++++++++++++++++++------------ 1 file changed, 112 insertions(+), 59 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 868e889..7f48405 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -24,6 +24,14 @@ import { add, closeCircle, pauseCircle, + caretForwardCircleOutline, + caretBackOutline, + caretForwardOutline, + pauseOutline, + playOutline, + pauseCircleOutline, + playCircleOutline, + closeOutline, } from "ionicons/icons"; import Button from "./Button"; @@ -50,7 +58,8 @@ const CardModal: React.FC = ({ const [audioLoading, setAudioLoading] = useState(false); const [hasFetchedAudios, setHasFetchedAudios] = useState(false); const sentenceRefs = useRef<(HTMLIonTextElement | null)[]>([]); - const [displayVideo, setDisplayVideo] = useState(false); + const [displayVideo, setDisplayVideo] = useState(true); + const [videoURL, setVideoURL] = useState(""); const fetchAudio = async (index: number) => { try { @@ -123,12 +132,22 @@ const CardModal: React.FC = ({ currentSentenceRef?.scrollIntoView({ behavior: "smooth", block: "center" }); }, [currentIndex]); + const getURL = () => { + fetch( + `https://pixabay.com/api/videos/?key=44999838-9bd6745d743d992a9a1fa46eb&q=nature&category=nature` + ) + .then((response) => response.json()) + .then((data) => { + const id = Math.floor(Math.random() * data.hits.length); + setVideoURL(data.hits[id].videos.large.url); + console.log(videoURL); + }); + }; + const [message, setMessage] = useState( "This modal example uses triggers to automatically open a modal when the button is clicked." ); - const [hover, setHover] = useState(false); - function confirm() { modal.current?.dismiss(input.current?.value, "confirm"); } @@ -153,6 +172,7 @@ const CardModal: React.FC = ({ py={"0.25em"} onClick={(e) => { e.preventDefault(); + getURL(); //modal.current?.present(); }} /> @@ -161,61 +181,27 @@ const CardModal: React.FC = ({ ref={modal} trigger={`${id}open-modal`} color={"dark"} + style={{ + "--width": "70%", + "--height": "70%", + "--border-radius": "1rem", + }} > - - - - { - if (currentIndex < audios.length) { - const currentAudio = audios[currentIndex]; - if (currentAudio) { - currentAudio.pause(); - currentAudio.currentTime = 0; // Reset audio to start - } - } - setCurrentIndex(0); - setIsPlaying(false); - setHasFetchedAudios(false); - setAudios([]); - modal.current?.dismiss(); - }} - > - - - - {title} - - - - - - - - - - - Display Video - setDisplayVideo(e.detail.checked)} - /> - - - - +
    {displayVideo && (
    - - { - setIsPlaying((prev) => !prev); + + + Share Video + + + + +
    - {audioLoading ? ( - - ) : ( - - )} - - +
    + + + +
    +
    +
    + Display Video + setDisplayVideo(e.detail.checked)} + /> +
    +
    + ); From a77f523c2271c811ed741870321c4e22eec9b7a0 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 14:52:22 -0400 Subject: [PATCH 39/54] fix toolbar styling --- src/components/CardModal.tsx | 42 +++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 7f48405..cd82cc0 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -32,6 +32,8 @@ import { pauseCircleOutline, playCircleOutline, closeOutline, + eyeOutline, + eyeOffOutline, } from "ionicons/icons"; import Button from "./Button"; @@ -187,9 +189,12 @@ const CardModal: React.FC = ({ "--border-radius": "1rem", }} > - +
    = ({
    - - Share Video + - +
    = ({ )}
    - Display Video + Display Video setDisplayVideo(e.detail.checked)} + style={{ marginLeft: "0.5rem" }} />
    From 47604137ab19e11e4e5bc5c518fd098fa5528bcb Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 15:10:43 -0400 Subject: [PATCH 40/54] add forward and backward button functionality --- src/components/CardModal.tsx | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index cd82cc0..67100f5 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -278,7 +278,7 @@ const CardModal: React.FC = ({ > @@ -302,7 +302,14 @@ const CardModal: React.FC = ({ paddingTop: "0.2rem", }} > - -
    -
    - Display Video +
    + Display Video setDisplayVideo(e.detail.checked)} - style={{ marginLeft: "0.5rem" }} />
    From 6e9f122808f44cdf3957603a9df91616c8d6b7bc Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 15:37:32 -0400 Subject: [PATCH 41/54] footer gradient --- src/components/Footer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 4ab9404..2904bc6 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -14,6 +14,7 @@ const Footer = () => { const bgColorMap = { "/post/*": "#FD9390", + "/discover": "#FB4B45", }; const bgColor = Object.keys(bgColorMap).find((key) => From 1b9cb55a678816b69ca5e005ded79173ed2f5125 Mon Sep 17 00:00:00 2001 From: Kendree Chen Date: Thu, 18 Jul 2024 17:01:28 -0400 Subject: [PATCH 42/54] video fit --- src/components/CardModal.tsx | 30 +++++++++++++++++--------- src/components/IonicCard.tsx | 3 +++ src/pages/Discover.tsx | 3 +++ src/theme/tailwind.css | 42 ++++++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 10 deletions(-) diff --git a/src/components/CardModal.tsx b/src/components/CardModal.tsx index 67100f5..47cf792 100644 --- a/src/components/CardModal.tsx +++ b/src/components/CardModal.tsx @@ -43,6 +43,7 @@ interface Props { id: string; voiceId: string; manual_id: string; + backgroundVideo: string | null; } const CardModal: React.FC = ({ @@ -51,6 +52,7 @@ const CardModal: React.FC = ({ id, voiceId, manual_id, + backgroundVideo, }) => { const modal = useRef(null); const input = useRef(null); @@ -62,6 +64,7 @@ const CardModal: React.FC = ({ const sentenceRefs = useRef<(HTMLIonTextElement | null)[]>([]); const [displayVideo, setDisplayVideo] = useState(true); const [videoURL, setVideoURL] = useState(""); + const [urlProvided, setURLProvided] = useState(false); const fetchAudio = async (index: number) => { try { @@ -135,15 +138,22 @@ const CardModal: React.FC = ({ }, [currentIndex]); const getURL = () => { - fetch( - `https://pixabay.com/api/videos/?key=44999838-9bd6745d743d992a9a1fa46eb&q=nature&category=nature` - ) - .then((response) => response.json()) - .then((data) => { - const id = Math.floor(Math.random() * data.hits.length); - setVideoURL(data.hits[id].videos.large.url); - console.log(videoURL); - }); + if(backgroundVideo === null) { + fetch( + `https://pixabay.com/api/videos/?key=44999838-9bd6745d743d992a9a1fa46eb&q=nature&category=nature` + ) + .then((response) => response.json()) + .then((data) => { + const id = Math.floor(Math.random() * data.hits.length); + setVideoURL(data.hits[id].videos.large.url); + console.log(data.hits[id].videos.large.url); + }); + } else { + console.log(backgroundVideo) + setVideoURL( backgroundVideo.replace("watch?v=", "embed/").concat("?autohide=1&autoplay=1&showinfo=0=1&iv_load_policy=2&controls=0&mute=1") ); + setURLProvided(true); + console.log(backgroundVideo.replace("watch?v=", "embed/")) + } }; const [message, setMessage] = useState( @@ -205,7 +215,7 @@ const CardModal: React.FC = ({ }} > {displayVideo && ( -
    :