ThunderPhone 2.0 yayında.Kendi başınıza kullanmaya başlayın; dakikada 2¢'den başlayan fiyatlarla.Duyuruyu okuyun

Widget

Stil

ThunderPhone sesli bileşeninin görünümünü CSS ile özelleştirin

Widget, yerleşik açık ve koyu temalara sahip cam efektli bir çubuk olarak oluşturulur. Özelleştirme üç düzeyde yapılabilir: yaygın seçenekler için prop'lar, tema oluşturma için CSS özel özellikleri ve tam kontrol için CSS sınıf geçersiz kılmaları.


Temalar

theme prop'u, widget'ın renk şemasını kontrol eder. Widget köküne tp--light veya tp--dark sınıfını uygular:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
TemaSınıfAçıklama
'light'tp--lightKoyu metinli açık arka plan. Varsayılan.
'dark'tp--darkAçık metinli koyu arka plan.

Her iki tema da arka plan bulanıklığı ve hafif saydamlık içeren cam efektli çubuk tasarımını kullanır.


CSS Özel Özellikleri

Widget, tek tek sınıflara dokunmadan renkleri değiştirmek için geçersiz kılabileceğiniz CSS özel özelliklerini (değişkenlerini) sunar. Bunlar, .tp-widget köküne uygulanan tema sınıfı (.tp--light veya .tp--dark) tarafından tanımlanır:

ÖzellikVarsayılan (açık)Varsayılan (koyu)Açıklama
--tp-accent#000#fffVurgu rengi: başlat düğmesi, dalga biçimi çubukları, bağlanma noktası, bağlı durum metni. primaryColor prop'u aracılığıyla satır içi olarak ayarlanır.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Çubuk arka planı (yarı saydam; --tp-glass tarafından bulanıklaştırılır).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Sessize alma düğmesi arka planı.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Sessize alma düğmesinin üzerine gelindiğindeki arka planı.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Çubuk ve düğme kenarlıkları.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Üzerine gelindiğindeki kenarlık rengi.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Birincil metin (başlık, ajan adı).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)İkincil metin (alt başlık, durum satırı, arama zamanlayıcısı).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)Çubuk üzerinde cam efektini oluşturan backdrop-filter.
--tp-shadowüç katmanlı gölge yığınıüç katmanlı gölge yığınıÇubuğun box-shadow değeri (halka + yakın + uzak katmanlar).
--tp-shadow-hoverüç katmanlı gölge yığınıüç katmanlı gölge yığınıÜzerine gelindiğinde yükselme efekti için tanımlanmıştır; şu anda hiçbir kural tarafından uygulanmaz.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)Çubuk gölgesine katman olarak eklenen iç üst vurgulama.
--tp-connected#059669#34d399Bağlı durum göstergesi rengi (durum noktası).
--tp-error#dc2626#fb7185Hata durumu metin rengi.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Aramayı sonlandır düğmesi arka planı.
--tp-end-color#ef4444#fb7185Aramayı sonlandır düğmesi simge rengi.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Aramayı sonlandır düğmesi kenarlığı.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Aramayı sonlandır düğmesinin üzerine gelindiğindeki arka planı.
--tp-idle-opacity0.40.3Boşta durumunda karartma için tanımlanmıştır; şu anda hiçbir kural tarafından uygulanmaz.

Özel Özellikleri Geçersiz Kılma

Vurgu rengini primaryColor prop'u aracılığıyla ayarlayın:

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

Diğer özel özellikleri CSS ile geçersiz kılın. Stil sayfası sırasından bağımsız olarak kuralınızın varsayılanları tanımlayan tema sınıfından daha yüksek önceliğe sahip olması için iki sınıflı bir seçici (.tp-widget.tp--light / .tp-widget.tp--dark) kullanın:

.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 Sınıfları

Mevcut stillerinizle çakışmaları önlemek için tüm widget sınıfları tp- ile başlar.

SınıfÖğeAçıklama
.tp-widgetKök sarmalayıcıSabit konumlu kapsayıcı (position: fixed, köşe position prop'u tarafından ayarlanır, z-index: 9999). Tema sınıfını ve temel yazı tipi ayarlarını taşır; kendine ait görsel bir çerçevesi yoktur.
.tp--light / .tp--darkTema değiştiricileriTemayla birlikte .tp-widget öğesine uygulanır; tüm --tp-* özel özelliklerini tanımlar.
.tp-barÇubukCam görünümlü hap şeklinin kendisi: arka plan, arka plan bulanıklığı, kenarlık, 99px yarıçap, gölge. 300px genişliğindedir.
.tp-metaMetin bloğuTüm metinlerin kapsayıcısıdır -- boşta başlık ve alt başlık, arama sırasında ajan adı ve durum.
.tp-nameBirincil etiketBoştayken title prop'unu, arama sırasında ise bağlı yapay zeka ajanının adını (title yedek olarak kullanılır) gösterir.
.tp-subAlt başlıkBoştayken gösterilen "Şimdi kullanılabilir" satırı.
.tp-startBoşta arama düğmesiDairesel vurgu renkli başlatma düğmesi (42px). Arka plan olarak --tp-accent kullanır.
.tp-dotBağlanma noktasıBağlanırken çubuğun solunda gösterilen, titreşimli vurgu renkli nokta.
.tp-wave / .tp-wave--idleDalga formuBeş çubuklu dalga formu. --idle yavaş nefes alma animasyonunu ekler; arama sırasında çubuklar sese duyarlıdır.
.tp-buttonArama sırasındaki düğmelerArama sırasındaki kontroller için temel stil (42px, yuvarlatılmış 12px).
.tp-button-groupDüğme satırıArama sırasında sessize alma ve sonlandırma düğmelerini sarar.
.tp-button--startBağlan düğmesi varyantıArama başlatılırken gösterilen vurgu renkli varyant.
.tp-button--muteSessize alma anahtarıArama sırasında mikrofonu sessize alır/sessizi kaldırır. --tp-surface kullanır.
.tp-button--endAramayı sonlandır düğmesiAramayı kapatır. --tp-end-* paletini kullanır.
.tp-button--loadingYükleme değiştiricisiBağlanırken düğmeyi soluklaştırır.
.tp-icon / .tp-spinSimgelerDüğme simgesi boyutlandırması; tp-spin bağlanma yükleme simgesini canlandırır.
.tp-statusArama sırasındaki durum bloğuBağlanıyor/bağlı/hata durumları sırasında durum satırını sarar.
.tp-status__textDurum satırıBağlantı durumu metni (ör. "Bağlanıyor...") veya arama zamanlayıcısı. Duruma göre .tp-status--connected (vurgu rengi) ya da .tp-status--error (hata rengi) alır.
.tp-status__nameAjan adı alanıDurum bloğunun bir parçasıdır, ancak mevcut çubuk düzeninde görüntülenmez -- ajan adı bunun yerine .tp-name içinde görünür.
.tp-status__dotDurum noktasıTitreşimli bağlı durum noktası stili (--tp-connected kullanır).

Örnekler

Props ile Özel Vurgu Rengi

Widget'ı markanıza uyarlamanın en basit yolu:

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

CSS ile Özel Renkler

Renkleri tamamen kontrol etmek için özel özellikleri geçersiz kılın. Vurgu renginin CSS'den değil, primaryColor prop'undan geldiğini unutmayın:

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

Özel Boyut

Çubuk, düğme ve metin boyutlarını ayarlayarak widget'ı büyütün veya küçültün:

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

Metin Etiketlerini Gizleme

Widget'taki tüm metinler .tp-meta içinde bulunur. Yalnızca dalga formunu ve düğmeleri bırakmak için bunu tamamen gizleyin:

.tp-meta {
  display: none;
}

Ya da tek tek bölümleri gizleyin:

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

Temaya Özgü Geçersiz Kılmalar

Tema sınıfıyla belirli bir temayı hedefleyin:

/* 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 ile Kapsam Belirleme

React bileşenini kullanırken, geçersiz kılmalarınızı belirli bir widget örneğiyle sınırlamak için bir className prop'u geçirin:

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

Ardından CSS'nizde bu sınıfı hedefleyin:

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

Bu sayede aynı sayfada farklı stillere sahip birden fazla widget örneği kullanabilirsiniz. Her örneğe primaryColor prop'u üzerinden kendi vurgu rengini verin (CSS, --tp-accent özelliğini geçersiz kılamaz -- bu özellik satır içi olarak ayarlanır).


Tamamen Özel Arayüz

CSS geçersiz kılmaları yeterli değilse headless hook size tam kontrol sağlar. Tüm HTML'yi ve stillendirmeyi siz sağlarken, useThunderPhone ses oturumunu yönetir. Hook ayrıca dalga formları gibi sese tepki veren görselleştirmeler oluşturmak için audioLevelRef sağlar.

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