Stiliziranje

Widget se prikazuje kao staklasta traka s ugrađenim svijetlom i tamnom temom. Prilagodba je dostupna na tri razine: svojstva za uobičajene opcije, prilagođena CSS svojstva za teme i nadjačavanja CSS klasa za potpunu kontrolu.


Teme

Svojstvo theme kontrolira shemu boja widgeta. Primjenjuje klasu tp--light ili tp--dark na korijenski element widgeta:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
TemaKlasaOpis
'light'tp--lightSvijetla pozadina s tamnim tekstom. Zadano.
'dark'tp--darkTamna pozadina sa svijetlim tekstom.

Obje teme koriste dizajn staklaste trake sa zamućenjem pozadine i suptilnom prozirnošću.


Prilagođena CSS svojstva

Widget izlaže prilagođena CSS svojstva (varijable) koja možete nadjačati za promjenu boja bez mijenjanja pojedinačnih klasa. Definirana su klasom teme (.tp--light ili .tp--dark) primijenjenom na korijen .tp-widget:

SvojstvoZadano (svijetlo)Zadano (tamno)Opis
--tp-accent#000#fffBoja naglaska: gumb za pokretanje, trake valnog oblika, točka povezivanja, tekst statusa povezivanja. Postavlja se ugrađeno iz propa primaryColor.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Pozadina trake (poluprozirna; zamućena pomoću --tp-glass).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Pozadina gumba za isključivanje zvuka.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Pozadina gumba za isključivanje zvuka pri prelasku mišem.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Obrubi trake i gumba.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Boja obruba pri prelasku mišem.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Primarni tekst (naslov, ime agenta).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)Sekundarni tekst (podnaslov, redak statusa, mjerač vremena poziva).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)backdrop-filter koji stvara efekt stakla na traci.
--tp-shadowskup sjena u tri slojaskup sjena u tri slojabox-shadow trake (prstenasti + bliski + udaljeni slojevi).
--tp-shadow-hoverskup sjena u tri slojaskup sjena u tri slojaDeklarirano za podizanje pri prelasku mišem; trenutačno nije primijenjeno nijednim pravilom.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)Unutarnje gornje isticanje slojevito dodano sjeni trake.
--tp-connected#059669#34d399Boja indikatora stanja povezanosti (točka statusa).
--tp-error#dc2626#fb7185Boja teksta statusa pogreške.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Pozadina gumba za završetak poziva.
--tp-end-color#ef4444#fb7185Boja ikone gumba za završetak poziva.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Obrub gumba za završetak poziva.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Pozadina gumba za završetak poziva pri prelasku mišem.
--tp-idle-opacity0.40.3Deklarirano za zatamnjenje u stanju mirovanja; trenutačno nije primijenjeno nijednim pravilom.

Nadjačavanje prilagođenih svojstava

Postavite boju naglaska putem propa primaryColor:

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

Nadjačajte ostala prilagođena svojstva pomoću CSS-a. Upotrijebite selektor s dvjema klasama (.tp-widget.tp--light / .tp-widget.tp--dark) kako bi vaše pravilo imalo prednost nad klasom teme koja definira zadane vrijednosti, neovisno o redoslijedu tablice stilova:

.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 klase

Sve klase widgeta imaju prefiks tp- kako bi se izbjegli sukobi s vašim postojećim stilovima.

KlasaElementOpis
.tp-widgetKorijenski omotačSpremnik s fiksnim položajem (position: fixed, kut određen propom position, z-index: 9999). Sadrži klasu teme i osnovne postavke fonta; nema vlastite vizualne elemente.
.tp--light / .tp--darkModifikatori temePrimjenjuju se na .tp-widget zajedno s temom; definiraju sva prilagođena svojstva --tp-*.
.tp-barTrakaSama staklasta kapsula: pozadina, zamućenje pozadine, obrub, radijus 99px, sjena. Široka je 300px.
.tp-metaTekstualni blokSpremnik za sav tekst -- naslov i podnaslov u stanju mirovanja, ime agenta i status tijekom poziva.
.tp-namePrimarna oznakaPrikazuje prop title u stanju mirovanja te ime povezanog agenta (uz korištenje title kao zamjene) tijekom poziva.
.tp-subPodnaslovRedak "Dostupno sada" prikazan u stanju mirovanja.
.tp-startGumb za poziv u stanju mirovanjaKružni naglašeni gumb za pokretanje (42px). Kao pozadinu koristi --tp-accent.
.tp-dotTočka povezivanjaPulsirajuća naglašena točka prikazana lijevo od trake tijekom povezivanja.
.tp-wave / .tp-wave--idleValni oblikValni oblik s pet traka. --idle dodaje sporu animaciju disanja; tijekom poziva trake reagiraju na zvuk.
.tp-buttonGumbi tijekom pozivaOsnovni stil za kontrole tijekom poziva (42px, zaobljenje 12px).
.tp-button-groupRedak gumbaObuhvaća gumbe za isključivanje mikrofona i završetak poziva tijekom poziva.
.tp-button--startVarijanta gumba za povezivanjeVarijanta u naglašenoj boji prikazana tijekom pokretanja poziva.
.tp-button--mutePrekidač za isključivanje mikrofonaIsključuje/uključuje mikrofon tijekom poziva. Koristi --tp-surface.
.tp-button--endGumb za završetak pozivaPrekida poziv. Koristi paletu --tp-end-*.
.tp-button--loadingModifikator učitavanjaZatamnjuje gumb tijekom povezivanja.
.tp-icon / .tp-spinIkoneDimenzioniranje ikona gumba; tp-spin animira pokazivač povezivanja.
.tp-statusBlok statusa tijekom pozivaObuhvaća redak statusa tijekom stanja povezivanja/povezanosti/pogreške.
.tp-status__textRedak statusaTekst stanja veze (npr. "Povezivanje...") ili mjerač vremena poziva. Prima .tp-status--connected (naglašena boja) ili .tp-status--error (boja pogreške) ovisno o stanju.
.tp-status__nameMjesto za ime agentaDio je bloka statusa, ali se ne prikazuje u trenutačnom rasporedu trake -- ime agenta umjesto toga prikazuje se u .tp-name.
.tp-status__dotTočka statusaStil pulsirajuće točke za stanje povezanosti (koristi --tp-connected).

Primjeri

Prilagođena akcentna boja putem propova

Najjednostavniji način brendiranja widgeta:

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

Prilagođene boje putem CSS-a

Nadjačajte prilagođena svojstva za potpunu kontrolu nad bojama. Imajte na umu da akcentna boja dolazi iz propa primaryColor, a ne iz CSS-a:

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

Prilagođena veličina

Povećajte ili smanjite widget prilagodbom dimenzija trake, gumba i teksta:

/* 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;
}

Sakrijte tekstne oznake

Sav tekst widgeta nalazi se u .tp-meta. U potpunosti ga sakrijte kako bi ostali samo valni oblik i gumbi:

.tp-meta {
  display: none;
}

Ili sakrijte pojedinačne dijelove:

/* 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;
}

Nadjačavanja specifična za temu

Ciljajte određenu temu pomoću klase teme:

/* 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);
}

Ograničavanje opsega pomoću className

Kada koristite React komponentu, proslijedite prop className kako biste ograničili nadjačavanja na određenu instancu widgeta:

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

Zatim ciljajte tu klasu u CSS-u:

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

.support-widget .tp-name {
  font-weight: 700;
}

To vam omogućuje da na istoj stranici imate više instanci widgeta s različitim stilovima. Svakoj instanci dodijelite vlastitu akcentnu boju putem njezina propa primaryColor (CSS ne može nadjačati --tp-accent -- postavljen je ugrađeno).


Potpuno prilagođeno sučelje

Ako nadjačavanja CSS-a nisu dovoljna, headless hook pruža vam potpunu kontrolu. Vi pružate sav HTML i stiliziranje, dok useThunderPhone upravlja glasovnom sesijom. Hook također pruža audioLevelRef za izradu vizualizacija koje reagiraju na zvuk, poput valnih oblika.

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