mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 05:13:44 +08:00
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import React, { ReactNode } from "react";
|
|
import { Typography, alpha } from "@mui/material";
|
|
import { BaseErrorBoundary } from "./base-error-boundary";
|
|
import { useCustomTheme } from "@/components/layout/use-custom-theme";
|
|
|
|
interface Props {
|
|
title?: React.ReactNode; // the page title
|
|
header?: React.ReactNode; // something behind title
|
|
contentStyle?: React.CSSProperties;
|
|
children?: ReactNode;
|
|
}
|
|
|
|
export const BasePage: React.FC<Props> = (props) => {
|
|
const { title, header, contentStyle, children } = props;
|
|
const { theme } = useCustomTheme();
|
|
|
|
const isDark = theme.palette.mode === "dark";
|
|
|
|
return (
|
|
<BaseErrorBoundary>
|
|
<div className="base-page" data-windrag>
|
|
<header data-windrag style={{ userSelect: "none" }}>
|
|
<Typography variant="h4" component="h1" data-windrag>
|
|
{title}
|
|
</Typography>
|
|
|
|
{header}
|
|
</header>
|
|
|
|
<div
|
|
className="base-container"
|
|
style={{ backgroundColor: isDark ? "#090909" : "#ffffff" }}
|
|
>
|
|
<section
|
|
style={{
|
|
backgroundColor: isDark
|
|
? alpha(theme.palette.primary.main, 0.1)
|
|
: "",
|
|
}}
|
|
>
|
|
<div className="base-content" style={contentStyle} data-windrag>
|
|
{children}
|
|
</div>
|
|
</section>
|
|
</div>
|
|
</div>
|
|
</BaseErrorBoundary>
|
|
);
|
|
};
|