સ્ટાઇલિંગ

વિજેટ બિલ્ટ-ઇન લાઇટ અને ડાર્ક થીમ્સ સાથે ગ્લાસમોર્ફિક બાર તરીકે રેન્ડર થાય છે. કસ્ટમાઇઝેશન ત્રણ સ્તરે ઉપલબ્ધ છે: સામાન્ય વિકલ્પો માટે પ્રોપ્સ, થીમિંગ માટે 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>
  )
}