# LivaEditPopup
Package: @dataliva/livalib
Description: @dataliva/livalib kayıt düzenleme odaklı, aksiyon butonlu popup bileşeni.

Kayıt düzenleme senaryoları için hazırlanmış popup: içine formu koyarsınız,
Kaydet / Vazgeç / Sil butonlarını ve tam ekran desteğini kendisi yönetir.
`onSave`, `onCancel` ve `onDelete` geri çağrıları verildikçe ilgili butonlar
görünür; `actions` dizisiyle tamamen özel aksiyonlar da eklenebilir.

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

## Düzenleme Formu

Popup bir tetikleyici ile açılır; form alanları `children` olarak verilir.
`onSave` içinde form state'i kalıcılaştırılır ve popup kapatılır. Buton
metinleri `saveButtonText` ve `cancelButtonText` ile Türkçeleştirilebilir.

**Örnek — Düzenleme formu:**

```tsx
const [open, setOpen] = useState<boolean>(false);
const [name, setName] = useState<string>("Ali Yılmaz");
const [email, setEmail] = useState<string>("ali@dataliva.com");
const [saved, setSaved] = useState<string>("");

<LivaButton text="Kaydı Düzenle" onClick={() => setOpen(true)} />
<span>Son kayıt: {saved || "henüz yok"}</span>

{open && (
  <LivaEditPopup
    visible
    title="Kullanıcı Düzenle"
    width={440}
    height={340}
    onHiding={() => setOpen(false)}
    onSave={() => {
      setSaved(name + " / " + email);
      setOpen(false);
    }}
    saveButtonText="Kaydet"
    cancelButtonText="Vazgeç"
  >
    <div style={{ display: "flex", flexDirection: "column", gap: 12 }}>
      <LivaTextBox
        label="Ad Soyad"
        value={name}
        onValueChanged={(e) => setName(e.value)}
      />
      <LivaTextBox
        label="E-posta"
        value={email}
        onValueChanged={(e) => setEmail(e.value)}
      />
    </div>
  </LivaEditPopup>
)}
```

## Silme Aksiyonu

`onDelete` ile birlikte `showDeleteButton` verildiğinde silme aksiyonu
eklenir. Silme, `deleteDialogTitle` ve `deleteDialogDescription` metinlerini
kullanan yerleşik bir onay dialogundan geçer; onaylanmadan `onDelete`
çağrılmaz.

**Örnek — Silme aksiyonu ve onay:**

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

<LivaButton text="Ürünü Düzenle" onClick={() => setOpen(true)} />
<span>Durum: {status || "bekleniyor"}</span>

{open && (
  <LivaEditPopup
    visible
    title="Ürün Düzenle"
    width={440}
    height={280}
    onHiding={() => setOpen(false)}
    onSave={() => setStatus("Kaydedildi")}
    onDelete={() => setStatus("Silindi")}
    showDeleteButton
    saveButtonText="Kaydet"
    cancelButtonText="Vazgeç"
    deleteButtonText="Sil"
    deleteDialogTitle="Silme Onayı"
    deleteDialogDescription="Bu ürünü silmek istediğinize emin misiniz?"
  >
    <p>
      Silme aksiyonu, deleteDialogTitle ve deleteDialogDescription ile
      yapılandırılan bir onay penceresiyle birlikte gelir.
    </p>
  </LivaEditPopup>
)}
```

## Prop'lar

| Prop | Tip | Varsayılan |
|------|------|---------|
| `visible` | `boolean` | `true` |
| `onHiding` | `() => void` | — (zorunlu) |
| `title` | `ReactNode` | — |
| `onSave` | `() => void \| Promise<void>` | — |
| `onCancel` | `() => void` | — |
| `onDelete` | `() => void \| Promise<void>` | — |
| `showDeleteButton` | `boolean` | `false` |
| `saveButtonText` | `string` | `'Save'` |
| `cancelButtonText` | `string` | `'Cancel'` |
| `deleteButtonText` | `string` | `'Delete'` |
| `actions` | `LivaAction[]` | `[]` |
| `saving` | `boolean` | `false` |
| `readOnly` | `boolean` | `false` |
| `width` | `number \| string` | `'80%'` |
| `height` | `number \| string` | `'80%'` |
| `allowFullscreen` | `boolean` | `true` |
| `hideOnOutsideClick` | `boolean` | `true` |

Bunlara ek olarak `deleteDialogTitle`, `deleteDialogDescription`,
`closeOnCancel`, `closeOnAction`, `customFooter`, `footerActionsAlignment`,
`toolbarItems`, `loading`, `deleting`, `cloning` gibi prop'lar da mevcuttur.
