/**
* Dialoge.
*
* Zwei Bauarten, und der Unterschied ist fachlich:
*
* - `Dialog` fuer Eingaben (anlegen, bearbeiten). Er laesst sich mit Escape und
* einem Klick daneben schliessen.
* - `ConfirmDialog` fuer Handlungen, die etwas veraendern. Er verlangt eine
* ausdrueckliche Bestaetigung. Bei zerstoerenden Handlungen kann er zusaetzlich
* ein woertlich einzutippendes Wort verlangen — dasselbe Mittel, das
* `uninstall.sh` und die Wiederherstellung mit Ueberschreiben verwenden. Ein
* versehentlich gesetztes Kennzeichen in einem Skript reicht dann nicht aus,
* und ein Klick aus Gewohnheit auch nicht.
*/
import * as DialogPrimitive from '@radix-ui/react-dialog';
import { X } from 'lucide-react';
import { useState, type ReactNode } from 'react';
import { cn } from '@/lib/utils';
import { Button } from './Button';
export const DialogRoot = DialogPrimitive.Root;
export const DialogTrigger = DialogPrimitive.Trigger;
export const DialogClose = DialogPrimitive.Close;
export function DialogContent({
className,
children,
size = 'md',
}: {
readonly className?: string | undefined;
readonly children: ReactNode;
readonly size?: 'sm' | 'md' | 'lg' | 'xl' | undefined;
}) {
const sizeClasses = {
sm: 'max-w-md',
md: 'max-w-lg',
lg: 'max-w-2xl',
xl: 'max-w-4xl',
} as const;
return (
{children}
);
}
export function DialogHeader({
title,
description,
}: {
readonly title: ReactNode;
readonly description?: ReactNode | undefined;
}) {
return (