ThunderPhone 2.0 अब लाइव है।सेल्फ़-सर्व, 2¢ प्रति मिनट से शुरू।घोषणा पढ़ें

Widget

स्टाइलिंग

CSS के साथ ThunderPhone वॉइस विजेट का रूप कस्टमाइज़ करें

विजेट अंतर्निहित लाइट और डार्क थीम के साथ ग्लासमॉर्फिक बार के रूप में रेंडर होता है। कस्टमाइज़ेशन तीन स्तरों पर उपलब्ध है: सामान्य विकल्पों के लिए प्रॉप्स, थीमिंग के लिए CSS कस्टम प्रॉपर्टीज़, और पूर्ण नियंत्रण के लिए CSS क्लास ओवरराइड्स।


थीम

theme प्रॉप विजेट की रंग स्कीम नियंत्रित करता है। यह विजेट रूट पर tp--light या tp--dark क्लास लागू करता है:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
थीमक्लासविवरण
'light'tp--lightगहरे टेक्स्ट के साथ हल्का बैकग्राउंड। डिफ़ॉल्ट।
'dark'tp--darkहल्के टेक्स्ट के साथ गहरा बैकग्राउंड।

दोनों थीम बैकड्रॉप ब्लर और हल्की पारदर्शिता के साथ ग्लासमॉर्फिक बार डिज़ाइन का उपयोग करती हैं।


CSS कस्टम प्रॉपर्टीज़

विजेट CSS कस्टम प्रॉपर्टीज़ (वेरिएबल्स) एक्सपोज़ करता है, जिन्हें आप अलग-अलग क्लासेज़ को छुए बिना रंग बदलने के लिए ओवरराइड कर सकते हैं। ये .tp-widget रूट पर लागू की गई थीम क्लास (.tp--light या .tp--dark) द्वारा परिभाषित होती हैं:

प्रॉपर्टीडिफ़ॉल्ट (लाइट)डिफ़ॉल्ट (डार्क)विवरण
--tp-accent#000#fffएक्सेंट रंग: स्टार्ट बटन, वेवफ़ॉर्म बार, कनेक्टिंग डॉट, कनेक्टेड-स्टेटस टेक्स्ट। primaryColor प्रॉप से इनलाइन सेट किया जाता है।
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)बार बैकग्राउंड (अर्ध-पारदर्शी; --tp-glass द्वारा ब्लर किया गया)।
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)म्यूट-बटन बैकग्राउंड।
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)म्यूट-बटन हॉवर बैकग्राउंड।
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)बार और बटन बॉर्डर।
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)हॉवर पर बॉर्डर रंग।
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)प्राथमिक टेक्स्ट (टाइटल, एजेंट का नाम)।
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)द्वितीयक टेक्स्ट (सबटाइटल, स्टेटस लाइन, कॉल टाइमर)।
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)backdrop-filter, जो बार पर ग्लास इफ़ेक्ट बनाता है।
--tp-shadowतीन-लेयर शैडो स्टैकतीन-लेयर शैडो स्टैकबार का box-shadow (रिंग + नियर + फार लेयर्स)।
--tp-shadow-hoverतीन-लेयर शैडो स्टैकतीन-लेयर शैडो स्टैकहॉवर एलिवेशन के लिए घोषित; वर्तमान में किसी नियम द्वारा लागू नहीं है।
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)बार शैडो पर लेयर किया गया इनर टॉप हाइलाइट।
--tp-connected#059669#34d399कनेक्टेड-स्टेट इंडिकेटर रंग (स्टेटस डॉट)।
--tp-error#dc2626#fb7185एरर-स्टेट स्टेटस टेक्स्ट रंग।
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)कॉल-समाप्त बटन बैकग्राउंड।
--tp-end-color#ef4444#fb7185कॉल-समाप्त बटन आइकन रंग।
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)कॉल-समाप्त बटन बॉर्डर।
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)कॉल-समाप्त बटन हॉवर बैकग्राउंड।
--tp-idle-opacity0.40.3आइडल-स्टेट डिमिंग के लिए घोषित; वर्तमान में किसी नियम द्वारा लागू नहीं है।

कस्टम प्रॉपर्टीज़ को ओवरराइड करना

primaryColor प्रॉप के माध्यम से एक्सेंट रंग सेट करें:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  primaryColor="#e11d48"
/>

अन्य कस्टम प्रॉपर्टीज़ को CSS के साथ ओवरराइड करें। दो-क्लास सेलेक्टर (.tp-widget.tp--light / .tp-widget.tp--dark) का उपयोग करें, ताकि स्टाइलशीट क्रम की परवाह किए बिना आपका नियम डिफ़ॉल्ट परिभाषित करने वाली थीम क्लास पर प्राथमिकता ले सके:

.tp-widget.tp--light {
  --tp-bg: rgba(0, 0, 0, 0.9);
  --tp-text: rgba(255, 255, 255, 0.95);
  --tp-text-2: rgba(255, 255, 255, 0.55);
  --tp-border: rgba(255, 255, 255, 0.15);
}

CSS क्लासेस

मौजूदा स्टाइल्स के साथ टकराव से बचने के लिए सभी विजेट क्लासेस में tp- प्रीफिक्स होता है।

क्लासएलिमेंटविवरण
.tp-widgetरूट रैपरफिक्स्ड-पोज़िशन कंटेनर (position: fixed, कोना position prop द्वारा सेट, z-index: 9999)। इसमें थीम क्लास और बेस फ़ॉन्ट सेटिंग्स होती हैं; इसका अपना कोई विज़ुअल क्रोम नहीं होता।
.tp--light / .tp--darkथीम मॉडिफ़ायर्सथीम के साथ .tp-widget पर लागू होते हैं; सभी --tp-* कस्टम प्रॉपर्टीज़ निर्धारित करते हैं।
.tp-barबारग्लासमॉर्फिक पिल स्वयं: बैकग्राउंड, बैकड्रॉप ब्लर, बॉर्डर, 99px रेडियस, शैडो। 300px चौड़ी।
.tp-metaटेक्स्ट ब्लॉकसभी टेक्स्ट का कंटेनर -- निष्क्रिय होने पर शीर्षक और सबटाइटल, कॉल के दौरान एजेंट का नाम और स्टेटस।
.tp-nameप्राथमिक लेबलनिष्क्रिय होने पर title prop दिखाता है, और कॉल के दौरान कनेक्टेड एजेंट का नाम दिखाता है (title पर फ़ॉलबैक के साथ)।
.tp-subसबटाइटलनिष्क्रिय होने पर दिखाई जाने वाली "अभी उपलब्ध" लाइन।
.tp-startनिष्क्रिय कॉल बटनगोलाकार एक्सेंट स्टार्ट बटन (42px)। बैकग्राउंड के रूप में --tp-accent का उपयोग करता है।
.tp-dotकनेक्टिंग डॉटकनेक्ट होने के दौरान बार के बाईं ओर दिखने वाला पल्सिंग एक्सेंट डॉट।
.tp-wave / .tp-wave--idleवेवफ़ॉर्मपाँच-बार वेवफ़ॉर्म। --idle धीमी ब्रीदिंग एनीमेशन जोड़ता है; कॉल के दौरान बार ऑडियो-रिएक्टिव होते हैं।
.tp-buttonइन-कॉल बटनइन-कॉल कंट्रोल्स के लिए बेस स्टाइल (42px, गोलाकार 12px)।
.tp-button-groupबटन पंक्तिकॉल के दौरान म्यूट और एंड बटन को रैप करता है।
.tp-button--startकनेक्ट बटन वेरिएंटकॉल शुरू होने के दौरान दिखाया जाने वाला एक्सेंट-रंग वेरिएंट।
.tp-button--muteम्यूट टॉगलकॉल के दौरान माइक को म्यूट/अनम्यूट करता है। --tp-surface का उपयोग करता है।
.tp-button--endकॉल समाप्ति बटनकॉल समाप्त करता है। --tp-end-* पैलेट का उपयोग करता है।
.tp-button--loadingलोडिंग मॉडिफ़ायरकनेक्ट होने के दौरान बटन को धुंधला करता है।
.tp-icon / .tp-spinआइकन्सबटन आइकन साइज़िंग; tp-spin कनेक्टिंग स्पिनर को एनीमेट करता है।
.tp-statusइन-कॉल स्टेटस ब्लॉककनेक्टिंग/कनेक्टेड/एरर स्टेट्स के दौरान स्टेटस लाइन को रैप करता है।
.tp-status__textस्टेटस लाइनकनेक्शन स्टेट टेक्स्ट (उदाहरण के लिए, "कनेक्ट हो रहा है...") या कॉल टाइमर। स्टेट के अनुसार .tp-status--connected (एक्सेंट रंग) या .tp-status--error (एरर रंग) प्राप्त करता है।
.tp-status__nameएजेंट-नाम स्लॉटस्टेटस ब्लॉक का हिस्सा है, लेकिन मौजूदा बार लेआउट में रेंडर नहीं होता -- एजेंट का नाम इसके बजाय .tp-name में दिखाई देता है।
.tp-status__dotस्टेटस डॉटपल्सिंग कनेक्टेड-स्टेट डॉट स्टाइल (--tp-connected का उपयोग करता है)।

उदाहरण

Props के ज़रिए कस्टम एक्सेंट

विजेट को ब्रांड करने का सबसे सरल तरीका:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="light"
  primaryColor="#059669"
  title="Talk to support"
/>

CSS के ज़रिए कस्टम रंग

पूरे रंग नियंत्रण के लिए कस्टम प्रॉपर्टीज़ ओवरराइड करें। याद रखें कि एक्सेंट CSS से नहीं, primaryColor prop से आता है:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  primaryColor="#059669"
/>
/* Emerald theme for everything else */
.tp-widget.tp--light {
  --tp-bg: rgba(236, 253, 245, 0.85);
  --tp-text: rgba(6, 78, 59, 0.95);
  --tp-text-2: rgba(4, 120, 87, 0.8);
  --tp-border: rgba(5, 150, 105, 0.2);
}

कस्टम साइज़

बार, बटन और टेक्स्ट के डाइमेंशन समायोजित करके विजेट को बड़ा या छोटा करें:

/* Wider bar */
.tp-bar {
  width: 340px;
}
 
/* Larger buttons (42px by default) */
.tp-start,
.tp-button {
  width: 56px;
  height: 56px;
}
 
/* Larger text */
.tp-name {
  font-size: 16px;
}
 
.tp-sub,
.tp-status__text {
  font-size: 14px;
}

टेक्स्ट लेबल छिपाएँ

विजेट का सारा टेक्स्ट .tp-meta में होता है। केवल वेवफॉर्म और बटन रखने के लिए इसे पूरी तरह छिपाएँ:

.tp-meta {
  display: none;
}

या अलग-अलग हिस्से छिपाएँ:

/* Hide only the idle "Available now" subtitle */
.tp-sub {
  display: none;
}
 
/* Hide only the in-call status line (connection state / timer) */
.tp-status {
  display: none;
}

थीम-विशिष्ट ओवरराइड

थीम क्लास के साथ किसी विशिष्ट थीम को टारगेट करें:

/* Only affect dark theme */
.tp--dark .tp-start {
  box-shadow: 0 0 20px rgba(255, 255, 255, 0.25);
}
 
/* Only affect light theme */
.tp-widget.tp--light {
  --tp-bg: rgba(255, 255, 255, 0.95);
}

className के साथ स्कोपिंग

React कंपोनेंट का उपयोग करते समय, अपने ओवरराइड्स को किसी विशिष्ट विजेट इंस्टेंस तक सीमित करने के लिए className prop पास करें:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
  className="support-widget"
/>

फिर अपनी CSS में उस क्लास को टारगेट करें:

.support-widget.tp--dark {
  --tp-bg: rgba(30, 30, 46, 0.9);
}
 
.support-widget .tp-name {
  font-weight: 700;
}

इससे आप एक ही पेज पर अलग-अलग स्टाइल वाले कई विजेट इंस्टेंस रख सकते हैं। हर इंस्टेंस को उसके primaryColor prop के ज़रिए अपना एक्सेंट दें (CSS --tp-accent को ओवरराइड नहीं कर सकता -- यह इनलाइन सेट होता है)।


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

अगर CSS ओवरराइड पर्याप्त नहीं हैं, तो हेडलेस हुक आपको पूरा नियंत्रण देता है। आप सभी HTML और स्टाइलिंग प्रदान करते हैं, जबकि useThunderPhone वॉइस सेशन संभालता है। यह हुक वेवफॉर्म जैसे ऑडियो-रिएक्टिव विज़ुअलाइज़ेशन बनाने के लिए audioLevelRef भी प्रदान करता है।

import { useThunderPhone } from '@thunderphone/widget'
 
function MyWidget() {
  const phone = useThunderPhone({
    publishableKey: 'pk_live_your_publishable_key',
  })
 
  return (
    <div className="my-totally-custom-widget">
      {/* Your own buttons, animations, layouts -- anything */}
      <button onClick={phone.state === 'connected' ? phone.disconnect : phone.connect}>
        {phone.state === 'connected' ? 'Hang up' : 'Call us'}
      </button>
      {phone.audio}
    </div>
  )
}