diff --git a/ui/v2.5/package.json b/ui/v2.5/package.json
index c611c3f85..06ad1185b 100644
--- a/ui/v2.5/package.json
+++ b/ui/v2.5/package.json
@@ -55,6 +55,7 @@
"react-images": "0.5.19",
"react-intl": "^4.5.1",
"react-jw-player": "1.19.1",
+ "react-markdown": "^4.3.1",
"react-photo-gallery": "^8.0.0",
"react-router-bootstrap": "^0.25.0",
"react-router-dom": "^5.1.2",
diff --git a/ui/v2.5/src/components/Changelog/Changelog.tsx b/ui/v2.5/src/components/Changelog/Changelog.tsx
new file mode 100644
index 000000000..cfdd44a0f
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/Changelog.tsx
@@ -0,0 +1,52 @@
+import React from "react";
+import { useChangelogStorage } from "src/hooks";
+import Version from "./Version";
+import { V010, V011, V020 } from "./versions";
+
+const Changelog: React.FC = () => {
+ const [{ data, loading }, setOpenState] = useChangelogStorage();
+
+ if (loading) return <>>;
+
+ const openState = data?.versions ?? {};
+
+ const setVersionOpenState = (key: string, state: boolean) =>
+ setOpenState({
+ versions: {
+ ...openState,
+ [key]: state,
+ },
+ });
+
+ return (
+ <>
+
Changelog:
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default Changelog;
diff --git a/ui/v2.5/src/components/Changelog/Version.tsx b/ui/v2.5/src/components/Changelog/Version.tsx
new file mode 100644
index 000000000..7808ef803
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/Version.tsx
@@ -0,0 +1,59 @@
+import React, { useState } from "react";
+import { Button, Card, Collapse } from "react-bootstrap";
+import { FormattedDate, FormattedMessage } from "react-intl";
+import { Icon } from "src/components/Shared";
+
+interface IVersionProps {
+ version: string;
+ date?: string;
+ defaultOpen?: boolean;
+ setOpenState: (key: string, state: boolean) => void;
+ openState: Record;
+}
+
+const Version: React.FC = ({
+ version,
+ date,
+ defaultOpen,
+ openState,
+ setOpenState,
+ children,
+}) => {
+ const [open, setOpen] = useState(
+ defaultOpen ?? openState[version + date] ?? false
+ );
+
+ const updateState = () => {
+ setOpenState(version + date, !open);
+ setOpen(!open);
+ };
+
+ return (
+
+
+
+
+
+ {version} (
+ {date ? (
+
+ ) : (
+
+ )}
+ )
+
+
+
+
+
+ {children}
+
+
+
+ );
+};
+
+export default Version;
diff --git a/ui/v2.5/src/components/Changelog/styles.scss b/ui/v2.5/src/components/Changelog/styles.scss
new file mode 100644
index 000000000..abdf45545
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/styles.scss
@@ -0,0 +1,38 @@
+.changelog {
+ margin-bottom: 4rem;
+ margin-top: 4rem;
+
+ .btn {
+ color: inherit;
+ font-size: inherit;
+ font-weight: inherit;
+
+ &:focus {
+ text-decoration: unset;
+ }
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+
+ .card,
+ .card-body {
+ padding: 0;
+ }
+
+ ul {
+ list-style-type: none;
+ padding-left: 0.5rem;
+ }
+
+ &-version {
+ &-body {
+ padding: 1rem 2rem;
+ }
+
+ &-header {
+ color: $text-color;
+ }
+ }
+}
diff --git a/ui/v2.5/src/components/Changelog/versions/index.ts b/ui/v2.5/src/components/Changelog/versions/index.ts
new file mode 100644
index 000000000..6351f1c60
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/versions/index.ts
@@ -0,0 +1,3 @@
+export { default as V010 } from "./v010";
+export { default as V011 } from "./v011";
+export { default as V020 } from "./v020";
diff --git a/ui/v2.5/src/components/Changelog/versions/v010.tsx b/ui/v2.5/src/components/Changelog/versions/v010.tsx
new file mode 100644
index 000000000..b440f5bd3
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/versions/v010.tsx
@@ -0,0 +1,55 @@
+import React from "react";
+import ReactMarkdown from "react-markdown";
+
+const markup = `
+### โจ New Features
+
+* Configurable custom performer scrapers
+* Support looping of short videos.
+* Optionally auto-start videos.
+* Add scene auto-tagging from filename
+* Add Play random button to scenes and scene markers page
+* Allow uploading of custom scene covers
+* Configurable custom scene metadata scrapers
+* Add "Open Random" to performer list
+* Add scenes tab to performer page
+* Add version check
+* Add "O-" (or "splooge-") counter
+* Add external_host option
+
+### ๐จ Improvements
+
+* Improve scene wall layout
+* Read config from current working directory before user profile directory
+* Upload pull request builds to transfer.sh
+* Save interface options
+* Change marker time input to mm:ss
+* Allow pasting image into performer/studio
+* Scene UI improvements
+* Update JWPlayer to 8.11.5
+* Beautify scene list table
+* Add responsive menu
+* Make scene metadata from file metadata optional
+* Add transcode seeking support to JWPlayer and remove video.js
+* Allow exclusion patterns for scanning
+* Support scraping from other stash instances
+* Display both server address and listening address in log
+* Add scene duration filter
+* Add useful links to about page
+* Generate a new order when selecting random sorting
+* Maintain filter parameters in session
+* Change thumbnail default size and resize algorithm
+* Improve caching of static files and performer images
+* Improve position and cropping of performer images
+* Improve stats page
+
+### ๐ Bug fixes
+
+* Fix importing on Windows
+* Fix previews sometimes taking a long time to generate
+* Fix input fields losing focus when switching between windows
+* Fix VTT for chapter display in scene players
+* Fix usage of Box.Bytes causing depreciation message
+`;
+
+export default () => ;
diff --git a/ui/v2.5/src/components/Changelog/versions/v011.tsx b/ui/v2.5/src/components/Changelog/versions/v011.tsx
new file mode 100644
index 000000000..06867d0cd
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/versions/v011.tsx
@@ -0,0 +1,9 @@
+import React from "react";
+import ReactMarkdown from "react-markdown";
+
+const markup = `
+### ๐ Bug fixes
+Fix version checking.
+`;
+
+export default () => ;
diff --git a/ui/v2.5/src/components/Changelog/versions/v020.tsx b/ui/v2.5/src/components/Changelog/versions/v020.tsx
new file mode 100644
index 000000000..1a2c0c798
--- /dev/null
+++ b/ui/v2.5/src/components/Changelog/versions/v020.tsx
@@ -0,0 +1,59 @@
+import React from "react";
+import ReactMarkdown from "react-markdown";
+
+const markup = `
+#### ๐ฅ **Note: After upgrading performance will be degraded until a full [scan](/settings?tab=tasks) has been completed.**
+
+
+### โจ New Features
+* Movies are now supported.
+* Responsive layout for mobile phones.
+* Add support for image scraping.
+* Allow user to regenerate scene cover based on timestamp.
+* Autoassociate galleries to scenes when scanning.
+* Configurable scraper user agent string.
+* Backup database if a migration is needed.
+* Add modes for performer/tag for bulk scene editing.
+* Add gender support for performer.
+* Add SVG studio image support, and studio image caching.
+* Enable sorting for galleries.
+* Add scene rating to scene filename parser.
+* Replace basic auth with cookie authentication.
+* Add detection of container/video_codec/audio_codec compatibility for live file streaming or transcoding.
+* Move image with cover.jpg in name to first place in Galleries.
+* Add "reshuffle button" when sortby is random.
+* Implement clean for missing galleries.
+* Add parser support for 3-letter month.
+* Add is-missing tags filter.
+
+### ๐จ Improvements
+* Performance improvements and improved video support.
+* Support for localized text, dates and numbers.
+* Replace Blueprint with react-bootstrap.
+* Add image count to gallery list.
+* Add library size to main stats page.
+* Add slim endpoints for entities to speed up filters.
+* Export performance optimization.
+* Add random male performer image.
+* Added various missing filters to performer page.
+* Add index/total count to end of pagination buttons.
+* Add flags for performer countries.
+* Querybuilder integration tests.
+* Overhaul look and feel of folder select.
+* Add changelog to start page.
+
+### ๐ Bug fixes
+* Update performer image in UI when it's replaced.
+* Fix performer height filter.
+* Fix error when viewing scenes related to objects with illegal characters in name.
+* Make ethnicity freetext and fix freeones ethnicity panic.
+* Delete marker preview on marker change or delete.
+* Prefer modified performer image over scraped one.
+* Include gender in performer scraper results.
+* Include scene o-counter in import/export.
+* Make image extension check in zip files case insensitive.
+* Update built-in Freeones scraper for new API.
+
+`;
+
+export default () => ;
diff --git a/ui/v2.5/src/components/Stats.tsx b/ui/v2.5/src/components/Stats.tsx
index 7b83946d9..8d955286f 100644
--- a/ui/v2.5/src/components/Stats.tsx
+++ b/ui/v2.5/src/components/Stats.tsx
@@ -2,6 +2,7 @@ import React from "react";
import { useStats } from "src/core/StashService";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { LoadingIndicator } from "src/components/Shared";
+import Changelog from "src/components/Changelog/Changelog";
export const Stats: React.FC = () => {
const { data, error, loading } = useStats();
@@ -73,6 +74,9 @@ export const Stats: React.FC = () => {
+
+
+
);
};
diff --git a/ui/v2.5/src/hooks/LocalForage.ts b/ui/v2.5/src/hooks/LocalForage.ts
index 19a83d6be..e31702a65 100644
--- a/ui/v2.5/src/hooks/LocalForage.ts
+++ b/ui/v2.5/src/hooks/LocalForage.ts
@@ -14,8 +14,9 @@ export interface IInterfaceConfig {
queries?: Record;
}
-type ValidTypes = IInterfaceConfig;
-type Key = "interface";
+export interface IChangelogConfig {
+ versions: Record;
+}
interface ILocalForage {
data?: T;
@@ -24,13 +25,13 @@ interface ILocalForage {
}
const Loading: Record = {};
-const Cache: Record = {};
+const Cache: Record = {};
-function useLocalForage(
- key: Key
-): [ILocalForage, Dispatch>] {
+function useLocalForage(
+ key: string
+): [ILocalForage, Dispatch>] {
const [error, setError] = React.useState(null);
- const [data, setData] = React.useState(Cache[key]);
+ const [data, setData] = React.useState(Cache[key] as T);
const [loading, setLoading] = React.useState(Loading[key]);
useEffect(() => {
@@ -42,7 +43,7 @@ function useLocalForage(
setData(parsed);
Cache[key] = parsed;
} else {
- setData({});
+ setData({} as T);
Cache[key] = {};
}
setError(null);
@@ -72,9 +73,8 @@ function useLocalForage(
return [{ data, error, loading: isLoading }, setData];
}
-export function useInterfaceLocalForage(): [
- ILocalForage,
- Dispatch>
-] {
- return useLocalForage("interface");
-}
+export const useInterfaceLocalForage = () =>
+ useLocalForage("interface");
+
+export const useChangelogStorage = () =>
+ useLocalForage("changelog");
diff --git a/ui/v2.5/src/hooks/index.ts b/ui/v2.5/src/hooks/index.ts
index 6d595f217..1fc486dd2 100644
--- a/ui/v2.5/src/hooks/index.ts
+++ b/ui/v2.5/src/hooks/index.ts
@@ -1,5 +1,5 @@
export { default as useToast } from "./Toast";
-export { useInterfaceLocalForage } from "./LocalForage";
+export { useInterfaceLocalForage, useChangelogStorage } from "./LocalForage";
export { useVideoHover } from "./VideoHover";
export {
useScenesList,
diff --git a/ui/v2.5/src/index.scss b/ui/v2.5/src/index.scss
index bacd626aa..9d10ce082 100755
--- a/ui/v2.5/src/index.scss
+++ b/ui/v2.5/src/index.scss
@@ -1,6 +1,7 @@
@import "styles/theme";
@import "styles/range";
@import "styles/scrollbars";
+@import "src/components/Changelog/styles.scss";
@import "src/components/Galleries/styles.scss";
@import "src/components/List/styles.scss";
@import "src/components/Movies/styles.scss";
@@ -27,10 +28,6 @@ body {
padding: 4rem 0 0 0;
}
-a {
- color: $primary;
-}
-
code,
.code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
diff --git a/ui/v2.5/src/locale/de.json b/ui/v2.5/src/locale/de.json
index cfcb4c69e..cbe971243 100644
--- a/ui/v2.5/src/locale/de.json
+++ b/ui/v2.5/src/locale/de.json
@@ -1,4 +1,5 @@
{
+ "developmentVersion": "",
"galleries": "Galerien",
"library-size": "",
"markers": "",
@@ -7,5 +8,6 @@
"performers": "Kรผnstler",
"scenes": "Szenen",
"studios": "Studios",
- "tags": "Etiketten"
+ "tags": "Etiketten",
+ "up-dir": ""
}
diff --git a/ui/v2.5/src/locale/en.json b/ui/v2.5/src/locale/en.json
index 380a7e5d8..129f13b9f 100644
--- a/ui/v2.5/src/locale/en.json
+++ b/ui/v2.5/src/locale/en.json
@@ -1,4 +1,5 @@
{
+ "developmentVersion": "Development Version",
"galleries": "Galleries",
"library-size": "Library size",
"markers": "Markers",
@@ -7,5 +8,6 @@
"performers": "Performers",
"scenes": "Scenes",
"studios": "Studios",
- "tags": "Tags"
+ "tags": "Tags",
+ "up-dir": "Up a directory"
}
diff --git a/ui/v2.5/yarn.lock b/ui/v2.5/yarn.lock
index 001902852..c81157475 100644
--- a/ui/v2.5/yarn.lock
+++ b/ui/v2.5/yarn.lock
@@ -5540,7 +5540,7 @@ dom-helpers@^5.0.1, dom-helpers@^5.1.0, dom-helpers@^5.1.2:
"@babel/runtime" "^7.6.3"
csstype "^2.6.7"
-dom-serializer@0:
+dom-serializer@0, dom-serializer@^0.2.1:
version "0.2.2"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
@@ -5577,6 +5577,13 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
+domhandler@^3.0, domhandler@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9"
+ integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==
+ dependencies:
+ domelementtype "^2.0.1"
+
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
@@ -5593,6 +5600,15 @@ domutils@^1.5.1, domutils@^1.7.0:
dom-serializer "0"
domelementtype "1"
+domutils@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.1.0.tgz#7ade3201af43703fde154952e3a868eb4b635f16"
+ integrity sha512-CD9M0Dm1iaHfQ1R/TI+z3/JWp/pgub0j4jIQKH89ARR4ATAV2nbaOQS5XxU9maJP5jHaPdDDQSEHuE2UmpUTKg==
+ dependencies:
+ dom-serializer "^0.2.1"
+ domelementtype "^2.0.1"
+ domhandler "^3.0.0"
+
dot-case@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa"
@@ -7317,6 +7333,16 @@ html-tags@^3.1.0:
resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140"
integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==
+html-to-react@^1.3.4:
+ version "1.4.2"
+ resolved "https://registry.yarnpkg.com/html-to-react/-/html-to-react-1.4.2.tgz#7b628ab56cd63a52f2d0b79d0fa838a51f088a57"
+ integrity sha512-TdTfxd95sRCo6QL8admCkE7mvNNrXtGoVr1dyS+7uvc8XCqAymnf/6ckclvnVbQNUo2Nh21VPwtfEHd0khiV7g==
+ dependencies:
+ domhandler "^3.0"
+ htmlparser2 "^4.0"
+ lodash.camelcase "^4.3.0"
+ ramda "^0.26"
+
html-webpack-plugin@4.0.0-beta.11:
version "4.0.0-beta.11"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz#3059a69144b5aecef97708196ca32f9e68677715"
@@ -7341,6 +7367,16 @@ htmlparser2@^3.10.0, htmlparser2@^3.3.0:
inherits "^2.0.1"
readable-stream "^3.1.1"
+htmlparser2@^4.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78"
+ integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==
+ dependencies:
+ domelementtype "^2.0.1"
+ domhandler "^3.0.0"
+ domutils "^2.0.0"
+ entities "^2.0.0"
+
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
@@ -7841,7 +7877,7 @@ is-binary-path@~2.1.0:
dependencies:
binary-extensions "^2.0.0"
-is-buffer@^1.0.2, is-buffer@^1.1.5:
+is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
@@ -9157,6 +9193,11 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
+lodash.camelcase@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
+
lodash.includes@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
@@ -9413,6 +9454,13 @@ md5.js@^1.3.4:
inherits "^2.0.1"
safe-buffer "^5.1.2"
+mdast-add-list-metadata@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf"
+ integrity sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==
+ dependencies:
+ unist-util-visit-parents "1.1.2"
+
mdast-util-compact@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490"
@@ -10463,6 +10511,18 @@ parse-asn1@^5.0.0:
pbkdf2 "^3.0.3"
safe-buffer "^5.1.1"
+parse-entities@^1.1.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50"
+ integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==
+ dependencies:
+ character-entities "^1.0.0"
+ character-entities-legacy "^1.0.0"
+ character-reference-invalid "^1.0.0"
+ is-alphanumerical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-hexadecimal "^1.0.0"
+
parse-entities@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
@@ -11789,6 +11849,11 @@ raf@^3.4.1:
dependencies:
performance-now "^2.1.0"
+ramda@^0.26:
+ version "0.26.1"
+ resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
+ integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
+
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
version "2.1.0"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
@@ -11951,6 +12016,11 @@ react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c"
integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==
+react-is@^16.8.6:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
react-jw-player@1.19.1:
version "1.19.1"
resolved "https://registry.yarnpkg.com/react-jw-player/-/react-jw-player-1.19.1.tgz#1d4ff99d3a5850ed4a628dbc6c473149c5490e1c"
@@ -11963,6 +12033,20 @@ react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
+react-markdown@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-4.3.1.tgz#39f0633b94a027445b86c9811142d05381300f2f"
+ integrity sha512-HQlWFTbDxTtNY6bjgp3C3uv1h2xcjCSi1zAEzfBW9OwJJvENSYiLXWNXN5hHLsoqai7RnZiiHzcnWdXk2Splzw==
+ dependencies:
+ html-to-react "^1.3.4"
+ mdast-add-list-metadata "1.0.1"
+ prop-types "^15.7.2"
+ react-is "^16.8.6"
+ remark-parse "^5.0.0"
+ unified "^6.1.5"
+ unist-util-visit "^1.3.0"
+ xtend "^4.0.1"
+
react-overlays@^3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-3.1.3.tgz#e6ac2b43fd2179924491bd794508072399940128"
@@ -12461,6 +12545,27 @@ relay-runtime@9.1.0:
"@babel/runtime" "^7.0.0"
fbjs "^1.0.0"
+remark-parse@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95"
+ integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==
+ dependencies:
+ collapse-white-space "^1.0.2"
+ is-alphabetical "^1.0.0"
+ is-decimal "^1.0.0"
+ is-whitespace-character "^1.0.0"
+ is-word-character "^1.0.0"
+ markdown-escapes "^1.0.0"
+ parse-entities "^1.1.0"
+ repeat-string "^1.5.4"
+ state-toggle "^1.0.0"
+ trim "0.0.1"
+ trim-trailing-lines "^1.0.0"
+ unherit "^1.0.4"
+ unist-util-remove-position "^1.0.0"
+ vfile-location "^2.0.0"
+ xtend "^4.0.1"
+
remark-parse@^8.0.0:
version "8.0.2"
resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.2.tgz#5999bc0b9c2e3edc038800a64ff103d0890b318b"
@@ -14284,6 +14389,18 @@ unicode-property-aliases-ecmascript@^1.0.4:
resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57"
integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==
+unified@^6.1.5:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba"
+ integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==
+ dependencies:
+ bail "^1.0.0"
+ extend "^3.0.0"
+ is-plain-obj "^1.1.0"
+ trough "^1.0.0"
+ vfile "^2.0.0"
+ x-is-string "^0.1.0"
+
unified@^9.0.0:
version "9.0.0"
resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d"
@@ -14337,11 +14454,23 @@ unist-util-find-all-after@^3.0.1:
dependencies:
unist-util-is "^4.0.0"
+unist-util-is@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd"
+ integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==
+
unist-util-is@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.2.tgz#c7d1341188aa9ce5b3cff538958de9895f14a5de"
integrity sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==
+unist-util-remove-position@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020"
+ integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==
+ dependencies:
+ unist-util-visit "^1.1.0"
+
unist-util-remove-position@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc"
@@ -14349,6 +14478,11 @@ unist-util-remove-position@^2.0.0:
dependencies:
unist-util-visit "^2.0.0"
+unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6"
+ integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==
+
unist-util-stringify-position@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.2.tgz#5a3866e7138d55974b640ec69a94bc19e0f3fa12"
@@ -14356,6 +14490,18 @@ unist-util-stringify-position@^2.0.0:
dependencies:
"@types/unist" "^2.0.2"
+unist-util-visit-parents@1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06"
+ integrity sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==
+
+unist-util-visit-parents@^2.0.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9"
+ integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==
+ dependencies:
+ unist-util-is "^3.0.0"
+
unist-util-visit-parents@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.2.tgz#d4076af3011739c71d2ce99d05de37d545f4351d"
@@ -14364,6 +14510,13 @@ unist-util-visit-parents@^3.0.0:
"@types/unist" "^2.0.0"
unist-util-is "^4.0.0"
+unist-util-visit@^1.1.0, unist-util-visit@^1.3.0:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3"
+ integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==
+ dependencies:
+ unist-util-visit-parents "^2.0.0"
+
unist-util-visit@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.2.tgz#3843782a517de3d2357b4c193b24af2d9366afb7"
@@ -14581,11 +14734,23 @@ verror@1.10.0:
core-util-is "1.0.2"
extsprintf "^1.2.0"
+vfile-location@^2.0.0:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e"
+ integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==
+
vfile-location@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3"
integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ==
+vfile-message@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1"
+ integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==
+ dependencies:
+ unist-util-stringify-position "^1.1.1"
+
vfile-message@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
@@ -14594,6 +14759,16 @@ vfile-message@^2.0.0:
"@types/unist" "^2.0.0"
unist-util-stringify-position "^2.0.0"
+vfile@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a"
+ integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==
+ dependencies:
+ is-buffer "^1.1.4"
+ replace-ext "1.0.0"
+ unist-util-stringify-position "^1.0.0"
+ vfile-message "^1.0.0"
+
vfile@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.1.0.tgz#d79248957f43225d57ff67a56effc67bef08946e"
@@ -15121,6 +15296,11 @@ ws@^6.1.2, ws@^6.2.1:
dependencies:
async-limiter "~1.0.0"
+x-is-string@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"
+ integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=
+
xml-name-validator@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"