Стилови
Виџет се приказује као стакласта трака са уграђеним светлом и тамним темама. Прилагођавање је доступно на три нивоа: пропси за уобичајене опције, 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-bg | rgba(255, 255, 255, 0.82) | rgba(15, 15, 15, 0.85) | Позадина траке (полупрозирна; замућена помоћу --tp-glass). |
--tp-surface | rgba(0, 0, 0, 0.04) | rgba(255, 255, 255, 0.07) | Позадина дугмета за искључивање звука. |
--tp-surface-hover | rgba(0, 0, 0, 0.07) | rgba(255, 255, 255, 0.12) | Позадина при преласку показивачем преко дугмета за искључивање звука. |
--tp-border | rgba(0, 0, 0, 0.08) | rgba(255, 255, 255, 0.1) | Ивице траке и дугмади. |
--tp-border-hover | rgba(0, 0, 0, 0.14) | rgba(255, 255, 255, 0.18) | Боја ивице при преласку показивачем. |
--tp-text | rgba(0, 0, 0, 0.88) | rgba(255, 255, 255, 0.95) | Примарни текст (наслов, име агента). |
--tp-text-2 | rgba(0, 0, 0, 0.5) | rgba(255, 255, 255, 0.55) | Секундарни текст (поднаслов, статусни ред, тајмер позива). |
--tp-glass | blur(32px) saturate(180%) | blur(32px) saturate(180%) | backdrop-filter који ствара ефекат стакла на траци. |
--tp-shadow | сенка у три слоја | сенка у три слоја | box-shadow траке (слојеви прстена + блиски + удаљени). |
--tp-shadow-hover | сенка у три слоја | сенка у три слоја | Дефинисано за подизање при преласку показивачем; тренутно се не примењује ниједним правилом. |
--tp-glow | inset 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-bg | rgba(239, 68, 68, 0.08) | rgba(251, 113, 133, 0.12) | Позадина дугмета за прекид позива. |
--tp-end-color | #ef4444 | #fb7185 | Боја иконе дугмета за прекид позива. |
--tp-end-border | rgba(239, 68, 68, 0.12) | rgba(251, 113, 133, 0.15) | Ивица дугмета за прекид позива. |
--tp-end-hover | rgba(239, 68, 68, 0.14) | rgba(251, 113, 133, 0.2) | Позадина дугмета за прекид позива при преласку показивачем. |
--tp-idle-opacity | 0.4 | 0.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>
)
}