सामग्री पर जाएँ

स्किन ​

स्किन एडिटर के बाहरी स्वरूप का एक रूप है: टूलबार, उसके बटन और समूह, बबल मेन्यू, ड्रॉपडाउन मेन्यू, डायलॉग, कंटेंट के चारों ओर का फ़्रेम, और चित्र चयन का आवरण। skin prop इसे चुनता है:

vue
<Tiptapify skin="pastel" />

एक स्किन दो चीज़ों से बनती है: टोकन (CSS वेरिएबल के रूप में रंग और आकार) और आकृति (संरचनात्मक रूपांतर जिन्हें टोकन व्यक्त नहीं कर सकता)। दो बिल्ट-इन स्किन हैं default — क्लासिक रूप, उभरे हुए बटन समूहों वाला उभरा टूलबार — और pastel, शांत रूप। कस्टम स्किन भी पहले दर्जे की हैं: registerSkin() और इनलाइन स्किन ऑब्जेक्ट बिल्कुल उसी तंत्र से हल होते हैं, और बिल्ट-इन स्किन भी पंजीकृत स्किन हैं, कोई विशेष मामला नहीं।

शब्दावली: स्किन बनाम Vuetify थीम ​

  • skin — एडिटर के बाहरी स्वरूप के एक रूप के लिए उपयोगकर्ता-सामने का शब्द: टोकन + आकार। prop skin है, टाइप TiptapifySkin* हैं, रजिस्ट्री registerSkin() है, रूट क्लास tiptapify-skin-{name} है।
  • theme — Vuetify की लाइट/डार्क थीम के लिए आरक्षित। Tiptapify कंपोनेंट अपने theme props को Vuetify की मौजूदा थीम के नाम से भरते हैं; स्किन प्रणाली उन्हें कभी नहीं छूती।

ये साथ काम करते हैं: ज़्यादातर बिल्ट-इन टोकन रंग Vuetify थीम वेरिएबल (rgb(var(--v-theme-surface)), …) का संदर्भ देते हैं, इसलिए स्किन अपने-आप लाइट/डार्क का अनुसरण करती हैं। क्लासिक कॉलम में निश्चित-डार्क सेल — रीसाइज़ हैंडल (rgba(0, 0, 0, .5/.8)), सादी चित्र रूपरेखा, बबल की छाया, और मेन्यू/डायलॉग की एलिवेशन छायाएँ — जानबूझकर हैं: क्लासिक स्वरूप दोनों थीम में तटस्थ गहरा आवरण रंगता है, और मापा गया आधार उन्हें बाँधे रखता है। कस्टम स्किन थीम वेरिएबल का संदर्भ खुलकर दे सकती है — टोकन तालिका देखें।

अवधारणा ​

टोकन ​

टोकन --tf-* नाम की एक CSS कस्टम प्रॉपर्टी है। कैटलॉग कुंजी CSS प्रत्यय का camelCase रूप है: toolbarBg → --tf-toolbar-bg, dialogTitleSize → --tf-dialog-title-size। मान साधारण स्ट्रिंग हैं — रंग, पूरे बॉर्डर शॉर्टहैंड, छायाएँ, पैडिंग, त्रिज्याएँ।

लाइब्रेरी का हर स्किन नियम एक बार मौजूद है, और अपना टोकन उस फ़ॉलबैक के साथ पढ़ता है जो क्लासिक (आधार) मान के बराबर है:

css
.tiptapify-toolbar-group {
  border-radius: var(--tf-group-radius, 4px);
}

रिज़ॉल्व की गई स्किन केवल अपने ओवरराइड को वेरिएबल के रूप में जारी करती है; CSS फ़ॉलबैक आधार को संभालते हैं। वेरिएबल एडिटर रूट पर लगते हैं — और चूँकि मेन्यू और डायलॉग उससे बाहर टेलीपोर्ट हो जाते हैं, हर मेन्यू के SkinScope रैपर पर और खुद डायलॉग कार्ड पर भी, ताकि टोकन हर सतह का अनुसरण करें।

आकार (Shape) ​

छह फ़्लैग तय करते हैं कि कौन से नियम-समूह लागू हों; टोकन उन्हें रंगते हैं:

फ़्लैगमानयह क्या बदलता है
toolbarraised · flatVToolbar एलिवेशन + भीतर कोई बारीक रेखा नहीं, बनाम सपाट रंगत वाली पट्टी
groupsbox · flatटूलबार सेक्शन उभरे VBtnGroup बॉक्स के रूप में (0.3.2 मार्कअप: जुड़े हुए बटन, समूह टोकन बॉक्स को रंगते हैं) बनाम साधारण flex div पंक्तियाँ
buttonsvuetify · quietमूल Vuetify बटन बनाम तटस्थ दबी हुई स्थिति वाले घोस्ट बटन
bubblecard · flatसंगतता के लिए रखा गया: बबल मेन्यू दोनों आकारों में आइकन बटनों की टोकन-रंगी एक पंक्ति हैं (उनके बटन buttons का अनुसरण करते हैं)
dialogclassic · softशीर्षक के नीचे विभाजक, उभरा बंद बटन बनाम नरम कार्ड, टेक्स्ट वाला बंद बटन
menuvuetify · softड्रॉपडाउन मेन्यू: Vuetify सूची बनाम हल्का पैडिंग वाला कार्ड

रिज़ॉल्व किया गया आकार एडिटर रूट पर छह .tiptapify-shape-{flag}-{value} क्लास के रूप में एन्कोड होता है, और कस्टम टूलबार कंपोनेंट के लिए useTiptapifyConfig() पर shape: ComputedRef<ResolvedShape> के रूप में उपलब्ध है।

Extends ​

स्किन पहले क्लासिक आधार के ऊपर रिज़ॉल्व होती है, फिर उसकी extends श्रृंखला जड़ से शुरू करके, फिर उसके अपने सदस्य:

classic (base tokens + classic shape) → extends chain → own colors/metrics/flags

गायब कड़ियाँ अब तक जमा हुई श्रृंखला पर रिज़ॉल्व होती हैं (डेव चेतावनी के साथ); चक्र क्लासिक पर रिज़ॉल्व होता है (डेव चेतावनी के साथ)। पंजीकृत स्किन नाम से संदर्भित होती है; इनलाइन स्किन ऑब्जेक्ट किसी पंजीकृत नाम को extends कर सकता है और ग्लोबल रजिस्ट्री में कभी नहीं जाता — कस्टम स्किन एडिटरों के बीच कभी लीक नहीं होतीं। अज्ञात टोकन कुंजियाँ डेव चेतावनी के साथ अनदेखी की जाती हैं।

तीनों रूपों के लाइव डेमो स्किन उदाहरण पेज पर हैं।

टोकन कैटलॉग ​

नीचे की तालिकाएँ v1 अनुबंध हैं: कैटलॉग कुंजियाँ (TiptapifySkinColors / TiptapifySkinMetrics) वे नाम हैं जिन्हें आप सेट कर सकते हैं। क्लासिक सेल CSS फ़ॉलबैक हैं — वह मान जो कोई स्किन टोकन को ओवरराइड न करे तब आधार नियम रंगते हैं।

टूलबार / पट्टी ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
toolbarBg--tf-toolbar-bgrgb(var(--v-theme-surface))rgba(var(--v-theme-on-surface), 0.03)
toolbarBorderBottom--tf-toolbar-border-bottomnone1px solid rgba(var(--v-border-color), var(--v-border-opacity))
toolbarFg--tf-toolbar-fginheritrgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity))

आइटम / समूह / विभाजक ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
itemsPadding--tf-items-padding12px 16px6px 8px
itemsGap--tf-items-gapnormal ¹6px
itemsRowGap--tf-items-row-gap5px4px
groupGap--tf-group-gap0px2px
groupHeight--tf-group-height32pxauto
groupBg--tf-group-bgrgb(var(--v-theme-surface))transparent
groupRadius--tf-group-radius4px0px
groupShadow--tf-group-shadowVuetify एलिवेशन 2 ²none
dividerWidth--tf-divider-width0px (स्पेसर: margin 0 4px)1px
dividerHeight--tf-divider-height0px20px
dividerColor--tf-divider-colortransparentrgba(var(--v-border-color), var(--v-border-opacity))

¹ मापा गया क्लासिक सेल normal है — Vuetify का मूल flex मान, जो CSS फ़ॉलबैक में होता है। कैटलॉग का आधार मान 0px स्किन ओवरराइड के लिए उसकी बराबर स्पष्ट लंबाई है।

² जिन सेलों में "Vuetify एलिवेशन n" लिखा है वे वर्णनात्मक हैं: ठीक तिहरी-छाया स्ट्रिंग कमिट की गई बेसलाइन फ़िक्स्चर (src/skins/__fixtures__/skin-baseline.json) में मापा गया मान है और वही CSS फ़ॉलबैक है। groupShadow के लिए वह एलिवेशन 2 है (0 3px 1px -2px …, 0 2px 2px 0 …, 0 1px 5px 0 …) — groups: 'box' के तहत सेक्शन एक VBtnGroup (elevation="4") है, और टोकन नियम समूह की अपनी एलिवेशन के ऊपर इसी तिहरी से बॉक्स को रंगता है: एलिवेशन बॉक्स की है, जुड़े हुए चाइल्ड बटन कोई नहीं रखते।

बटन ​

ये टोकन केवल buttons: 'quiet' के तहत उपयोग होते हैं — पहुँच देखें।

टोकनCSS वेरिएबलquiet मान (classic: मूल Vuetify)
buttonFg--tf-button-fgrgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity))
buttonHoverBg--tf-button-hover-bgrgba(var(--v-theme-on-surface), 0.07)
buttonHoverFg--tf-button-hover-fgrgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity))
buttonActiveBg--tf-button-active-bgrgba(var(--v-theme-on-surface), 0.1)
buttonActiveHoverBg--tf-button-active-hover-bgrgba(var(--v-theme-on-surface), 0.14)
buttonRadius--tf-button-radius6px

बबल मेन्यू (चयन, खाली पंक्ति, चित्र) ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
bubbleBg--tf-bubble-bgrgb(var(--v-theme-surface))वही
bubbleBorder--tf-bubble-bordernone1px solid rgba(var(--v-border-color), var(--v-border-opacity))
bubbleShadow--tf-bubble-shadow0 4px 14px rgba(0, 0, 0, 0.12), 0 1px 3px rgba(0, 0, 0, 0.08)0 6px 20px rgba(0, 0, 0, 0.12)
bubbleRadius--tf-bubble-radius6px10px
bubblePadding--tf-bubble-padding4pxवही
bubbleGap--tf-bubble-gap2pxवही
टोकनCSS वेरिएबलक्लासिकपैस्टल
menuListPadding--tf-menu-list-padding8px 0px4px
menuRadius--tf-menu-radius4px8px
menuBorder--tf-menu-bordernone1px solid rgba(var(--v-border-color), var(--v-border-opacity))
menuShadow--tf-menu-shadowVuetify एलिवेशन 8 ²0 4px 16px rgba(0, 0, 0, 0.08)
menuItemRadius--tf-menu-item-radius0px6px
menuItemPadding--tf-menu-item-paddingVuetify ³4px 8px
menuItemMinHeight--tf-menu-item-min-heightVuetify ³34px
menuItemActiveBg--tf-menu-item-active-bgVuetify ³rgba(var(--v-theme-on-surface), 0.06)

³ क्लासिक मेन्यू का सूची बॉक्स (त्रिज्या, छाया, सूची पैडिंग) आज एक स्किन नियम है — SkinScope टोकन रैपर Vuetify के अपने चाइल्ड नियम और सूची के बीच बैठता है, इसलिए लाइब्रेरी उन पिक्सेल को ऊपर के टोकन पढ़ने वाले स्किन नियमों के रूप में बहाल करती है। आइटम के पिक्सेल मूल Vuetify के रहते हैं (फ़िक्स्चर वहाँ Vuetify के डिफ़ॉल्ट मापता है): menu: 'vuetify' रहते चारों आइटम टोकन निष्क्रिय हैं।

डायलॉग ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
dialogShadow--tf-dialog-shadowVCard एलिवेशन ²0 20px 48px rgba(0, 0, 0, 0.16), 0 2px 6px rgba(0, 0, 0, 0.06)
dialogRadius--tf-dialog-radius4px (VCard)12px
dialogHeaderPadding--tf-dialog-header-padding8px 16px16px 12px 12px 20px
dialogContentPadding--tf-dialog-content-padding16px 24px 24px4px 20px
dialogActionsPadding--tf-dialog-actions-padding8px16px 20px 20px
dialogTitleSize--tf-dialog-title-size1.25rem1.125rem
dialogTitleWeight--tf-dialog-title-weight400600
dialogFieldRadius--tf-dialog-field-radiusफ़ील्ड का डिफ़ॉल्ट (4px)8px (आउटलाइन वाला)
dialogActionBtnMinHeight--tf-dialog-action-btn-min-heightVuetify (auto)38px
dialogActionBtnRadius--tf-dialog-action-btn-radiusVuetify (4px)8px
dialogGridGap--tf-dialog-grid-gap24px16px

फ़्रेम (एडिटर की बॉर्डर रैपर) ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
frameBorder--tf-frame-border1px solid rgba(var(--v-border-color), var(--v-border-opacity)), ऊपरी किनारा नहींपूरी बॉर्डर
frameBg--tf-frame-bgtransparentrgb(var(--v-theme-surface))
frameShadow--tf-frame-shadownone0 1px 2px rgba(0, 0, 0, 0.05)

सपाट टूलबार आकार में फ़्रेम हर तरफ़ का एक अंतर भी रंगता है (ऊपरी किनारा, और निचला किनारा 1.6× बॉर्डर अपारदर्शिता पर)। वह अंतर आकार का है, टोकन का नहीं: वह टोकन से पहुँच योग्य नहीं है।

चित्र और रीसाइज़ हैंडल ​

टोकनCSS वेरिएबलक्लासिकपैस्टल
imageRadius--tf-image-radius0.125rem4px
imageBg--tf-image-bgtransparentrgba(var(--v-theme-on-surface), 0.04)
imageOutline--tf-image-outline1px solid rgba(0, 0, 0, 0.25) (चयनित)2px solid rgb(var(--v-theme-primary))
imageOutlineHover--tf-image-outline-hovertransparentrgba(var(--v-theme-primary), 0.35)
handleBg--tf-handle-bgrgba(0, 0, 0, 0.5)rgb(var(--v-theme-primary))
handleBgHover--tf-handle-bg-hoverrgba(0, 0, 0, 0.8) (होवर)rgb(var(--v-theme-primary))
handleBorder--tf-handle-bordernone2px solid rgb(var(--v-theme-surface))
handleShadow--tf-handle-shadownone0 0 0 1px rgba(0, 0, 0, 0.15)
handleRadius--tf-handle-radius2px50%

चित्र टूलबार buttons फ़्लैग का अनुसरण करता है: quiet आकार में उसे quiet सतह मिलती है — उसकी 2px/4px स्पेसिंग चित्र-मेन्यू फ़ॉलबैक के साथ --tf-bubble-gap / --tf-bubble-padding पढ़ती है; चित्र-टूलबार का कोई समर्पित टोकन नहीं है।

कैटलॉग में नहीं (निकास-द्वार का क्षेत्र) ​

डिज़ाइन अवलोकन में नामित कुछ आयामों का v1 में कोई कैटलॉग टोकन नहीं है: टूलबार की ऊँचाई, फ़्रेम की चौड़ाई, फ़्रेम की त्रिज्या, बटन की चौड़ाई, बटन की पैडिंग, डायलॉग की चौड़ाई। ऊपर की कैटलॉग तालिकाएँ अनुबंध हैं; इन पिक्सेल के लिए निकास-द्वार खोलें और स्थिर क्लासों को सीधे स्टाइल करें।

पहुँच (Reachability) ​

अनुबंध, एक बार कहा गया और ऊपर के हर समूह द्वारा निभाया गया:

टोकन किसी सतह को तभी रंगता है जब आकार उस सतह को सक्रिय करे; मूल Vuetify दृश्य Vuetify थीम रंगों से स्टाइल होते हैं।

हर समूह के लिए:

  • टूलबार, फ़्रेम, चित्र/हैंडल आवरण — हर आकार में सक्रिय; टोकन उन्हें रंगते हैं, क्लासिक सेल वह मूल रूप हैं जिस पर टोकन लौट आते हैं।
  • समूह बॉक्स (groupBg, groupRadius, groupHeight, groupShadow) — groups: 'box' के तहत सेक्शन VBtnGroup है (0.3.2 संरचना: बटन जुड़ते हैं, बॉक्स एलिवेशन रखता है); बॉक्स नियम उसे समूह टोकन से रंगते हैं, और --tf-group-height 32px का अनुबंध !important के साथ बनाए रखता है (Vuetify का घनत्व नियम उससे लड़ता है, जैसा 0.3.2 में था)। groups: 'flat' के तहत सेक्शन साधारण div पंक्तियाँ हैं (पारदर्शी, बिना छाया, त्रिज्या 0 आकार का आधार है)।
  • विभाजक की बारीक रेखाएँ (dividerWidth/Height/Color) — दिखने वाली बारीक रेखा groups: 'flat' की सुविधा है; बॉक्स आकार में विभाजक शून्य-आकार का स्पेसर है (आधार नियम से margin: 0 4px)।
  • आइटम पैडिंग/गैप — सघन 6px 8px पंक्ति सपाट पट्टी (toolbar: 'flat') पर निर्भर है, समूह गैप सपाट सेक्शन (groups: 'flat') पर; उभरी पट्टी क्लासिक मीट्रिक रखती है।
  • बटन (buttonFg, buttonHover*, buttonActive*, buttonRadius) — buttons: 'vuetify' के तहत निष्क्रिय: मूल Vuetify बटन अपनी स्थितियाँ खुद रंगते हैं। उन्हें Vuetify थीम रंगों (primary, surface, …) से स्टाइल करें — क्लासिक आकार जानबूझकर उन्हें विरासत में लेते हैं।
  • मेन्यू आइटम मीट्रिक (menuItemRadius/Padding/MinHeight/ActiveBg) — menu: 'vuetify' के तहत निष्क्रिय; वे आइटम पिक्सेल Vuetify के हैं। मेन्यू सूची बॉक्स (त्रिज्या/छाया/पैडिंग) दोनों आकारों में स्किन द्वारा रंगा जाता है (मेन्यू नोट देखें)।
  • डायलॉग का नरम आवरण (dialogActionBtn*, dialogFieldRadius, नरम पैडिंग, गायब विभाजक) — dialog: 'soft' के तहत रंगा जाता है; dialog: 'classic' के तहत डायलॉग क्लासिक पैडिंग वाला VCard है।
  • बबल आवरण — चयन, खाली-पंक्ति और चित्र मेन्यू दोनों आकारों में आइकन बटनों की एक पंक्ति हैं, जिन्हें बबल टोकन रंगते हैं; bubble अब उनका मार्कअप नहीं बदलता।

कैटलॉग के आधार के बराबर ओवरराइड जारी नहीं किया जाता — गैर-क्लासिक आकार के तहत आकार का अपना आधार CSS फ़ॉलबैक से रंगता है, इसलिए क्लासिक मान "बहाल करना" (जैसे buttons: 'quiet' के तहत buttonActiveBg को वापस rgb(var(--v-theme-primary)) पर सेट करना) चुपचाप कुछ नहीं करता। गैर-क्लासिक आकार के तहत क्लासिक जैसा मान लागू करने के लिए ऐसा ओवरराइड सेट करें जो कैटलॉग के आधार से अलग हो — rgba(var(--v-theme-primary), 1) जैसा समतुल्य लिटरल बिल्कुल वैसा ही रंगता है और इस छोड़ने से बच जाता है।

टोकन जानबूझकर मूल पथों में नहीं जोड़े गए हैं — यही default को क्लासिक स्वरूप से पिक्सेल-समान रखता है, जबकि सब कुछ कैटलॉग से होकर गुज़रता है।

रेसिपी ​

pastel को बढ़ाएँ ​

शांत आकार विरासत में लें और कुछ सतहों को दोबारा रंगें। पंजीकृत नाम किसी भी एडिटर पर काम करते हैं:

ts
// main.ts — call once, before any editor mounts
import { registerSkin } from 'tiptapify'

registerSkin('mint', {
  extends: 'pastel',
  colors: {
    toolbarBg: 'rgba(0, 128, 0, 0.05)',   // mint tint over the pastel wash
    handleBg: 'rgb(0, 100, 0)',           // deep green handles
    handleBgHover: 'rgb(0, 128, 0)',
    imageOutline: '2px solid rgb(0, 100, 0)',
    imageOutlineHover: 'rgba(0, 100, 0, 0.35)',
  },
})
vue
<Tiptapify skin="mint" />

आकार (flat/quiet/soft) pastel से आता है; अछूते टोकन pastel के मान रखते हैं — quiet बटन की रंगत तटस्थ रहती है, केवल वही बदलता है जिसे आप ओवरराइड करें। यह वही स्किन है जो उदाहरण पेज पर लाइव रेंडर होती है।

default को बढ़ाएँ ​

क्लासिक संरचना रखें, रंग-रोगन ट्यून करें:

ts
registerSkin('paper', {
  extends: 'default',
  colors: { toolbarBg: 'rgb(var(--v-theme-background))' },
  metrics: { groupRadius: '8px', itemsPadding: '10px 14px' },
})

extends: 'default' निहित जड़ है, इसलिए कुंजी छोड़ी जा सकती है: { toolbar: 'flat', … } भी क्लासिक से शुरू होता है।

पूरी तरह कस्टम ​

न extends, न पंजीकरण: ऑब्जेक्ट को skin prop में दें और आकार फ़्लैग व टोकन खुलकर सेट करें। name रूट क्लास पर आपका अपना लेबल लगाता है (नीचे देखें); उसके बिना वह tiptapify-skin-inline होता है।

vue
<script setup lang="ts">
import { defineSkin } from 'tiptapify'

const slate = defineSkin({
  name: 'slate',
  toolbar: 'flat',
  groups: 'flat',
  buttons: 'quiet',
  bubble: 'flat',
  dialog: 'soft',
  menu: 'soft',
  colors: { toolbarBg: 'rgb(30, 41, 59)', toolbarFg: 'rgb(226, 232, 240)' },
  metrics: { buttonRadius: '8px' },
})
</script>

<template>
  <Tiptapify :skin="slate" />
</template>

defineSkin टाइप वाली const परिभाषाओं के लिए पहचान सहायक है (यह किसी रजिस्ट्री में नहीं जाता)। आकार फ़्लैग अलग-अलग सेट किए जा सकते हैं — जो फ़्लैग आप छोड़ते हैं वह क्लासिक रहता है।

निकास-द्वार: रूट क्लास ​

हर एडिटर रूट पर tiptapify-skin-{name} लगता है (बिना नाम वाले इनलाइन ऑब्जेक्ट के लिए tiptapify-skin-inline)। लाइब्रेरी किसी भी नियम को स्किन नाम पर आधारित नहीं करती — यह क्लास आपकी है:

css
/* Style the frame of one skin, dimensions the catalog does not cover */
.tiptapify-skin-mint .tiptapify-frame {
  max-width: 720px;
  margin-inline: auto;
}

जिन स्थिर हुक के विरुद्ध आप लिख सकते हैं:

क्लासकहाँ
tiptapify-skin-{name}एडिटर रूट
tiptapify-shape-{flag}-{value} ×6एडिटर रूट — रिज़ॉल्व किया गया आकार
tiptapify-toolbar · tiptapify-toolbar-items · tiptapify-toolbar-group · menu-dividerटूलबार और उसके सेक्शन
tiptapify-quiet-buttonsbuttons: 'quiet' के तहत टूलबार और बबल रूट
tiptapify-bubble-row · tiptapify-bubble-dividerहर बबल मेन्यू की पंक्ति और उसके समूहों के बीच की बारीक रेखा
tiptapify-bubble-menu · floating-menu · tiptapify-image-menuचयन, खाली-पंक्ति और चित्र मेन्यू की पंक्तियाँ
tiptapify-btn--activeबबल मेन्यू का दबा हुआ बटन (सक्रिय मार्क, चित्र का फ़्लोट)
tiptapify-menu · tiptapify-menu--softड्रॉपडाउन ओवरले की सामग्री, नरम मेन्यू नियमों का वाहक
tiptapify-skin-scopeटेलीपोर्ट किए गए मेन्यू के भीतर टोकन स्कोप div
tiptapify-dialog · tiptapify-dialog--softडायलॉग कार्ड और उसका नरम वाहक
tiptapify-frameएडिटर की बॉर्डर रैपर

उपभोक्ता-थीम से बचाव। स्किन परत ऐसी एडमिन थीम से बचने के लिए बनी है जो Vuetify के आंतरिक हिस्सों में पैडिंग जोड़ती और उन्हें दोबारा रंगती हैं: नियम आकार/वाहक क्लास पर निर्भर रहते हैं, विशिष्टता के लिए दोहरी क्लास (.v-list.v-list, .v-btn.v-btn.v-btn) उपयोग करते हैं, और !important केवल वहीं रखते हैं जहाँ आधार कमिट के एडमिन-थीम मामले ने उसे ज़रूरी साबित किया (menu.css का बचाव-समूह)। वे परंपराएँ जो आपके अपने ओवरराइड को उसी युद्धक्षेत्र में काम करते रखती हैं:

  • अपना CSS .tiptapify-skin-{name} (या किसी आकार क्लास) के तहत स्कोप करें — खाली Vuetify आंतरिक हिस्सों पर कभी नहीं;
  • कैटलॉग के आयामों के लिए टोकन (--tf-*) को और बाकी के लिए क्लास को प्राथमिकता दें;
  • Vuetify कंपोनेंट ओवरराइड करते समय दोहराव का मिलान करें (अकेली .v-list-item स्किन नियमों से हार जाती है)।

विज़ुअल अनुबंध (योगदानकर्ता नोट) ​

बिल्ट-इन स्किन की गणना की गई शैलियाँ बेसलाइन फ़िक्स्चर src/skins/__fixtures__/skin-baseline.json (13 सेक्शन × लाइट/डार्क) से बँधी हैं: CSS परत तब पूरी मानी जाती है जब मापा गया मैट्रिक्स उससे मेल खाए। फ़िक्स्चर के लिए पढ़ने के नोट:

  • होवर/सक्रिय आयाम पेज से ज़बरदस्ती नहीं लगाए जा सकते, इसलिए रिकॉर्डिंग हर होवर सेलेक्टर के लिए पहले मिले CSSOM नियम का घोषणा टेक्स्ट पढ़ती है और उसे स्किन रूट के भीतर एक प्रोब एलिमेंट (resolved फ़ील्ड) से रिज़ॉल्व करती है — यह जीतने वाले नियम का अनुबंध है, लाइव :hover स्नैपशॉट नहीं।
  • _meta.selectors.menu SkinScope से पहले का सेलेक्टर टेक्स्ट दर्ज करता है। फ़िक्स्चर जमा हुआ है (मानक मान), इसलिए फ़ील्ड जानबूझकर पुराना है; रिकॉर्डिंग बंडल मौजूदा सेलेक्टर को पिन करता है।
  • फ़िक्स्चर अपने स्वीकृत बदलाव _meta.notes में रखता है: groups: 'box' के तहत VBtnGroup मार्कअप की 2026-10-18 की बहाली ने क्लासिक groupBtn/buttonsActive चाइल्ड-बटन फ़ील्ड फिर से मापे (जुड़े हुए कोने, एलिवेशन बॉक्स की)। Pastel फ़ील्ड अछूते हैं — जानबूझकर किया गया दृश्य बदलाव केवल प्रभावित क्लासिक सेल अपडेट करता है, एक नोट दर्ज करता है, और CHANGELOG की एक पंक्ति के साथ जाता है।

यह भी देखें ​

MIT लाइसेंस के तहत जारी।