"use client"; import { useStatusBlocksLabels } from "@openstatus/ui/components/blocks/status-i18n"; import { Button } from "@openstatus/ui/components/ui/button"; import { Input } from "@openstatus/ui/components/ui/input"; import { Popover, PopoverContent, PopoverTrigger, } from "@openstatus/ui/components/ui/popover"; import { Separator } from "@openstatus/ui/components/ui/separator"; import { useCopyToClipboard } from "@openstatus/ui/hooks/use-copy-to-clipboard"; import { cn } from "@openstatus/ui/lib/utils"; import { Check, Copy } from "lucide-react"; /** * StatusUpdates — popover root for "Get updates" controls. * * Flat exports. Compose `StatusUpdatesTrigger` + `StatusUpdatesContent` and * pick whichever channel children apply (`StatusUpdatesRss`, * `StatusUpdatesJson`, `StatusUpdatesSlack`, `StatusUpdatesSsh`, or your own * email form). The block does not enforce a tab structure — callers wrap * children with `Tabs` themselves if needed. */ export function StatusUpdates({ children, ...props }: React.ComponentProps) { return {children}; } export function StatusUpdatesTrigger({ children, className, ...props }: React.ComponentProps) { const labels = useStatusBlocksLabels(); return ( ); } export function StatusUpdatesContent({ className, ...props }: React.ComponentProps) { return ( ); } /** * StatusUpdatesSection — single channel description + content slot. * Use to compose custom channels; the built-in `StatusUpdatesRss`/`Json`/ * `Slack`/`Ssh` children render this internally. */ export function StatusUpdatesSection({ description, children, className, ...props }: React.ComponentProps<"div"> & { description?: React.ReactNode; }) { return (
{description ?
{description}
: null} {children}
); } export function StatusUpdatesCopyInput({ value, className, onClick, ...props }: Omit, "value"> & { value: string }) { const labels = useStatusBlocksLabels(); const { copy, isCopied } = useCopyToClipboard(); return (
{ copy(value, { successMessage: labels.linkCopiedToClipboard, withToast: true, }); onClick?.(e); }} {...props} />
); } export function StatusUpdatesRss({ rssUrl, atomUrl, }: { rssUrl: string; atomUrl?: string; }) { const labels = useStatusBlocksLabels(); return ( <> {atomUrl ? ( <> ) : null} ); } export function StatusUpdatesJson({ url }: { url: string }) { const labels = useStatusBlocksLabels(); return ( ); } export function StatusUpdatesSlack({ rssUrl }: { rssUrl: string }) { const labels = useStatusBlocksLabels(); return ( ); } export function StatusUpdatesSsh({ command }: { command: string }) { const labels = useStatusBlocksLabels(); return ( ); }