स्टाइलिंग

विजेट अंगभूत हलक्या आणि गडद थीमसह काचेसारख्या बारच्या स्वरूपात रेंडर होते. सानुकूलन तीन स्तरांवर उपलब्ध आहे: सामान्य पर्यायांसाठी प्रॉप्स, थीमिंगसाठी 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 prop मधून इनलाइन सेट केला जातो.
--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 prop द्वारे ॲक्सेंट रंग सेट करा:

<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>
  )
}