34 lines
1.0 KiB
TypeScript
34 lines
1.0 KiB
TypeScript
import * as stylex from "@stylexjs/stylex";
|
|
import { styles as shared } from "@/ui/styles";
|
|
import { colors } from "@/ui/tokens.stylex";
|
|
import { useAuthority } from "./authority";
|
|
|
|
const styles = stylex.create({
|
|
banner: {
|
|
borderBottomWidth: 1,
|
|
borderBottomStyle: "solid",
|
|
borderBottomColor: colors.warnBorder,
|
|
backgroundColor: colors.warnSurface,
|
|
color: colors.warnText,
|
|
paddingInline: "1rem",
|
|
paddingBlock: "0.5rem",
|
|
fontSize: "0.875rem",
|
|
lineHeight: "1.25rem",
|
|
},
|
|
});
|
|
|
|
/**
|
|
* File authority is a standing condition, not an event, so this banner has no
|
|
* dismiss button: it stays up for as long as the process runs from a file.
|
|
*/
|
|
export default function ReadOnlyConfigBanner() {
|
|
const authority = useAuthority();
|
|
if (authority?.mode !== "managed_file") return null;
|
|
return (
|
|
<div role="status" {...stylex.props(styles.banner)}>
|
|
Configuration is managed by <code {...stylex.props(shared.mono)}>{authority.path}</code>. Edit the file and
|
|
restart nxdns to change it; the server rejects edits made here.
|
|
</div>
|
|
);
|
|
}
|