Στυλ

Το widget αποδίδεται ως μπάρα με εφέ γυαλιού και ενσωματωμένα φωτεινά και σκούρα θέματα. Η προσαρμογή είναι διαθέσιμη σε τρία επίπεδα: props για συνήθεις επιλογές, προσαρμοσμένες ιδιότητες CSS για θεματοποίηση και παρακάμψεις κλάσεων CSS για πλήρη έλεγχο.


Θέματα

Το prop theme ελέγχει το συνδυασμό χρωμάτων του widget. Εφαρμόζει μια κλάση tp--light ή tp--dark στη ρίζα του widget:

<ThunderPhoneWidget
  publishableKey="pk_live_your_publishable_key"
  theme="dark"
/>
ΘέμαΚλάσηΠεριγραφή
'light'tp--lightΑνοιχτό φόντο με σκούρο κείμενο. Προεπιλογή.
'dark'tp--darkΣκούρο φόντο με ανοιχτό κείμενο.

Και τα δύο θέματα χρησιμοποιούν τον σχεδιασμό μπάρας με εφέ γυαλιού, με θόλωση φόντου και διακριτική διαφάνεια.


Προσαρμοσμένες ιδιότητες CSS

Το widget εκθέτει προσαρμοσμένες ιδιότητες CSS (μεταβλητές) τις οποίες μπορείτε να παρακάμψετε για να αλλάξετε χρώματα χωρίς να τροποποιήσετε μεμονωμένες κλάσεις. Ορίζονται από την κλάση θέματος (.tp--light ή .tp--dark) που εφαρμόζεται στη ρίζα .tp-widget:

ΙδιότηταΠροεπιλογή (ανοιχτό)Προεπιλογή (σκούρο)Περιγραφή
--tp-accent#000#fffΧρώμα έμφασης: κουμπί έναρξης, μπάρες κυματομορφής, κουκκίδα σύνδεσης, κείμενο κατάστασης σύνδεσης. Ορίζεται ενσωματωμένα από το prop 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Δηλώνεται για μείωση φωτεινότητας σε κατάσταση αδράνειας· δεν εφαρμόζεται επί του παρόντος από κανέναν κανόνα.

Παράκαμψη προσαρμοσμένων ιδιοτήτων

Ορίστε το χρώμα έμφασης μέσω του prop primaryColor:

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

Παρακάμψτε τις άλλες προσαρμοσμένες ιδιότητες με CSS. Χρησιμοποιήστε έναν επιλογέα δύο κλάσεων (.tp-widget.tp--light / .tp-widget.tp--dark), ώστε ο κανόνας σας να υπερισχύει της κλάσης θέματος που ορίζει τις προεπιλογές, ανεξάρτητα από τη σειρά του stylesheet:

.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

Όλες οι κλάσεις widget έχουν το πρόθεμα tp- για την αποφυγή διενέξεων με τα υπάρχοντα στυλ σας.

ΚλάσηΣτοιχείοΠεριγραφή
.tp-widgetΡιζικό περιτύλιγμαΠεριέκτης σταθερής θέσης (position: fixed, η γωνία ορίζεται από το prop position, z-index: 9999). Περιλαμβάνει την κλάση θέματος και τις βασικές ρυθμίσεις γραμματοσειράς· δεν έχει δική του οπτική διακόσμηση.
.tp--light / .tp--darkΤροποποιητές θέματοςΕφαρμόζονται στο .tp-widget μαζί με το θέμα· ορίζουν όλες τις προσαρμοσμένες ιδιότητες --tp-*.
.tp-barΗ μπάραΤο ίδιο το γυάλινο χάπι: φόντο, θόλωση παρασκηνίου, περίγραμμα, ακτίνα 99px, σκιά. Πλάτος 300px.
.tp-metaΜπλοκ κειμένουΠεριέκτης για όλο το κείμενο -- τίτλο και υπότιτλο σε αδράνεια, όνομα και κατάσταση πράκτορα κατά τη διάρκεια κλήσης.
.tp-nameΚύρια ετικέταΕμφανίζει το prop 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 -- ορίζεται ενσωματωμένα).


Πλήρως προσαρμοσμένο περιβάλλον χρήστη

Αν οι παρακάμψεις CSS δεν επαρκούν, ο γάντζος χωρίς διεπαφή σας παρέχει πλήρη έλεγχο. Παρέχετε όλη την HTML και τη διαμόρφωση, ενώ το useThunderPhone διαχειρίζεται τη φωνητική συνεδρία. Ο γάντζος παρέχει επίσης το 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>
  )
}