import { Undo2Icon } from "lucide-react";
import { type ComponentPropsWithoutRef, type ReactNode, useEffect, useState } from "react";
import { cn } from "../../lib/utils";
import { Button } from "../ui/button";
import { Tooltip, TooltipPopup, TooltipTrigger } from "../ui/tooltip";
/** Re-render every `intervalMs`; return a stable timestamp snapshot for render-time relative labels. */
export function useRelativeTimeTick(intervalMs = 1_000) {
const [nowMs, setNowMs] = useState(() => Date.now());
useEffect(() => {
const id = setInterval(() => setNowMs(Date.now()), intervalMs);
return () => clearInterval(id);
}, [intervalMs]);
return nowMs;
}
export function SettingsSection({
title,
icon,
headerAction,
children,
className,
...sectionProps
}: ComponentPropsWithoutRef<"section"> & {
title: string;
icon?: ReactNode;
headerAction?: ReactNode;
children: ReactNode;
}) {
return (
{icon}
{title}
{headerAction}
{children}
);
}
export function SettingsRow({
title,
description,
status,
resetAction,
control,
children,
className,
...rowProps
}: Omit, "title"> & {
title: ReactNode;
description: ReactNode;
status?: ReactNode;
resetAction?: ReactNode;
control?: ReactNode;
children?: ReactNode;
}) {
return (
{title}
{resetAction}
{description}
{status ?
{status}
: null}
{control ? (
{control}
) : null}
{children}
);
}
export function SettingResetButton({ label, onClick }: { label: string; onClick: () => void }) {
return (
{
event.stopPropagation();
onClick();
}}
>
}
/>
Reset to default
);
}
export function SettingsPageContainer({
children,
className,
}: {
children: ReactNode;
className?: string;
}) {
return (
);
}