Propok
<Tiptapify> propok
content
- Típus:
String | Object - Alapérték:
''
A szerkesztő kezdeti tartalma. HTML-szöveget vagy Tiptap JSON objektumot fogad.
<!-- HTML string -->
<Tiptapify :content="'<p>Hello world</p>'" />
<!-- Tiptap JSON -->
<Tiptapify :content="{ type: 'doc', content: [{ type: 'paragraph' }] }" />A content csak a kezdeti tartalom; a kétirányú kötéshez használd a v-model-t (lásd modelValue).
modelValue
- Típus:
String | Object - Alapérték:
''
A v-model kétirányú kötési értéke. A v-model segítségével egy reaktív értéket tarthatsz szinkronban a szerkesztővel. Minden szerkesztéskor a komponens update:modelValue eseményt bocsát ki a legfrissebb HTML-lel, amelyet a v-model visszaír a ref-edbe. Ha csak v-model van használatban (:content nélkül), a kötött érték a szerkesztő kezdeti tartalma.
<script setup lang="ts">
import { ref } from 'vue'
const content = ref('<p>Hello, world!</p>')
</script>
<template>
<Tiptapify v-model="content" placeholder="Write something..." />
</template>placeholder
- Típus:
String - Alapérték:
''
Helyőrző szöveg, amely üres szerkesztőnél jelenik meg.
<Tiptapify placeholder="Start typing..." />height
- Típus:
Number - Alapérték:
null
A szerkesztő tartalomterületének minimális magassága pixelben.
<Tiptapify :height="500" />toolbar
- Típus:
Boolean - Alapérték:
true
Az eszköztár megjelenítése vagy elrejtése.
<Tiptapify :toolbar="false" />items
- Típus:
Array<String> | Object - Alapérték:
[]
A megjelenítendő eszköztárelemek. Adj át elemneveket tartalmazó tömböt vagy elnevezett szakaszokat tartalmazó objektumot. Lásd Eszköztárelemek. Tömbben a '|' csoportokra bontja az elemeket (ebben a sorrendben, akármelyik szakaszból is jönnek a gombok), a '~' pedig a utána következő elemeket az eszköztár végére tolja. Csoportok esetén a nem beépített elemnév helyet tart fenn a customExtensions azonos nevű egyéni gombjának; ha nincs ilyen gomb, a hely elhagyásra kerül.
<!-- Array -->
<Tiptapify :items="['bold', 'italic', 'underline', '~', 'undo', 'redo']" />
<!-- Object with sections -->
<Tiptapify :items="{ format: ['bold', 'italic'], misc: ['undo', 'redo'] }" />itemsExclude
- Típus:
Boolean - Alapérték:
false
true esetén az items prop a kizárandó elemeket adja meg a belefoglalandók helyett.
<Tiptapify
:items="['source', 'preview', 'fullscreen']"
:items-exclude="true"
/>bubbleMenu
- Típus:
Boolean - Alapérték:
true
A buborékmenü megjelenítése szöveg kijelölésekor: egy sor ikongomb csoportokban — félkövér, dőlt, aláhúzott, áthúzott | felső index, alsó index | kiemelés, beágyazott kód | hivatkozás | formázás törlése. Minden gombnak van súgója a billentyűparancsával, és jelzi, ha a jelölése be van kapcsolva a kijelölésen. Elrejtőzik kijelölt blokknál (kép, widget), kódon belül, és ha a teljes dokumentum ki van jelölve.
<Tiptapify :bubble-menu="false" />floatingMenu
- Típus:
Boolean - Alapérték:
true
A lebegő menü megjelenítése üres sorokon: 1. címsor, 2. címsor és felsorolás, ugyanabban az ikongomb-sorban, mint a buborékmenü.
<Tiptapify :floating-menu="false" />slashCommands
- Típus:
Boolean - Alapérték:
true
A perjeles parancsok menüjének engedélyezése (a megnyitáshoz írj / jelet).
<Tiptapify :slash-commands="false" />showWordsCount
- Típus:
Boolean - Alapérték:
true
Szószám megjelenítése a szerkesztő láblécében.
<Tiptapify :show-words-count="false" />showCharactersCount
- Típus:
Boolean - Alapérték:
true
Karakterszám megjelenítése a szerkesztő láblécében.
<Tiptapify :show-characters-count="false" />limit
- Típus:
Number | null - Alapérték:
null
A Tiptap CharacterCount bővítménye által megengedett karakterek maximális száma. Állítsd null-ra, vagy hagyd el a propot a korlátlan szerkesztéshez. Ha 0-nál nagyobb értékre van állítva, a lábléc SVG körös folyamatjelzőt mutat színkódolt küszöbökkel.
<Tiptapify :limit="1000" />limitDefaultColor
- Típus:
String - Alapérték:
'purple'
A láblécben megjelenő körös folyamatjelző alapértelmezett színe, ha a limit be van állítva.
<Tiptapify :limit="1000" limit-default-color="primary" />limitAlertColor
- Típus:
String - Alapérték:
'orange'
A folyamatjelző színe, ha a használat meghaladja a korlát 75%-át.
<Tiptapify :limit="1000" limit-alert-color="warning" />limitWarningColor
- Típus:
String - Alapérték:
'red'
A folyamatjelző színe, ha a karakterkorlátot elérték.
<Tiptapify :limit="1000" limit-warning-color="error" />footerAlignment
- Típus:
TiptapifyFooterAlignment - Alapérték:
'end'
A lábléc állapotelemeinek igazítása. Elfogadott értékek: 'start', 'center' vagy 'end'.
<Tiptapify footer-alignment="center" />ai
- Típus:
Boolean | TiptapifyAiOptions - Alapérték:
false
Engedélyezi az ai eszköztárelemet. A szerkesztő OpenAI-kompatibilis /v1/chat/completions kérést épít, és átadja az aiProvider-nek. A szolgáltatói visszahívással hívhatod meg a backendedet, BFF-edet, OAuth-védett végpontodat, az LM Studiót vagy egy SDK-burkolót.
<script setup lang="ts">
const ai = {
async aiProvider(request) {
const response = await fetch('/api/chat/endpoint', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(request),
})
if (!response.ok) {
throw new Error('AI request failed')
}
return response.json()
},
}
</script>
<template>
<Tiptapify :content="content" :ai="ai" :items="['ai']" />
</template>Helyi LLM LM Studio példa:
const ai = {
model: 'google/gemma-4-12b-qat',
async aiProvider(request) {
const response = await fetch('http://127.0.0.1:1234/v1/chat/completions', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(request),
})
if (!response.ok) {
throw new Error(await response.text())
}
return response.json()
},
}A streamelt kimenet támogatott a stream: true beállításával és a tokenek az aiProvider stream argumentumán keresztüli betolásával. Az AI-párbeszédablak eredménymezője élőben frissül a chunkok érkezésekor, a Leállítás gomb pedig megszakítja a folyamatban lévő kérést:
const ai = {
stream: true,
async aiProvider(request, context, stream) {
const response = await fetch('/api/chat/endpoint', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(request),
signal: stream?.signal,
})
if (!response.ok || !response.body) {
throw new Error('AI request failed')
}
let content = ''
let buffer = ''
const reader = response.body.getReader()
const decoder = new TextDecoder()
while (true) {
const { done, value } = await reader.read()
if (done) {
break
}
buffer += decoder.decode(value, { stream: true })
const lines = buffer.split('\n')
buffer = lines.pop() ?? ''
for (const line of lines) {
if (!line.startsWith('data: ') || line === 'data: [DONE]') {
continue
}
const { choices } = JSON.parse(line.slice(6))
const delta = choices?.[0]?.delta ?? {}
if (delta.reasoning_content) {
stream?.onReasoning(delta.reasoning_content)
}
const chunk = delta.content ?? ''
if (chunk) {
content += chunk
stream?.onChunk(chunk)
}
}
}
return { content }
},
}Add át a stream.signal értéket a fetch-nek (vagy az SDK-hívásnak), hogy a kérés megszakadjon, amikor a felhasználó a Leállítás gombra kattint vagy bezárja a párbeszédablakot. A részben streamelt tartalom az eredménymezőben marad, és alkalmazható vagy elvethető. A nem streamelő szolgáltatók teljesen figyelmen kívül hagyhatják a stream argumentumot — az opcionális és visszafelé kompatibilis.
A gondolkodó modellek (Qwen thinking, DeepSeek, o-sorozat) a „gondolataikat” külön reasoning_content deltában streamelik. Továbbítsd ezeket a chunkokat a stream.onReasoning()-en keresztül — showReasoning: true esetén a párbeszédablak az eredménymező fölötti összecsukható Gondolkodás panelben jeleníti meg őket (a panel alapból rejtett). A gondolkodási kimenet csak megjelenítésre szolgál, és soha nem kerül be a szerkesztőbe.
Ha a felhasználó kéréseként szeretnéd átváltani a modell gondolkodó módját, állítsd be a thinking: true értéket az AI opciókban. A párbeszédablak ekkor Gondolkodás kapcsolót mutat (alapból bekapcsolva, minden megnyitáskor visszaáll); a plugin a kapcsoló értékét enable_thinking: true | false formában írja a kérésbe, így többé nem kell (és nem is szabad) magadnak beállítanod az enable_thinking értéket a chatCompletionOptions-ben:
<Tiptapify
:content="content"
:ai="{
aiProvider,
model: 'qwen3.8-27b',
stream: true,
thinking: true,
}"
/>Ha a thinking értéke false vagy hiányzik, a kapcsoló nem jelenik meg, és a plugin enable_thinking: false értéket küld, így az alapból gondolkodó modellek (Qwen3, DeepSeek, …) nem gondolkodnak.
Ha a felhasználó kérésenként választhatja a gondolkodási mértéket, állítsd be a reasoningEffort értéket az AI opciókban. A párbeszédablak ekkor Gondolkodási mérték legördülő menüt mutat, amelyet az options tölt fel — egyéni mértékszintek ('low' | 'medium' | 'high' | 'xhigh' | 'max'). A bővítmény maga mindig hozzáad egy default elemet a legördülő menühöz (a gondolkodó mód alapszintje), ezért a konfigurációdban soha nem kell felsorolnod a default értéket; az opció default mezője a párbeszédablak megnyitásakor előre kijelöli az egyik egyéni szintedet (egyébként a default van előre kijelölve), és az érték minden megnyitáskor visszaáll. A kiválasztott érték dönti el, mit ír a plugin a kérésbe: a default megtartja a gondolkodó módot — a Gondolkodás kapcsoló aktív marad, és az enable_thinking-et vezérli; bármely más érték helyette reasoning_effort formában kerül elküldésre, és a Gondolkodás kapcsoló le van tiltva, amíg ez az érték van kiválasztva (a szolgáltatók elutasítják az enable_thinking és a reasoning_effort együttes küldését egyetlen kérésben). A legördülő menü csak akkor jelenik meg, ha a thinking engedélyezett, és a Gondolkodás kapcsoló be van kapcsolva — a gondolkodás kikapcsolása elrejti, és a reasoning_effort nem kerül elküldésre (a kérés enable_thinking: false értékre esik vissza). Ha az options hiányzik vagy üres, a legördülő menü egyáltalán nem renderelődik:
<Tiptapify
:content="content"
:ai="{
aiProvider,
model: 'qwen3.8-27b',
stream: true,
thinking: true,
reasoningEffort: {
options: ['low', 'medium', 'high', 'xhigh', 'max'],
},
}"
/>A Gondolkodás panel alapból rejtett (a showReasoning alapértéke false). Állítsd a showReasoning: true értékre, hogy megjelenjen egy összecsukható panel, amely a modell gondolkodási folyamatát (reasoning_content delta) streameli, miközben a gondolkodás bekapcsolva marad — a modell továbbra is gondolkodik, az eredmény ugyanúgy érvényesül, csak a lépésenkénti gondolkodás is megjelenik:
<Tiptapify
:content="content"
:ai="{
aiProvider,
model: 'qwen3.8-27b',
stream: true,
thinking: true,
showReasoning: true,
}"
/>Az egyéni prompt-példák felülírják a lokalizált alapértékeket:
<Tiptapify
:content="content"
:ai="{
aiProvider,
model: 'gpt-4.1-mini',
promptExamples: [
{ title: 'Rewrite', prompt: 'Rewrite this in a direct tone.' },
{ title: 'Shorten', prompt: 'Make this shorter.' },
{ title: 'Explain', prompt: 'Explain this for a beginner.' },
],
}"
/>A tokenProvider és a storage opcionális, a fogyasztó által birtokolt hookok közvetlen böngészős integrációkhoz. A böngészőkódban vagy böngészőtárhelyen lévő API-kulcsok vagy szolgáltatói tokenek láthatók a felhasználók számára, és nem kezelhetők titokként. Éles titkokhoz részesítsd előnyben a fenti backend adapter mintát.
A mode: 'insert' | 'replace' | 'append' használatával előre kijelölheted a beszúrási módot a párbeszédablak műveletgombján (Beillesztés / Csere / Hozzáadás a végéhez). mode nélkül a gomb alapértelmezése a Csere, ha a párbeszédablak megnyitásakor ki volt jelölve szöveg, egyébként a Beillesztés. A műveletgomb osztott gomb: a fő rész az eredményt az előre kijelölt módban alkalmazza, a jobb oldalán lévő kis „több” (⋮) rész pedig megnyit egy menüt a többi móddal — egyre kattintva az eredmény azonnal abban a módban érvényesül.
Ha a szerkesztőnek van limit értéke (karakterszám-korlát), az eredménymező alatt generated / limit karakterszámláló jelenik meg, amint eredmény keletkezik (streamelés közben élőben frissül, és halvány pirosra vált, ha a korlát túllépődne). A párbeszédablak a generálás után rögtön megjeleníti az ai.limit_exceeded figyelmeztetést is, ha az AI kimenete túllépné a korlátot. Ebben az állapotban a Beillesztés gomb és az alternatív módok menüje le van tiltva — a CharacterCount bővítmény elutasít minden beszúrást, amely a dokumentumot a korlát fölé növelné, ezért az eredmény csak egészben alkalmazható: teljesen beszúródik, ha belefér, vagy egyáltalán nem szúródik be, ha túllépi a korlátot. Rövidítsd az eredményt a művelet újbóli engedélyezéséhez:
<Tiptapify
:content="content"
:limit="300"
:ai="{
aiProvider,
model: 'gpt-4.1-mini',
}"
/>A systemPrompt, temperature, chatCompletionOptions vagy createMessages(context) használatával szabhatod testre az OpenAI-kompatibilis chat-completions kérést. A context tartalma: { prompt, selectedText, textBefore, textAfter, text, html, json, mode }: a textBefore / textAfter a kijelölés bekezdésének szövege körülötte (mindkét irányban legfeljebb 500 karakter, kijelölés nélkül üres) — küldd el őket a kijelöléssel együtt, különben a modell a töredéket a teljes szövegnek veszi, és kiegészíti.
ai.aiEndpoint
- Típus:
String - Alapérték:
undefined
Az egyéni aiProvider alternatívája: irányítsd az AI funkciót egy backend LLM végpontra, és a tiptapify maga építi fel és küldi el a kérést. A backend minimális JSON adatcsomagot kap:
- Mindig:
prompt(a párbeszédablakban begépelt kérés) ésinstruction(a tesystemPromptértéked, egy egyénicreateMessagesrendszerüzenete vagy a beépített alapérték). - Opcionális, csak beállítás esetén küldve:
stream(csaktrue),thinking(a párbeszédablak Gondolkodás kapcsolója, csaktrue),reasoning_effort(a kiválasztott mértékszint) ésmodel.
A válasz megengedően fogadott: sima szöveg, { content } objektum vagy OpenAI-kompatibilis choices adatcsomag. Ha a kérésben stream: true szerepel, a válasz törzsét SSE streamként olvassa (data: sorok, data: [DONE] zárással): az OpenAI-stílusú deltákat (choices[0].delta.content / .reasoning_content), az egyszerű { type: 'content' | 'reasoning', data } chunkot, a lapos { content, reasoning_content } chunkot és a sima szöveges data sorokat egyaránt elfogadja. Ha a backend figyelmen kívül hagyja a stream értéket, és sima törzzsel válaszol, ez a törzs kerül felhasználásra. A nem OK válasz esetén a backend hibaüzenete (JSON { error } / { message } vagy a nyers törzs) megjelenik a párbeszédablakban. A Leállítás gomb és a párbeszédablak bezárása megszakítja a folyamatban lévő kérést; a részben streamelt tartalom megmarad az eredménymezőben.
Ha az aiProvider és az aiEndpoint is be van állítva, az aiProvider győz.
<script setup lang="ts">
const ai = {
aiEndpoint: '/api/ai/generate',
model: 'gpt-4.1-mini',
stream: true,
thinking: true,
}
</script>
<template>
<Tiptapify :content="content" :ai="ai" :items="['ai']" />
</template>ai.aiHeaders
- Típus:
Record<string, string> - Alapérték:
undefined
Az aiEndpoint kéréssel elküldött extra fejlécek, a Content-Type: application/json fölé olvasztva. Az itt beállított Authorization fejléc változatlanul megmarad; ellenkező esetben a tokenProvider tokenje (ha be van állítva) Authorization: Bearer <token> formában kerül elküldésre.
<Tiptapify
:content="content"
:ai="{
aiEndpoint: '/api/ai/generate',
aiHeaders: { 'X-Api-Key': '…' },
}"
:items="['ai']"
/>defaultFontFamily
- Típus:
String - Alapérték:
'Inter'
A szerkesztőtartalom alapértelmezett betűcsaládja.
<Tiptapify default-font-family="Georgia" />fontMeasure
- Típus:
String - Alapérték:
'px'
A betűméret-értékek mértékegysége.
<Tiptapify font-measure="px" />rounded
- Típus:
String - Alapérték:
'0'
A szerkesztőtároló szegélylekerekítése. Vuetify lekerekítési értékeket fogad (sm, md, lg, xl, pill stb.).
<Tiptapify rounded="lg" />variantBtn
- Típus:
variantBtnTypes - Alapérték:
'tonal'
Vuetify gombváltozat az eszköztárgombokhoz. Az érték a szerkesztő konfigurációján keresztül megosztott minden eszköztár-komponenssel — az egyéni komponensek a useTiptapifyConfig segítségével olvashatják. Lásd variantBtnTypes.
<Tiptapify variant-btn="outlined" />variantField
- Típus:
variantFieldTypes - Alapérték:
'outlined'
Vuetify változat az eszköztár legördülő mezőihez. Az érték a szerkesztő konfigurációján keresztül megosztott minden eszköztár-komponenssel — az egyéni komponensek a useTiptapifyConfig segítségével olvashatják. Lásd variantFieldTypes.
<Tiptapify variant-field="filled" />customExtensions
- Típus:
Array<toolbarSections> - Alapérték:
[]
Egyéni eszköztár-szakaszok megadása eszköztárelemek bővítéséhez vagy hozzáadásához. Az egyes szakaszok komponensei a useTiptapifyConfig segítségével olvashatják a megosztott szerkesztőkonfigurációt. Lásd Egyéni eszköztár.
<Tiptapify :custom-extensions="customExtensions" />interactiveStyles
- Típus:
Boolean - Alapérték:
true
Az interaktív stílusalkalmazás engedélyezése.
<Tiptapify :interactive-styles="false" />loading
- Típus:
Boolean - Alapérték:
false
Határozatlan folyamatjelző megjelenítése, amíg a szerkesztő betöltődik.
<Tiptapify loading />loadingColor
- Típus:
String - Alapérték:
'default'
A betöltési folyamatjelző színe. Vuetify témaszín-értékeket fogad.
<Tiptapify loading-color="primary" />loadingHeight
- Típus:
String - Alapérték:
'1px'
A betöltési folyamatjelző magassága.
<Tiptapify :loading-height="'4px'" />imageSlider
- Típus:
Number - Alapérték:
0
Ennyi egymás utáni kép esetén (köztük semmivel) a szerkesztő számozott, háromoszlopos rácsban rendezi el őket, olyan webhelyeknek, amelyek az ilyen képeket diavetítésként mutatják. A 0 kikapcsolja.
<Tiptapify :image-slider="3" />skin
- Típus:
string | TiptapifySkinConfig(TiptapifySkinInput) - Alapérték:
'default'
A szerkesztő keretének megjelenése: eszköztár, buborékmenük, legördülő menük, párbeszédablakok, lábléc.
default— a klasszikus megjelenés: kiemelt eszköztár, kiemelt dobozként megjelenő gombcsoportok, elsődleges színű lenyomott állapotú Vuetify-gombok.pastel— a nyugodt megjelenés: lapos, színezett eszköztár vékony vonal alatt, semleges lenyomott állapotú áttetsző gombok, könnyű legördülő menük, lágy párbeszédablakok.
A funkciók (képaláírások, diavetítők, az igazítás legördülő menü, listastílusok) mindkét skinben ugyanúgy működnek.
<Tiptapify skin="pastel" />Beágyazott skin-objektumot is átadhatsz: tokenfelülírásokat (colors / metrics) és alakzatjelzőket, opcionálisan egy regisztrált skin extends értékével. A default (vagy az alapja) fölött oldódik fel, a tiptapify-skin-inline osztály alatt renderelődik (tiptapify-skin-{name}, ha az objektum name mezőt tartalmaz), tokenjei pedig --tf-* CSS-változókként kerülnek a szerkesztő gyökerére. Az egyéni nevek a registerSkin('mint', { … }) hívásból származnak — a tokentáblázatot és a recepteket lásd a Skin útmutatóban.
<Tiptapify :skin="{ extends: 'pastel', colors: { toolbarBg: 'rgba(0, 128, 0, 0.05)' } }" />upload
- Típus:
{ endpoint: string, headers?: Record<string, string> }(TiptapifyUploadOptions) - Alapérték:
null
A feltöltések végpontja: a kép- és videópárbeszédablakban kiválasztott fájlok (valamint a videó borítóképe, a hivatkozáskártya képe) a POST {endpoint} kéréssel (multipart file és kind) kerülnek elküldésre, a dokumentum pedig a válaszul kapott URL-t őrzi meg ({ "url": … }).
Nélküle a képpárbeszédablak továbbra is fogad fájlt: a kiválasztott kép (és a videó borítóképe) base64 data URL-ként ágyazódik be a dokumentumba, és a base64 képek megmaradnak a dokumentum betöltésekor. A videópárbeszédablak csak ezzel a proppal kínálja a Feltöltés lehetőséget. Beállított upload esetén a base64 képek eltűnnek a dokumentum betöltésekor.
<Tiptapify :upload="{ endpoint: '/api/uploads', headers: { Authorization: `Bearer ${token}` } }" />contentStyles
- Típus:
'inline' | 'classes'(TiptapifyContentStyles) - Alapértelmezett:
'inline'
Hogyan hordozza a mentett HTML a linkkártyák, a feliratos képek, a videók, a beágyazások és a feladatlisták megjelenését (lásd Tartalomstílusok): az inline a style attribútumaikba írja, így az oldal úgy jeleníti meg a HTML-t, ahogy van; a classes csak osztályokat hagy, a tiptapify/content.css fájlt betöltő oldalhoz. A szerkesztő figyelmen kívül hagyja ezeket a stílusokat a HTML betöltésekor, így mindkét fajta HTML ugyanúgy töltődik vissza.
<Tiptapify v-model="html" content-styles="classes" />linkPreview
- Típus:
{ endpoint: string, headers?: Record<string, string> }(TiptapifyLinkPreviewOptions) - Alapérték:
null
A hivatkozáskártyák backend végpontja: beolvassa az oldalak OpenGraph adatait, amit a böngésző nem tud (CORS). A szerkesztő induláskor kézfogással ellenőrzi (a GET {endpoint} kérésre 200 { "tiptapifyLinkPreview": 1 } választ kell adnia); amíg nem válaszol, semmi nem kínál kártyát.
<Tiptapify :link-preview="{ endpoint: '/api/link-preview' }" />Események
editor-ready
Akkor aktiválódik, amikor a szerkesztő példány kész.
interface EditorReadyPayload {
editor: TiptapifyEditor // Tiptapify Editor instance
getHTML: () => string // Get current HTML content
getJSON: () => object // Get current JSON content
}<script setup lang="ts">
const onEditorReady = (payload) => {
console.log(payload.editor)
console.log(payload.getHTML())
console.log(payload.getJSON())
}
</script>
<template>
<Tiptapify @editor-ready="onEditorReady" />
</template>content-changed
Akkor aktiválódik, amikor a szerkesztő tartalma megváltozik.
interface ContentChangedPayload {
html: string // Current HTML content
json: object // Current JSON content
}<script setup lang="ts">
const onContentChanged = ({ html, json }) => {
console.log('HTML:', html)
console.log('JSON:', json)
}
</script>
<template>
<Tiptapify @content-changed="onContentChanged" />
</template>update:modelValue
Támogatja a v-model kötést.
<script setup lang="ts">
import { ref } from 'vue'
const content = ref('<p>Hello</p>')
</script>
<template>
<Tiptapify v-model="content" />
</template>Provide / Inject
A szerkesztő példány és a t függvény a Vue provide/inject mechanizmusán keresztül érhető el:
import { inject } from 'vue'
const editor = inject('tiptapifyEditor')
const { t } = inject('tiptapifyI18n')