Стилови

Виџет се приказује као стакласта трака са уграђеним светлом и тамним темама. Прилагођавање је доступно на три нивоа: пропси за уобичајене опције, CSS прилагођена својства за теме и замене CSS класа за потпуну контролу.


Теме

Пропс theme контролише шему боја виџета. Примењује класу tp--light или tp--dark на корен виџета:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
ТемаКласаОпис
'light'tp--lightСветла позадина са тамним текстом. Подразумевано.
'dark'tp--darkТамна позадина са светлим текстом.

Обе теме користе дизајн стакласте траке са замућењем позадине и суптилном провидношћу.


CSS прилагођена својства

Виџет излаже CSS прилагођена својства (променљиве) која можете заменити да бисте променили боје без измене појединачних класа. Дефинисана су класом теме (.tp--light или .tp--dark) примењеном на корен .tp-widget:

СвојствоПодразумевано (светло)Подразумевано (тамно)Опис
--tp-accent#000#fffБоја наглашавања: дугме за почетак, траке таласног облика, тачка повезивања, текст статуса повезивања. Поставља се уграђено преко својства primaryColor.
--tp-bgrgba(255, 255, 255, 0.82)rgba(15, 15, 15, 0.85)Позадина траке (полупрозирна; замућена помоћу --tp-glass).
--tp-surfacergba(0, 0, 0, 0.04)rgba(255, 255, 255, 0.07)Позадина дугмета за искључивање звука.
--tp-surface-hoverrgba(0, 0, 0, 0.07)rgba(255, 255, 255, 0.12)Позадина при преласку показивачем преко дугмета за искључивање звука.
--tp-borderrgba(0, 0, 0, 0.08)rgba(255, 255, 255, 0.1)Ивице траке и дугмади.
--tp-border-hoverrgba(0, 0, 0, 0.14)rgba(255, 255, 255, 0.18)Боја ивице при преласку показивачем.
--tp-textrgba(0, 0, 0, 0.88)rgba(255, 255, 255, 0.95)Примарни текст (наслов, име агента).
--tp-text-2rgba(0, 0, 0, 0.5)rgba(255, 255, 255, 0.55)Секундарни текст (поднаслов, статусни ред, тајмер позива).
--tp-glassblur(32px) saturate(180%)blur(32px) saturate(180%)backdrop-filter који ствара ефекат стакла на траци.
--tp-shadowсенка у три слојасенка у три слојаbox-shadow траке (слојеви прстена + блиски + удаљени).
--tp-shadow-hoverсенка у три слојасенка у три слојаДефинисано за подизање при преласку показивачем; тренутно се не примењује ниједним правилом.
--tp-glowinset 0 1px 0 0 rgba(255,255,255,0.5)inset 0 1px 0 0 rgba(255,255,255,0.06)Унутрашње горње истицање слојевито додато сенци траке.
--tp-connected#059669#34d399Боја индикатора стања повезаности (статусна тачка).
--tp-error#dc2626#fb7185Боја текста статуса грешке.
--tp-end-bgrgba(239, 68, 68, 0.08)rgba(251, 113, 133, 0.12)Позадина дугмета за прекид позива.
--tp-end-color#ef4444#fb7185Боја иконе дугмета за прекид позива.
--tp-end-borderrgba(239, 68, 68, 0.12)rgba(251, 113, 133, 0.15)Ивица дугмета за прекид позива.
--tp-end-hoverrgba(239, 68, 68, 0.14)rgba(251, 113, 133, 0.2)Позадина дугмета за прекид позива при преласку показивачем.
--tp-idle-opacity0.40.3Дефинисано за затамњивање у неактивном стању; тренутно се не примењује ниједним правилом.

Замена прилагођених својстава

Поставите боју наглашавања преко својства primaryColor:

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

Замените остала прилагођена својства помоћу CSS-а. Користите селектор са две класе (.tp-widget.tp--light / .tp-widget.tp--dark) како би ваше правило имало предност над класом теме која дефинише подразумеване вредности, без обзира на редослед стилских листова:

.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 класе

Све класе виџета имају префикс tp- како би се избегли сукоби са вашим постојећим стиловима.

КласаЕлементОпис
.tp-widgetОсновни омотачКонтејнер са фиксном позицијом (position: fixed, угао се поставља пропом position, z-index: 9999). Садржи класу теме и основна подешавања фонта; нема сопствени визуелни оквир.
.tp--light / .tp--darkМодификатори темеПримењују се на .tp-widget уз тему; дефинишу сва --tp-* прилагођена својства.
.tp-barТракаСам стакласти елемент у облику пилуле: позадина, замућење позадине, ивица, полупречник 99px, сенка. Ширине 300px.
.tp-metaТекстуални блокКонтејнер за сав текст -- наслов и поднаслов у стању мировања, име агента и статус током позива.
.tp-nameПримарна ознакаПриказује проп title у стању мировања, а име повезаног агента (са резервном вредношћу title) током позива.
.tp-subПоднасловРед „Доступно сада“ који се приказује у стању мировања.
.tp-startДугме за позив у стању мировањаКружно акцентно дугме за покретање (42px). Користи --tp-accent као позадину.
.tp-dotТачка повезивањаПулсирајућа акцентна тачка приказана лево од траке током повезивања.
.tp-wave / .tp-wave--idleТаласни обликТаласни облик са пет трака. --idle додаје спору анимацију дисања; током позива траке реагују на звук.
.tp-buttonДугмад током позиваОсновни стил за контроле током позива (42px, заобљени углови од 12px).
.tp-button-groupРед дугмадиОбухвата дугмад за утишавање и прекид током позива.
.tp-button--startВаријанта дугмета за повезивањеВаријанта у акцентној боји приказана док се позив покреће.
.tp-button--muteПрекидач за утишавањеУтишава/укључује микрофон током позива. Користи --tp-surface.
.tp-button--endДугме за прекид позиваПрекида позив. Користи палету --tp-end-*.
.tp-button--loadingМодификатор учитавањаЗатамњује дугме током повезивања.
.tp-icon / .tp-spinИконеВеличина иконе дугмета; tp-spin анимира индикатор повезивања.
.tp-statusБлок статуса током позиваОбухвата ред статуса током стања повезивања/повезаности/грешке.
.tp-status__textРед статусаТекст стања повезивања (нпр. „Повезивање...“) или тајмер позива. Добија .tp-status--connected (акцентна боја) или .tp-status--error (боја грешке) у зависности од стања.
.tp-status__nameМесто за име агентаДео блока статуса, али се не приказује у тренутном распореду траке -- име агента се уместо тога приказује у .tp-name.
.tp-status__dotТачка статусаСтил пулсирајуће тачке за стање повезаности (користи --tp-connected).

Примери

Прилагођена акцентна боја путем пропса

Најједноставнији начин да брендирате виџет:

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

Прилагођене боје путем CSS-а

Замените прилагођена својства за потпуну контролу боја. Имајте на уму да акцентна боја долази из пропса primaryColor, а не из 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);
}

Прилагођена величина

Повећајте или смањите виџет прилагођавањем димензија траке, дугмади и текста:

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

Сакријте текстуалне ознаке

Сав текст виџета налази се у .tp-meta. У потпуности га сакријте да бисте задржали само таласни облик и дугмад:

.tp-meta {
  display: none;
}

Или сакријте појединачне делове:

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

Замене специфичне за тему

Циљајте одређену тему помоћу класе теме:

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

Када користите React компоненту, проследите пропс className да бисте ограничили замене на одређену инстанцу виџета:

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

Затим циљајте ту класу у свом CSS-у:

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

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

Ово вам омогућава да на истој страници имате више инстанци виџета са различитим стиловима. Свакој инстанци доделите сопствену акцентну боју путем њеног пропса primaryColor (CSS не може да замени --tp-accent -- постављен је уметнуто).


Потпуно прилагођен UI

Ако CSS замене нису довољне, headless hook вам пружа потпуну контролу. Ви обезбеђујете сав HTML и стилизовање, док useThunderPhone управља гласовном сесијом. Hook такође обезбеђује audioLevelRef за израду визуелизација које реагују на звук, као што су таласни облици.

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