# LivaDialog
Package: @dataliva/livalib
Description: @dataliva/livalib hazır tipli iletişim kutusu (dialog) bileşeni.

DevExtreme Popup üzerine kurulu, hazır tiplerle (bilgi, başarı, uyarı, tehlike,
onay) gelen iletişim kutusu. `type` prop'una göre ikon ve varsayılan butonlar
otomatik oluşturulur; `buttons` ile tamamen özel buton dizisi de verilebilir.

```tsx
import { LivaDialog } from "@dataliva/livalib";
```

## Tipler

`type` prop'u `info`, `success`, `warning` ve `danger` değerlerinde tek bir
"OK" butonuyla hazır bir bildirim dialogu üretir. Dialog bir tetikleyici ile
açılır: state `true` olduğunda bileşen render edilir, `onHiding` state'i
sıfırlayarak kapatır.

**Örnek — Dialog tipleri:**

```tsx
const [openType, setOpenType] = useState<
  "info" | "success" | "warning" | "danger" | null
>(null);

<LivaButton text="Info" onClick={() => setOpenType("info")} />
<LivaButton text="Success" onClick={() => setOpenType("success")} />
<LivaButton text="Warning" onClick={() => setOpenType("warning")} />
<LivaButton text="Danger" onClick={() => setOpenType("danger")} />

{openType && (
  <LivaDialog
    visible
    type={openType}
    title="Bildirim"
    description={"Bu, '" + openType + "' tipinde bir dialog örneğidir."}
    onHiding={() => setOpenType(null)}
  />
)}
```

## Onay Dialogu

`type="confirm"` iki butonlu (Cancel / Confirm) bir onay penceresi oluşturur.
Kullanıcının seçimi `onConfirm` ve `onCancel` geri çağrılarıyla yakalanır; her
iki buton da dialogu otomatik kapatır.

**Örnek — Onay dialogu:**

```tsx
const [open, setOpen] = useState<boolean>(false);
const [result, setResult] = useState<string>("");

<LivaButton text="Kaydı Sil" type="danger" onClick={() => setOpen(true)} />
<span>Sonuç: {result || "bekleniyor"}</span>

{open && (
  <LivaDialog
    visible
    type="confirm"
    title="Silme Onayı"
    description="Bu kaydı silmek istediğinize emin misiniz?"
    onConfirm={() => setResult("Onaylandı")}
    onCancel={() => setResult("Vazgeçildi")}
    onHiding={() => setOpen(false)}
  />
)}
```

## Özel Butonlar

`buttons` dizisi verildiğinde varsayılan butonların yerine geçer. Her butonda
`variant`, `stylingMode` ve `autoClose` alanları bulunur; `autoClose: true`
olan buton tıklandığında önce `onClick` çalışır, ardından dialog kapanır.

**Örnek — Özel butonlar ve autoClose:**

```tsx
const [open, setOpen] = useState<boolean>(false);
const [choice, setChoice] = useState<string>("");

<LivaButton text="Tema Seç" onClick={() => setOpen(true)} />
<span>{choice || "Henüz seçim yapılmadı"}</span>

{open && (
  <LivaDialog
    visible
    type="custom"
    title="Tema Seçimi"
    description="Uygulama için bir tema seçin."
    onHiding={() => setOpen(false)}
    buttons={[
      {
        text: "Açık Tema",
        variant: "secondary",
        stylingMode: "outlined",
        autoClose: true,
        onClick: () => setChoice("Açık tema seçildi"),
      },
      {
        text: "Koyu Tema",
        variant: "primary",
        autoClose: true,
        onClick: () => setChoice("Koyu tema seçildi"),
      },
    ]}
  />
)}
```

## Prop'lar

| Prop | Tip | Varsayılan |
|------|------|---------|
| `visible` | `boolean` | — (zorunlu) |
| `onHiding` | `() => void` | — (zorunlu) |
| `title` | `string` | — |
| `description` | `string \| ReactNode` | — |
| `icon` | `string \| ReactNode` | tipe göre |
| `type` | `'info' \| 'success' \| 'warning' \| 'danger' \| 'confirm' \| 'custom'` | `'custom'` |
| `buttons` | `LivaDialogButton[]` | `[]` |
| `onConfirm` | `() => void` | — |
| `onCancel` | `() => void` | — |
| `showCloseButton` | `boolean` | `true` |
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` |
| `variant` | `'standard' \| 'modal'` | `'modal'` |
| `hideOnOutsideClick` | `boolean` | `true` |
| `children` | `ReactNode` | — |

`LivaDialogButton` alanları:

| Alan | Tip | Varsayılan |
|------|------|---------|
| `text` | `string` | — (zorunlu) |
| `onClick` | `() => void` | — (zorunlu) |
| `variant` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'danger'` | — |
| `stylingMode` | `'text' \| 'outlined' \| 'contained'` | — |
| `disabled` | `boolean` | `false` |
| `autoClose` | `boolean` | `false` |

Ayrıca DevExtreme `IPopupOptions`'tan gelen prop'lar (ör. `shading`,
`animation`) aynen aktarılır.
