Lewati ke konten utama

Konfigurasi

EditorConfig dan RendererConfig adalah titik masuk untuk setiap kustomisasi. Berikan salah satunya ke Editor.create() atau Renderer.render() masing-masing. Hanya containerId (dan data untuk renderer) yang diperlukan, semua opsi lainnya memiliki nilai default yang aman.

EditorConfig

Berikan EditorConfig sebagai satu-satunya argumen ke Editor.create(). containerId yang diperlukan harus cocok dengan id elemen DOM yang sudah ada.

OpsiTipeDiperlukanDeskripsi
containerIdstringYaID elemen DOM yang akan menampung editor. Harus ada di DOM sebelum Editor.create() dipanggil.
maxHeightnumberTidakTinggi maksimum editor dalam piksel. Atur ke 0 (default) untuk tidak ada batas tinggi.
minHeightnumberTidakTinggi minimum editor dalam piksel. Default-nya 300.
onChange(data: EditorData) => voidTidakCallback yang dipicu setiap kali dokumen berubah. Menerima snapshot EditorData lengkap.
onReady() => voidTidakCallback yang dipicu setelah editor sepenuhnya diinisialisasi dan siap menerima panggilan API.
placeholderstringTidakTeks placeholder yang ditampilkan saat editor kosong. Default-nya 'Start writing...'.
initialDataEditorDataTidakEditorData yang sudah terisi sebelumnya untuk dimuat saat editor di-mount.
initialView'edit' | 'preview' | 'json'TidakMode tampilan awal. Salah satu dari: edit, preview, json. Default-nya 'edit'.
allowJsonViewEditingbooleanTidakJika true, tampilan JSON dapat diedit dan perubahan menyebar kembali ke dokumen. Default-nya false.
hasViewSwitcherbooleanTidakJika false, tombol edit, pratinjau, dan JSON tidak ditampilkan di bilah aksi. Default-nya true.
hasDocumentActionsbooleanTidakJika false, tombol salin, unduh, dan kosongkan tidak ditampilkan di bilah aksi. Jika hasViewSwitcher juga false, bilah aksi tidak digambar. Default-nya true.
onClearRequest() => Promise<boolean>TidakDipanggil saat Kosongkan ditekan. Halaman hanya dikosongkan jika ini menghasilkan true; penolakan membiarkan halaman tetap. Jika tidak ada, Kosongkan langsung mengosongkan.
marginsBlockMarginsTidakMargin atas dan bawah global (dalam piksel) yang diterapkan ke setiap blok. Konfigurasi per-blok lebih diutamakan.
stylesEditorStylesTidakObjek EditorStyles untuk kustomisasi CSS yang detail dari chrome editor (toolbar, dialog, kontrol).
classNamesEditorClassNamesTidakObjek EditorClassNames untuk melampirkan nama kelas CSS ke elemen chrome editor.
imageUploaderUploadFunctionTidakFungsi async yang mengunggah file gambar dan mengembalikan string URL publik.
audioUploaderUploadFunctionTidakFungsi async yang mengunggah file audio dan mengembalikan string URL publik.
videoUploaderUploadFunctionTidakFungsi async yang mengunggah file video dan mengembalikan string URL publik.
fileUploaderUploadFunctionTidakFungsi unggah yang memindahkan lampiran blok berkas ke penyimpanan Anda.
localestringTidakSatu-satunya locale yang disunting editor. Blok multibahasa diratakan ke locale ini.
defaultLocalestringTidakLocale cadangan saat blok tidak punya konten untuk locale yang diminta.
onLocaleFallback(info: { blockId: string; locale: string }) => voidTidakDipanggil saat sebuah blok jatuh ke locale lain, agar host bisa menampilkan indikator.
onInlineRewrite(selection: string, action: InlineRewriteAction) => Promise<string | null>TidakFungsi yang menulis ulang teks terpilih dengan AI; bila diatur, bilah alat menampilkan tombol tulis ulang.
inlineRewriteLabelsPartial<Record<InlineRewriteAction, string>>TidakMenimpa label aksi menu tulis ulang, untuk pelokalan.
inlineRewriteTooltipstringTidakMenimpa tooltip tongkat tulis ulang di bilah alat sebaris, untuk pelokalan.
blockToolLabelsPartial<Record<BlockToolType, string>>TidakMenimpa label alat blok di kotak alat dan menu garis miring, untuk pelokalan.
blockToolbarLabelsPartial<Record<BlockToolbarLabel, string>>TidakMenimpa teks bilah alat blok (tambah, pindah, hapus, dan lainnya) serta petunjuk yang tampil di kolom blok kosong, untuk pelokalan.
controlLabelsPartial<Record<ControlLabel, string>>TidakMenimpa nama tombol bilah aksi (edit, pratinjau, JSON, salin, unduh, kosongkan), yang dipakai sebagai nama aksesibel dan tooltip-nya, untuk pelokalan.
dialogLabelsPartial<Record<DialogLabel, string>>TidakKata-kata yang ditampilkan dialog tautan, tooltip, dan status, menurut nama: judul, label kolom, placeholder, gaya status, Batal, dan Terapkan. Bahasa Inggris jika tidak ada.
resolveLink(url: string) => Promise<Partial<EmbedData>>TidakMengisi snapshot embed yang ditempel dari server Anda: judul, file Drive, file gist, atau alasan tampilan langsung tidak memungkinkan. Pencarian yang gagal menggambar kartu sebagai alat tidak merespons, dengan Coba lagi di sampingnya.
onEmbedAction(action: EmbedAction, blockId: string) => voidTidakPerbaikan di samping alasan kartu yang hanya bisa dilakukan host: connectGoogle mengirim anggota untuk menghubungkan akun Google-nya; retry ditangani editor sendiri.
disabledEmbedProvidersreadonly string[]TidakAlat embed yang dimatikan ruang kerja menurut kunci kawat (figma, miro, loom, google_drive, github_gist); tautannya digambar sebagai kartu yang menyebut alasannya.
pasteEmbeds'live' | 'offer' | 'card'TidakApa yang terjadi saat menempel tautan yang didukung: tampilkan langsung (default), tawarkan, atau tampilkan kartu.
embedLabelsPartial<Record<EmbedLabel, string>>TidakKata terjemahan untuk baris alasan, aksi, dan label gist blok embed, dikunci oleh EmbedLabel; jika tidak, fallback bahasa Inggris.
resolveIssues(urls: string[]) => Promise<Record<string, IssueSnapshot>>TidakMenjawab tautan isu halaman dengan snapshot-nya, dikunci oleh URL. Jika tidak ada, chip dan kartu mempertahankan yang disimpan dokumen dan tidak ada yang diperbarui.
onIssueAction(action: IssueAction, tool: string) => voidTidakPerbaikan di samping alasan isu yang hanya dapat dilakukan host: menghubungkan alat, yang membawa ke halaman Integrasi host.
issueCards'off' | 'on'TidakApakah tautan isu yang ditempel di barisnya sendiri menjadi kartu; off jika tidak ada. Chip di dalam kalimat selalu chip.
issueChip{ assignee: boolean; status: boolean }TidakDua sakelar chip anggota: pil status dan penerima tugas. Keduanya aktif jika tidak ada.
issueLabelsPartial<Record<IssueLabel, string>>TidakKata terjemahan untuk chip isu, kartu, dan tabel isu tertaut, dikunci oleh IssueLabel; jika tidak, fallback bahasa Inggris.
jiraSitesreadonly string[]TidakURL situs Jira yang dijangkau koneksi ruang kerja, agar tautan di domain situs sendiri dikenali sebagai isu.
allowedBlockToolsreadonly BlockToolType[]TidakTipe blok yang ditawarkan editor di menu blok, pencariannya, menu konversi dan saat menempel. Setiap blok terdaftar bila tidak diisi; blok tersimpan di luar daftar tetap dirender.
allowedInlineToolsreadonly InlineToolType[]TidakTanda yang ditawarkan bilah alat sebaris. Setiap tanda terdaftar bila tidak diisi.
theme'auto' | 'light' | 'dark'TidakSkema warna. Salah satu dari: auto (mengikuti sistem), light, dark. Default-nya auto.
themeOverrides{ light?: ThemeTokens; dark?: ThemeTokens }TidakOverride token per mode. Sediakan peta token light dan/atau dark untuk menyesuaikan warna tanpa mengganti tema lengkap.
TypeScript
import { Editor } from '@clepit/core';

const editor = Editor.create({
  containerId: 'editor',
  minHeight: 400,
  placeholder: 'Start writing...',
  theme: 'auto',
  onChange: data => console.log(data),
  onReady: () => console.log('Editor ready'),
  imageUploader: async file => {
    const form = new FormData();
    form.append('file', file);
    const res = await fetch('/api/upload', { body: form, method: 'POST' });
    const { url } = await res.json();
    return url;
  },
});

RendererConfig

Berikan RendererConfig sebagai satu-satunya argumen ke Renderer.render(). Baik containerId maupun data diperlukan.

OpsiTipeDiperlukanDeskripsi
containerIdstringYaID elemen DOM tempat output yang dirender akan disuntikkan.
dataEditorDataYaDokumen EditorData yang akan dirender. Diperlukan.
marginsBlockMarginsTidakMargin atas dan bawah global (dalam piksel) yang diterapkan ke setiap blok yang dirender.
stylesBlockStylesTidakPeta BlockStyles untuk kustomisasi CSS per-jenis-blok dari output yang dirender.
classNamesBlockClassNamesTidakPeta BlockClassNames untuk nama kelas CSS per-jenis-blok pada output yang dirender.
editorClassNamesEditorClassNamesTidakEditorClassNames yang diteruskan ke blok yang merender komponen interaktif (mis. classNames tooltip untuk paragraf).
configsPartial<BlockTypeOutputConfigs>TidakPeta parsial objek OutputConfig per blok. Setiap entri dapat menetapkan margin tingkat blok dan nama kelas tooltip.
theme'auto' | 'light' | 'dark'TidakSkema warna. Salah satu dari: auto, light, dark.
themeOverrides{ light?: ThemeTokens; dark?: ThemeTokens }TidakOverride token per mode untuk output yang dirender.
TypeScript
import { Renderer } from '@clepit/core';
import type { EditorData } from '@clepit/core';

const data: EditorData = await fetch('/api/content/123').then(r => r.json());

Renderer.render({
  containerId: 'output',
  data,
  theme: 'auto',
  margins: { bottom: 16, top: 16 },
});

Styling tingkat blok

Baik EditorConfig maupun RendererConfig menerima styles, classNames, dan configs yang diberi kunci berdasarkan jenis blok. Gunakan ini untuk penggantian yang ditargetkan; lihat halaman Themes untuk referensi per-token lengkap.

TypeScript
import { Editor, Renderer } from '@clepit/core';
import type { BlockStyles, BlockClassNames, EditorStyles } from '@clepit/core';

const editorStyles: EditorStyles = {
  blockToolbar: { container: { borderRadius: '8px' } },
};

const blockStyles: BlockStyles = {
  header: { h1: { fontFamily: 'Georgia, serif' } },
  paragraph: { lineHeight: '1.75' },
  table: { cell: { padding: '8px 12px' } },
};

const blockClassNames: BlockClassNames = {
  paragraph: 'prose-paragraph',
  header: { h1: 'prose-h1', h2: 'prose-h2' },
  alert: { info: 'alert-info', error: 'alert-error' },
};

Editor.create({
  containerId: 'editor',
  styles: editorStyles,
});

Renderer.render({
  containerId: 'output',
  data,
  styles: blockStyles,
  classNames: blockClassNames,
});