React İstemci Entegrasyonu

@copypatch/react paketi; React context sağlayıcısını, satır içi düzenlenebilir metin bileşenlerini ve kancaları sunar. Varsayılan olarak uygulamanızın aynı kökenindeki /__copypatch/api/v2 rotasına otomatik bağlanır.

CopyPatchProvider Sağlayıcısı

Bileşen ağacınızı (veya kök sayfa düzeninizi) CopyPatchProvider ile sarın. Sağlayıcı; aktif dili, yayınlanmış metin önbelleğini, taslak revizyonlarını ve düzenleyici arayüzünün tembel yüklenmesini yönetir:

HomePage.tsx
import { CopyPatchProvider, EditableText, useCopyPatch } from '@copypatch/react';

export function HomePage() {
  // Öznitelikler, yer tutucular veya buton etiketleri için düzenlenebilir metin okuma
  const buttonLabel = useCopyPatch('home.cta.button', 'Ücretsiz Başlayın');
  const searchPlaceholder = useCopyPatch('home.search.placeholder', 'Dokümantasyonda arayın...');

  return (
    <CopyPatchProvider locale="tr">
      <header className="hero">
        <EditableText contentKey="home.hero.title" as="h1" className="hero-title">
          Metinleri müşterileriniz düzenlesin. Kodları ve tasarımı değil.
        </EditableText>
        <EditableText contentKey="home.hero.subtitle" as="p" className="hero-desc">
          React uygulamaları için güvenli, aynı kökenden (same-origin) satır içi metin düzenleme.
        </EditableText>
        <div className="hero-actions">
          <input type="text" placeholder={searchPlaceholder} />
          <button type="button">{buttonLabel}</button>
        </div>
      </header>
    </CopyPatchProvider>
  );
}

Sağlayıcı Yapılandırma Özellikleri (Props)

ÖzellikTipVarsayılanAçıklama
localestringZorunluAktif dil tanıtıcısı (örn. “tr”, “en”, “de”).
initialSnapshotContentSnapshotundefinedSunucudan önceden oluşturulmuş içerik anlık görüntüsü (yükleme sırasında istemci yerleşim kaymalarını önler).
apiBasestring“/__copypatch/api/v2”Temel API yolu. Standart same-origin barındırmada boş bırakılmalıdır.

Bileşen ve Kanca Başvuru Kılavuzu

<EditableText>

Satır içi düzenlenebilir bir metin öğesi render eder. Normal ziyaretçiler gezinirken sıfır ek yükle standart React öğeleri oluşturur. Yetkili bir editör düzenleme modunu açtığında tıklanarak düzenlenebilir hale gelir:

ÖzellikTipVarsayılanAçıklama
contentKeystringZorunluNoktayla ayrılmış benzersiz içerik anahtarı (örn. “pricing.pro.title”).
asstring | ComponentType“span”Render edilecek HTML etiketi veya React bileşeni (örn. “h1”, “h2”, “p”).
childrenstring“”Veritabanında yayınlanmış metin bulunamadığında render edilecek varsayılan yedek metin.
classNamestringundefinedDOM öğesine aktarılacak CSS sınıf isimleri.

useCopyPatch(contentKey, fallback)

HTML öğesi olarak doğrudan render edilemeyen öznitelikler (örn. placeholder, aria-label, title, alt veya buton etiketleri) için düzenlenebilir metin değerini okuyan React kancasıdır.

useEditableText(contentKey, fallback)

CopyPatch’in seçim ve mutasyon hattıyla entegre çalışan özel etkileşimli bileşenler oluşturmak için kullanılan alt seviye kancadır:

OzelRozet.tsx
import { useEditableText } from '@copypatch/react';

export function OzelRozet({ contentKey, defaultLabel }: { contentKey: string; defaultLabel: string }) {
  const { value, isEditing, editProps } = useEditableText(contentKey, defaultLabel);

  return (
    <span className="badge" {...editProps}>
      {value}
    </span>
  );
}

Sıkı Düz Metin İlkesi (Sıfır XSS)

XSS Korumalı Tasarım: CopyPatch yalnızca düz metin (plaintext) dizgilerini saklar ve işler. Düzenleme alanlarına girilen HTML etiketleri veya <script> kodları hiçbir zaman çalıştırılmaz; tamamen zararsız düz metin olarak işlenerek depolanmış XSS açıklarını kökten engeller.