| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 | import { createContext, useContext } from 'use-context-selector'import { hexToRGBA } from './utils'export class Theme {  public chatColorTheme: string | null  public chatColorThemeInverted: boolean  public primaryColor = '#1C64F2'  public backgroundHeaderColorStyle = 'backgroundImage: linear-gradient(to right, #2563eb, #0ea5e9)'  public headerBorderBottomStyle = ''  public colorFontOnHeaderStyle = 'color: white'  public colorPathOnHeader = 'white'  public backgroundButtonDefaultColorStyle = 'backgroundColor: #1C64F2'  public roundedBackgroundColorStyle = 'backgroundColor: rgb(245 248 255)'  public chatBubbleColorStyle = 'backgroundColor: rgb(225 239 254)'  public chatBubbleColor = 'rgb(225 239 254)'  constructor(chatColorTheme: string | null = null, chatColorThemeInverted = false) {    this.chatColorTheme = chatColorTheme    this.chatColorThemeInverted = chatColorThemeInverted    this.configCustomColor()    this.configInvertedColor()  }  private configCustomColor() {    if (this.chatColorTheme !== null && this.chatColorTheme !== '') {      this.primaryColor = this.chatColorTheme ?? '#1C64F2'      this.backgroundHeaderColorStyle = `backgroundColor: ${this.primaryColor}`      this.backgroundButtonDefaultColorStyle = `backgroundColor: ${this.primaryColor}; color: ${this.colorFontOnHeaderStyle};`      this.roundedBackgroundColorStyle = `backgroundColor: ${hexToRGBA(this.primaryColor, 0.05)}`      this.chatBubbleColorStyle = `backgroundColor: ${hexToRGBA(this.primaryColor, 0.15)}`      this.chatBubbleColor = `${hexToRGBA(this.primaryColor, 0.15)}`    }  }  private configInvertedColor() {    if (this.chatColorThemeInverted) {      this.backgroundHeaderColorStyle = 'backgroundColor: #ffffff'      this.colorFontOnHeaderStyle = `color: ${this.primaryColor}`      this.headerBorderBottomStyle = 'borderBottom: 1px solid #ccc'      this.colorPathOnHeader = this.primaryColor    }  }}export class ThemeBuilder {  private _theme?: Theme  private buildChecker = false  public get theme() {    if (this._theme === undefined)      throw new Error('The theme should be built first and then accessed')    else      return this._theme  }  public buildTheme(chatColorTheme: string | null = null, chatColorThemeInverted = false) {    if (!this.buildChecker) {      this._theme = new Theme(chatColorTheme, chatColorThemeInverted)      this.buildChecker = true    }    else {      if (this.theme?.chatColorTheme !== chatColorTheme || this.theme?.chatColorThemeInverted !== chatColorThemeInverted) {        this._theme = new Theme(chatColorTheme, chatColorThemeInverted)        this.buildChecker = true      }    }  }}const ThemeContext = createContext<ThemeBuilder>(new ThemeBuilder())export const useThemeContext = () => useContext(ThemeContext)
 |