Megérkezett a ThunderPhone 2.0.Önkiszolgáló használat már 2 cent/perctől.Olvassa el a bejelentést

Widget

Stílusok

Szabja testre a ThunderPhone hangwidget megjelenését CSS-sel

A widget üvegmorf sávként jelenik meg beépített világos és sötét témákkal. A testreszabás három szinten érhető el: propok a gyakori beállításokhoz, CSS-egyéni tulajdonságok a témázáshoz, valamint CSS-osztályfelülírások a teljes körű vezérléshez.


Témák

A theme prop vezérli a widget színsémáját. A widget gyökére a tp--light vagy tp--dark osztályt alkalmazza:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
TémaOsztályLeírás
'light'tp--lightVilágos háttér sötét szöveggel. Alapértelmezett.
'dark'tp--darkSötét háttér világos szöveggel.

Mindkét téma az üvegmorf sávdizájnt használja háttérelmosással és visszafogott átlátszósággal.


CSS egyéni tulajdonságok

A widget CSS egyéni tulajdonságokat (változókat) tesz elérhetővé, amelyeket felülírhat a színek módosításához anélkül, hogy az egyes osztályokat érintené. Ezeket a .tp-widget gyökérelemre alkalmazott témaklassz (.tp--light vagy .tp--dark) határozza meg:

TulajdonságAlapértelmezett (világos)Alapértelmezett (sötét)Leírás
--tp-accent#000#fffKiemelőszín: indítógomb, hullámforma-sávok, csatlakozási pont, csatlakoztatott állapot szövege. A primaryColor prop alapján inline van beállítva.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Sáv háttere (áttetsző; a --tp-glass elhomályosítja).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Némítás gombjának háttere.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Némítás gombjának háttérszíne rámutatáskor.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Sáv- és gombszegélyek.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Szegélyszín rámutatáskor.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Elsődleges szöveg (cím, ügynök neve).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)Másodlagos szöveg (alcím, állapotsor, hívásidőzítő).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)A sáv üveghatását létrehozó backdrop-filter.
--tp-shadowháromrétegű árnyékkészletháromrétegű árnyékkészletA sáv box-shadow értéke (gyűrű + közeli + távoli rétegek).
--tp-shadow-hoverháromrétegű árnyékkészletháromrétegű árnyékkészletRámutatáskor alkalmazott kiemeléshez van deklarálva; jelenleg egyetlen szabály sem alkalmazza.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)A sáv árnyékára rétegzett belső felső kiemelés.
--tp-connected#059669#34d399Csatlakoztatott állapot jelzőszíne (állapotpont).
--tp-error#dc2626#fb7185Hibaállapot szövegének színe.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Hívás befejezése gomb háttere.
--tp-end-color#ef4444#fb7185Hívás befejezése gomb ikonjának színe.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Hívás befejezése gomb szegélye.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Hívás befejezése gomb háttérszíne rámutatáskor.
--tp-idle-opacity0.40.3Üresjárati állapot halványításához van deklarálva; jelenleg egyetlen szabály sem alkalmazza.

Egyéni tulajdonságok felülírása

Állítsa be a kiemelőszínt a primaryColor prop segítségével:

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

A többi egyéni tulajdonságot CSS-sel írja felül. Használjon kétosztályos szelektort (.tp-widget.tp--light / .tp-widget.tp--dark), hogy a szabálya a stíluslap sorrendjétől függetlenül felülírja az alapértelmezett értékeket meghatározó témaklaszt:

.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-osztályok

Az összes widgetosztály tp- előtaggal rendelkezik, hogy elkerülje az ütközéseket a meglévő stílusokkal.

OsztályElemLeírás
.tp-widgetGyökérburkolóRögzített pozíciójú tároló (position: fixed, a sarok beállítása a position prop alapján, z-index: 9999). Tartalmazza a témához tartozó osztályt és az alap betűtípus-beállításokat; önmagában nincs vizuális kerete.
.tp--light / .tp--darkTémamódosítókA téma mellett a .tp-widget elemre kerülnek; meghatározzák az összes --tp-* egyéni tulajdonságot.
.tp-barSávMaga az üveghatású kapszula: háttér, háttérelmosás, szegély, 99px-es sugár, árnyék. 300px széles.
.tp-metaSzövegblokkAz összes szöveg tárolója -- üresjáratban a cím és az alcím, hívás közben az ügynök neve és állapota.
.tp-nameElsődleges címkeÜresjáratban a title prop értékét, hívás közben pedig a kapcsolódott ügynök nevét jeleníti meg (title tartalék értékként).
.tp-subAlcímAz üresjáratban megjelenő „Most elérhető” sor.
.tp-startÜresjárati hívásgombA kör alakú, kiemelt indítógomb (42px). Háttérként a --tp-accent értékét használja.
.tp-dotKapcsolódási pontA kapcsolódás közben a sáv bal oldalán megjelenő, pulzáló kiemelő pont.
.tp-wave / .tp-wave--idleHullámformaAz ötsávos hullámforma. Az --idle hozzáadja a lassú légzésanimációt; hívás közben a sávok hangra reagálnak.
.tp-buttonHívás közbeni gombokA hívás közbeni vezérlők alapstílusa (42px, lekerekítés: 12px).
.tp-button-groupGombsorHívás közben a némítási és a hívásbefejezési gombokat foglalja magába.
.tp-button--startKapcsolódógomb-változatKiemelő színű változat, amely a hívás indításakor jelenik meg.
.tp-button--muteNémítás kapcsolóHívás közben némítja vagy visszakapcsolja a mikrofont. A --tp-surface értékét használja.
.tp-button--endHívásbefejező gombBontja a hívást. A --tp-end-* palettát használja.
.tp-button--loadingBetöltési módosítóKapcsolódás közben halványítja a gombot.
.tp-icon / .tp-spinIkonokA gombikonok méretezése; a tp-spin animálja a kapcsolódási forgó ikont.
.tp-statusHívás közbeni állapotblokkA kapcsolódási/kapcsolódott/hiba állapotok során az állapotsort foglalja magába.
.tp-status__textÁllapotsorA kapcsolat állapotának szövege (például „Kapcsolódás...”) vagy a hívásidőzítő. Állapottól függően .tp-status--connected (kiemelő szín) vagy .tp-status--error (hibaszín) osztályt kap.
.tp-status__nameÜgynöknév-helyAz állapotblokk része, de a jelenlegi sávelrendezésben nem jelenik meg -- az ügynök neve helyette a .tp-name elemben látható.
.tp-status__dotÁllapotpontPulzáló, kapcsolódott állapotú pontstílus (a --tp-connected értékét használja).

Példák

Egyéni kiemelőszín propokon keresztül

A widget arculathoz igazításának legegyszerűbb módja:

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

Egyéni színek CSS-en keresztül

A teljes színvezérléshez írja felül az egyéni tulajdonságokat. Ne feledje, hogy a kiemelőszín a primaryColor propból származik, nem a CSS-ből:

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

Egyéni méret

A sáv, a gombok és a szöveg méreteinek módosításával növelheti vagy csökkentheti a widget méretét:

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

Szövegcímkék elrejtése

A widget teljes szövege a .tp-meta elemben található. Rejtse el teljesen, hogy csak a hullámforma és a gombok maradjanak:

.tp-meta {
  display: none;
}

Vagy rejtse el az egyes részeket:

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

Témaspecifikus felülírások

A témaosztály használatával célozzon meg egy adott témát:

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

Hatókör beállítása className használatával

A React-komponens használatakor adjon át egy className propot, hogy a felülírások egy adott widgetpéldányra vonatkozzanak:

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

Ezután célozza meg ezt az osztályt a CSS-ben:

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

Így ugyanazon az oldalon több, eltérő stílusú widgetpéldányt is használhat. Adjon minden példánynak saját kiemelőszínt a primaryColor propján keresztül (a CSS nem írhatja felül a --tp-accent értékét -- azt a rendszer inline állítja be).


Teljesen egyéni felhasználói felület

Ha a CSS-felülírások nem elegendők, a headless hook teljes körű irányítást biztosít. Ön biztosítja az összes HTML-t és stílust, míg a useThunderPhone kezeli a hangmunkamenetet. A hook az audioLevelRef értéket is biztosítja hangra reagáló vizualizációk, például hullámformák készítéséhez.

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