diff --git a/Client/src/Pages/Monitors/Configure/index.css b/Client/src/Pages/Monitors/Configure/index.css index 1f46d12d3..23b6af57a 100644 --- a/Client/src/Pages/Monitors/Configure/index.css +++ b/Client/src/Pages/Monitors/Configure/index.css @@ -1,52 +1,17 @@ .configure-monitor h1.MuiTypography-root { font-size: var(--env-var-font-size-large-plus); - color: var(--primary-color); font-weight: 600; } -.configure-monitor h2.MuiTypography-root { - font-size: var(--env-var-font-size-large); - font-weight: 600; -} -.configure-monitor h2.MuiTypography-root, -.configure-monitor .config-box p.MuiTypography-root, -.configure-monitor .MuiSelect-select { - color: var(--secondary-color); -} -.configure-monitor .MuiModal-root h2.MuiTypography-root { - color: var(--primary-color); -} -.configure-monitor p.MuiTypography-root, -.configure-monitor .MuiSelect-select { +.configure-monitor p.MuiTypography-root { font-size: var(--env-var-font-size-medium); } -.configure-monitor h6.MuiTypography-root { - opacity: 0.6; -} -.configure-monitor h6.MuiTypography-root, .configure-monitor h1.MuiTypography-root + span.MuiTypography-root { font-size: var(--env-var-font-size-small-plus); } -.configure-monitor button.MuiButtonBase-root { - font-size: var(--env-var-font-size-medium); -} .configure-monitor button.MuiButtonBase-root { height: var(--env-var-height-2); } -.configure-monitor .config-box { - border: 1px solid var(--border-color); - border-radius: var(--env-var-radius-1); - background-color: var(--primary-bg); -} -.configure-monitor .config-box > .MuiBox-root, -.configure-monitor .config-box > .MuiStack-root { - flex: 1; - padding: 24px 30px; - padding-bottom: 40px; -} -.configure-monitor .config-box > *:first-child { - flex: 0.7; - border-right: solid 1px var(--border-color); -} + .configure-monitor .MuiStack-root:has(span.MuiTypography-root.input-error) { position: relative; } @@ -54,25 +19,3 @@ position: absolute; top: 100%; } -.configure-monitor .MuiInputBase-root:has(> .Mui-disabled) { - background-color: var(--primary-bg-accent); -} - -.MuiInputBase-root:has(#monitor-interval) { - height: 34px; - width: 100%; -} -#monitor-interval { - padding: 0 10px; - height: 100%; - display: flex; - align-items: center; -} -.MuiInputBase-root:not(.Mui-focused):has(#monitor-interval):hover fieldset { - border-color: var(--border-color-dark); -} - -body:has(.configure-monitor) .select-dropdown .MuiMenuItem-root, -.configure-monitor .select-wrapper .select-component > .MuiSelect-select { - text-transform: lowercase; -} diff --git a/Client/src/Pages/Monitors/Configure/index.jsx b/Client/src/Pages/Monitors/Configure/index.jsx index 2bf3a4d5b..3a546c582 100644 --- a/Client/src/Pages/Monitors/Configure/index.jsx +++ b/Client/src/Pages/Monitors/Configure/index.jsx @@ -6,6 +6,7 @@ import { Box, Modal, Skeleton, Stack, Typography } from "@mui/material"; import { monitorValidation } from "../../../Validation/validation"; import { createToast } from "../../../Utils/toastUtils"; import { logger } from "../../../Utils/Logger"; +import { ConfigBox } from "../styled"; import { updateUptimeMonitor, getUptimeMonitorsByTeamId, @@ -45,8 +46,8 @@ const SkeletonLayout = () => { return ( <> - - + + { variant="rounded" width="50%" height={24} - sx={{ mb: theme.gap.small }} + sx={{ mb: theme.spacing(4) }} /> { let loading = Object.keys(monitor).length === 0; return ( - + {loading ? ( ) : ( @@ -225,20 +226,25 @@ const Configure = () => { component="form" noValidate spellCheck="false" - gap={theme.gap.large} + gap={theme.spacing(12)} flex={1} > - + {parsedUrl?.host ? ( - + {parsedUrl.host || "..."} ) : ( @@ -246,11 +252,11 @@ const Configure = () => { )} Your site is {monitor?.status ? "up" : "down"}. @@ -268,12 +274,12 @@ const Configure = () => { animate="rotate180" img={} sx={{ - backgroundColor: theme.palette.otherColors.fillGray, - pl: theme.gap.small, - pr: theme.gap.medium, - mr: theme.gap.medium, + backgroundColor: theme.palette.background.main, + pl: theme.spacing(4), + pr: theme.spacing(6), + mr: theme.spacing(6), "& svg": { - mr: theme.gap.xs, + mr: theme.spacing(2), }, }} /> @@ -282,25 +288,21 @@ const Configure = () => { label="Remove" sx={{ boxShadow: "none", - px: theme.gap.ml, + px: theme.spacing(8), }} onClick={() => setIsOpen(true)} /> - + General settings - + Here you can select the URL of the host, together with the type of monitor. - + { error={errors["name"]} /> - - + + Incident notifications - + When there is an incident, notify users. - - + + When there is a new incident, { {monitor?.notifications?.some( (notification) => notification.type === "emails" ) ? ( - + { value="" onChange={() => logger.warn("disabled")} /> - + You can separate multiple emails with a comma @@ -384,16 +382,12 @@ const Configure = () => { "" )} - - + + Advanced settings - + { items={frequencies} /> - + @@ -422,33 +416,43 @@ const Configure = () => { disablePortal > - + Do you really want to delete this monitor? - + Once deleted, this monitor cannot be retrieved. .MuiBox-root, -.create-monitor .config-box > .MuiStack-root { - flex: 1; - padding: 24px 30px; - padding-bottom: 40px; -} -.create-monitor .config-box > *:first-child { - flex: 0.7; - border-right: solid 1px var(--border-color); -} .create-monitor .MuiStack-root .MuiButtonGroup-root button { font-size: var(--env-var-font-size-small); height: 28px; padding: 8px; } - -body:has(.create-monitor) .select-dropdown .MuiMenuItem-root, -.create-monitor .select-wrapper .select-component > .MuiSelect-select { - text-transform: lowercase; -} diff --git a/Client/src/Pages/Monitors/CreateMonitor/index.jsx b/Client/src/Pages/Monitors/CreateMonitor/index.jsx index 99e1fa4fc..3de96ad5c 100644 --- a/Client/src/Pages/Monitors/CreateMonitor/index.jsx +++ b/Client/src/Pages/Monitors/CreateMonitor/index.jsx @@ -1,19 +1,20 @@ -import "./index.css"; import { useState } from "react"; -import Radio from "../../../Components/Inputs/Radio"; -import Button from "../../../Components/Button"; import { Box, ButtonGroup, Stack, Typography } from "@mui/material"; import { useSelector, useDispatch } from "react-redux"; import { monitorValidation } from "../../../Validation/validation"; import { createUptimeMonitor } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; import { useNavigate } from "react-router-dom"; import { useTheme } from "@emotion/react"; +import { createToast } from "../../../Utils/toastUtils"; +import { logger } from "../../../Utils/Logger"; +import { ConfigBox } from "../styled"; +import Radio from "../../../Components/Inputs/Radio"; +import Button from "../../../Components/Button"; import Field from "../../../Components/Inputs/Field"; import Select from "../../../Components/Inputs/Select"; import Checkbox from "../../../Components/Inputs/Checkbox"; -import { createToast } from "../../../Utils/toastUtils"; import Breadcrumbs from "../../../Components/Breadcrumbs"; -import { logger } from "../../../Utils/Logger"; +import "./index.css"; const CreateMonitor = () => { const MS_PER_MINUTE = 60000; @@ -33,7 +34,7 @@ const CreateMonitor = () => { const [monitor, setMonitor] = useState({ url: "", name: "", - type: "", + type: "http", notifications: [], interval: 1, }); @@ -144,7 +145,14 @@ const CreateMonitor = () => { ]; return ( - + { onSubmit={handleCreateMonitor} noValidate spellCheck="false" - gap={theme.gap.large} - mt={theme.gap.medium} + gap={theme.spacing(12)} + mt={theme.spacing(6)} > Create your{" "} @@ -172,15 +180,15 @@ const CreateMonitor = () => { monitor - + General settings - + Here you can select the URL of the host, together with the type of monitor. - + { error={errors["name"]} /> - - + + Checks to perform - + You can always add or remove checks after adding your site. - - + + { label="HTTPS" onClick={() => setHttps(true)} sx={{ - backgroundColor: - https && theme.palette.otherColors.fillGray, + backgroundColor: https && theme.palette.background.fill, }} /> { label="HTTP" onClick={() => setHttps(false)} sx={{ - backgroundColor: - !https && theme.palette.otherColors.fillGray, + backgroundColor: !https && theme.palette.background.fill, }} /> @@ -257,7 +263,11 @@ const CreateMonitor = () => { /> {errors["type"] ? ( - + {errors["type"]} @@ -265,15 +275,15 @@ const CreateMonitor = () => { "" )} - - + + Incident notifications - + When there is an incident, notify users. - + When there is a new incident, { {monitor.notifications.some( (notification) => notification.type === "emails" ) ? ( - + { value="" onChange={() => logger.warn("disabled")} /> - + You can separate multiple emails with a comma @@ -319,12 +329,12 @@ const CreateMonitor = () => { "" )} - - + + Advanced settings - + { onChange={(event) => handleChange(event, "interval")} items={frequencies} /> - {/* TODO */} - {/* - handleChange(event, "retries", setAdvancedSettings) - } - /> - - handleChange(event, "codes", setAdvancedSettings) - } - /> - - handleChange(event, "redirects", setAdvancedSettings) - } - /> */} - - {/* TODO */} - {/* - - Proxy settings - - } - rightLayout={ - - handleCheck("enabled", setProxy)} - /> - handleChange(event, "protocol", setProxy)} - /> - handleChange(event, "address", setProxy)} - /> - handleChange(event, "proxy_port", setProxy)} - /> - - } - /> */} + { + const theme = useTheme(); return ( - - + + {title} - + {value} @@ -47,8 +76,8 @@ const SkeletonLayout = () => { return ( <> - - + + { variant="rounded" width="50%" height={18} - sx={{ mt: theme.gap.small }} + sx={{ mt: theme.spacing(4) }} /> { @@ -82,7 +111,7 @@ const SkeletonLayout = () => { { - + @@ -169,26 +198,33 @@ const DetailsPage = ({ isAdmin }) => { { name: "details", path: `/monitors/${monitorId}` }, ]} /> - - + + - + {monitor.url?.replace(/^https?:\/\//, "") || "..."} - + Your site is {monitor?.status ? "up" : "down"}. @@ -204,8 +240,8 @@ const DetailsPage = ({ isAdmin }) => { img={ } @@ -213,10 +249,10 @@ const DetailsPage = ({ isAdmin }) => { sx={{ ml: "auto", alignSelf: "flex-end", - backgroundColor: "#f4f4f4", - px: theme.gap.medium, + backgroundColor: theme.palette.background.fill, + px: theme.spacing(6), "& svg": { - mr: "6px", + mr: theme.spacing(3), }, }} /> @@ -225,7 +261,7 @@ const DetailsPage = ({ isAdmin }) => { { - + Response Times - + setDateRange("day")} sx={{ backgroundColor: - dateRange === "day" && - theme.palette.otherColors.fillGray, + dateRange === "day" && theme.palette.background.fill, }} /> { onClick={() => setDateRange("week")} sx={{ backgroundColor: - dateRange === "week" && - theme.palette.otherColors.fillGray, + dateRange === "week" && theme.palette.background.fill, }} /> { onClick={() => setDateRange("month")} sx={{ backgroundColor: - dateRange === "month" && - theme.palette.otherColors.fillGray, + dateRange === "month" && theme.palette.background.fill, }} /> { /> - - History + + + History + diff --git a/Client/src/Pages/Monitors/Home/StatusBox.jsx b/Client/src/Pages/Monitors/Home/StatusBox.jsx index cfb2ab838..e28d09d6c 100644 --- a/Client/src/Pages/Monitors/Home/StatusBox.jsx +++ b/Client/src/Pages/Monitors/Home/StatusBox.jsx @@ -13,21 +13,21 @@ const StatusBox = ({ title, value }) => { let color; let icon; if (title === "up") { - color = theme.pie.green.stroke; + color = theme.palette.success.main; icon = ( ); } else if (title === "down") { - color = theme.pie.red.stroke; + color = theme.palette.error.text; icon = ( ); } else if (title === "paused") { - color = theme.pie.yellow.stroke; + color = theme.palette.warning.main; icon = ( @@ -40,11 +40,11 @@ const StatusBox = ({ title, value }) => { position="relative" flex={1} border={1} - borderColor={theme.palette.otherColors.graishWhite} - borderRadius={`${theme.shape.borderRadius}px`} - backgroundColor={theme.palette.otherColors.white} - px={theme.gap.large} - py={theme.gap.ml} + borderColor={theme.palette.border.light} + borderRadius={theme.shape.borderRadius} + backgroundColor={theme.palette.background.main} + px={theme.spacing(12)} + py={theme.spacing(8)} overflow="hidden" sx={{ "&:hover": { @@ -67,8 +67,8 @@ const StatusBox = ({ title, value }) => { textTransform="uppercase" fontSize={15} letterSpacing={0.5} - color={theme.palette.otherColors.bluishGray} - mb={theme.gap.ml} + color={theme.palette.text.secondary} + mb={theme.spacing(8)} sx={{ opacity: 0.6 }} > {title} @@ -87,7 +87,7 @@ const StatusBox = ({ title, value }) => { component="span" fontSize={20} fontWeight={300} - color={theme.palette.otherColors.bluishGray} + color={theme.palette.text.secondary} sx={{ opacity: 0.3 }} > # diff --git a/Client/src/Pages/Monitors/Home/actionsMenu.jsx b/Client/src/Pages/Monitors/Home/actionsMenu.jsx index b2b26e92a..4df4e33ea 100644 --- a/Client/src/Pages/Monitors/Home/actionsMenu.jsx +++ b/Client/src/Pages/Monitors/Home/actionsMenu.jsx @@ -1,5 +1,7 @@ import { useState } from "react"; import { useSelector, useDispatch } from "react-redux"; +import { useTheme } from "@emotion/react"; +import { useNavigate } from "react-router-dom"; import { createToast } from "../../../Utils/toastUtils"; import { IconButton, @@ -14,10 +16,8 @@ import { getUptimeMonitorsByTeamId, } from "../../../Features/UptimeMonitors/uptimeMonitorsSlice"; import Settings from "../../../assets/icons/settings-bold.svg?react"; -import { useTheme } from "@emotion/react"; import Button from "../../../Components/Button"; import PropTypes from "prop-types"; -import { useNavigate } from "react-router-dom"; const ActionsMenu = ({ monitor, isAdmin }) => { const [anchorEl, setAnchorEl] = useState(null); @@ -87,6 +87,30 @@ const ActionsMenu = ({ monitor, isAdmin }) => { anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={(e) => closeMenu(e)} + slotProps={{ + paper: { + sx: { + border: 1, + borderColor: theme.palette.border.light, + borderRadius: theme.shape.borderRadius, + boxShadow: theme.shape.boxShadow, + "& ul": { + p: theme.spacing(2.5), + minWidth: "100px", + }, + "& li": { + color: theme.palette.text.secondary, + fontSize: 13, + px: theme.spacing(4), + py: theme.spacing(2.5), + borderRadius: theme.shape.borderRadius, + }, + "& li:last-of-type": { + color: theme.palette.error.text, + }, + }, + }, + }} > {actions.url !== null ? ( { aria-labelledby="modal-delete-monitor" aria-describedby="delete-monitor-confirmation" open={isOpen} - onClose={() => setIsOpen(false)} - disablePortal + onClose={(e) => { + e.stopPropagation(); + setIsOpen(false); + }} > - + Do you really want to delete this monitor? - + Once deleted, this monitor cannot be retrieved. { setIsOpen(false)} + onClick={(e) => { + e.stopPropagation(); + setIsOpen(false); + }} /> handleRemove(e)} + onClick={(e) => { + e.stopPropagation(e); + handleRemove(e); + }} /> diff --git a/Client/src/Pages/Monitors/Home/fallback.jsx b/Client/src/Pages/Monitors/Home/fallback.jsx index ccb4ef5fb..c5d41ee48 100644 --- a/Client/src/Pages/Monitors/Home/fallback.jsx +++ b/Client/src/Pages/Monitors/Home/fallback.jsx @@ -11,12 +11,13 @@ const Fallback = ({ isAdmin }) => { return ( No monitors found @@ -29,7 +30,7 @@ const Fallback = ({ isAdmin }) => { onClick={() => { navigate("/monitors/create"); }} - sx={{ mt: theme.gap.large }} + sx={{ mt: theme.spacing(12) }} /> )} diff --git a/Client/src/Pages/Monitors/Home/host.jsx b/Client/src/Pages/Monitors/Home/host.jsx index 1339008b4..d450a53f4 100644 --- a/Client/src/Pages/Monitors/Home/host.jsx +++ b/Client/src/Pages/Monitors/Home/host.jsx @@ -1,4 +1,4 @@ -import { Box, Stack, Typography } from "@mui/material"; +import { Box, Typography } from "@mui/material"; import PropTypes from "prop-types"; /** * Host component. diff --git a/Client/src/Pages/Monitors/Home/index.css b/Client/src/Pages/Monitors/Home/index.css index e0c111036..269345b97 100644 --- a/Client/src/Pages/Monitors/Home/index.css +++ b/Client/src/Pages/Monitors/Home/index.css @@ -1,16 +1,13 @@ .monitors h1.MuiTypography-root { font-size: var(--env-var-font-size-large-plus); - color: var(--primary-color); font-weight: 500; } .monitors h2.MuiTypography-root { font-size: var(--env-var-font-size-large); - color: var(--secondary-color); font-weight: 500; } .monitors p.MuiTypography-root { font-size: var(--env-var-font-size-medium); - color: var(--secondary-color); } .monitors h1.MuiTypography-root + p.MuiTypography-root { font-size: var(--env-var-font-size-medium-plus); @@ -28,36 +25,9 @@ padding: 5px; min-width: 25px; min-height: 25px; - background-color: var(--unresolved-bg); - border: 1px solid var(--border-color); border-radius: 50%; font-size: var(--env-var-font-size-medium); font-weight: 500; - color: var(--primary-color); margin-left: 10px; line-height: 0.8; } - -body:has(.monitors) .actions-menu .MuiPaper-root { - box-shadow: var(--env-var-shadow-1); - border: solid 1px var(--border-color); - border-radius: var(--env-var-radius-1); - gap: 1px; -} -body:has(.monitors) .actions-menu .MuiList-root { - padding: 6px 8px; - min-width: 100px; -} -body:has(.monitors) .actions-menu li.MuiButtonBase-root { - font-size: var(--env-var-font-size-medium); - color: var(--secondary-color); - padding: 5px 8px; - border-radius: var(--env-var-radius-1); -} -body:has(.monitors) .actions-menu li.MuiButtonBase-root:last-of-type { - color: var(--error-color); -} -body:has(.monitors) .actions-menu .MuiModal-root p.MuiTypography-root { - font-size: var(--env-var-font-size-medium); - color: var(--secondary-color-light); -} diff --git a/Client/src/Pages/Monitors/Home/index.jsx b/Client/src/Pages/Monitors/Home/index.jsx index ffede6427..b812837d2 100644 --- a/Client/src/Pages/Monitors/Home/index.jsx +++ b/Client/src/Pages/Monitors/Home/index.jsx @@ -51,7 +51,7 @@ const Monitors = ({ isAdmin }) => { } return ( - + {loading ? ( ) : ( @@ -65,11 +65,15 @@ const Monitors = ({ isAdmin }) => { mt={theme.spacing(5)} > - + Good {greeting},{" "} @@ -85,6 +89,7 @@ const Monitors = ({ isAdmin }) => { sx={{ opacity: 0.8 }} lineHeight={1} fontWeight={300} + color={theme.palette.text.secondary} > Here’s an overview of your uptime monitors. @@ -108,7 +113,7 @@ const Monitors = ({ isAdmin }) => { {monitorState.monitors?.length !== 0 && ( <> @@ -118,17 +123,30 @@ const Monitors = ({ isAdmin }) => { - - Current monitors - + + + Current monitors + + {monitorState.monitors.length} {/* TODO - add search bar */} diff --git a/Client/src/Pages/Monitors/Home/skeleton.jsx b/Client/src/Pages/Monitors/Home/skeleton.jsx index d4ea54206..7d798d12c 100644 --- a/Client/src/Pages/Monitors/Home/skeleton.jsx +++ b/Client/src/Pages/Monitors/Home/skeleton.jsx @@ -16,7 +16,7 @@ const SkeletonLayout = () => { @@ -24,7 +24,11 @@ const SkeletonLayout = () => { - + diff --git a/Client/src/Pages/Monitors/styled.jsx b/Client/src/Pages/Monitors/styled.jsx new file mode 100644 index 000000000..afef6508e --- /dev/null +++ b/Client/src/Pages/Monitors/styled.jsx @@ -0,0 +1,35 @@ +import { Stack, styled } from "@mui/material"; + +export const ConfigBox = styled(Stack)(({ theme }) => ({ + flexDirection: "row", + border: 1, + borderStyle: "solid", + borderColor: theme.palette.border.light, + borderRadius: theme.spacing(2), + backgroundColor: theme.palette.background.main, + "& > *": { + paddingTop: theme.spacing(12), + paddingBottom: theme.spacing(18), + }, + "& > div:first-of-type": { + flex: 0.7, + borderRight: 1, + borderRightStyle: "solid", + borderRightColor: theme.palette.border.light, + paddingRight: theme.spacing(15), + paddingLeft: theme.spacing(15), + }, + "& > div:last-of-type": { + flex: 1, + paddingRight: theme.spacing(20), + paddingLeft: theme.spacing(18), + }, + "& h2": { + color: theme.palette.text.secondary, + fontSize: 15, + fontWeight: 600, + }, + "& h3, & p": { + color: theme.palette.text.tertiary, + }, +})); diff --git a/Client/src/Pages/PageSpeed/Configure/index.css b/Client/src/Pages/PageSpeed/Configure/index.css index 140d37887..fe257233c 100644 --- a/Client/src/Pages/PageSpeed/Configure/index.css +++ b/Client/src/Pages/PageSpeed/Configure/index.css @@ -1,23 +1,9 @@ -.configure-pagespeed form > .MuiStack-root:nth-child(2) { - background-color: var(--primary-bg); - border: solid 1px var(--border-color); - border-radius: var(--env-var-radius-1); - padding: var(--env-var-font-size-large-plus) var(--env-var-font-size-xlarge); -} .configure-pagespeed h1.MuiTypography-root { font-size: var(--env-var-font-size-large-plus); } -.configure-pagespeed h1.MuiTypography-root, -.configure-pagespeed h2.MuiTypography-root { - color: var(--primary-color); -} .configure-pagespeed span.MuiTypography-root { font-size: var(--env-var-font-size-small-plus); } -.configure-pagespeed p.MuiTypography-root, -.configure-pagespeed h3.MuiTypography-root { - color: var(--secondary-color); -} .configure-pagespeed h1.MuiTypography-root, .configure-pagespeed h3.MuiTypography-root, .configure-pagespeed h2.MuiTypography-root { @@ -38,13 +24,10 @@ .configure-pagespeed .checkbox-wrapper { margin-bottom: 1px; } -.configure-pagespeed .MuiInputBase-root:has(> .Mui-disabled) { - background-color: var(--primary-bg-accent); -} + /* to be removed */ .configure-pagespeed .section-disabled { opacity: 0.4; - background-color: #f1f1f2; padding: 10px; border-radius: 8px; user-select: none; @@ -55,11 +38,6 @@ height: var(--env-var-height-2); } -body:has(.configure-pagespeed) .select-dropdown .MuiMenuItem-root, -.configure-pagespeed .select-wrapper .select-component > .MuiSelect-select { - text-transform: lowercase; -} - .configure-pagespeed h3.MuiTypography-root { flex: 0.7; } diff --git a/Client/src/Pages/PageSpeed/Configure/index.jsx b/Client/src/Pages/PageSpeed/Configure/index.jsx index 4d765abe6..756e52d2b 100644 --- a/Client/src/Pages/PageSpeed/Configure/index.jsx +++ b/Client/src/Pages/PageSpeed/Configure/index.jsx @@ -32,8 +32,8 @@ const SkeletonLayout = () => { return ( <> - - + + { variant="rounded" width="50%" height={24} - sx={{ mb: theme.gap.small }} + sx={{ mb: theme.spacing(4) }} /> { let loading = Object.keys(monitor).length === 0; return ( - + {loading ? ( ) : ( @@ -165,21 +165,22 @@ const PageSpeedConfigure = () => { spellCheck="false" onSubmit={handleSave} flex={1} - gap={theme.gap.large} + gap={theme.spacing(12)} > - + {monitor?.url} @@ -187,8 +188,8 @@ const PageSpeedConfigure = () => { component="span" sx={{ color: monitor?.status - ? "var(--success-color)" - : "var(--error-color)", + ? theme.palette.success.main + : theme.palette.error.text, }} > Your pagespeed monitor is {monitor?.status ? "live" : "down"}. @@ -201,11 +202,11 @@ const PageSpeedConfigure = () => { animate="rotate180" img={} sx={{ - backgroundColor: theme.palette.otherColors.fillGray, - pl: theme.gap.small, - pr: theme.gap.medium, + backgroundColor: theme.palette.background.fill, + pl: theme.spacing(4), + pr: theme.spacing(6), "& svg": { - mr: theme.gap.xs, + mr: theme.spacing(2), }, }} /> @@ -214,14 +215,27 @@ const PageSpeedConfigure = () => { label="Remove" sx={{ boxShadow: "none", - px: theme.gap.ml, - ml: theme.gap.medium, + px: theme.spacing(8), + ml: theme.spacing(6), }} onClick={() => setIsOpen(true)} /> - + Monitor display name { error={errors.name} /> - + .Mui-disabled)": { + backgroundColor: theme.palette.background.accent, + }, + }} + > URL { Incidents notifications{" "} (coming soon) - - + + When there is a new incident, { label="Notify via email to following emails" isChecked={false} /> - + { onChange={() => logger.warn("disabled")} error="" /> - + You can separate multiple emails with a comma @@ -300,7 +324,7 @@ const PageSpeedConfigure = () => { level="primary" label="Save" onClick={handleSave} - sx={{ px: theme.gap.large, mt: theme.gap.large }} + sx={{ px: theme.spacing(12), mt: theme.spacing(12) }} /> @@ -314,33 +338,41 @@ const PageSpeedConfigure = () => { disablePortal > - + Do you really want to delete this monitor? - + Once deleted, this monitor cannot be retrieved. .MuiStack-root:not(:last-of-type) { - background-color: var(--primary-bg); - border: solid 1px var(--border-color); - border-radius: var(--env-var-radius-1); - padding: var(--env-var-font-size-large-plus) var(--env-var-font-size-xlarge); -} -.create-page-speed h1.MuiTypography-root { - font-size: 22px; - color: var(--primary-bg); -} -.create-page-speed p.MuiTypography-root, -.create-page-speed h3.MuiTypography-root { - color: var(--secondary-color); -} .create-page-speed h1.MuiTypography-root, .create-page-speed h3.MuiTypography-root { font-weight: 600; @@ -31,10 +17,10 @@ .create-page-speed .checkbox-wrapper { margin-bottom: 1px; } + /* to be removed */ .create-page-speed .section-disabled { opacity: 0.4; - background-color: #f1f1f2; padding: 10px; border-radius: 8px; user-select: none; @@ -45,11 +31,6 @@ height: var(--env-var-height-2); } -body:has(.create-page-speed) .select-dropdown .MuiMenuItem-root, -.create-page-speed .select-wrapper .select-component > .MuiSelect-select { - text-transform: lowercase; -} - .create-page-speed h3.MuiTypography-root { flex: 0.7; } diff --git a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx index 7b2bbcb00..501384364 100644 --- a/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx +++ b/Client/src/Pages/PageSpeed/CreatePageSpeed/index.jsx @@ -99,7 +99,7 @@ const CreatePageSpeed = () => { }; return ( - + { noValidate spellCheck="false" onSubmit={handleCreate} - gap={theme.gap.large} + gap={theme.spacing(12)} flex={1} > - Create pagespeed monitor - + + + Create your{" "} + + + pagespeed{" "} + + + monitor + + + Monitor display name { Incidents notifications{" "} (coming soon) - - + + When there is a new incident, { onChange={() => logger.warn("disabled")} error="" /> - + You can separate multiple emails with a comma @@ -193,7 +232,7 @@ const CreatePageSpeed = () => { level="primary" label="Create" onClick={handleCreate} - sx={{ px: theme.gap.large, mt: theme.gap.large }} + sx={{ px: theme.spacing(12), mt: theme.spacing(12) }} /> diff --git a/Client/src/Pages/PageSpeed/Details/index.css b/Client/src/Pages/PageSpeed/Details/index.css index 147c1d7d9..1da62a362 100644 --- a/Client/src/Pages/PageSpeed/Details/index.css +++ b/Client/src/Pages/PageSpeed/Details/index.css @@ -1,6 +1,5 @@ .page-speed-details h1 { font-size: var(--env-var-font-size-large-plus); - color: var(--primary-color); } .page-speed-details h2, .page-speed-details h6 { @@ -15,13 +14,7 @@ .page-speed-details h4 > span { font-size: var(--env-var-font-size-small-plus); } -.page-speed-details h2, -.page-speed-details h4, -.page-speed-details p { - color: var(--secondary-color); -} .page-speed-details h6 { - color: var(--theme-main); line-height: 22px; } .page-speed-details h1, @@ -33,14 +26,6 @@ height: 34px; } -.page-speed-details .stat-box, -.page-speed-details > .MuiStack-root:last-child, -.page-speed-details > .MuiBox-root:nth-last-child(3) { - border: solid 1px var(--border-color); - border-radius: var(--env-var-radius-1); - background-color: var(--primary-bg); - min-width: 200px; -} .page-speed-details .stat-box { flex: 1; } diff --git a/Client/src/Pages/PageSpeed/Details/index.jsx b/Client/src/Pages/PageSpeed/Details/index.jsx index ba24c88df..05488d39f 100644 --- a/Client/src/Pages/PageSpeed/Details/index.jsx +++ b/Client/src/Pages/PageSpeed/Details/index.jsx @@ -29,17 +29,28 @@ const StatBox = ({ icon, title, value }) => { {icon} - + {title} - {value} + + {value} + ); @@ -151,7 +162,7 @@ const SkeletonLayout = () => { return ( <> - + @@ -159,7 +170,7 @@ const SkeletonLayout = () => { variant="rounded" width="50%" height={18} - sx={{ mt: theme.gap.small }} + sx={{ mt: theme.spacing(4) }} /> { @@ -237,10 +248,37 @@ const PageSpeedDetails = () => { * @returns {{stroke: string, text: string, bg: string}} The color properties for the given performance value. */ const getColors = (value) => { - if (value >= 90 && value <= 100) return theme.pie.green; - else if (value >= 50 && value < 90) return theme.pie.yellow; - else if (value >= 0 && value < 50) return theme.pie.red; - return theme.pie.default; + if (value >= 90 && value <= 100) + return { + stroke: theme.palette.success.main, + strokeBg: theme.palette.success.light, + text: theme.palette.success.text, + bg: theme.palette.success.bg, + shape: "circle", + }; + else if (value >= 50 && value < 90) + return { + stroke: theme.palette.warning.main, + strokeBg: theme.palette.warning.bg, + text: theme.palette.warning.text, + bg: theme.palette.warning.light, + shape: "square", + }; + else if (value >= 0 && value < 50) + return { + stroke: theme.palette.error.text, + strokeBg: theme.palette.error.light, + text: theme.palette.error.text, + bg: theme.palette.error.bg, + shape: "circle", + }; + return { + stroke: theme.palette.unresolved.main, + strokeBg: theme.palette.unresolved.light, + text: theme.palette.unresolved.main, + bg: theme.palette.unresolved.bg, + shape: "", + }; }; /** @@ -312,8 +350,15 @@ const PageSpeedDetails = () => { let loading = Object.keys(monitor).length === 0; const data = monitor?.checks ? [...monitor.checks].reverse() : []; + + let sharedStyles = { + border: 1, + borderColor: theme.palette.border.light, + borderRadius: theme.shape.borderRadius, + backgroundColor: theme.palette.background.main, + }; return ( - + {loading ? ( ) : ( @@ -324,25 +369,30 @@ const PageSpeedDetails = () => { { name: "details", path: `/pagespeed/${monitorId}` }, ]} /> - + {monitor?.url} Your pagespeed monitor is live. @@ -353,15 +403,18 @@ const PageSpeedDetails = () => { animate="rotate90" img={ } onClick={() => navigate(`/pagespeed/configure/${monitorId}`)} sx={{ ml: "auto", alignSelf: "flex-end", - backgroundColor: theme.palette.otherColors.fillGray, - px: theme.gap.medium, + backgroundColor: theme.palette.background.fill, + px: theme.spacing(6), "& svg": { mr: "6px", }, @@ -371,7 +424,7 @@ const PageSpeedDetails = () => { { value={formatDurationRounded(monitor?.interval)} > - Score history - + + Score history + + - Performance report - + + Performance report + + setExpand(false)}> {expand ? ( @@ -514,12 +587,12 @@ const PageSpeedDetails = () => { )} - + Values are estimated and may vary.{" "} { @@ -552,7 +627,7 @@ const PageSpeedDetails = () => { { {Object.keys(audits).map((key) => { if (key === "_id") return; @@ -581,8 +656,8 @@ const PageSpeedDetails = () => { let shape = ( { shape = ( @@ -604,10 +679,14 @@ const PageSpeedDetails = () => { sx={{ width: 0, height: 0, - ml: `calc((${theme.gap.medium} - ${theme.gap.small}) / -2)`, - borderLeft: `${theme.gap.small} solid transparent`, - borderRight: `${theme.gap.small} solid transparent`, - borderBottom: `${theme.gap.medium} solid ${metricParams.stroke}`, + ml: `calc((${theme.spacing(6)} - ${theme.spacing( + 4 + )}) / -2)`, + borderLeft: `${theme.spacing(4)} solid transparent`, + borderRight: `${theme.spacing(4)} solid transparent`, + borderBottom: `${theme.spacing(6)} solid ${ + metricParams.stroke + }`, }} > ); @@ -630,7 +709,7 @@ const PageSpeedDetails = () => { className="metric" key={`${key}-box`} direction="row" - gap={theme.gap.small} + gap={theme.spacing(4)} > {shape} @@ -650,8 +729,8 @@ const PageSpeedDetails = () => { component="span" ml="2px" sx={{ - color: theme.palette.secondary.main, - fontSize: "13px", + color: theme.palette.text.secondary, + fontSize: 13, }} > {unit} diff --git a/Client/src/Pages/PageSpeed/index.css b/Client/src/Pages/PageSpeed/index.css index c73770737..a970ccd70 100644 --- a/Client/src/Pages/PageSpeed/index.css +++ b/Client/src/Pages/PageSpeed/index.css @@ -1,10 +1,4 @@ -.page-speed h1.MuiTypography-root, -.page-speed span.MuiTypography-root, -.page-speed p.MuiTypography-root { - color: var(--secondary-color); -} .page-speed h2.MuiTypography-root { - color: var(--theme-main); line-height: 1.1; } .page-speed h1.MuiTypography-root, @@ -19,11 +13,6 @@ .page-speed p.MuiTypography-root > span.MuiTypography-root { font-size: var(--env-var-font-size-small-plus); } -.page-speed .MuiGrid-item > .MuiStack-root { - border: solid 1px var(--border-color); - border-radius: var(--env-var-radius-1); - background-color: var(--primary-bg); -} .page-speed .label { padding: 7px; height: 22px; diff --git a/Client/src/Pages/PageSpeed/index.jsx b/Client/src/Pages/PageSpeed/index.jsx index fb64a157d..f2603e39d 100644 --- a/Client/src/Pages/PageSpeed/index.jsx +++ b/Client/src/Pages/PageSpeed/index.jsx @@ -30,15 +30,25 @@ const Card = ({ data }) => { > navigate(`/pagespeed/${data._id}`)} + border={1} + borderColor={theme.palette.border.light} + borderRadius={theme.shape.borderRadius} + backgroundColor={theme.palette.background.main} sx={{ cursor: "pointer" }} > - + - + {data.name} { /> {data.url.replace(/^https?:\/\//, "")} - + Last checked:{" "} @@ -75,11 +85,11 @@ const SkeletonLayout = () => { const theme = useTheme(); return ( - + @@ -87,7 +97,7 @@ const SkeletonLayout = () => { variant="rounded" width="50%" height={19.5} - sx={{ mt: theme.gap.xs }} + sx={{ mt: theme.spacing(2) }} /> { sx={{ alignSelf: "flex-end" }} /> - + { {isActuallyLoading ? ( ) : monitors?.length !== 0 ? ( - + All page speed monitors - + Click on one of the monitors to get more site speed information. @@ -181,7 +198,7 @@ const PageSpeed = ({ isAdmin }) => { onClick={() => navigate("/pagespeed/create")} /> - + {monitors?.map((monitor) => ( ))} diff --git a/Client/src/Utils/Theme.js b/Client/src/Utils/Theme.js index 3a8282dd0..6350c32ec 100644 --- a/Client/src/Utils/Theme.js +++ b/Client/src/Utils/Theme.js @@ -53,7 +53,12 @@ const theme = createTheme({ light: "#ffffff", border: "#D0D5DD", }, - success: { main: "#17b26a", light: "#d4f4e1", bg: "#ecfdf3" }, + success: { + text: "#079455", + main: "#17b26a", + light: "#d4f4e1", + bg: "#ecfdf3", + }, error: { text: "#f04438", main: "#d32f2f",