diff --git a/package-lock.json b/package-lock.json
index 873bd5e..fb5cd47 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2829,6 +2829,26 @@
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"alphanum-sort": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
@@ -2872,6 +2892,25 @@
"color-convert": "^1.9.0"
}
},
+ "any": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/any/-/any-1.0.0.tgz",
+ "integrity": "sha1-Cns0jFifr2unCNSiJBBp6lFii14=",
+ "requires": {
+ "for-own": "^0.1.2",
+ "make-iterator": "^0.1.0"
+ },
+ "dependencies": {
+ "make-iterator": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-0.1.1.tgz",
+ "integrity": "sha1-hz0nuBmKRlqBSDtvXRbaToY+z1s=",
+ "requires": {
+ "for-own": "^0.1.1"
+ }
+ }
+ }
+ },
"anymatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
@@ -2918,11 +2957,34 @@
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
},
+ "arr-map": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
+ "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
+ "requires": {
+ "make-iterator": "^1.0.0"
+ },
+ "dependencies": {
+ "make-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
+ "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
"arr-union": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
},
+ "array-each": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/array-each/-/array-each-0.1.1.tgz",
+ "integrity": "sha1-xdUrqCJfNtcoF4unrsQTrPrd0Pk="
+ },
"array-flatten": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
@@ -2940,6 +3002,11 @@
"is-string": "^1.0.5"
}
},
+ "array-slice": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+ "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU="
+ },
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
@@ -4097,6 +4164,15 @@
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
"integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
},
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -6269,6 +6345,20 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
+ "event-stream": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz",
+ "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==",
+ "requires": {
+ "duplexer": "^0.1.1",
+ "from": "^0.1.7",
+ "map-stream": "0.0.7",
+ "pause-stream": "^0.0.11",
+ "split": "^1.0.1",
+ "stream-combiner": "^0.2.2",
+ "through": "^2.3.8"
+ }
+ },
"eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -6406,6 +6496,19 @@
}
}
},
+ "export-dirs": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/export-dirs/-/export-dirs-0.2.4.tgz",
+ "integrity": "sha1-Lha5tG68LAestlfM3744RTk/50I="
+ },
+ "export-files": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/export-files/-/export-files-2.1.1.tgz",
+ "integrity": "sha1-u/ZFdAU6CeTrmOX0NQHVcrLDzn8=",
+ "requires": {
+ "lazy-cache": "^1.0.3"
+ }
+ },
"express": {
"version": "4.17.1",
"resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
@@ -6772,6 +6875,14 @@
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
},
+ "for-own": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+ "requires": {
+ "for-in": "^1.0.1"
+ }
+ },
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
@@ -6921,6 +7032,11 @@
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
+ "from": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
+ "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4="
+ },
"from2": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
@@ -10071,6 +10187,11 @@
"webpack-sources": "^1.1.0"
}
},
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -10150,6 +10271,11 @@
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
},
+ "lodash.assign": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+ "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc="
+ },
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -10202,6 +10328,11 @@
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz",
"integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw=="
},
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
"loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -10262,6 +10393,24 @@
}
}
},
+ "make-iterator": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-0.2.1.tgz",
+ "integrity": "sha1-oZxmATK1SubWT4gewUBWx0bb6XI=",
+ "requires": {
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
"makeerror": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
@@ -10275,6 +10424,11 @@
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
+ "map-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
+ "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg="
+ },
"map-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
@@ -10400,6 +10554,11 @@
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
"integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
},
+ "mingo": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/mingo/-/mingo-1.3.3.tgz",
+ "integrity": "sha1-aSLE0Ufvx3GgFCWixMj3eER4xUY="
+ },
"mini-create-react-context": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz",
@@ -10901,6 +11060,24 @@
"object-keys": "^1.1.1"
}
},
+ "object.defaults": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-0.3.0.tgz",
+ "integrity": "sha1-seucvHjEx71WysbK496tWnETiCo=",
+ "requires": {
+ "array-each": "^0.1.0",
+ "array-slice": "^0.2.3",
+ "for-own": "^0.1.3",
+ "isobject": "^1.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-1.0.2.tgz",
+ "integrity": "sha1-8Pm4zpLdVA+gdAiC44NaLgIux4o="
+ }
+ }
+ },
"object.entries": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz",
@@ -10911,6 +11088,25 @@
"es-abstract": "^1.18.2"
}
},
+ "object.filter": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/object.filter/-/object.filter-0.3.0.tgz",
+ "integrity": "sha1-EJHGk5S0T5bZ1jVt0IeFAorWv/k=",
+ "requires": {
+ "for-own": "^0.1.2",
+ "make-iterator": "^0.1.0"
+ },
+ "dependencies": {
+ "make-iterator": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-0.1.1.tgz",
+ "integrity": "sha1-hz0nuBmKRlqBSDtvXRbaToY+z1s=",
+ "requires": {
+ "for-own": "^0.1.1"
+ }
+ }
+ }
+ },
"object.fromentries": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz",
@@ -10932,6 +11128,15 @@
"es-abstract": "^1.18.0-next.2"
}
},
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "^0.1.4",
+ "is-extendable": "^0.1.1"
+ }
+ },
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
@@ -10940,6 +11145,14 @@
"isobject": "^3.0.1"
}
},
+ "object.reduce": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-0.1.7.tgz",
+ "integrity": "sha1-0YDoT3LSGDSK9FNStVFlJGuVBG0=",
+ "requires": {
+ "for-own": "^0.1.3"
+ }
+ },
"object.values": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
@@ -11228,6 +11441,14 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
},
+ "pause-stream": {
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
+ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
+ "requires": {
+ "through": "~2.3"
+ }
+ },
"pbkdf2": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
@@ -12904,6 +13125,19 @@
"warning": "^4.0.3"
}
},
+ "react-placeholder": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/react-placeholder/-/react-placeholder-4.1.0.tgz",
+ "integrity": "sha512-z1HGD86NWJTYTQumHsmGH9jkozv4QHa9dju/vHVUd4f1svu23pf5v7QoBLBfs3kA1S9GLJaCeRMHLbO2SCdz5A=="
+ },
+ "react-placeholder-loading": {
+ "version": "0.5.25",
+ "resolved": "https://registry.npmjs.org/react-placeholder-loading/-/react-placeholder-loading-0.5.25.tgz",
+ "integrity": "sha512-iI8trroRMawLURZTeKA8HQEpx9735itO74nKE6wjejRSjd74IFgvkW7zf+Lak8GlfuaU/cfxuJePu5BhfJkH/Q==",
+ "requires": {
+ "utils": "^0.3.1"
+ }
+ },
"react-refresh": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz",
@@ -13620,6 +13854,14 @@
"resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
"integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
},
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -13908,6 +14150,17 @@
}
}
},
+ "save": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/save/-/save-2.4.0.tgz",
+ "integrity": "sha512-wd5L2uVnsKYkIUaK6i8Ie66IOHaI328gMF0MPuTJtYOjXgUolC33LSIk7Qr8WVA55QHaGwfiVS8a7EFIeGOR3w==",
+ "requires": {
+ "async": "^2.6.2",
+ "event-stream": "^4.0.1",
+ "lodash.assign": "^4.2.0",
+ "mingo": "1"
+ }
+ },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -14495,6 +14748,14 @@
}
}
},
+ "split": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
+ "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+ "requires": {
+ "through": "2"
+ }
+ },
"split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
@@ -14597,6 +14858,15 @@
"readable-stream": "^2.0.2"
}
},
+ "stream-combiner": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
+ "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=",
+ "requires": {
+ "duplexer": "~0.1.1",
+ "through": "~2.3.4"
+ }
+ },
"stream-each": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
@@ -14768,6 +15038,11 @@
"escape-string-regexp": "^1.0.2"
}
},
+ "striptags": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz",
+ "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI="
+ },
"style-loader": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
@@ -15084,6 +15359,11 @@
"resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
"integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA=="
},
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -15315,6 +15595,11 @@
"is-typedarray": "^1.0.0"
}
},
+ "typescript": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz",
+ "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA=="
+ },
"unbox-primitive": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz",
@@ -15557,6 +15842,91 @@
"resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
"integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
},
+ "utils": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/utils/-/utils-0.3.1.tgz",
+ "integrity": "sha1-BO+utCkKZwN6TN39L/VhRMw6RYE=",
+ "requires": {
+ "any": "^1.0.0",
+ "arr-diff": "^1.1.0",
+ "arr-flatten": "^1.0.1",
+ "arr-map": "^2.0.0",
+ "arr-union": "^3.0.0",
+ "array-each": "^0.1.1",
+ "array-slice": "^0.2.3",
+ "array-unique": "^0.2.1",
+ "center-align": "^0.1.1",
+ "export-dirs": "^0.2.4",
+ "export-files": "^2.1.0",
+ "for-in": "^0.1.4",
+ "for-own": "^0.1.3",
+ "has-values": "^0.1.3",
+ "is-number": "^2.0.2",
+ "is-plain-object": "^2.0.1",
+ "kind-of": "^2.0.1",
+ "make-iterator": "^0.2.0",
+ "object.defaults": "^0.3.0",
+ "object.filter": "^0.3.0",
+ "object.omit": "^2.0.0",
+ "object.pick": "^1.1.1",
+ "object.reduce": "^0.1.7",
+ "right-align": "^0.1.3",
+ "striptags": "^2.0.3",
+ "word-wrap": "^1.1.0"
+ },
+ "dependencies": {
+ "arr-diff": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",
+ "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",
+ "requires": {
+ "arr-flatten": "^1.0.1",
+ "array-slice": "^0.2.3"
+ }
+ },
+ "array-unique": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+ "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
+ },
+ "for-in": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+ "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE="
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+ },
+ "is-number": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "kind-of": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+ "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+ "requires": {
+ "is-buffer": "^1.0.2"
+ }
+ }
+ }
+ },
"utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
diff --git a/package.json b/package.json
index ca5012f..e21f779 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,8 @@
"react-google-login": "^5.2.2",
"react-helmet": "^6.1.0",
"react-modal": "^3.14.3",
+ "react-placeholder": "^4.1.0",
+ "react-placeholder-loading": "^0.5.25",
"react-router": "^5.2.0",
"react-router-dom": "^5.2.0",
"react-router-hash-link": "^2.4.3",
@@ -28,6 +30,8 @@
"react-toggle": "^4.1.2",
"react-tooltip": "^4.2.21",
"request": "^2.79.0",
+ "save": "^2.4.0",
+ "typescript": "^4.4.3",
"web-vitals": "^1.1.2"
},
"scripts": {
diff --git a/src/TestHeader.js b/src/TestHeader.js
index aa5602f..ef81163 100644
--- a/src/TestHeader.js
+++ b/src/TestHeader.js
@@ -1,5 +1,7 @@
import React, { useEffect,useState } from 'react';
import { DisplayIcon } from './DEFAULTS';
+import ReactPlaceholder from 'react-placeholder';
+import "react-placeholder/lib/reactPlaceholder.css";
const axios = require('axios');
@@ -11,6 +13,7 @@ function TestHeader(p) {
const [avatar,setAvatar] = useState(undefined);
const [username,setUsername] = useState(undefined);
+ const [loading,setLoading] = useState(true)
useEffect(()=>{
axios.post(BACKENDURL+"/validUser",{
@@ -23,6 +26,10 @@ function TestHeader(p) {
setAvatar(data.data.avatar)
setUsername(LOGGEDINUSER)
}
+ })
+ .catch((err)=>{})
+ .finally(()=>{
+ setLoading(false)
})}
,[BACKENDURL,LOGGEDINUSER,LOGGEDINHASH])
@@ -38,8 +45,8 @@ function TestHeader(p) {