diff --git a/web/.github/dependabot.yml b/web/.github/dependabot.yml
new file mode 100644
index 000000000..b13bdfc42
--- /dev/null
+++ b/web/.github/dependabot.yml
@@ -0,0 +1,10 @@
+version: 2
+updates:
+ - package-ecosystem: "npm"
+ directory: /
+ open-pull-requests-limit: 3
+ schedule:
+ interval: "daily"
+ reviewers:
+ - "gingervitis"
+ - "gabek"
\ No newline at end of file
diff --git a/web/components/config/video-variant-form.tsx b/web/components/config/video-variant-form.tsx
index ddd421164..a18f2f4cf 100644
--- a/web/components/config/video-variant-form.tsx
+++ b/web/components/config/video-variant-form.tsx
@@ -11,11 +11,11 @@ const { Panel } = Collapse;
const VIDEO_VARIANT_DEFAULTS = {
framerate: {
- min: 10,
- max: 90,
+ min: 24,
+ max: 120,
defaultValue: 24,
unit: 'fps',
- incrementBy: 1,
+ incrementBy: null,
tip: 'You prob wont need to touch this unless youre a hardcore gamer and need all the bitties',
},
videoBitrate: {
@@ -97,14 +97,55 @@ export default function VideoVariantForm({
const framerateMin = framerateDefaults.min;
const framerateMax = framerateDefaults.max;
const framerateUnit = framerateDefaults.unit;
+ const framerateMarks = {
+ [framerateMin]: `${framerateMin} ${framerateUnit}`,
+ 30: '',
+ 60: '',
+ [framerateMax]: `${framerateMax} ${framerateUnit}`,
+ };
const videoBitrateDefaults = VIDEO_VARIANT_DEFAULTS.videoBitrate;
const videoBRMin = videoBitrateDefaults.min;
const videoBRMax = videoBitrateDefaults.max;
const videoBRUnit = videoBitrateDefaults.unit;
+ const videoBRMarks = {
+ [videoBRMin]: `${videoBRMin} ${videoBRUnit}`,
+ 3000: 3000,
+ 4500: 4500,
+ [videoBRMax]: `${videoBRMax} ${videoBRUnit}`,
+ };
- const selectedVideoBRnote = `Selected: ${dataState.videoBitrate}${videoBRUnit} - it sucks`;
- const selectedFramerateNote = `Selected: ${dataState.framerate}${framerateUnit} - whoa there`;
+ const selectedVideoBRnote = () => {
+ let note = `Selected: ${dataState.videoBitrate}${videoBRUnit}`;
+ if (dataState.videoBitrate < 3000) {
+ note = `${note} - Good for low bandwidth environments.`;
+ } else if (dataState.videoBitrate < 4500) {
+ note = `${note} - Good for most bandwidth environments.`;
+ } else {
+ note = `${note} - Good for high bandwidth environments.`;
+ }
+ return note;
+ };
+ const selectedFramerateNote = () => {
+ let note = `Selected: ${dataState.framerate}${framerateUnit}`;
+ switch (dataState.framerate) {
+ case 24:
+ note = `${note} - Good for film, presentations, music, low power/bandwidth servers.`;
+ break;
+ case 30:
+ note = `${note} - Good for slow/casual games, chat, general purpose.`;
+ break;
+ case 60:
+ note = `${note} - Good for fast/action games, sports, HD video.`;
+ break;
+ case 120:
+ note = `${note} - Experimental, use at your own risk!`;
+ break;
+ default:
+ note = '';
+ }
+ return note;
+ };
const selectedPresetNote = '';
return (
@@ -162,14 +203,9 @@ export default function VideoVariantForm({
step={videoBitrateDefaults.incrementBy}
min={videoBRMin}
max={videoBRMax}
- marks={{
- [videoBRMin]: `${videoBRMin} ${videoBRUnit}`,
- [videoBRMax]: `${videoBRMax} ${videoBRUnit}`,
- }}
+ marks={videoBRMarks}
/>
- {selectedVideoBRnote && (
- {selectedVideoBRnote}
- )}
+ {selectedVideoBRnote()}
@@ -213,14 +249,9 @@ export default function VideoVariantForm({
step={framerateDefaults.incrementBy}
min={framerateMin}
max={framerateMax}
- marks={{
- [framerateMin]: `${framerateMin} ${framerateUnit}`,
- [framerateMax]: `${framerateMax} ${framerateUnit}`,
- }}
+ marks={framerateMarks}
/>
- {selectedFramerateNote ? (
- {selectedFramerateNote}
- ) : null}
+ {selectedFramerateNote()}
diff --git a/web/package-lock.json b/web/package-lock.json
index b8b7e249f..d6cb10228 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1567,9 +1567,9 @@
}
},
"@types/chart.js": {
- "version": "2.9.28",
- "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.28.tgz",
- "integrity": "sha512-9YYhsxRngRJb0dkuaU5BezkF+zvvVHnwdRw+rtlahtFb4zqNf9YSgWsOq+dLYeh0fqsWmHUYLR64eNigh02F+w==",
+ "version": "2.9.30",
+ "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.30.tgz",
+ "integrity": "sha512-EgjxUUZFvf6ls3kW2CwyrnSJhgyKxgwrlp/W5G9wqyPEO9iFatO63zAA7L24YqgMxiDjQ+tG7ODU+2yWH91lPg==",
"dev": true,
"requires": {
"moment": "^2.10.2"
@@ -4047,9 +4047,9 @@
}
},
"eslint-plugin-prettier": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz",
- "integrity": "sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz",
+ "integrity": "sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ==",
"dev": true,
"requires": {
"prettier-linter-helpers": "^1.0.0"
@@ -4902,13 +4902,30 @@
}
},
"domutils": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.2.tgz",
- "integrity": "sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
+ "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.0.1",
- "domhandler": "^3.3.0"
+ "domhandler": "^4.0.0"
+ },
+ "dependencies": {
+ "domhandler": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
+ "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
+ "requires": {
+ "domelementtype": "^2.1.0"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
+ "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
+ }
+ }
+ }
}
},
"htmlparser2": {
@@ -5587,20 +5604,21 @@
}
},
"mdast-util-from-markdown": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.1.tgz",
- "integrity": "sha512-qJXNcFcuCSPqUF0Tb0uYcFDIq67qwB3sxo9RPdf9vG8T90ViKnksFqdB/Coq2a7sTnxL/Ify2y7aIQXDkQFH0w==",
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz",
+ "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==",
"requires": {
"@types/mdast": "^3.0.0",
- "mdast-util-to-string": "^1.0.0",
- "micromark": "~2.10.0",
- "parse-entities": "^2.0.0"
+ "mdast-util-to-string": "^2.0.0",
+ "micromark": "~2.11.0",
+ "parse-entities": "^2.0.0",
+ "unist-util-stringify-position": "^2.0.0"
}
},
"mdast-util-to-string": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz",
- "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A=="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
+ "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
},
"mdurl": {
"version": "1.0.1",
@@ -5628,9 +5646,9 @@
"dev": true
},
"micromark": {
- "version": "2.10.1",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.10.1.tgz",
- "integrity": "sha512-fUuVF8sC1X7wsCS29SYQ2ZfIZYbTymp0EYr6sab3idFjigFFjGa5UwoniPlV9tAgntjuapW1t9U+S0yDYeGKHQ==",
+ "version": "2.11.4",
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz",
+ "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==",
"requires": {
"debug": "^4.0.0",
"parse-entities": "^2.0.0"
@@ -7355,9 +7373,9 @@
}
},
"react-markdown": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-5.0.2.tgz",
- "integrity": "sha512-kmkB4JbV7LqkDAjvaKRKtodB3n3Id76/DalaDun1U8FuLB0SenPfvH+jAQ5Pcpo54cACRQc1LB1yXmuuuIVecw==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-5.0.3.tgz",
+ "integrity": "sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w==",
"requires": {
"@types/mdast": "^3.0.3",
"@types/unist": "^2.0.3",
@@ -7627,11 +7645,6 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
},
- "replace-ext": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
- "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs="
- },
"resize-observer-polyfill": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
@@ -9038,9 +9051,9 @@
},
"dependencies": {
"is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
}
}
},
@@ -9077,9 +9090,9 @@
}
},
"unist-util-is": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.3.tgz",
- "integrity": "sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz",
+ "integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA=="
},
"unist-util-stringify-position": {
"version": "2.0.3",
@@ -9235,21 +9248,20 @@
}
},
"vfile": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz",
- "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
+ "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
"requires": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
- "replace-ext": "1.0.0",
"unist-util-stringify-position": "^2.0.0",
"vfile-message": "^2.0.0"
},
"dependencies": {
"is-buffer": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
- "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A=="
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
+ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
}
}
},
diff --git a/web/package.json b/web/package.json
index 6b3be22ab..e4f99c1d1 100644
--- a/web/package.json
+++ b/web/package.json
@@ -20,12 +20,12 @@
"react-chartkick": "^0.4.1",
"react-dom": "16.13.1",
"react-linkify": "^1.0.0-alpha",
- "react-markdown": "^5.0.2",
+ "react-markdown": "^5.0.3",
"react-markdown-editor-lite": "^1.2.3",
"sass": "^1.26.11"
},
"devDependencies": {
- "@types/chart.js": "^2.9.28",
+ "@types/chart.js": "^2.9.30",
"@types/classnames": "^2.2.11",
"@types/markdown-it": "^12.0.1",
"@types/node": "^14.11.2",
@@ -39,7 +39,7 @@
"eslint-config-prettier": "^6.12.0",
"eslint-plugin-import": "^2.22.1",
"eslint-plugin-jsx-a11y": "^6.3.1",
- "eslint-plugin-prettier": "^3.1.4",
+ "eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-react": "^7.21.2",
"eslint-plugin-react-hooks": "^4.1.2",
"prettier": "^2.1.2",