Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3d51aae6a9 |
@ -13,7 +13,7 @@ import { handleComponentError } from "@utils/handleComponentError";
|
|||||||
import lightTheme from "@utils/themes/light";
|
import lightTheme from "@utils/themes/light";
|
||||||
import moment from "moment";
|
import moment from "moment";
|
||||||
import { SnackbarProvider } from "notistack";
|
import { SnackbarProvider } from "notistack";
|
||||||
import { startTransition, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
import React, { startTransition, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
||||||
import { ErrorBoundary } from "react-error-boundary";
|
import { ErrorBoundary } from "react-error-boundary";
|
||||||
import { ApologyPage } from "./ViewPublicationPage/ApologyPage";
|
import { ApologyPage } from "./ViewPublicationPage/ApologyPage";
|
||||||
import ViewPublicationPage from "./ViewPublicationPage/ViewPublicationPage";
|
import ViewPublicationPage from "./ViewPublicationPage/ViewPublicationPage";
|
||||||
@ -51,6 +51,16 @@ function QuizAnswererInner({
|
|||||||
const yandexMetrics = useYandexMetricsGoals(quizSettings?.settings.cfg.yandexMetricsNumber);
|
const yandexMetrics = useYandexMetricsGoals(quizSettings?.settings.cfg.yandexMetricsNumber);
|
||||||
const r = useQuizStore();
|
const r = useQuizStore();
|
||||||
const { settings, questions } = useQuizStore();
|
const { settings, questions } = useQuizStore();
|
||||||
|
const [currentTime, setCurrentTime] = React.useState(moment());
|
||||||
|
|
||||||
|
// Реактивный таймер для отслеживания времени
|
||||||
|
React.useEffect(() => {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
setCurrentTime(moment());
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}, []);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
addquizid(quizId);
|
addquizid(quizId);
|
||||||
@ -114,6 +124,19 @@ function QuizAnswererInner({
|
|||||||
return <ApologyPage error={new Error("no quiz id")} />;
|
return <ApologyPage error={new Error("no quiz id")} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Проверяем, истекло ли время для overTime
|
||||||
|
const overTimeConfig = settings?.cfg?.overTime;
|
||||||
|
const isOverTimeEnabled = overTimeConfig?.enabled;
|
||||||
|
const isTimeExpired =
|
||||||
|
isOverTimeEnabled && overTimeConfig?.endsAt
|
||||||
|
? currentTime.isAfter(moment(overTimeConfig.endsAt)) || currentTime.isSame(moment(overTimeConfig.endsAt))
|
||||||
|
: false;
|
||||||
|
|
||||||
|
// Если время истекло и нет стартовой страницы, показываем ApologyPage
|
||||||
|
if (isTimeExpired && settings?.cfg?.noStartPage) {
|
||||||
|
return <ApologyPage error={new Error("quiz time expired")} />;
|
||||||
|
}
|
||||||
|
|
||||||
const quizContainer = (
|
const quizContainer = (
|
||||||
<Box
|
<Box
|
||||||
ref={rootContainerRef}
|
ref={rootContainerRef}
|
||||||
|
|||||||
@ -0,0 +1,213 @@
|
|||||||
|
import { Box, Typography, useTheme, SxProps, Theme } from "@mui/material";
|
||||||
|
import { useQuizStore } from "@stores/useQuizStore";
|
||||||
|
import moment from "moment";
|
||||||
|
import React from "react";
|
||||||
|
import { useTranslation } from "react-i18next";
|
||||||
|
|
||||||
|
type OverTimeProps = {
|
||||||
|
sx?: SxProps<Theme>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const OverTime = ({ sx }: OverTimeProps) => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const { settings } = useQuizStore();
|
||||||
|
const { t } = useTranslation();
|
||||||
|
const [currentTime, setCurrentTime] = React.useState(moment());
|
||||||
|
|
||||||
|
// Реактивный таймер с useEffect
|
||||||
|
React.useEffect(() => {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
setCurrentTime(moment());
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
// Проверяем, включен ли overTime
|
||||||
|
const overTimeConfig = settings?.cfg?.overTime;
|
||||||
|
const isEnabled = overTimeConfig?.enabled;
|
||||||
|
|
||||||
|
// Если не включен, не показываем карточку
|
||||||
|
if (!isEnabled) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Функция для расчета времени до окончания
|
||||||
|
const calculateTimeLeft = (now: moment.Moment) => {
|
||||||
|
// Для тестирования: добавляем 2 часа к текущему времени
|
||||||
|
const testEndsAt = moment().add(2, "hours");
|
||||||
|
const endsAt = overTimeConfig?.endsAt ? moment(overTimeConfig.endsAt) : testEndsAt;
|
||||||
|
|
||||||
|
if (endsAt.isBefore(now) || endsAt.isSame(now)) {
|
||||||
|
return { days: 0, hours: 0, minutes: 0, seconds: 0 };
|
||||||
|
}
|
||||||
|
|
||||||
|
const duration = moment.duration(endsAt.diff(now));
|
||||||
|
|
||||||
|
return {
|
||||||
|
days: Math.floor(duration.asDays()),
|
||||||
|
hours: duration.hours(),
|
||||||
|
minutes: duration.minutes(),
|
||||||
|
seconds: duration.seconds(),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const { days, hours, minutes, seconds } = calculateTimeLeft(currentTime);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
width: "225px",
|
||||||
|
backgroundColor: (theme.palette as any).paperBackground,
|
||||||
|
boxShadow: "1px 1px 4px 0px rgba(51, 54, 71, 0.29)",
|
||||||
|
borderRadius: "8px",
|
||||||
|
p: "10px",
|
||||||
|
...sx,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "12px",
|
||||||
|
color: (theme.palette as any).paperText,
|
||||||
|
textAlign: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{overTimeConfig?.description || t("Quiz will become unavailable in")}
|
||||||
|
</Typography>
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: "inline-flex",
|
||||||
|
justifyContent: "space-around",
|
||||||
|
alignItems: "center",
|
||||||
|
width: "100%",
|
||||||
|
mt: "8px",
|
||||||
|
color: (theme.palette as any).paperSecondaryText,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
bgcolor: (theme.palette as any).paperBlockBackground,
|
||||||
|
width: "42px",
|
||||||
|
height: "45px",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
alignItems: "center",
|
||||||
|
borderRadius: "8px",
|
||||||
|
justifyContent: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "16px",
|
||||||
|
color: (theme.palette as any).paperText,
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{days}
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "10px",
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("days")}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
:
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
bgcolor: (theme.palette as any).paperBlockBackground,
|
||||||
|
width: "42px",
|
||||||
|
height: "45px",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
alignItems: "center",
|
||||||
|
borderRadius: "8px",
|
||||||
|
justifyContent: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "16px",
|
||||||
|
color: (theme.palette as any).paperText,
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{hours}
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "10px",
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("hours")}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
:
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
bgcolor: (theme.palette as any).paperBlockBackground,
|
||||||
|
width: "42px",
|
||||||
|
height: "45px",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
alignItems: "center",
|
||||||
|
borderRadius: "8px",
|
||||||
|
justifyContent: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "16px",
|
||||||
|
color: (theme.palette as any).paperText,
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{minutes}
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "10px",
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("minutes")}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
:
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
bgcolor: (theme.palette as any).paperBlockBackground,
|
||||||
|
width: "42px",
|
||||||
|
height: "45px",
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
alignItems: "center",
|
||||||
|
borderRadius: "8px",
|
||||||
|
justifyContent: "center",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "16px",
|
||||||
|
color: (theme.palette as any).paperText,
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{seconds}
|
||||||
|
</Typography>
|
||||||
|
<Typography
|
||||||
|
sx={{
|
||||||
|
fontSize: "10px",
|
||||||
|
lineHeight: 1.2,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{t("seconds")}
|
||||||
|
</Typography>
|
||||||
|
</Box>
|
||||||
|
</Box>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
};
|
||||||
@ -1,6 +1,9 @@
|
|||||||
import { Box, Button, ButtonBase, Link, Paper, Typography, useTheme } from "@mui/material";
|
import { Box, Button, ButtonBase, Link, Paper, Typography, useTheme } from "@mui/material";
|
||||||
|
import moment from "moment";
|
||||||
|
import React from "react";
|
||||||
|
|
||||||
import { QuizPreviewLayoutByType } from "./QuizPreviewLayoutByType";
|
import { QuizPreviewLayoutByType } from "./QuizPreviewLayoutByType";
|
||||||
|
import { OverTime } from "./OverTime";
|
||||||
|
|
||||||
import { useQuizStore } from "@/stores/useQuizStore";
|
import { useQuizStore } from "@/stores/useQuizStore";
|
||||||
import { useRootContainerSize } from "@contexts/RootContainerWidthContext";
|
import { useRootContainerSize } from "@contexts/RootContainerWidthContext";
|
||||||
@ -24,6 +27,16 @@ export const StartPageViewPublication = () => {
|
|||||||
const { settings, show_badge, quizId, questions } = useQuizStore();
|
const { settings, show_badge, quizId, questions } = useQuizStore();
|
||||||
const { isMobileDevice } = useUADevice();
|
const { isMobileDevice } = useUADevice();
|
||||||
const setCurrentQuizStep = useQuizViewStore((state) => state.setCurrentQuizStep);
|
const setCurrentQuizStep = useQuizViewStore((state) => state.setCurrentQuizStep);
|
||||||
|
const [currentTime, setCurrentTime] = React.useState(moment());
|
||||||
|
|
||||||
|
// Реактивный таймер для обновления времени
|
||||||
|
React.useEffect(() => {
|
||||||
|
const interval = setInterval(() => {
|
||||||
|
setCurrentTime(moment());
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
return () => clearInterval(interval);
|
||||||
|
}, []);
|
||||||
|
|
||||||
const size = useRootContainerSize();
|
const size = useRootContainerSize();
|
||||||
const isMobile = size < 700;
|
const isMobile = size < 700;
|
||||||
@ -39,15 +52,6 @@ export const StartPageViewPublication = () => {
|
|||||||
yandexMetrics.phoneNumberOpened();
|
yandexMetrics.phoneNumberOpened();
|
||||||
};
|
};
|
||||||
|
|
||||||
console.log("------------------------------------------------");
|
|
||||||
console.log("Background type:", settings.cfg.startpage.background.type);
|
|
||||||
console.log("Is image type:", settings.cfg.startpage.background.type === "image");
|
|
||||||
console.log("Is video type:", settings.cfg.startpage.background.type === "video");
|
|
||||||
console.log("Video URL:", settings.cfg.startpage.background.video);
|
|
||||||
console.log("Desktop background:", settings.cfg.startpage.background.desktop);
|
|
||||||
console.log("Startpage type:", settings.cfg.startpageType);
|
|
||||||
console.log("------------------------------------------------");
|
|
||||||
|
|
||||||
const background =
|
const background =
|
||||||
settings.cfg.startpage.background.type === "image" ? (
|
settings.cfg.startpage.background.type === "image" ? (
|
||||||
<img
|
<img
|
||||||
@ -66,7 +70,6 @@ export const StartPageViewPublication = () => {
|
|||||||
) : settings.cfg.startpage.background.type === "video" ? (
|
) : settings.cfg.startpage.background.type === "video" ? (
|
||||||
settings.cfg.startpage.background.video ? (
|
settings.cfg.startpage.background.video ? (
|
||||||
(() => {
|
(() => {
|
||||||
console.log("Rendering QuizVideo with URL:", settings.cfg.startpage.background.video);
|
|
||||||
return (
|
return (
|
||||||
<QuizVideo
|
<QuizVideo
|
||||||
videoUrl={settings.cfg.startpage.background.video}
|
videoUrl={settings.cfg.startpage.background.video}
|
||||||
@ -96,6 +99,12 @@ export const StartPageViewPublication = () => {
|
|||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
margin: settings.cfg.startpageType === "centered" ? "0 auto" : null,
|
margin: settings.cfg.startpageType === "centered" ? "0 auto" : null,
|
||||||
|
display:
|
||||||
|
isMobile && settings.cfg.startpage.position === "center" && settings.cfg.startpageType === "expanded"
|
||||||
|
? "flex"
|
||||||
|
: "block",
|
||||||
|
flexDirection: "column",
|
||||||
|
alignItems: "center",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Box
|
<Box
|
||||||
@ -146,6 +155,8 @@ export const StartPageViewPublication = () => {
|
|||||||
{settings.cfg.info.orgname}
|
{settings.cfg.info.orgname}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
{((settings.cfg.startpageType === "expanded" && settings.cfg.startpage.position !== "center") ||
|
||||||
|
(isMobile && settings.cfg.startpageType === "expanded")) && <OverTime />}
|
||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -159,12 +170,12 @@ export const StartPageViewPublication = () => {
|
|||||||
alignItems: "center",
|
alignItems: "center",
|
||||||
gap: "7px",
|
gap: "7px",
|
||||||
textDecoration: "none",
|
textDecoration: "none",
|
||||||
marginLeft:
|
mr:
|
||||||
settings.cfg.startpageType === "expanded" &&
|
settings.cfg.startpageType === "expanded" &&
|
||||||
settings.cfg.startpage.position === "center" &&
|
settings.cfg.startpage.position === "center" &&
|
||||||
!isTablet &&
|
!isTablet &&
|
||||||
!isMobile
|
!isMobile
|
||||||
? "61px"
|
? "27px"
|
||||||
: undefined,
|
: undefined,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -182,6 +193,14 @@ export const StartPageViewPublication = () => {
|
|||||||
(question) => question.type !== null && question.type !== "result"
|
(question) => question.type !== null && question.type !== "result"
|
||||||
).length;
|
).length;
|
||||||
|
|
||||||
|
// Проверяем, истекло ли время для overTime
|
||||||
|
const overTimeConfig = settings?.cfg?.overTime;
|
||||||
|
const isOverTimeEnabled = overTimeConfig?.enabled;
|
||||||
|
const isTimeExpired =
|
||||||
|
isOverTimeEnabled && overTimeConfig?.endsAt
|
||||||
|
? currentTime.isAfter(moment(overTimeConfig.endsAt)) || currentTime.isSame(moment(overTimeConfig.endsAt))
|
||||||
|
: false;
|
||||||
|
|
||||||
const onQuizStart = () => {
|
const onQuizStart = () => {
|
||||||
setCurrentQuizStep("question");
|
setCurrentQuizStep("question");
|
||||||
|
|
||||||
@ -289,7 +308,7 @@ export const StartPageViewPublication = () => {
|
|||||||
<Box width={settings.cfg.startpageType === "standard" ? "100%" : "auto"}>
|
<Box width={settings.cfg.startpageType === "standard" ? "100%" : "auto"}>
|
||||||
<Button
|
<Button
|
||||||
variant="contained"
|
variant="contained"
|
||||||
disabled={realQuestionsCount === 0}
|
disabled={realQuestionsCount === 0 || isTimeExpired}
|
||||||
sx={{
|
sx={{
|
||||||
fontSize: "18px",
|
fontSize: "18px",
|
||||||
padding: "10px 20px",
|
padding: "10px 20px",
|
||||||
@ -347,6 +366,15 @@ export const StartPageViewPublication = () => {
|
|||||||
: "0",
|
: "0",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
{((isMobile && settings.cfg.startpageType === "centered") ||
|
||||||
|
settings.cfg.startpageType === "standard") && (
|
||||||
|
<OverTime
|
||||||
|
sx={{
|
||||||
|
m: isMobile && settings.cfg.startpageType === "centered" ? "54px 0 20px" : "0",
|
||||||
|
ml: settings.cfg.startpageType === "standard" && !isMobile ? "100%" : "0",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
{settings.cfg.info.site && (
|
{settings.cfg.info.site && (
|
||||||
<ButtonBase
|
<ButtonBase
|
||||||
onClick={onSiteClick}
|
onClick={onSiteClick}
|
||||||
@ -477,8 +505,32 @@ export const StartPageViewPublication = () => {
|
|||||||
{settings.cfg.info.law}
|
{settings.cfg.info.law}
|
||||||
</Typography>
|
</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
<Box
|
||||||
|
sx={{
|
||||||
|
display: "flex",
|
||||||
|
flexDirection: "column",
|
||||||
|
gap: "16px",
|
||||||
|
alignItems: isMobile ? "center" : "end",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{((!isMobile && settings.cfg.startpageType === "centered") ||
|
||||||
|
(!isMobile &&
|
||||||
|
settings.cfg.startpageType === "expanded" &&
|
||||||
|
settings.cfg.startpage.position === "center")) && (
|
||||||
|
<OverTime
|
||||||
|
sx={{
|
||||||
|
ml:
|
||||||
|
!isMobile &&
|
||||||
|
settings.cfg.startpageType === "expanded" &&
|
||||||
|
settings.cfg.startpage.position === "center"
|
||||||
|
? "91px"
|
||||||
|
: "0",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
{show_badge && PenaBadge}
|
{show_badge && PenaBadge}
|
||||||
|
</Box>
|
||||||
</Box>
|
</Box>
|
||||||
</>
|
</>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -123,6 +123,11 @@ export interface QuizConfig {
|
|||||||
yandexMetricsNumber?: number;
|
yandexMetricsNumber?: number;
|
||||||
vkMetricsNumber?: number;
|
vkMetricsNumber?: number;
|
||||||
backBlocked?: boolean;
|
backBlocked?: boolean;
|
||||||
|
overTime?: {
|
||||||
|
enabled: boolean;
|
||||||
|
endsAt: number;
|
||||||
|
description: string;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FormContactFieldName = "name" | "email" | "phone" | "text" | "address";
|
export type FormContactFieldName = "name" | "email" | "phone" | "text" | "address";
|
||||||
|
|||||||
@ -3,6 +3,14 @@ import theme from "../generic";
|
|||||||
|
|
||||||
const themePublic = createTheme({
|
const themePublic = createTheme({
|
||||||
...theme,
|
...theme,
|
||||||
|
palette: {
|
||||||
|
...theme.palette,
|
||||||
|
// Переопределяем цвета для публичных тем
|
||||||
|
paperBackground: "#F2F3F7",
|
||||||
|
paperText: "#333647",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#FFFFFF",
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
...theme.components,
|
...theme.components,
|
||||||
MuiButton: {
|
MuiButton: {
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import type { QuizTheme } from "@model/settingsData";
|
|||||||
const StandardTheme = createTheme({
|
const StandardTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#7E2AEA",
|
main: "#7E2AEA",
|
||||||
dark: "#581CA7",
|
dark: "#581CA7",
|
||||||
@ -28,6 +29,7 @@ const StandardTheme = createTheme({
|
|||||||
const StandardDarkTheme = createTheme({
|
const StandardDarkTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#7E2AEA",
|
main: "#7E2AEA",
|
||||||
dark: "#581CA7",
|
dark: "#581CA7",
|
||||||
@ -43,12 +45,18 @@ const StandardDarkTheme = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
},
|
// Темные цвета для OverTime
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
|
} satisfies any,
|
||||||
});
|
});
|
||||||
|
|
||||||
const PinkTheme = createTheme({
|
const PinkTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#D34085",
|
main: "#D34085",
|
||||||
dark: "#AD376E",
|
dark: "#AD376E",
|
||||||
@ -70,6 +78,7 @@ const PinkTheme = createTheme({
|
|||||||
const PinkDarkTheme = createTheme({
|
const PinkDarkTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#D34085",
|
main: "#D34085",
|
||||||
dark: "#AD376E",
|
dark: "#AD376E",
|
||||||
@ -85,12 +94,17 @@ const PinkDarkTheme = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const BlackWhiteTheme = createTheme({
|
const BlackWhiteTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#4E4D51",
|
main: "#4E4D51",
|
||||||
dark: "#323232",
|
dark: "#323232",
|
||||||
@ -112,6 +126,7 @@ const BlackWhiteTheme = createTheme({
|
|||||||
const OliveTheme = createTheme({
|
const OliveTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#758E4F",
|
main: "#758E4F",
|
||||||
dark: "#4A6324",
|
dark: "#4A6324",
|
||||||
@ -133,6 +148,7 @@ const OliveTheme = createTheme({
|
|||||||
const PurpleTheme = createTheme({
|
const PurpleTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#7E2AEA",
|
main: "#7E2AEA",
|
||||||
dark: "#581CA7",
|
dark: "#581CA7",
|
||||||
@ -154,6 +170,7 @@ const PurpleTheme = createTheme({
|
|||||||
const YellowTheme = createTheme({
|
const YellowTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#F2B133",
|
main: "#F2B133",
|
||||||
dark: "#E6A11C",
|
dark: "#E6A11C",
|
||||||
@ -175,6 +192,7 @@ const YellowTheme = createTheme({
|
|||||||
const GoldDarkTheme = createTheme({
|
const GoldDarkTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#E6AA37",
|
main: "#E6AA37",
|
||||||
dark: "#E19A13",
|
dark: "#E19A13",
|
||||||
@ -190,12 +208,17 @@ const GoldDarkTheme = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const BlueTheme = createTheme({
|
const BlueTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#4964ED",
|
main: "#4964ED",
|
||||||
dark: "#354DC8",
|
dark: "#354DC8",
|
||||||
@ -217,6 +240,7 @@ const BlueTheme = createTheme({
|
|||||||
const BlueDarkTheme = createTheme({
|
const BlueDarkTheme = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#07A0C3",
|
main: "#07A0C3",
|
||||||
dark: "#0A819C",
|
dark: "#0A819C",
|
||||||
@ -232,12 +256,17 @@ const BlueDarkTheme = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const crutch_FurnitureABC = createTheme({
|
const crutch_FurnitureABC = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#F2B133",
|
main: "#F2B133",
|
||||||
dark: "#E6A11C",
|
dark: "#E6A11C",
|
||||||
@ -253,12 +282,17 @@ const crutch_FurnitureABC = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design1 = createTheme({
|
const Design1 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#F2B133",
|
main: "#F2B133",
|
||||||
dark: "#E6A11C",
|
dark: "#E6A11C",
|
||||||
@ -274,12 +308,17 @@ const Design1 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design2 = createTheme({
|
const Design2 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#3D9A63",
|
main: "#3D9A63",
|
||||||
dark: "#247746",
|
dark: "#247746",
|
||||||
@ -295,12 +334,17 @@ const Design2 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design3 = createTheme({
|
const Design3 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#4B6A99",
|
main: "#4B6A99",
|
||||||
dark: "#32507D",
|
dark: "#32507D",
|
||||||
@ -322,6 +366,7 @@ const Design3 = createTheme({
|
|||||||
const Design4 = createTheme({
|
const Design4 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#FF9431",
|
main: "#FF9431",
|
||||||
dark: "#EF8624",
|
dark: "#EF8624",
|
||||||
@ -337,12 +382,17 @@ const Design4 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design5 = createTheme({
|
const Design5 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#2D99BA",
|
main: "#2D99BA",
|
||||||
dark: "#1A84A6",
|
dark: "#1A84A6",
|
||||||
@ -358,12 +408,17 @@ const Design5 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design6 = createTheme({
|
const Design6 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#D34085",
|
main: "#D34085",
|
||||||
dark: "#AD376E",
|
dark: "#AD376E",
|
||||||
@ -379,12 +434,17 @@ const Design6 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design7 = createTheme({
|
const Design7 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#B47C3B",
|
main: "#B47C3B",
|
||||||
dark: "#9C6524",
|
dark: "#9C6524",
|
||||||
@ -400,12 +460,17 @@ const Design7 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design8 = createTheme({
|
const Design8 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#F0B136",
|
main: "#F0B136",
|
||||||
dark: "#E19F1D",
|
dark: "#E19F1D",
|
||||||
@ -421,12 +486,17 @@ const Design8 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design9 = createTheme({
|
const Design9 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#678F48",
|
main: "#678F48",
|
||||||
dark: "#527933",
|
dark: "#527933",
|
||||||
@ -442,12 +512,17 @@ const Design9 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const Design10 = createTheme({
|
const Design10 = createTheme({
|
||||||
...themePublic,
|
...themePublic,
|
||||||
palette: {
|
palette: {
|
||||||
|
...themePublic.palette,
|
||||||
primary: {
|
primary: {
|
||||||
main: "#3666AF",
|
main: "#3666AF",
|
||||||
dark: "#1B478A",
|
dark: "#1B478A",
|
||||||
@ -463,6 +538,10 @@ const Design10 = createTheme({
|
|||||||
background: {
|
background: {
|
||||||
default: "#333647",
|
default: "#333647",
|
||||||
},
|
},
|
||||||
|
paperBackground: "#262835",
|
||||||
|
paperText: "#ffffff",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#31333f",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,13 @@ const theme = createTheme({
|
|||||||
xl: 1536,
|
xl: 1536,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
palette: {
|
||||||
|
// Базовые цвета для OverTime компонента
|
||||||
|
paperBackground: "#F2F3F7",
|
||||||
|
paperText: "#333647",
|
||||||
|
paperSecondaryText: "#9A9AAF",
|
||||||
|
paperBlockBackground: "#FFFFFF",
|
||||||
|
},
|
||||||
components: {
|
components: {
|
||||||
MuiCssBaseline: {
|
MuiCssBaseline: {
|
||||||
styleOverrides: {
|
styleOverrides: {
|
||||||
|
|||||||
10
lib/utils/themes/mui.d.ts
vendored
10
lib/utils/themes/mui.d.ts
vendored
@ -1,5 +1,3 @@
|
|||||||
import "@material-ui/styles";
|
|
||||||
|
|
||||||
declare module "@mui/material/styles" {
|
declare module "@mui/material/styles" {
|
||||||
interface Palette {
|
interface Palette {
|
||||||
lightPurple: Palette["primary"];
|
lightPurple: Palette["primary"];
|
||||||
@ -13,6 +11,10 @@ declare module "@mui/material/styles" {
|
|||||||
orange: Palette["primary"];
|
orange: Palette["primary"];
|
||||||
navbarbg: Palette["primary"];
|
navbarbg: Palette["primary"];
|
||||||
ownPlaceholder: Palette["primary"];
|
ownPlaceholder: Palette["primary"];
|
||||||
|
paperBackground: string;
|
||||||
|
paperText: string;
|
||||||
|
paperSecondaryText: string;
|
||||||
|
paperBlockBackground: string;
|
||||||
}
|
}
|
||||||
interface PaletteOptions {
|
interface PaletteOptions {
|
||||||
lightPurple?: PaletteOptions["primary"];
|
lightPurple?: PaletteOptions["primary"];
|
||||||
@ -26,6 +28,10 @@ declare module "@mui/material/styles" {
|
|||||||
orange?: PaletteOptions["primary"];
|
orange?: PaletteOptions["primary"];
|
||||||
navbarbg?: PaletteOptions["primary"];
|
navbarbg?: PaletteOptions["primary"];
|
||||||
ownPlaceholder?: PaletteOptions["primary"];
|
ownPlaceholder?: PaletteOptions["primary"];
|
||||||
|
paperBackground?: string;
|
||||||
|
paperText?: string;
|
||||||
|
paperSecondaryText?: string;
|
||||||
|
paperBlockBackground?: string;
|
||||||
}
|
}
|
||||||
interface TypographyVariants {
|
interface TypographyVariants {
|
||||||
infographic: React.CSSProperties;
|
infographic: React.CSSProperties;
|
||||||
|
|||||||
@ -56,5 +56,11 @@
|
|||||||
"Step": "Step",
|
"Step": "Step",
|
||||||
"questions are not ready yet": "There are no questions for the audience yet. Please wait",
|
"questions are not ready yet": "There are no questions for the audience yet. Please wait",
|
||||||
"Add your image": "Add your image",
|
"Add your image": "Add your image",
|
||||||
"select emoji": "select emoji"
|
"select emoji": "select emoji",
|
||||||
|
"quiz time expired": "Quiz time has expired",
|
||||||
|
"Quiz will become unavailable in": "Quiz will become unavailable in",
|
||||||
|
"days": "days",
|
||||||
|
"hours": "hours",
|
||||||
|
"minutes": "min.",
|
||||||
|
"seconds": "sec."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -59,5 +59,11 @@
|
|||||||
"select emoji": "выберите смайлик",
|
"select emoji": "выберите смайлик",
|
||||||
"Please complete the phone number": "Пожалуйста, завершите номер телефона",
|
"Please complete the phone number": "Пожалуйста, завершите номер телефона",
|
||||||
"Please enter a valid email": "Пожалуйста, введите корректную почту",
|
"Please enter a valid email": "Пожалуйста, введите корректную почту",
|
||||||
"Please enter a valid phone number": "Пожалуйста, введите корректный номер телефона"
|
"Please enter a valid phone number": "Пожалуйста, введите корректный номер телефона",
|
||||||
|
"quiz time expired": "Время квиза истекло",
|
||||||
|
"Quiz will become unavailable in": "Квиз станет недоступен через",
|
||||||
|
"days": "дней",
|
||||||
|
"hours": "часов",
|
||||||
|
"minutes": "мин.",
|
||||||
|
"seconds": "сек."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,5 +56,11 @@
|
|||||||
"Step": "Qadam",
|
"Step": "Qadam",
|
||||||
"questions are not ready yet": "Tomoshabinlar uchun hozircha savollar yo'q. Iltimos kuting",
|
"questions are not ready yet": "Tomoshabinlar uchun hozircha savollar yo'q. Iltimos kuting",
|
||||||
"Add your image": "Rasmingizni qo'shing",
|
"Add your image": "Rasmingizni qo'shing",
|
||||||
"select emoji": "emoji tanlang"
|
"select emoji": "emoji tanlang",
|
||||||
|
"quiz time expired": "Test vaqti tugadi",
|
||||||
|
"Quiz will become unavailable in": "Test quyidagi vaqtda mavjud bo'lmaydi",
|
||||||
|
"days": "kun",
|
||||||
|
"hours": "soat",
|
||||||
|
"minutes": "daq.",
|
||||||
|
"seconds": "son."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -73,6 +73,12 @@ const r = {
|
|||||||
"Add your image": "Добавьте своё изображение",
|
"Add your image": "Добавьте своё изображение",
|
||||||
"select emoji": "выберите смайлик",
|
"select emoji": "выберите смайлик",
|
||||||
"Please complete the phone number": "Пожалуйста, заполните номер телефона до конца",
|
"Please complete the phone number": "Пожалуйста, заполните номер телефона до конца",
|
||||||
|
"quiz time expired": "Время квиза истекло",
|
||||||
|
"Quiz will become unavailable in": "Квиз станет недоступен через",
|
||||||
|
days: "дней",
|
||||||
|
hours: "часов",
|
||||||
|
minutes: "мин.",
|
||||||
|
seconds: "сек.",
|
||||||
"": "", // Пустой ключ для fallback
|
"": "", // Пустой ключ для fallback
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -137,6 +143,12 @@ const r = {
|
|||||||
"Add your image": "Add your image",
|
"Add your image": "Add your image",
|
||||||
"select emoji": "select emoji",
|
"select emoji": "select emoji",
|
||||||
"Please complete the phone number": "Please complete the phone number",
|
"Please complete the phone number": "Please complete the phone number",
|
||||||
|
"quiz time expired": "Quiz time has expired",
|
||||||
|
"Quiz will become unavailable in": "Quiz will become unavailable in",
|
||||||
|
days: "days",
|
||||||
|
hours: "hours",
|
||||||
|
minutes: "min.",
|
||||||
|
seconds: "sec.",
|
||||||
"": "", // Пустой ключ для fallback
|
"": "", // Пустой ключ для fallback
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -201,6 +213,12 @@ const r = {
|
|||||||
"Add your image": "Rasmingizni qo'shing",
|
"Add your image": "Rasmingizni qo'shing",
|
||||||
"select emoji": "emoji tanlang",
|
"select emoji": "emoji tanlang",
|
||||||
"Please complete the phone number": "Iltimos, telefon raqamini to'liq kiriting",
|
"Please complete the phone number": "Iltimos, telefon raqamini to'liq kiriting",
|
||||||
|
"quiz time expired": "Test vaqti tugadi",
|
||||||
|
"Quiz will become unavailable in": "Test quyidagi vaqtda mavjud bo'lmaydi",
|
||||||
|
days: "kun",
|
||||||
|
hours: "soat",
|
||||||
|
minutes: "daq.",
|
||||||
|
seconds: "son.",
|
||||||
"": "", // Пустой ключ для fallback
|
"": "", // Пустой ключ для fallback
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
14
src/types/mui-palette.d.ts
vendored
Normal file
14
src/types/mui-palette.d.ts
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
declare module "@mui/material/styles" {
|
||||||
|
interface Palette {
|
||||||
|
paperBackground: string;
|
||||||
|
paperText: string;
|
||||||
|
paperSecondaryText: string;
|
||||||
|
paperBlockBackground: string;
|
||||||
|
}
|
||||||
|
interface PaletteOptions {
|
||||||
|
paperBackground?: string;
|
||||||
|
paperText?: string;
|
||||||
|
paperSecondaryText?: string;
|
||||||
|
paperBlockBackground?: string;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user