Vzhľad

Widget sa vykresľuje ako glassmorfická lišta so vstavanými svetlými a tmavými témami. Prispôsobenie je dostupné na troch úrovniach: props pre bežné možnosti, vlastné vlastnosti CSS pre témy a prepísania tried CSS pre úplné ovládanie.


Témy

Prop theme riadi farebnú schému widgetu. Na koreň widgetu použije triedu tp--light alebo tp--dark:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
TémaTriedaPopis
'light'tp--lightSvetlé pozadie s tmavým textom. Predvolené.
'dark'tp--darkTmavé pozadie so svetlým textom.

Obe témy používajú dizajn glassmorfickej lišty s rozmazaním pozadia a jemnou priehľadnosťou.


Vlastné vlastnosti CSS

Widget poskytuje vlastné vlastnosti CSS (premenné), ktoré môžete prepísať na zmenu farieb bez zásahu do jednotlivých tried. Definuje ich trieda témy (.tp--light alebo .tp--dark) použitá na koreňovom prvku .tp-widget:

VlastnosťPredvolená (svetlá)Predvolená (tmavá)Popis
--tp-accent#000#fffFarba zvýraznenia: tlačidlo spustenia, pruhy priebehu zvuku, bod pripojenia, text stavu pripojenia. Nastavuje sa inline z parametra primaryColor.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Pozadie panela (polopriehľadné; rozmazané pomocou --tp-glass).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Pozadie tlačidla stlmenia.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Pozadie tlačidla stlmenia pri prejdení kurzorom.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Okraje panela a tlačidiel.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Farba okraja pri prejdení kurzorom.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Primárny text (názov, meno agenta).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)Sekundárny text (podnadpis, riadok stavu, časovač hovoru).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)backdrop-filter, ktorý vytvára na paneli efekt skla.
--tp-shadowtrojvrstvový súbor tieňovtrojvrstvový súbor tieňovbox-shadow panela (vrstvy prstenca + blízkeho + vzdialeného tieňa).
--tp-shadow-hovertrojvrstvový súbor tieňovtrojvrstvový súbor tieňovDefinované pre zvýšenie pri prejdení kurzorom; momentálne sa nepoužíva v žiadnom pravidle.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)Vnútorné horné zvýraznenie pridané do tieňa panela.
--tp-connected#059669#34d399Farba indikátora stavu pripojenia (stavový bod).
--tp-error#dc2626#fb7185Farba textu stavu chyby.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Pozadie tlačidla ukončenia hovoru.
--tp-end-color#ef4444#fb7185Farba ikony tlačidla ukončenia hovoru.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Okraj tlačidla ukončenia hovoru.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Pozadie tlačidla ukončenia hovoru pri prejdení kurzorom.
--tp-idle-opacity0.40.3Definované pre stlmenie v nečinnom stave; momentálne sa nepoužíva v žiadnom pravidle.

Prepísanie vlastných vlastností

Nastavte farbu zvýraznenia pomocou parametra primaryColor:

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

Ostatné vlastné vlastnosti prepíšte pomocou CSS. Použite selektor s dvoma triedami (.tp-widget.tp--light / .tp-widget.tp--dark), aby malo vaše pravidlo vyššiu prioritu než trieda témy, ktorá definuje predvolené hodnoty, bez ohľadu na poradie štýlov:

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

Triedy CSS

Všetky triedy widgetu majú predponu tp-, aby sa predišlo konfliktom s vašimi existujúcimi štýlmi.

TriedaPrvokPopis
.tp-widgetKoreňový obalKontajner s pevnou pozíciou (position: fixed, roh nastavený vlastnosťou position, z-index: 9999). Obsahuje triedu témy a základné nastavenia písma; sám o sebe nemá žiadne vizuálne prvky.
.tp--light / .tp--darkModifikátory témyPoužívajú sa na .tp-widget spolu s témou; definujú všetky vlastné vlastnosti --tp-*.
.tp-barLištaSamotná sklenená kapsula: pozadie, rozmazanie pozadia, okraj, polomer 99px, tieň. Šírka 300px.
.tp-metaTextový blokKontajner pre všetok text -- názov a podnadpis v nečinnom stave, meno agenta a stav počas hovoru.
.tp-namePrimárny štítokV nečinnom stave zobrazuje vlastnosť title a počas hovoru meno pripojeného agenta (ak nie je k dispozícii, použije sa title).
.tp-subPodnadpisRiadok „Teraz k dispozícii“ zobrazený v nečinnom stave.
.tp-startTlačidlo hovoru v nečinnom staveKruhové tlačidlo spustenia so zvýrazňujúcou farbou (42px). Ako pozadie používa --tp-accent.
.tp-dotBodka pripájaniaPulzujúca bodka so zvýrazňujúcou farbou zobrazená naľavo od lišty počas pripájania.
.tp-wave / .tp-wave--idleZvuková vlnaZvuková vlna s piatimi stĺpcami. --idle pridáva pomalú animáciu dýchania; počas hovoru stĺpce reagujú na zvuk.
.tp-buttonTlačidlá počas hovoruZákladný štýl ovládacích prvkov počas hovoru (42px, zaoblenie 12px).
.tp-button-groupRiadok tlačidielPočas hovoru obaľuje tlačidlá stlmenia a ukončenia.
.tp-button--startVariant tlačidla pripojeniaVariant so zvýrazňujúcou farbou zobrazený počas spúšťania hovoru.
.tp-button--mutePrepínač stlmeniaPočas hovoru stlmí alebo zapne mikrofón. Používa --tp-surface.
.tp-button--endTlačidlo ukončenia hovoruUkončí hovor. Používa paletu --tp-end-*.
.tp-button--loadingModifikátor načítavaniaPočas pripájania stmaví tlačidlo.
.tp-icon / .tp-spinIkonyVeľkosť ikon tlačidiel; tp-spin animuje indikátor pripájania.
.tp-statusBlok stavu počas hovoruObaľuje stavový riadok počas stavov pripájania/pripojenia/chyby.
.tp-status__textStavový riadokText stavu pripojenia (napr. „Pripája sa...“) alebo časovač hovoru. Podľa stavu získa .tp-status--connected (zvýrazňujúca farba) alebo .tp-status--error (farba chyby).
.tp-status__namePriestor pre meno agentaJe súčasťou stavového bloku, ale v aktuálnom rozložení lišty sa nevykresľuje -- meno agenta sa namiesto toho zobrazuje v .tp-name.
.tp-status__dotStavová bodkaŠtýl pulzujúcej bodky pre stav pripojenia (používa --tp-connected).

Príklady

Vlastná farba akcentu cez props

Najjednoduchší spôsob, ako prispôsobiť widget vašej značke:

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

Vlastné farby cez CSS

Prepíšte vlastné vlastnosti a získajte úplnú kontrolu nad farbami. Nezabudnite, že akcent sa nastavuje pomocou props primaryColor, nie cez CSS:

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

Vlastná veľkosť

Zväčšite alebo zmenšite widget úpravou rozmerov panela, tlačidiel a textu:

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

Skrytie textových štítkov

Všetok text widgetu sa nachádza v .tp-meta. Ak chcete ponechať iba priebeh zvuku a tlačidlá, úplne ho skryte:

.tp-meta {
  display: none;
}

Môžete tiež skryť jednotlivé časti:

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

Prepísania pre konkrétnu tému

Konkrétnu tému zacielite pomocou jej triedy:

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

Obmedzenie rozsahu pomocou className

Pri používaní komponentu React odovzdajte props className, aby ste obmedzili prepísania na konkrétnu inštanciu widgetu:

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

Potom túto triedu zacielite v CSS:

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

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

Vďaka tomu môžete mať na rovnakej stránke viacero inštancií widgetu s rôznymi štýlmi. Každej inštancii nastavte vlastný akcent pomocou props primaryColor (CSS nemôže prepísať --tp-accent -- nastavuje sa priamo v riadku).


Úplne vlastné používateľské rozhranie

Ak prepísania CSS nestačia, headless hook vám poskytne úplnú kontrolu. Dodáte všetko HTML a štýly, zatiaľ čo useThunderPhone spracuje hlasovú reláciu. Hook poskytuje aj audioLevelRef na vytváranie vizualizácií reagujúcich na zvuk, napríklad priebehov zvuku.

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