);
}
@@ -87,4 +111,6 @@ ToggleSwitch.defaultProps = {
disabled: false,
label: '',
tip: '',
+ useSubmit: false,
+ onChange: null,
};
diff --git a/web/components/config/reset-yp.tsx b/web/components/config/reset-yp.tsx
new file mode 100644
index 000000000..97d3ad79d
--- /dev/null
+++ b/web/components/config/reset-yp.tsx
@@ -0,0 +1,42 @@
+import { Popconfirm, Button, Typography } from 'antd';
+import { useContext } from 'react';
+import { AlertMessageContext } from '../../utils/alert-message-context';
+
+import { API_YP_RESET, fetchData } from '../../utils/apis';
+
+export default function ResetYP() {
+ const { setMessage } = useContext(AlertMessageContext);
+
+ const { Title } = Typography;
+
+ const resetDirectoryRegistration = async () => {
+ try {
+ await fetchData(API_YP_RESET);
+ setMessage('');
+ } catch (error) {
+ alert(error);
+ }
+ };
+ return (
+ <>
+
+ If you are experiencing issues with your listing on the Owncast Directory and were asked to
+ "reset" your connection to the service, you can do that here. The next time you go
+ live it will try and re-register your server with the directory from scratch.
+
+ >
+ );
+}
diff --git a/web/components/config/social-icons-dropdown.tsx b/web/components/config/social-icons-dropdown.tsx
index cb3a621d8..dec12cdf0 100644
--- a/web/components/config/social-icons-dropdown.tsx
+++ b/web/components/config/social-icons-dropdown.tsx
@@ -19,11 +19,11 @@ export default function SocialDropdown({ iconList, selectedOption, onSelected }:
const inititalSelected = selectedOption === '' ? null : selectedOption;
return (
-
+
If you are looking for a platform name not on this list, please select Other and type in
your own name. A logo will not be provided.
-
+
If you DO have a logo, drop it in to the /webroot/img/platformicons
directory
and update the /socialHandle.go
list. Then restart the server and it will show
up in the list.
diff --git a/web/components/config/video-latency.tsx b/web/components/config/video-latency.tsx
index c213e0f6d..39b7e1e3c 100644
--- a/web/components/config/video-latency.tsx
+++ b/web/components/config/video-latency.tsx
@@ -46,9 +46,6 @@ function SegmentToolTip({ value }: SegmentToolTipProps) {
export default function VideoLatency() {
const [submitStatus, setSubmitStatus] = useState(null);
-
- // const [submitStatus, setSubmitStatus] = useState(null);
- // const [submitStatusMessage, setSubmitStatusMessage] = useState('');
const [selectedOption, setSelectedOption] = useState(null);
const serverStatusData = useContext(ServerStatusContext);
@@ -68,7 +65,6 @@ export default function VideoLatency() {
const resetStates = () => {
setSubmitStatus(null);
- // setSubmitStatusMessage('');
resetTimer = null;
clearTimeout(resetTimer);
};
@@ -88,8 +84,6 @@ export default function VideoLatency() {
});
setSubmitStatus(createInputStatus(STATUS_SUCCESS, 'Latency buffer level updated.'));
- // setSubmitStatus('success');
- // setSubmitStatusMessage('Variants updated.');
resetTimer = setTimeout(resetStates, RESET_TIMEOUT);
if (serverStatusData.online) {
setMessage(
@@ -100,8 +94,6 @@ export default function VideoLatency() {
onError: (message: string) => {
setSubmitStatus(createInputStatus(STATUS_ERROR, message));
- // setSubmitStatus('error');
- // setSubmitStatusMessage(message);
resetTimer = setTimeout(resetStates, RESET_TIMEOUT);
},
});
@@ -113,15 +105,19 @@ export default function VideoLatency() {
return (
-
Latency Buffer
-
- While it's natural to want to keep your latency as low as possible, you may experience
+
+ Latency Buffer
+
+
+ While it's natural to want to keep your latency as low as possible, you may experience
reduced error tolerance and stability in some environments the lower you go.
- For interactive live streams you may want to experiment with a lower latency, for
- non-interactive broadcasts you may want to increase it.{' '}
-
Read to learn more.
-
+
+ For interactive live streams you may want to experiment with a lower latency, for
+ non-interactive broadcasts you may want to increase it.{' '}
+ Read to learn more.
+
+
}
@@ -132,8 +128,8 @@ export default function VideoLatency() {
defaultValue={selectedOption}
value={selectedOption}
/>
+
-
);
}
diff --git a/web/components/config/video-variant-form.tsx b/web/components/config/video-variant-form.tsx
index 5e0035b65..79db89d35 100644
--- a/web/components/config/video-variant-form.tsx
+++ b/web/components/config/video-variant-form.tsx
@@ -1,11 +1,12 @@
// This content populates the video variant modal, which is spawned from the variants table.
import React from 'react';
-import { Slider, Switch, Collapse } from 'antd';
+import { Slider, Switch, Collapse, Typography } from 'antd';
import { FieldUpdaterFunc, VideoVariant, UpdateArgs } from '../../types/config-section';
import TextField from './form-textfield';
import { DEFAULT_VARIANT_STATE } from '../../utils/config-constants';
import InfoTip from '../info-tip';
import CPUUsageSelector from './cpu-usage';
+// import ToggleSwitch from './form-toggleswitch-with-submit';
const { Panel } = Collapse;
@@ -55,7 +56,6 @@ const VIDEO_VARIANT_DEFAULTS = {
tip: "Optionally resize this content's height.",
},
};
-
interface VideoVariantFormProps {
dataState: VideoVariant;
onUpdateField: FieldUpdaterFunc;
@@ -79,6 +79,7 @@ export default function VideoVariantForm({
};
const handleScaledWidthChanged = (args: UpdateArgs) => {
const value = Number(args.value);
+ // eslint-disable-next-line no-restricted-globals
if (isNaN(value)) {
return;
}
@@ -86,6 +87,7 @@ export default function VideoVariantForm({
};
const handleScaledHeightChanged = (args: UpdateArgs) => {
const value = Number(args.value);
+ // eslint-disable-next-line no-restricted-globals
if (isNaN(value)) {
return;
}
@@ -108,124 +110,123 @@ export default function VideoVariantForm({
return (
-
+
Say a thing here about how this all works. Read more{' '}
here .
-
-
-
+
- {/* ENCODER PRESET FIELD */}
-
-
-
- {selectedPresetNote ? (
- {selectedPresetNote}
- ) : null}
-
-
-
- {/* VIDEO PASSTHROUGH FIELD */}
-
-
-
-
- Use Video Passthrough?
-
-
-
-
-
-
-
- {/* VIDEO BITRATE FIELD */}
-
-
-
- Video Bitrate:
-
-
- `${value} ${videoBRUnit}`}
- disabled={dataState.videoPassthrough === true}
- defaultValue={dataState.videoBitrate}
- value={dataState.videoBitrate}
- onChange={handleVideoBitrateChange}
- step={videoBitrateDefaults.incrementBy}
- min={videoBRMin}
- max={videoBRMax}
- marks={{
- [videoBRMin]: `${videoBRMin} ${videoBRUnit}`,
- [videoBRMax]: `${videoBRMax} ${videoBRUnit}`,
- }}
- />
- {selectedVideoBRnote ? (
- {selectedVideoBRnote}
- ) : null}
-
-
-
-
-
-
- Resizing your content will take additional resources on your server. If you wish to
- optionally resize your output for this stream variant then you should either set the
- width or the height to keep your aspect ratio.
-
-
-
-
-
-
+
+ {/* ENCODER PRESET FIELD */}
+
+
+ {selectedPresetNote && (
+ {selectedPresetNote}
+ )}
- {/* FRAME RATE FIELD */}
-
+ {/* VIDEO PASSTHROUGH FIELD */}
+
-
- Frame rate:
+
+ Use Video Passthrough?
- `${value} ${framerateUnit}`}
- defaultValue={dataState.framerate}
- value={dataState.framerate}
- onChange={handleFramerateChange}
- step={framerateDefaults.incrementBy}
- min={framerateMin}
- max={framerateMax}
- marks={{
- [framerateMin]: `${framerateMin} ${framerateUnit}`,
- [framerateMax]: `${framerateMax} ${framerateUnit}`,
- }}
+ {/* todo: change to ToggleSwitch for layout */}
+
- {selectedFramerateNote ? (
- {selectedFramerateNote}
- ) : null}
-
-
+
+ {/* VIDEO BITRATE FIELD */}
+
+
+ Video Bitrate
+
+
{VIDEO_VARIANT_DEFAULTS.videoBitrate.tip}
+
+ `${value} ${videoBRUnit}`}
+ disabled={dataState.videoPassthrough === true}
+ defaultValue={dataState.videoBitrate}
+ value={dataState.videoBitrate}
+ onChange={handleVideoBitrateChange}
+ step={videoBitrateDefaults.incrementBy}
+ min={videoBRMin}
+ max={videoBRMax}
+ marks={{
+ [videoBRMin]: `${videoBRMin} ${videoBRUnit}`,
+ [videoBRMax]: `${videoBRMax} ${videoBRUnit}`,
+ }}
+ />
+ {selectedVideoBRnote && (
+ {selectedVideoBRnote}
+ )}
+
+
+
+
+
+
+ Resizing your content will take additional resources on your server. If you wish to
+ optionally resize your output for this stream variant then you should either set the
+ width or the height to keep your aspect ratio.
+
+
+
+
+
+
+
+
+ {/* FRAME RATE FIELD */}
+
+
+
+ Frame rate:
+
+
+ `${value} ${framerateUnit}`}
+ defaultValue={dataState.framerate}
+ value={dataState.framerate}
+ onChange={handleFramerateChange}
+ step={framerateDefaults.incrementBy}
+ min={framerateMin}
+ max={framerateMax}
+ marks={{
+ [framerateMin]: `${framerateMin} ${framerateUnit}`,
+ [framerateMax]: `${framerateMax} ${framerateUnit}`,
+ }}
+ />
+ {selectedFramerateNote ? (
+ {selectedFramerateNote}
+ ) : null}
+
+
+
+
+
);
}
diff --git a/web/components/config/video-variants-table.tsx b/web/components/config/video-variants-table.tsx
index c22e62118..d8e1a2a11 100644
--- a/web/components/config/video-variants-table.tsx
+++ b/web/components/config/video-variants-table.tsx
@@ -12,10 +12,17 @@ import VideoVariantForm from './video-variant-form';
import {
API_VIDEO_VARIANTS,
DEFAULT_VARIANT_STATE,
- SUCCESS_STATES,
RESET_TIMEOUT,
postConfigUpdateToAPI,
} from '../../utils/config-constants';
+import {
+ createInputStatus,
+ StatusState,
+ STATUS_ERROR,
+ STATUS_PROCESSING,
+ STATUS_SUCCESS,
+} from '../../utils/input-statuses';
+import FormStatusIndicator from './form-status-indicator';
const { Title } = Typography;
@@ -36,8 +43,7 @@ export default function CurrentVariantsTable() {
// current data inside modal
const [modalDataState, setModalDataState] = useState(DEFAULT_VARIANT_STATE);
- const [submitStatus, setSubmitStatus] = useState(null);
- const [submitStatusMessage, setSubmitStatusMessage] = useState('');
+ const [submitStatus, setSubmitStatus] = useState(null);
const serverStatusData = useContext(ServerStatusContext);
const { serverConfig, setFieldInConfigState } = serverStatusData || {};
@@ -52,7 +58,6 @@ export default function CurrentVariantsTable() {
const resetStates = () => {
setSubmitStatus(null);
- setSubmitStatusMessage('');
resetTimer = null;
clearTimeout(resetTimer);
};
@@ -65,6 +70,8 @@ export default function CurrentVariantsTable() {
// posts all the variants at once as an array obj
const postUpdateToAPI = async (postValue: any) => {
+ setSubmitStatus(createInputStatus(STATUS_PROCESSING));
+
await postConfigUpdateToAPI({
apiPath: API_VIDEO_VARIANTS,
data: { value: postValue },
@@ -79,8 +86,7 @@ export default function CurrentVariantsTable() {
setModalProcessing(false);
handleModalCancel();
- setSubmitStatus('success');
- setSubmitStatusMessage('Variants updated.');
+ setSubmitStatus(createInputStatus(STATUS_SUCCESS, 'Variants updated'));
resetTimer = setTimeout(resetStates, RESET_TIMEOUT);
if (serverStatusData.online) {
@@ -90,8 +96,7 @@ export default function CurrentVariantsTable() {
}
},
onError: (message: string) => {
- setSubmitStatus('error');
- setSubmitStatusMessage(message);
+ setSubmitStatus(createInputStatus(STATUS_ERROR, message));
resetTimer = setTimeout(resetStates, RESET_TIMEOUT);
},
});
@@ -112,7 +117,7 @@ export default function CurrentVariantsTable() {
postUpdateToAPI(postData);
};
- const handleDeleteVariant = index => {
+ const handleDeleteVariant = (index: number) => {
const postData = [...videoQualityVariants];
postData.splice(index, 1);
postUpdateToAPI(postData);
@@ -125,9 +130,6 @@ export default function CurrentVariantsTable() {
});
};
- const { icon: newStatusIcon = null, message: newStatusMessage = '' } =
- SUCCESS_STATES[submitStatus] || {};
-
const videoQualityColumns: ColumnsType = [
{
title: 'Video bitrate',
@@ -176,12 +178,6 @@ export default function CurrentVariantsTable() {
},
];
- const statusMessage = (
-
- {newStatusIcon} {newStatusMessage} {submitStatusMessage}
-
- );
-
const videoQualityVariantData = videoQualityVariants.map((variant, index) => ({
key: index + 1,
...variant,
@@ -189,9 +185,11 @@ export default function CurrentVariantsTable() {
return (
<>
- Stream output
+
+ Stream output
+
- {statusMessage}
+
- {statusMessage}
+
{
try {
const result = await upgradeVersionAvailable(versionNumber);
@@ -80,7 +80,8 @@ export default function MainLayout(props) {
});
const upgradeMenuItemStyle = upgradeVersion ? 'block' : 'none';
- const upgradeVersionString = upgradeVersion || '';
+ const upgradeVersionString = `${upgradeVersion}` || '';
+ const upgradeMessage = `Upgrade to v${upgradeVersionString}`;
const clearAlertMessage = () => {
alertMessage.setMessage(null);
@@ -123,10 +124,10 @@ export default function MainLayout(props) {
@@ -150,13 +151,6 @@ export default function MainLayout(props) {
General
-
- Social Links
-
-
-
- Page Content
-
Server Setup
@@ -177,9 +171,7 @@ export default function MainLayout(props) {
Logs
-
- Upgrade to v{upgradeVersionString}
-
+ {upgradeMessage}
} title="Integrations">
diff --git a/web/package-lock.json b/web/package-lock.json
index 94430ec7f..b8b7e249f 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -1587,6 +1587,12 @@
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
+ "@types/highlight.js": {
+ "version": "9.12.4",
+ "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.4.tgz",
+ "integrity": "sha512-t2szdkwmg2JJyuCM20e8kR2X59WCE5Zkl4bzm1u1Oukjm79zpbiAv+QjnwLnuuV0WHEcX2NgUItu0pAMKuOPww==",
+ "dev": true
+ },
"@types/json-schema": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz",
@@ -1598,6 +1604,23 @@
"integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
"dev": true
},
+ "@types/linkify-it": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.0.tgz",
+ "integrity": "sha512-x9OaQQTb1N2hPZ/LWJsqushexDvz7NgzuZxiRmZio44WPuolTZNHDBCrOxCzRVOMwamJRO2dWax5NbygOf1OTQ==",
+ "dev": true
+ },
+ "@types/markdown-it": {
+ "version": "12.0.1",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.0.1.tgz",
+ "integrity": "sha512-mHfT8j/XkPb1uLEfs0/C3se6nd+webC2kcqcy8tgcVr0GDEONv/xaQzAN+aQvkxQXk/jC0Q6mPS+0xhFwRF35g==",
+ "dev": true,
+ "requires": {
+ "@types/highlight.js": "^9.7.0",
+ "@types/linkify-it": "*",
+ "@types/mdurl": "*"
+ }
+ },
"@types/mdast": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz",
@@ -1606,6 +1629,12 @@
"@types/unist": "*"
}
},
+ "@types/mdurl": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz",
+ "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==",
+ "dev": true
+ },
"@types/node": {
"version": "14.11.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.2.tgz",
diff --git a/web/package.json b/web/package.json
index 1094a9c48..6b3be22ab 100644
--- a/web/package.json
+++ b/web/package.json
@@ -27,6 +27,7 @@
"devDependencies": {
"@types/chart.js": "^2.9.28",
"@types/classnames": "^2.2.11",
+ "@types/markdown-it": "^12.0.1",
"@types/node": "^14.11.2",
"@types/prop-types": "^15.7.3",
"@types/react": "^16.9.49",
diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx
index 31fced645..75576a8b2 100644
--- a/web/pages/_app.tsx
+++ b/web/pages/_app.tsx
@@ -1,19 +1,19 @@
// order matters!
import 'antd/dist/antd.css';
import '../styles/colors.scss';
-import '../styles/globals.scss';
import '../styles/ant-overrides.scss';
import '../styles/markdown-editor.scss';
+import '../styles/globals.scss';
import '../styles/main-layout.scss';
import '../styles/form-textfields.scss';
-import '../styles/form-toggleswitch.scss';
import '../styles/form-misc-elements.scss';
import '../styles/config-socialhandles.scss';
import '../styles/config-storage.scss';
import '../styles/config-tags.scss';
import '../styles/config-video-variants.scss';
+import '../styles/config-public-details.scss';
import '../styles/home.scss';
import '../styles/chat.scss';
diff --git a/web/pages/config-public-details.tsx b/web/pages/config-public-details.tsx
index 821e68026..0798871b8 100644
--- a/web/pages/config-public-details.tsx
+++ b/web/pages/config-public-details.tsx
@@ -1,26 +1,42 @@
import React from 'react';
import { Typography } from 'antd';
-import Link from 'next/link';
import EditInstanceDetails from '../components/config/edit-instance-details';
-import EditDirectoryDetails from '../components/config/edit-directory';
import EditInstanceTags from '../components/config/edit-tags';
+import EditSocialLinks from '../components/config/edit-social-links';
+import EditPageContent from '../components/config/edit-page-content';
const { Title } = Typography;
export default function PublicFacingDetails() {
return (
- <>
- General Settings
-
+
+
+ General Settings
+
+
The following are displayed on your site to describe your stream and its content.{' '}
Learn more.
-
);
}
diff --git a/web/pages/config-server-details.tsx b/web/pages/config-server-details.tsx
index 40ee36149..b9c9008d6 100644
--- a/web/pages/config-server-details.tsx
+++ b/web/pages/config-server-details.tsx
@@ -7,12 +7,14 @@ const { Title } = Typography;
export default function ConfigServerDetails() {
return (
-
Server Settings
-
- You should change your stream key from the default and keep it safe. For most people it's
- likely the other settings will not need to be changed.
+
+ Server Settings
+
+
+ You should change your stream key from the default and keep it safe. For most people
+ it's likely the other settings will not need to be changed.
-
diff --git a/web/pages/config-storage.tsx b/web/pages/config-storage.tsx
index 7df326eec..e0f4a4e39 100644
--- a/web/pages/config-storage.tsx
+++ b/web/pages/config-storage.tsx
@@ -7,13 +7,15 @@ const { Title } = Typography;
export default function ConfigStorageInfo() {
return (
<>
-
Storage
-
+
+ Storage
+
+
Owncast supports optionally using external storage providers to distribute your video. Learn
more about this by visiting our{' '}
Storage Documentation .
-
+
Configuring this incorrectly will likely cause your video to be unplayable. Double check the
documentation for your storage provider on how to configure the bucket you created for
Owncast.
diff --git a/web/pages/config-video.tsx b/web/pages/config-video.tsx
index 92a99adb8..ec1fe6b32 100644
--- a/web/pages/config-video.tsx
+++ b/web/pages/config-video.tsx
@@ -9,22 +9,24 @@ const { Title } = Typography;
export default function ConfigVideoSettings() {
return (
-
Video configuration
-
+
+ Video configuration
+
+
Before changing your video configuration{' '}
visit the video documentation to learn
how it impacts your stream performance.
-
-
-
-
-
-
-
-
-
+
);
}
diff --git a/web/styles/ant-overrides.scss b/web/styles/ant-overrides.scss
index 41fa14810..52e7cbbab 100644
--- a/web/styles/ant-overrides.scss
+++ b/web/styles/ant-overrides.scss
@@ -1,52 +1,231 @@
// GENERAL ANT OVERRIDES
+
+
+// RESET BG, TEXT COLORS
.ant-layout,
-.ant-layout-footer,
-.ant-menu,
-.ant-menu.ant-menu-dark {
- background-color: transparent;
-}
-.owncast-layout .ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected {
- background-color: var(--owncast-purple);
-}
-
-// LAYOUT
.ant-layout-header,
-.ant-layout-sider {
- background-color: #07050d;
+.ant-layout-sider,
+.ant-layout-footer,
+.ant-card,
+.ant-collapse,
+.ant-collapse-content,
+.ant-table,
+.ant-table-thead > tr > th,
+.ant-table-small .ant-table-thead > tr > th,
+th.ant-table-column-sort,
+td.ant-table-column-sort,
+.ant-table-tbody > tr.ant-table-row:hover > td,
+.ant-table-thead th.ant-table-column-sort,
+.ant-menu,
+.ant-menu-submenu > .ant-menu,
+.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+ background-color: transparent;
+ color: var(--default-text-color)
}
-// MENU
-.ant-menu-dark .ant-menu-inline.ant-menu-sub {
- // background-color: rgba(255,255,255,.05);
- background-color: #140028;
+
+h1.ant-typography,
+h2.ant-typography,
+h3.ant-typography,
+h4.ant-typography,
+h5.ant-typography,
+.ant-typography,
+.ant-typography h1,
+.ant-typography h2,
+.ant-typography h3,
+.ant-typography h4,
+.ant-typography h5 {
+ color: var(--default-text-color);
+ font-weight: 500;
}
-// CARD
+.ant-typography.ant-typography-secondary {
+ color: rgba(255,255,255,.85);
+ font-weight: 400;
+}
+
+.ant-progress-text,
+.ant-progress-circle .ant-progress-text {
+ color: var(--default-text-color);
+}
+
+
+
+// ANT MENU
+// menu base
+.ant-menu-item {
+ transition-duration: var(--ant-transition-duration);
+
+ .anticon {
+ transition-duration: var(--ant-transition-duration);
+ color: var(--nav-text);
+ }
+
+ a {
+ transition-duration: var(--ant-transition-duration);
+ color: var(--nav-text);
+
+ &:hover {
+ color: white;
+ }
+ }
+ &:hover {
+ background-color: rgba(0,0,0,.15);
+
+ .anticon {
+ color: white;
+ }
+ }
+}
+// menu item selected
+.ant-menu-item-selected,
+.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {
+ background-color: black;
+ a {
+ color: var(--nav-selected-text);
+ }
+ .anticon {
+ color: var(--nav-selected-text);
+ }
+
+ // the right border color
+ &:after {
+ border-color: var(--nav-selected-text);
+ transition-duration: var(--ant-transition-duration);
+ }
+}
+// submenu items
+.ant-menu-submenu {
+ &> .ant-menu {
+ border-left: 1px solid rgba(255,255,255,.4);
+ background-color: rgba(0,0,0,.15);
+ }
+ .ant-menu-submenu-title {
+ transition-duration: var(--ant-transition-duration);
+ color: var(--nav-text);
+
+ .anticon {
+ color: var(--nav-text);
+ }
+ .ant-menu-submenu-arrow {
+ &:before,
+ &:after {
+ transition-duration: var(--ant-transition-duration);
+ background-image: linear-gradient(to right, var(--nav-text), var(--nav-text));
+ }
+ }
+ }
+ &:hover {
+ .ant-menu-submenu-title {
+ color: white;
+ .anticon {
+ color: white;
+ }
+ .ant-menu-submenu-arrow {
+ &:before,
+ &:after {
+ background-image: linear-gradient(to right, white, white);
+ }
+ }
+ }
+ }
+}
+
+
+// ANT RESULT
+.ant-result-title {
+ color: var(--default-text-color);
+}
+.ant-result-subtitle {
+ color: var(--default-text-color);
+}
+
+
+// ANT CARD
.ant-card {
- border-radius: .5em;
+ border-radius: var(--container-border-radius);
+ background-color: var(--container-bg-color);
+ color: var(--default-text-color);
+}
+.ant-card-bordered {
+ border-color: rgba(255,255,255,.25);
+}
+.ant-card-meta-title,
+.ant-card-meta-description {
+ color: white;
}
-// INPUT
-.ant-input-affix-wrapper {
- // border-radius: 5px;
- // background-color: rgba(255,255,255,.1);
+
+// ANT INPUT
+.ant-input-affix-wrapper,
+.ant-input-number {
+ background-color: var(--textfield-bg);
+ border-color: var(--textfield-border);
+ input,
textarea {
- // border-radius: 5px;
+ background-color: transparent;
+ color: rgba(255,255,255,.85);
+ border-color: rgba(0,0,0,1);
+ &::placeholder {
+ color: var(--textfield-border);
+ }
+ &:-webkit-autofill {
+ background-color: transparent;
+ }
}
- input {
- // background-color: transparent;
+}
+.ant-input-number:hover,
+.ant-input-affix-wrapper:hover {
+ border-color: var(--owncast-purple-highlight);
+ input,
+ textarea {
+ border-color: var(--owncast-purple-highlight);
}
}
+.ant-input-number:focus,
+.ant-input-affix-wrapper:focus,
+.ant-input-affix-wrapper-focused {
+ border-color: var(--owncast-purple);
+ input,
+ textarea {
+ color: white;
+ border-color: var(--owncast-purple);
+ }
+}
+.ant-input-textarea-clear-icon,
+.ant-input-clear-icon {
+ color: rgba(255,255,255,.5);
+}
+textarea.ant-input {
+ padding-right: 25px;
+}
-// BUTTON
-.ant-btn-primary:hover, .ant-btn-primary:focus {
- background-color: white;
- color: #40a9ff;
+
+
+
+// ANT BUTTON
+.ant-btn-primary {
+ background-color: var(--owncast-purple);
+ border-color: var(--owncast-purple);
}
-.ant-btn.ant-btn-primary:focus {
+.ant-btn-primary:hover,
+.ant-btn-primary:focus {
+ background-color: var(--form-focused);
+ border-color: var(--form-focused);
+}
+.ant-btn.ant-btn-primary:hover {
border-color: white;
+}
+.ant-btn-primary[disabled] {
+ background-color: rgba(255,255,255,.2);
+ border-color: rgba(255,255,255,.2);
+ color: white;
+ &:hover {
+ background-color: rgba(255,255,255,.2);
+ border-color: rgba(255,255,255,.2);
+ }
}
.ant-input-affix-wrapper,
.ant-btn {
@@ -54,29 +233,72 @@
transition-duration: 0.15s;
}
-// TABLE
+// ANT TABLE
.ant-table-thead > tr > th,
.ant-table-small .ant-table-thead > tr > th {
- background-color: #000;
+ transition-duration: var(--ant-transition-duration);
+ background-color: #112;
+ font-weight: 500;
+ color: var(--owncast-purple);
}
+.ant-table-tbody > tr > td,
+.ant-table-thead > tr > th,
+.ant-table-small .ant-table-thead > tr > th {
+ border-color: var(--textfield-border);
+}
+.ant-table-tbody > tr > td {
+ transition-duration: var(--ant-transition-duration);
+ background-color: var(--textfield-bg);
+}
+.ant-table-tbody > tr:nth-child(odd) > td {
+ background-color: var(--textfield-bg);
+}
+.ant-empty {
+ color: white;
+ opacity: .75;
+}
+.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {
+ &:hover > td {
+ background-color: transparent;
+ }
+}
+.ant-table-thead th.ant-table-column-has-sorters:hover {
+ background-color: var(--textfield-border);
+ .ant-table-filter-trigger-container {
+ background-color: var(--textfield-border);
+ }
+}
+
+
// MODAL
.ant-modal-content {
- border-radius: 6px;
+ border-radius: var(--container-border-radius);
+ border: 1px solid var(--owncast-purple-highlight);
}
.ant-modal-header {
- background-color: #1c173d;
- border-radius: 6px 6px 0 0;
+ border-radius: var(--container-border-radius) var(--container-border-radius) 0 0;
+}
+.ant-modal-close-x {
+ color: white;
}
.ant-modal-title {
- font-weight: bold;
- font-size: 1.5em;
+ font-weight: 500;
+ font-size: 1.25em;
+ color: var(--nav-selected-text);
}
.ant-modal-body {
- background-color: #33333c;
+ background-color: var(--nav-bg-color);
+ color: var(--default-text-color);
}
+.ant-modal-header,
.ant-modal-footer {
- background-color: #222229;
+ background-color: black;
+}
+.ant-modal-content,
+.ant-modal-header,
+.ant-modal-footer {
+ border-color: #333;
}
// SELECT
@@ -86,10 +308,59 @@
// SLIDER
-.ant-slider-with-marks {
- margin-right: 2em;
-}
+// .ant-slider-with-marks {
+// margin-right: 2em;
+// }
.ant-slider-mark-text {
font-size: .85em;
white-space: nowrap;
-}
\ No newline at end of file
+}
+
+// ANT SWITCH
+.ant-switch {
+ background-color: #666;
+}
+.ant-switch-checked {
+ background-color: var(--ant-success);
+ .ant-switch-inner {
+ color: white;
+ }
+}
+
+
+// ANT COLLAPSE
+.ant-collapse {
+ border-color: transparent;
+ &> .ant-collapse-item,
+ .ant-collapse-content {
+ border-color: transparent;
+ &> .ant-collapse-header {
+ border-color: transparent;
+ background-color: var(--textfield-bg);
+ color: var(--nav-text);
+ font-weight: 500;
+ }
+ }
+}
+.ant-collapse-content {
+ background-color: #181231;
+}
+
+
+
+// ANT POPOVER
+.ant-popover {
+
+}
+.ant-popover-inner {
+ background-color: black;
+}
+.ant-popover-message,
+.ant-popover-inner-content {
+ color: var(--default-text-color);
+
+}
+.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow {
+ border-color: black;
+}
+
diff --git a/web/styles/colors.scss b/web/styles/colors.scss
index 575542372..7770daeb3 100644
--- a/web/styles/colors.scss
+++ b/web/styles/colors.scss
@@ -1,14 +1,35 @@
+// rename to variables.scss
+
:root {
- --owncast-purple: rgba(90,103,216,1);
+
+ --default-text-color: #fff;
+
+ --owncast-purple: rgba(90,103,216,1); //5a67d8
--owncast-purple-highlight: #ccd;
--online-color: #73dd3f;
--owncast-dark1: #1f1f21;
-
--ant-error: #ff4d4f;
--ant-success: #52c41a;
--ant-warning: #faad14;
+ --ant-transition-duration: .15s;
+
+ --container-bg-color: #1A1C24;
+ --container-bg-color-alt: #251c49;
+ --container-border-radius: 2px;
+
+ --code-purple: #82aaff;
+
+ --nav-bg-color: #1A1C24;
+ --nav-text: #6a76ba;
+ --nav-selected-text: #c48dff;
+
+ --form-focused: #8d71ff;
+
+ --textfield-border: #373640;
+ --textfield-bg: #100f0f;
+
}
diff --git a/web/styles/config-public-details.scss b/web/styles/config-public-details.scss
new file mode 100644
index 000000000..868051455
--- /dev/null
+++ b/web/styles/config-public-details.scss
@@ -0,0 +1,65 @@
+// dealiing with some general layout on the public details page
+
+.config-public-details-page {
+ width: 100%;
+ .top-container {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: nowrap;
+
+ @media (max-width: 1200px) {
+ flex-wrap: wrap;
+ .social-items-container {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-around;
+ flex-wrap: nowrap;
+ margin: 1em 0;
+ width: 100%;
+ max-width: none;
+ .tags-module {
+ margin-right: 1em;
+ }
+ .form-module {
+ max-width: none;
+ }
+
+ @media (max-width: 980px) {
+ flex-direction: column;
+ .form-module {
+ width: 100%;
+ }
+ .tags-module {
+ margin-bottom: 0;
+ }
+ }
+ }
+ }
+ }
+ .instance-details-container {
+ width: 100%;
+ }
+ .social-items-container {
+ background-color: var(--container-bg-color-alt);
+ padding: 0 .75em;
+ margin-left: 1em;
+ max-width: 450px;
+ .form-module {
+ background-color: #000;
+ }
+
+ .social-handles-container {
+ min-width: 350px;
+ }
+ }
+ .instance-details-container,
+ .page-content-module {
+ margin: 1em 0;
+ }
+
+ .field-summary {
+ textarea {
+ height: 6em !important;
+ }
+ }
+}
\ No newline at end of file
diff --git a/web/styles/config-socialhandles.scss b/web/styles/config-socialhandles.scss
index 7cb9591d7..9e880c935 100644
--- a/web/styles/config-socialhandles.scss
+++ b/web/styles/config-socialhandles.scss
@@ -23,3 +23,35 @@
}
}
}
+
+.social-links-edit-container {
+ .social-handles-table {
+ .social-handle-cell {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ color: rgba(255,255,255,.85);
+
+ .option-icon {
+ height: 2em;
+ width: 2em;
+ line-height: normal;
+ }
+ .option-label {
+ display: flex;
+ flex-direction: column;
+ margin: 0 0 0 1em;
+ line-height: 2;
+ font-size: .85em;
+ }
+ }
+ .actions {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-evenly;
+ width: 6em;
+ }
+ }
+}
\ No newline at end of file
diff --git a/web/styles/config-storage.scss b/web/styles/config-storage.scss
index 3f3993509..d3f06bb74 100644
--- a/web/styles/config-storage.scss
+++ b/web/styles/config-storage.scss
@@ -2,6 +2,7 @@
.edit-storage-container {
+ padding: 1em;
.form-fields {
display: none;
margin-bottom: 1em;
@@ -13,7 +14,7 @@
}
.button-container {
- margin: 1em 0;
+ margin: 2em 0 1em 0;
}
.advanced-section {
margin: 1em 0;
diff --git a/web/styles/config-tags.scss b/web/styles/config-tags.scss
index f1d176693..f69936386 100644
--- a/web/styles/config-tags.scss
+++ b/web/styles/config-tags.scss
@@ -6,19 +6,24 @@
font-size: .85rem;
border-radius: 10em;
padding: .25em 1em;
- background-color: rgba(255,255,255,.5);
+ &:hover {
+ opacity: 1;
+ }
.ant-tag-close-icon {
transform: translateY(-1px);
margin-left: .3rem;
padding: 2px;
border-radius: 5rem;
- border: 1px solid #eee;
+ color: black;
+ border: 1px solid #000;
+ transition-duration: var(--ant-transition-duration);
&:hover {
- border-color: #e03;
+ border-color: #5a67d8;
+ background-color: white;
svg {
fill: black;
- transition: fill .3s;
+ transition: fill var(--ant-transition-duration);
}
}
}
@@ -30,8 +35,5 @@
flex-direction: row;
justify-content: flex-start;
align-items: center;
-
- .new-tag-input {
- width: 16em;
- }
+ margin-top: 2em;
}
diff --git a/web/styles/config-video-variants.scss b/web/styles/config-video-variants.scss
index a985d70f2..1d7526484 100644
--- a/web/styles/config-video-variants.scss
+++ b/web/styles/config-video-variants.scss
@@ -1,7 +1,30 @@
// styles for Video variant editor (table + modal)
+.config-video-variants {
+ .variants-table {
+ margin-top: 2em;
+ }
+
+ .variants-table-module {
+ min-width: 48%;
+ max-width: 600px;
+ margin-right: 1em
+ }
+
+}
+
+// modal content
.config-variant-form {
+ .description {
+ margin-top: 0;
+ }
+
+
+ .advanced-settings {
+ width: 48%;
+ margin-left: 2em;
+ }
.blurb {
margin: 1em;
opacity: .75;
@@ -13,58 +36,61 @@
opacity: .5;
font-style: italic;
}
- .section-intro {
- margin-bottom: 2em;
- }
- .field {
- margin-bottom: 2em;
- display: flex;
- flex-direction: row;
- justify-content: center;
- align-items: flex-start;
- transform: opacity .15s;
- &.disabled {
- opacity: .25;
- }
- .label {
- width: 40%;
- text-align: right;
- padding-right: 2em;
- font-weight: bold;
- color: var(--owncast-purple);
- }
- .info-tip {
- margin-right: 1em;
- }
- .form-component {
- width: 60%;
+
+ // .field {
+ // margin-bottom: 2em;
+ // display: flex;
+ // flex-direction: row;
+ // justify-content: center;
+ // align-items: flex-start;
+ // transform: opacity .15s;
+ // &.disabled {
+ // opacity: .25;
+ // }
+
+ // .label {
+ // width: 40%;
+ // text-align: right;
+ // padding-right: 2em;
+ // font-weight: bold;
+ // color: var(--owncast-purple);
+ // }
+ // .info-tip {
+ // margin-right: 1em;
+ // }
+ // .form-component {
+ // width: 60%;
- .selected-value-note {
- font-size: .85em;
- display: inline-block;
- text-align: center;
- }
- }
- }
- .ant-collapse {
- border: none;
- border-radius: 6px;
- }
- .ant-collapse > .ant-collapse-item:last-child,
- .ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header {
- border: none;
- background-color: rgba(0,0,0,.25);
- border-radius: 6px;
- }
- .ant-collapse-content {
- background-color: rgba(0,0,0,.1);
- }
+ // .selected-value-note {
+ // font-size: .85em;
+ // display: inline-block;
+ // text-align: center;
+ // }
+ // }
+ // }
+ // .ant-collapse {
+ // border: none;
+ // border-radius: 6px;
+ // }
+ // .ant-collapse > .ant-collapse-item:last-child,
+ // .ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header {
+ // border: none;
+ // background-color: rgba(0,0,0,.25);
+ // border-radius: 6px;
+ // }
+ // .ant-collapse-content {
+ // background-color: rgba(0,0,0,.1);
+ // }
}
.config-video-segements-conatiner {
+ // display: flex;
+ // flex-direction: row;
+ // justify-content: center;
+ // align-items: flex-start;
.status-message {
text-align: center;
@@ -82,4 +108,8 @@
margin-left: .5em;
opacity: .8;
}
+}
+
+.advanced-settings {
+ margin-top: 2em;
}
\ No newline at end of file
diff --git a/web/styles/config.scss b/web/styles/config.scss
index af2986587..e27398dc7 100644
--- a/web/styles/config.scss
+++ b/web/styles/config.scss
@@ -1,9 +1,10 @@
+// todo: put these somewhere else
+
+
-
-
-.config-page-content-form {
+.edit-page-content {
.page-content-actions {
margin-top: 1em;
display: flex;
@@ -26,25 +27,3 @@
margin: auto;
display: inline-block;
}
-
-// .social-option {
-// .ant-select-item-option-content {
-// display: flex;
-// flex-direction: row;
-// justify-content: flex-start;
-// align-items: center;
-// padding: .25em;
-
-// .option-icon {
-// height: 1.75em;
-// width: 1.75em;
-// }
-// .option-label {
-// display: inline-block;
-// margin-left: 1em;
-// }
-// }
-// }
-
-
-
diff --git a/web/styles/form-misc-elements.scss b/web/styles/form-misc-elements.scss
index dd2abd7cb..8030b45ae 100644
--- a/web/styles/form-misc-elements.scss
+++ b/web/styles/form-misc-elements.scss
@@ -29,7 +29,7 @@
/* TIP CONTAINER BASE */
.field-tip {
- font-size: .7em;
+ font-size: .8em;
color: rgba(255,255,255,.5)
}
@@ -39,9 +39,9 @@ Ideal for wrapping each Textfield on a page with many text fields in a row. This
*/
.field-container {
padding: .85em 0 .5em;
- &:nth-child(even) {
- background-color: rgba(0,0,0,.25);
- }
+ // &:nth-child(even) {
+ // background-color: rgba(0,0,0,.25);
+ // }
}
@@ -50,8 +50,27 @@ Ideal for wrapping each Textfield on a page with many text fields in a row. This
width: 90%;
margin: auto;
padding: 1em 2em .75em;
- background-color: black;
+ background-color: var(--textfield-border);
border-radius: 1em;
+ .ant-slider-rail {
+ background-color: black;
+ }
+ .ant-slider-track {
+ background-color: var(--nav-text);
+ }
+ .ant-slider-mark-text,
+ .ant-slider-mark-text-active {
+ color: white;
+ opacity: .5;
+ }
+ .ant-slider-mark-text-active {
+ opacity: 1;
+ }
+ .status-container {
+ width: 100%;
+ margin: .5em auto;
+ text-align: center;
+ }
}
diff --git a/web/styles/form-textfields.scss b/web/styles/form-textfields.scss
index 29ffbe7f7..276c3a37f 100644
--- a/web/styles/form-textfields.scss
+++ b/web/styles/form-textfields.scss
@@ -1,8 +1,14 @@
-// Base styles for form-textfield, form-textfield-with-submit
+/*
+Base styles for
+- form-textfield,
+- form-textfield-with-submit
+- form-toggleswitch
+ Both text and toggle use this class for base layout.
+*/
+.formfield-container {
+ --form-label-container-width: 15em;
-/* TEXTFIELD-CONTAINER BASE */
-.textfield-container {
display: flex;
flex-direction: row;
align-items: flex-start;
@@ -10,14 +16,14 @@
width: 100%;
max-width: 600px;
.label-side {
- padding-right: .75em;
+ padding-right: 1.25em;
text-align: right;
- width: 12em;
+ width: var(--form-label-container-width);
margin: .2em 0;
}
- .textfield-label {
- font-weight: 400;
- font-size: .85em;
+ .formfield-label {
+ font-weight: 500;
+ font-size: 1em;
color: var(--owncast-purple);
&::after {
@@ -25,7 +31,7 @@
}
}
&.required {
- .textfield-label {
+ .formfield-label {
&::before {
content: '*';
display: inline-block;
@@ -97,7 +103,7 @@
justify-content: flex-start;
.label-spacer {
- width: 12em;
+ width: var(--form-label-container-width);
}
.lower-content {
display: flex;
@@ -138,3 +144,26 @@
}
}
}
+
+
+/* TOGGLE SWITCH CONTAINER BASE */
+.toggleswitch-container {
+ margin: 2em 0 1em;
+
+ .label-side {
+ margin-top: 0;
+ }
+
+ .input-group {
+ display: flex;
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: center;
+
+ .status-container {
+ width: auto;
+ margin: 0 0 0 1em;
+ display: inline-block;
+ }
+ }
+}
diff --git a/web/styles/form-toggleswitch.scss b/web/styles/form-toggleswitch.scss
deleted file mode 100644
index b3abd2080..000000000
--- a/web/styles/form-toggleswitch.scss
+++ /dev/null
@@ -1,29 +0,0 @@
-/* TOGGLE SWITCH-WITH-SUBMIT-CONTAINER BASE */
-
-
-.toggleswitch-container {
-
- .status-container {
- margin-top: .25rem;
- }
-
- .toggleswitch {
- display: flex;
- flex-direction: row;
- align-items: center;
- justify-content: flex-start;
- .label {
- font-weight: bold;
- color: var(--owncast-purple);
- }
- .info-tip {
- margin-left: .5rem;
- svg {
- fill: white;
- }
- }
- .ant-form-item {
- margin: 0 .75rem 0 0;
- }
- }
-}
diff --git a/web/styles/globals.scss b/web/styles/globals.scss
index b03ab6cbd..7a8e619ea 100644
--- a/web/styles/globals.scss
+++ b/web/styles/globals.scss
@@ -1,4 +1,4 @@
-@import "~antd/dist/antd.dark";
+// @import "~antd/dist/antd.dark";
html,
body {
@@ -6,15 +6,20 @@ body {
margin: 0;
font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
- font-size: 16px;
+ font-size: 14px;
- background-color: #1f1f21;
+ background-color: #000;
+ color: var(--default-text-color);;
}
a {
color: inherit;
text-decoration: none;
- color: rgba(90,103,216,1);
+ color: var(--owncast-purple);
+
+ &:hover {
+ color: var(--default-text-color);
+ }
}
* {
@@ -40,13 +45,50 @@ code {
height: 2rem;
width: 2rem;
}
-.ant-btn {
- transition-duration: .15s;
- transition-delay: 0s;
-}
-p.page-description {
+p.description {
margin: 1em 0;
color: #ccc;
- width: 80%;
+}
+
+
+.line-chart-container {
+ margin: 2em auto;
+}
+
+h2.ant-typography.page-title,
+h3.ant-typography.page-title
+ {
+ font-weight: 400;
+ font-size: 1.5em;
+ color: var(--nav-selected-text);
+}
+h2.section-title,
+h3.section-title {
+ font-weight: 400;
+ font-size: 1.25em;
+}
+
+.form-module {
+ // width: 100%;
+ // max-width: 500px;
+ // min-width: 300px;
+ margin: 1em 0;
+ background-color: var(--container-bg-color);
+ padding: 2em;
+ border-radius: var(--container-border-radius);
+}
+
+.row {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: flex-start;
+
+ @media (max-width: 980px) {
+ flex-direction: column;
+ .form-module {
+ width: 100%;
+ }
+ }
}
diff --git a/web/styles/main-layout.scss b/web/styles/main-layout.scss
index 8cde3017d..2eeda969e 100644
--- a/web/styles/main-layout.scss
+++ b/web/styles/main-layout.scss
@@ -5,6 +5,11 @@
height: 100vh;
overflow: auto;
z-index: 10;
+ background-color: var(--nav-bg-color);
+ }
+
+ .menu-container {
+ border-color: transparent;
}
h1.owncast-title {
@@ -40,6 +45,7 @@
flex-direction: row;
justify-content: flex-end;
padding-right: 1rem;
+ background-color: var(--nav-bg-color);
}
diff --git a/web/styles/markdown-editor.scss b/web/styles/markdown-editor.scss
index 74186233c..64b528b8b 100644
--- a/web/styles/markdown-editor.scss
+++ b/web/styles/markdown-editor.scss
@@ -5,17 +5,24 @@
display: block !important;
}
.rc-md-editor {
+ border-color: black !important;
+ border: 1px solid black;
+ background-color: black !important;
+ .rc-md-navigation {
+ background-color: black;
+ border-color: black;
+ }
// Set the background color of the preview container
.editor-container {
- background-color: #E2E8F0;
color: rgba(45,55,72,1);
+ background-color: rgba(226,232,240, 1) !important;
+
}
// Custom CSS for formatting the preview text
.markdown-editor-preview-pane {
- // color:lightgrey;
a {
- color: var(--owncast-purple);;
+ color: var(--owncast-purple);
}
h1 {
font-size: 2em;
@@ -24,20 +31,20 @@
// Custom CSS class used to format the text of the editor
.markdown-editor-pane {
- color: white !important;
+ color: rgba(255,255,255,.85) !important;
+ border-color: black !important;
background-color: black;
font-family: monospace;
}
+
+
// Set the background color of the editor text input
textarea {
- background-color: rgb(44,44,44) !important;
- color:lightgrey !important;
+ background-color: #223 !important;
+ color: rgba(255,255,255,.5) !important;
}
-.ant-btn {
- transition-duration: .15s;
- transition-delay: 0s;
-}
+
// Hide extra toolbar buttons.
.button-type-undo, .button-type-redo, .button-type-clear, .button-type-image, .button-type-wrap, .button-type-quote, .button-type-strikethrough, .button-type-code-inline, .button-type-code-block {
diff --git a/web/utils/config-constants.tsx b/web/utils/config-constants.tsx
index 54588e160..0a64bbb44 100644
--- a/web/utils/config-constants.tsx
+++ b/web/utils/config-constants.tsx
@@ -1,6 +1,4 @@
// DEFAULT VALUES
-import React from 'react';
-import { CheckCircleFilled, ExclamationCircleFilled } from '@ant-design/icons';
import { fetchData, SERVER_CONFIG_UPDATE_URL } from './apis';
import { ApiPostArgs, VideoVariant, SocialHandle } from '../types/config-section';
@@ -8,17 +6,6 @@ export const TEXT_MAXLENGTH = 255;
export const RESET_TIMEOUT = 3000;
-export const SUCCESS_STATES = {
- success: {
- icon:
,
- message: 'Success!',
- },
- error: {
- icon:
,
- message: 'An error occurred.',
- },
-};
-
// CONFIG API ENDPOINTS
export const API_CUSTOM_CONTENT = '/pagecontent';
export const API_FFMPEG = '/ffmpegpath';