ThunderPhone 2.0 är här.Kom igång själv, från 2 cent/minut.Läs lanseringsnyheten

Widget

Stilsättning

Anpassa utseendet på ThunderPhones röstwidget med CSS

Widgeten renderas som en glassmorfisk stapel med inbyggda ljusa och mörka teman. Anpassning är möjlig på tre nivåer: props för vanliga alternativ, anpassade CSS-egenskaper för teman och åsidosättningar av CSS-klasser för full kontroll.


Teman

Propen theme styr widgetens färgschema. Den tillämpar klassen tp--light eller tp--dark på widgetens rotelement:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
TemaKlassBeskrivning
'light'tp--lightLjus bakgrund med mörk text. Standard.
'dark'tp--darkMörk bakgrund med ljus text.

Båda teman använder den glassmorfiska stapeldesignen med oskärpa i bakgrunden och diskret transparens.

Anpassade CSS-egenskaper

Widgeten exponerar anpassade CSS-egenskaper (variabler) som du kan åsidosätta för att ändra färger utan att röra enskilda klasser. De definieras av temaklassen (.tp--light eller .tp--dark) som tillämpas på roten .tp-widget:

EgenskapStandard (ljust)Standard (mörkt)Beskrivning
--tp-accent#000#fffAccentfärg: startknapp, vågformsstaplar, anslutningspunkt, text för ansluten status. Anges inline från propen primaryColor.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Bakgrund för fältet (halvgenomskinlig; suddas ut av --tp-glass).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Bakgrund för avstängningsknappen.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Bakgrund för avstängningsknappen vid hovring.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Kanter för fält och knappar.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Kantfärg vid hovring.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Primär text (titel, agentnamn).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)Sekundär text (undertitel, statusrad, samtalstimer).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)backdrop-filter som skapar glaseffekten på fältet.
--tp-shadowskuggstapel i tre lagerskuggstapel i tre lagerFältets box-shadow (ring + nära + avlägsna lager).
--tp-shadow-hoverskuggstapel i tre lagerskuggstapel i tre lagerDeklarerad för upphöjning vid hovring; tillämpas för närvarande inte av någon regel.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)Inre högdagrar upptill som läggs ovanpå fältets skugga.
--tp-connected#059669#34d399Färg för indikator vid anslutet läge (statuspunkt).
--tp-error#dc2626#fb7185Textfärg för felstatus.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Bakgrund för knappen för att avsluta samtal.
--tp-end-color#ef4444#fb7185Ikonfärg för knappen för att avsluta samtal.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Kant för knappen för att avsluta samtal.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Bakgrund för knappen för att avsluta samtal vid hovring.
--tp-idle-opacity0.40.3Deklarerad för nedtoning i viloläge; tillämpas för närvarande inte av någon regel.

Åsidosätta anpassade egenskaper

Ange accentfärgen via propen primaryColor:

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

Åsidosätt de andra anpassade egenskaperna med CSS. Använd en väljare med två klasser (.tp-widget.tp--light / .tp-widget.tp--dark) så att din regel har högre prioritet än temaklassen som definierar standardvärdena, oavsett ordningen i formatmallen:

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

Alla widgetklasser har prefixet tp- för att undvika konflikter med dina befintliga stilar.

KlassElementBeskrivning
.tp-widgetRotomslagBehållare med fast position (position: fixed, hörn anges av propen position, z-index: 9999). Har temaklassen och grundläggande teckensnittsinställningar; ingen egen visuell inramning.
.tp--light / .tp--darkTemamodifierareTillämpas på .tp-widget tillsammans med temat; definierar alla anpassade egenskaper --tp-*.
.tp-barFältetSjälva den glasliknande pillformen: bakgrund, bakgrundsoskärpa, kantlinje, radie på 99px, skugga. 300px bred.
.tp-metaTextblockBehållare för all text -- titel och undertitel i viloläge, agentnamn och status under ett samtal.
.tp-namePrimär etikettVisar propen title i viloläge och den anslutna agentens namn (med title som reserv) under ett samtal.
.tp-subUndertitelRaden "Tillgänglig nu" som visas i viloläge.
.tp-startSamtalsknapp i vilolägeDen cirkulära startknappen med accentfärg (42px). Använder --tp-accent som bakgrund.
.tp-dotAnslutningspunktPulserande punkt i accentfärg som visas till vänster i fältet medan anslutning sker.
.tp-wave / .tp-wave--idleVågmönsterVågmönstret med fem staplar. --idle lägger till den långsamma andningsanimationen; under ett samtal reagerar staplarna på ljud.
.tp-buttonKnappar under samtalGrundstil för kontrollerna under samtal (42px, rundade 12px).
.tp-button-groupKnapp radOmsluter knapparna för avstängning av mikrofon och avslut under ett samtal.
.tp-button--startVariant för anslutningsknappVariant med accentfärg som visas medan ett samtal startar.
.tp-button--muteVäxla mikrofonavstängningStänger av eller slår på mikrofonen under ett samtal. Använder --tp-surface.
.tp-button--endKnapp för att avsluta samtalLägger på. Använder paletten --tp-end-*.
.tp-button--loadingLaddningsmodifierareTonar ned knappen medan anslutning sker.
.tp-icon / .tp-spinIkonerStorlek på knappikoner; tp-spin animerar anslutningssnurran.
.tp-statusStatusblock under samtalOmsluter statusraden under anslutnings-, anslutet- och feltillstånd.
.tp-status__textStatusradText för anslutningsstatus (t.ex. "Ansluter...") eller samtalstimern. Får .tp-status--connected (accentfärg) eller .tp-status--error (färg för fel) beroende på tillstånd.
.tp-status__namePlats för agentnamnDel av statusblocket, men renderas inte i den aktuella fältlayouten -- agentnamnet visas i .tp-name i stället.
.tp-status__dotStatuspunktStil för pulserande punkt i anslutet läge (använder --tp-connected).

Exempel

Anpassad accentfärg via props

Det enklaste sättet att varumärkesanpassa widgeten:

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

Anpassade färger via CSS

Åsidosätt de anpassade egenskaperna för full kontroll över färgerna. Kom ihåg att accentfärgen kommer från propen primaryColor, inte från 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);
}

Anpassad storlek

Gör widgeten större eller mindre genom att justera måtten för fältet, knapparna och texten:

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

Dölj textetiketterna

All text i widgeten finns i .tp-meta. Dölj den helt om du bara vill behålla vågformen och knapparna:

.tp-meta {
  display: none;
}

Eller dölj enskilda delar:

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

Åsidosättningar för specifika teman

Rikta in dig på ett specifikt tema med temaklassen:

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

Avgränsning med className

När du använder React-komponenten skickar du en className-prop för att begränsa dina åsidosättningar till en specifik widgetinstans:

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

Rikta sedan in dig på den klassen i din CSS:

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

Detta gör att du kan ha flera widgetinstanser på samma sida med olika stilar. Ge varje instans en egen accentfärg via dess primaryColor-prop (CSS kan inte åsidosätta --tp-accent -- den anges inline).


Helt anpassat gränssnitt

Om CSS-åsidosättningar inte räcker ger den headless-hooken dig full kontroll. Du tillhandahåller all HTML och styling medan useThunderPhone hanterar röstsessionen. Hooken tillhandahåller även audioLevelRef för att bygga ljudreaktiva visualiseringar som vågformer.

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